summaryrefslogtreecommitdiffstats
path: root/node_modules/node-gyp
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-18 23:26:45 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-18 23:26:45 +0100
commit81ddf9b700bc48a1f8e472209f080f9c1d9a9b09 (patch)
tree8b959d50c5a614cbf9fcb346ed556140374d4b6d /node_modules/node-gyp
parent1870f3fdf43707a15fda0f609a021f516f45eb63 (diff)
downloadwebsite_creator-81ddf9b700bc48a1f8e472209f080f9c1d9a9b09.tar.gz
website_creator-81ddf9b700bc48a1f8e472209f080f9c1d9a9b09.tar.bz2
website_creator-81ddf9b700bc48a1f8e472209f080f9c1d9a9b09.zip
rm node_modules
Diffstat (limited to 'node_modules/node-gyp')
-rw-r--r--node_modules/node-gyp/.github/ISSUE_TEMPLATE.md26
-rw-r--r--node_modules/node-gyp/.github/PULL_REQUEST_TEMPLATE.md17
-rw-r--r--node_modules/node-gyp/.jshintrc7
-rw-r--r--node_modules/node-gyp/CHANGELOG.md227
-rw-r--r--node_modules/node-gyp/CONTRIBUTING.md34
-rw-r--r--node_modules/node-gyp/LICENSE24
-rw-r--r--node_modules/node-gyp/README.md244
-rw-r--r--node_modules/node-gyp/addon.gypi147
-rwxr-xr-xnode_modules/node-gyp/bin/node-gyp.js148
-rw-r--r--node_modules/node-gyp/gyp/AUTHORS13
-rw-r--r--node_modules/node-gyp/gyp/DEPS24
-rw-r--r--node_modules/node-gyp/gyp/LICENSE27
-rw-r--r--node_modules/node-gyp/gyp/OWNERS1
-rw-r--r--node_modules/node-gyp/gyp/PRESUBMIT.py139
-rw-r--r--node_modules/node-gyp/gyp/codereview.settings10
-rw-r--r--node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc12
-rwxr-xr-xnode_modules/node-gyp/gyp/gyp8
-rw-r--r--node_modules/node-gyp/gyp/gyp.bat5
-rwxr-xr-xnode_modules/node-gyp/gyp/gyp_main.py16
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py340
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py208
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py1096
-rwxr-xr-xnode_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py1483
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py58
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py147
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py270
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py443
-rwxr-xr-xnode_modules/node-gyp/gyp/pylib/gyp/__init__.py548
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/__init__.pycbin16376 -> 0 bytes
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/common.py612
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/common.pycbin19171 -> 0 bytes
-rwxr-xr-xnode_modules/node-gyp/gyp/pylib/gyp/common_test.py72
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py162
-rwxr-xr-xnode_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py103
-rwxr-xr-xnode_modules/node-gyp/gyp/pylib/gyp/flock_tool.py54
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py0
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.pycbin177 -> 0 bytes
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py741
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/android.py1095
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py1221
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py99
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py425
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py94
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py56
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/make.py2263
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/make.pycbin70562 -> 0 bytes
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py3494
-rwxr-xr-xnode_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py37
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py2422
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py47
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py1300
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py23
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/input.py2902
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/input.pycbin64116 -> 0 bytes
-rwxr-xr-xnode_modules/node-gyp/gyp/pylib/gyp/input_test.py90
-rwxr-xr-xnode_modules/node-gyp/gyp/pylib/gyp/mac_tool.py610
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py1087
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py160
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/ordered_dict.py289
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py46
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/simple_copy.pycbin2190 -> 0 bytes
-rwxr-xr-xnode_modules/node-gyp/gyp/pylib/gyp/win_tool.py314
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py1653
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.pycbin62349 -> 0 bytes
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py270
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py2927
-rw-r--r--node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py69
-rwxr-xr-xnode_modules/node-gyp/gyp/samples/samples81
-rw-r--r--node_modules/node-gyp/gyp/samples/samples.bat5
-rwxr-xr-xnode_modules/node-gyp/gyp/setup.py19
-rw-r--r--node_modules/node-gyp/gyp/tools/README15
-rw-r--r--node_modules/node-gyp/gyp/tools/Xcode/README5
-rw-r--r--node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.pbfilespec27
-rw-r--r--node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec226
-rw-r--r--node_modules/node-gyp/gyp/tools/emacs/README12
-rw-r--r--node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el63
-rw-r--r--node_modules/node-gyp/gyp/tools/emacs/gyp.el275
-rwxr-xr-xnode_modules/node-gyp/gyp/tools/emacs/run-unit-tests.sh7
-rw-r--r--node_modules/node-gyp/gyp/tools/emacs/testdata/media.gyp1105
-rw-r--r--node_modules/node-gyp/gyp/tools/emacs/testdata/media.gyp.fontified1107
-rwxr-xr-xnode_modules/node-gyp/gyp/tools/graphviz.py100
-rwxr-xr-xnode_modules/node-gyp/gyp/tools/pretty_gyp.py155
-rwxr-xr-xnode_modules/node-gyp/gyp/tools/pretty_sln.py169
-rwxr-xr-xnode_modules/node-gyp/gyp/tools/pretty_vcproj.py329
-rw-r--r--node_modules/node-gyp/lib/Find-VS2017.cs273
-rw-r--r--node_modules/node-gyp/lib/build.js270
-rw-r--r--node_modules/node-gyp/lib/clean.js22
-rw-r--r--node_modules/node-gyp/lib/configure.js524
-rw-r--r--node_modules/node-gyp/lib/find-node-directory.js61
-rw-r--r--node_modules/node-gyp/lib/find-vs2017.js46
-rw-r--r--node_modules/node-gyp/lib/install.js475
-rw-r--r--node_modules/node-gyp/lib/list.js33
-rw-r--r--node_modules/node-gyp/lib/node-gyp.js216
-rw-r--r--node_modules/node-gyp/lib/process-release.js155
-rw-r--r--node_modules/node-gyp/lib/rebuild.js14
-rw-r--r--node_modules/node-gyp/lib/remove.js52
l---------node_modules/node-gyp/node_modules/.bin/rimraf1
l---------node_modules/node-gyp/node_modules/.bin/semver1
-rw-r--r--node_modules/node-gyp/node_modules/rimraf/LICENSE15
-rw-r--r--node_modules/node-gyp/node_modules/rimraf/README.md101
-rwxr-xr-xnode_modules/node-gyp/node_modules/rimraf/bin.js50
-rw-r--r--node_modules/node-gyp/node_modules/rimraf/package.json67
-rw-r--r--node_modules/node-gyp/node_modules/rimraf/rimraf.js372
-rw-r--r--node_modules/node-gyp/node_modules/semver/LICENSE15
-rw-r--r--node_modules/node-gyp/node_modules/semver/README.md350
-rwxr-xr-xnode_modules/node-gyp/node_modules/semver/bin/semver133
-rw-r--r--node_modules/node-gyp/node_modules/semver/package.json54
-rw-r--r--node_modules/node-gyp/node_modules/semver/range.bnf16
-rw-r--r--node_modules/node-gyp/node_modules/semver/semver.js1203
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/0471d9cf-687f-4ae8-84a5-ce7468becd03.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/12bca2bc-6a2b-4f45-abc7-8483922a524d.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/37d58de4-deea-4808-bb77-d27685bd1501.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/5ad8066b-6b8c-4bc8-b807-c40bf80898b7.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/5cbf674c-7089-4b7d-b9de-2119be4dbb0b.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/7853e29b-78ef-4ab4-b8fb-e1e176c0787b.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/9d414044-b18d-4f6d-b2e0-531a89bf6f4f.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/c3ffeb8c-8e79-4a2c-b678-e5a917fe721e.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/ea0194cb-f599-402f-8876-84fb8251e8db.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/eda6b7a3-5e15-440f-8619-e11a15a07f77.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/fb518800-240c-42ff-811f-79e92708d9db.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/fdecfc06-a944-4897-9530-e08f62883fc1.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/0471d9cf-687f-4ae8-84a5-ce7468becd03.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/12bca2bc-6a2b-4f45-abc7-8483922a524d.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/37d58de4-deea-4808-bb77-d27685bd1501.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/5ad8066b-6b8c-4bc8-b807-c40bf80898b7.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/5cbf674c-7089-4b7d-b9de-2119be4dbb0b.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/7853e29b-78ef-4ab4-b8fb-e1e176c0787b.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/9d414044-b18d-4f6d-b2e0-531a89bf6f4f.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/c3ffeb8c-8e79-4a2c-b678-e5a917fe721e.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/ea0194cb-f599-402f-8876-84fb8251e8db.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/eda6b7a3-5e15-440f-8619-e11a15a07f77.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/fb518800-240c-42ff-811f-79e92708d9db.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/fdecfc06-a944-4897-9530-e08f62883fc1.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/index.json1
-rw-r--r--node_modules/node-gyp/node_modules/tar/.travis.yml4
-rw-r--r--node_modules/node-gyp/node_modules/tar/LICENSE12
-rw-r--r--node_modules/node-gyp/node_modules/tar/README.md50
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/base.css212
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/index.html106
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/prettify.css1
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/prettify.js1
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/sort-arrow-sprite.pngbin209 -> 0 bytes
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/sorter.js158
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/index.html93
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/index.js.html119
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/create.js.html380
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/extract.js.html401
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/header.js.html881
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/high-level-opt.js.html152
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/index.html314
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/large-numbers.js.html341
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/list.js.html449
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/mkdir.js.html686
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/pack.js.html1268
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/parse.js.html1310
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/pax.js.html500
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/read-entry.js.html347
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/replace.js.html722
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/types.js.html197
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/unpack.js.html1604
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/update.js.html173
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/warn-mixin.js.html107
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/winchars.js.html134
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/write-entry.js.html1268
-rw-r--r--node_modules/node-gyp/node_modules/tar/coverage/lcov.info3690
-rw-r--r--node_modules/node-gyp/node_modules/tar/examples/extracter.js19
-rw-r--r--node_modules/node-gyp/node_modules/tar/examples/packer.js24
-rw-r--r--node_modules/node-gyp/node_modules/tar/examples/reader.js36
-rw-r--r--node_modules/node-gyp/node_modules/tar/lib/buffer-entry.js30
-rw-r--r--node_modules/node-gyp/node_modules/tar/lib/entry-writer.js169
-rw-r--r--node_modules/node-gyp/node_modules/tar/lib/entry.js220
-rw-r--r--node_modules/node-gyp/node_modules/tar/lib/extended-header-writer.js191
-rw-r--r--node_modules/node-gyp/node_modules/tar/lib/extended-header.js140
-rw-r--r--node_modules/node-gyp/node_modules/tar/lib/extract.js94
-rw-r--r--node_modules/node-gyp/node_modules/tar/lib/global-header-writer.js14
-rw-r--r--node_modules/node-gyp/node_modules/tar/lib/header.js385
-rw-r--r--node_modules/node-gyp/node_modules/tar/lib/pack.js236
-rw-r--r--node_modules/node-gyp/node_modules/tar/lib/parse.js281
-rw-r--r--node_modules/node-gyp/node_modules/tar/package.json59
-rw-r--r--node_modules/node-gyp/node_modules/tar/tar.js173
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/00-setup-fixtures.js53
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/cb-never-called-1.0.1.tgzbin4096 -> 0 bytes
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/dir-normalization.js177
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/dir-normalization.tarbin4608 -> 0 bytes
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/error-on-broken.js33
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/extract-move.js132
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/extract.js367
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/fixtures.tgzbin19352 -> 0 bytes
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/header.js183
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/link-file-entry-collision.js39
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/link-file-entry-collision/bad-link.hex25
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/link-file-entry-collision/bad-link.tarbin3584 -> 0 bytes
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/pack-no-proprietary.js886
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/pack.js952
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/parse-discard.js29
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/parse.js359
-rw-r--r--node_modules/node-gyp/node_modules/tar/test/zz-cleanup.js20
-rw-r--r--node_modules/node-gyp/package.json90
-rw-r--r--node_modules/node-gyp/src/win_delay_load_hook.cc36
-rwxr-xr-xnode_modules/node-gyp/test/docker.sh164
-rw-r--r--node_modules/node-gyp/test/fixtures/ca-bundle.crt40
-rw-r--r--node_modules/node-gyp/test/fixtures/ca.crt21
-rw-r--r--node_modules/node-gyp/test/fixtures/server.crt19
-rw-r--r--node_modules/node-gyp/test/fixtures/server.key28
-rw-r--r--node_modules/node-gyp/test/fixtures/test-charmap.py22
-rw-r--r--node_modules/node-gyp/test/process-exec-sync.js138
-rw-r--r--node_modules/node-gyp/test/simple-proxy.js24
-rw-r--r--node_modules/node-gyp/test/test-addon.js113
-rw-r--r--node_modules/node-gyp/test/test-configure-python.js74
-rw-r--r--node_modules/node-gyp/test/test-download.js102
-rw-r--r--node_modules/node-gyp/test/test-find-accessible-sync.js86
-rw-r--r--node_modules/node-gyp/test/test-find-node-directory.js115
-rw-r--r--node_modules/node-gyp/test/test-find-python.js339
-rw-r--r--node_modules/node-gyp/test/test-install.js37
-rw-r--r--node_modules/node-gyp/test/test-options.js25
-rw-r--r--node_modules/node-gyp/test/test-process-release.js637
-rw-r--r--node_modules/node-gyp/tools/gyp/pylib/gyp/generator/compile_commands_json.py115
217 files changed, 0 insertions, 61934 deletions
diff --git a/node_modules/node-gyp/.github/ISSUE_TEMPLATE.md b/node_modules/node-gyp/.github/ISSUE_TEMPLATE.md
deleted file mode 100644
index dbd053a..0000000
--- a/node_modules/node-gyp/.github/ISSUE_TEMPLATE.md
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-Thank you for reporting an issue. The more information you can give us, the
-better the chance we can fix your problem.
-
-This issue tracker is for issues with node-gyp,
-if you have an issue installing a specific module, please file an issue on
-that module's issue tracker (`npm issues modulename`).
--->
-
-* **Node Version**: <!-- `node -v` and `npm -v` -->
-* **Platform**: <!-- `uname -a` (UNIX), or `systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"` (Windows) -->
-* **Compiler**: <!-- `cc -v` (UNIX) or `msbuild /version & cl` (Windows) -->
-* **Module**: <!-- what you tried to build/install -->
-
-<details><summary>Verbose output (from npm or node-gyp):</summary>
-
-<!-- Paste your log between the backticks. Contents of npm-debug.log or verbose build output -->
-
-```
-
-```
-
-</details>
-
-<!-- Any further details -->
-
diff --git a/node_modules/node-gyp/.github/PULL_REQUEST_TEMPLATE.md b/node_modules/node-gyp/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 10156d8..0000000
--- a/node_modules/node-gyp/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-Thank you for your pull request. Please review the below requirements.
-
-Contributor guide: https://github.com/nodejs/node/blob/master/CONTRIBUTING.md
--->
-
-##### Checklist
-<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->
-
-- [ ] `npm install && npm test` passes
-- [ ] tests are included <!-- Bug fixes and new features should include tests -->
-- [ ] documentation is changed or added
-- [ ] commit message follows [commit guidelines](https://github.com/nodejs/node/blob/master/doc/guides/contributing/pull-requests.md#commit-message-guidelines)
-
-##### Description of change
-<!-- Provide a description of the change -->
-
diff --git a/node_modules/node-gyp/.jshintrc b/node_modules/node-gyp/.jshintrc
deleted file mode 100644
index 52475ba..0000000
--- a/node_modules/node-gyp/.jshintrc
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "asi": true,
- "laxcomma": true,
- "es5": true,
- "node": true,
- "strict": false
-}
diff --git a/node_modules/node-gyp/CHANGELOG.md b/node_modules/node-gyp/CHANGELOG.md
deleted file mode 100644
index 33bbfad..0000000
--- a/node_modules/node-gyp/CHANGELOG.md
+++ /dev/null
@@ -1,227 +0,0 @@
-v3.8.0 2018-08-09
-=================
-
-* [[`c5929cb4fe`](https://github.com/nodejs/node-gyp/commit/c5929cb4fe)] - **doc**: update Xcode preferences tab name. (Ivan Daniluk) [#1330](https://github.com/nodejs/node-gyp/pull/1330)
-* [[`8b488da8b9`](https://github.com/nodejs/node-gyp/commit/8b488da8b9)] - **doc**: update link to commit guidelines (Jonas Hermsmeier) [#1456](https://github.com/nodejs/node-gyp/pull/1456)
-* [[`b4fe8c16f9`](https://github.com/nodejs/node-gyp/commit/b4fe8c16f9)] - **doc**: fix visual studio links (Bartosz Sosnowski) [#1490](https://github.com/nodejs/node-gyp/pull/1490)
-* [[`536759c7e9`](https://github.com/nodejs/node-gyp/commit/536759c7e9)] - **configure**: use sys.version\_info to get python version (Yang Guo) [#1504](https://github.com/nodejs/node-gyp/pull/1504)
-* [[`94c39c604e`](https://github.com/nodejs/node-gyp/commit/94c39c604e)] - **gyp**: fix ninja build failure (GYP patch) (Daniel Bevenius) [nodejs/node#12484](https://github.com/nodejs/node/pull/12484)
-* [[`e8ea74e0fa`](https://github.com/nodejs/node-gyp/commit/e8ea74e0fa)] - **tools**: patch gyp to avoid xcrun errors (Ujjwal Sharma) [nodejs/node#21520](https://github.com/nodejs/node/pull/21520)
-* [[`ea9aff44f2`](https://github.com/nodejs/node-gyp/commit/ea9aff44f2)] - **tools**: fix "the the" typos in comments (Masashi Hirano) [nodejs/node#20716](https://github.com/nodejs/node/pull/20716)
-* [[`207e5aa4fd`](https://github.com/nodejs/node-gyp/commit/207e5aa4fd)] - **gyp**: implement LD/LDXX for ninja and FIPS (Sam Roberts)
-* [[`b416c5f4b7`](https://github.com/nodejs/node-gyp/commit/b416c5f4b7)] - **gyp**: enable cctest to use objects (gyp part) (Daniel Bevenius) [nodejs/node#12450](https://github.com/nodejs/node/pull/12450)
-* [[`40692d016b`](https://github.com/nodejs/node-gyp/commit/40692d016b)] - **gyp**: add compile\_commands.json gyp generator (Ben Noordhuis) [nodejs/node#12450](https://github.com/nodejs/node/pull/12450)
-* [[`fc3c4e2b10`](https://github.com/nodejs/node-gyp/commit/fc3c4e2b10)] - **gyp**: float gyp patch for long filenames (Anna Henningsen) [nodejs/node#7963](https://github.com/nodejs/node/pull/7963)
-* [[`8aedbfdef6`](https://github.com/nodejs/node-gyp/commit/8aedbfdef6)] - **gyp**: backport GYP fix to fix AIX shared suffix (Stewart Addison)
-* [[`6cd84b84fc`](https://github.com/nodejs/node-gyp/commit/6cd84b84fc)] - **test**: formatting and minor fixes for execFileSync replacement (Rod Vagg) [#1521](https://github.com/nodejs/node-gyp/pull/1521)
-* [[`60e421363f`](https://github.com/nodejs/node-gyp/commit/60e421363f)] - **test**: added test/processExecSync.js for when execFileSync is not available. (Rohit Hazra) [#1492](https://github.com/nodejs/node-gyp/pull/1492)
-* [[`969447c5bd`](https://github.com/nodejs/node-gyp/commit/969447c5bd)] - **deps**: bump request to 2.8.7, fixes heok/hawk issues (Rohit Hazra) [#1492](https://github.com/nodejs/node-gyp/pull/1492)
-* [[`340403ccfe`](https://github.com/nodejs/node-gyp/commit/340403ccfe)] - **win**: improve parsing of SDK version (Alessandro Vergani) [#1516](https://github.com/nodejs/node-gyp/pull/1516)
-
-v3.7.0 2018-06-08
-=================
-
-* [[`84cea7b30d`](https://github.com/nodejs/node-gyp/commit/84cea7b30d)] - Remove unused gyp test scripts. (Ben Noordhuis) [#1458](https://github.com/nodejs/node-gyp/pull/1458)
-* [[`0540e4ec63`](https://github.com/nodejs/node-gyp/commit/0540e4ec63)] - **gyp**: escape spaces in filenames in make generator (Jeff Senn) [#1436](https://github.com/nodejs/node-gyp/pull/1436)
-* [[`88fc6fa0ec`](https://github.com/nodejs/node-gyp/commit/88fc6fa0ec)] - Drop dependency on minimatch. (Brian Woodward) [#1158](https://github.com/nodejs/node-gyp/pull/1158)
-* [[`1e203c5148`](https://github.com/nodejs/node-gyp/commit/1e203c5148)] - Fix include path when pointing to Node.js source (Richard Lau) [#1055](https://github.com/nodejs/node-gyp/pull/1055)
-* [[`53d8cb967c`](https://github.com/nodejs/node-gyp/commit/53d8cb967c)] - Prefix build targets with /t: on Windows (Natalie Wolfe) [#1164](https://github.com/nodejs/node-gyp/pull/1164)
-* [[`53a5f8ff38`](https://github.com/nodejs/node-gyp/commit/53a5f8ff38)] - **gyp**: add support for .mm files to msvs generator (Julien Racle) [#1167](https://github.com/nodejs/node-gyp/pull/1167)
-* [[`dd8561e528`](https://github.com/nodejs/node-gyp/commit/dd8561e528)] - **zos**: don't use universal-new-lines mode (John Barboza) [#1451](https://github.com/nodejs/node-gyp/pull/1451)
-* [[`e5a69010ed`](https://github.com/nodejs/node-gyp/commit/e5a69010ed)] - **zos**: add search locations for libnode.x (John Barboza) [#1451](https://github.com/nodejs/node-gyp/pull/1451)
-* [[`79febace53`](https://github.com/nodejs/node-gyp/commit/79febace53)] - **doc**: update macOS information in README (Josh Parnham) [#1323](https://github.com/nodejs/node-gyp/pull/1323)
-* [[`9425448945`](https://github.com/nodejs/node-gyp/commit/9425448945)] - **gyp**: don't print xcodebuild not found errors (Gibson Fahnestock) [#1370](https://github.com/nodejs/node-gyp/pull/1370)
-* [[`6f1286f5b2`](https://github.com/nodejs/node-gyp/commit/6f1286f5b2)] - Fix infinite install loop. (Ben Noordhuis) [#1384](https://github.com/nodejs/node-gyp/pull/1384)
-* [[`2580b9139e`](https://github.com/nodejs/node-gyp/commit/2580b9139e)] - Update `--nodedir` description in README. (Ben Noordhuis) [#1372](https://github.com/nodejs/node-gyp/pull/1372)
-* [[`a61360391a`](https://github.com/nodejs/node-gyp/commit/a61360391a)] - Update README with another way to install on windows (JeffAtDeere) [#1352](https://github.com/nodejs/node-gyp/pull/1352)
-* [[`47496bf6dc`](https://github.com/nodejs/node-gyp/commit/47496bf6dc)] - Fix IndexError when parsing GYP files. (Ben Noordhuis) [#1267](https://github.com/nodejs/node-gyp/pull/1267)
-* [[`b2024dee7b`](https://github.com/nodejs/node-gyp/commit/b2024dee7b)] - **zos**: support platform (John Barboza) [#1276](https://github.com/nodejs/node-gyp/pull/1276)
-* [[`90d86512f4`](https://github.com/nodejs/node-gyp/commit/90d86512f4)] - **win**: run PS with `-NoProfile` (Refael Ackermann) [#1292](https://github.com/nodejs/node-gyp/pull/1292)
-* [[`2da5f86ef7`](https://github.com/nodejs/node-gyp/commit/2da5f86ef7)] - **doc**: add github PR and Issue templates (Gibson Fahnestock) [#1228](https://github.com/nodejs/node-gyp/pull/1228)
-* [[`a46a770d68`](https://github.com/nodejs/node-gyp/commit/a46a770d68)] - **doc**: update proposed DCO and CoC (Mikeal Rogers) [#1229](https://github.com/nodejs/node-gyp/pull/1229)
-* [[`7e803d58e0`](https://github.com/nodejs/node-gyp/commit/7e803d58e0)] - **doc**: headerify the Install instructions (Nick Schonning) [#1225](https://github.com/nodejs/node-gyp/pull/1225)
-* [[`f27599193a`](https://github.com/nodejs/node-gyp/commit/f27599193a)] - **gyp**: update xml string encoding conversion (Liu Chao) [#1203](https://github.com/nodejs/node-gyp/pull/1203)
-* [[`0a07e481f7`](https://github.com/nodejs/node-gyp/commit/0a07e481f7)] - **configure**: don't set ensure if tarball is set (Gibson Fahnestock) [#1220](https://github.com/nodejs/node-gyp/pull/1220)
-
-v3.6.3 2018-06-08
-=================
-
-* [[`90cd2e8da9`](https://github.com/nodejs/node-gyp/commit/90cd2e8da9)] - **gyp**: fix regex to match multi-digit versions (Jonas Hermsmeier) [#1455](https://github.com/nodejs/node-gyp/pull/1455)
-* [[`7900122337`](https://github.com/nodejs/node-gyp/commit/7900122337)] - deps: pin `request` version range (Refael Ackerman) [#1300](https://github.com/nodejs/node-gyp/pull/1300)
-
-v3.6.2 2017-06-01
-=================
-
-* [[`72afdd62cd`](https://github.com/nodejs/node-gyp/commit/72afdd62cd)] - **build**: rename copyNodeLib() to doBuild() (Liu Chao) [#1206](https://github.com/nodejs/node-gyp/pull/1206)
-* [[`bad903ac70`](https://github.com/nodejs/node-gyp/commit/bad903ac70)] - **win**: more robust parsing of SDK version (Refael Ackermann) [#1198](https://github.com/nodejs/node-gyp/pull/1198)
-* [[`241752f381`](https://github.com/nodejs/node-gyp/commit/241752f381)] - Log dist-url. (Ben Noordhuis) [#1170](https://github.com/nodejs/node-gyp/pull/1170)
-* [[`386746c7d1`](https://github.com/nodejs/node-gyp/commit/386746c7d1)] - **configure**: use full path in node_lib_file GYP var (Pavel Medvedev) [#964](https://github.com/nodejs/node-gyp/pull/964)
-* [[`0913b2dd99`](https://github.com/nodejs/node-gyp/commit/0913b2dd99)] - **build, win**: use target_arch to link with node.lib (Pavel Medvedev) [#964](https://github.com/nodejs/node-gyp/pull/964)
-* [[`c307b302f7`](https://github.com/nodejs/node-gyp/commit/c307b302f7)] - **doc**: blorb about setting `npm_config_OPTION_NAME` (Refael Ackermann) [#1185](https://github.com/nodejs/node-gyp/pull/1185)
-
-v3.6.1 2017-04-30
-=================
-
-* [[`49801716c2`](https://github.com/nodejs/node-gyp/commit/49801716c2)] - **test**: fix test-find-python on v0.10.x buildbot. (Ben Noordhuis) [#1172](https://github.com/nodejs/node-gyp/pull/1172)
-* [[`a83a3801fc`](https://github.com/nodejs/node-gyp/commit/a83a3801fc)] - **test**: fix test/test-configure-python on AIX (Richard Lau) [#1131](https://github.com/nodejs/node-gyp/pull/1131)
-* [[`8a767145c9`](https://github.com/nodejs/node-gyp/commit/8a767145c9)] - **gyp**: Revert quote_cmd workaround (Kunal Pathak) [#1153](https://github.com/nodejs/node-gyp/pull/1153)
-* [[`c09cf7671e`](https://github.com/nodejs/node-gyp/commit/c09cf7671e)] - **doc**: add a note for using `configure` on Windows (Vse Mozhet Byt) [#1152](https://github.com/nodejs/node-gyp/pull/1152)
-* [[`da9cb5f411`](https://github.com/nodejs/node-gyp/commit/da9cb5f411)] - Delete superfluous .patch files. (Ben Noordhuis) [#1122](https://github.com/nodejs/node-gyp/pull/1122)
-
-v3.6.0 2017-03-16
-=================
-
-* [[`ae141e1906`](https://github.com/nodejs/node-gyp/commit/ae141e1906)] - **win**: find and setup for VS2017 (Refael Ackermann) [#1130](https://github.com/nodejs/node-gyp/pull/1130)
-* [[`ec5fc36a80`](https://github.com/nodejs/node-gyp/commit/ec5fc36a80)] - Add support to build node.js with chakracore for ARM. (Kunal Pathak) [#873](https://github.com/nodejs/node-gyp/pull/873)
-* [[`a04ea3051a`](https://github.com/nodejs/node-gyp/commit/a04ea3051a)] - Add support to build node.js with chakracore. (Kunal Pathak) [#873](https://github.com/nodejs/node-gyp/pull/873)
-* [[`93d7fa83c8`](https://github.com/nodejs/node-gyp/commit/93d7fa83c8)] - Upgrade semver dependency. (Ben Noordhuis) [#1107](https://github.com/nodejs/node-gyp/pull/1107)
-* [[`ff9a6fadfd`](https://github.com/nodejs/node-gyp/commit/ff9a6fadfd)] - Update link of gyp as Google code is shutting down (Peter Dave Hello) [#1061](https://github.com/nodejs/node-gyp/pull/1061)
-
-
-v3.5.0 2017-01-10
-=================
-
-* [[`762d19a39e`](https://github.com/nodejs/node-gyp/commit/762d19a39e)] - \[doc\] merge History.md and CHANGELOG.md (Rod Vagg)
-* [[`80fc5c3d31`](https://github.com/nodejs/node-gyp/commit/80fc5c3d31)] - Fix deprecated dependency warning (Simone Primarosa) [#1069](https://github.com/nodejs/node-gyp/pull/1069)
-* [[`05c44944fd`](https://github.com/nodejs/node-gyp/commit/05c44944fd)] - Open the build file with universal-newlines mode (Guy Margalit) [#1053](https://github.com/nodejs/node-gyp/pull/1053)
-* [[`37ae7be114`](https://github.com/nodejs/node-gyp/commit/37ae7be114)] - Try python launcher when stock python is python 3. (Ben Noordhuis) [#992](https://github.com/nodejs/node-gyp/pull/992)
-* [[`e3778d9907`](https://github.com/nodejs/node-gyp/commit/e3778d9907)] - Add lots of findPython() tests. (Ben Noordhuis) [#992](https://github.com/nodejs/node-gyp/pull/992)
-* [[`afc766adf6`](https://github.com/nodejs/node-gyp/commit/afc766adf6)] - Unset executable bit for .bat files (Pavel Medvedev) [#969](https://github.com/nodejs/node-gyp/pull/969)
-* [[`ddac348991`](https://github.com/nodejs/node-gyp/commit/ddac348991)] - Use push on PYTHONPATH and add tests (Michael Hart) [#990](https://github.com/nodejs/node-gyp/pull/990)
-* [[`b182a19042`](https://github.com/nodejs/node-gyp/commit/b182a19042)] - ***Revert*** "add "path-array" dep" (Michael Hart) [#990](https://github.com/nodejs/node-gyp/pull/990)
-* [[`7c08b85c5a`](https://github.com/nodejs/node-gyp/commit/7c08b85c5a)] - ***Revert*** "**configure**: use "path-array" for PYTHONPATH" (Michael Hart) [#990](https://github.com/nodejs/node-gyp/pull/990)
-* [[`9c8d275526`](https://github.com/nodejs/node-gyp/commit/9c8d275526)] - Add --devdir flag. (Ben Noordhuis) [#916](https://github.com/nodejs/node-gyp/pull/916)
-* [[`f6eab1f9e4`](https://github.com/nodejs/node-gyp/commit/f6eab1f9e4)] - **doc**: add windows-build-tools to readme (Felix Rieseberg) [#970](https://github.com/nodejs/node-gyp/pull/970)
-
-v3.4.0 2016-06-28
-=================
-
-* [[`ce5fd04e94`](https://github.com/nodejs/node-gyp/commit/ce5fd04e94)] - **deps**: update minimatch version (delphiactual) [#961](https://github.com/nodejs/node-gyp/pull/961)
-* [[`77383ddd85`](https://github.com/nodejs/node-gyp/commit/77383ddd85)] - Replace fs.accessSync call to fs.statSync (Richard Lau) [#955](https://github.com/nodejs/node-gyp/pull/955)
-* [[`0dba4bda57`](https://github.com/nodejs/node-gyp/commit/0dba4bda57)] - **test**: add simple addon test (Richard Lau) [#955](https://github.com/nodejs/node-gyp/pull/955)
-* [[`c4344b3889`](https://github.com/nodejs/node-gyp/commit/c4344b3889)] - **doc**: add --target option to README (Gibson Fahnestock) [#958](https://github.com/nodejs/node-gyp/pull/958)
-* [[`cc778e9215`](https://github.com/nodejs/node-gyp/commit/cc778e9215)] - Override BUILDING_UV_SHARED, BUILDING_V8_SHARED. (Ben Noordhuis) [#915](https://github.com/nodejs/node-gyp/pull/915)
-* [[`af35b2ad32`](https://github.com/nodejs/node-gyp/commit/af35b2ad32)] - Move VC++ Build Tools to Build Tools landing page. (Andrew Pardoe) [#953](https://github.com/nodejs/node-gyp/pull/953)
-* [[`f31482e226`](https://github.com/nodejs/node-gyp/commit/f31482e226)] - **win**: work around __pfnDliNotifyHook2 type change (Alexis Campailla) [#952](https://github.com/nodejs/node-gyp/pull/952)
-* [[`3df8222fa5`](https://github.com/nodejs/node-gyp/commit/3df8222fa5)] - Allow for npmlog@3.x (Rebecca Turner) [#950](https://github.com/nodejs/node-gyp/pull/950)
-* [[`a4fa07b390`](https://github.com/nodejs/node-gyp/commit/a4fa07b390)] - More verbose error on locating msbuild.exe failure. (Mateusz Jaworski) [#930](https://github.com/nodejs/node-gyp/pull/930)
-* [[`4ee31329e0`](https://github.com/nodejs/node-gyp/commit/4ee31329e0)] - **doc**: add command options to README.md (Gibson Fahnestock) [#937](https://github.com/nodejs/node-gyp/pull/937)
-* [[`c8c7ca86b9`](https://github.com/nodejs/node-gyp/commit/c8c7ca86b9)] - Add --silent option for zero output. (Gibson Fahnestock) [#937](https://github.com/nodejs/node-gyp/pull/937)
-* [[`ac29d23a7c`](https://github.com/nodejs/node-gyp/commit/ac29d23a7c)] - Upgrade to glob@7.0.3. (Ben Noordhuis) [#943](https://github.com/nodejs/node-gyp/pull/943)
-* [[`15fd56be3d`](https://github.com/nodejs/node-gyp/commit/15fd56be3d)] - Enable V8 deprecation warnings for native modules (Matt Loring) [#920](https://github.com/nodejs/node-gyp/pull/920)
-* [[`7f1c1b960c`](https://github.com/nodejs/node-gyp/commit/7f1c1b960c)] - **gyp**: improvements for android generator (Robert Chiras) [#935](https://github.com/nodejs/node-gyp/pull/935)
-* [[`088082766c`](https://github.com/nodejs/node-gyp/commit/088082766c)] - Update Windows install instructions (Sara Itani) [#867](https://github.com/nodejs/node-gyp/pull/867)
-* [[`625c1515f9`](https://github.com/nodejs/node-gyp/commit/625c1515f9)] - **gyp**: inherit CC/CXX for CC/CXX.host (Johan Bergström) [#908](https://github.com/nodejs/node-gyp/pull/908)
-* [[`3bcb1720e4`](https://github.com/nodejs/node-gyp/commit/3bcb1720e4)] - Add support for the Python launcher on Windows (Patrick Westerhoff) [#894](https://github.com/nodejs/node-gyp/pull/894
-
-v3.3.1 2016-03-04
-=================
-
-* [[`a981ef847a`](https://github.com/nodejs/node-gyp/commit/a981ef847a)] - **gyp**: fix android generator (Robert Chiras) [#889](https://github.com/nodejs/node-gyp/pull/889)
-
-v3.3.0 2016-02-16
-=================
-
-* [[`818d854a4d`](https://github.com/nodejs/node-gyp/commit/818d854a4d)] - Introduce NODEJS_ORG_MIRROR and IOJS_ORG_MIRROR (Rod Vagg) [#878](https://github.com/nodejs/node-gyp/pull/878)
-* [[`d1e4cc4b62`](https://github.com/nodejs/node-gyp/commit/d1e4cc4b62)] - **(SEMVER-MINOR)** Download headers tarball for ~0.12.10 || ~0.10.42 (Rod Vagg) [#877](https://github.com/nodejs/node-gyp/pull/877)
-* [[`6e28ad1bea`](https://github.com/nodejs/node-gyp/commit/6e28ad1bea)] - Allow for npmlog@2.x (Rebecca Turner) [#861](https://github.com/nodejs/node-gyp/pull/861)
-* [[`07371e5812`](https://github.com/nodejs/node-gyp/commit/07371e5812)] - Use -fPIC for NetBSD. (Marcin Cieślak) [#856](https://github.com/nodejs/node-gyp/pull/856)
-* [[`8c4b0ffa50`](https://github.com/nodejs/node-gyp/commit/8c4b0ffa50)] - **(SEMVER-MINOR)** Add --cafile command line option. (Ben Noordhuis) [#837](https://github.com/nodejs/node-gyp/pull/837)
-* [[`b3ad43498e`](https://github.com/nodejs/node-gyp/commit/b3ad43498e)] - **(SEMVER-MINOR)** Make download() function testable. (Ben Noordhuis) [#837](https://github.com/nodejs/node-gyp/pull/837)
-
-v3.2.1 2015-12-03
-=================
-
-* [[`ab89b477c4`](https://github.com/nodejs/node-gyp/commit/ab89b477c4)] - Upgrade gyp to b3cef02. (Ben Noordhuis) [#831](https://github.com/nodejs/node-gyp/pull/831)
-* [[`90078ecb17`](https://github.com/nodejs/node-gyp/commit/90078ecb17)] - Define WIN32_LEAN_AND_MEAN conditionally. (Ben Noordhuis) [#824](https://github.com/nodejs/node-gyp/pull/824)
-
-v3.2.0 2015-11-25
-=================
-
-* [[`268f1ca4c7`](https://github.com/nodejs/node-gyp/commit/268f1ca4c7)] - Use result of `which` when searching for python. (Refael Ackermann) [#668](https://github.com/nodejs/node-gyp/pull/668)
-* [[`817ed9bd78`](https://github.com/nodejs/node-gyp/commit/817ed9bd78)] - Add test for python executable search logic. (Ben Noordhuis) [#756](https://github.com/nodejs/node-gyp/pull/756)
-* [[`0e2dfda1f3`](https://github.com/nodejs/node-gyp/commit/0e2dfda1f3)] - Fix test/test-options when run through `npm test`. (Ben Noordhuis) [#755](https://github.com/nodejs/node-gyp/pull/755)
-* [[`9bfa0876b4`](https://github.com/nodejs/node-gyp/commit/9bfa0876b4)] - Add support for AIX (Michael Dawson) [#753](https://github.com/nodejs/node-gyp/pull/753)
-* [[`a8d441a0a2`](https://github.com/nodejs/node-gyp/commit/a8d441a0a2)] - Update README for Windows 10 support. (Jason Williams) [#766](https://github.com/nodejs/node-gyp/pull/766)
-* [[`d1d6015276`](https://github.com/nodejs/node-gyp/commit/d1d6015276)] - Update broken links and switch to HTTPS. (andrew morton)
-
-v3.1.0 2015-11-14
-=================
-
-* [[`9049241f91`](https://github.com/nodejs/node-gyp/commit/9049241f91)] - **gyp**: don't use links at all, just copy the files instead (Nathan Zadoks)
-* [[`8ef90348d1`](https://github.com/nodejs/node-gyp/commit/8ef90348d1)] - **gyp**: apply https://codereview.chromium.org/11361103/ (Nathan Rajlich)
-* [[`a2ed0df84e`](https://github.com/nodejs/node-gyp/commit/a2ed0df84e)] - **gyp**: always install into $PRODUCT_DIR (Nathan Rajlich)
-* [[`cc8b2fa83e`](https://github.com/nodejs/node-gyp/commit/cc8b2fa83e)] - Update gyp to b3cef02. (Imran Iqbal) [#781](https://github.com/nodejs/node-gyp/pull/781)
-* [[`f5d86eb84e`](https://github.com/nodejs/node-gyp/commit/f5d86eb84e)] - Update to tar@2.0.0. (Edgar Muentes) [#797](https://github.com/nodejs/node-gyp/pull/797)
-* [[`2ac7de02c4`](https://github.com/nodejs/node-gyp/commit/2ac7de02c4)] - Fix infinite loop with zero-length options. (Ben Noordhuis) [#745](https://github.com/nodejs/node-gyp/pull/745)
-* [[`101bed639b`](https://github.com/nodejs/node-gyp/commit/101bed639b)] - This platform value came from debian package, and now the value (Jérémy Lal) [#738](https://github.com/nodejs/node-gyp/pull/738)
-
-v3.0.3 2015-09-14
-=================
-
-* [[`ad827cda30`](https://github.com/nodejs/node-gyp/commit/ad827cda30)] - tarballUrl global and && when checking for iojs (Lars-Magnus Skog) [#729](https://github.com/nodejs/node-gyp/pull/729)
-
-v3.0.2 2015-09-12
-=================
-
-* [[`6e8c3bf3c6`](https://github.com/nodejs/node-gyp/commit/6e8c3bf3c6)] - add back support for passing additional cmdline args (Rod Vagg) [#723](https://github.com/nodejs/node-gyp/pull/723)
-* [[`ff82f2f3b9`](https://github.com/nodejs/node-gyp/commit/ff82f2f3b9)] - fixed broken link in docs to Visual Studio 2013 download (simon-p-r) [#722](https://github.com/nodejs/node-gyp/pull/722)
-
-v3.0.1 2015-09-08
-=================
-
-* [[`846337e36b`](https://github.com/nodejs/node-gyp/commit/846337e36b)] - normalise versions for target == this comparison (Rod Vagg) [#716](https://github.com/nodejs/node-gyp/pull/716)
-
-v3.0.0 2015-09-08
-=================
-
-* [[`9720d0373c`](https://github.com/nodejs/node-gyp/commit/9720d0373c)] - remove node_modules from tree (Rod Vagg) [#711](https://github.com/nodejs/node-gyp/pull/711)
-* [[`6dcf220db7`](https://github.com/nodejs/node-gyp/commit/6dcf220db7)] - test version major directly, don't use semver.satisfies() (Rod Vagg) [#711](https://github.com/nodejs/node-gyp/pull/711)
-* [[`938dd18d1c`](https://github.com/nodejs/node-gyp/commit/938dd18d1c)] - refactor for clarity, fix dist-url, add env var dist-url functionality (Rod Vagg) [#711](https://github.com/nodejs/node-gyp/pull/711)
-* [[`9e9df66a06`](https://github.com/nodejs/node-gyp/commit/9e9df66a06)] - use process.release, make aware of io.js & node v4 differences (Rod Vagg) [#711](https://github.com/nodejs/node-gyp/pull/711)
-* [[`1ea7ed01f4`](https://github.com/nodejs/node-gyp/commit/1ea7ed01f4)] - **deps**: update graceful-fs dependency to the latest (Sakthipriyan Vairamani) [#714](https://github.com/nodejs/node-gyp/pull/714)
-* [[`0fbc387b35`](https://github.com/nodejs/node-gyp/commit/0fbc387b35)] - Update repository URLs. (Ben Noordhuis) [#715](https://github.com/nodejs/node-gyp/pull/715)
-* [[`bbedb8868b`](https://github.com/nodejs/node-gyp/commit/bbedb8868b)] - **(SEMVER-MAJOR)** **win**: enable delay-load hook by default (Jeremiah Senkpiel) [#708](https://github.com/nodejs/node-gyp/pull/708)
-* [[`85ed107565`](https://github.com/nodejs/node-gyp/commit/85ed107565)] - Merge pull request #664 from othiym23/othiym23/allow-semver-5 (Nathan Rajlich)
-* [[`0c720d234c`](https://github.com/nodejs/node-gyp/commit/0c720d234c)] - allow semver@5 (Forrest L Norvell)
-
-2.0.2 / 2015-07-14
-==================
-
- * Use HTTPS for dist url (#656, @SonicHedgehog)
- * Merge pull request #648 from nevosegal/master
- * Merge pull request #650 from magic890/patch-1
- * Updated Installation section on README
- * Updated link to gyp user documentation
- * Fix download error message spelling (#643, @tomxtobin)
- * Merge pull request #637 from lygstate/master
- * Set NODE_GYP_DIR for addon.gypi to setting absolute path for
- src/win_delay_load_hook.c, and fixes of the long relative path issue on Win32.
- Fixes #636 (#637, @lygstate).
-
-2.0.1 / 2015-05-28
-==================
-
- * configure: try/catch the semver range.test() call
- * README: update for visual studio 2013 (#510, @samccone)
-
-2.0.0 / 2015-05-24
-==================
-
- * configure: check for python2 executable by default, fallback to python
- * configure: don't clobber existing $PYTHONPATH
- * configure: use "path-array" for PYTHONPATH
- * gyp: fix for non-acsii userprofile name on Windows
- * gyp: always install into $PRODUCT_DIR
- * gyp: apply https://codereview.chromium.org/11361103/
- * gyp: don't use links at all, just copy the files instead
- * gyp: update gyp to e1c8fcf7
- * Updated README.md with updated Windows build info
- * Show URL when a download fails
- * package: add a "license" field
- * move HMODULE m declaration to top
- * Only add "-undefined dynamic_lookup" to loadable_module targets
- * win: optionally allow node.exe/iojs.exe to be renamed
- * Avoid downloading shasums if using tarPath
- * Add target name preprocessor define: `NODE_GYP_MODULE_NAME`
- * Show better error message in case of bad network settings
diff --git a/node_modules/node-gyp/CONTRIBUTING.md b/node_modules/node-gyp/CONTRIBUTING.md
deleted file mode 100644
index f48786b..0000000
--- a/node_modules/node-gyp/CONTRIBUTING.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# Contributing to node-gyp
-
-## Code of Conduct
-
-Please read the
-[Code of Conduct](https://github.com/nodejs/TSC/blob/master/CODE_OF_CONDUCT.md)
-which explains the minimum behavior expectations for node-gyp contributors.
-
-<a id="developers-certificate-of-origin"></a>
-## Developer's Certificate of Origin 1.1
-
-By making a contribution to this project, I certify that:
-
-* (a) The contribution was created in whole or in part by me and I
- have the right to submit it under the open source license
- indicated in the file; or
-
-* (b) The contribution is based upon previous work that, to the best
- of my knowledge, is covered under an appropriate open source
- license and I have the right under that license to submit that
- work with modifications, whether created in whole or in part
- by me, under the same open source license (unless I am
- permitted to submit under a different license), as indicated
- in the file; or
-
-* (c) The contribution was provided directly to me by some other
- person who certified (a), (b) or (c) and I have not modified
- it.
-
-* (d) I understand and agree that this project and the contribution
- are public and that a record of the contribution (including all
- personal information I submit with it, including my sign-off) is
- maintained indefinitely and may be redistributed consistent with
- this project or the open source license(s) involved.
diff --git a/node_modules/node-gyp/LICENSE b/node_modules/node-gyp/LICENSE
deleted file mode 100644
index 2ea4dc5..0000000
--- a/node_modules/node-gyp/LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net>
-
-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/node_modules/node-gyp/README.md b/node_modules/node-gyp/README.md
deleted file mode 100644
index 0fed03c..0000000
--- a/node_modules/node-gyp/README.md
+++ /dev/null
@@ -1,244 +0,0 @@
-node-gyp
-=========
-## Node.js native addon build tool
-
-`node-gyp` is a cross-platform command-line tool written in Node.js for compiling
-native addon modules for Node.js. It bundles the [gyp](https://gyp.gsrc.io)
-project used by the Chromium team and takes away the pain of dealing with the
-various differences in build platforms. It is the replacement to the `node-waf`
-program which is removed for node `v0.8`. If you have a native addon for node that
-still has a `wscript` file, then you should definitely add a `binding.gyp` file
-to support the latest versions of node.
-
-Multiple target versions of node are supported (i.e. `0.8`, ..., `4`, `5`, `6`,
-etc.), regardless of what version of node is actually installed on your system
-(`node-gyp` downloads the necessary development files or headers for the target version).
-
-## Features
-
- * Easy to use, consistent interface
- * Same commands to build your module on every platform
- * Supports multiple target versions of Node
-
-
-Installation
-------------
-
-You can install with `npm`:
-
-``` bash
-$ npm install -g node-gyp
-```
-
-You will also need to install:
-
-### On Unix
-
- * `python` (`v2.7` recommended, `v3.x.x` is __*not*__ supported)
- * `make`
- * A proper C/C++ compiler toolchain, like [GCC](https://gcc.gnu.org)
-
-### On macOS
-
- * `python` (`v2.7` recommended, `v3.x.x` is __*not*__ supported) (already installed on macOS)
- * [Xcode](https://developer.apple.com/xcode/download/)
- * You also need to install the `Command Line Tools` via Xcode. You can find this under the menu `Xcode -> Preferences -> Locations` (or by running `xcode-select --install` in your Terminal)
- * This step will install `gcc` and the related toolchain containing `make`
-
-### On Windows
-
-#### Option 1
-
-Install all the required tools and configurations using Microsoft's [windows-build-tools](https://github.com/felixrieseberg/windows-build-tools) using `npm install --global --production windows-build-tools` from an elevated PowerShell or CMD.exe (run as Administrator).
-
-#### Option 2
-
-Install tools and configuration manually:
- * Install Visual C++ Build Environment: [Visual Studio Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools)
- (using "Visual C++ build tools" workload) or [Visual Studio 2017 Community](https://visualstudio.microsoft.com/pl/thank-you-downloading-visual-studio/?sku=Community)
- (using the "Desktop development with C++" workload)
- * Install [Python 2.7](https://www.python.org/downloads/) (`v3.x.x` is not supported), and run `npm config set python python2.7` (or see below for further instructions on specifying the proper Python version and path.)
- * Launch cmd, `npm config set msvs_version 2017`
-
- If the above steps didn't work for you, please visit [Microsoft's Node.js Guidelines for Windows](https://github.com/Microsoft/nodejs-guidelines/blob/master/windows-environment.md#compiling-native-addon-modules) for additional tips.
-
-If you have multiple Python versions installed, you can identify which Python
-version `node-gyp` uses by setting the '--python' variable:
-
-``` bash
-$ node-gyp --python /path/to/python2.7
-```
-
-If `node-gyp` is called by way of `npm` *and* you have multiple versions of
-Python installed, then you can set `npm`'s 'python' config key to the appropriate
-value:
-
-``` bash
-$ npm config set python /path/to/executable/python2.7
-```
-
-How to Use
-----------
-
-To compile your native addon, first go to its root directory:
-
-``` bash
-$ cd my_node_addon
-```
-
-The next step is to generate the appropriate project build files for the current
-platform. Use `configure` for that:
-
-``` bash
-$ node-gyp configure
-```
-
-Auto-detection fails for Visual C++ Build Tools 2015, so `--msvs_version=2015`
-needs to be added (not needed when run by npm as configured above):
-``` bash
-$ node-gyp configure --msvs_version=2015
-```
-
-__Note__: The `configure` step looks for the `binding.gyp` file in the current
-directory to process. See below for instructions on creating the `binding.gyp` file.
-
-Now you will have either a `Makefile` (on Unix platforms) or a `vcxproj` file
-(on Windows) in the `build/` directory. Next invoke the `build` command:
-
-``` bash
-$ node-gyp build
-```
-
-Now you have your compiled `.node` bindings file! The compiled bindings end up
-in `build/Debug/` or `build/Release/`, depending on the build mode. At this point
-you can require the `.node` file with Node and run your tests!
-
-__Note:__ To create a _Debug_ build of the bindings file, pass the `--debug` (or
-`-d`) switch when running either the `configure`, `build` or `rebuild` command.
-
-
-The "binding.gyp" file
-----------------------
-
-Previously when node had `node-waf` you had to write a `wscript` file. The
-replacement for that is the `binding.gyp` file, which describes the configuration
-to build your module in a JSON-like format. This file gets placed in the root of
-your package, alongside the `package.json` file.
-
-A barebones `gyp` file appropriate for building a node addon looks like:
-
-``` python
-{
- "targets": [
- {
- "target_name": "binding",
- "sources": [ "src/binding.cc" ]
- }
- ]
-}
-```
-
-Some additional resources for addons and writing `gyp` files:
-
- * ["Going Native" a nodeschool.io tutorial](http://nodeschool.io/#goingnative)
- * ["Hello World" node addon example](https://github.com/nodejs/node/tree/master/test/addons/hello-world)
- * [gyp user documentation](https://gyp.gsrc.io/docs/UserDocumentation.md)
- * [gyp input format reference](https://gyp.gsrc.io/docs/InputFormatReference.md)
- * [*"binding.gyp" files out in the wild* wiki page](https://github.com/nodejs/node-gyp/wiki/%22binding.gyp%22-files-out-in-the-wild)
-
-
-Commands
---------
-
-`node-gyp` responds to the following commands:
-
-| **Command** | **Description**
-|:--------------|:---------------------------------------------------------------
-| `help` | Shows the help dialog
-| `build` | Invokes `make`/`msbuild.exe` and builds the native addon
-| `clean` | Removes the `build` directory if it exists
-| `configure` | Generates project build files for the current platform
-| `rebuild` | Runs `clean`, `configure` and `build` all in a row
-| `install` | Installs node header files for the given version
-| `list` | Lists the currently installed node header versions
-| `remove` | Removes the node header files for the given version
-
-
-Command Options
---------
-
-`node-gyp` accepts the following command options:
-
-| **Command** | **Description**
-|:----------------------------------|:------------------------------------------
-| `-j n`, `--jobs n` | Run make in parallel
-| `--target=v6.2.1` | Node version to build for (default=process.version)
-| `--silly`, `--loglevel=silly` | Log all progress to console
-| `--verbose`, `--loglevel=verbose` | Log most progress to console
-| `--silent`, `--loglevel=silent` | Don't log anything to console
-| `debug`, `--debug` | Make Debug build (default=Release)
-| `--release`, `--no-debug` | Make Release build
-| `-C $dir`, `--directory=$dir` | Run command in different directory
-| `--make=$make` | Override make command (e.g. gmake)
-| `--thin=yes` | Enable thin static libraries
-| `--arch=$arch` | Set target architecture (e.g. ia32)
-| `--tarball=$path` | Get headers from a local tarball
-| `--devdir=$path` | SDK download directory (default=~/.node-gyp)
-| `--ensure` | Don't reinstall headers if already present
-| `--dist-url=$url` | Download header tarball from custom URL
-| `--proxy=$url` | Set HTTP proxy for downloading header tarball
-| `--cafile=$cafile` | Override default CA chain (to download tarball)
-| `--nodedir=$path` | Set the path to the node source code
-| `--python=$path` | Set path to the python (2) binary
-| `--msvs_version=$version` | Set Visual Studio version (win)
-| `--solution=$solution` | Set Visual Studio Solution version (win)
-
-
-Configuration
---------
-
-__`node-gyp` responds to environment variables or `npm` configuration__
-1. Environment variables take the form `npm_config_OPTION_NAME` for any of the
- options listed above (dashes in option names should be replaced by underscores).
- These work also when `node-gyp` is invoked directly:
- `$ export npm_config_devdir=/tmp/.gyp`
- or on Windows
- `> set npm_config_devdir=c:\temp\.gyp`
-2. As `npm` configuration, variables take the form `OPTION_NAME`.
- This way only works when `node-gyp` is executed by `npm`:
- `$ npm config set [--global] devdir /tmp/.gyp`
- `$ npm i buffertools`
-
-
-
-License
--------
-
-(The MIT License)
-
-Copyright (c) 2012 Nathan Rajlich &lt;nathan@tootallnate.net&gt;
-
-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.
-
-
-[python-v2.7.10]: https://www.python.org/downloads/release/python-2710/
-[msvc2013]: https://www.microsoft.com/en-gb/download/details.aspx?id=44914
-[win7sdk]: https://www.microsoft.com/en-us/download/details.aspx?id=8279
-[compiler update for the Windows SDK 7.1]: https://www.microsoft.com/en-us/download/details.aspx?id=4422
diff --git a/node_modules/node-gyp/addon.gypi b/node_modules/node-gyp/addon.gypi
deleted file mode 100644
index 55fb321..0000000
--- a/node_modules/node-gyp/addon.gypi
+++ /dev/null
@@ -1,147 +0,0 @@
-{
- 'variables' : {
- 'node_engine_include_dir%': 'deps/v8/include',
- },
- 'target_defaults': {
- 'type': 'loadable_module',
- 'win_delay_load_hook': 'true',
- 'product_prefix': '',
-
- 'conditions': [
- [ 'node_engine=="chakracore"', {
- 'variables': {
- 'node_engine_include_dir%': 'deps/chakrashim/include'
- },
- }]
- ],
-
- 'include_dirs': [
- '<(node_root_dir)/include/node',
- '<(node_root_dir)/src',
- '<(node_root_dir)/deps/openssl/config',
- '<(node_root_dir)/deps/openssl/openssl/include',
- '<(node_root_dir)/deps/uv/include',
- '<(node_root_dir)/deps/zlib',
- '<(node_root_dir)/<(node_engine_include_dir)'
- ],
- 'defines!': [
- 'BUILDING_UV_SHARED=1', # Inherited from common.gypi.
- 'BUILDING_V8_SHARED=1', # Inherited from common.gypi.
- ],
- 'defines': [
- 'NODE_GYP_MODULE_NAME=>(_target_name)',
- 'USING_UV_SHARED=1',
- 'USING_V8_SHARED=1',
- # Warn when using deprecated V8 APIs.
- 'V8_DEPRECATION_WARNINGS=1'
- ],
-
- 'target_conditions': [
- ['_type=="loadable_module"', {
- 'product_extension': 'node',
- 'defines': [
- 'BUILDING_NODE_EXTENSION'
- ],
- 'xcode_settings': {
- 'OTHER_LDFLAGS': [
- '-undefined dynamic_lookup'
- ],
- },
- }],
-
- ['_type=="static_library"', {
- # set to `1` to *disable* the -T thin archive 'ld' flag.
- # older linkers don't support this flag.
- 'standalone_static_library': '<(standalone_static_library)'
- }],
-
- ['_win_delay_load_hook=="true"', {
- # If the addon specifies `'win_delay_load_hook': 'true'` in its
- # binding.gyp, link a delay-load hook into the DLL. This hook ensures
- # that the addon will work regardless of whether the node/iojs binary
- # is named node.exe, iojs.exe, or something else.
- 'conditions': [
- [ 'OS=="win"', {
- 'sources': [
- '<(node_gyp_dir)/src/win_delay_load_hook.cc',
- ],
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'DelayLoadDLLs': [ 'iojs.exe', 'node.exe' ],
- # Don't print a linker warning when no imports from either .exe
- # are used.
- 'AdditionalOptions': [ '/ignore:4199' ],
- },
- },
- }],
- ],
- }],
- ],
-
- 'conditions': [
- [ 'OS=="mac"', {
- 'defines': [
- '_DARWIN_USE_64_BIT_INODE=1'
- ],
- 'xcode_settings': {
- 'DYLIB_INSTALL_NAME_BASE': '@rpath'
- },
- }],
- [ 'OS=="aix"', {
- 'ldflags': [
- '-Wl,-bimport:<(node_exp_file)'
- ],
- }],
- [ 'OS=="zos"', {
- 'cflags': [
- '-q64',
- '-Wc,DLL',
- '-qlonglong'
- ],
- 'ldflags': [
- '-q64',
- '<(node_exp_file)'
- ],
- }],
- [ 'OS=="win"', {
- 'conditions': [
- ['node_engine=="chakracore"', {
- 'library_dirs': [ '<(node_root_dir)/$(ConfigurationName)' ],
- 'libraries': [ '<@(node_engine_libs)' ],
- }],
- ],
- 'libraries': [
- '-lkernel32.lib',
- '-luser32.lib',
- '-lgdi32.lib',
- '-lwinspool.lib',
- '-lcomdlg32.lib',
- '-ladvapi32.lib',
- '-lshell32.lib',
- '-lole32.lib',
- '-loleaut32.lib',
- '-luuid.lib',
- '-lodbc32.lib',
- '-lDelayImp.lib',
- '-l"<(node_lib_file)"'
- ],
- 'msvs_disabled_warnings': [
- # warning C4251: 'node::ObjectWrap::handle_' : class 'v8::Persistent<T>'
- # needs to have dll-interface to be used by
- # clients of class 'node::ObjectWrap'
- 4251
- ],
- }, {
- # OS!="win"
- 'defines': [
- '_LARGEFILE_SOURCE',
- '_FILE_OFFSET_BITS=64'
- ],
- }],
- [ 'OS in "freebsd openbsd netbsd solaris" or \
- (OS=="linux" and target_arch!="ia32")', {
- 'cflags': [ '-fPIC' ],
- }]
- ]
- }
-}
diff --git a/node_modules/node-gyp/bin/node-gyp.js b/node_modules/node-gyp/bin/node-gyp.js
deleted file mode 100755
index 70d7d50..0000000
--- a/node_modules/node-gyp/bin/node-gyp.js
+++ /dev/null
@@ -1,148 +0,0 @@
-#!/usr/bin/env node
-
-/**
- * Set the title.
- */
-
-process.title = 'node-gyp'
-
-/**
- * Module dependencies.
- */
-
-var gyp = require('../')
-var log = require('npmlog')
-var osenv = require('osenv')
-var path = require('path')
-
-/**
- * Process and execute the selected commands.
- */
-
-var prog = gyp()
-var completed = false
-prog.parseArgv(process.argv)
-prog.devDir = prog.opts.devdir
-
-var homeDir = osenv.home()
-if (prog.devDir) {
- prog.devDir = prog.devDir.replace(/^~/, homeDir)
-} else if (homeDir) {
- prog.devDir = path.resolve(homeDir, '.node-gyp')
-} else {
- throw new Error(
- "node-gyp requires that the user's home directory is specified " +
- "in either of the environmental variables HOME or USERPROFILE. " +
- "Overide with: --devdir /path/to/.node-gyp")
-}
-
-if (prog.todo.length === 0) {
- if (~process.argv.indexOf('-v') || ~process.argv.indexOf('--version')) {
- console.log('v%s', prog.version)
- } else {
- console.log('%s', prog.usage())
- }
- return process.exit(0)
-}
-
-log.info('it worked if it ends with', 'ok')
-log.verbose('cli', process.argv)
-log.info('using', 'node-gyp@%s', prog.version)
-log.info('using', 'node@%s | %s | %s', process.versions.node, process.platform, process.arch)
-
-
-/**
- * Change dir if -C/--directory was passed.
- */
-
-var dir = prog.opts.directory
-if (dir) {
- var fs = require('fs')
- try {
- var stat = fs.statSync(dir)
- if (stat.isDirectory()) {
- log.info('chdir', dir)
- process.chdir(dir)
- } else {
- log.warn('chdir', dir + ' is not a directory')
- }
- } catch (e) {
- if (e.code === 'ENOENT') {
- log.warn('chdir', dir + ' is not a directory')
- } else {
- log.warn('chdir', 'error during chdir() "%s"', e.message)
- }
- }
-}
-
-function run () {
- var command = prog.todo.shift()
- if (!command) {
- // done!
- completed = true
- log.info('ok')
- return
- }
-
- prog.commands[command.name](command.args, function (err) {
- if (err) {
- log.error(command.name + ' error')
- log.error('stack', err.stack)
- errorMessage()
- log.error('not ok')
- return process.exit(1)
- }
- if (command.name == 'list') {
- var versions = arguments[1]
- if (versions.length > 0) {
- versions.forEach(function (version) {
- console.log(version)
- })
- } else {
- console.log('No node development files installed. Use `node-gyp install` to install a version.')
- }
- } else if (arguments.length >= 2) {
- console.log.apply(console, [].slice.call(arguments, 1))
- }
-
- // now run the next command in the queue
- process.nextTick(run)
- })
-}
-
-process.on('exit', function (code) {
- if (!completed && !code) {
- log.error('Completion callback never invoked!')
- issueMessage()
- process.exit(6)
- }
-})
-
-process.on('uncaughtException', function (err) {
- log.error('UNCAUGHT EXCEPTION')
- log.error('stack', err.stack)
- issueMessage()
- process.exit(7)
-})
-
-function errorMessage () {
- // copied from npm's lib/util/error-handler.js
- var os = require('os')
- log.error('System', os.type() + ' ' + os.release())
- log.error('command', process.argv
- .map(JSON.stringify).join(' '))
- log.error('cwd', process.cwd())
- log.error('node -v', process.version)
- log.error('node-gyp -v', 'v' + prog.package.version)
-}
-
-function issueMessage () {
- errorMessage()
- log.error('', [ 'This is a bug in `node-gyp`.'
- , 'Try to update node-gyp and file an Issue if it does not help:'
- , ' <https://github.com/nodejs/node-gyp/issues>'
- ].join('\n'))
-}
-
-// start running the given commands!
-run()
diff --git a/node_modules/node-gyp/gyp/AUTHORS b/node_modules/node-gyp/gyp/AUTHORS
deleted file mode 100644
index d76d8cd..0000000
--- a/node_modules/node-gyp/gyp/AUTHORS
+++ /dev/null
@@ -1,13 +0,0 @@
-# Names should be added to this file like so:
-# Name or Organization <email address>
-
-Google Inc. <*@google.com>
-Bloomberg Finance L.P. <*@bloomberg.net>
-IBM Inc. <*@*.ibm.com>
-Yandex LLC <*@yandex-team.ru>
-
-Steven Knight <knight@baldmt.com>
-Ryan Norton <rnorton10@gmail.com>
-David J. Sankel <david@sankelsoftware.com>
-Eric N. Vander Weele <ericvw@gmail.com>
-Tom Freudenberg <th.freudenberg@gmail.com>
diff --git a/node_modules/node-gyp/gyp/DEPS b/node_modules/node-gyp/gyp/DEPS
deleted file mode 100644
index 2e1120f..0000000
--- a/node_modules/node-gyp/gyp/DEPS
+++ /dev/null
@@ -1,24 +0,0 @@
-# DEPS file for gclient use in buildbot execution of gyp tests.
-#
-# (You don't need to use gclient for normal GYP development work.)
-
-vars = {
- "chrome_trunk": "http://src.chromium.org/svn/trunk",
- "googlecode_url": "http://%s.googlecode.com/svn",
-}
-
-deps = {
-}
-
-deps_os = {
- "win": {
- "third_party/cygwin":
- Var("chrome_trunk") + "/deps/third_party/cygwin@66844",
-
- "third_party/python_26":
- Var("chrome_trunk") + "/tools/third_party/python_26@89111",
-
- "src/third_party/pefile":
- (Var("googlecode_url") % "pefile") + "/trunk@63",
- },
-}
diff --git a/node_modules/node-gyp/gyp/LICENSE b/node_modules/node-gyp/gyp/LICENSE
deleted file mode 100644
index ab6b011..0000000
--- a/node_modules/node-gyp/gyp/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2009 Google Inc. 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.
diff --git a/node_modules/node-gyp/gyp/OWNERS b/node_modules/node-gyp/gyp/OWNERS
deleted file mode 100644
index 72e8ffc..0000000
--- a/node_modules/node-gyp/gyp/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/node_modules/node-gyp/gyp/PRESUBMIT.py b/node_modules/node-gyp/gyp/PRESUBMIT.py
deleted file mode 100644
index f6c8a35..0000000
--- a/node_modules/node-gyp/gyp/PRESUBMIT.py
+++ /dev/null
@@ -1,139 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-"""Top-level presubmit script for GYP.
-
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details about the presubmit API built into gcl.
-"""
-
-
-PYLINT_BLACKLIST = [
- # TODO: fix me.
- # From SCons, not done in google style.
- 'test/lib/TestCmd.py',
- 'test/lib/TestCommon.py',
- 'test/lib/TestGyp.py',
-]
-
-
-PYLINT_DISABLED_WARNINGS = [
- # TODO: fix me.
- # Many tests include modules they don't use.
- 'W0611',
- # Possible unbalanced tuple unpacking with sequence.
- 'W0632',
- # Attempting to unpack a non-sequence.
- 'W0633',
- # Include order doesn't properly include local files?
- 'F0401',
- # Some use of built-in names.
- 'W0622',
- # Some unused variables.
- 'W0612',
- # Operator not preceded/followed by space.
- 'C0323',
- 'C0322',
- # Unnecessary semicolon.
- 'W0301',
- # Unused argument.
- 'W0613',
- # String has no effect (docstring in wrong place).
- 'W0105',
- # map/filter on lambda could be replaced by comprehension.
- 'W0110',
- # Use of eval.
- 'W0123',
- # Comma not followed by space.
- 'C0324',
- # Access to a protected member.
- 'W0212',
- # Bad indent.
- 'W0311',
- # Line too long.
- 'C0301',
- # Undefined variable.
- 'E0602',
- # Not exception type specified.
- 'W0702',
- # No member of that name.
- 'E1101',
- # Dangerous default {}.
- 'W0102',
- # Cyclic import.
- 'R0401',
- # Others, too many to sort.
- 'W0201', 'W0232', 'E1103', 'W0621', 'W0108', 'W0223', 'W0231',
- 'R0201', 'E0101', 'C0321',
- # ************* Module copy
- # W0104:427,12:_test.odict.__setitem__: Statement seems to have no effect
- 'W0104',
-]
-
-
-def _LicenseHeader(input_api):
- # Accept any year number from 2009 to the current year.
- current_year = int(input_api.time.strftime('%Y'))
- allowed_years = (str(s) for s in reversed(xrange(2009, current_year + 1)))
-
- years_re = '(' + '|'.join(allowed_years) + ')'
-
- # The (c) is deprecated, but tolerate it until it's removed from all files.
- return (
- r'.*? Copyright (\(c\) )?%(year)s Google Inc\. All rights reserved\.\n'
- r'.*? Use of this source code is governed by a BSD-style license that '
- r'can be\n'
- r'.*? found in the LICENSE file\.\n'
- ) % {
- 'year': years_re,
- }
-
-def CheckChangeOnUpload(input_api, output_api):
- report = []
- report.extend(input_api.canned_checks.PanProjectChecks(
- input_api, output_api, license_header=_LicenseHeader(input_api)))
- return report
-
-
-def CheckChangeOnCommit(input_api, output_api):
- report = []
-
- report.extend(input_api.canned_checks.PanProjectChecks(
- input_api, output_api, license_header=_LicenseHeader(input_api)))
- report.extend(input_api.canned_checks.CheckTreeIsOpen(
- input_api, output_api,
- 'http://gyp-status.appspot.com/status',
- 'http://gyp-status.appspot.com/current'))
-
- import os
- import sys
- old_sys_path = sys.path
- try:
- sys.path = ['pylib', 'test/lib'] + sys.path
- blacklist = PYLINT_BLACKLIST
- if sys.platform == 'win32':
- blacklist = [os.path.normpath(x).replace('\\', '\\\\')
- for x in PYLINT_BLACKLIST]
- report.extend(input_api.canned_checks.RunPylint(
- input_api,
- output_api,
- black_list=blacklist,
- disabled_warnings=PYLINT_DISABLED_WARNINGS))
- finally:
- sys.path = old_sys_path
- return report
-
-
-TRYBOTS = [
- 'linux_try',
- 'mac_try',
- 'win_try',
-]
-
-
-def GetPreferredTryMasters(_, change):
- return {
- 'client.gyp': { t: set(['defaulttests']) for t in TRYBOTS },
- }
diff --git a/node_modules/node-gyp/gyp/codereview.settings b/node_modules/node-gyp/gyp/codereview.settings
deleted file mode 100644
index faf37f1..0000000
--- a/node_modules/node-gyp/gyp/codereview.settings
+++ /dev/null
@@ -1,10 +0,0 @@
-# This file is used by gcl to get repository specific information.
-CODE_REVIEW_SERVER: codereview.chromium.org
-CC_LIST: gyp-developer@googlegroups.com
-VIEW_VC: https://chromium.googlesource.com/external/gyp/+/
-TRY_ON_UPLOAD: False
-TRYSERVER_PROJECT: gyp
-TRYSERVER_PATCHLEVEL: 1
-TRYSERVER_ROOT: gyp
-TRYSERVER_SVN_URL: svn://svn.chromium.org/chrome-try/try-nacl
-PROJECT: gyp
diff --git a/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc b/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc
deleted file mode 100644
index 8bca510..0000000
--- a/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) 2013 Google Inc. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This file is used to generate an empty .pdb -- with a 4KB pagesize -- that is
-// then used during the final link for modules that have large PDBs. Otherwise,
-// the linker will generate a pdb with a page size of 1KB, which imposes a limit
-// of 1GB on the .pdb. By generating an initial empty .pdb with the compiler
-// (rather than the linker), this limit is avoided. With this in place PDBs may
-// grow to 2GB.
-//
-// This file is referenced by the msvs_large_pdb mechanism in MSVSUtil.py.
diff --git a/node_modules/node-gyp/gyp/gyp b/node_modules/node-gyp/gyp/gyp
deleted file mode 100755
index 1b8b9bd..0000000
--- a/node_modules/node-gyp/gyp/gyp
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-set -e
-base=$(dirname "$0")
-exec python "${base}/gyp_main.py" "$@"
diff --git a/node_modules/node-gyp/gyp/gyp.bat b/node_modules/node-gyp/gyp/gyp.bat
deleted file mode 100644
index c0b4ca2..0000000
--- a/node_modules/node-gyp/gyp/gyp.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@rem Copyright (c) 2009 Google Inc. All rights reserved.
-@rem Use of this source code is governed by a BSD-style license that can be
-@rem found in the LICENSE file.
-
-@python "%~dp0gyp_main.py" %*
diff --git a/node_modules/node-gyp/gyp/gyp_main.py b/node_modules/node-gyp/gyp/gyp_main.py
deleted file mode 100755
index 25a6eba..0000000
--- a/node_modules/node-gyp/gyp/gyp_main.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-# Make sure we're using the version of pylib in this repo, not one installed
-# elsewhere on the system.
-sys.path.insert(0, os.path.join(os.path.dirname(sys.argv[0]), 'pylib'))
-import gyp
-
-if __name__ == '__main__':
- sys.exit(gyp.script_main())
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
deleted file mode 100644
index 593f0e5..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
+++ /dev/null
@@ -1,340 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""New implementation of Visual Studio project generation."""
-
-import os
-import random
-
-import gyp.common
-
-# hashlib is supplied as of Python 2.5 as the replacement interface for md5
-# and other secure hashes. In 2.6, md5 is deprecated. Import hashlib if
-# available, avoiding a deprecation warning under 2.6. Import md5 otherwise,
-# preserving 2.4 compatibility.
-try:
- import hashlib
- _new_md5 = hashlib.md5
-except ImportError:
- import md5
- _new_md5 = md5.new
-
-
-# Initialize random number generator
-random.seed()
-
-# GUIDs for project types
-ENTRY_TYPE_GUIDS = {
- 'project': '{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}',
- 'folder': '{2150E333-8FDC-42A3-9474-1A3956D46DE8}',
-}
-
-#------------------------------------------------------------------------------
-# Helper functions
-
-
-def MakeGuid(name, seed='msvs_new'):
- """Returns a GUID for the specified target name.
-
- Args:
- name: Target name.
- seed: Seed for MD5 hash.
- Returns:
- A GUID-line string calculated from the name and seed.
-
- This generates something which looks like a GUID, but depends only on the
- name and seed. This means the same name/seed will always generate the same
- GUID, so that projects and solutions which refer to each other can explicitly
- determine the GUID to refer to explicitly. It also means that the GUID will
- not change when the project for a target is rebuilt.
- """
- # Calculate a MD5 signature for the seed and name.
- d = _new_md5(str(seed) + str(name)).hexdigest().upper()
- # Convert most of the signature to GUID form (discard the rest)
- guid = ('{' + d[:8] + '-' + d[8:12] + '-' + d[12:16] + '-' + d[16:20]
- + '-' + d[20:32] + '}')
- return guid
-
-#------------------------------------------------------------------------------
-
-
-class MSVSSolutionEntry(object):
- def __cmp__(self, other):
- # Sort by name then guid (so things are in order on vs2008).
- return cmp((self.name, self.get_guid()), (other.name, other.get_guid()))
-
-
-class MSVSFolder(MSVSSolutionEntry):
- """Folder in a Visual Studio project or solution."""
-
- def __init__(self, path, name = None, entries = None,
- guid = None, items = None):
- """Initializes the folder.
-
- Args:
- path: Full path to the folder.
- name: Name of the folder.
- entries: List of folder entries to nest inside this folder. May contain
- Folder or Project objects. May be None, if the folder is empty.
- guid: GUID to use for folder, if not None.
- items: List of solution items to include in the folder project. May be
- None, if the folder does not directly contain items.
- """
- if name:
- self.name = name
- else:
- # Use last layer.
- self.name = os.path.basename(path)
-
- self.path = path
- self.guid = guid
-
- # Copy passed lists (or set to empty lists)
- self.entries = sorted(list(entries or []))
- self.items = list(items or [])
-
- self.entry_type_guid = ENTRY_TYPE_GUIDS['folder']
-
- def get_guid(self):
- if self.guid is None:
- # Use consistent guids for folders (so things don't regenerate).
- self.guid = MakeGuid(self.path, seed='msvs_folder')
- return self.guid
-
-
-#------------------------------------------------------------------------------
-
-
-class MSVSProject(MSVSSolutionEntry):
- """Visual Studio project."""
-
- def __init__(self, path, name = None, dependencies = None, guid = None,
- spec = None, build_file = None, config_platform_overrides = None,
- fixpath_prefix = None):
- """Initializes the project.
-
- Args:
- path: Absolute path to the project file.
- name: Name of project. If None, the name will be the same as the base
- name of the project file.
- dependencies: List of other Project objects this project is dependent
- upon, if not None.
- guid: GUID to use for project, if not None.
- spec: Dictionary specifying how to build this project.
- build_file: Filename of the .gyp file that the vcproj file comes from.
- config_platform_overrides: optional dict of configuration platforms to
- used in place of the default for this target.
- fixpath_prefix: the path used to adjust the behavior of _fixpath
- """
- self.path = path
- self.guid = guid
- self.spec = spec
- self.build_file = build_file
- # Use project filename if name not specified
- self.name = name or os.path.splitext(os.path.basename(path))[0]
-
- # Copy passed lists (or set to empty lists)
- self.dependencies = list(dependencies or [])
-
- self.entry_type_guid = ENTRY_TYPE_GUIDS['project']
-
- if config_platform_overrides:
- self.config_platform_overrides = config_platform_overrides
- else:
- self.config_platform_overrides = {}
- self.fixpath_prefix = fixpath_prefix
- self.msbuild_toolset = None
-
- def set_dependencies(self, dependencies):
- self.dependencies = list(dependencies or [])
-
- def get_guid(self):
- if self.guid is None:
- # Set GUID from path
- # TODO(rspangler): This is fragile.
- # 1. We can't just use the project filename sans path, since there could
- # be multiple projects with the same base name (for example,
- # foo/unittest.vcproj and bar/unittest.vcproj).
- # 2. The path needs to be relative to $SOURCE_ROOT, so that the project
- # GUID is the same whether it's included from base/base.sln or
- # foo/bar/baz/baz.sln.
- # 3. The GUID needs to be the same each time this builder is invoked, so
- # that we don't need to rebuild the solution when the project changes.
- # 4. We should be able to handle pre-built project files by reading the
- # GUID from the files.
- self.guid = MakeGuid(self.name)
- return self.guid
-
- def set_msbuild_toolset(self, msbuild_toolset):
- self.msbuild_toolset = msbuild_toolset
-
-#------------------------------------------------------------------------------
-
-
-class MSVSSolution(object):
- """Visual Studio solution."""
-
- def __init__(self, path, version, entries=None, variants=None,
- websiteProperties=True):
- """Initializes the solution.
-
- Args:
- path: Path to solution file.
- version: Format version to emit.
- entries: List of entries in solution. May contain Folder or Project
- objects. May be None, if the folder is empty.
- variants: List of build variant strings. If none, a default list will
- be used.
- websiteProperties: Flag to decide if the website properties section
- is generated.
- """
- self.path = path
- self.websiteProperties = websiteProperties
- self.version = version
-
- # Copy passed lists (or set to empty lists)
- self.entries = list(entries or [])
-
- if variants:
- # Copy passed list
- self.variants = variants[:]
- else:
- # Use default
- self.variants = ['Debug|Win32', 'Release|Win32']
- # TODO(rspangler): Need to be able to handle a mapping of solution config
- # to project config. Should we be able to handle variants being a dict,
- # or add a separate variant_map variable? If it's a dict, we can't
- # guarantee the order of variants since dict keys aren't ordered.
-
-
- # TODO(rspangler): Automatically write to disk for now; should delay until
- # node-evaluation time.
- self.Write()
-
-
- def Write(self, writer=gyp.common.WriteOnDiff):
- """Writes the solution file to disk.
-
- Raises:
- IndexError: An entry appears multiple times.
- """
- # Walk the entry tree and collect all the folders and projects.
- all_entries = set()
- entries_to_check = self.entries[:]
- while entries_to_check:
- e = entries_to_check.pop(0)
-
- # If this entry has been visited, nothing to do.
- if e in all_entries:
- continue
-
- all_entries.add(e)
-
- # If this is a folder, check its entries too.
- if isinstance(e, MSVSFolder):
- entries_to_check += e.entries
-
- all_entries = sorted(all_entries)
-
- # Open file and print header
- f = writer(self.path)
- f.write('Microsoft Visual Studio Solution File, '
- 'Format Version %s\r\n' % self.version.SolutionVersion())
- f.write('# %s\r\n' % self.version.Description())
-
- # Project entries
- sln_root = os.path.split(self.path)[0]
- for e in all_entries:
- relative_path = gyp.common.RelativePath(e.path, sln_root)
- # msbuild does not accept an empty folder_name.
- # use '.' in case relative_path is empty.
- folder_name = relative_path.replace('/', '\\') or '.'
- f.write('Project("%s") = "%s", "%s", "%s"\r\n' % (
- e.entry_type_guid, # Entry type GUID
- e.name, # Folder name
- folder_name, # Folder name (again)
- e.get_guid(), # Entry GUID
- ))
-
- # TODO(rspangler): Need a way to configure this stuff
- if self.websiteProperties:
- f.write('\tProjectSection(WebsiteProperties) = preProject\r\n'
- '\t\tDebug.AspNetCompiler.Debug = "True"\r\n'
- '\t\tRelease.AspNetCompiler.Debug = "False"\r\n'
- '\tEndProjectSection\r\n')
-
- if isinstance(e, MSVSFolder):
- if e.items:
- f.write('\tProjectSection(SolutionItems) = preProject\r\n')
- for i in e.items:
- f.write('\t\t%s = %s\r\n' % (i, i))
- f.write('\tEndProjectSection\r\n')
-
- if isinstance(e, MSVSProject):
- if e.dependencies:
- f.write('\tProjectSection(ProjectDependencies) = postProject\r\n')
- for d in e.dependencies:
- f.write('\t\t%s = %s\r\n' % (d.get_guid(), d.get_guid()))
- f.write('\tEndProjectSection\r\n')
-
- f.write('EndProject\r\n')
-
- # Global section
- f.write('Global\r\n')
-
- # Configurations (variants)
- f.write('\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n')
- for v in self.variants:
- f.write('\t\t%s = %s\r\n' % (v, v))
- f.write('\tEndGlobalSection\r\n')
-
- # Sort config guids for easier diffing of solution changes.
- config_guids = []
- config_guids_overrides = {}
- for e in all_entries:
- if isinstance(e, MSVSProject):
- config_guids.append(e.get_guid())
- config_guids_overrides[e.get_guid()] = e.config_platform_overrides
- config_guids.sort()
-
- f.write('\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n')
- for g in config_guids:
- for v in self.variants:
- nv = config_guids_overrides[g].get(v, v)
- # Pick which project configuration to build for this solution
- # configuration.
- f.write('\t\t%s.%s.ActiveCfg = %s\r\n' % (
- g, # Project GUID
- v, # Solution build configuration
- nv, # Project build config for that solution config
- ))
-
- # Enable project in this solution configuration.
- f.write('\t\t%s.%s.Build.0 = %s\r\n' % (
- g, # Project GUID
- v, # Solution build configuration
- nv, # Project build config for that solution config
- ))
- f.write('\tEndGlobalSection\r\n')
-
- # TODO(rspangler): Should be able to configure this stuff too (though I've
- # never seen this be any different)
- f.write('\tGlobalSection(SolutionProperties) = preSolution\r\n')
- f.write('\t\tHideSolutionNode = FALSE\r\n')
- f.write('\tEndGlobalSection\r\n')
-
- # Folder mappings
- # Omit this section if there are no folders
- if any([e.entries for e in all_entries if isinstance(e, MSVSFolder)]):
- f.write('\tGlobalSection(NestedProjects) = preSolution\r\n')
- for e in all_entries:
- if not isinstance(e, MSVSFolder):
- continue # Does not apply to projects, only folders
- for subentry in e.entries:
- f.write('\t\t%s = %s\r\n' % (subentry.get_guid(), e.get_guid()))
- f.write('\tEndGlobalSection\r\n')
-
- f.write('EndGlobal\r\n')
-
- f.close()
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
deleted file mode 100644
index db1ceed..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
+++ /dev/null
@@ -1,208 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Visual Studio project reader/writer."""
-
-import gyp.common
-import gyp.easy_xml as easy_xml
-
-#------------------------------------------------------------------------------
-
-
-class Tool(object):
- """Visual Studio tool."""
-
- def __init__(self, name, attrs=None):
- """Initializes the tool.
-
- Args:
- name: Tool name.
- attrs: Dict of tool attributes; may be None.
- """
- self._attrs = attrs or {}
- self._attrs['Name'] = name
-
- def _GetSpecification(self):
- """Creates an element for the tool.
-
- Returns:
- A new xml.dom.Element for the tool.
- """
- return ['Tool', self._attrs]
-
-class Filter(object):
- """Visual Studio filter - that is, a virtual folder."""
-
- def __init__(self, name, contents=None):
- """Initializes the folder.
-
- Args:
- name: Filter (folder) name.
- contents: List of filenames and/or Filter objects contained.
- """
- self.name = name
- self.contents = list(contents or [])
-
-
-#------------------------------------------------------------------------------
-
-
-class Writer(object):
- """Visual Studio XML project writer."""
-
- def __init__(self, project_path, version, name, guid=None, platforms=None):
- """Initializes the project.
-
- Args:
- project_path: Path to the project file.
- version: Format version to emit.
- name: Name of the project.
- guid: GUID to use for project, if not None.
- platforms: Array of string, the supported platforms. If null, ['Win32']
- """
- self.project_path = project_path
- self.version = version
- self.name = name
- self.guid = guid
-
- # Default to Win32 for platforms.
- if not platforms:
- platforms = ['Win32']
-
- # Initialize the specifications of the various sections.
- self.platform_section = ['Platforms']
- for platform in platforms:
- self.platform_section.append(['Platform', {'Name': platform}])
- self.tool_files_section = ['ToolFiles']
- self.configurations_section = ['Configurations']
- self.files_section = ['Files']
-
- # Keep a dict keyed on filename to speed up access.
- self.files_dict = dict()
-
- def AddToolFile(self, path):
- """Adds a tool file to the project.
-
- Args:
- path: Relative path from project to tool file.
- """
- self.tool_files_section.append(['ToolFile', {'RelativePath': path}])
-
- def _GetSpecForConfiguration(self, config_type, config_name, attrs, tools):
- """Returns the specification for a configuration.
-
- Args:
- config_type: Type of configuration node.
- config_name: Configuration name.
- attrs: Dict of configuration attributes; may be None.
- tools: List of tools (strings or Tool objects); may be None.
- Returns:
- """
- # Handle defaults
- if not attrs:
- attrs = {}
- if not tools:
- tools = []
-
- # Add configuration node and its attributes
- node_attrs = attrs.copy()
- node_attrs['Name'] = config_name
- specification = [config_type, node_attrs]
-
- # Add tool nodes and their attributes
- if tools:
- for t in tools:
- if isinstance(t, Tool):
- specification.append(t._GetSpecification())
- else:
- specification.append(Tool(t)._GetSpecification())
- return specification
-
-
- def AddConfig(self, name, attrs=None, tools=None):
- """Adds a configuration to the project.
-
- Args:
- name: Configuration name.
- attrs: Dict of configuration attributes; may be None.
- tools: List of tools (strings or Tool objects); may be None.
- """
- spec = self._GetSpecForConfiguration('Configuration', name, attrs, tools)
- self.configurations_section.append(spec)
-
- def _AddFilesToNode(self, parent, files):
- """Adds files and/or filters to the parent node.
-
- Args:
- parent: Destination node
- files: A list of Filter objects and/or relative paths to files.
-
- Will call itself recursively, if the files list contains Filter objects.
- """
- for f in files:
- if isinstance(f, Filter):
- node = ['Filter', {'Name': f.name}]
- self._AddFilesToNode(node, f.contents)
- else:
- node = ['File', {'RelativePath': f}]
- self.files_dict[f] = node
- parent.append(node)
-
- def AddFiles(self, files):
- """Adds files to the project.
-
- Args:
- files: A list of Filter objects and/or relative paths to files.
-
- This makes a copy of the file/filter tree at the time of this call. If you
- later add files to a Filter object which was passed into a previous call
- to AddFiles(), it will not be reflected in this project.
- """
- self._AddFilesToNode(self.files_section, files)
- # TODO(rspangler) This also doesn't handle adding files to an existing
- # filter. That is, it doesn't merge the trees.
-
- def AddFileConfig(self, path, config, attrs=None, tools=None):
- """Adds a configuration to a file.
-
- Args:
- path: Relative path to the file.
- config: Name of configuration to add.
- attrs: Dict of configuration attributes; may be None.
- tools: List of tools (strings or Tool objects); may be None.
-
- Raises:
- ValueError: Relative path does not match any file added via AddFiles().
- """
- # Find the file node with the right relative path
- parent = self.files_dict.get(path)
- if not parent:
- raise ValueError('AddFileConfig: file "%s" not in project.' % path)
-
- # Add the config to the file node
- spec = self._GetSpecForConfiguration('FileConfiguration', config, attrs,
- tools)
- parent.append(spec)
-
- def WriteIfChanged(self):
- """Writes the project file."""
- # First create XML content definition
- content = [
- 'VisualStudioProject',
- {'ProjectType': 'Visual C++',
- 'Version': self.version.ProjectVersion(),
- 'Name': self.name,
- 'ProjectGUID': self.guid,
- 'RootNamespace': self.name,
- 'Keyword': 'Win32Proj'
- },
- self.platform_section,
- self.tool_files_section,
- self.configurations_section,
- ['References'], # empty section
- self.files_section,
- ['Globals'] # empty section
- ]
- easy_xml.WriteXmlIfChanged(content, self.project_path,
- encoding="Windows-1252")
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
deleted file mode 100644
index a08cc15..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
+++ /dev/null
@@ -1,1096 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-r"""Code to validate and convert settings of the Microsoft build tools.
-
-This file contains code to validate and convert settings of the Microsoft
-build tools. The function ConvertToMSBuildSettings(), ValidateMSVSSettings(),
-and ValidateMSBuildSettings() are the entry points.
-
-This file was created by comparing the projects created by Visual Studio 2008
-and Visual Studio 2010 for all available settings through the user interface.
-The MSBuild schemas were also considered. They are typically found in the
-MSBuild install directory, e.g. c:\Program Files (x86)\MSBuild
-"""
-
-import sys
-import re
-
-# Dictionaries of settings validators. The key is the tool name, the value is
-# a dictionary mapping setting names to validation functions.
-_msvs_validators = {}
-_msbuild_validators = {}
-
-
-# A dictionary of settings converters. The key is the tool name, the value is
-# a dictionary mapping setting names to conversion functions.
-_msvs_to_msbuild_converters = {}
-
-
-# Tool name mapping from MSVS to MSBuild.
-_msbuild_name_of_tool = {}
-
-
-class _Tool(object):
- """Represents a tool used by MSVS or MSBuild.
-
- Attributes:
- msvs_name: The name of the tool in MSVS.
- msbuild_name: The name of the tool in MSBuild.
- """
-
- def __init__(self, msvs_name, msbuild_name):
- self.msvs_name = msvs_name
- self.msbuild_name = msbuild_name
-
-
-def _AddTool(tool):
- """Adds a tool to the four dictionaries used to process settings.
-
- This only defines the tool. Each setting also needs to be added.
-
- Args:
- tool: The _Tool object to be added.
- """
- _msvs_validators[tool.msvs_name] = {}
- _msbuild_validators[tool.msbuild_name] = {}
- _msvs_to_msbuild_converters[tool.msvs_name] = {}
- _msbuild_name_of_tool[tool.msvs_name] = tool.msbuild_name
-
-
-def _GetMSBuildToolSettings(msbuild_settings, tool):
- """Returns an MSBuild tool dictionary. Creates it if needed."""
- return msbuild_settings.setdefault(tool.msbuild_name, {})
-
-
-class _Type(object):
- """Type of settings (Base class)."""
-
- def ValidateMSVS(self, value):
- """Verifies that the value is legal for MSVS.
-
- Args:
- value: the value to check for this type.
-
- Raises:
- ValueError if value is not valid for MSVS.
- """
-
- def ValidateMSBuild(self, value):
- """Verifies that the value is legal for MSBuild.
-
- Args:
- value: the value to check for this type.
-
- Raises:
- ValueError if value is not valid for MSBuild.
- """
-
- def ConvertToMSBuild(self, value):
- """Returns the MSBuild equivalent of the MSVS value given.
-
- Args:
- value: the MSVS value to convert.
-
- Returns:
- the MSBuild equivalent.
-
- Raises:
- ValueError if value is not valid.
- """
- return value
-
-
-class _String(_Type):
- """A setting that's just a string."""
-
- def ValidateMSVS(self, value):
- if not isinstance(value, basestring):
- raise ValueError('expected string; got %r' % value)
-
- def ValidateMSBuild(self, value):
- if not isinstance(value, basestring):
- raise ValueError('expected string; got %r' % value)
-
- def ConvertToMSBuild(self, value):
- # Convert the macros
- return ConvertVCMacrosToMSBuild(value)
-
-
-class _StringList(_Type):
- """A settings that's a list of strings."""
-
- def ValidateMSVS(self, value):
- if not isinstance(value, basestring) and not isinstance(value, list):
- raise ValueError('expected string list; got %r' % value)
-
- def ValidateMSBuild(self, value):
- if not isinstance(value, basestring) and not isinstance(value, list):
- raise ValueError('expected string list; got %r' % value)
-
- def ConvertToMSBuild(self, value):
- # Convert the macros
- if isinstance(value, list):
- return [ConvertVCMacrosToMSBuild(i) for i in value]
- else:
- return ConvertVCMacrosToMSBuild(value)
-
-
-class _Boolean(_Type):
- """Boolean settings, can have the values 'false' or 'true'."""
-
- def _Validate(self, value):
- if value != 'true' and value != 'false':
- raise ValueError('expected bool; got %r' % value)
-
- def ValidateMSVS(self, value):
- self._Validate(value)
-
- def ValidateMSBuild(self, value):
- self._Validate(value)
-
- def ConvertToMSBuild(self, value):
- self._Validate(value)
- return value
-
-
-class _Integer(_Type):
- """Integer settings."""
-
- def __init__(self, msbuild_base=10):
- _Type.__init__(self)
- self._msbuild_base = msbuild_base
-
- def ValidateMSVS(self, value):
- # Try to convert, this will raise ValueError if invalid.
- self.ConvertToMSBuild(value)
-
- def ValidateMSBuild(self, value):
- # Try to convert, this will raise ValueError if invalid.
- int(value, self._msbuild_base)
-
- def ConvertToMSBuild(self, value):
- msbuild_format = (self._msbuild_base == 10) and '%d' or '0x%04x'
- return msbuild_format % int(value)
-
-
-class _Enumeration(_Type):
- """Type of settings that is an enumeration.
-
- In MSVS, the values are indexes like '0', '1', and '2'.
- MSBuild uses text labels that are more representative, like 'Win32'.
-
- Constructor args:
- label_list: an array of MSBuild labels that correspond to the MSVS index.
- In the rare cases where MSVS has skipped an index value, None is
- used in the array to indicate the unused spot.
- new: an array of labels that are new to MSBuild.
- """
-
- def __init__(self, label_list, new=None):
- _Type.__init__(self)
- self._label_list = label_list
- self._msbuild_values = set(value for value in label_list
- if value is not None)
- if new is not None:
- self._msbuild_values.update(new)
-
- def ValidateMSVS(self, value):
- # Try to convert. It will raise an exception if not valid.
- self.ConvertToMSBuild(value)
-
- def ValidateMSBuild(self, value):
- if value not in self._msbuild_values:
- raise ValueError('unrecognized enumerated value %s' % value)
-
- def ConvertToMSBuild(self, value):
- index = int(value)
- if index < 0 or index >= len(self._label_list):
- raise ValueError('index value (%d) not in expected range [0, %d)' %
- (index, len(self._label_list)))
- label = self._label_list[index]
- if label is None:
- raise ValueError('converted value for %s not specified.' % value)
- return label
-
-
-# Instantiate the various generic types.
-_boolean = _Boolean()
-_integer = _Integer()
-# For now, we don't do any special validation on these types:
-_string = _String()
-_file_name = _String()
-_folder_name = _String()
-_file_list = _StringList()
-_folder_list = _StringList()
-_string_list = _StringList()
-# Some boolean settings went from numerical values to boolean. The
-# mapping is 0: default, 1: false, 2: true.
-_newly_boolean = _Enumeration(['', 'false', 'true'])
-
-
-def _Same(tool, name, setting_type):
- """Defines a setting that has the same name in MSVS and MSBuild.
-
- Args:
- tool: a dictionary that gives the names of the tool for MSVS and MSBuild.
- name: the name of the setting.
- setting_type: the type of this setting.
- """
- _Renamed(tool, name, name, setting_type)
-
-
-def _Renamed(tool, msvs_name, msbuild_name, setting_type):
- """Defines a setting for which the name has changed.
-
- Args:
- tool: a dictionary that gives the names of the tool for MSVS and MSBuild.
- msvs_name: the name of the MSVS setting.
- msbuild_name: the name of the MSBuild setting.
- setting_type: the type of this setting.
- """
-
- def _Translate(value, msbuild_settings):
- msbuild_tool_settings = _GetMSBuildToolSettings(msbuild_settings, tool)
- msbuild_tool_settings[msbuild_name] = setting_type.ConvertToMSBuild(value)
-
- _msvs_validators[tool.msvs_name][msvs_name] = setting_type.ValidateMSVS
- _msbuild_validators[tool.msbuild_name][msbuild_name] = (
- setting_type.ValidateMSBuild)
- _msvs_to_msbuild_converters[tool.msvs_name][msvs_name] = _Translate
-
-
-def _Moved(tool, settings_name, msbuild_tool_name, setting_type):
- _MovedAndRenamed(tool, settings_name, msbuild_tool_name, settings_name,
- setting_type)
-
-
-def _MovedAndRenamed(tool, msvs_settings_name, msbuild_tool_name,
- msbuild_settings_name, setting_type):
- """Defines a setting that may have moved to a new section.
-
- Args:
- tool: a dictionary that gives the names of the tool for MSVS and MSBuild.
- msvs_settings_name: the MSVS name of the setting.
- msbuild_tool_name: the name of the MSBuild tool to place the setting under.
- msbuild_settings_name: the MSBuild name of the setting.
- setting_type: the type of this setting.
- """
-
- def _Translate(value, msbuild_settings):
- tool_settings = msbuild_settings.setdefault(msbuild_tool_name, {})
- tool_settings[msbuild_settings_name] = setting_type.ConvertToMSBuild(value)
-
- _msvs_validators[tool.msvs_name][msvs_settings_name] = (
- setting_type.ValidateMSVS)
- validator = setting_type.ValidateMSBuild
- _msbuild_validators[msbuild_tool_name][msbuild_settings_name] = validator
- _msvs_to_msbuild_converters[tool.msvs_name][msvs_settings_name] = _Translate
-
-
-def _MSVSOnly(tool, name, setting_type):
- """Defines a setting that is only found in MSVS.
-
- Args:
- tool: a dictionary that gives the names of the tool for MSVS and MSBuild.
- name: the name of the setting.
- setting_type: the type of this setting.
- """
-
- def _Translate(unused_value, unused_msbuild_settings):
- # Since this is for MSVS only settings, no translation will happen.
- pass
-
- _msvs_validators[tool.msvs_name][name] = setting_type.ValidateMSVS
- _msvs_to_msbuild_converters[tool.msvs_name][name] = _Translate
-
-
-def _MSBuildOnly(tool, name, setting_type):
- """Defines a setting that is only found in MSBuild.
-
- Args:
- tool: a dictionary that gives the names of the tool for MSVS and MSBuild.
- name: the name of the setting.
- setting_type: the type of this setting.
- """
-
- def _Translate(value, msbuild_settings):
- # Let msbuild-only properties get translated as-is from msvs_settings.
- tool_settings = msbuild_settings.setdefault(tool.msbuild_name, {})
- tool_settings[name] = value
-
- _msbuild_validators[tool.msbuild_name][name] = setting_type.ValidateMSBuild
- _msvs_to_msbuild_converters[tool.msvs_name][name] = _Translate
-
-
-def _ConvertedToAdditionalOption(tool, msvs_name, flag):
- """Defines a setting that's handled via a command line option in MSBuild.
-
- Args:
- tool: a dictionary that gives the names of the tool for MSVS and MSBuild.
- msvs_name: the name of the MSVS setting that if 'true' becomes a flag
- flag: the flag to insert at the end of the AdditionalOptions
- """
-
- def _Translate(value, msbuild_settings):
- if value == 'true':
- tool_settings = _GetMSBuildToolSettings(msbuild_settings, tool)
- if 'AdditionalOptions' in tool_settings:
- new_flags = '%s %s' % (tool_settings['AdditionalOptions'], flag)
- else:
- new_flags = flag
- tool_settings['AdditionalOptions'] = new_flags
- _msvs_validators[tool.msvs_name][msvs_name] = _boolean.ValidateMSVS
- _msvs_to_msbuild_converters[tool.msvs_name][msvs_name] = _Translate
-
-
-def _CustomGeneratePreprocessedFile(tool, msvs_name):
- def _Translate(value, msbuild_settings):
- tool_settings = _GetMSBuildToolSettings(msbuild_settings, tool)
- if value == '0':
- tool_settings['PreprocessToFile'] = 'false'
- tool_settings['PreprocessSuppressLineNumbers'] = 'false'
- elif value == '1': # /P
- tool_settings['PreprocessToFile'] = 'true'
- tool_settings['PreprocessSuppressLineNumbers'] = 'false'
- elif value == '2': # /EP /P
- tool_settings['PreprocessToFile'] = 'true'
- tool_settings['PreprocessSuppressLineNumbers'] = 'true'
- else:
- raise ValueError('value must be one of [0, 1, 2]; got %s' % value)
- # Create a bogus validator that looks for '0', '1', or '2'
- msvs_validator = _Enumeration(['a', 'b', 'c']).ValidateMSVS
- _msvs_validators[tool.msvs_name][msvs_name] = msvs_validator
- msbuild_validator = _boolean.ValidateMSBuild
- msbuild_tool_validators = _msbuild_validators[tool.msbuild_name]
- msbuild_tool_validators['PreprocessToFile'] = msbuild_validator
- msbuild_tool_validators['PreprocessSuppressLineNumbers'] = msbuild_validator
- _msvs_to_msbuild_converters[tool.msvs_name][msvs_name] = _Translate
-
-
-fix_vc_macro_slashes_regex_list = ('IntDir', 'OutDir')
-fix_vc_macro_slashes_regex = re.compile(
- r'(\$\((?:%s)\))(?:[\\/]+)' % "|".join(fix_vc_macro_slashes_regex_list)
-)
-
-# Regular expression to detect keys that were generated by exclusion lists
-_EXCLUDED_SUFFIX_RE = re.compile('^(.*)_excluded$')
-
-
-def _ValidateExclusionSetting(setting, settings, error_msg, stderr=sys.stderr):
- """Verify that 'setting' is valid if it is generated from an exclusion list.
-
- If the setting appears to be generated from an exclusion list, the root name
- is checked.
-
- Args:
- setting: A string that is the setting name to validate
- settings: A dictionary where the keys are valid settings
- error_msg: The message to emit in the event of error
- stderr: The stream receiving the error messages.
- """
- # This may be unrecognized because it's an exclusion list. If the
- # setting name has the _excluded suffix, then check the root name.
- unrecognized = True
- m = re.match(_EXCLUDED_SUFFIX_RE, setting)
- if m:
- root_setting = m.group(1)
- unrecognized = root_setting not in settings
-
- if unrecognized:
- # We don't know this setting. Give a warning.
- print >> stderr, error_msg
-
-
-def FixVCMacroSlashes(s):
- """Replace macros which have excessive following slashes.
-
- These macros are known to have a built-in trailing slash. Furthermore, many
- scripts hiccup on processing paths with extra slashes in the middle.
-
- This list is probably not exhaustive. Add as needed.
- """
- if '$' in s:
- s = fix_vc_macro_slashes_regex.sub(r'\1', s)
- return s
-
-
-def ConvertVCMacrosToMSBuild(s):
- """Convert the MSVS macros found in the string to the MSBuild equivalent.
-
- This list is probably not exhaustive. Add as needed.
- """
- if '$' in s:
- replace_map = {
- '$(ConfigurationName)': '$(Configuration)',
- '$(InputDir)': '%(RelativeDir)',
- '$(InputExt)': '%(Extension)',
- '$(InputFileName)': '%(Filename)%(Extension)',
- '$(InputName)': '%(Filename)',
- '$(InputPath)': '%(Identity)',
- '$(ParentName)': '$(ProjectFileName)',
- '$(PlatformName)': '$(Platform)',
- '$(SafeInputName)': '%(Filename)',
- }
- for old, new in replace_map.iteritems():
- s = s.replace(old, new)
- s = FixVCMacroSlashes(s)
- return s
-
-
-def ConvertToMSBuildSettings(msvs_settings, stderr=sys.stderr):
- """Converts MSVS settings (VS2008 and earlier) to MSBuild settings (VS2010+).
-
- Args:
- msvs_settings: A dictionary. The key is the tool name. The values are
- themselves dictionaries of settings and their values.
- stderr: The stream receiving the error messages.
-
- Returns:
- A dictionary of MSBuild settings. The key is either the MSBuild tool name
- or the empty string (for the global settings). The values are themselves
- dictionaries of settings and their values.
- """
- msbuild_settings = {}
- for msvs_tool_name, msvs_tool_settings in msvs_settings.iteritems():
- if msvs_tool_name in _msvs_to_msbuild_converters:
- msvs_tool = _msvs_to_msbuild_converters[msvs_tool_name]
- for msvs_setting, msvs_value in msvs_tool_settings.iteritems():
- if msvs_setting in msvs_tool:
- # Invoke the translation function.
- try:
- msvs_tool[msvs_setting](msvs_value, msbuild_settings)
- except ValueError, e:
- print >> stderr, ('Warning: while converting %s/%s to MSBuild, '
- '%s' % (msvs_tool_name, msvs_setting, e))
- else:
- _ValidateExclusionSetting(msvs_setting,
- msvs_tool,
- ('Warning: unrecognized setting %s/%s '
- 'while converting to MSBuild.' %
- (msvs_tool_name, msvs_setting)),
- stderr)
- else:
- print >> stderr, ('Warning: unrecognized tool %s while converting to '
- 'MSBuild.' % msvs_tool_name)
- return msbuild_settings
-
-
-def ValidateMSVSSettings(settings, stderr=sys.stderr):
- """Validates that the names of the settings are valid for MSVS.
-
- Args:
- settings: A dictionary. The key is the tool name. The values are
- themselves dictionaries of settings and their values.
- stderr: The stream receiving the error messages.
- """
- _ValidateSettings(_msvs_validators, settings, stderr)
-
-
-def ValidateMSBuildSettings(settings, stderr=sys.stderr):
- """Validates that the names of the settings are valid for MSBuild.
-
- Args:
- settings: A dictionary. The key is the tool name. The values are
- themselves dictionaries of settings and their values.
- stderr: The stream receiving the error messages.
- """
- _ValidateSettings(_msbuild_validators, settings, stderr)
-
-
-def _ValidateSettings(validators, settings, stderr):
- """Validates that the settings are valid for MSBuild or MSVS.
-
- We currently only validate the names of the settings, not their values.
-
- Args:
- validators: A dictionary of tools and their validators.
- settings: A dictionary. The key is the tool name. The values are
- themselves dictionaries of settings and their values.
- stderr: The stream receiving the error messages.
- """
- for tool_name in settings:
- if tool_name in validators:
- tool_validators = validators[tool_name]
- for setting, value in settings[tool_name].iteritems():
- if setting in tool_validators:
- try:
- tool_validators[setting](value)
- except ValueError, e:
- print >> stderr, ('Warning: for %s/%s, %s' %
- (tool_name, setting, e))
- else:
- _ValidateExclusionSetting(setting,
- tool_validators,
- ('Warning: unrecognized setting %s/%s' %
- (tool_name, setting)),
- stderr)
-
- else:
- print >> stderr, ('Warning: unrecognized tool %s' % tool_name)
-
-
-# MSVS and MBuild names of the tools.
-_compile = _Tool('VCCLCompilerTool', 'ClCompile')
-_link = _Tool('VCLinkerTool', 'Link')
-_midl = _Tool('VCMIDLTool', 'Midl')
-_rc = _Tool('VCResourceCompilerTool', 'ResourceCompile')
-_lib = _Tool('VCLibrarianTool', 'Lib')
-_manifest = _Tool('VCManifestTool', 'Manifest')
-_masm = _Tool('MASM', 'MASM')
-
-
-_AddTool(_compile)
-_AddTool(_link)
-_AddTool(_midl)
-_AddTool(_rc)
-_AddTool(_lib)
-_AddTool(_manifest)
-_AddTool(_masm)
-# Add sections only found in the MSBuild settings.
-_msbuild_validators[''] = {}
-_msbuild_validators['ProjectReference'] = {}
-_msbuild_validators['ManifestResourceCompile'] = {}
-
-# Descriptions of the compiler options, i.e. VCCLCompilerTool in MSVS and
-# ClCompile in MSBuild.
-# See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\cl.xml" for
-# the schema of the MSBuild ClCompile settings.
-
-# Options that have the same name in MSVS and MSBuild
-_Same(_compile, 'AdditionalIncludeDirectories', _folder_list) # /I
-_Same(_compile, 'AdditionalOptions', _string_list)
-_Same(_compile, 'AdditionalUsingDirectories', _folder_list) # /AI
-_Same(_compile, 'AssemblerListingLocation', _file_name) # /Fa
-_Same(_compile, 'BrowseInformationFile', _file_name)
-_Same(_compile, 'BufferSecurityCheck', _boolean) # /GS
-_Same(_compile, 'DisableLanguageExtensions', _boolean) # /Za
-_Same(_compile, 'DisableSpecificWarnings', _string_list) # /wd
-_Same(_compile, 'EnableFiberSafeOptimizations', _boolean) # /GT
-_Same(_compile, 'EnablePREfast', _boolean) # /analyze Visible='false'
-_Same(_compile, 'ExpandAttributedSource', _boolean) # /Fx
-_Same(_compile, 'FloatingPointExceptions', _boolean) # /fp:except
-_Same(_compile, 'ForceConformanceInForLoopScope', _boolean) # /Zc:forScope
-_Same(_compile, 'ForcedIncludeFiles', _file_list) # /FI
-_Same(_compile, 'ForcedUsingFiles', _file_list) # /FU
-_Same(_compile, 'GenerateXMLDocumentationFiles', _boolean) # /doc
-_Same(_compile, 'IgnoreStandardIncludePath', _boolean) # /X
-_Same(_compile, 'MinimalRebuild', _boolean) # /Gm
-_Same(_compile, 'OmitDefaultLibName', _boolean) # /Zl
-_Same(_compile, 'OmitFramePointers', _boolean) # /Oy
-_Same(_compile, 'PreprocessorDefinitions', _string_list) # /D
-_Same(_compile, 'ProgramDataBaseFileName', _file_name) # /Fd
-_Same(_compile, 'RuntimeTypeInfo', _boolean) # /GR
-_Same(_compile, 'ShowIncludes', _boolean) # /showIncludes
-_Same(_compile, 'SmallerTypeCheck', _boolean) # /RTCc
-_Same(_compile, 'StringPooling', _boolean) # /GF
-_Same(_compile, 'SuppressStartupBanner', _boolean) # /nologo
-_Same(_compile, 'TreatWChar_tAsBuiltInType', _boolean) # /Zc:wchar_t
-_Same(_compile, 'UndefineAllPreprocessorDefinitions', _boolean) # /u
-_Same(_compile, 'UndefinePreprocessorDefinitions', _string_list) # /U
-_Same(_compile, 'UseFullPaths', _boolean) # /FC
-_Same(_compile, 'WholeProgramOptimization', _boolean) # /GL
-_Same(_compile, 'XMLDocumentationFileName', _file_name)
-
-_Same(_compile, 'AssemblerOutput',
- _Enumeration(['NoListing',
- 'AssemblyCode', # /FA
- 'All', # /FAcs
- 'AssemblyAndMachineCode', # /FAc
- 'AssemblyAndSourceCode'])) # /FAs
-_Same(_compile, 'BasicRuntimeChecks',
- _Enumeration(['Default',
- 'StackFrameRuntimeCheck', # /RTCs
- 'UninitializedLocalUsageCheck', # /RTCu
- 'EnableFastChecks'])) # /RTC1
-_Same(_compile, 'BrowseInformation',
- _Enumeration(['false',
- 'true', # /FR
- 'true'])) # /Fr
-_Same(_compile, 'CallingConvention',
- _Enumeration(['Cdecl', # /Gd
- 'FastCall', # /Gr
- 'StdCall', # /Gz
- 'VectorCall'])) # /Gv
-_Same(_compile, 'CompileAs',
- _Enumeration(['Default',
- 'CompileAsC', # /TC
- 'CompileAsCpp'])) # /TP
-_Same(_compile, 'DebugInformationFormat',
- _Enumeration(['', # Disabled
- 'OldStyle', # /Z7
- None,
- 'ProgramDatabase', # /Zi
- 'EditAndContinue'])) # /ZI
-_Same(_compile, 'EnableEnhancedInstructionSet',
- _Enumeration(['NotSet',
- 'StreamingSIMDExtensions', # /arch:SSE
- 'StreamingSIMDExtensions2', # /arch:SSE2
- 'AdvancedVectorExtensions', # /arch:AVX (vs2012+)
- 'NoExtensions', # /arch:IA32 (vs2012+)
- # This one only exists in the new msbuild format.
- 'AdvancedVectorExtensions2', # /arch:AVX2 (vs2013r2+)
- ]))
-_Same(_compile, 'ErrorReporting',
- _Enumeration(['None', # /errorReport:none
- 'Prompt', # /errorReport:prompt
- 'Queue'], # /errorReport:queue
- new=['Send'])) # /errorReport:send"
-_Same(_compile, 'ExceptionHandling',
- _Enumeration(['false',
- 'Sync', # /EHsc
- 'Async'], # /EHa
- new=['SyncCThrow'])) # /EHs
-_Same(_compile, 'FavorSizeOrSpeed',
- _Enumeration(['Neither',
- 'Speed', # /Ot
- 'Size'])) # /Os
-_Same(_compile, 'FloatingPointModel',
- _Enumeration(['Precise', # /fp:precise
- 'Strict', # /fp:strict
- 'Fast'])) # /fp:fast
-_Same(_compile, 'InlineFunctionExpansion',
- _Enumeration(['Default',
- 'OnlyExplicitInline', # /Ob1
- 'AnySuitable'], # /Ob2
- new=['Disabled'])) # /Ob0
-_Same(_compile, 'Optimization',
- _Enumeration(['Disabled', # /Od
- 'MinSpace', # /O1
- 'MaxSpeed', # /O2
- 'Full'])) # /Ox
-_Same(_compile, 'RuntimeLibrary',
- _Enumeration(['MultiThreaded', # /MT
- 'MultiThreadedDebug', # /MTd
- 'MultiThreadedDLL', # /MD
- 'MultiThreadedDebugDLL'])) # /MDd
-_Same(_compile, 'StructMemberAlignment',
- _Enumeration(['Default',
- '1Byte', # /Zp1
- '2Bytes', # /Zp2
- '4Bytes', # /Zp4
- '8Bytes', # /Zp8
- '16Bytes'])) # /Zp16
-_Same(_compile, 'WarningLevel',
- _Enumeration(['TurnOffAllWarnings', # /W0
- 'Level1', # /W1
- 'Level2', # /W2
- 'Level3', # /W3
- 'Level4'], # /W4
- new=['EnableAllWarnings'])) # /Wall
-
-# Options found in MSVS that have been renamed in MSBuild.
-_Renamed(_compile, 'EnableFunctionLevelLinking', 'FunctionLevelLinking',
- _boolean) # /Gy
-_Renamed(_compile, 'EnableIntrinsicFunctions', 'IntrinsicFunctions',
- _boolean) # /Oi
-_Renamed(_compile, 'KeepComments', 'PreprocessKeepComments', _boolean) # /C
-_Renamed(_compile, 'ObjectFile', 'ObjectFileName', _file_name) # /Fo
-_Renamed(_compile, 'OpenMP', 'OpenMPSupport', _boolean) # /openmp
-_Renamed(_compile, 'PrecompiledHeaderThrough', 'PrecompiledHeaderFile',
- _file_name) # Used with /Yc and /Yu
-_Renamed(_compile, 'PrecompiledHeaderFile', 'PrecompiledHeaderOutputFile',
- _file_name) # /Fp
-_Renamed(_compile, 'UsePrecompiledHeader', 'PrecompiledHeader',
- _Enumeration(['NotUsing', # VS recognized '' for this value too.
- 'Create', # /Yc
- 'Use'])) # /Yu
-_Renamed(_compile, 'WarnAsError', 'TreatWarningAsError', _boolean) # /WX
-
-_ConvertedToAdditionalOption(_compile, 'DefaultCharIsUnsigned', '/J')
-
-# MSVS options not found in MSBuild.
-_MSVSOnly(_compile, 'Detect64BitPortabilityProblems', _boolean)
-_MSVSOnly(_compile, 'UseUnicodeResponseFiles', _boolean)
-
-# MSBuild options not found in MSVS.
-_MSBuildOnly(_compile, 'BuildingInIDE', _boolean)
-_MSBuildOnly(_compile, 'CompileAsManaged',
- _Enumeration([], new=['false',
- 'true'])) # /clr
-_MSBuildOnly(_compile, 'CreateHotpatchableImage', _boolean) # /hotpatch
-_MSBuildOnly(_compile, 'MultiProcessorCompilation', _boolean) # /MP
-_MSBuildOnly(_compile, 'PreprocessOutputPath', _string) # /Fi
-_MSBuildOnly(_compile, 'ProcessorNumber', _integer) # the number of processors
-_MSBuildOnly(_compile, 'TrackerLogDirectory', _folder_name)
-_MSBuildOnly(_compile, 'TreatSpecificWarningsAsErrors', _string_list) # /we
-_MSBuildOnly(_compile, 'UseUnicodeForAssemblerListing', _boolean) # /FAu
-
-# Defines a setting that needs very customized processing
-_CustomGeneratePreprocessedFile(_compile, 'GeneratePreprocessedFile')
-
-
-# Directives for converting MSVS VCLinkerTool to MSBuild Link.
-# See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\link.xml" for
-# the schema of the MSBuild Link settings.
-
-# Options that have the same name in MSVS and MSBuild
-_Same(_link, 'AdditionalDependencies', _file_list)
-_Same(_link, 'AdditionalLibraryDirectories', _folder_list) # /LIBPATH
-# /MANIFESTDEPENDENCY:
-_Same(_link, 'AdditionalManifestDependencies', _file_list)
-_Same(_link, 'AdditionalOptions', _string_list)
-_Same(_link, 'AddModuleNamesToAssembly', _file_list) # /ASSEMBLYMODULE
-_Same(_link, 'AllowIsolation', _boolean) # /ALLOWISOLATION
-_Same(_link, 'AssemblyLinkResource', _file_list) # /ASSEMBLYLINKRESOURCE
-_Same(_link, 'BaseAddress', _string) # /BASE
-_Same(_link, 'CLRUnmanagedCodeCheck', _boolean) # /CLRUNMANAGEDCODECHECK
-_Same(_link, 'DelayLoadDLLs', _file_list) # /DELAYLOAD
-_Same(_link, 'DelaySign', _boolean) # /DELAYSIGN
-_Same(_link, 'EmbedManagedResourceFile', _file_list) # /ASSEMBLYRESOURCE
-_Same(_link, 'EnableUAC', _boolean) # /MANIFESTUAC
-_Same(_link, 'EntryPointSymbol', _string) # /ENTRY
-_Same(_link, 'ForceSymbolReferences', _file_list) # /INCLUDE
-_Same(_link, 'FunctionOrder', _file_name) # /ORDER
-_Same(_link, 'GenerateDebugInformation', _boolean) # /DEBUG
-_Same(_link, 'GenerateMapFile', _boolean) # /MAP
-_Same(_link, 'HeapCommitSize', _string)
-_Same(_link, 'HeapReserveSize', _string) # /HEAP
-_Same(_link, 'IgnoreAllDefaultLibraries', _boolean) # /NODEFAULTLIB
-_Same(_link, 'IgnoreEmbeddedIDL', _boolean) # /IGNOREIDL
-_Same(_link, 'ImportLibrary', _file_name) # /IMPLIB
-_Same(_link, 'KeyContainer', _file_name) # /KEYCONTAINER
-_Same(_link, 'KeyFile', _file_name) # /KEYFILE
-_Same(_link, 'ManifestFile', _file_name) # /ManifestFile
-_Same(_link, 'MapExports', _boolean) # /MAPINFO:EXPORTS
-_Same(_link, 'MapFileName', _file_name)
-_Same(_link, 'MergedIDLBaseFileName', _file_name) # /IDLOUT
-_Same(_link, 'MergeSections', _string) # /MERGE
-_Same(_link, 'MidlCommandFile', _file_name) # /MIDL
-_Same(_link, 'ModuleDefinitionFile', _file_name) # /DEF
-_Same(_link, 'OutputFile', _file_name) # /OUT
-_Same(_link, 'PerUserRedirection', _boolean)
-_Same(_link, 'Profile', _boolean) # /PROFILE
-_Same(_link, 'ProfileGuidedDatabase', _file_name) # /PGD
-_Same(_link, 'ProgramDatabaseFile', _file_name) # /PDB
-_Same(_link, 'RegisterOutput', _boolean)
-_Same(_link, 'SetChecksum', _boolean) # /RELEASE
-_Same(_link, 'StackCommitSize', _string)
-_Same(_link, 'StackReserveSize', _string) # /STACK
-_Same(_link, 'StripPrivateSymbols', _file_name) # /PDBSTRIPPED
-_Same(_link, 'SupportUnloadOfDelayLoadedDLL', _boolean) # /DELAY:UNLOAD
-_Same(_link, 'SuppressStartupBanner', _boolean) # /NOLOGO
-_Same(_link, 'SwapRunFromCD', _boolean) # /SWAPRUN:CD
-_Same(_link, 'TurnOffAssemblyGeneration', _boolean) # /NOASSEMBLY
-_Same(_link, 'TypeLibraryFile', _file_name) # /TLBOUT
-_Same(_link, 'TypeLibraryResourceID', _integer) # /TLBID
-_Same(_link, 'UACUIAccess', _boolean) # /uiAccess='true'
-_Same(_link, 'Version', _string) # /VERSION
-
-_Same(_link, 'EnableCOMDATFolding', _newly_boolean) # /OPT:ICF
-_Same(_link, 'FixedBaseAddress', _newly_boolean) # /FIXED
-_Same(_link, 'LargeAddressAware', _newly_boolean) # /LARGEADDRESSAWARE
-_Same(_link, 'OptimizeReferences', _newly_boolean) # /OPT:REF
-_Same(_link, 'RandomizedBaseAddress', _newly_boolean) # /DYNAMICBASE
-_Same(_link, 'TerminalServerAware', _newly_boolean) # /TSAWARE
-
-_subsystem_enumeration = _Enumeration(
- ['NotSet',
- 'Console', # /SUBSYSTEM:CONSOLE
- 'Windows', # /SUBSYSTEM:WINDOWS
- 'Native', # /SUBSYSTEM:NATIVE
- 'EFI Application', # /SUBSYSTEM:EFI_APPLICATION
- 'EFI Boot Service Driver', # /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER
- 'EFI ROM', # /SUBSYSTEM:EFI_ROM
- 'EFI Runtime', # /SUBSYSTEM:EFI_RUNTIME_DRIVER
- 'WindowsCE'], # /SUBSYSTEM:WINDOWSCE
- new=['POSIX']) # /SUBSYSTEM:POSIX
-
-_target_machine_enumeration = _Enumeration(
- ['NotSet',
- 'MachineX86', # /MACHINE:X86
- None,
- 'MachineARM', # /MACHINE:ARM
- 'MachineEBC', # /MACHINE:EBC
- 'MachineIA64', # /MACHINE:IA64
- None,
- 'MachineMIPS', # /MACHINE:MIPS
- 'MachineMIPS16', # /MACHINE:MIPS16
- 'MachineMIPSFPU', # /MACHINE:MIPSFPU
- 'MachineMIPSFPU16', # /MACHINE:MIPSFPU16
- None,
- None,
- None,
- 'MachineSH4', # /MACHINE:SH4
- None,
- 'MachineTHUMB', # /MACHINE:THUMB
- 'MachineX64']) # /MACHINE:X64
-
-_Same(_link, 'AssemblyDebug',
- _Enumeration(['',
- 'true', # /ASSEMBLYDEBUG
- 'false'])) # /ASSEMBLYDEBUG:DISABLE
-_Same(_link, 'CLRImageType',
- _Enumeration(['Default',
- 'ForceIJWImage', # /CLRIMAGETYPE:IJW
- 'ForcePureILImage', # /Switch="CLRIMAGETYPE:PURE
- 'ForceSafeILImage'])) # /Switch="CLRIMAGETYPE:SAFE
-_Same(_link, 'CLRThreadAttribute',
- _Enumeration(['DefaultThreadingAttribute', # /CLRTHREADATTRIBUTE:NONE
- 'MTAThreadingAttribute', # /CLRTHREADATTRIBUTE:MTA
- 'STAThreadingAttribute'])) # /CLRTHREADATTRIBUTE:STA
-_Same(_link, 'DataExecutionPrevention',
- _Enumeration(['',
- 'false', # /NXCOMPAT:NO
- 'true'])) # /NXCOMPAT
-_Same(_link, 'Driver',
- _Enumeration(['NotSet',
- 'Driver', # /Driver
- 'UpOnly', # /DRIVER:UPONLY
- 'WDM'])) # /DRIVER:WDM
-_Same(_link, 'LinkTimeCodeGeneration',
- _Enumeration(['Default',
- 'UseLinkTimeCodeGeneration', # /LTCG
- 'PGInstrument', # /LTCG:PGInstrument
- 'PGOptimization', # /LTCG:PGOptimize
- 'PGUpdate'])) # /LTCG:PGUpdate
-_Same(_link, 'ShowProgress',
- _Enumeration(['NotSet',
- 'LinkVerbose', # /VERBOSE
- 'LinkVerboseLib'], # /VERBOSE:Lib
- new=['LinkVerboseICF', # /VERBOSE:ICF
- 'LinkVerboseREF', # /VERBOSE:REF
- 'LinkVerboseSAFESEH', # /VERBOSE:SAFESEH
- 'LinkVerboseCLR'])) # /VERBOSE:CLR
-_Same(_link, 'SubSystem', _subsystem_enumeration)
-_Same(_link, 'TargetMachine', _target_machine_enumeration)
-_Same(_link, 'UACExecutionLevel',
- _Enumeration(['AsInvoker', # /level='asInvoker'
- 'HighestAvailable', # /level='highestAvailable'
- 'RequireAdministrator'])) # /level='requireAdministrator'
-_Same(_link, 'MinimumRequiredVersion', _string)
-_Same(_link, 'TreatLinkerWarningAsErrors', _boolean) # /WX
-
-
-# Options found in MSVS that have been renamed in MSBuild.
-_Renamed(_link, 'ErrorReporting', 'LinkErrorReporting',
- _Enumeration(['NoErrorReport', # /ERRORREPORT:NONE
- 'PromptImmediately', # /ERRORREPORT:PROMPT
- 'QueueForNextLogin'], # /ERRORREPORT:QUEUE
- new=['SendErrorReport'])) # /ERRORREPORT:SEND
-_Renamed(_link, 'IgnoreDefaultLibraryNames', 'IgnoreSpecificDefaultLibraries',
- _file_list) # /NODEFAULTLIB
-_Renamed(_link, 'ResourceOnlyDLL', 'NoEntryPoint', _boolean) # /NOENTRY
-_Renamed(_link, 'SwapRunFromNet', 'SwapRunFromNET', _boolean) # /SWAPRUN:NET
-
-_Moved(_link, 'GenerateManifest', '', _boolean)
-_Moved(_link, 'IgnoreImportLibrary', '', _boolean)
-_Moved(_link, 'LinkIncremental', '', _newly_boolean)
-_Moved(_link, 'LinkLibraryDependencies', 'ProjectReference', _boolean)
-_Moved(_link, 'UseLibraryDependencyInputs', 'ProjectReference', _boolean)
-
-# MSVS options not found in MSBuild.
-_MSVSOnly(_link, 'OptimizeForWindows98', _newly_boolean)
-_MSVSOnly(_link, 'UseUnicodeResponseFiles', _boolean)
-
-# MSBuild options not found in MSVS.
-_MSBuildOnly(_link, 'BuildingInIDE', _boolean)
-_MSBuildOnly(_link, 'ImageHasSafeExceptionHandlers', _boolean) # /SAFESEH
-_MSBuildOnly(_link, 'LinkDLL', _boolean) # /DLL Visible='false'
-_MSBuildOnly(_link, 'LinkStatus', _boolean) # /LTCG:STATUS
-_MSBuildOnly(_link, 'PreventDllBinding', _boolean) # /ALLOWBIND
-_MSBuildOnly(_link, 'SupportNobindOfDelayLoadedDLL', _boolean) # /DELAY:NOBIND
-_MSBuildOnly(_link, 'TrackerLogDirectory', _folder_name)
-_MSBuildOnly(_link, 'MSDOSStubFileName', _file_name) # /STUB Visible='false'
-_MSBuildOnly(_link, 'SectionAlignment', _integer) # /ALIGN
-_MSBuildOnly(_link, 'SpecifySectionAttributes', _string) # /SECTION
-_MSBuildOnly(_link, 'ForceFileOutput',
- _Enumeration([], new=['Enabled', # /FORCE
- # /FORCE:MULTIPLE
- 'MultiplyDefinedSymbolOnly',
- 'UndefinedSymbolOnly'])) # /FORCE:UNRESOLVED
-_MSBuildOnly(_link, 'CreateHotPatchableImage',
- _Enumeration([], new=['Enabled', # /FUNCTIONPADMIN
- 'X86Image', # /FUNCTIONPADMIN:5
- 'X64Image', # /FUNCTIONPADMIN:6
- 'ItaniumImage'])) # /FUNCTIONPADMIN:16
-_MSBuildOnly(_link, 'CLRSupportLastError',
- _Enumeration([], new=['Enabled', # /CLRSupportLastError
- 'Disabled', # /CLRSupportLastError:NO
- # /CLRSupportLastError:SYSTEMDLL
- 'SystemDlls']))
-
-
-# Directives for converting VCResourceCompilerTool to ResourceCompile.
-# See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\rc.xml" for
-# the schema of the MSBuild ResourceCompile settings.
-
-_Same(_rc, 'AdditionalOptions', _string_list)
-_Same(_rc, 'AdditionalIncludeDirectories', _folder_list) # /I
-_Same(_rc, 'Culture', _Integer(msbuild_base=16))
-_Same(_rc, 'IgnoreStandardIncludePath', _boolean) # /X
-_Same(_rc, 'PreprocessorDefinitions', _string_list) # /D
-_Same(_rc, 'ResourceOutputFileName', _string) # /fo
-_Same(_rc, 'ShowProgress', _boolean) # /v
-# There is no UI in VisualStudio 2008 to set the following properties.
-# However they are found in CL and other tools. Include them here for
-# completeness, as they are very likely to have the same usage pattern.
-_Same(_rc, 'SuppressStartupBanner', _boolean) # /nologo
-_Same(_rc, 'UndefinePreprocessorDefinitions', _string_list) # /u
-
-# MSBuild options not found in MSVS.
-_MSBuildOnly(_rc, 'NullTerminateStrings', _boolean) # /n
-_MSBuildOnly(_rc, 'TrackerLogDirectory', _folder_name)
-
-
-# Directives for converting VCMIDLTool to Midl.
-# See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\midl.xml" for
-# the schema of the MSBuild Midl settings.
-
-_Same(_midl, 'AdditionalIncludeDirectories', _folder_list) # /I
-_Same(_midl, 'AdditionalOptions', _string_list)
-_Same(_midl, 'CPreprocessOptions', _string) # /cpp_opt
-_Same(_midl, 'ErrorCheckAllocations', _boolean) # /error allocation
-_Same(_midl, 'ErrorCheckBounds', _boolean) # /error bounds_check
-_Same(_midl, 'ErrorCheckEnumRange', _boolean) # /error enum
-_Same(_midl, 'ErrorCheckRefPointers', _boolean) # /error ref
-_Same(_midl, 'ErrorCheckStubData', _boolean) # /error stub_data
-_Same(_midl, 'GenerateStublessProxies', _boolean) # /Oicf
-_Same(_midl, 'GenerateTypeLibrary', _boolean)
-_Same(_midl, 'HeaderFileName', _file_name) # /h
-_Same(_midl, 'IgnoreStandardIncludePath', _boolean) # /no_def_idir
-_Same(_midl, 'InterfaceIdentifierFileName', _file_name) # /iid
-_Same(_midl, 'MkTypLibCompatible', _boolean) # /mktyplib203
-_Same(_midl, 'OutputDirectory', _string) # /out
-_Same(_midl, 'PreprocessorDefinitions', _string_list) # /D
-_Same(_midl, 'ProxyFileName', _file_name) # /proxy
-_Same(_midl, 'RedirectOutputAndErrors', _file_name) # /o
-_Same(_midl, 'SuppressStartupBanner', _boolean) # /nologo
-_Same(_midl, 'TypeLibraryName', _file_name) # /tlb
-_Same(_midl, 'UndefinePreprocessorDefinitions', _string_list) # /U
-_Same(_midl, 'WarnAsError', _boolean) # /WX
-
-_Same(_midl, 'DefaultCharType',
- _Enumeration(['Unsigned', # /char unsigned
- 'Signed', # /char signed
- 'Ascii'])) # /char ascii7
-_Same(_midl, 'TargetEnvironment',
- _Enumeration(['NotSet',
- 'Win32', # /env win32
- 'Itanium', # /env ia64
- 'X64'])) # /env x64
-_Same(_midl, 'EnableErrorChecks',
- _Enumeration(['EnableCustom',
- 'None', # /error none
- 'All'])) # /error all
-_Same(_midl, 'StructMemberAlignment',
- _Enumeration(['NotSet',
- '1', # Zp1
- '2', # Zp2
- '4', # Zp4
- '8'])) # Zp8
-_Same(_midl, 'WarningLevel',
- _Enumeration(['0', # /W0
- '1', # /W1
- '2', # /W2
- '3', # /W3
- '4'])) # /W4
-
-_Renamed(_midl, 'DLLDataFileName', 'DllDataFileName', _file_name) # /dlldata
-_Renamed(_midl, 'ValidateParameters', 'ValidateAllParameters',
- _boolean) # /robust
-
-# MSBuild options not found in MSVS.
-_MSBuildOnly(_midl, 'ApplicationConfigurationMode', _boolean) # /app_config
-_MSBuildOnly(_midl, 'ClientStubFile', _file_name) # /cstub
-_MSBuildOnly(_midl, 'GenerateClientFiles',
- _Enumeration([], new=['Stub', # /client stub
- 'None'])) # /client none
-_MSBuildOnly(_midl, 'GenerateServerFiles',
- _Enumeration([], new=['Stub', # /client stub
- 'None'])) # /client none
-_MSBuildOnly(_midl, 'LocaleID', _integer) # /lcid DECIMAL
-_MSBuildOnly(_midl, 'ServerStubFile', _file_name) # /sstub
-_MSBuildOnly(_midl, 'SuppressCompilerWarnings', _boolean) # /no_warn
-_MSBuildOnly(_midl, 'TrackerLogDirectory', _folder_name)
-_MSBuildOnly(_midl, 'TypeLibFormat',
- _Enumeration([], new=['NewFormat', # /newtlb
- 'OldFormat'])) # /oldtlb
-
-
-# Directives for converting VCLibrarianTool to Lib.
-# See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\lib.xml" for
-# the schema of the MSBuild Lib settings.
-
-_Same(_lib, 'AdditionalDependencies', _file_list)
-_Same(_lib, 'AdditionalLibraryDirectories', _folder_list) # /LIBPATH
-_Same(_lib, 'AdditionalOptions', _string_list)
-_Same(_lib, 'ExportNamedFunctions', _string_list) # /EXPORT
-_Same(_lib, 'ForceSymbolReferences', _string) # /INCLUDE
-_Same(_lib, 'IgnoreAllDefaultLibraries', _boolean) # /NODEFAULTLIB
-_Same(_lib, 'IgnoreSpecificDefaultLibraries', _file_list) # /NODEFAULTLIB
-_Same(_lib, 'ModuleDefinitionFile', _file_name) # /DEF
-_Same(_lib, 'OutputFile', _file_name) # /OUT
-_Same(_lib, 'SuppressStartupBanner', _boolean) # /NOLOGO
-_Same(_lib, 'UseUnicodeResponseFiles', _boolean)
-_Same(_lib, 'LinkTimeCodeGeneration', _boolean) # /LTCG
-_Same(_lib, 'TargetMachine', _target_machine_enumeration)
-
-# TODO(jeanluc) _link defines the same value that gets moved to
-# ProjectReference. We may want to validate that they are consistent.
-_Moved(_lib, 'LinkLibraryDependencies', 'ProjectReference', _boolean)
-
-_MSBuildOnly(_lib, 'DisplayLibrary', _string) # /LIST Visible='false'
-_MSBuildOnly(_lib, 'ErrorReporting',
- _Enumeration([], new=['PromptImmediately', # /ERRORREPORT:PROMPT
- 'QueueForNextLogin', # /ERRORREPORT:QUEUE
- 'SendErrorReport', # /ERRORREPORT:SEND
- 'NoErrorReport'])) # /ERRORREPORT:NONE
-_MSBuildOnly(_lib, 'MinimumRequiredVersion', _string)
-_MSBuildOnly(_lib, 'Name', _file_name) # /NAME
-_MSBuildOnly(_lib, 'RemoveObjects', _file_list) # /REMOVE
-_MSBuildOnly(_lib, 'SubSystem', _subsystem_enumeration)
-_MSBuildOnly(_lib, 'TrackerLogDirectory', _folder_name)
-_MSBuildOnly(_lib, 'TreatLibWarningAsErrors', _boolean) # /WX
-_MSBuildOnly(_lib, 'Verbose', _boolean)
-
-
-# Directives for converting VCManifestTool to Mt.
-# See "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\1033\mt.xml" for
-# the schema of the MSBuild Lib settings.
-
-# Options that have the same name in MSVS and MSBuild
-_Same(_manifest, 'AdditionalManifestFiles', _file_list) # /manifest
-_Same(_manifest, 'AdditionalOptions', _string_list)
-_Same(_manifest, 'AssemblyIdentity', _string) # /identity:
-_Same(_manifest, 'ComponentFileName', _file_name) # /dll
-_Same(_manifest, 'GenerateCatalogFiles', _boolean) # /makecdfs
-_Same(_manifest, 'InputResourceManifests', _string) # /inputresource
-_Same(_manifest, 'OutputManifestFile', _file_name) # /out
-_Same(_manifest, 'RegistrarScriptFile', _file_name) # /rgs
-_Same(_manifest, 'ReplacementsFile', _file_name) # /replacements
-_Same(_manifest, 'SuppressStartupBanner', _boolean) # /nologo
-_Same(_manifest, 'TypeLibraryFile', _file_name) # /tlb:
-_Same(_manifest, 'UpdateFileHashes', _boolean) # /hashupdate
-_Same(_manifest, 'UpdateFileHashesSearchPath', _file_name)
-_Same(_manifest, 'VerboseOutput', _boolean) # /verbose
-
-# Options that have moved location.
-_MovedAndRenamed(_manifest, 'ManifestResourceFile',
- 'ManifestResourceCompile',
- 'ResourceOutputFileName',
- _file_name)
-_Moved(_manifest, 'EmbedManifest', '', _boolean)
-
-# MSVS options not found in MSBuild.
-_MSVSOnly(_manifest, 'DependencyInformationFile', _file_name)
-_MSVSOnly(_manifest, 'UseFAT32Workaround', _boolean)
-_MSVSOnly(_manifest, 'UseUnicodeResponseFiles', _boolean)
-
-# MSBuild options not found in MSVS.
-_MSBuildOnly(_manifest, 'EnableDPIAwareness', _boolean)
-_MSBuildOnly(_manifest, 'GenerateCategoryTags', _boolean) # /category
-_MSBuildOnly(_manifest, 'ManifestFromManagedAssembly',
- _file_name) # /managedassemblyname
-_MSBuildOnly(_manifest, 'OutputResourceManifests', _string) # /outputresource
-_MSBuildOnly(_manifest, 'SuppressDependencyElement', _boolean) # /nodependency
-_MSBuildOnly(_manifest, 'TrackerLogDirectory', _folder_name)
-
-
-# Directives for MASM.
-# See "$(VCTargetsPath)\BuildCustomizations\masm.xml" for the schema of the
-# MSBuild MASM settings.
-
-# Options that have the same name in MSVS and MSBuild.
-_Same(_masm, 'UseSafeExceptionHandlers', _boolean) # /safeseh
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
deleted file mode 100755
index bf6ea6b..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
+++ /dev/null
@@ -1,1483 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Unit tests for the MSVSSettings.py file."""
-
-import StringIO
-import unittest
-import gyp.MSVSSettings as MSVSSettings
-
-
-class TestSequenceFunctions(unittest.TestCase):
-
- def setUp(self):
- self.stderr = StringIO.StringIO()
-
- def _ExpectedWarnings(self, expected):
- """Compares recorded lines to expected warnings."""
- self.stderr.seek(0)
- actual = self.stderr.read().split('\n')
- actual = [line for line in actual if line]
- self.assertEqual(sorted(expected), sorted(actual))
-
- def testValidateMSVSSettings_tool_names(self):
- """Tests that only MSVS tool names are allowed."""
- MSVSSettings.ValidateMSVSSettings(
- {'VCCLCompilerTool': {},
- 'VCLinkerTool': {},
- 'VCMIDLTool': {},
- 'foo': {},
- 'VCResourceCompilerTool': {},
- 'VCLibrarianTool': {},
- 'VCManifestTool': {},
- 'ClCompile': {}},
- self.stderr)
- self._ExpectedWarnings([
- 'Warning: unrecognized tool foo',
- 'Warning: unrecognized tool ClCompile'])
-
- def testValidateMSVSSettings_settings(self):
- """Tests that for invalid MSVS settings."""
- MSVSSettings.ValidateMSVSSettings(
- {'VCCLCompilerTool': {
- 'AdditionalIncludeDirectories': 'folder1;folder2',
- 'AdditionalOptions': ['string1', 'string2'],
- 'AdditionalUsingDirectories': 'folder1;folder2',
- 'AssemblerListingLocation': 'a_file_name',
- 'AssemblerOutput': '0',
- 'BasicRuntimeChecks': '5',
- 'BrowseInformation': 'fdkslj',
- 'BrowseInformationFile': 'a_file_name',
- 'BufferSecurityCheck': 'true',
- 'CallingConvention': '-1',
- 'CompileAs': '1',
- 'DebugInformationFormat': '2',
- 'DefaultCharIsUnsigned': 'true',
- 'Detect64BitPortabilityProblems': 'true',
- 'DisableLanguageExtensions': 'true',
- 'DisableSpecificWarnings': 'string1;string2',
- 'EnableEnhancedInstructionSet': '1',
- 'EnableFiberSafeOptimizations': 'true',
- 'EnableFunctionLevelLinking': 'true',
- 'EnableIntrinsicFunctions': 'true',
- 'EnablePREfast': 'true',
- 'Enableprefast': 'bogus',
- 'ErrorReporting': '1',
- 'ExceptionHandling': '1',
- 'ExpandAttributedSource': 'true',
- 'FavorSizeOrSpeed': '1',
- 'FloatingPointExceptions': 'true',
- 'FloatingPointModel': '1',
- 'ForceConformanceInForLoopScope': 'true',
- 'ForcedIncludeFiles': 'file1;file2',
- 'ForcedUsingFiles': 'file1;file2',
- 'GeneratePreprocessedFile': '1',
- 'GenerateXMLDocumentationFiles': 'true',
- 'IgnoreStandardIncludePath': 'true',
- 'InlineFunctionExpansion': '1',
- 'KeepComments': 'true',
- 'MinimalRebuild': 'true',
- 'ObjectFile': 'a_file_name',
- 'OmitDefaultLibName': 'true',
- 'OmitFramePointers': 'true',
- 'OpenMP': 'true',
- 'Optimization': '1',
- 'PrecompiledHeaderFile': 'a_file_name',
- 'PrecompiledHeaderThrough': 'a_file_name',
- 'PreprocessorDefinitions': 'string1;string2',
- 'ProgramDataBaseFileName': 'a_file_name',
- 'RuntimeLibrary': '1',
- 'RuntimeTypeInfo': 'true',
- 'ShowIncludes': 'true',
- 'SmallerTypeCheck': 'true',
- 'StringPooling': 'true',
- 'StructMemberAlignment': '1',
- 'SuppressStartupBanner': 'true',
- 'TreatWChar_tAsBuiltInType': 'true',
- 'UndefineAllPreprocessorDefinitions': 'true',
- 'UndefinePreprocessorDefinitions': 'string1;string2',
- 'UseFullPaths': 'true',
- 'UsePrecompiledHeader': '1',
- 'UseUnicodeResponseFiles': 'true',
- 'WarnAsError': 'true',
- 'WarningLevel': '1',
- 'WholeProgramOptimization': 'true',
- 'XMLDocumentationFileName': 'a_file_name',
- 'ZZXYZ': 'bogus'},
- 'VCLinkerTool': {
- 'AdditionalDependencies': 'file1;file2',
- 'AdditionalDependencies_excluded': 'file3',
- 'AdditionalLibraryDirectories': 'folder1;folder2',
- 'AdditionalManifestDependencies': 'file1;file2',
- 'AdditionalOptions': 'a string1',
- 'AddModuleNamesToAssembly': 'file1;file2',
- 'AllowIsolation': 'true',
- 'AssemblyDebug': '2',
- 'AssemblyLinkResource': 'file1;file2',
- 'BaseAddress': 'a string1',
- 'CLRImageType': '2',
- 'CLRThreadAttribute': '2',
- 'CLRUnmanagedCodeCheck': 'true',
- 'DataExecutionPrevention': '2',
- 'DelayLoadDLLs': 'file1;file2',
- 'DelaySign': 'true',
- 'Driver': '2',
- 'EmbedManagedResourceFile': 'file1;file2',
- 'EnableCOMDATFolding': '2',
- 'EnableUAC': 'true',
- 'EntryPointSymbol': 'a string1',
- 'ErrorReporting': '2',
- 'FixedBaseAddress': '2',
- 'ForceSymbolReferences': 'file1;file2',
- 'FunctionOrder': 'a_file_name',
- 'GenerateDebugInformation': 'true',
- 'GenerateManifest': 'true',
- 'GenerateMapFile': 'true',
- 'HeapCommitSize': 'a string1',
- 'HeapReserveSize': 'a string1',
- 'IgnoreAllDefaultLibraries': 'true',
- 'IgnoreDefaultLibraryNames': 'file1;file2',
- 'IgnoreEmbeddedIDL': 'true',
- 'IgnoreImportLibrary': 'true',
- 'ImportLibrary': 'a_file_name',
- 'KeyContainer': 'a_file_name',
- 'KeyFile': 'a_file_name',
- 'LargeAddressAware': '2',
- 'LinkIncremental': '2',
- 'LinkLibraryDependencies': 'true',
- 'LinkTimeCodeGeneration': '2',
- 'ManifestFile': 'a_file_name',
- 'MapExports': 'true',
- 'MapFileName': 'a_file_name',
- 'MergedIDLBaseFileName': 'a_file_name',
- 'MergeSections': 'a string1',
- 'MidlCommandFile': 'a_file_name',
- 'ModuleDefinitionFile': 'a_file_name',
- 'OptimizeForWindows98': '1',
- 'OptimizeReferences': '2',
- 'OutputFile': 'a_file_name',
- 'PerUserRedirection': 'true',
- 'Profile': 'true',
- 'ProfileGuidedDatabase': 'a_file_name',
- 'ProgramDatabaseFile': 'a_file_name',
- 'RandomizedBaseAddress': '2',
- 'RegisterOutput': 'true',
- 'ResourceOnlyDLL': 'true',
- 'SetChecksum': 'true',
- 'ShowProgress': '2',
- 'StackCommitSize': 'a string1',
- 'StackReserveSize': 'a string1',
- 'StripPrivateSymbols': 'a_file_name',
- 'SubSystem': '2',
- 'SupportUnloadOfDelayLoadedDLL': 'true',
- 'SuppressStartupBanner': 'true',
- 'SwapRunFromCD': 'true',
- 'SwapRunFromNet': 'true',
- 'TargetMachine': '2',
- 'TerminalServerAware': '2',
- 'TurnOffAssemblyGeneration': 'true',
- 'TypeLibraryFile': 'a_file_name',
- 'TypeLibraryResourceID': '33',
- 'UACExecutionLevel': '2',
- 'UACUIAccess': 'true',
- 'UseLibraryDependencyInputs': 'true',
- 'UseUnicodeResponseFiles': 'true',
- 'Version': 'a string1'},
- 'VCMIDLTool': {
- 'AdditionalIncludeDirectories': 'folder1;folder2',
- 'AdditionalOptions': 'a string1',
- 'CPreprocessOptions': 'a string1',
- 'DefaultCharType': '1',
- 'DLLDataFileName': 'a_file_name',
- 'EnableErrorChecks': '1',
- 'ErrorCheckAllocations': 'true',
- 'ErrorCheckBounds': 'true',
- 'ErrorCheckEnumRange': 'true',
- 'ErrorCheckRefPointers': 'true',
- 'ErrorCheckStubData': 'true',
- 'GenerateStublessProxies': 'true',
- 'GenerateTypeLibrary': 'true',
- 'HeaderFileName': 'a_file_name',
- 'IgnoreStandardIncludePath': 'true',
- 'InterfaceIdentifierFileName': 'a_file_name',
- 'MkTypLibCompatible': 'true',
- 'notgood': 'bogus',
- 'OutputDirectory': 'a string1',
- 'PreprocessorDefinitions': 'string1;string2',
- 'ProxyFileName': 'a_file_name',
- 'RedirectOutputAndErrors': 'a_file_name',
- 'StructMemberAlignment': '1',
- 'SuppressStartupBanner': 'true',
- 'TargetEnvironment': '1',
- 'TypeLibraryName': 'a_file_name',
- 'UndefinePreprocessorDefinitions': 'string1;string2',
- 'ValidateParameters': 'true',
- 'WarnAsError': 'true',
- 'WarningLevel': '1'},
- 'VCResourceCompilerTool': {
- 'AdditionalOptions': 'a string1',
- 'AdditionalIncludeDirectories': 'folder1;folder2',
- 'Culture': '1003',
- 'IgnoreStandardIncludePath': 'true',
- 'notgood2': 'bogus',
- 'PreprocessorDefinitions': 'string1;string2',
- 'ResourceOutputFileName': 'a string1',
- 'ShowProgress': 'true',
- 'SuppressStartupBanner': 'true',
- 'UndefinePreprocessorDefinitions': 'string1;string2'},
- 'VCLibrarianTool': {
- 'AdditionalDependencies': 'file1;file2',
- 'AdditionalLibraryDirectories': 'folder1;folder2',
- 'AdditionalOptions': 'a string1',
- 'ExportNamedFunctions': 'string1;string2',
- 'ForceSymbolReferences': 'a string1',
- 'IgnoreAllDefaultLibraries': 'true',
- 'IgnoreSpecificDefaultLibraries': 'file1;file2',
- 'LinkLibraryDependencies': 'true',
- 'ModuleDefinitionFile': 'a_file_name',
- 'OutputFile': 'a_file_name',
- 'SuppressStartupBanner': 'true',
- 'UseUnicodeResponseFiles': 'true'},
- 'VCManifestTool': {
- 'AdditionalManifestFiles': 'file1;file2',
- 'AdditionalOptions': 'a string1',
- 'AssemblyIdentity': 'a string1',
- 'ComponentFileName': 'a_file_name',
- 'DependencyInformationFile': 'a_file_name',
- 'GenerateCatalogFiles': 'true',
- 'InputResourceManifests': 'a string1',
- 'ManifestResourceFile': 'a_file_name',
- 'OutputManifestFile': 'a_file_name',
- 'RegistrarScriptFile': 'a_file_name',
- 'ReplacementsFile': 'a_file_name',
- 'SuppressStartupBanner': 'true',
- 'TypeLibraryFile': 'a_file_name',
- 'UpdateFileHashes': 'truel',
- 'UpdateFileHashesSearchPath': 'a_file_name',
- 'UseFAT32Workaround': 'true',
- 'UseUnicodeResponseFiles': 'true',
- 'VerboseOutput': 'true'}},
- self.stderr)
- self._ExpectedWarnings([
- 'Warning: for VCCLCompilerTool/BasicRuntimeChecks, '
- 'index value (5) not in expected range [0, 4)',
- 'Warning: for VCCLCompilerTool/BrowseInformation, '
- "invalid literal for int() with base 10: 'fdkslj'",
- 'Warning: for VCCLCompilerTool/CallingConvention, '
- 'index value (-1) not in expected range [0, 4)',
- 'Warning: for VCCLCompilerTool/DebugInformationFormat, '
- 'converted value for 2 not specified.',
- 'Warning: unrecognized setting VCCLCompilerTool/Enableprefast',
- 'Warning: unrecognized setting VCCLCompilerTool/ZZXYZ',
- 'Warning: for VCLinkerTool/TargetMachine, '
- 'converted value for 2 not specified.',
- 'Warning: unrecognized setting VCMIDLTool/notgood',
- 'Warning: unrecognized setting VCResourceCompilerTool/notgood2',
- 'Warning: for VCManifestTool/UpdateFileHashes, '
- "expected bool; got 'truel'"
- ''])
-
- def testValidateMSBuildSettings_settings(self):
- """Tests that for invalid MSBuild settings."""
- MSVSSettings.ValidateMSBuildSettings(
- {'ClCompile': {
- 'AdditionalIncludeDirectories': 'folder1;folder2',
- 'AdditionalOptions': ['string1', 'string2'],
- 'AdditionalUsingDirectories': 'folder1;folder2',
- 'AssemblerListingLocation': 'a_file_name',
- 'AssemblerOutput': 'NoListing',
- 'BasicRuntimeChecks': 'StackFrameRuntimeCheck',
- 'BrowseInformation': 'false',
- 'BrowseInformationFile': 'a_file_name',
- 'BufferSecurityCheck': 'true',
- 'BuildingInIDE': 'true',
- 'CallingConvention': 'Cdecl',
- 'CompileAs': 'CompileAsC',
- 'CompileAsManaged': 'true',
- 'CreateHotpatchableImage': 'true',
- 'DebugInformationFormat': 'ProgramDatabase',
- 'DisableLanguageExtensions': 'true',
- 'DisableSpecificWarnings': 'string1;string2',
- 'EnableEnhancedInstructionSet': 'StreamingSIMDExtensions',
- 'EnableFiberSafeOptimizations': 'true',
- 'EnablePREfast': 'true',
- 'Enableprefast': 'bogus',
- 'ErrorReporting': 'Prompt',
- 'ExceptionHandling': 'SyncCThrow',
- 'ExpandAttributedSource': 'true',
- 'FavorSizeOrSpeed': 'Neither',
- 'FloatingPointExceptions': 'true',
- 'FloatingPointModel': 'Precise',
- 'ForceConformanceInForLoopScope': 'true',
- 'ForcedIncludeFiles': 'file1;file2',
- 'ForcedUsingFiles': 'file1;file2',
- 'FunctionLevelLinking': 'false',
- 'GenerateXMLDocumentationFiles': 'true',
- 'IgnoreStandardIncludePath': 'true',
- 'InlineFunctionExpansion': 'OnlyExplicitInline',
- 'IntrinsicFunctions': 'false',
- 'MinimalRebuild': 'true',
- 'MultiProcessorCompilation': 'true',
- 'ObjectFileName': 'a_file_name',
- 'OmitDefaultLibName': 'true',
- 'OmitFramePointers': 'true',
- 'OpenMPSupport': 'true',
- 'Optimization': 'Disabled',
- 'PrecompiledHeader': 'NotUsing',
- 'PrecompiledHeaderFile': 'a_file_name',
- 'PrecompiledHeaderOutputFile': 'a_file_name',
- 'PreprocessKeepComments': 'true',
- 'PreprocessorDefinitions': 'string1;string2',
- 'PreprocessOutputPath': 'a string1',
- 'PreprocessSuppressLineNumbers': 'false',
- 'PreprocessToFile': 'false',
- 'ProcessorNumber': '33',
- 'ProgramDataBaseFileName': 'a_file_name',
- 'RuntimeLibrary': 'MultiThreaded',
- 'RuntimeTypeInfo': 'true',
- 'ShowIncludes': 'true',
- 'SmallerTypeCheck': 'true',
- 'StringPooling': 'true',
- 'StructMemberAlignment': '1Byte',
- 'SuppressStartupBanner': 'true',
- 'TrackerLogDirectory': 'a_folder',
- 'TreatSpecificWarningsAsErrors': 'string1;string2',
- 'TreatWarningAsError': 'true',
- 'TreatWChar_tAsBuiltInType': 'true',
- 'UndefineAllPreprocessorDefinitions': 'true',
- 'UndefinePreprocessorDefinitions': 'string1;string2',
- 'UseFullPaths': 'true',
- 'UseUnicodeForAssemblerListing': 'true',
- 'WarningLevel': 'TurnOffAllWarnings',
- 'WholeProgramOptimization': 'true',
- 'XMLDocumentationFileName': 'a_file_name',
- 'ZZXYZ': 'bogus'},
- 'Link': {
- 'AdditionalDependencies': 'file1;file2',
- 'AdditionalLibraryDirectories': 'folder1;folder2',
- 'AdditionalManifestDependencies': 'file1;file2',
- 'AdditionalOptions': 'a string1',
- 'AddModuleNamesToAssembly': 'file1;file2',
- 'AllowIsolation': 'true',
- 'AssemblyDebug': '',
- 'AssemblyLinkResource': 'file1;file2',
- 'BaseAddress': 'a string1',
- 'BuildingInIDE': 'true',
- 'CLRImageType': 'ForceIJWImage',
- 'CLRSupportLastError': 'Enabled',
- 'CLRThreadAttribute': 'MTAThreadingAttribute',
- 'CLRUnmanagedCodeCheck': 'true',
- 'CreateHotPatchableImage': 'X86Image',
- 'DataExecutionPrevention': 'false',
- 'DelayLoadDLLs': 'file1;file2',
- 'DelaySign': 'true',
- 'Driver': 'NotSet',
- 'EmbedManagedResourceFile': 'file1;file2',
- 'EnableCOMDATFolding': 'false',
- 'EnableUAC': 'true',
- 'EntryPointSymbol': 'a string1',
- 'FixedBaseAddress': 'false',
- 'ForceFileOutput': 'Enabled',
- 'ForceSymbolReferences': 'file1;file2',
- 'FunctionOrder': 'a_file_name',
- 'GenerateDebugInformation': 'true',
- 'GenerateMapFile': 'true',
- 'HeapCommitSize': 'a string1',
- 'HeapReserveSize': 'a string1',
- 'IgnoreAllDefaultLibraries': 'true',
- 'IgnoreEmbeddedIDL': 'true',
- 'IgnoreSpecificDefaultLibraries': 'a_file_list',
- 'ImageHasSafeExceptionHandlers': 'true',
- 'ImportLibrary': 'a_file_name',
- 'KeyContainer': 'a_file_name',
- 'KeyFile': 'a_file_name',
- 'LargeAddressAware': 'false',
- 'LinkDLL': 'true',
- 'LinkErrorReporting': 'SendErrorReport',
- 'LinkStatus': 'true',
- 'LinkTimeCodeGeneration': 'UseLinkTimeCodeGeneration',
- 'ManifestFile': 'a_file_name',
- 'MapExports': 'true',
- 'MapFileName': 'a_file_name',
- 'MergedIDLBaseFileName': 'a_file_name',
- 'MergeSections': 'a string1',
- 'MidlCommandFile': 'a_file_name',
- 'MinimumRequiredVersion': 'a string1',
- 'ModuleDefinitionFile': 'a_file_name',
- 'MSDOSStubFileName': 'a_file_name',
- 'NoEntryPoint': 'true',
- 'OptimizeReferences': 'false',
- 'OutputFile': 'a_file_name',
- 'PerUserRedirection': 'true',
- 'PreventDllBinding': 'true',
- 'Profile': 'true',
- 'ProfileGuidedDatabase': 'a_file_name',
- 'ProgramDatabaseFile': 'a_file_name',
- 'RandomizedBaseAddress': 'false',
- 'RegisterOutput': 'true',
- 'SectionAlignment': '33',
- 'SetChecksum': 'true',
- 'ShowProgress': 'LinkVerboseREF',
- 'SpecifySectionAttributes': 'a string1',
- 'StackCommitSize': 'a string1',
- 'StackReserveSize': 'a string1',
- 'StripPrivateSymbols': 'a_file_name',
- 'SubSystem': 'Console',
- 'SupportNobindOfDelayLoadedDLL': 'true',
- 'SupportUnloadOfDelayLoadedDLL': 'true',
- 'SuppressStartupBanner': 'true',
- 'SwapRunFromCD': 'true',
- 'SwapRunFromNET': 'true',
- 'TargetMachine': 'MachineX86',
- 'TerminalServerAware': 'false',
- 'TrackerLogDirectory': 'a_folder',
- 'TreatLinkerWarningAsErrors': 'true',
- 'TurnOffAssemblyGeneration': 'true',
- 'TypeLibraryFile': 'a_file_name',
- 'TypeLibraryResourceID': '33',
- 'UACExecutionLevel': 'AsInvoker',
- 'UACUIAccess': 'true',
- 'Version': 'a string1'},
- 'ResourceCompile': {
- 'AdditionalIncludeDirectories': 'folder1;folder2',
- 'AdditionalOptions': 'a string1',
- 'Culture': '0x236',
- 'IgnoreStandardIncludePath': 'true',
- 'NullTerminateStrings': 'true',
- 'PreprocessorDefinitions': 'string1;string2',
- 'ResourceOutputFileName': 'a string1',
- 'ShowProgress': 'true',
- 'SuppressStartupBanner': 'true',
- 'TrackerLogDirectory': 'a_folder',
- 'UndefinePreprocessorDefinitions': 'string1;string2'},
- 'Midl': {
- 'AdditionalIncludeDirectories': 'folder1;folder2',
- 'AdditionalOptions': 'a string1',
- 'ApplicationConfigurationMode': 'true',
- 'ClientStubFile': 'a_file_name',
- 'CPreprocessOptions': 'a string1',
- 'DefaultCharType': 'Signed',
- 'DllDataFileName': 'a_file_name',
- 'EnableErrorChecks': 'EnableCustom',
- 'ErrorCheckAllocations': 'true',
- 'ErrorCheckBounds': 'true',
- 'ErrorCheckEnumRange': 'true',
- 'ErrorCheckRefPointers': 'true',
- 'ErrorCheckStubData': 'true',
- 'GenerateClientFiles': 'Stub',
- 'GenerateServerFiles': 'None',
- 'GenerateStublessProxies': 'true',
- 'GenerateTypeLibrary': 'true',
- 'HeaderFileName': 'a_file_name',
- 'IgnoreStandardIncludePath': 'true',
- 'InterfaceIdentifierFileName': 'a_file_name',
- 'LocaleID': '33',
- 'MkTypLibCompatible': 'true',
- 'OutputDirectory': 'a string1',
- 'PreprocessorDefinitions': 'string1;string2',
- 'ProxyFileName': 'a_file_name',
- 'RedirectOutputAndErrors': 'a_file_name',
- 'ServerStubFile': 'a_file_name',
- 'StructMemberAlignment': 'NotSet',
- 'SuppressCompilerWarnings': 'true',
- 'SuppressStartupBanner': 'true',
- 'TargetEnvironment': 'Itanium',
- 'TrackerLogDirectory': 'a_folder',
- 'TypeLibFormat': 'NewFormat',
- 'TypeLibraryName': 'a_file_name',
- 'UndefinePreprocessorDefinitions': 'string1;string2',
- 'ValidateAllParameters': 'true',
- 'WarnAsError': 'true',
- 'WarningLevel': '1'},
- 'Lib': {
- 'AdditionalDependencies': 'file1;file2',
- 'AdditionalLibraryDirectories': 'folder1;folder2',
- 'AdditionalOptions': 'a string1',
- 'DisplayLibrary': 'a string1',
- 'ErrorReporting': 'PromptImmediately',
- 'ExportNamedFunctions': 'string1;string2',
- 'ForceSymbolReferences': 'a string1',
- 'IgnoreAllDefaultLibraries': 'true',
- 'IgnoreSpecificDefaultLibraries': 'file1;file2',
- 'LinkTimeCodeGeneration': 'true',
- 'MinimumRequiredVersion': 'a string1',
- 'ModuleDefinitionFile': 'a_file_name',
- 'Name': 'a_file_name',
- 'OutputFile': 'a_file_name',
- 'RemoveObjects': 'file1;file2',
- 'SubSystem': 'Console',
- 'SuppressStartupBanner': 'true',
- 'TargetMachine': 'MachineX86i',
- 'TrackerLogDirectory': 'a_folder',
- 'TreatLibWarningAsErrors': 'true',
- 'UseUnicodeResponseFiles': 'true',
- 'Verbose': 'true'},
- 'Manifest': {
- 'AdditionalManifestFiles': 'file1;file2',
- 'AdditionalOptions': 'a string1',
- 'AssemblyIdentity': 'a string1',
- 'ComponentFileName': 'a_file_name',
- 'EnableDPIAwareness': 'fal',
- 'GenerateCatalogFiles': 'truel',
- 'GenerateCategoryTags': 'true',
- 'InputResourceManifests': 'a string1',
- 'ManifestFromManagedAssembly': 'a_file_name',
- 'notgood3': 'bogus',
- 'OutputManifestFile': 'a_file_name',
- 'OutputResourceManifests': 'a string1',
- 'RegistrarScriptFile': 'a_file_name',
- 'ReplacementsFile': 'a_file_name',
- 'SuppressDependencyElement': 'true',
- 'SuppressStartupBanner': 'true',
- 'TrackerLogDirectory': 'a_folder',
- 'TypeLibraryFile': 'a_file_name',
- 'UpdateFileHashes': 'true',
- 'UpdateFileHashesSearchPath': 'a_file_name',
- 'VerboseOutput': 'true'},
- 'ProjectReference': {
- 'LinkLibraryDependencies': 'true',
- 'UseLibraryDependencyInputs': 'true'},
- 'ManifestResourceCompile': {
- 'ResourceOutputFileName': 'a_file_name'},
- '': {
- 'EmbedManifest': 'true',
- 'GenerateManifest': 'true',
- 'IgnoreImportLibrary': 'true',
- 'LinkIncremental': 'false'}},
- self.stderr)
- self._ExpectedWarnings([
- 'Warning: unrecognized setting ClCompile/Enableprefast',
- 'Warning: unrecognized setting ClCompile/ZZXYZ',
- 'Warning: unrecognized setting Manifest/notgood3',
- 'Warning: for Manifest/GenerateCatalogFiles, '
- "expected bool; got 'truel'",
- 'Warning: for Lib/TargetMachine, unrecognized enumerated value '
- 'MachineX86i',
- "Warning: for Manifest/EnableDPIAwareness, expected bool; got 'fal'"])
-
- def testConvertToMSBuildSettings_empty(self):
- """Tests an empty conversion."""
- msvs_settings = {}
- expected_msbuild_settings = {}
- actual_msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(
- msvs_settings,
- self.stderr)
- self.assertEqual(expected_msbuild_settings, actual_msbuild_settings)
- self._ExpectedWarnings([])
-
- def testConvertToMSBuildSettings_minimal(self):
- """Tests a minimal conversion."""
- msvs_settings = {
- 'VCCLCompilerTool': {
- 'AdditionalIncludeDirectories': 'dir1',
- 'AdditionalOptions': '/foo',
- 'BasicRuntimeChecks': '0',
- },
- 'VCLinkerTool': {
- 'LinkTimeCodeGeneration': '1',
- 'ErrorReporting': '1',
- 'DataExecutionPrevention': '2',
- },
- }
- expected_msbuild_settings = {
- 'ClCompile': {
- 'AdditionalIncludeDirectories': 'dir1',
- 'AdditionalOptions': '/foo',
- 'BasicRuntimeChecks': 'Default',
- },
- 'Link': {
- 'LinkTimeCodeGeneration': 'UseLinkTimeCodeGeneration',
- 'LinkErrorReporting': 'PromptImmediately',
- 'DataExecutionPrevention': 'true',
- },
- }
- actual_msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(
- msvs_settings,
- self.stderr)
- self.assertEqual(expected_msbuild_settings, actual_msbuild_settings)
- self._ExpectedWarnings([])
-
- def testConvertToMSBuildSettings_warnings(self):
- """Tests conversion that generates warnings."""
- msvs_settings = {
- 'VCCLCompilerTool': {
- 'AdditionalIncludeDirectories': '1',
- 'AdditionalOptions': '2',
- # These are incorrect values:
- 'BasicRuntimeChecks': '12',
- 'BrowseInformation': '21',
- 'UsePrecompiledHeader': '13',
- 'GeneratePreprocessedFile': '14'},
- 'VCLinkerTool': {
- # These are incorrect values:
- 'Driver': '10',
- 'LinkTimeCodeGeneration': '31',
- 'ErrorReporting': '21',
- 'FixedBaseAddress': '6'},
- 'VCResourceCompilerTool': {
- # Custom
- 'Culture': '1003'}}
- expected_msbuild_settings = {
- 'ClCompile': {
- 'AdditionalIncludeDirectories': '1',
- 'AdditionalOptions': '2'},
- 'Link': {},
- 'ResourceCompile': {
- # Custom
- 'Culture': '0x03eb'}}
- actual_msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(
- msvs_settings,
- self.stderr)
- self.assertEqual(expected_msbuild_settings, actual_msbuild_settings)
- self._ExpectedWarnings([
- 'Warning: while converting VCCLCompilerTool/BasicRuntimeChecks to '
- 'MSBuild, index value (12) not in expected range [0, 4)',
- 'Warning: while converting VCCLCompilerTool/BrowseInformation to '
- 'MSBuild, index value (21) not in expected range [0, 3)',
- 'Warning: while converting VCCLCompilerTool/UsePrecompiledHeader to '
- 'MSBuild, index value (13) not in expected range [0, 3)',
- 'Warning: while converting VCCLCompilerTool/GeneratePreprocessedFile to '
- 'MSBuild, value must be one of [0, 1, 2]; got 14',
-
- 'Warning: while converting VCLinkerTool/Driver to '
- 'MSBuild, index value (10) not in expected range [0, 4)',
- 'Warning: while converting VCLinkerTool/LinkTimeCodeGeneration to '
- 'MSBuild, index value (31) not in expected range [0, 5)',
- 'Warning: while converting VCLinkerTool/ErrorReporting to '
- 'MSBuild, index value (21) not in expected range [0, 3)',
- 'Warning: while converting VCLinkerTool/FixedBaseAddress to '
- 'MSBuild, index value (6) not in expected range [0, 3)',
- ])
-
- def testConvertToMSBuildSettings_full_synthetic(self):
- """Tests conversion of all the MSBuild settings."""
- msvs_settings = {
- 'VCCLCompilerTool': {
- 'AdditionalIncludeDirectories': 'folder1;folder2;folder3',
- 'AdditionalOptions': 'a_string',
- 'AdditionalUsingDirectories': 'folder1;folder2;folder3',
- 'AssemblerListingLocation': 'a_file_name',
- 'AssemblerOutput': '0',
- 'BasicRuntimeChecks': '1',
- 'BrowseInformation': '2',
- 'BrowseInformationFile': 'a_file_name',
- 'BufferSecurityCheck': 'true',
- 'CallingConvention': '0',
- 'CompileAs': '1',
- 'DebugInformationFormat': '4',
- 'DefaultCharIsUnsigned': 'true',
- 'Detect64BitPortabilityProblems': 'true',
- 'DisableLanguageExtensions': 'true',
- 'DisableSpecificWarnings': 'd1;d2;d3',
- 'EnableEnhancedInstructionSet': '0',
- 'EnableFiberSafeOptimizations': 'true',
- 'EnableFunctionLevelLinking': 'true',
- 'EnableIntrinsicFunctions': 'true',
- 'EnablePREfast': 'true',
- 'ErrorReporting': '1',
- 'ExceptionHandling': '2',
- 'ExpandAttributedSource': 'true',
- 'FavorSizeOrSpeed': '0',
- 'FloatingPointExceptions': 'true',
- 'FloatingPointModel': '1',
- 'ForceConformanceInForLoopScope': 'true',
- 'ForcedIncludeFiles': 'file1;file2;file3',
- 'ForcedUsingFiles': 'file1;file2;file3',
- 'GeneratePreprocessedFile': '1',
- 'GenerateXMLDocumentationFiles': 'true',
- 'IgnoreStandardIncludePath': 'true',
- 'InlineFunctionExpansion': '2',
- 'KeepComments': 'true',
- 'MinimalRebuild': 'true',
- 'ObjectFile': 'a_file_name',
- 'OmitDefaultLibName': 'true',
- 'OmitFramePointers': 'true',
- 'OpenMP': 'true',
- 'Optimization': '3',
- 'PrecompiledHeaderFile': 'a_file_name',
- 'PrecompiledHeaderThrough': 'a_file_name',
- 'PreprocessorDefinitions': 'd1;d2;d3',
- 'ProgramDataBaseFileName': 'a_file_name',
- 'RuntimeLibrary': '0',
- 'RuntimeTypeInfo': 'true',
- 'ShowIncludes': 'true',
- 'SmallerTypeCheck': 'true',
- 'StringPooling': 'true',
- 'StructMemberAlignment': '1',
- 'SuppressStartupBanner': 'true',
- 'TreatWChar_tAsBuiltInType': 'true',
- 'UndefineAllPreprocessorDefinitions': 'true',
- 'UndefinePreprocessorDefinitions': 'd1;d2;d3',
- 'UseFullPaths': 'true',
- 'UsePrecompiledHeader': '1',
- 'UseUnicodeResponseFiles': 'true',
- 'WarnAsError': 'true',
- 'WarningLevel': '2',
- 'WholeProgramOptimization': 'true',
- 'XMLDocumentationFileName': 'a_file_name'},
- 'VCLinkerTool': {
- 'AdditionalDependencies': 'file1;file2;file3',
- 'AdditionalLibraryDirectories': 'folder1;folder2;folder3',
- 'AdditionalLibraryDirectories_excluded': 'folder1;folder2;folder3',
- 'AdditionalManifestDependencies': 'file1;file2;file3',
- 'AdditionalOptions': 'a_string',
- 'AddModuleNamesToAssembly': 'file1;file2;file3',
- 'AllowIsolation': 'true',
- 'AssemblyDebug': '0',
- 'AssemblyLinkResource': 'file1;file2;file3',
- 'BaseAddress': 'a_string',
- 'CLRImageType': '1',
- 'CLRThreadAttribute': '2',
- 'CLRUnmanagedCodeCheck': 'true',
- 'DataExecutionPrevention': '0',
- 'DelayLoadDLLs': 'file1;file2;file3',
- 'DelaySign': 'true',
- 'Driver': '1',
- 'EmbedManagedResourceFile': 'file1;file2;file3',
- 'EnableCOMDATFolding': '0',
- 'EnableUAC': 'true',
- 'EntryPointSymbol': 'a_string',
- 'ErrorReporting': '0',
- 'FixedBaseAddress': '1',
- 'ForceSymbolReferences': 'file1;file2;file3',
- 'FunctionOrder': 'a_file_name',
- 'GenerateDebugInformation': 'true',
- 'GenerateManifest': 'true',
- 'GenerateMapFile': 'true',
- 'HeapCommitSize': 'a_string',
- 'HeapReserveSize': 'a_string',
- 'IgnoreAllDefaultLibraries': 'true',
- 'IgnoreDefaultLibraryNames': 'file1;file2;file3',
- 'IgnoreEmbeddedIDL': 'true',
- 'IgnoreImportLibrary': 'true',
- 'ImportLibrary': 'a_file_name',
- 'KeyContainer': 'a_file_name',
- 'KeyFile': 'a_file_name',
- 'LargeAddressAware': '2',
- 'LinkIncremental': '1',
- 'LinkLibraryDependencies': 'true',
- 'LinkTimeCodeGeneration': '2',
- 'ManifestFile': 'a_file_name',
- 'MapExports': 'true',
- 'MapFileName': 'a_file_name',
- 'MergedIDLBaseFileName': 'a_file_name',
- 'MergeSections': 'a_string',
- 'MidlCommandFile': 'a_file_name',
- 'ModuleDefinitionFile': 'a_file_name',
- 'OptimizeForWindows98': '1',
- 'OptimizeReferences': '0',
- 'OutputFile': 'a_file_name',
- 'PerUserRedirection': 'true',
- 'Profile': 'true',
- 'ProfileGuidedDatabase': 'a_file_name',
- 'ProgramDatabaseFile': 'a_file_name',
- 'RandomizedBaseAddress': '1',
- 'RegisterOutput': 'true',
- 'ResourceOnlyDLL': 'true',
- 'SetChecksum': 'true',
- 'ShowProgress': '0',
- 'StackCommitSize': 'a_string',
- 'StackReserveSize': 'a_string',
- 'StripPrivateSymbols': 'a_file_name',
- 'SubSystem': '2',
- 'SupportUnloadOfDelayLoadedDLL': 'true',
- 'SuppressStartupBanner': 'true',
- 'SwapRunFromCD': 'true',
- 'SwapRunFromNet': 'true',
- 'TargetMachine': '3',
- 'TerminalServerAware': '2',
- 'TurnOffAssemblyGeneration': 'true',
- 'TypeLibraryFile': 'a_file_name',
- 'TypeLibraryResourceID': '33',
- 'UACExecutionLevel': '1',
- 'UACUIAccess': 'true',
- 'UseLibraryDependencyInputs': 'false',
- 'UseUnicodeResponseFiles': 'true',
- 'Version': 'a_string'},
- 'VCResourceCompilerTool': {
- 'AdditionalIncludeDirectories': 'folder1;folder2;folder3',
- 'AdditionalOptions': 'a_string',
- 'Culture': '1003',
- 'IgnoreStandardIncludePath': 'true',
- 'PreprocessorDefinitions': 'd1;d2;d3',
- 'ResourceOutputFileName': 'a_string',
- 'ShowProgress': 'true',
- 'SuppressStartupBanner': 'true',
- 'UndefinePreprocessorDefinitions': 'd1;d2;d3'},
- 'VCMIDLTool': {
- 'AdditionalIncludeDirectories': 'folder1;folder2;folder3',
- 'AdditionalOptions': 'a_string',
- 'CPreprocessOptions': 'a_string',
- 'DefaultCharType': '0',
- 'DLLDataFileName': 'a_file_name',
- 'EnableErrorChecks': '2',
- 'ErrorCheckAllocations': 'true',
- 'ErrorCheckBounds': 'true',
- 'ErrorCheckEnumRange': 'true',
- 'ErrorCheckRefPointers': 'true',
- 'ErrorCheckStubData': 'true',
- 'GenerateStublessProxies': 'true',
- 'GenerateTypeLibrary': 'true',
- 'HeaderFileName': 'a_file_name',
- 'IgnoreStandardIncludePath': 'true',
- 'InterfaceIdentifierFileName': 'a_file_name',
- 'MkTypLibCompatible': 'true',
- 'OutputDirectory': 'a_string',
- 'PreprocessorDefinitions': 'd1;d2;d3',
- 'ProxyFileName': 'a_file_name',
- 'RedirectOutputAndErrors': 'a_file_name',
- 'StructMemberAlignment': '3',
- 'SuppressStartupBanner': 'true',
- 'TargetEnvironment': '1',
- 'TypeLibraryName': 'a_file_name',
- 'UndefinePreprocessorDefinitions': 'd1;d2;d3',
- 'ValidateParameters': 'true',
- 'WarnAsError': 'true',
- 'WarningLevel': '4'},
- 'VCLibrarianTool': {
- 'AdditionalDependencies': 'file1;file2;file3',
- 'AdditionalLibraryDirectories': 'folder1;folder2;folder3',
- 'AdditionalLibraryDirectories_excluded': 'folder1;folder2;folder3',
- 'AdditionalOptions': 'a_string',
- 'ExportNamedFunctions': 'd1;d2;d3',
- 'ForceSymbolReferences': 'a_string',
- 'IgnoreAllDefaultLibraries': 'true',
- 'IgnoreSpecificDefaultLibraries': 'file1;file2;file3',
- 'LinkLibraryDependencies': 'true',
- 'ModuleDefinitionFile': 'a_file_name',
- 'OutputFile': 'a_file_name',
- 'SuppressStartupBanner': 'true',
- 'UseUnicodeResponseFiles': 'true'},
- 'VCManifestTool': {
- 'AdditionalManifestFiles': 'file1;file2;file3',
- 'AdditionalOptions': 'a_string',
- 'AssemblyIdentity': 'a_string',
- 'ComponentFileName': 'a_file_name',
- 'DependencyInformationFile': 'a_file_name',
- 'EmbedManifest': 'true',
- 'GenerateCatalogFiles': 'true',
- 'InputResourceManifests': 'a_string',
- 'ManifestResourceFile': 'my_name',
- 'OutputManifestFile': 'a_file_name',
- 'RegistrarScriptFile': 'a_file_name',
- 'ReplacementsFile': 'a_file_name',
- 'SuppressStartupBanner': 'true',
- 'TypeLibraryFile': 'a_file_name',
- 'UpdateFileHashes': 'true',
- 'UpdateFileHashesSearchPath': 'a_file_name',
- 'UseFAT32Workaround': 'true',
- 'UseUnicodeResponseFiles': 'true',
- 'VerboseOutput': 'true'}}
- expected_msbuild_settings = {
- 'ClCompile': {
- 'AdditionalIncludeDirectories': 'folder1;folder2;folder3',
- 'AdditionalOptions': 'a_string /J',
- 'AdditionalUsingDirectories': 'folder1;folder2;folder3',
- 'AssemblerListingLocation': 'a_file_name',
- 'AssemblerOutput': 'NoListing',
- 'BasicRuntimeChecks': 'StackFrameRuntimeCheck',
- 'BrowseInformation': 'true',
- 'BrowseInformationFile': 'a_file_name',
- 'BufferSecurityCheck': 'true',
- 'CallingConvention': 'Cdecl',
- 'CompileAs': 'CompileAsC',
- 'DebugInformationFormat': 'EditAndContinue',
- 'DisableLanguageExtensions': 'true',
- 'DisableSpecificWarnings': 'd1;d2;d3',
- 'EnableEnhancedInstructionSet': 'NotSet',
- 'EnableFiberSafeOptimizations': 'true',
- 'EnablePREfast': 'true',
- 'ErrorReporting': 'Prompt',
- 'ExceptionHandling': 'Async',
- 'ExpandAttributedSource': 'true',
- 'FavorSizeOrSpeed': 'Neither',
- 'FloatingPointExceptions': 'true',
- 'FloatingPointModel': 'Strict',
- 'ForceConformanceInForLoopScope': 'true',
- 'ForcedIncludeFiles': 'file1;file2;file3',
- 'ForcedUsingFiles': 'file1;file2;file3',
- 'FunctionLevelLinking': 'true',
- 'GenerateXMLDocumentationFiles': 'true',
- 'IgnoreStandardIncludePath': 'true',
- 'InlineFunctionExpansion': 'AnySuitable',
- 'IntrinsicFunctions': 'true',
- 'MinimalRebuild': 'true',
- 'ObjectFileName': 'a_file_name',
- 'OmitDefaultLibName': 'true',
- 'OmitFramePointers': 'true',
- 'OpenMPSupport': 'true',
- 'Optimization': 'Full',
- 'PrecompiledHeader': 'Create',
- 'PrecompiledHeaderFile': 'a_file_name',
- 'PrecompiledHeaderOutputFile': 'a_file_name',
- 'PreprocessKeepComments': 'true',
- 'PreprocessorDefinitions': 'd1;d2;d3',
- 'PreprocessSuppressLineNumbers': 'false',
- 'PreprocessToFile': 'true',
- 'ProgramDataBaseFileName': 'a_file_name',
- 'RuntimeLibrary': 'MultiThreaded',
- 'RuntimeTypeInfo': 'true',
- 'ShowIncludes': 'true',
- 'SmallerTypeCheck': 'true',
- 'StringPooling': 'true',
- 'StructMemberAlignment': '1Byte',
- 'SuppressStartupBanner': 'true',
- 'TreatWarningAsError': 'true',
- 'TreatWChar_tAsBuiltInType': 'true',
- 'UndefineAllPreprocessorDefinitions': 'true',
- 'UndefinePreprocessorDefinitions': 'd1;d2;d3',
- 'UseFullPaths': 'true',
- 'WarningLevel': 'Level2',
- 'WholeProgramOptimization': 'true',
- 'XMLDocumentationFileName': 'a_file_name'},
- 'Link': {
- 'AdditionalDependencies': 'file1;file2;file3',
- 'AdditionalLibraryDirectories': 'folder1;folder2;folder3',
- 'AdditionalManifestDependencies': 'file1;file2;file3',
- 'AdditionalOptions': 'a_string',
- 'AddModuleNamesToAssembly': 'file1;file2;file3',
- 'AllowIsolation': 'true',
- 'AssemblyDebug': '',
- 'AssemblyLinkResource': 'file1;file2;file3',
- 'BaseAddress': 'a_string',
- 'CLRImageType': 'ForceIJWImage',
- 'CLRThreadAttribute': 'STAThreadingAttribute',
- 'CLRUnmanagedCodeCheck': 'true',
- 'DataExecutionPrevention': '',
- 'DelayLoadDLLs': 'file1;file2;file3',
- 'DelaySign': 'true',
- 'Driver': 'Driver',
- 'EmbedManagedResourceFile': 'file1;file2;file3',
- 'EnableCOMDATFolding': '',
- 'EnableUAC': 'true',
- 'EntryPointSymbol': 'a_string',
- 'FixedBaseAddress': 'false',
- 'ForceSymbolReferences': 'file1;file2;file3',
- 'FunctionOrder': 'a_file_name',
- 'GenerateDebugInformation': 'true',
- 'GenerateMapFile': 'true',
- 'HeapCommitSize': 'a_string',
- 'HeapReserveSize': 'a_string',
- 'IgnoreAllDefaultLibraries': 'true',
- 'IgnoreEmbeddedIDL': 'true',
- 'IgnoreSpecificDefaultLibraries': 'file1;file2;file3',
- 'ImportLibrary': 'a_file_name',
- 'KeyContainer': 'a_file_name',
- 'KeyFile': 'a_file_name',
- 'LargeAddressAware': 'true',
- 'LinkErrorReporting': 'NoErrorReport',
- 'LinkTimeCodeGeneration': 'PGInstrument',
- 'ManifestFile': 'a_file_name',
- 'MapExports': 'true',
- 'MapFileName': 'a_file_name',
- 'MergedIDLBaseFileName': 'a_file_name',
- 'MergeSections': 'a_string',
- 'MidlCommandFile': 'a_file_name',
- 'ModuleDefinitionFile': 'a_file_name',
- 'NoEntryPoint': 'true',
- 'OptimizeReferences': '',
- 'OutputFile': 'a_file_name',
- 'PerUserRedirection': 'true',
- 'Profile': 'true',
- 'ProfileGuidedDatabase': 'a_file_name',
- 'ProgramDatabaseFile': 'a_file_name',
- 'RandomizedBaseAddress': 'false',
- 'RegisterOutput': 'true',
- 'SetChecksum': 'true',
- 'ShowProgress': 'NotSet',
- 'StackCommitSize': 'a_string',
- 'StackReserveSize': 'a_string',
- 'StripPrivateSymbols': 'a_file_name',
- 'SubSystem': 'Windows',
- 'SupportUnloadOfDelayLoadedDLL': 'true',
- 'SuppressStartupBanner': 'true',
- 'SwapRunFromCD': 'true',
- 'SwapRunFromNET': 'true',
- 'TargetMachine': 'MachineARM',
- 'TerminalServerAware': 'true',
- 'TurnOffAssemblyGeneration': 'true',
- 'TypeLibraryFile': 'a_file_name',
- 'TypeLibraryResourceID': '33',
- 'UACExecutionLevel': 'HighestAvailable',
- 'UACUIAccess': 'true',
- 'Version': 'a_string'},
- 'ResourceCompile': {
- 'AdditionalIncludeDirectories': 'folder1;folder2;folder3',
- 'AdditionalOptions': 'a_string',
- 'Culture': '0x03eb',
- 'IgnoreStandardIncludePath': 'true',
- 'PreprocessorDefinitions': 'd1;d2;d3',
- 'ResourceOutputFileName': 'a_string',
- 'ShowProgress': 'true',
- 'SuppressStartupBanner': 'true',
- 'UndefinePreprocessorDefinitions': 'd1;d2;d3'},
- 'Midl': {
- 'AdditionalIncludeDirectories': 'folder1;folder2;folder3',
- 'AdditionalOptions': 'a_string',
- 'CPreprocessOptions': 'a_string',
- 'DefaultCharType': 'Unsigned',
- 'DllDataFileName': 'a_file_name',
- 'EnableErrorChecks': 'All',
- 'ErrorCheckAllocations': 'true',
- 'ErrorCheckBounds': 'true',
- 'ErrorCheckEnumRange': 'true',
- 'ErrorCheckRefPointers': 'true',
- 'ErrorCheckStubData': 'true',
- 'GenerateStublessProxies': 'true',
- 'GenerateTypeLibrary': 'true',
- 'HeaderFileName': 'a_file_name',
- 'IgnoreStandardIncludePath': 'true',
- 'InterfaceIdentifierFileName': 'a_file_name',
- 'MkTypLibCompatible': 'true',
- 'OutputDirectory': 'a_string',
- 'PreprocessorDefinitions': 'd1;d2;d3',
- 'ProxyFileName': 'a_file_name',
- 'RedirectOutputAndErrors': 'a_file_name',
- 'StructMemberAlignment': '4',
- 'SuppressStartupBanner': 'true',
- 'TargetEnvironment': 'Win32',
- 'TypeLibraryName': 'a_file_name',
- 'UndefinePreprocessorDefinitions': 'd1;d2;d3',
- 'ValidateAllParameters': 'true',
- 'WarnAsError': 'true',
- 'WarningLevel': '4'},
- 'Lib': {
- 'AdditionalDependencies': 'file1;file2;file3',
- 'AdditionalLibraryDirectories': 'folder1;folder2;folder3',
- 'AdditionalOptions': 'a_string',
- 'ExportNamedFunctions': 'd1;d2;d3',
- 'ForceSymbolReferences': 'a_string',
- 'IgnoreAllDefaultLibraries': 'true',
- 'IgnoreSpecificDefaultLibraries': 'file1;file2;file3',
- 'ModuleDefinitionFile': 'a_file_name',
- 'OutputFile': 'a_file_name',
- 'SuppressStartupBanner': 'true',
- 'UseUnicodeResponseFiles': 'true'},
- 'Manifest': {
- 'AdditionalManifestFiles': 'file1;file2;file3',
- 'AdditionalOptions': 'a_string',
- 'AssemblyIdentity': 'a_string',
- 'ComponentFileName': 'a_file_name',
- 'GenerateCatalogFiles': 'true',
- 'InputResourceManifests': 'a_string',
- 'OutputManifestFile': 'a_file_name',
- 'RegistrarScriptFile': 'a_file_name',
- 'ReplacementsFile': 'a_file_name',
- 'SuppressStartupBanner': 'true',
- 'TypeLibraryFile': 'a_file_name',
- 'UpdateFileHashes': 'true',
- 'UpdateFileHashesSearchPath': 'a_file_name',
- 'VerboseOutput': 'true'},
- 'ManifestResourceCompile': {
- 'ResourceOutputFileName': 'my_name'},
- 'ProjectReference': {
- 'LinkLibraryDependencies': 'true',
- 'UseLibraryDependencyInputs': 'false'},
- '': {
- 'EmbedManifest': 'true',
- 'GenerateManifest': 'true',
- 'IgnoreImportLibrary': 'true',
- 'LinkIncremental': 'false'}}
- actual_msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(
- msvs_settings,
- self.stderr)
- self.assertEqual(expected_msbuild_settings, actual_msbuild_settings)
- self._ExpectedWarnings([])
-
- def testConvertToMSBuildSettings_actual(self):
- """Tests the conversion of an actual project.
-
- A VS2008 project with most of the options defined was created through the
- VS2008 IDE. It was then converted to VS2010. The tool settings found in
- the .vcproj and .vcxproj files were converted to the two dictionaries
- msvs_settings and expected_msbuild_settings.
-
- Note that for many settings, the VS2010 converter adds macros like
- %(AdditionalIncludeDirectories) to make sure than inherited values are
- included. Since the Gyp projects we generate do not use inheritance,
- we removed these macros. They were:
- ClCompile:
- AdditionalIncludeDirectories: ';%(AdditionalIncludeDirectories)'
- AdditionalOptions: ' %(AdditionalOptions)'
- AdditionalUsingDirectories: ';%(AdditionalUsingDirectories)'
- DisableSpecificWarnings: ';%(DisableSpecificWarnings)',
- ForcedIncludeFiles: ';%(ForcedIncludeFiles)',
- ForcedUsingFiles: ';%(ForcedUsingFiles)',
- PreprocessorDefinitions: ';%(PreprocessorDefinitions)',
- UndefinePreprocessorDefinitions:
- ';%(UndefinePreprocessorDefinitions)',
- Link:
- AdditionalDependencies: ';%(AdditionalDependencies)',
- AdditionalLibraryDirectories: ';%(AdditionalLibraryDirectories)',
- AdditionalManifestDependencies:
- ';%(AdditionalManifestDependencies)',
- AdditionalOptions: ' %(AdditionalOptions)',
- AddModuleNamesToAssembly: ';%(AddModuleNamesToAssembly)',
- AssemblyLinkResource: ';%(AssemblyLinkResource)',
- DelayLoadDLLs: ';%(DelayLoadDLLs)',
- EmbedManagedResourceFile: ';%(EmbedManagedResourceFile)',
- ForceSymbolReferences: ';%(ForceSymbolReferences)',
- IgnoreSpecificDefaultLibraries:
- ';%(IgnoreSpecificDefaultLibraries)',
- ResourceCompile:
- AdditionalIncludeDirectories: ';%(AdditionalIncludeDirectories)',
- AdditionalOptions: ' %(AdditionalOptions)',
- PreprocessorDefinitions: ';%(PreprocessorDefinitions)',
- Manifest:
- AdditionalManifestFiles: ';%(AdditionalManifestFiles)',
- AdditionalOptions: ' %(AdditionalOptions)',
- InputResourceManifests: ';%(InputResourceManifests)',
- """
- msvs_settings = {
- 'VCCLCompilerTool': {
- 'AdditionalIncludeDirectories': 'dir1',
- 'AdditionalOptions': '/more',
- 'AdditionalUsingDirectories': 'test',
- 'AssemblerListingLocation': '$(IntDir)\\a',
- 'AssemblerOutput': '1',
- 'BasicRuntimeChecks': '3',
- 'BrowseInformation': '1',
- 'BrowseInformationFile': '$(IntDir)\\e',
- 'BufferSecurityCheck': 'false',
- 'CallingConvention': '1',
- 'CompileAs': '1',
- 'DebugInformationFormat': '4',
- 'DefaultCharIsUnsigned': 'true',
- 'Detect64BitPortabilityProblems': 'true',
- 'DisableLanguageExtensions': 'true',
- 'DisableSpecificWarnings': 'abc',
- 'EnableEnhancedInstructionSet': '1',
- 'EnableFiberSafeOptimizations': 'true',
- 'EnableFunctionLevelLinking': 'true',
- 'EnableIntrinsicFunctions': 'true',
- 'EnablePREfast': 'true',
- 'ErrorReporting': '2',
- 'ExceptionHandling': '2',
- 'ExpandAttributedSource': 'true',
- 'FavorSizeOrSpeed': '2',
- 'FloatingPointExceptions': 'true',
- 'FloatingPointModel': '1',
- 'ForceConformanceInForLoopScope': 'false',
- 'ForcedIncludeFiles': 'def',
- 'ForcedUsingFiles': 'ge',
- 'GeneratePreprocessedFile': '2',
- 'GenerateXMLDocumentationFiles': 'true',
- 'IgnoreStandardIncludePath': 'true',
- 'InlineFunctionExpansion': '1',
- 'KeepComments': 'true',
- 'MinimalRebuild': 'true',
- 'ObjectFile': '$(IntDir)\\b',
- 'OmitDefaultLibName': 'true',
- 'OmitFramePointers': 'true',
- 'OpenMP': 'true',
- 'Optimization': '3',
- 'PrecompiledHeaderFile': '$(IntDir)\\$(TargetName).pche',
- 'PrecompiledHeaderThrough': 'StdAfx.hd',
- 'PreprocessorDefinitions': 'WIN32;_DEBUG;_CONSOLE',
- 'ProgramDataBaseFileName': '$(IntDir)\\vc90b.pdb',
- 'RuntimeLibrary': '3',
- 'RuntimeTypeInfo': 'false',
- 'ShowIncludes': 'true',
- 'SmallerTypeCheck': 'true',
- 'StringPooling': 'true',
- 'StructMemberAlignment': '3',
- 'SuppressStartupBanner': 'false',
- 'TreatWChar_tAsBuiltInType': 'false',
- 'UndefineAllPreprocessorDefinitions': 'true',
- 'UndefinePreprocessorDefinitions': 'wer',
- 'UseFullPaths': 'true',
- 'UsePrecompiledHeader': '0',
- 'UseUnicodeResponseFiles': 'false',
- 'WarnAsError': 'true',
- 'WarningLevel': '3',
- 'WholeProgramOptimization': 'true',
- 'XMLDocumentationFileName': '$(IntDir)\\c'},
- 'VCLinkerTool': {
- 'AdditionalDependencies': 'zx',
- 'AdditionalLibraryDirectories': 'asd',
- 'AdditionalManifestDependencies': 's2',
- 'AdditionalOptions': '/mor2',
- 'AddModuleNamesToAssembly': 'd1',
- 'AllowIsolation': 'false',
- 'AssemblyDebug': '1',
- 'AssemblyLinkResource': 'd5',
- 'BaseAddress': '23423',
- 'CLRImageType': '3',
- 'CLRThreadAttribute': '1',
- 'CLRUnmanagedCodeCheck': 'true',
- 'DataExecutionPrevention': '0',
- 'DelayLoadDLLs': 'd4',
- 'DelaySign': 'true',
- 'Driver': '2',
- 'EmbedManagedResourceFile': 'd2',
- 'EnableCOMDATFolding': '1',
- 'EnableUAC': 'false',
- 'EntryPointSymbol': 'f5',
- 'ErrorReporting': '2',
- 'FixedBaseAddress': '1',
- 'ForceSymbolReferences': 'd3',
- 'FunctionOrder': 'fssdfsd',
- 'GenerateDebugInformation': 'true',
- 'GenerateManifest': 'false',
- 'GenerateMapFile': 'true',
- 'HeapCommitSize': '13',
- 'HeapReserveSize': '12',
- 'IgnoreAllDefaultLibraries': 'true',
- 'IgnoreDefaultLibraryNames': 'flob;flok',
- 'IgnoreEmbeddedIDL': 'true',
- 'IgnoreImportLibrary': 'true',
- 'ImportLibrary': 'f4',
- 'KeyContainer': 'f7',
- 'KeyFile': 'f6',
- 'LargeAddressAware': '2',
- 'LinkIncremental': '0',
- 'LinkLibraryDependencies': 'false',
- 'LinkTimeCodeGeneration': '1',
- 'ManifestFile':
- '$(IntDir)\\$(TargetFileName).2intermediate.manifest',
- 'MapExports': 'true',
- 'MapFileName': 'd5',
- 'MergedIDLBaseFileName': 'f2',
- 'MergeSections': 'f5',
- 'MidlCommandFile': 'f1',
- 'ModuleDefinitionFile': 'sdsd',
- 'OptimizeForWindows98': '2',
- 'OptimizeReferences': '2',
- 'OutputFile': '$(OutDir)\\$(ProjectName)2.exe',
- 'PerUserRedirection': 'true',
- 'Profile': 'true',
- 'ProfileGuidedDatabase': '$(TargetDir)$(TargetName).pgdd',
- 'ProgramDatabaseFile': 'Flob.pdb',
- 'RandomizedBaseAddress': '1',
- 'RegisterOutput': 'true',
- 'ResourceOnlyDLL': 'true',
- 'SetChecksum': 'false',
- 'ShowProgress': '1',
- 'StackCommitSize': '15',
- 'StackReserveSize': '14',
- 'StripPrivateSymbols': 'd3',
- 'SubSystem': '1',
- 'SupportUnloadOfDelayLoadedDLL': 'true',
- 'SuppressStartupBanner': 'false',
- 'SwapRunFromCD': 'true',
- 'SwapRunFromNet': 'true',
- 'TargetMachine': '1',
- 'TerminalServerAware': '1',
- 'TurnOffAssemblyGeneration': 'true',
- 'TypeLibraryFile': 'f3',
- 'TypeLibraryResourceID': '12',
- 'UACExecutionLevel': '2',
- 'UACUIAccess': 'true',
- 'UseLibraryDependencyInputs': 'true',
- 'UseUnicodeResponseFiles': 'false',
- 'Version': '333'},
- 'VCResourceCompilerTool': {
- 'AdditionalIncludeDirectories': 'f3',
- 'AdditionalOptions': '/more3',
- 'Culture': '3084',
- 'IgnoreStandardIncludePath': 'true',
- 'PreprocessorDefinitions': '_UNICODE;UNICODE2',
- 'ResourceOutputFileName': '$(IntDir)/$(InputName)3.res',
- 'ShowProgress': 'true'},
- 'VCManifestTool': {
- 'AdditionalManifestFiles': 'sfsdfsd',
- 'AdditionalOptions': 'afdsdafsd',
- 'AssemblyIdentity': 'sddfdsadfsa',
- 'ComponentFileName': 'fsdfds',
- 'DependencyInformationFile': '$(IntDir)\\mt.depdfd',
- 'EmbedManifest': 'false',
- 'GenerateCatalogFiles': 'true',
- 'InputResourceManifests': 'asfsfdafs',
- 'ManifestResourceFile':
- '$(IntDir)\\$(TargetFileName).embed.manifest.resfdsf',
- 'OutputManifestFile': '$(TargetPath).manifestdfs',
- 'RegistrarScriptFile': 'sdfsfd',
- 'ReplacementsFile': 'sdffsd',
- 'SuppressStartupBanner': 'false',
- 'TypeLibraryFile': 'sfsd',
- 'UpdateFileHashes': 'true',
- 'UpdateFileHashesSearchPath': 'sfsd',
- 'UseFAT32Workaround': 'true',
- 'UseUnicodeResponseFiles': 'false',
- 'VerboseOutput': 'true'}}
- expected_msbuild_settings = {
- 'ClCompile': {
- 'AdditionalIncludeDirectories': 'dir1',
- 'AdditionalOptions': '/more /J',
- 'AdditionalUsingDirectories': 'test',
- 'AssemblerListingLocation': '$(IntDir)a',
- 'AssemblerOutput': 'AssemblyCode',
- 'BasicRuntimeChecks': 'EnableFastChecks',
- 'BrowseInformation': 'true',
- 'BrowseInformationFile': '$(IntDir)e',
- 'BufferSecurityCheck': 'false',
- 'CallingConvention': 'FastCall',
- 'CompileAs': 'CompileAsC',
- 'DebugInformationFormat': 'EditAndContinue',
- 'DisableLanguageExtensions': 'true',
- 'DisableSpecificWarnings': 'abc',
- 'EnableEnhancedInstructionSet': 'StreamingSIMDExtensions',
- 'EnableFiberSafeOptimizations': 'true',
- 'EnablePREfast': 'true',
- 'ErrorReporting': 'Queue',
- 'ExceptionHandling': 'Async',
- 'ExpandAttributedSource': 'true',
- 'FavorSizeOrSpeed': 'Size',
- 'FloatingPointExceptions': 'true',
- 'FloatingPointModel': 'Strict',
- 'ForceConformanceInForLoopScope': 'false',
- 'ForcedIncludeFiles': 'def',
- 'ForcedUsingFiles': 'ge',
- 'FunctionLevelLinking': 'true',
- 'GenerateXMLDocumentationFiles': 'true',
- 'IgnoreStandardIncludePath': 'true',
- 'InlineFunctionExpansion': 'OnlyExplicitInline',
- 'IntrinsicFunctions': 'true',
- 'MinimalRebuild': 'true',
- 'ObjectFileName': '$(IntDir)b',
- 'OmitDefaultLibName': 'true',
- 'OmitFramePointers': 'true',
- 'OpenMPSupport': 'true',
- 'Optimization': 'Full',
- 'PrecompiledHeader': 'NotUsing', # Actual conversion gives ''
- 'PrecompiledHeaderFile': 'StdAfx.hd',
- 'PrecompiledHeaderOutputFile': '$(IntDir)$(TargetName).pche',
- 'PreprocessKeepComments': 'true',
- 'PreprocessorDefinitions': 'WIN32;_DEBUG;_CONSOLE',
- 'PreprocessSuppressLineNumbers': 'true',
- 'PreprocessToFile': 'true',
- 'ProgramDataBaseFileName': '$(IntDir)vc90b.pdb',
- 'RuntimeLibrary': 'MultiThreadedDebugDLL',
- 'RuntimeTypeInfo': 'false',
- 'ShowIncludes': 'true',
- 'SmallerTypeCheck': 'true',
- 'StringPooling': 'true',
- 'StructMemberAlignment': '4Bytes',
- 'SuppressStartupBanner': 'false',
- 'TreatWarningAsError': 'true',
- 'TreatWChar_tAsBuiltInType': 'false',
- 'UndefineAllPreprocessorDefinitions': 'true',
- 'UndefinePreprocessorDefinitions': 'wer',
- 'UseFullPaths': 'true',
- 'WarningLevel': 'Level3',
- 'WholeProgramOptimization': 'true',
- 'XMLDocumentationFileName': '$(IntDir)c'},
- 'Link': {
- 'AdditionalDependencies': 'zx',
- 'AdditionalLibraryDirectories': 'asd',
- 'AdditionalManifestDependencies': 's2',
- 'AdditionalOptions': '/mor2',
- 'AddModuleNamesToAssembly': 'd1',
- 'AllowIsolation': 'false',
- 'AssemblyDebug': 'true',
- 'AssemblyLinkResource': 'd5',
- 'BaseAddress': '23423',
- 'CLRImageType': 'ForceSafeILImage',
- 'CLRThreadAttribute': 'MTAThreadingAttribute',
- 'CLRUnmanagedCodeCheck': 'true',
- 'DataExecutionPrevention': '',
- 'DelayLoadDLLs': 'd4',
- 'DelaySign': 'true',
- 'Driver': 'UpOnly',
- 'EmbedManagedResourceFile': 'd2',
- 'EnableCOMDATFolding': 'false',
- 'EnableUAC': 'false',
- 'EntryPointSymbol': 'f5',
- 'FixedBaseAddress': 'false',
- 'ForceSymbolReferences': 'd3',
- 'FunctionOrder': 'fssdfsd',
- 'GenerateDebugInformation': 'true',
- 'GenerateMapFile': 'true',
- 'HeapCommitSize': '13',
- 'HeapReserveSize': '12',
- 'IgnoreAllDefaultLibraries': 'true',
- 'IgnoreEmbeddedIDL': 'true',
- 'IgnoreSpecificDefaultLibraries': 'flob;flok',
- 'ImportLibrary': 'f4',
- 'KeyContainer': 'f7',
- 'KeyFile': 'f6',
- 'LargeAddressAware': 'true',
- 'LinkErrorReporting': 'QueueForNextLogin',
- 'LinkTimeCodeGeneration': 'UseLinkTimeCodeGeneration',
- 'ManifestFile': '$(IntDir)$(TargetFileName).2intermediate.manifest',
- 'MapExports': 'true',
- 'MapFileName': 'd5',
- 'MergedIDLBaseFileName': 'f2',
- 'MergeSections': 'f5',
- 'MidlCommandFile': 'f1',
- 'ModuleDefinitionFile': 'sdsd',
- 'NoEntryPoint': 'true',
- 'OptimizeReferences': 'true',
- 'OutputFile': '$(OutDir)$(ProjectName)2.exe',
- 'PerUserRedirection': 'true',
- 'Profile': 'true',
- 'ProfileGuidedDatabase': '$(TargetDir)$(TargetName).pgdd',
- 'ProgramDatabaseFile': 'Flob.pdb',
- 'RandomizedBaseAddress': 'false',
- 'RegisterOutput': 'true',
- 'SetChecksum': 'false',
- 'ShowProgress': 'LinkVerbose',
- 'StackCommitSize': '15',
- 'StackReserveSize': '14',
- 'StripPrivateSymbols': 'd3',
- 'SubSystem': 'Console',
- 'SupportUnloadOfDelayLoadedDLL': 'true',
- 'SuppressStartupBanner': 'false',
- 'SwapRunFromCD': 'true',
- 'SwapRunFromNET': 'true',
- 'TargetMachine': 'MachineX86',
- 'TerminalServerAware': 'false',
- 'TurnOffAssemblyGeneration': 'true',
- 'TypeLibraryFile': 'f3',
- 'TypeLibraryResourceID': '12',
- 'UACExecutionLevel': 'RequireAdministrator',
- 'UACUIAccess': 'true',
- 'Version': '333'},
- 'ResourceCompile': {
- 'AdditionalIncludeDirectories': 'f3',
- 'AdditionalOptions': '/more3',
- 'Culture': '0x0c0c',
- 'IgnoreStandardIncludePath': 'true',
- 'PreprocessorDefinitions': '_UNICODE;UNICODE2',
- 'ResourceOutputFileName': '$(IntDir)%(Filename)3.res',
- 'ShowProgress': 'true'},
- 'Manifest': {
- 'AdditionalManifestFiles': 'sfsdfsd',
- 'AdditionalOptions': 'afdsdafsd',
- 'AssemblyIdentity': 'sddfdsadfsa',
- 'ComponentFileName': 'fsdfds',
- 'GenerateCatalogFiles': 'true',
- 'InputResourceManifests': 'asfsfdafs',
- 'OutputManifestFile': '$(TargetPath).manifestdfs',
- 'RegistrarScriptFile': 'sdfsfd',
- 'ReplacementsFile': 'sdffsd',
- 'SuppressStartupBanner': 'false',
- 'TypeLibraryFile': 'sfsd',
- 'UpdateFileHashes': 'true',
- 'UpdateFileHashesSearchPath': 'sfsd',
- 'VerboseOutput': 'true'},
- 'ProjectReference': {
- 'LinkLibraryDependencies': 'false',
- 'UseLibraryDependencyInputs': 'true'},
- '': {
- 'EmbedManifest': 'false',
- 'GenerateManifest': 'false',
- 'IgnoreImportLibrary': 'true',
- 'LinkIncremental': ''
- },
- 'ManifestResourceCompile': {
- 'ResourceOutputFileName':
- '$(IntDir)$(TargetFileName).embed.manifest.resfdsf'}
- }
- actual_msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(
- msvs_settings,
- self.stderr)
- self.assertEqual(expected_msbuild_settings, actual_msbuild_settings)
- self._ExpectedWarnings([])
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
deleted file mode 100644
index 74e529a..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Visual Studio project reader/writer."""
-
-import gyp.common
-import gyp.easy_xml as easy_xml
-
-
-class Writer(object):
- """Visual Studio XML tool file writer."""
-
- def __init__(self, tool_file_path, name):
- """Initializes the tool file.
-
- Args:
- tool_file_path: Path to the tool file.
- name: Name of the tool file.
- """
- self.tool_file_path = tool_file_path
- self.name = name
- self.rules_section = ['Rules']
-
- def AddCustomBuildRule(self, name, cmd, description,
- additional_dependencies,
- outputs, extensions):
- """Adds a rule to the tool file.
-
- Args:
- name: Name of the rule.
- description: Description of the rule.
- cmd: Command line of the rule.
- additional_dependencies: other files which may trigger the rule.
- outputs: outputs of the rule.
- extensions: extensions handled by the rule.
- """
- rule = ['CustomBuildRule',
- {'Name': name,
- 'ExecutionDescription': description,
- 'CommandLine': cmd,
- 'Outputs': ';'.join(outputs),
- 'FileExtensions': ';'.join(extensions),
- 'AdditionalDependencies':
- ';'.join(additional_dependencies)
- }]
- self.rules_section.append(rule)
-
- def WriteIfChanged(self):
- """Writes the tool file."""
- content = ['VisualStudioToolFile',
- {'Version': '8.00',
- 'Name': self.name
- },
- self.rules_section
- ]
- easy_xml.WriteXmlIfChanged(content, self.tool_file_path,
- encoding="Windows-1252")
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
deleted file mode 100644
index 6c07e9a..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
+++ /dev/null
@@ -1,147 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Visual Studio user preferences file writer."""
-
-import os
-import re
-import socket # for gethostname
-
-import gyp.common
-import gyp.easy_xml as easy_xml
-
-
-#------------------------------------------------------------------------------
-
-def _FindCommandInPath(command):
- """If there are no slashes in the command given, this function
- searches the PATH env to find the given command, and converts it
- to an absolute path. We have to do this because MSVS is looking
- for an actual file to launch a debugger on, not just a command
- line. Note that this happens at GYP time, so anything needing to
- be built needs to have a full path."""
- if '/' in command or '\\' in command:
- # If the command already has path elements (either relative or
- # absolute), then assume it is constructed properly.
- return command
- else:
- # Search through the path list and find an existing file that
- # we can access.
- paths = os.environ.get('PATH','').split(os.pathsep)
- for path in paths:
- item = os.path.join(path, command)
- if os.path.isfile(item) and os.access(item, os.X_OK):
- return item
- return command
-
-def _QuoteWin32CommandLineArgs(args):
- new_args = []
- for arg in args:
- # Replace all double-quotes with double-double-quotes to escape
- # them for cmd shell, and then quote the whole thing if there
- # are any.
- if arg.find('"') != -1:
- arg = '""'.join(arg.split('"'))
- arg = '"%s"' % arg
-
- # Otherwise, if there are any spaces, quote the whole arg.
- elif re.search(r'[ \t\n]', arg):
- arg = '"%s"' % arg
- new_args.append(arg)
- return new_args
-
-class Writer(object):
- """Visual Studio XML user user file writer."""
-
- def __init__(self, user_file_path, version, name):
- """Initializes the user file.
-
- Args:
- user_file_path: Path to the user file.
- version: Version info.
- name: Name of the user file.
- """
- self.user_file_path = user_file_path
- self.version = version
- self.name = name
- self.configurations = {}
-
- def AddConfig(self, name):
- """Adds a configuration to the project.
-
- Args:
- name: Configuration name.
- """
- self.configurations[name] = ['Configuration', {'Name': name}]
-
- def AddDebugSettings(self, config_name, command, environment = {},
- working_directory=""):
- """Adds a DebugSettings node to the user file for a particular config.
-
- Args:
- command: command line to run. First element in the list is the
- executable. All elements of the command will be quoted if
- necessary.
- working_directory: other files which may trigger the rule. (optional)
- """
- command = _QuoteWin32CommandLineArgs(command)
-
- abs_command = _FindCommandInPath(command[0])
-
- if environment and isinstance(environment, dict):
- env_list = ['%s="%s"' % (key, val)
- for (key,val) in environment.iteritems()]
- environment = ' '.join(env_list)
- else:
- environment = ''
-
- n_cmd = ['DebugSettings',
- {'Command': abs_command,
- 'WorkingDirectory': working_directory,
- 'CommandArguments': " ".join(command[1:]),
- 'RemoteMachine': socket.gethostname(),
- 'Environment': environment,
- 'EnvironmentMerge': 'true',
- # Currently these are all "dummy" values that we're just setting
- # in the default manner that MSVS does it. We could use some of
- # these to add additional capabilities, I suppose, but they might
- # not have parity with other platforms then.
- 'Attach': 'false',
- 'DebuggerType': '3', # 'auto' debugger
- 'Remote': '1',
- 'RemoteCommand': '',
- 'HttpUrl': '',
- 'PDBPath': '',
- 'SQLDebugging': '',
- 'DebuggerFlavor': '0',
- 'MPIRunCommand': '',
- 'MPIRunArguments': '',
- 'MPIRunWorkingDirectory': '',
- 'ApplicationCommand': '',
- 'ApplicationArguments': '',
- 'ShimCommand': '',
- 'MPIAcceptMode': '',
- 'MPIAcceptFilter': ''
- }]
-
- # Find the config, and add it if it doesn't exist.
- if config_name not in self.configurations:
- self.AddConfig(config_name)
-
- # Add the DebugSettings onto the appropriate config.
- self.configurations[config_name].append(n_cmd)
-
- def WriteIfChanged(self):
- """Writes the user file."""
- configs = ['Configurations']
- for config, spec in sorted(self.configurations.iteritems()):
- configs.append(spec)
-
- content = ['VisualStudioUserFile',
- {'Version': self.version.ProjectVersion(),
- 'Name': self.name
- },
- configs]
- easy_xml.WriteXmlIfChanged(content, self.user_file_path,
- encoding="Windows-1252")
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
deleted file mode 100644
index 0b32e91..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
+++ /dev/null
@@ -1,270 +0,0 @@
-# Copyright (c) 2013 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Utility functions shared amongst the Windows generators."""
-
-import copy
-import os
-
-
-# A dictionary mapping supported target types to extensions.
-TARGET_TYPE_EXT = {
- 'executable': 'exe',
- 'loadable_module': 'dll',
- 'shared_library': 'dll',
- 'static_library': 'lib',
-}
-
-
-def _GetLargePdbShimCcPath():
- """Returns the path of the large_pdb_shim.cc file."""
- this_dir = os.path.abspath(os.path.dirname(__file__))
- src_dir = os.path.abspath(os.path.join(this_dir, '..', '..'))
- win_data_dir = os.path.join(src_dir, 'data', 'win')
- large_pdb_shim_cc = os.path.join(win_data_dir, 'large-pdb-shim.cc')
- return large_pdb_shim_cc
-
-
-def _DeepCopySomeKeys(in_dict, keys):
- """Performs a partial deep-copy on |in_dict|, only copying the keys in |keys|.
-
- Arguments:
- in_dict: The dictionary to copy.
- keys: The keys to be copied. If a key is in this list and doesn't exist in
- |in_dict| this is not an error.
- Returns:
- The partially deep-copied dictionary.
- """
- d = {}
- for key in keys:
- if key not in in_dict:
- continue
- d[key] = copy.deepcopy(in_dict[key])
- return d
-
-
-def _SuffixName(name, suffix):
- """Add a suffix to the end of a target.
-
- Arguments:
- name: name of the target (foo#target)
- suffix: the suffix to be added
- Returns:
- Target name with suffix added (foo_suffix#target)
- """
- parts = name.rsplit('#', 1)
- parts[0] = '%s_%s' % (parts[0], suffix)
- return '#'.join(parts)
-
-
-def _ShardName(name, number):
- """Add a shard number to the end of a target.
-
- Arguments:
- name: name of the target (foo#target)
- number: shard number
- Returns:
- Target name with shard added (foo_1#target)
- """
- return _SuffixName(name, str(number))
-
-
-def ShardTargets(target_list, target_dicts):
- """Shard some targets apart to work around the linkers limits.
-
- Arguments:
- target_list: List of target pairs: 'base/base.gyp:base'.
- target_dicts: Dict of target properties keyed on target pair.
- Returns:
- Tuple of the new sharded versions of the inputs.
- """
- # Gather the targets to shard, and how many pieces.
- targets_to_shard = {}
- for t in target_dicts:
- shards = int(target_dicts[t].get('msvs_shard', 0))
- if shards:
- targets_to_shard[t] = shards
- # Shard target_list.
- new_target_list = []
- for t in target_list:
- if t in targets_to_shard:
- for i in range(targets_to_shard[t]):
- new_target_list.append(_ShardName(t, i))
- else:
- new_target_list.append(t)
- # Shard target_dict.
- new_target_dicts = {}
- for t in target_dicts:
- if t in targets_to_shard:
- for i in range(targets_to_shard[t]):
- name = _ShardName(t, i)
- new_target_dicts[name] = copy.copy(target_dicts[t])
- new_target_dicts[name]['target_name'] = _ShardName(
- new_target_dicts[name]['target_name'], i)
- sources = new_target_dicts[name].get('sources', [])
- new_sources = []
- for pos in range(i, len(sources), targets_to_shard[t]):
- new_sources.append(sources[pos])
- new_target_dicts[name]['sources'] = new_sources
- else:
- new_target_dicts[t] = target_dicts[t]
- # Shard dependencies.
- for t in new_target_dicts:
- for deptype in ('dependencies', 'dependencies_original'):
- dependencies = copy.copy(new_target_dicts[t].get(deptype, []))
- new_dependencies = []
- for d in dependencies:
- if d in targets_to_shard:
- for i in range(targets_to_shard[d]):
- new_dependencies.append(_ShardName(d, i))
- else:
- new_dependencies.append(d)
- new_target_dicts[t][deptype] = new_dependencies
-
- return (new_target_list, new_target_dicts)
-
-
-def _GetPdbPath(target_dict, config_name, vars):
- """Returns the path to the PDB file that will be generated by a given
- configuration.
-
- The lookup proceeds as follows:
- - Look for an explicit path in the VCLinkerTool configuration block.
- - Look for an 'msvs_large_pdb_path' variable.
- - Use '<(PRODUCT_DIR)/<(product_name).(exe|dll).pdb' if 'product_name' is
- specified.
- - Use '<(PRODUCT_DIR)/<(target_name).(exe|dll).pdb'.
-
- Arguments:
- target_dict: The target dictionary to be searched.
- config_name: The name of the configuration of interest.
- vars: A dictionary of common GYP variables with generator-specific values.
- Returns:
- The path of the corresponding PDB file.
- """
- config = target_dict['configurations'][config_name]
- msvs = config.setdefault('msvs_settings', {})
-
- linker = msvs.get('VCLinkerTool', {})
-
- pdb_path = linker.get('ProgramDatabaseFile')
- if pdb_path:
- return pdb_path
-
- variables = target_dict.get('variables', {})
- pdb_path = variables.get('msvs_large_pdb_path', None)
- if pdb_path:
- return pdb_path
-
-
- pdb_base = target_dict.get('product_name', target_dict['target_name'])
- pdb_base = '%s.%s.pdb' % (pdb_base, TARGET_TYPE_EXT[target_dict['type']])
- pdb_path = vars['PRODUCT_DIR'] + '/' + pdb_base
-
- return pdb_path
-
-
-def InsertLargePdbShims(target_list, target_dicts, vars):
- """Insert a shim target that forces the linker to use 4KB pagesize PDBs.
-
- This is a workaround for targets with PDBs greater than 1GB in size, the
- limit for the 1KB pagesize PDBs created by the linker by default.
-
- Arguments:
- target_list: List of target pairs: 'base/base.gyp:base'.
- target_dicts: Dict of target properties keyed on target pair.
- vars: A dictionary of common GYP variables with generator-specific values.
- Returns:
- Tuple of the shimmed version of the inputs.
- """
- # Determine which targets need shimming.
- targets_to_shim = []
- for t in target_dicts:
- target_dict = target_dicts[t]
-
- # We only want to shim targets that have msvs_large_pdb enabled.
- if not int(target_dict.get('msvs_large_pdb', 0)):
- continue
- # This is intended for executable, shared_library and loadable_module
- # targets where every configuration is set up to produce a PDB output.
- # If any of these conditions is not true then the shim logic will fail
- # below.
- targets_to_shim.append(t)
-
- large_pdb_shim_cc = _GetLargePdbShimCcPath()
-
- for t in targets_to_shim:
- target_dict = target_dicts[t]
- target_name = target_dict.get('target_name')
-
- base_dict = _DeepCopySomeKeys(target_dict,
- ['configurations', 'default_configuration', 'toolset'])
-
- # This is the dict for copying the source file (part of the GYP tree)
- # to the intermediate directory of the project. This is necessary because
- # we can't always build a relative path to the shim source file (on Windows
- # GYP and the project may be on different drives), and Ninja hates absolute
- # paths (it ends up generating the .obj and .obj.d alongside the source
- # file, polluting GYPs tree).
- copy_suffix = 'large_pdb_copy'
- copy_target_name = target_name + '_' + copy_suffix
- full_copy_target_name = _SuffixName(t, copy_suffix)
- shim_cc_basename = os.path.basename(large_pdb_shim_cc)
- shim_cc_dir = vars['SHARED_INTERMEDIATE_DIR'] + '/' + copy_target_name
- shim_cc_path = shim_cc_dir + '/' + shim_cc_basename
- copy_dict = copy.deepcopy(base_dict)
- copy_dict['target_name'] = copy_target_name
- copy_dict['type'] = 'none'
- copy_dict['sources'] = [ large_pdb_shim_cc ]
- copy_dict['copies'] = [{
- 'destination': shim_cc_dir,
- 'files': [ large_pdb_shim_cc ]
- }]
-
- # This is the dict for the PDB generating shim target. It depends on the
- # copy target.
- shim_suffix = 'large_pdb_shim'
- shim_target_name = target_name + '_' + shim_suffix
- full_shim_target_name = _SuffixName(t, shim_suffix)
- shim_dict = copy.deepcopy(base_dict)
- shim_dict['target_name'] = shim_target_name
- shim_dict['type'] = 'static_library'
- shim_dict['sources'] = [ shim_cc_path ]
- shim_dict['dependencies'] = [ full_copy_target_name ]
-
- # Set up the shim to output its PDB to the same location as the final linker
- # target.
- for config_name, config in shim_dict.get('configurations').iteritems():
- pdb_path = _GetPdbPath(target_dict, config_name, vars)
-
- # A few keys that we don't want to propagate.
- for key in ['msvs_precompiled_header', 'msvs_precompiled_source', 'test']:
- config.pop(key, None)
-
- msvs = config.setdefault('msvs_settings', {})
-
- # Update the compiler directives in the shim target.
- compiler = msvs.setdefault('VCCLCompilerTool', {})
- compiler['DebugInformationFormat'] = '3'
- compiler['ProgramDataBaseFileName'] = pdb_path
-
- # Set the explicit PDB path in the appropriate configuration of the
- # original target.
- config = target_dict['configurations'][config_name]
- msvs = config.setdefault('msvs_settings', {})
- linker = msvs.setdefault('VCLinkerTool', {})
- linker['GenerateDebugInformation'] = 'true'
- linker['ProgramDatabaseFile'] = pdb_path
-
- # Add the new targets. They must go to the beginning of the list so that
- # the dependency generation works as expected in ninja.
- target_list.insert(0, full_copy_target_name)
- target_list.insert(0, full_shim_target_name)
- target_dicts[full_copy_target_name] = copy_dict
- target_dicts[full_shim_target_name] = shim_dict
-
- # Update the original target to depend on the shim target.
- target_dict.setdefault('dependencies', []).append(full_shim_target_name)
-
- return (target_list, target_dicts)
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py b/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
deleted file mode 100644
index d9bfa68..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
+++ /dev/null
@@ -1,443 +0,0 @@
-# Copyright (c) 2013 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Handle version information related to Visual Stuio."""
-
-import errno
-import os
-import re
-import subprocess
-import sys
-import gyp
-import glob
-
-
-class VisualStudioVersion(object):
- """Information regarding a version of Visual Studio."""
-
- def __init__(self, short_name, description,
- solution_version, project_version, flat_sln, uses_vcxproj,
- path, sdk_based, default_toolset=None):
- self.short_name = short_name
- self.description = description
- self.solution_version = solution_version
- self.project_version = project_version
- self.flat_sln = flat_sln
- self.uses_vcxproj = uses_vcxproj
- self.path = path
- self.sdk_based = sdk_based
- self.default_toolset = default_toolset
-
- def ShortName(self):
- return self.short_name
-
- def Description(self):
- """Get the full description of the version."""
- return self.description
-
- def SolutionVersion(self):
- """Get the version number of the sln files."""
- return self.solution_version
-
- def ProjectVersion(self):
- """Get the version number of the vcproj or vcxproj files."""
- return self.project_version
-
- def FlatSolution(self):
- return self.flat_sln
-
- def UsesVcxproj(self):
- """Returns true if this version uses a vcxproj file."""
- return self.uses_vcxproj
-
- def ProjectExtension(self):
- """Returns the file extension for the project."""
- return self.uses_vcxproj and '.vcxproj' or '.vcproj'
-
- def Path(self):
- """Returns the path to Visual Studio installation."""
- return self.path
-
- def ToolPath(self, tool):
- """Returns the path to a given compiler tool. """
- return os.path.normpath(os.path.join(self.path, "VC/bin", tool))
-
- def DefaultToolset(self):
- """Returns the msbuild toolset version that will be used in the absence
- of a user override."""
- return self.default_toolset
-
- def SetupScript(self, target_arch):
- """Returns a command (with arguments) to be used to set up the
- environment."""
- # Check if we are running in the SDK command line environment and use
- # the setup script from the SDK if so. |target_arch| should be either
- # 'x86' or 'x64'.
- assert target_arch in ('x86', 'x64')
- sdk_dir = os.environ.get('WindowsSDKDir')
- if self.sdk_based and sdk_dir:
- return [os.path.normpath(os.path.join(sdk_dir, 'Bin/SetEnv.Cmd')),
- '/' + target_arch]
- else:
- # We don't use VC/vcvarsall.bat for x86 because vcvarsall calls
- # vcvars32, which it can only find if VS??COMNTOOLS is set, which it
- # isn't always.
- if target_arch == 'x86':
- if self.short_name >= '2013' and self.short_name[-1] != 'e' and (
- os.environ.get('PROCESSOR_ARCHITECTURE') == 'AMD64' or
- os.environ.get('PROCESSOR_ARCHITEW6432') == 'AMD64'):
- # VS2013 and later, non-Express have a x64-x86 cross that we want
- # to prefer.
- return [os.path.normpath(
- os.path.join(self.path, 'VC/vcvarsall.bat')), 'amd64_x86']
- # Otherwise, the standard x86 compiler.
- return [os.path.normpath(
- os.path.join(self.path, 'Common7/Tools/vsvars32.bat'))]
- else:
- assert target_arch == 'x64'
- arg = 'x86_amd64'
- # Use the 64-on-64 compiler if we're not using an express
- # edition and we're running on a 64bit OS.
- if self.short_name[-1] != 'e' and (
- os.environ.get('PROCESSOR_ARCHITECTURE') == 'AMD64' or
- os.environ.get('PROCESSOR_ARCHITEW6432') == 'AMD64'):
- arg = 'amd64'
- return [os.path.normpath(
- os.path.join(self.path, 'VC/vcvarsall.bat')), arg]
-
-
-def _RegistryQueryBase(sysdir, key, value):
- """Use reg.exe to read a particular key.
-
- While ideally we might use the win32 module, we would like gyp to be
- python neutral, so for instance cygwin python lacks this module.
-
- Arguments:
- sysdir: The system subdirectory to attempt to launch reg.exe from.
- key: The registry key to read from.
- value: The particular value to read.
- Return:
- stdout from reg.exe, or None for failure.
- """
- # Skip if not on Windows or Python Win32 setup issue
- if sys.platform not in ('win32', 'cygwin'):
- return None
- # Setup params to pass to and attempt to launch reg.exe
- cmd = [os.path.join(os.environ.get('WINDIR', ''), sysdir, 'reg.exe'),
- 'query', key]
- if value:
- cmd.extend(['/v', value])
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- # Obtain the stdout from reg.exe, reading to the end so p.returncode is valid
- # Note that the error text may be in [1] in some cases
- text = p.communicate()[0]
- # Check return code from reg.exe; officially 0==success and 1==error
- if p.returncode:
- return None
- return text
-
-
-def _RegistryQuery(key, value=None):
- r"""Use reg.exe to read a particular key through _RegistryQueryBase.
-
- First tries to launch from %WinDir%\Sysnative to avoid WoW64 redirection. If
- that fails, it falls back to System32. Sysnative is available on Vista and
- up and available on Windows Server 2003 and XP through KB patch 942589. Note
- that Sysnative will always fail if using 64-bit python due to it being a
- virtual directory and System32 will work correctly in the first place.
-
- KB 942589 - http://support.microsoft.com/kb/942589/en-us.
-
- Arguments:
- key: The registry key.
- value: The particular registry value to read (optional).
- Return:
- stdout from reg.exe, or None for failure.
- """
- text = None
- try:
- text = _RegistryQueryBase('Sysnative', key, value)
- except OSError, e:
- if e.errno == errno.ENOENT:
- text = _RegistryQueryBase('System32', key, value)
- else:
- raise
- return text
-
-
-def _RegistryGetValueUsingWinReg(key, value):
- """Use the _winreg module to obtain the value of a registry key.
-
- Args:
- key: The registry key.
- value: The particular registry value to read.
- Return:
- contents of the registry key's value, or None on failure. Throws
- ImportError if _winreg is unavailable.
- """
- import _winreg
- try:
- root, subkey = key.split('\\', 1)
- assert root == 'HKLM' # Only need HKLM for now.
- with _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, subkey) as hkey:
- return _winreg.QueryValueEx(hkey, value)[0]
- except WindowsError:
- return None
-
-
-def _RegistryGetValue(key, value):
- """Use _winreg or reg.exe to obtain the value of a registry key.
-
- Using _winreg is preferable because it solves an issue on some corporate
- environments where access to reg.exe is locked down. However, we still need
- to fallback to reg.exe for the case where the _winreg module is not available
- (for example in cygwin python).
-
- Args:
- key: The registry key.
- value: The particular registry value to read.
- Return:
- contents of the registry key's value, or None on failure.
- """
- try:
- return _RegistryGetValueUsingWinReg(key, value)
- except ImportError:
- pass
-
- # Fallback to reg.exe if we fail to import _winreg.
- text = _RegistryQuery(key, value)
- if not text:
- return None
- # Extract value.
- match = re.search(r'REG_\w+\s+([^\r]+)\r\n', text)
- if not match:
- return None
- return match.group(1)
-
-
-def _CreateVersion(name, path, sdk_based=False):
- """Sets up MSVS project generation.
-
- Setup is based off the GYP_MSVS_VERSION environment variable or whatever is
- autodetected if GYP_MSVS_VERSION is not explicitly specified. If a version is
- passed in that doesn't match a value in versions python will throw a error.
- """
- if path:
- path = os.path.normpath(path)
- versions = {
- '2015': VisualStudioVersion('2015',
- 'Visual Studio 2015',
- solution_version='12.00',
- project_version='14.0',
- flat_sln=False,
- uses_vcxproj=True,
- path=path,
- sdk_based=sdk_based,
- default_toolset='v140'),
- '2013': VisualStudioVersion('2013',
- 'Visual Studio 2013',
- solution_version='13.00',
- project_version='12.0',
- flat_sln=False,
- uses_vcxproj=True,
- path=path,
- sdk_based=sdk_based,
- default_toolset='v120'),
- '2013e': VisualStudioVersion('2013e',
- 'Visual Studio 2013',
- solution_version='13.00',
- project_version='12.0',
- flat_sln=True,
- uses_vcxproj=True,
- path=path,
- sdk_based=sdk_based,
- default_toolset='v120'),
- '2012': VisualStudioVersion('2012',
- 'Visual Studio 2012',
- solution_version='12.00',
- project_version='4.0',
- flat_sln=False,
- uses_vcxproj=True,
- path=path,
- sdk_based=sdk_based,
- default_toolset='v110'),
- '2012e': VisualStudioVersion('2012e',
- 'Visual Studio 2012',
- solution_version='12.00',
- project_version='4.0',
- flat_sln=True,
- uses_vcxproj=True,
- path=path,
- sdk_based=sdk_based,
- default_toolset='v110'),
- '2010': VisualStudioVersion('2010',
- 'Visual Studio 2010',
- solution_version='11.00',
- project_version='4.0',
- flat_sln=False,
- uses_vcxproj=True,
- path=path,
- sdk_based=sdk_based),
- '2010e': VisualStudioVersion('2010e',
- 'Visual C++ Express 2010',
- solution_version='11.00',
- project_version='4.0',
- flat_sln=True,
- uses_vcxproj=True,
- path=path,
- sdk_based=sdk_based),
- '2008': VisualStudioVersion('2008',
- 'Visual Studio 2008',
- solution_version='10.00',
- project_version='9.00',
- flat_sln=False,
- uses_vcxproj=False,
- path=path,
- sdk_based=sdk_based),
- '2008e': VisualStudioVersion('2008e',
- 'Visual Studio 2008',
- solution_version='10.00',
- project_version='9.00',
- flat_sln=True,
- uses_vcxproj=False,
- path=path,
- sdk_based=sdk_based),
- '2005': VisualStudioVersion('2005',
- 'Visual Studio 2005',
- solution_version='9.00',
- project_version='8.00',
- flat_sln=False,
- uses_vcxproj=False,
- path=path,
- sdk_based=sdk_based),
- '2005e': VisualStudioVersion('2005e',
- 'Visual Studio 2005',
- solution_version='9.00',
- project_version='8.00',
- flat_sln=True,
- uses_vcxproj=False,
- path=path,
- sdk_based=sdk_based),
- }
- return versions[str(name)]
-
-
-def _ConvertToCygpath(path):
- """Convert to cygwin path if we are using cygwin."""
- if sys.platform == 'cygwin':
- p = subprocess.Popen(['cygpath', path], stdout=subprocess.PIPE)
- path = p.communicate()[0].strip()
- return path
-
-
-def _DetectVisualStudioVersions(versions_to_check, force_express):
- """Collect the list of installed visual studio versions.
-
- Returns:
- A list of visual studio versions installed in descending order of
- usage preference.
- Base this on the registry and a quick check if devenv.exe exists.
- Only versions 8-10 are considered.
- Possibilities are:
- 2005(e) - Visual Studio 2005 (8)
- 2008(e) - Visual Studio 2008 (9)
- 2010(e) - Visual Studio 2010 (10)
- 2012(e) - Visual Studio 2012 (11)
- 2013(e) - Visual Studio 2013 (12)
- 2015 - Visual Studio 2015 (14)
- Where (e) is e for express editions of MSVS and blank otherwise.
- """
- version_to_year = {
- '8.0': '2005',
- '9.0': '2008',
- '10.0': '2010',
- '11.0': '2012',
- '12.0': '2013',
- '14.0': '2015',
- }
- versions = []
- for version in versions_to_check:
- # Old method of searching for which VS version is installed
- # We don't use the 2010-encouraged-way because we also want to get the
- # path to the binaries, which it doesn't offer.
- keys = [r'HKLM\Software\Microsoft\VisualStudio\%s' % version,
- r'HKLM\Software\Wow6432Node\Microsoft\VisualStudio\%s' % version,
- r'HKLM\Software\Microsoft\VCExpress\%s' % version,
- r'HKLM\Software\Wow6432Node\Microsoft\VCExpress\%s' % version]
- for index in range(len(keys)):
- path = _RegistryGetValue(keys[index], 'InstallDir')
- if not path:
- continue
- path = _ConvertToCygpath(path)
- # Check for full.
- full_path = os.path.join(path, 'devenv.exe')
- express_path = os.path.join(path, '*express.exe')
- if not force_express and os.path.exists(full_path):
- # Add this one.
- versions.append(_CreateVersion(version_to_year[version],
- os.path.join(path, '..', '..')))
- # Check for express.
- elif glob.glob(express_path):
- # Add this one.
- versions.append(_CreateVersion(version_to_year[version] + 'e',
- os.path.join(path, '..', '..')))
-
- # The old method above does not work when only SDK is installed.
- keys = [r'HKLM\Software\Microsoft\VisualStudio\SxS\VC7',
- r'HKLM\Software\Wow6432Node\Microsoft\VisualStudio\SxS\VC7']
- for index in range(len(keys)):
- path = _RegistryGetValue(keys[index], version)
- if not path:
- continue
- path = _ConvertToCygpath(path)
- if version != '14.0': # There is no Express edition for 2015.
- versions.append(_CreateVersion(version_to_year[version] + 'e',
- os.path.join(path, '..'), sdk_based=True))
-
- return versions
-
-
-def SelectVisualStudioVersion(version='auto', allow_fallback=True):
- """Select which version of Visual Studio projects to generate.
-
- Arguments:
- version: Hook to allow caller to force a particular version (vs auto).
- Returns:
- An object representing a visual studio project format version.
- """
- # In auto mode, check environment variable for override.
- if version == 'auto':
- version = os.environ.get('GYP_MSVS_VERSION', 'auto')
- version_map = {
- 'auto': ('14.0', '12.0', '10.0', '9.0', '8.0', '11.0'),
- '2005': ('8.0',),
- '2005e': ('8.0',),
- '2008': ('9.0',),
- '2008e': ('9.0',),
- '2010': ('10.0',),
- '2010e': ('10.0',),
- '2012': ('11.0',),
- '2012e': ('11.0',),
- '2013': ('12.0',),
- '2013e': ('12.0',),
- '2015': ('14.0',),
- }
- override_path = os.environ.get('GYP_MSVS_OVERRIDE_PATH')
- if override_path:
- msvs_version = os.environ.get('GYP_MSVS_VERSION')
- if not msvs_version:
- raise ValueError('GYP_MSVS_OVERRIDE_PATH requires GYP_MSVS_VERSION to be '
- 'set to a particular version (e.g. 2010e).')
- return _CreateVersion(msvs_version, override_path, sdk_based=True)
- version = str(version)
- versions = _DetectVisualStudioVersions(version_map[version], 'e' in version)
- if not versions:
- if not allow_fallback:
- raise ValueError('Could not locate Visual Studio installation.')
- if version == 'auto':
- # Default to 2005 if we couldn't find anything
- return _CreateVersion('2005', None)
- else:
- return _CreateVersion(version, None)
- return versions[0]
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/__init__.py b/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
deleted file mode 100755
index 668f38b..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
+++ /dev/null
@@ -1,548 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import copy
-import gyp.input
-import optparse
-import os.path
-import re
-import shlex
-import sys
-import traceback
-from gyp.common import GypError
-
-# Default debug modes for GYP
-debug = {}
-
-# List of "official" debug modes, but you can use anything you like.
-DEBUG_GENERAL = 'general'
-DEBUG_VARIABLES = 'variables'
-DEBUG_INCLUDES = 'includes'
-
-
-def DebugOutput(mode, message, *args):
- if 'all' in gyp.debug or mode in gyp.debug:
- ctx = ('unknown', 0, 'unknown')
- try:
- f = traceback.extract_stack(limit=2)
- if f:
- ctx = f[0][:3]
- except:
- pass
- if args:
- message %= args
- print '%s:%s:%d:%s %s' % (mode.upper(), os.path.basename(ctx[0]),
- ctx[1], ctx[2], message)
-
-def FindBuildFiles():
- extension = '.gyp'
- files = os.listdir(os.getcwd())
- build_files = []
- for file in files:
- if file.endswith(extension):
- build_files.append(file)
- return build_files
-
-
-def Load(build_files, format, default_variables={},
- includes=[], depth='.', params=None, check=False,
- circular_check=True, duplicate_basename_check=True):
- """
- Loads one or more specified build files.
- default_variables and includes will be copied before use.
- Returns the generator for the specified format and the
- data returned by loading the specified build files.
- """
- if params is None:
- params = {}
-
- if '-' in format:
- format, params['flavor'] = format.split('-', 1)
-
- default_variables = copy.copy(default_variables)
-
- # Default variables provided by this program and its modules should be
- # named WITH_CAPITAL_LETTERS to provide a distinct "best practice" namespace,
- # avoiding collisions with user and automatic variables.
- default_variables['GENERATOR'] = format
- default_variables['GENERATOR_FLAVOR'] = params.get('flavor', '')
-
- # Format can be a custom python file, or by default the name of a module
- # within gyp.generator.
- if format.endswith('.py'):
- generator_name = os.path.splitext(format)[0]
- path, generator_name = os.path.split(generator_name)
-
- # Make sure the path to the custom generator is in sys.path
- # Don't worry about removing it once we are done. Keeping the path
- # to each generator that is used in sys.path is likely harmless and
- # arguably a good idea.
- path = os.path.abspath(path)
- if path not in sys.path:
- sys.path.insert(0, path)
- else:
- generator_name = 'gyp.generator.' + format
-
- # These parameters are passed in order (as opposed to by key)
- # because ActivePython cannot handle key parameters to __import__.
- generator = __import__(generator_name, globals(), locals(), generator_name)
- for (key, val) in generator.generator_default_variables.items():
- default_variables.setdefault(key, val)
-
- # Give the generator the opportunity to set additional variables based on
- # the params it will receive in the output phase.
- if getattr(generator, 'CalculateVariables', None):
- generator.CalculateVariables(default_variables, params)
-
- # Give the generator the opportunity to set generator_input_info based on
- # the params it will receive in the output phase.
- if getattr(generator, 'CalculateGeneratorInputInfo', None):
- generator.CalculateGeneratorInputInfo(params)
-
- # Fetch the generator specific info that gets fed to input, we use getattr
- # so we can default things and the generators only have to provide what
- # they need.
- generator_input_info = {
- 'non_configuration_keys':
- getattr(generator, 'generator_additional_non_configuration_keys', []),
- 'path_sections':
- getattr(generator, 'generator_additional_path_sections', []),
- 'extra_sources_for_rules':
- getattr(generator, 'generator_extra_sources_for_rules', []),
- 'generator_supports_multiple_toolsets':
- getattr(generator, 'generator_supports_multiple_toolsets', False),
- 'generator_wants_static_library_dependencies_adjusted':
- getattr(generator,
- 'generator_wants_static_library_dependencies_adjusted', True),
- 'generator_wants_sorted_dependencies':
- getattr(generator, 'generator_wants_sorted_dependencies', False),
- 'generator_filelist_paths':
- getattr(generator, 'generator_filelist_paths', None),
- }
-
- # Process the input specific to this generator.
- result = gyp.input.Load(build_files, default_variables, includes[:],
- depth, generator_input_info, check, circular_check,
- duplicate_basename_check,
- params['parallel'], params['root_targets'])
- return [generator] + result
-
-def NameValueListToDict(name_value_list):
- """
- Takes an array of strings of the form 'NAME=VALUE' and creates a dictionary
- of the pairs. If a string is simply NAME, then the value in the dictionary
- is set to True. If VALUE can be converted to an integer, it is.
- """
- result = { }
- for item in name_value_list:
- tokens = item.split('=', 1)
- if len(tokens) == 2:
- # If we can make it an int, use that, otherwise, use the string.
- try:
- token_value = int(tokens[1])
- except ValueError:
- token_value = tokens[1]
- # Set the variable to the supplied value.
- result[tokens[0]] = token_value
- else:
- # No value supplied, treat it as a boolean and set it.
- result[tokens[0]] = True
- return result
-
-def ShlexEnv(env_name):
- flags = os.environ.get(env_name, [])
- if flags:
- flags = shlex.split(flags)
- return flags
-
-def FormatOpt(opt, value):
- if opt.startswith('--'):
- return '%s=%s' % (opt, value)
- return opt + value
-
-def RegenerateAppendFlag(flag, values, predicate, env_name, options):
- """Regenerate a list of command line flags, for an option of action='append'.
-
- The |env_name|, if given, is checked in the environment and used to generate
- an initial list of options, then the options that were specified on the
- command line (given in |values|) are appended. This matches the handling of
- environment variables and command line flags where command line flags override
- the environment, while not requiring the environment to be set when the flags
- are used again.
- """
- flags = []
- if options.use_environment and env_name:
- for flag_value in ShlexEnv(env_name):
- value = FormatOpt(flag, predicate(flag_value))
- if value in flags:
- flags.remove(value)
- flags.append(value)
- if values:
- for flag_value in values:
- flags.append(FormatOpt(flag, predicate(flag_value)))
- return flags
-
-def RegenerateFlags(options):
- """Given a parsed options object, and taking the environment variables into
- account, returns a list of flags that should regenerate an equivalent options
- object (even in the absence of the environment variables.)
-
- Any path options will be normalized relative to depth.
-
- The format flag is not included, as it is assumed the calling generator will
- set that as appropriate.
- """
- def FixPath(path):
- path = gyp.common.FixIfRelativePath(path, options.depth)
- if not path:
- return os.path.curdir
- return path
-
- def Noop(value):
- return value
-
- # We always want to ignore the environment when regenerating, to avoid
- # duplicate or changed flags in the environment at the time of regeneration.
- flags = ['--ignore-environment']
- for name, metadata in options._regeneration_metadata.iteritems():
- opt = metadata['opt']
- value = getattr(options, name)
- value_predicate = metadata['type'] == 'path' and FixPath or Noop
- action = metadata['action']
- env_name = metadata['env_name']
- if action == 'append':
- flags.extend(RegenerateAppendFlag(opt, value, value_predicate,
- env_name, options))
- elif action in ('store', None): # None is a synonym for 'store'.
- if value:
- flags.append(FormatOpt(opt, value_predicate(value)))
- elif options.use_environment and env_name and os.environ.get(env_name):
- flags.append(FormatOpt(opt, value_predicate(os.environ.get(env_name))))
- elif action in ('store_true', 'store_false'):
- if ((action == 'store_true' and value) or
- (action == 'store_false' and not value)):
- flags.append(opt)
- elif options.use_environment and env_name:
- print >>sys.stderr, ('Warning: environment regeneration unimplemented '
- 'for %s flag %r env_name %r' % (action, opt,
- env_name))
- else:
- print >>sys.stderr, ('Warning: regeneration unimplemented for action %r '
- 'flag %r' % (action, opt))
-
- return flags
-
-class RegeneratableOptionParser(optparse.OptionParser):
- def __init__(self):
- self.__regeneratable_options = {}
- optparse.OptionParser.__init__(self)
-
- def add_option(self, *args, **kw):
- """Add an option to the parser.
-
- This accepts the same arguments as OptionParser.add_option, plus the
- following:
- regenerate: can be set to False to prevent this option from being included
- in regeneration.
- env_name: name of environment variable that additional values for this
- option come from.
- type: adds type='path', to tell the regenerator that the values of
- this option need to be made relative to options.depth
- """
- env_name = kw.pop('env_name', None)
- if 'dest' in kw and kw.pop('regenerate', True):
- dest = kw['dest']
-
- # The path type is needed for regenerating, for optparse we can just treat
- # it as a string.
- type = kw.get('type')
- if type == 'path':
- kw['type'] = 'string'
-
- self.__regeneratable_options[dest] = {
- 'action': kw.get('action'),
- 'type': type,
- 'env_name': env_name,
- 'opt': args[0],
- }
-
- optparse.OptionParser.add_option(self, *args, **kw)
-
- def parse_args(self, *args):
- values, args = optparse.OptionParser.parse_args(self, *args)
- values._regeneration_metadata = self.__regeneratable_options
- return values, args
-
-def gyp_main(args):
- my_name = os.path.basename(sys.argv[0])
-
- parser = RegeneratableOptionParser()
- usage = 'usage: %s [options ...] [build_file ...]'
- parser.set_usage(usage.replace('%s', '%prog'))
- parser.add_option('--build', dest='configs', action='append',
- help='configuration for build after project generation')
- parser.add_option('--check', dest='check', action='store_true',
- help='check format of gyp files')
- parser.add_option('--config-dir', dest='config_dir', action='store',
- env_name='GYP_CONFIG_DIR', default=None,
- help='The location for configuration files like '
- 'include.gypi.')
- parser.add_option('-d', '--debug', dest='debug', metavar='DEBUGMODE',
- action='append', default=[], help='turn on a debugging '
- 'mode for debugging GYP. Supported modes are "variables", '
- '"includes" and "general" or "all" for all of them.')
- parser.add_option('-D', dest='defines', action='append', metavar='VAR=VAL',
- env_name='GYP_DEFINES',
- help='sets variable VAR to value VAL')
- parser.add_option('--depth', dest='depth', metavar='PATH', type='path',
- help='set DEPTH gyp variable to a relative path to PATH')
- parser.add_option('-f', '--format', dest='formats', action='append',
- env_name='GYP_GENERATORS', regenerate=False,
- help='output formats to generate')
- parser.add_option('-G', dest='generator_flags', action='append', default=[],
- metavar='FLAG=VAL', env_name='GYP_GENERATOR_FLAGS',
- help='sets generator flag FLAG to VAL')
- parser.add_option('--generator-output', dest='generator_output',
- action='store', default=None, metavar='DIR', type='path',
- env_name='GYP_GENERATOR_OUTPUT',
- help='puts generated build files under DIR')
- parser.add_option('--ignore-environment', dest='use_environment',
- action='store_false', default=True, regenerate=False,
- help='do not read options from environment variables')
- parser.add_option('-I', '--include', dest='includes', action='append',
- metavar='INCLUDE', type='path',
- help='files to include in all loaded .gyp files')
- # --no-circular-check disables the check for circular relationships between
- # .gyp files. These relationships should not exist, but they've only been
- # observed to be harmful with the Xcode generator. Chromium's .gyp files
- # currently have some circular relationships on non-Mac platforms, so this
- # option allows the strict behavior to be used on Macs and the lenient
- # behavior to be used elsewhere.
- # TODO(mark): Remove this option when http://crbug.com/35878 is fixed.
- parser.add_option('--no-circular-check', dest='circular_check',
- action='store_false', default=True, regenerate=False,
- help="don't check for circular relationships between files")
- # --no-duplicate-basename-check disables the check for duplicate basenames
- # in a static_library/shared_library project. Visual C++ 2008 generator
- # doesn't support this configuration. Libtool on Mac also generates warnings
- # when duplicate basenames are passed into Make generator on Mac.
- # TODO(yukawa): Remove this option when these legacy generators are
- # deprecated.
- parser.add_option('--no-duplicate-basename-check',
- dest='duplicate_basename_check', action='store_false',
- default=True, regenerate=False,
- help="don't check for duplicate basenames")
- parser.add_option('--no-parallel', action='store_true', default=False,
- help='Disable multiprocessing')
- parser.add_option('-S', '--suffix', dest='suffix', default='',
- help='suffix to add to generated files')
- parser.add_option('--toplevel-dir', dest='toplevel_dir', action='store',
- default=None, metavar='DIR', type='path',
- help='directory to use as the root of the source tree')
- parser.add_option('-R', '--root-target', dest='root_targets',
- action='append', metavar='TARGET',
- help='include only TARGET and its deep dependencies')
-
- options, build_files_arg = parser.parse_args(args)
- build_files = build_files_arg
-
- # Set up the configuration directory (defaults to ~/.gyp)
- if not options.config_dir:
- home = None
- home_dot_gyp = None
- if options.use_environment:
- home_dot_gyp = os.environ.get('GYP_CONFIG_DIR', None)
- if home_dot_gyp:
- home_dot_gyp = os.path.expanduser(home_dot_gyp)
-
- if not home_dot_gyp:
- home_vars = ['HOME']
- if sys.platform in ('cygwin', 'win32'):
- home_vars.append('USERPROFILE')
- for home_var in home_vars:
- home = os.getenv(home_var)
- if home != None:
- home_dot_gyp = os.path.join(home, '.gyp')
- if not os.path.exists(home_dot_gyp):
- home_dot_gyp = None
- else:
- break
- else:
- home_dot_gyp = os.path.expanduser(options.config_dir)
-
- if home_dot_gyp and not os.path.exists(home_dot_gyp):
- home_dot_gyp = None
-
- if not options.formats:
- # If no format was given on the command line, then check the env variable.
- generate_formats = []
- if options.use_environment:
- generate_formats = os.environ.get('GYP_GENERATORS', [])
- if generate_formats:
- generate_formats = re.split(r'[\s,]', generate_formats)
- if generate_formats:
- options.formats = generate_formats
- else:
- # Nothing in the variable, default based on platform.
- if sys.platform == 'darwin':
- options.formats = ['xcode']
- elif sys.platform in ('win32', 'cygwin'):
- options.formats = ['msvs']
- else:
- options.formats = ['make']
-
- if not options.generator_output and options.use_environment:
- g_o = os.environ.get('GYP_GENERATOR_OUTPUT')
- if g_o:
- options.generator_output = g_o
-
- options.parallel = not options.no_parallel
-
- for mode in options.debug:
- gyp.debug[mode] = 1
-
- # Do an extra check to avoid work when we're not debugging.
- if DEBUG_GENERAL in gyp.debug:
- DebugOutput(DEBUG_GENERAL, 'running with these options:')
- for option, value in sorted(options.__dict__.items()):
- if option[0] == '_':
- continue
- if isinstance(value, basestring):
- DebugOutput(DEBUG_GENERAL, " %s: '%s'", option, value)
- else:
- DebugOutput(DEBUG_GENERAL, " %s: %s", option, value)
-
- if not build_files:
- build_files = FindBuildFiles()
- if not build_files:
- raise GypError((usage + '\n\n%s: error: no build_file') %
- (my_name, my_name))
-
- # TODO(mark): Chromium-specific hack!
- # For Chromium, the gyp "depth" variable should always be a relative path
- # to Chromium's top-level "src" directory. If no depth variable was set
- # on the command line, try to find a "src" directory by looking at the
- # absolute path to each build file's directory. The first "src" component
- # found will be treated as though it were the path used for --depth.
- if not options.depth:
- for build_file in build_files:
- build_file_dir = os.path.abspath(os.path.dirname(build_file))
- build_file_dir_components = build_file_dir.split(os.path.sep)
- components_len = len(build_file_dir_components)
- for index in xrange(components_len - 1, -1, -1):
- if build_file_dir_components[index] == 'src':
- options.depth = os.path.sep.join(build_file_dir_components)
- break
- del build_file_dir_components[index]
-
- # If the inner loop found something, break without advancing to another
- # build file.
- if options.depth:
- break
-
- if not options.depth:
- raise GypError('Could not automatically locate src directory. This is'
- 'a temporary Chromium feature that will be removed. Use'
- '--depth as a workaround.')
-
- # If toplevel-dir is not set, we assume that depth is the root of our source
- # tree.
- if not options.toplevel_dir:
- options.toplevel_dir = options.depth
-
- # -D on the command line sets variable defaults - D isn't just for define,
- # it's for default. Perhaps there should be a way to force (-F?) a
- # variable's value so that it can't be overridden by anything else.
- cmdline_default_variables = {}
- defines = []
- if options.use_environment:
- defines += ShlexEnv('GYP_DEFINES')
- if options.defines:
- defines += options.defines
- cmdline_default_variables = NameValueListToDict(defines)
- if DEBUG_GENERAL in gyp.debug:
- DebugOutput(DEBUG_GENERAL,
- "cmdline_default_variables: %s", cmdline_default_variables)
-
- # Set up includes.
- includes = []
-
- # If ~/.gyp/include.gypi exists, it'll be forcibly included into every
- # .gyp file that's loaded, before anything else is included.
- if home_dot_gyp != None:
- default_include = os.path.join(home_dot_gyp, 'include.gypi')
- if os.path.exists(default_include):
- print 'Using overrides found in ' + default_include
- includes.append(default_include)
-
- # Command-line --include files come after the default include.
- if options.includes:
- includes.extend(options.includes)
-
- # Generator flags should be prefixed with the target generator since they
- # are global across all generator runs.
- gen_flags = []
- if options.use_environment:
- gen_flags += ShlexEnv('GYP_GENERATOR_FLAGS')
- if options.generator_flags:
- gen_flags += options.generator_flags
- generator_flags = NameValueListToDict(gen_flags)
- if DEBUG_GENERAL in gyp.debug.keys():
- DebugOutput(DEBUG_GENERAL, "generator_flags: %s", generator_flags)
-
- # Generate all requested formats (use a set in case we got one format request
- # twice)
- for format in set(options.formats):
- params = {'options': options,
- 'build_files': build_files,
- 'generator_flags': generator_flags,
- 'cwd': os.getcwd(),
- 'build_files_arg': build_files_arg,
- 'gyp_binary': sys.argv[0],
- 'home_dot_gyp': home_dot_gyp,
- 'parallel': options.parallel,
- 'root_targets': options.root_targets,
- 'target_arch': cmdline_default_variables.get('target_arch', '')}
-
- # Start with the default variables from the command line.
- [generator, flat_list, targets, data] = Load(
- build_files, format, cmdline_default_variables, includes, options.depth,
- params, options.check, options.circular_check,
- options.duplicate_basename_check)
-
- # TODO(mark): Pass |data| for now because the generator needs a list of
- # build files that came in. In the future, maybe it should just accept
- # a list, and not the whole data dict.
- # NOTE: flat_list is the flattened dependency graph specifying the order
- # that targets may be built. Build systems that operate serially or that
- # need to have dependencies defined before dependents reference them should
- # generate targets in the order specified in flat_list.
- generator.GenerateOutput(flat_list, targets, data, params)
-
- if options.configs:
- valid_configs = targets[flat_list[0]]['configurations'].keys()
- for conf in options.configs:
- if conf not in valid_configs:
- raise GypError('Invalid config specified via --build: %s' % conf)
- generator.PerformBuild(data, options.configs, params)
-
- # Done
- return 0
-
-
-def main(args):
- try:
- return gyp_main(args)
- except GypError, e:
- sys.stderr.write("gyp: %s\n" % e)
- return 1
-
-# NOTE: setuptools generated console_scripts calls function with no arguments
-def script_main():
- return main(sys.argv[1:])
-
-if __name__ == '__main__':
- sys.exit(script_main())
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/__init__.pyc b/node_modules/node-gyp/gyp/pylib/gyp/__init__.pyc
deleted file mode 100644
index 043d2e7..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/__init__.pyc
+++ /dev/null
Binary files differ
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/common.py b/node_modules/node-gyp/gyp/pylib/gyp/common.py
deleted file mode 100644
index 5011187..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/common.py
+++ /dev/null
@@ -1,612 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from __future__ import with_statement
-
-import collections
-import errno
-import filecmp
-import os.path
-import re
-import tempfile
-import sys
-
-
-# A minimal memoizing decorator. It'll blow up if the args aren't immutable,
-# among other "problems".
-class memoize(object):
- def __init__(self, func):
- self.func = func
- self.cache = {}
- def __call__(self, *args):
- try:
- return self.cache[args]
- except KeyError:
- result = self.func(*args)
- self.cache[args] = result
- return result
-
-
-class GypError(Exception):
- """Error class representing an error, which is to be presented
- to the user. The main entry point will catch and display this.
- """
- pass
-
-
-def ExceptionAppend(e, msg):
- """Append a message to the given exception's message."""
- if not e.args:
- e.args = (msg,)
- elif len(e.args) == 1:
- e.args = (str(e.args[0]) + ' ' + msg,)
- else:
- e.args = (str(e.args[0]) + ' ' + msg,) + e.args[1:]
-
-
-def FindQualifiedTargets(target, qualified_list):
- """
- Given a list of qualified targets, return the qualified targets for the
- specified |target|.
- """
- return [t for t in qualified_list if ParseQualifiedTarget(t)[1] == target]
-
-
-def ParseQualifiedTarget(target):
- # Splits a qualified target into a build file, target name and toolset.
-
- # NOTE: rsplit is used to disambiguate the Windows drive letter separator.
- target_split = target.rsplit(':', 1)
- if len(target_split) == 2:
- [build_file, target] = target_split
- else:
- build_file = None
-
- target_split = target.rsplit('#', 1)
- if len(target_split) == 2:
- [target, toolset] = target_split
- else:
- toolset = None
-
- return [build_file, target, toolset]
-
-
-def ResolveTarget(build_file, target, toolset):
- # This function resolves a target into a canonical form:
- # - a fully defined build file, either absolute or relative to the current
- # directory
- # - a target name
- # - a toolset
- #
- # build_file is the file relative to which 'target' is defined.
- # target is the qualified target.
- # toolset is the default toolset for that target.
- [parsed_build_file, target, parsed_toolset] = ParseQualifiedTarget(target)
-
- if parsed_build_file:
- if build_file:
- # If a relative path, parsed_build_file is relative to the directory
- # containing build_file. If build_file is not in the current directory,
- # parsed_build_file is not a usable path as-is. Resolve it by
- # interpreting it as relative to build_file. If parsed_build_file is
- # absolute, it is usable as a path regardless of the current directory,
- # and os.path.join will return it as-is.
- build_file = os.path.normpath(os.path.join(os.path.dirname(build_file),
- parsed_build_file))
- # Further (to handle cases like ../cwd), make it relative to cwd)
- if not os.path.isabs(build_file):
- build_file = RelativePath(build_file, '.')
- else:
- build_file = parsed_build_file
-
- if parsed_toolset:
- toolset = parsed_toolset
-
- return [build_file, target, toolset]
-
-
-def BuildFile(fully_qualified_target):
- # Extracts the build file from the fully qualified target.
- return ParseQualifiedTarget(fully_qualified_target)[0]
-
-
-def GetEnvironFallback(var_list, default):
- """Look up a key in the environment, with fallback to secondary keys
- and finally falling back to a default value."""
- for var in var_list:
- if var in os.environ:
- return os.environ[var]
- return default
-
-
-def QualifiedTarget(build_file, target, toolset):
- # "Qualified" means the file that a target was defined in and the target
- # name, separated by a colon, suffixed by a # and the toolset name:
- # /path/to/file.gyp:target_name#toolset
- fully_qualified = build_file + ':' + target
- if toolset:
- fully_qualified = fully_qualified + '#' + toolset
- return fully_qualified
-
-
-@memoize
-def RelativePath(path, relative_to, follow_path_symlink=True):
- # Assuming both |path| and |relative_to| are relative to the current
- # directory, returns a relative path that identifies path relative to
- # relative_to.
- # If |follow_symlink_path| is true (default) and |path| is a symlink, then
- # this method returns a path to the real file represented by |path|. If it is
- # false, this method returns a path to the symlink. If |path| is not a
- # symlink, this option has no effect.
-
- # Convert to normalized (and therefore absolute paths).
- if follow_path_symlink:
- path = os.path.realpath(path)
- else:
- path = os.path.abspath(path)
- relative_to = os.path.realpath(relative_to)
-
- # On Windows, we can't create a relative path to a different drive, so just
- # use the absolute path.
- if sys.platform == 'win32':
- if (os.path.splitdrive(path)[0].lower() !=
- os.path.splitdrive(relative_to)[0].lower()):
- return path
-
- # Split the paths into components.
- path_split = path.split(os.path.sep)
- relative_to_split = relative_to.split(os.path.sep)
-
- # Determine how much of the prefix the two paths share.
- prefix_len = len(os.path.commonprefix([path_split, relative_to_split]))
-
- # Put enough ".." components to back up out of relative_to to the common
- # prefix, and then append the part of path_split after the common prefix.
- relative_split = [os.path.pardir] * (len(relative_to_split) - prefix_len) + \
- path_split[prefix_len:]
-
- if len(relative_split) == 0:
- # The paths were the same.
- return ''
-
- # Turn it back into a string and we're done.
- return os.path.join(*relative_split)
-
-
-@memoize
-def InvertRelativePath(path, toplevel_dir=None):
- """Given a path like foo/bar that is relative to toplevel_dir, return
- the inverse relative path back to the toplevel_dir.
-
- E.g. os.path.normpath(os.path.join(path, InvertRelativePath(path)))
- should always produce the empty string, unless the path contains symlinks.
- """
- if not path:
- return path
- toplevel_dir = '.' if toplevel_dir is None else toplevel_dir
- return RelativePath(toplevel_dir, os.path.join(toplevel_dir, path))
-
-
-def FixIfRelativePath(path, relative_to):
- # Like RelativePath but returns |path| unchanged if it is absolute.
- if os.path.isabs(path):
- return path
- return RelativePath(path, relative_to)
-
-
-def UnrelativePath(path, relative_to):
- # Assuming that |relative_to| is relative to the current directory, and |path|
- # is a path relative to the dirname of |relative_to|, returns a path that
- # identifies |path| relative to the current directory.
- rel_dir = os.path.dirname(relative_to)
- return os.path.normpath(os.path.join(rel_dir, path))
-
-
-# re objects used by EncodePOSIXShellArgument. See IEEE 1003.1 XCU.2.2 at
-# http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_02
-# and the documentation for various shells.
-
-# _quote is a pattern that should match any argument that needs to be quoted
-# with double-quotes by EncodePOSIXShellArgument. It matches the following
-# characters appearing anywhere in an argument:
-# \t, \n, space parameter separators
-# # comments
-# $ expansions (quoted to always expand within one argument)
-# % called out by IEEE 1003.1 XCU.2.2
-# & job control
-# ' quoting
-# (, ) subshell execution
-# *, ?, [ pathname expansion
-# ; command delimiter
-# <, >, | redirection
-# = assignment
-# {, } brace expansion (bash)
-# ~ tilde expansion
-# It also matches the empty string, because "" (or '') is the only way to
-# represent an empty string literal argument to a POSIX shell.
-#
-# This does not match the characters in _escape, because those need to be
-# backslash-escaped regardless of whether they appear in a double-quoted
-# string.
-_quote = re.compile('[\t\n #$%&\'()*;<=>?[{|}~]|^$')
-
-# _escape is a pattern that should match any character that needs to be
-# escaped with a backslash, whether or not the argument matched the _quote
-# pattern. _escape is used with re.sub to backslash anything in _escape's
-# first match group, hence the (parentheses) in the regular expression.
-#
-# _escape matches the following characters appearing anywhere in an argument:
-# " to prevent POSIX shells from interpreting this character for quoting
-# \ to prevent POSIX shells from interpreting this character for escaping
-# ` to prevent POSIX shells from interpreting this character for command
-# substitution
-# Missing from this list is $, because the desired behavior of
-# EncodePOSIXShellArgument is to permit parameter (variable) expansion.
-#
-# Also missing from this list is !, which bash will interpret as the history
-# expansion character when history is enabled. bash does not enable history
-# by default in non-interactive shells, so this is not thought to be a problem.
-# ! was omitted from this list because bash interprets "\!" as a literal string
-# including the backslash character (avoiding history expansion but retaining
-# the backslash), which would not be correct for argument encoding. Handling
-# this case properly would also be problematic because bash allows the history
-# character to be changed with the histchars shell variable. Fortunately,
-# as history is not enabled in non-interactive shells and
-# EncodePOSIXShellArgument is only expected to encode for non-interactive
-# shells, there is no room for error here by ignoring !.
-_escape = re.compile(r'(["\\`])')
-
-def EncodePOSIXShellArgument(argument):
- """Encodes |argument| suitably for consumption by POSIX shells.
-
- argument may be quoted and escaped as necessary to ensure that POSIX shells
- treat the returned value as a literal representing the argument passed to
- this function. Parameter (variable) expansions beginning with $ are allowed
- to remain intact without escaping the $, to allow the argument to contain
- references to variables to be expanded by the shell.
- """
-
- if not isinstance(argument, str):
- argument = str(argument)
-
- if _quote.search(argument):
- quote = '"'
- else:
- quote = ''
-
- encoded = quote + re.sub(_escape, r'\\\1', argument) + quote
-
- return encoded
-
-
-def EncodePOSIXShellList(list):
- """Encodes |list| suitably for consumption by POSIX shells.
-
- Returns EncodePOSIXShellArgument for each item in list, and joins them
- together using the space character as an argument separator.
- """
-
- encoded_arguments = []
- for argument in list:
- encoded_arguments.append(EncodePOSIXShellArgument(argument))
- return ' '.join(encoded_arguments)
-
-
-def DeepDependencyTargets(target_dicts, roots):
- """Returns the recursive list of target dependencies."""
- dependencies = set()
- pending = set(roots)
- while pending:
- # Pluck out one.
- r = pending.pop()
- # Skip if visited already.
- if r in dependencies:
- continue
- # Add it.
- dependencies.add(r)
- # Add its children.
- spec = target_dicts[r]
- pending.update(set(spec.get('dependencies', [])))
- pending.update(set(spec.get('dependencies_original', [])))
- return list(dependencies - set(roots))
-
-
-def BuildFileTargets(target_list, build_file):
- """From a target_list, returns the subset from the specified build_file.
- """
- return [p for p in target_list if BuildFile(p) == build_file]
-
-
-def AllTargets(target_list, target_dicts, build_file):
- """Returns all targets (direct and dependencies) for the specified build_file.
- """
- bftargets = BuildFileTargets(target_list, build_file)
- deptargets = DeepDependencyTargets(target_dicts, bftargets)
- return bftargets + deptargets
-
-
-def WriteOnDiff(filename):
- """Write to a file only if the new contents differ.
-
- Arguments:
- filename: name of the file to potentially write to.
- Returns:
- A file like object which will write to temporary file and only overwrite
- the target if it differs (on close).
- """
-
- class Writer(object):
- """Wrapper around file which only covers the target if it differs."""
- def __init__(self):
- # Pick temporary file.
- tmp_fd, self.tmp_path = tempfile.mkstemp(
- suffix='.tmp',
- prefix=os.path.split(filename)[1] + '.gyp.',
- dir=os.path.split(filename)[0])
- try:
- self.tmp_file = os.fdopen(tmp_fd, 'wb')
- except Exception:
- # Don't leave turds behind.
- os.unlink(self.tmp_path)
- raise
-
- def __getattr__(self, attrname):
- # Delegate everything else to self.tmp_file
- return getattr(self.tmp_file, attrname)
-
- def close(self):
- try:
- # Close tmp file.
- self.tmp_file.close()
- # Determine if different.
- same = False
- try:
- same = filecmp.cmp(self.tmp_path, filename, False)
- except OSError, e:
- if e.errno != errno.ENOENT:
- raise
-
- if same:
- # The new file is identical to the old one, just get rid of the new
- # one.
- os.unlink(self.tmp_path)
- else:
- # The new file is different from the old one, or there is no old one.
- # Rename the new file to the permanent name.
- #
- # tempfile.mkstemp uses an overly restrictive mode, resulting in a
- # file that can only be read by the owner, regardless of the umask.
- # There's no reason to not respect the umask here, which means that
- # an extra hoop is required to fetch it and reset the new file's mode.
- #
- # No way to get the umask without setting a new one? Set a safe one
- # and then set it back to the old value.
- umask = os.umask(077)
- os.umask(umask)
- os.chmod(self.tmp_path, 0666 & ~umask)
- if sys.platform == 'win32' and os.path.exists(filename):
- # NOTE: on windows (but not cygwin) rename will not replace an
- # existing file, so it must be preceded with a remove. Sadly there
- # is no way to make the switch atomic.
- os.remove(filename)
- os.rename(self.tmp_path, filename)
- except Exception:
- # Don't leave turds behind.
- os.unlink(self.tmp_path)
- raise
-
- return Writer()
-
-
-def EnsureDirExists(path):
- """Make sure the directory for |path| exists."""
- try:
- os.makedirs(os.path.dirname(path))
- except OSError:
- pass
-
-
-def GetFlavor(params):
- """Returns |params.flavor| if it's set, the system's default flavor else."""
- flavors = {
- 'cygwin': 'win',
- 'win32': 'win',
- 'darwin': 'mac',
- }
-
- if 'flavor' in params:
- return params['flavor']
- if sys.platform in flavors:
- return flavors[sys.platform]
- if sys.platform.startswith('sunos'):
- return 'solaris'
- if sys.platform.startswith('freebsd'):
- return 'freebsd'
- if sys.platform.startswith('openbsd'):
- return 'openbsd'
- if sys.platform.startswith('netbsd'):
- return 'netbsd'
- if sys.platform.startswith('aix'):
- return 'aix'
- if sys.platform.startswith('zos'):
- return 'zos'
- if sys.platform.startswith('os390'):
- return 'zos'
-
- return 'linux'
-
-
-def CopyTool(flavor, out_path):
- """Finds (flock|mac|win)_tool.gyp in the gyp directory and copies it
- to |out_path|."""
- # aix and solaris just need flock emulation. mac and win use more complicated
- # support scripts.
- prefix = {
- 'aix': 'flock',
- 'solaris': 'flock',
- 'mac': 'mac',
- 'win': 'win'
- }.get(flavor, None)
- if not prefix:
- return
-
- # Slurp input file.
- source_path = os.path.join(
- os.path.dirname(os.path.abspath(__file__)), '%s_tool.py' % prefix)
- with open(source_path) as source_file:
- source = source_file.readlines()
-
- # Add header and write it out.
- tool_path = os.path.join(out_path, 'gyp-%s-tool' % prefix)
- with open(tool_path, 'w') as tool_file:
- tool_file.write(
- ''.join([source[0], '# Generated by gyp. Do not edit.\n'] + source[1:]))
-
- # Make file executable.
- os.chmod(tool_path, 0755)
-
-
-# From Alex Martelli,
-# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52560
-# ASPN: Python Cookbook: Remove duplicates from a sequence
-# First comment, dated 2001/10/13.
-# (Also in the printed Python Cookbook.)
-
-def uniquer(seq, idfun=None):
- if idfun is None:
- idfun = lambda x: x
- seen = {}
- result = []
- for item in seq:
- marker = idfun(item)
- if marker in seen: continue
- seen[marker] = 1
- result.append(item)
- return result
-
-
-# Based on http://code.activestate.com/recipes/576694/.
-class OrderedSet(collections.MutableSet):
- def __init__(self, iterable=None):
- self.end = end = []
- end += [None, end, end] # sentinel node for doubly linked list
- self.map = {} # key --> [key, prev, next]
- if iterable is not None:
- self |= iterable
-
- def __len__(self):
- return len(self.map)
-
- def __contains__(self, key):
- return key in self.map
-
- def add(self, key):
- if key not in self.map:
- end = self.end
- curr = end[1]
- curr[2] = end[1] = self.map[key] = [key, curr, end]
-
- def discard(self, key):
- if key in self.map:
- key, prev_item, next_item = self.map.pop(key)
- prev_item[2] = next_item
- next_item[1] = prev_item
-
- def __iter__(self):
- end = self.end
- curr = end[2]
- while curr is not end:
- yield curr[0]
- curr = curr[2]
-
- def __reversed__(self):
- end = self.end
- curr = end[1]
- while curr is not end:
- yield curr[0]
- curr = curr[1]
-
- # The second argument is an addition that causes a pylint warning.
- def pop(self, last=True): # pylint: disable=W0221
- if not self:
- raise KeyError('set is empty')
- key = self.end[1][0] if last else self.end[2][0]
- self.discard(key)
- return key
-
- def __repr__(self):
- if not self:
- return '%s()' % (self.__class__.__name__,)
- return '%s(%r)' % (self.__class__.__name__, list(self))
-
- def __eq__(self, other):
- if isinstance(other, OrderedSet):
- return len(self) == len(other) and list(self) == list(other)
- return set(self) == set(other)
-
- # Extensions to the recipe.
- def update(self, iterable):
- for i in iterable:
- if i not in self:
- self.add(i)
-
-
-class CycleError(Exception):
- """An exception raised when an unexpected cycle is detected."""
- def __init__(self, nodes):
- self.nodes = nodes
- def __str__(self):
- return 'CycleError: cycle involving: ' + str(self.nodes)
-
-
-def TopologicallySorted(graph, get_edges):
- r"""Topologically sort based on a user provided edge definition.
-
- Args:
- graph: A list of node names.
- get_edges: A function mapping from node name to a hashable collection
- of node names which this node has outgoing edges to.
- Returns:
- A list containing all of the node in graph in topological order.
- It is assumed that calling get_edges once for each node and caching is
- cheaper than repeatedly calling get_edges.
- Raises:
- CycleError in the event of a cycle.
- Example:
- graph = {'a': '$(b) $(c)', 'b': 'hi', 'c': '$(b)'}
- def GetEdges(node):
- return re.findall(r'\$\(([^))]\)', graph[node])
- print TopologicallySorted(graph.keys(), GetEdges)
- ==>
- ['a', 'c', b']
- """
- get_edges = memoize(get_edges)
- visited = set()
- visiting = set()
- ordered_nodes = []
- def Visit(node):
- if node in visiting:
- raise CycleError(visiting)
- if node in visited:
- return
- visited.add(node)
- visiting.add(node)
- for neighbor in get_edges(node):
- Visit(neighbor)
- visiting.remove(node)
- ordered_nodes.insert(0, node)
- for node in sorted(graph):
- Visit(node)
- return ordered_nodes
-
-def CrossCompileRequested():
- # TODO: figure out how to not build extra host objects in the
- # non-cross-compile case when this is enabled, and enable unconditionally.
- return (os.environ.get('GYP_CROSSCOMPILE') or
- os.environ.get('AR_host') or
- os.environ.get('CC_host') or
- os.environ.get('CXX_host') or
- os.environ.get('AR_target') or
- os.environ.get('CC_target') or
- os.environ.get('CXX_target'))
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/common.pyc b/node_modules/node-gyp/gyp/pylib/gyp/common.pyc
deleted file mode 100644
index 546a0fa..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/common.pyc
+++ /dev/null
Binary files differ
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/common_test.py b/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
deleted file mode 100755
index ad6f9a1..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Unit tests for the common.py file."""
-
-import gyp.common
-import unittest
-import sys
-
-
-class TestTopologicallySorted(unittest.TestCase):
- def test_Valid(self):
- """Test that sorting works on a valid graph with one possible order."""
- graph = {
- 'a': ['b', 'c'],
- 'b': [],
- 'c': ['d'],
- 'd': ['b'],
- }
- def GetEdge(node):
- return tuple(graph[node])
- self.assertEqual(
- gyp.common.TopologicallySorted(graph.keys(), GetEdge),
- ['a', 'c', 'd', 'b'])
-
- def test_Cycle(self):
- """Test that an exception is thrown on a cyclic graph."""
- graph = {
- 'a': ['b'],
- 'b': ['c'],
- 'c': ['d'],
- 'd': ['a'],
- }
- def GetEdge(node):
- return tuple(graph[node])
- self.assertRaises(
- gyp.common.CycleError, gyp.common.TopologicallySorted,
- graph.keys(), GetEdge)
-
-
-class TestGetFlavor(unittest.TestCase):
- """Test that gyp.common.GetFlavor works as intended"""
- original_platform = ''
-
- def setUp(self):
- self.original_platform = sys.platform
-
- def tearDown(self):
- sys.platform = self.original_platform
-
- def assertFlavor(self, expected, argument, param):
- sys.platform = argument
- self.assertEqual(expected, gyp.common.GetFlavor(param))
-
- def test_platform_default(self):
- self.assertFlavor('freebsd', 'freebsd9' , {})
- self.assertFlavor('freebsd', 'freebsd10', {})
- self.assertFlavor('openbsd', 'openbsd5' , {})
- self.assertFlavor('solaris', 'sunos5' , {});
- self.assertFlavor('solaris', 'sunos' , {});
- self.assertFlavor('linux' , 'linux2' , {});
- self.assertFlavor('linux' , 'linux3' , {});
-
- def test_param(self):
- self.assertFlavor('foobar', 'linux2' , {'flavor': 'foobar'})
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py b/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
deleted file mode 100644
index 841f31f..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
+++ /dev/null
@@ -1,162 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import re
-import os
-import locale
-
-
-def XmlToString(content, encoding='utf-8', pretty=False):
- """ Writes the XML content to disk, touching the file only if it has changed.
-
- Visual Studio files have a lot of pre-defined structures. This function makes
- it easy to represent these structures as Python data structures, instead of
- having to create a lot of function calls.
-
- Each XML element of the content is represented as a list composed of:
- 1. The name of the element, a string,
- 2. The attributes of the element, a dictionary (optional), and
- 3+. The content of the element, if any. Strings are simple text nodes and
- lists are child elements.
-
- Example 1:
- <test/>
- becomes
- ['test']
-
- Example 2:
- <myelement a='value1' b='value2'>
- <childtype>This is</childtype>
- <childtype>it!</childtype>
- </myelement>
-
- becomes
- ['myelement', {'a':'value1', 'b':'value2'},
- ['childtype', 'This is'],
- ['childtype', 'it!'],
- ]
-
- Args:
- content: The structured content to be converted.
- encoding: The encoding to report on the first XML line.
- pretty: True if we want pretty printing with indents and new lines.
-
- Returns:
- The XML content as a string.
- """
- # We create a huge list of all the elements of the file.
- xml_parts = ['<?xml version="1.0" encoding="%s"?>' % encoding]
- if pretty:
- xml_parts.append('\n')
- _ConstructContentList(xml_parts, content, pretty)
-
- # Convert it to a string
- return ''.join(xml_parts)
-
-
-def _ConstructContentList(xml_parts, specification, pretty, level=0):
- """ Appends the XML parts corresponding to the specification.
-
- Args:
- xml_parts: A list of XML parts to be appended to.
- specification: The specification of the element. See EasyXml docs.
- pretty: True if we want pretty printing with indents and new lines.
- level: Indentation level.
- """
- # The first item in a specification is the name of the element.
- if pretty:
- indentation = ' ' * level
- new_line = '\n'
- else:
- indentation = ''
- new_line = ''
- name = specification[0]
- if not isinstance(name, str):
- raise Exception('The first item of an EasyXml specification should be '
- 'a string. Specification was ' + str(specification))
- xml_parts.append(indentation + '<' + name)
-
- # Optionally in second position is a dictionary of the attributes.
- rest = specification[1:]
- if rest and isinstance(rest[0], dict):
- for at, val in sorted(rest[0].iteritems()):
- xml_parts.append(' %s="%s"' % (at, _XmlEscape(val, attr=True)))
- rest = rest[1:]
- if rest:
- xml_parts.append('>')
- all_strings = reduce(lambda x, y: x and isinstance(y, str), rest, True)
- multi_line = not all_strings
- if multi_line and new_line:
- xml_parts.append(new_line)
- for child_spec in rest:
- # If it's a string, append a text node.
- # Otherwise recurse over that child definition
- if isinstance(child_spec, str):
- xml_parts.append(_XmlEscape(child_spec))
- else:
- _ConstructContentList(xml_parts, child_spec, pretty, level + 1)
- if multi_line and indentation:
- xml_parts.append(indentation)
- xml_parts.append('</%s>%s' % (name, new_line))
- else:
- xml_parts.append('/>%s' % new_line)
-
-
-def WriteXmlIfChanged(content, path, encoding='utf-8', pretty=False,
- win32=False):
- """ Writes the XML content to disk, touching the file only if it has changed.
-
- Args:
- content: The structured content to be written.
- path: Location of the file.
- encoding: The encoding to report on the first line of the XML file.
- pretty: True if we want pretty printing with indents and new lines.
- """
- xml_string = XmlToString(content, encoding, pretty)
- if win32 and os.linesep != '\r\n':
- xml_string = xml_string.replace('\n', '\r\n')
-
- default_encoding = locale.getdefaultlocale()[1]
- if default_encoding.upper() != encoding.upper():
- xml_string = xml_string.decode(default_encoding).encode(encoding)
-
- # Get the old content
- try:
- f = open(path, 'r')
- existing = f.read()
- f.close()
- except:
- existing = None
-
- # It has changed, write it
- if existing != xml_string:
- f = open(path, 'w')
- f.write(xml_string)
- f.close()
-
-
-_xml_escape_map = {
- '"': '&quot;',
- "'": '&apos;',
- '<': '&lt;',
- '>': '&gt;',
- '&': '&amp;',
- '\n': '&#xA;',
- '\r': '&#xD;',
-}
-
-
-_xml_escape_re = re.compile(
- "(%s)" % "|".join(map(re.escape, _xml_escape_map.keys())))
-
-
-def _XmlEscape(value, attr=False):
- """ Escape a string for inclusion in XML."""
- def replace(match):
- m = match.string[match.start() : match.end()]
- # don't replace single quotes in attrs
- if attr and m == "'":
- return m
- return _xml_escape_map[m]
- return _xml_escape_re.sub(replace, value)
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py b/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
deleted file mode 100755
index df64354..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-""" Unit tests for the easy_xml.py file. """
-
-import gyp.easy_xml as easy_xml
-import unittest
-import StringIO
-
-
-class TestSequenceFunctions(unittest.TestCase):
-
- def setUp(self):
- self.stderr = StringIO.StringIO()
-
- def test_EasyXml_simple(self):
- self.assertEqual(
- easy_xml.XmlToString(['test']),
- '<?xml version="1.0" encoding="utf-8"?><test/>')
-
- self.assertEqual(
- easy_xml.XmlToString(['test'], encoding='Windows-1252'),
- '<?xml version="1.0" encoding="Windows-1252"?><test/>')
-
- def test_EasyXml_simple_with_attributes(self):
- self.assertEqual(
- easy_xml.XmlToString(['test2', {'a': 'value1', 'b': 'value2'}]),
- '<?xml version="1.0" encoding="utf-8"?><test2 a="value1" b="value2"/>')
-
- def test_EasyXml_escaping(self):
- original = '<test>\'"\r&\nfoo'
- converted = '&lt;test&gt;\'&quot;&#xD;&amp;&#xA;foo'
- converted_apos = converted.replace("'", '&apos;')
- self.assertEqual(
- easy_xml.XmlToString(['test3', {'a': original}, original]),
- '<?xml version="1.0" encoding="utf-8"?><test3 a="%s">%s</test3>' %
- (converted, converted_apos))
-
- def test_EasyXml_pretty(self):
- self.assertEqual(
- easy_xml.XmlToString(
- ['test3',
- ['GrandParent',
- ['Parent1',
- ['Child']
- ],
- ['Parent2']
- ]
- ],
- pretty=True),
- '<?xml version="1.0" encoding="utf-8"?>\n'
- '<test3>\n'
- ' <GrandParent>\n'
- ' <Parent1>\n'
- ' <Child/>\n'
- ' </Parent1>\n'
- ' <Parent2/>\n'
- ' </GrandParent>\n'
- '</test3>\n')
-
-
- def test_EasyXml_complex(self):
- # We want to create:
- target = (
- '<?xml version="1.0" encoding="utf-8"?>'
- '<Project>'
- '<PropertyGroup Label="Globals">'
- '<ProjectGuid>{D2250C20-3A94-4FB9-AF73-11BC5B73884B}</ProjectGuid>'
- '<Keyword>Win32Proj</Keyword>'
- '<RootNamespace>automated_ui_tests</RootNamespace>'
- '</PropertyGroup>'
- '<Import Project="$(VCTargetsPath)\\Microsoft.Cpp.props"/>'
- '<PropertyGroup '
- 'Condition="\'$(Configuration)|$(Platform)\'=='
- '\'Debug|Win32\'" Label="Configuration">'
- '<ConfigurationType>Application</ConfigurationType>'
- '<CharacterSet>Unicode</CharacterSet>'
- '</PropertyGroup>'
- '</Project>')
-
- xml = easy_xml.XmlToString(
- ['Project',
- ['PropertyGroup', {'Label': 'Globals'},
- ['ProjectGuid', '{D2250C20-3A94-4FB9-AF73-11BC5B73884B}'],
- ['Keyword', 'Win32Proj'],
- ['RootNamespace', 'automated_ui_tests']
- ],
- ['Import', {'Project': '$(VCTargetsPath)\\Microsoft.Cpp.props'}],
- ['PropertyGroup',
- {'Condition': "'$(Configuration)|$(Platform)'=='Debug|Win32'",
- 'Label': 'Configuration'},
- ['ConfigurationType', 'Application'],
- ['CharacterSet', 'Unicode']
- ]
- ])
- self.assertEqual(xml, target)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py b/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py
deleted file mode 100755
index b38d866..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""These functions are executed via gyp-flock-tool when using the Makefile
-generator. Used on systems that don't have a built-in flock."""
-
-import fcntl
-import os
-import struct
-import subprocess
-import sys
-
-
-def main(args):
- executor = FlockTool()
- executor.Dispatch(args)
-
-
-class FlockTool(object):
- """This class emulates the 'flock' command."""
- def Dispatch(self, args):
- """Dispatches a string command to a method."""
- if len(args) < 1:
- raise Exception("Not enough arguments")
-
- method = "Exec%s" % self._CommandifyName(args[0])
- getattr(self, method)(*args[1:])
-
- def _CommandifyName(self, name_string):
- """Transforms a tool name like copy-info-plist to CopyInfoPlist"""
- return name_string.title().replace('-', '')
-
- def ExecFlock(self, lockfile, *cmd_list):
- """Emulates the most basic behavior of Linux's flock(1)."""
- # Rely on exception handling to report errors.
- # Note that the stock python on SunOS has a bug
- # where fcntl.flock(fd, LOCK_EX) always fails
- # with EBADF, that's why we use this F_SETLK
- # hack instead.
- fd = os.open(lockfile, os.O_WRONLY|os.O_NOCTTY|os.O_CREAT, 0666)
- if sys.platform.startswith('aix'):
- # Python on AIX is compiled with LARGEFILE support, which changes the
- # struct size.
- op = struct.pack('hhIllqq', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
- else:
- op = struct.pack('hhllhhl', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
- fcntl.fcntl(fd, fcntl.F_SETLK, op)
- return subprocess.call(cmd_list)
-
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv[1:]))
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py
+++ /dev/null
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.pyc b/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.pyc
deleted file mode 100644
index 5ecc83c..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.pyc
+++ /dev/null
Binary files differ
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
deleted file mode 100644
index 921c1a6..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
+++ /dev/null
@@ -1,741 +0,0 @@
-# Copyright (c) 2014 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-This script is intended for use as a GYP_GENERATOR. It takes as input (by way of
-the generator flag config_path) the path of a json file that dictates the files
-and targets to search for. The following keys are supported:
-files: list of paths (relative) of the files to search for.
-test_targets: unqualified target names to search for. Any target in this list
-that depends upon a file in |files| is output regardless of the type of target
-or chain of dependencies.
-additional_compile_targets: Unqualified targets to search for in addition to
-test_targets. Targets in the combined list that depend upon a file in |files|
-are not necessarily output. For example, if the target is of type none then the
-target is not output (but one of the descendants of the target will be).
-
-The following is output:
-error: only supplied if there is an error.
-compile_targets: minimal set of targets that directly or indirectly (for
- targets of type none) depend on the files in |files| and is one of the
- supplied targets or a target that one of the supplied targets depends on.
- The expectation is this set of targets is passed into a build step. This list
- always contains the output of test_targets as well.
-test_targets: set of targets from the supplied |test_targets| that either
- directly or indirectly depend upon a file in |files|. This list if useful
- if additional processing needs to be done for certain targets after the
- build, such as running tests.
-status: outputs one of three values: none of the supplied files were found,
- one of the include files changed so that it should be assumed everything
- changed (in this case test_targets and compile_targets are not output) or at
- least one file was found.
-invalid_targets: list of supplied targets that were not found.
-
-Example:
-Consider a graph like the following:
- A D
- / \
-B C
-A depends upon both B and C, A is of type none and B and C are executables.
-D is an executable, has no dependencies and nothing depends on it.
-If |additional_compile_targets| = ["A"], |test_targets| = ["B", "C"] and
-files = ["b.cc", "d.cc"] (B depends upon b.cc and D depends upon d.cc), then
-the following is output:
-|compile_targets| = ["B"] B must built as it depends upon the changed file b.cc
-and the supplied target A depends upon it. A is not output as a build_target
-as it is of type none with no rules and actions.
-|test_targets| = ["B"] B directly depends upon the change file b.cc.
-
-Even though the file d.cc, which D depends upon, has changed D is not output
-as it was not supplied by way of |additional_compile_targets| or |test_targets|.
-
-If the generator flag analyzer_output_path is specified, output is written
-there. Otherwise output is written to stdout.
-
-In Gyp the "all" target is shorthand for the root targets in the files passed
-to gyp. For example, if file "a.gyp" contains targets "a1" and
-"a2", and file "b.gyp" contains targets "b1" and "b2" and "a2" has a dependency
-on "b2" and gyp is supplied "a.gyp" then "all" consists of "a1" and "a2".
-Notice that "b1" and "b2" are not in the "all" target as "b.gyp" was not
-directly supplied to gyp. OTOH if both "a.gyp" and "b.gyp" are supplied to gyp
-then the "all" target includes "b1" and "b2".
-"""
-
-import gyp.common
-import gyp.ninja_syntax as ninja_syntax
-import json
-import os
-import posixpath
-import sys
-
-debug = False
-
-found_dependency_string = 'Found dependency'
-no_dependency_string = 'No dependencies'
-# Status when it should be assumed that everything has changed.
-all_changed_string = 'Found dependency (all)'
-
-# MatchStatus is used indicate if and how a target depends upon the supplied
-# sources.
-# The target's sources contain one of the supplied paths.
-MATCH_STATUS_MATCHES = 1
-# The target has a dependency on another target that contains one of the
-# supplied paths.
-MATCH_STATUS_MATCHES_BY_DEPENDENCY = 2
-# The target's sources weren't in the supplied paths and none of the target's
-# dependencies depend upon a target that matched.
-MATCH_STATUS_DOESNT_MATCH = 3
-# The target doesn't contain the source, but the dependent targets have not yet
-# been visited to determine a more specific status yet.
-MATCH_STATUS_TBD = 4
-
-generator_supports_multiple_toolsets = gyp.common.CrossCompileRequested()
-
-generator_wants_static_library_dependencies_adjusted = False
-
-generator_default_variables = {
-}
-for dirname in ['INTERMEDIATE_DIR', 'SHARED_INTERMEDIATE_DIR', 'PRODUCT_DIR',
- 'LIB_DIR', 'SHARED_LIB_DIR']:
- generator_default_variables[dirname] = '!!!'
-
-for unused in ['RULE_INPUT_PATH', 'RULE_INPUT_ROOT', 'RULE_INPUT_NAME',
- 'RULE_INPUT_DIRNAME', 'RULE_INPUT_EXT',
- 'EXECUTABLE_PREFIX', 'EXECUTABLE_SUFFIX',
- 'STATIC_LIB_PREFIX', 'STATIC_LIB_SUFFIX',
- 'SHARED_LIB_PREFIX', 'SHARED_LIB_SUFFIX',
- 'CONFIGURATION_NAME']:
- generator_default_variables[unused] = ''
-
-
-def _ToGypPath(path):
- """Converts a path to the format used by gyp."""
- if os.sep == '\\' and os.altsep == '/':
- return path.replace('\\', '/')
- return path
-
-
-def _ResolveParent(path, base_path_components):
- """Resolves |path|, which starts with at least one '../'. Returns an empty
- string if the path shouldn't be considered. See _AddSources() for a
- description of |base_path_components|."""
- depth = 0
- while path.startswith('../'):
- depth += 1
- path = path[3:]
- # Relative includes may go outside the source tree. For example, an action may
- # have inputs in /usr/include, which are not in the source tree.
- if depth > len(base_path_components):
- return ''
- if depth == len(base_path_components):
- return path
- return '/'.join(base_path_components[0:len(base_path_components) - depth]) + \
- '/' + path
-
-
-def _AddSources(sources, base_path, base_path_components, result):
- """Extracts valid sources from |sources| and adds them to |result|. Each
- source file is relative to |base_path|, but may contain '..'. To make
- resolving '..' easier |base_path_components| contains each of the
- directories in |base_path|. Additionally each source may contain variables.
- Such sources are ignored as it is assumed dependencies on them are expressed
- and tracked in some other means."""
- # NOTE: gyp paths are always posix style.
- for source in sources:
- if not len(source) or source.startswith('!!!') or source.startswith('$'):
- continue
- # variable expansion may lead to //.
- org_source = source
- source = source[0] + source[1:].replace('//', '/')
- if source.startswith('../'):
- source = _ResolveParent(source, base_path_components)
- if len(source):
- result.append(source)
- continue
- result.append(base_path + source)
- if debug:
- print 'AddSource', org_source, result[len(result) - 1]
-
-
-def _ExtractSourcesFromAction(action, base_path, base_path_components,
- results):
- if 'inputs' in action:
- _AddSources(action['inputs'], base_path, base_path_components, results)
-
-
-def _ToLocalPath(toplevel_dir, path):
- """Converts |path| to a path relative to |toplevel_dir|."""
- if path == toplevel_dir:
- return ''
- if path.startswith(toplevel_dir + '/'):
- return path[len(toplevel_dir) + len('/'):]
- return path
-
-
-def _ExtractSources(target, target_dict, toplevel_dir):
- # |target| is either absolute or relative and in the format of the OS. Gyp
- # source paths are always posix. Convert |target| to a posix path relative to
- # |toplevel_dir_|. This is done to make it easy to build source paths.
- base_path = posixpath.dirname(_ToLocalPath(toplevel_dir, _ToGypPath(target)))
- base_path_components = base_path.split('/')
-
- # Add a trailing '/' so that _AddSources() can easily build paths.
- if len(base_path):
- base_path += '/'
-
- if debug:
- print 'ExtractSources', target, base_path
-
- results = []
- if 'sources' in target_dict:
- _AddSources(target_dict['sources'], base_path, base_path_components,
- results)
- # Include the inputs from any actions. Any changes to these affect the
- # resulting output.
- if 'actions' in target_dict:
- for action in target_dict['actions']:
- _ExtractSourcesFromAction(action, base_path, base_path_components,
- results)
- if 'rules' in target_dict:
- for rule in target_dict['rules']:
- _ExtractSourcesFromAction(rule, base_path, base_path_components, results)
-
- return results
-
-
-class Target(object):
- """Holds information about a particular target:
- deps: set of Targets this Target depends upon. This is not recursive, only the
- direct dependent Targets.
- match_status: one of the MatchStatus values.
- back_deps: set of Targets that have a dependency on this Target.
- visited: used during iteration to indicate whether we've visited this target.
- This is used for two iterations, once in building the set of Targets and
- again in _GetBuildTargets().
- name: fully qualified name of the target.
- requires_build: True if the target type is such that it needs to be built.
- See _DoesTargetTypeRequireBuild for details.
- added_to_compile_targets: used when determining if the target was added to the
- set of targets that needs to be built.
- in_roots: true if this target is a descendant of one of the root nodes.
- is_executable: true if the type of target is executable.
- is_static_library: true if the type of target is static_library.
- is_or_has_linked_ancestor: true if the target does a link (eg executable), or
- if there is a target in back_deps that does a link."""
- def __init__(self, name):
- self.deps = set()
- self.match_status = MATCH_STATUS_TBD
- self.back_deps = set()
- self.name = name
- # TODO(sky): I don't like hanging this off Target. This state is specific
- # to certain functions and should be isolated there.
- self.visited = False
- self.requires_build = False
- self.added_to_compile_targets = False
- self.in_roots = False
- self.is_executable = False
- self.is_static_library = False
- self.is_or_has_linked_ancestor = False
-
-
-class Config(object):
- """Details what we're looking for
- files: set of files to search for
- targets: see file description for details."""
- def __init__(self):
- self.files = []
- self.targets = set()
- self.additional_compile_target_names = set()
- self.test_target_names = set()
-
- def Init(self, params):
- """Initializes Config. This is a separate method as it raises an exception
- if there is a parse error."""
- generator_flags = params.get('generator_flags', {})
- config_path = generator_flags.get('config_path', None)
- if not config_path:
- return
- try:
- f = open(config_path, 'r')
- config = json.load(f)
- f.close()
- except IOError:
- raise Exception('Unable to open file ' + config_path)
- except ValueError as e:
- raise Exception('Unable to parse config file ' + config_path + str(e))
- if not isinstance(config, dict):
- raise Exception('config_path must be a JSON file containing a dictionary')
- self.files = config.get('files', [])
- self.additional_compile_target_names = set(
- config.get('additional_compile_targets', []))
- self.test_target_names = set(config.get('test_targets', []))
-
-
-def _WasBuildFileModified(build_file, data, files, toplevel_dir):
- """Returns true if the build file |build_file| is either in |files| or
- one of the files included by |build_file| is in |files|. |toplevel_dir| is
- the root of the source tree."""
- if _ToLocalPath(toplevel_dir, _ToGypPath(build_file)) in files:
- if debug:
- print 'gyp file modified', build_file
- return True
-
- # First element of included_files is the file itself.
- if len(data[build_file]['included_files']) <= 1:
- return False
-
- for include_file in data[build_file]['included_files'][1:]:
- # |included_files| are relative to the directory of the |build_file|.
- rel_include_file = \
- _ToGypPath(gyp.common.UnrelativePath(include_file, build_file))
- if _ToLocalPath(toplevel_dir, rel_include_file) in files:
- if debug:
- print 'included gyp file modified, gyp_file=', build_file, \
- 'included file=', rel_include_file
- return True
- return False
-
-
-def _GetOrCreateTargetByName(targets, target_name):
- """Creates or returns the Target at targets[target_name]. If there is no
- Target for |target_name| one is created. Returns a tuple of whether a new
- Target was created and the Target."""
- if target_name in targets:
- return False, targets[target_name]
- target = Target(target_name)
- targets[target_name] = target
- return True, target
-
-
-def _DoesTargetTypeRequireBuild(target_dict):
- """Returns true if the target type is such that it needs to be built."""
- # If a 'none' target has rules or actions we assume it requires a build.
- return bool(target_dict['type'] != 'none' or
- target_dict.get('actions') or target_dict.get('rules'))
-
-
-def _GenerateTargets(data, target_list, target_dicts, toplevel_dir, files,
- build_files):
- """Returns a tuple of the following:
- . A dictionary mapping from fully qualified name to Target.
- . A list of the targets that have a source file in |files|.
- . Targets that constitute the 'all' target. See description at top of file
- for details on the 'all' target.
- This sets the |match_status| of the targets that contain any of the source
- files in |files| to MATCH_STATUS_MATCHES.
- |toplevel_dir| is the root of the source tree."""
- # Maps from target name to Target.
- name_to_target = {}
-
- # Targets that matched.
- matching_targets = []
-
- # Queue of targets to visit.
- targets_to_visit = target_list[:]
-
- # Maps from build file to a boolean indicating whether the build file is in
- # |files|.
- build_file_in_files = {}
-
- # Root targets across all files.
- roots = set()
-
- # Set of Targets in |build_files|.
- build_file_targets = set()
-
- while len(targets_to_visit) > 0:
- target_name = targets_to_visit.pop()
- created_target, target = _GetOrCreateTargetByName(name_to_target,
- target_name)
- if created_target:
- roots.add(target)
- elif target.visited:
- continue
-
- target.visited = True
- target.requires_build = _DoesTargetTypeRequireBuild(
- target_dicts[target_name])
- target_type = target_dicts[target_name]['type']
- target.is_executable = target_type == 'executable'
- target.is_static_library = target_type == 'static_library'
- target.is_or_has_linked_ancestor = (target_type == 'executable' or
- target_type == 'shared_library')
-
- build_file = gyp.common.ParseQualifiedTarget(target_name)[0]
- if not build_file in build_file_in_files:
- build_file_in_files[build_file] = \
- _WasBuildFileModified(build_file, data, files, toplevel_dir)
-
- if build_file in build_files:
- build_file_targets.add(target)
-
- # If a build file (or any of its included files) is modified we assume all
- # targets in the file are modified.
- if build_file_in_files[build_file]:
- print 'matching target from modified build file', target_name
- target.match_status = MATCH_STATUS_MATCHES
- matching_targets.append(target)
- else:
- sources = _ExtractSources(target_name, target_dicts[target_name],
- toplevel_dir)
- for source in sources:
- if _ToGypPath(os.path.normpath(source)) in files:
- print 'target', target_name, 'matches', source
- target.match_status = MATCH_STATUS_MATCHES
- matching_targets.append(target)
- break
-
- # Add dependencies to visit as well as updating back pointers for deps.
- for dep in target_dicts[target_name].get('dependencies', []):
- targets_to_visit.append(dep)
-
- created_dep_target, dep_target = _GetOrCreateTargetByName(name_to_target,
- dep)
- if not created_dep_target:
- roots.discard(dep_target)
-
- target.deps.add(dep_target)
- dep_target.back_deps.add(target)
-
- return name_to_target, matching_targets, roots & build_file_targets
-
-
-def _GetUnqualifiedToTargetMapping(all_targets, to_find):
- """Returns a tuple of the following:
- . mapping (dictionary) from unqualified name to Target for all the
- Targets in |to_find|.
- . any target names not found. If this is empty all targets were found."""
- result = {}
- if not to_find:
- return {}, []
- to_find = set(to_find)
- for target_name in all_targets.keys():
- extracted = gyp.common.ParseQualifiedTarget(target_name)
- if len(extracted) > 1 and extracted[1] in to_find:
- to_find.remove(extracted[1])
- result[extracted[1]] = all_targets[target_name]
- if not to_find:
- return result, []
- return result, [x for x in to_find]
-
-
-def _DoesTargetDependOnMatchingTargets(target):
- """Returns true if |target| or any of its dependencies is one of the
- targets containing the files supplied as input to analyzer. This updates
- |matches| of the Targets as it recurses.
- target: the Target to look for."""
- if target.match_status == MATCH_STATUS_DOESNT_MATCH:
- return False
- if target.match_status == MATCH_STATUS_MATCHES or \
- target.match_status == MATCH_STATUS_MATCHES_BY_DEPENDENCY:
- return True
- for dep in target.deps:
- if _DoesTargetDependOnMatchingTargets(dep):
- target.match_status = MATCH_STATUS_MATCHES_BY_DEPENDENCY
- print '\t', target.name, 'matches by dep', dep.name
- return True
- target.match_status = MATCH_STATUS_DOESNT_MATCH
- return False
-
-
-def _GetTargetsDependingOnMatchingTargets(possible_targets):
- """Returns the list of Targets in |possible_targets| that depend (either
- directly on indirectly) on at least one of the targets containing the files
- supplied as input to analyzer.
- possible_targets: targets to search from."""
- found = []
- print 'Targets that matched by dependency:'
- for target in possible_targets:
- if _DoesTargetDependOnMatchingTargets(target):
- found.append(target)
- return found
-
-
-def _AddCompileTargets(target, roots, add_if_no_ancestor, result):
- """Recurses through all targets that depend on |target|, adding all targets
- that need to be built (and are in |roots|) to |result|.
- roots: set of root targets.
- add_if_no_ancestor: If true and there are no ancestors of |target| then add
- |target| to |result|. |target| must still be in |roots|.
- result: targets that need to be built are added here."""
- if target.visited:
- return
-
- target.visited = True
- target.in_roots = target in roots
-
- for back_dep_target in target.back_deps:
- _AddCompileTargets(back_dep_target, roots, False, result)
- target.added_to_compile_targets |= back_dep_target.added_to_compile_targets
- target.in_roots |= back_dep_target.in_roots
- target.is_or_has_linked_ancestor |= (
- back_dep_target.is_or_has_linked_ancestor)
-
- # Always add 'executable' targets. Even though they may be built by other
- # targets that depend upon them it makes detection of what is going to be
- # built easier.
- # And always add static_libraries that have no dependencies on them from
- # linkables. This is necessary as the other dependencies on them may be
- # static libraries themselves, which are not compile time dependencies.
- if target.in_roots and \
- (target.is_executable or
- (not target.added_to_compile_targets and
- (add_if_no_ancestor or target.requires_build)) or
- (target.is_static_library and add_if_no_ancestor and
- not target.is_or_has_linked_ancestor)):
- print '\t\tadding to compile targets', target.name, 'executable', \
- target.is_executable, 'added_to_compile_targets', \
- target.added_to_compile_targets, 'add_if_no_ancestor', \
- add_if_no_ancestor, 'requires_build', target.requires_build, \
- 'is_static_library', target.is_static_library, \
- 'is_or_has_linked_ancestor', target.is_or_has_linked_ancestor
- result.add(target)
- target.added_to_compile_targets = True
-
-
-def _GetCompileTargets(matching_targets, supplied_targets):
- """Returns the set of Targets that require a build.
- matching_targets: targets that changed and need to be built.
- supplied_targets: set of targets supplied to analyzer to search from."""
- result = set()
- for target in matching_targets:
- print 'finding compile targets for match', target.name
- _AddCompileTargets(target, supplied_targets, True, result)
- return result
-
-
-def _WriteOutput(params, **values):
- """Writes the output, either to stdout or a file is specified."""
- if 'error' in values:
- print 'Error:', values['error']
- if 'status' in values:
- print values['status']
- if 'targets' in values:
- values['targets'].sort()
- print 'Supplied targets that depend on changed files:'
- for target in values['targets']:
- print '\t', target
- if 'invalid_targets' in values:
- values['invalid_targets'].sort()
- print 'The following targets were not found:'
- for target in values['invalid_targets']:
- print '\t', target
- if 'build_targets' in values:
- values['build_targets'].sort()
- print 'Targets that require a build:'
- for target in values['build_targets']:
- print '\t', target
- if 'compile_targets' in values:
- values['compile_targets'].sort()
- print 'Targets that need to be built:'
- for target in values['compile_targets']:
- print '\t', target
- if 'test_targets' in values:
- values['test_targets'].sort()
- print 'Test targets:'
- for target in values['test_targets']:
- print '\t', target
-
- output_path = params.get('generator_flags', {}).get(
- 'analyzer_output_path', None)
- if not output_path:
- print json.dumps(values)
- return
- try:
- f = open(output_path, 'w')
- f.write(json.dumps(values) + '\n')
- f.close()
- except IOError as e:
- print 'Error writing to output file', output_path, str(e)
-
-
-def _WasGypIncludeFileModified(params, files):
- """Returns true if one of the files in |files| is in the set of included
- files."""
- if params['options'].includes:
- for include in params['options'].includes:
- if _ToGypPath(os.path.normpath(include)) in files:
- print 'Include file modified, assuming all changed', include
- return True
- return False
-
-
-def _NamesNotIn(names, mapping):
- """Returns a list of the values in |names| that are not in |mapping|."""
- return [name for name in names if name not in mapping]
-
-
-def _LookupTargets(names, mapping):
- """Returns a list of the mapping[name] for each value in |names| that is in
- |mapping|."""
- return [mapping[name] for name in names if name in mapping]
-
-
-def CalculateVariables(default_variables, params):
- """Calculate additional variables for use in the build (called by gyp)."""
- flavor = gyp.common.GetFlavor(params)
- if flavor == 'mac':
- default_variables.setdefault('OS', 'mac')
- elif flavor == 'win':
- default_variables.setdefault('OS', 'win')
- # Copy additional generator configuration data from VS, which is shared
- # by the Windows Ninja generator.
- import gyp.generator.msvs as msvs_generator
- generator_additional_non_configuration_keys = getattr(msvs_generator,
- 'generator_additional_non_configuration_keys', [])
- generator_additional_path_sections = getattr(msvs_generator,
- 'generator_additional_path_sections', [])
-
- gyp.msvs_emulation.CalculateCommonVariables(default_variables, params)
- else:
- operating_system = flavor
- if flavor == 'android':
- operating_system = 'linux' # Keep this legacy behavior for now.
- default_variables.setdefault('OS', operating_system)
-
-
-class TargetCalculator(object):
- """Calculates the matching test_targets and matching compile_targets."""
- def __init__(self, files, additional_compile_target_names, test_target_names,
- data, target_list, target_dicts, toplevel_dir, build_files):
- self._additional_compile_target_names = set(additional_compile_target_names)
- self._test_target_names = set(test_target_names)
- self._name_to_target, self._changed_targets, self._root_targets = (
- _GenerateTargets(data, target_list, target_dicts, toplevel_dir,
- frozenset(files), build_files))
- self._unqualified_mapping, self.invalid_targets = (
- _GetUnqualifiedToTargetMapping(self._name_to_target,
- self._supplied_target_names_no_all()))
-
- def _supplied_target_names(self):
- return self._additional_compile_target_names | self._test_target_names
-
- def _supplied_target_names_no_all(self):
- """Returns the supplied test targets without 'all'."""
- result = self._supplied_target_names();
- result.discard('all')
- return result
-
- def is_build_impacted(self):
- """Returns true if the supplied files impact the build at all."""
- return self._changed_targets
-
- def find_matching_test_target_names(self):
- """Returns the set of output test targets."""
- assert self.is_build_impacted()
- # Find the test targets first. 'all' is special cased to mean all the
- # root targets. To deal with all the supplied |test_targets| are expanded
- # to include the root targets during lookup. If any of the root targets
- # match, we remove it and replace it with 'all'.
- test_target_names_no_all = set(self._test_target_names)
- test_target_names_no_all.discard('all')
- test_targets_no_all = _LookupTargets(test_target_names_no_all,
- self._unqualified_mapping)
- test_target_names_contains_all = 'all' in self._test_target_names
- if test_target_names_contains_all:
- test_targets = [x for x in (set(test_targets_no_all) |
- set(self._root_targets))]
- else:
- test_targets = [x for x in test_targets_no_all]
- print 'supplied test_targets'
- for target_name in self._test_target_names:
- print '\t', target_name
- print 'found test_targets'
- for target in test_targets:
- print '\t', target.name
- print 'searching for matching test targets'
- matching_test_targets = _GetTargetsDependingOnMatchingTargets(test_targets)
- matching_test_targets_contains_all = (test_target_names_contains_all and
- set(matching_test_targets) &
- set(self._root_targets))
- if matching_test_targets_contains_all:
- # Remove any of the targets for all that were not explicitly supplied,
- # 'all' is subsequentely added to the matching names below.
- matching_test_targets = [x for x in (set(matching_test_targets) &
- set(test_targets_no_all))]
- print 'matched test_targets'
- for target in matching_test_targets:
- print '\t', target.name
- matching_target_names = [gyp.common.ParseQualifiedTarget(target.name)[1]
- for target in matching_test_targets]
- if matching_test_targets_contains_all:
- matching_target_names.append('all')
- print '\tall'
- return matching_target_names
-
- def find_matching_compile_target_names(self):
- """Returns the set of output compile targets."""
- assert self.is_build_impacted();
- # Compile targets are found by searching up from changed targets.
- # Reset the visited status for _GetBuildTargets.
- for target in self._name_to_target.itervalues():
- target.visited = False
-
- supplied_targets = _LookupTargets(self._supplied_target_names_no_all(),
- self._unqualified_mapping)
- if 'all' in self._supplied_target_names():
- supplied_targets = [x for x in (set(supplied_targets) |
- set(self._root_targets))]
- print 'Supplied test_targets & compile_targets'
- for target in supplied_targets:
- print '\t', target.name
- print 'Finding compile targets'
- compile_targets = _GetCompileTargets(self._changed_targets,
- supplied_targets)
- return [gyp.common.ParseQualifiedTarget(target.name)[1]
- for target in compile_targets]
-
-
-def GenerateOutput(target_list, target_dicts, data, params):
- """Called by gyp as the final stage. Outputs results."""
- config = Config()
- try:
- config.Init(params)
-
- if not config.files:
- raise Exception('Must specify files to analyze via config_path generator '
- 'flag')
-
- toplevel_dir = _ToGypPath(os.path.abspath(params['options'].toplevel_dir))
- if debug:
- print 'toplevel_dir', toplevel_dir
-
- if _WasGypIncludeFileModified(params, config.files):
- result_dict = { 'status': all_changed_string,
- 'test_targets': list(config.test_target_names),
- 'compile_targets': list(
- config.additional_compile_target_names |
- config.test_target_names) }
- _WriteOutput(params, **result_dict)
- return
-
- calculator = TargetCalculator(config.files,
- config.additional_compile_target_names,
- config.test_target_names, data,
- target_list, target_dicts, toplevel_dir,
- params['build_files'])
- if not calculator.is_build_impacted():
- result_dict = { 'status': no_dependency_string,
- 'test_targets': [],
- 'compile_targets': [] }
- if calculator.invalid_targets:
- result_dict['invalid_targets'] = calculator.invalid_targets
- _WriteOutput(params, **result_dict)
- return
-
- test_target_names = calculator.find_matching_test_target_names()
- compile_target_names = calculator.find_matching_compile_target_names()
- found_at_least_one_target = compile_target_names or test_target_names
- result_dict = { 'test_targets': test_target_names,
- 'status': found_dependency_string if
- found_at_least_one_target else no_dependency_string,
- 'compile_targets': list(
- set(compile_target_names) |
- set(test_target_names)) }
- if calculator.invalid_targets:
- result_dict['invalid_targets'] = calculator.invalid_targets
- _WriteOutput(params, **result_dict)
-
- except Exception as e:
- _WriteOutput(params, error=str(e))
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
deleted file mode 100644
index 5b26cc7..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
+++ /dev/null
@@ -1,1095 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Notes:
-#
-# This generates makefiles suitable for inclusion into the Android build system
-# via an Android.mk file. It is based on make.py, the standard makefile
-# generator.
-#
-# The code below generates a separate .mk file for each target, but
-# all are sourced by the top-level GypAndroid.mk. This means that all
-# variables in .mk-files clobber one another, and furthermore that any
-# variables set potentially clash with other Android build system variables.
-# Try to avoid setting global variables where possible.
-
-import gyp
-import gyp.common
-import gyp.generator.make as make # Reuse global functions from make backend.
-import os
-import re
-import subprocess
-
-generator_default_variables = {
- 'OS': 'android',
- 'EXECUTABLE_PREFIX': '',
- 'EXECUTABLE_SUFFIX': '',
- 'STATIC_LIB_PREFIX': 'lib',
- 'SHARED_LIB_PREFIX': 'lib',
- 'STATIC_LIB_SUFFIX': '.a',
- 'SHARED_LIB_SUFFIX': '.so',
- 'INTERMEDIATE_DIR': '$(gyp_intermediate_dir)',
- 'SHARED_INTERMEDIATE_DIR': '$(gyp_shared_intermediate_dir)',
- 'PRODUCT_DIR': '$(gyp_shared_intermediate_dir)',
- 'SHARED_LIB_DIR': '$(builddir)/lib.$(TOOLSET)',
- 'LIB_DIR': '$(obj).$(TOOLSET)',
- 'RULE_INPUT_ROOT': '%(INPUT_ROOT)s', # This gets expanded by Python.
- 'RULE_INPUT_DIRNAME': '%(INPUT_DIRNAME)s', # This gets expanded by Python.
- 'RULE_INPUT_PATH': '$(RULE_SOURCES)',
- 'RULE_INPUT_EXT': '$(suffix $<)',
- 'RULE_INPUT_NAME': '$(notdir $<)',
- 'CONFIGURATION_NAME': '$(GYP_CONFIGURATION)',
-}
-
-# Make supports multiple toolsets
-generator_supports_multiple_toolsets = True
-
-
-# Generator-specific gyp specs.
-generator_additional_non_configuration_keys = [
- # Boolean to declare that this target does not want its name mangled.
- 'android_unmangled_name',
- # Map of android build system variables to set.
- 'aosp_build_settings',
-]
-generator_additional_path_sections = []
-generator_extra_sources_for_rules = []
-
-
-ALL_MODULES_FOOTER = """\
-# "gyp_all_modules" is a concatenation of the "gyp_all_modules" targets from
-# all the included sub-makefiles. This is just here to clarify.
-gyp_all_modules:
-"""
-
-header = """\
-# This file is generated by gyp; do not edit.
-
-"""
-
-# Map gyp target types to Android module classes.
-MODULE_CLASSES = {
- 'static_library': 'STATIC_LIBRARIES',
- 'shared_library': 'SHARED_LIBRARIES',
- 'executable': 'EXECUTABLES',
-}
-
-
-def IsCPPExtension(ext):
- return make.COMPILABLE_EXTENSIONS.get(ext) == 'cxx'
-
-
-def Sourceify(path):
- """Convert a path to its source directory form. The Android backend does not
- support options.generator_output, so this function is a noop."""
- return path
-
-
-# Map from qualified target to path to output.
-# For Android, the target of these maps is a tuple ('static', 'modulename'),
-# ('dynamic', 'modulename'), or ('path', 'some/path') instead of a string,
-# since we link by module.
-target_outputs = {}
-# Map from qualified target to any linkable output. A subset
-# of target_outputs. E.g. when mybinary depends on liba, we want to
-# include liba in the linker line; when otherbinary depends on
-# mybinary, we just want to build mybinary first.
-target_link_deps = {}
-
-
-class AndroidMkWriter(object):
- """AndroidMkWriter packages up the writing of one target-specific Android.mk.
-
- Its only real entry point is Write(), and is mostly used for namespacing.
- """
-
- def __init__(self, android_top_dir):
- self.android_top_dir = android_top_dir
-
- def Write(self, qualified_target, relative_target, base_path, output_filename,
- spec, configs, part_of_all, write_alias_target, sdk_version):
- """The main entry point: writes a .mk file for a single target.
-
- Arguments:
- qualified_target: target we're generating
- relative_target: qualified target name relative to the root
- base_path: path relative to source root we're building in, used to resolve
- target-relative paths
- output_filename: output .mk file name to write
- spec, configs: gyp info
- part_of_all: flag indicating this target is part of 'all'
- write_alias_target: flag indicating whether to create short aliases for
- this target
- sdk_version: what to emit for LOCAL_SDK_VERSION in output
- """
- gyp.common.EnsureDirExists(output_filename)
-
- self.fp = open(output_filename, 'w')
-
- self.fp.write(header)
-
- self.qualified_target = qualified_target
- self.relative_target = relative_target
- self.path = base_path
- self.target = spec['target_name']
- self.type = spec['type']
- self.toolset = spec['toolset']
-
- deps, link_deps = self.ComputeDeps(spec)
-
- # Some of the generation below can add extra output, sources, or
- # link dependencies. All of the out params of the functions that
- # follow use names like extra_foo.
- extra_outputs = []
- extra_sources = []
-
- self.android_class = MODULE_CLASSES.get(self.type, 'GYP')
- self.android_module = self.ComputeAndroidModule(spec)
- (self.android_stem, self.android_suffix) = self.ComputeOutputParts(spec)
- self.output = self.output_binary = self.ComputeOutput(spec)
-
- # Standard header.
- self.WriteLn('include $(CLEAR_VARS)\n')
-
- # Module class and name.
- self.WriteLn('LOCAL_MODULE_CLASS := ' + self.android_class)
- self.WriteLn('LOCAL_MODULE := ' + self.android_module)
- # Only emit LOCAL_MODULE_STEM if it's different to LOCAL_MODULE.
- # The library module classes fail if the stem is set. ComputeOutputParts
- # makes sure that stem == modulename in these cases.
- if self.android_stem != self.android_module:
- self.WriteLn('LOCAL_MODULE_STEM := ' + self.android_stem)
- self.WriteLn('LOCAL_MODULE_SUFFIX := ' + self.android_suffix)
- if self.toolset == 'host':
- self.WriteLn('LOCAL_IS_HOST_MODULE := true')
- self.WriteLn('LOCAL_MULTILIB := $(GYP_HOST_MULTILIB)')
- elif sdk_version > 0:
- self.WriteLn('LOCAL_MODULE_TARGET_ARCH := '
- '$(TARGET_$(GYP_VAR_PREFIX)ARCH)')
- self.WriteLn('LOCAL_SDK_VERSION := %s' % sdk_version)
-
- # Grab output directories; needed for Actions and Rules.
- if self.toolset == 'host':
- self.WriteLn('gyp_intermediate_dir := '
- '$(call local-intermediates-dir,,$(GYP_HOST_VAR_PREFIX))')
- else:
- self.WriteLn('gyp_intermediate_dir := '
- '$(call local-intermediates-dir,,$(GYP_VAR_PREFIX))')
- self.WriteLn('gyp_shared_intermediate_dir := '
- '$(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))')
- self.WriteLn()
-
- # List files this target depends on so that actions/rules/copies/sources
- # can depend on the list.
- # TODO: doesn't pull in things through transitive link deps; needed?
- target_dependencies = [x[1] for x in deps if x[0] == 'path']
- self.WriteLn('# Make sure our deps are built first.')
- self.WriteList(target_dependencies, 'GYP_TARGET_DEPENDENCIES',
- local_pathify=True)
-
- # Actions must come first, since they can generate more OBJs for use below.
- if 'actions' in spec:
- self.WriteActions(spec['actions'], extra_sources, extra_outputs)
-
- # Rules must be early like actions.
- if 'rules' in spec:
- self.WriteRules(spec['rules'], extra_sources, extra_outputs)
-
- if 'copies' in spec:
- self.WriteCopies(spec['copies'], extra_outputs)
-
- # GYP generated outputs.
- self.WriteList(extra_outputs, 'GYP_GENERATED_OUTPUTS', local_pathify=True)
-
- # Set LOCAL_ADDITIONAL_DEPENDENCIES so that Android's build rules depend
- # on both our dependency targets and our generated files.
- self.WriteLn('# Make sure our deps and generated files are built first.')
- self.WriteLn('LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) '
- '$(GYP_GENERATED_OUTPUTS)')
- self.WriteLn()
-
- # Sources.
- if spec.get('sources', []) or extra_sources:
- self.WriteSources(spec, configs, extra_sources)
-
- self.WriteTarget(spec, configs, deps, link_deps, part_of_all,
- write_alias_target)
-
- # Update global list of target outputs, used in dependency tracking.
- target_outputs[qualified_target] = ('path', self.output_binary)
-
- # Update global list of link dependencies.
- if self.type == 'static_library':
- target_link_deps[qualified_target] = ('static', self.android_module)
- elif self.type == 'shared_library':
- target_link_deps[qualified_target] = ('shared', self.android_module)
-
- self.fp.close()
- return self.android_module
-
-
- def WriteActions(self, actions, extra_sources, extra_outputs):
- """Write Makefile code for any 'actions' from the gyp input.
-
- extra_sources: a list that will be filled in with newly generated source
- files, if any
- extra_outputs: a list that will be filled in with any outputs of these
- actions (used to make other pieces dependent on these
- actions)
- """
- for action in actions:
- name = make.StringToMakefileVariable('%s_%s' % (self.relative_target,
- action['action_name']))
- self.WriteLn('### Rules for action "%s":' % action['action_name'])
- inputs = action['inputs']
- outputs = action['outputs']
-
- # Build up a list of outputs.
- # Collect the output dirs we'll need.
- dirs = set()
- for out in outputs:
- if not out.startswith('$'):
- print ('WARNING: Action for target "%s" writes output to local path '
- '"%s".' % (self.target, out))
- dir = os.path.split(out)[0]
- if dir:
- dirs.add(dir)
- if int(action.get('process_outputs_as_sources', False)):
- extra_sources += outputs
-
- # Prepare the actual command.
- command = gyp.common.EncodePOSIXShellList(action['action'])
- if 'message' in action:
- quiet_cmd = 'Gyp action: %s ($@)' % action['message']
- else:
- quiet_cmd = 'Gyp action: %s ($@)' % name
- if len(dirs) > 0:
- command = 'mkdir -p %s' % ' '.join(dirs) + '; ' + command
-
- cd_action = 'cd $(gyp_local_path)/%s; ' % self.path
- command = cd_action + command
-
- # The makefile rules are all relative to the top dir, but the gyp actions
- # are defined relative to their containing dir. This replaces the gyp_*
- # variables for the action rule with an absolute version so that the
- # output goes in the right place.
- # Only write the gyp_* rules for the "primary" output (:1);
- # it's superfluous for the "extra outputs", and this avoids accidentally
- # writing duplicate dummy rules for those outputs.
- main_output = make.QuoteSpaces(self.LocalPathify(outputs[0]))
- self.WriteLn('%s: gyp_local_path := $(LOCAL_PATH)' % main_output)
- self.WriteLn('%s: gyp_var_prefix := $(GYP_VAR_PREFIX)' % main_output)
- self.WriteLn('%s: gyp_intermediate_dir := '
- '$(abspath $(gyp_intermediate_dir))' % main_output)
- self.WriteLn('%s: gyp_shared_intermediate_dir := '
- '$(abspath $(gyp_shared_intermediate_dir))' % main_output)
-
- # Android's envsetup.sh adds a number of directories to the path including
- # the built host binary directory. This causes actions/rules invoked by
- # gyp to sometimes use these instead of system versions, e.g. bison.
- # The built host binaries may not be suitable, and can cause errors.
- # So, we remove them from the PATH using the ANDROID_BUILD_PATHS variable
- # set by envsetup.
- self.WriteLn('%s: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))'
- % main_output)
-
- # Don't allow spaces in input/output filenames, but make an exception for
- # filenames which start with '$(' since it's okay for there to be spaces
- # inside of make function/macro invocations.
- for input in inputs:
- if not input.startswith('$(') and ' ' in input:
- raise gyp.common.GypError(
- 'Action input filename "%s" in target %s contains a space' %
- (input, self.target))
- for output in outputs:
- if not output.startswith('$(') and ' ' in output:
- raise gyp.common.GypError(
- 'Action output filename "%s" in target %s contains a space' %
- (output, self.target))
-
- self.WriteLn('%s: %s $(GYP_TARGET_DEPENDENCIES)' %
- (main_output, ' '.join(map(self.LocalPathify, inputs))))
- self.WriteLn('\t@echo "%s"' % quiet_cmd)
- self.WriteLn('\t$(hide)%s\n' % command)
- for output in outputs[1:]:
- # Make each output depend on the main output, with an empty command
- # to force make to notice that the mtime has changed.
- self.WriteLn('%s: %s ;' % (self.LocalPathify(output), main_output))
-
- extra_outputs += outputs
- self.WriteLn()
-
- self.WriteLn()
-
-
- def WriteRules(self, rules, extra_sources, extra_outputs):
- """Write Makefile code for any 'rules' from the gyp input.
-
- extra_sources: a list that will be filled in with newly generated source
- files, if any
- extra_outputs: a list that will be filled in with any outputs of these
- rules (used to make other pieces dependent on these rules)
- """
- if len(rules) == 0:
- return
-
- for rule in rules:
- if len(rule.get('rule_sources', [])) == 0:
- continue
- name = make.StringToMakefileVariable('%s_%s' % (self.relative_target,
- rule['rule_name']))
- self.WriteLn('\n### Generated for rule "%s":' % name)
- self.WriteLn('# "%s":' % rule)
-
- inputs = rule.get('inputs')
- for rule_source in rule.get('rule_sources', []):
- (rule_source_dirname, rule_source_basename) = os.path.split(rule_source)
- (rule_source_root, rule_source_ext) = \
- os.path.splitext(rule_source_basename)
-
- outputs = [self.ExpandInputRoot(out, rule_source_root,
- rule_source_dirname)
- for out in rule['outputs']]
-
- dirs = set()
- for out in outputs:
- if not out.startswith('$'):
- print ('WARNING: Rule for target %s writes output to local path %s'
- % (self.target, out))
- dir = os.path.dirname(out)
- if dir:
- dirs.add(dir)
- extra_outputs += outputs
- if int(rule.get('process_outputs_as_sources', False)):
- extra_sources.extend(outputs)
-
- components = []
- for component in rule['action']:
- component = self.ExpandInputRoot(component, rule_source_root,
- rule_source_dirname)
- if '$(RULE_SOURCES)' in component:
- component = component.replace('$(RULE_SOURCES)',
- rule_source)
- components.append(component)
-
- command = gyp.common.EncodePOSIXShellList(components)
- cd_action = 'cd $(gyp_local_path)/%s; ' % self.path
- command = cd_action + command
- if dirs:
- command = 'mkdir -p %s' % ' '.join(dirs) + '; ' + command
-
- # We set up a rule to build the first output, and then set up
- # a rule for each additional output to depend on the first.
- outputs = map(self.LocalPathify, outputs)
- main_output = outputs[0]
- self.WriteLn('%s: gyp_local_path := $(LOCAL_PATH)' % main_output)
- self.WriteLn('%s: gyp_var_prefix := $(GYP_VAR_PREFIX)' % main_output)
- self.WriteLn('%s: gyp_intermediate_dir := '
- '$(abspath $(gyp_intermediate_dir))' % main_output)
- self.WriteLn('%s: gyp_shared_intermediate_dir := '
- '$(abspath $(gyp_shared_intermediate_dir))' % main_output)
-
- # See explanation in WriteActions.
- self.WriteLn('%s: export PATH := '
- '$(subst $(ANDROID_BUILD_PATHS),,$(PATH))' % main_output)
-
- main_output_deps = self.LocalPathify(rule_source)
- if inputs:
- main_output_deps += ' '
- main_output_deps += ' '.join([self.LocalPathify(f) for f in inputs])
-
- self.WriteLn('%s: %s $(GYP_TARGET_DEPENDENCIES)' %
- (main_output, main_output_deps))
- self.WriteLn('\t%s\n' % command)
- for output in outputs[1:]:
- # Make each output depend on the main output, with an empty command
- # to force make to notice that the mtime has changed.
- self.WriteLn('%s: %s ;' % (output, main_output))
- self.WriteLn()
-
- self.WriteLn()
-
-
- def WriteCopies(self, copies, extra_outputs):
- """Write Makefile code for any 'copies' from the gyp input.
-
- extra_outputs: a list that will be filled in with any outputs of this action
- (used to make other pieces dependent on this action)
- """
- self.WriteLn('### Generated for copy rule.')
-
- variable = make.StringToMakefileVariable(self.relative_target + '_copies')
- outputs = []
- for copy in copies:
- for path in copy['files']:
- # The Android build system does not allow generation of files into the
- # source tree. The destination should start with a variable, which will
- # typically be $(gyp_intermediate_dir) or
- # $(gyp_shared_intermediate_dir). Note that we can't use an assertion
- # because some of the gyp tests depend on this.
- if not copy['destination'].startswith('$'):
- print ('WARNING: Copy rule for target %s writes output to '
- 'local path %s' % (self.target, copy['destination']))
-
- # LocalPathify() calls normpath, stripping trailing slashes.
- path = Sourceify(self.LocalPathify(path))
- filename = os.path.split(path)[1]
- output = Sourceify(self.LocalPathify(os.path.join(copy['destination'],
- filename)))
-
- self.WriteLn('%s: %s $(GYP_TARGET_DEPENDENCIES) | $(ACP)' %
- (output, path))
- self.WriteLn('\t@echo Copying: $@')
- self.WriteLn('\t$(hide) mkdir -p $(dir $@)')
- self.WriteLn('\t$(hide) $(ACP) -rpf $< $@')
- self.WriteLn()
- outputs.append(output)
- self.WriteLn('%s = %s' % (variable,
- ' '.join(map(make.QuoteSpaces, outputs))))
- extra_outputs.append('$(%s)' % variable)
- self.WriteLn()
-
-
- def WriteSourceFlags(self, spec, configs):
- """Write out the flags and include paths used to compile source files for
- the current target.
-
- Args:
- spec, configs: input from gyp.
- """
- for configname, config in sorted(configs.iteritems()):
- extracted_includes = []
-
- self.WriteLn('\n# Flags passed to both C and C++ files.')
- cflags, includes_from_cflags = self.ExtractIncludesFromCFlags(
- config.get('cflags', []) + config.get('cflags_c', []))
- extracted_includes.extend(includes_from_cflags)
- self.WriteList(cflags, 'MY_CFLAGS_%s' % configname)
-
- self.WriteList(config.get('defines'), 'MY_DEFS_%s' % configname,
- prefix='-D', quoter=make.EscapeCppDefine)
-
- self.WriteLn('\n# Include paths placed before CFLAGS/CPPFLAGS')
- includes = list(config.get('include_dirs', []))
- includes.extend(extracted_includes)
- includes = map(Sourceify, map(self.LocalPathify, includes))
- includes = self.NormalizeIncludePaths(includes)
- self.WriteList(includes, 'LOCAL_C_INCLUDES_%s' % configname)
-
- self.WriteLn('\n# Flags passed to only C++ (and not C) files.')
- self.WriteList(config.get('cflags_cc'), 'LOCAL_CPPFLAGS_%s' % configname)
-
- self.WriteLn('\nLOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) '
- '$(MY_DEFS_$(GYP_CONFIGURATION))')
- # Undefine ANDROID for host modules
- # TODO: the source code should not use macro ANDROID to tell if it's host
- # or target module.
- if self.toolset == 'host':
- self.WriteLn('# Undefine ANDROID for host modules')
- self.WriteLn('LOCAL_CFLAGS += -UANDROID')
- self.WriteLn('LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) '
- '$(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))')
- self.WriteLn('LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))')
- # Android uses separate flags for assembly file invocations, but gyp expects
- # the same CFLAGS to be applied:
- self.WriteLn('LOCAL_ASFLAGS := $(LOCAL_CFLAGS)')
-
-
- def WriteSources(self, spec, configs, extra_sources):
- """Write Makefile code for any 'sources' from the gyp input.
- These are source files necessary to build the current target.
- We need to handle shared_intermediate directory source files as
- a special case by copying them to the intermediate directory and
- treating them as a genereated sources. Otherwise the Android build
- rules won't pick them up.
-
- Args:
- spec, configs: input from gyp.
- extra_sources: Sources generated from Actions or Rules.
- """
- sources = filter(make.Compilable, spec.get('sources', []))
- generated_not_sources = [x for x in extra_sources if not make.Compilable(x)]
- extra_sources = filter(make.Compilable, extra_sources)
-
- # Determine and output the C++ extension used by these sources.
- # We simply find the first C++ file and use that extension.
- all_sources = sources + extra_sources
- local_cpp_extension = '.cpp'
- for source in all_sources:
- (root, ext) = os.path.splitext(source)
- if IsCPPExtension(ext):
- local_cpp_extension = ext
- break
- if local_cpp_extension != '.cpp':
- self.WriteLn('LOCAL_CPP_EXTENSION := %s' % local_cpp_extension)
-
- # We need to move any non-generated sources that are coming from the
- # shared intermediate directory out of LOCAL_SRC_FILES and put them
- # into LOCAL_GENERATED_SOURCES. We also need to move over any C++ files
- # that don't match our local_cpp_extension, since Android will only
- # generate Makefile rules for a single LOCAL_CPP_EXTENSION.
- local_files = []
- for source in sources:
- (root, ext) = os.path.splitext(source)
- if '$(gyp_shared_intermediate_dir)' in source:
- extra_sources.append(source)
- elif '$(gyp_intermediate_dir)' in source:
- extra_sources.append(source)
- elif IsCPPExtension(ext) and ext != local_cpp_extension:
- extra_sources.append(source)
- else:
- local_files.append(os.path.normpath(os.path.join(self.path, source)))
-
- # For any generated source, if it is coming from the shared intermediate
- # directory then we add a Make rule to copy them to the local intermediate
- # directory first. This is because the Android LOCAL_GENERATED_SOURCES
- # must be in the local module intermediate directory for the compile rules
- # to work properly. If the file has the wrong C++ extension, then we add
- # a rule to copy that to intermediates and use the new version.
- final_generated_sources = []
- # If a source file gets copied, we still need to add the orginal source
- # directory as header search path, for GCC searches headers in the
- # directory that contains the source file by default.
- origin_src_dirs = []
- for source in extra_sources:
- local_file = source
- if not '$(gyp_intermediate_dir)/' in local_file:
- basename = os.path.basename(local_file)
- local_file = '$(gyp_intermediate_dir)/' + basename
- (root, ext) = os.path.splitext(local_file)
- if IsCPPExtension(ext) and ext != local_cpp_extension:
- local_file = root + local_cpp_extension
- if local_file != source:
- self.WriteLn('%s: %s' % (local_file, self.LocalPathify(source)))
- self.WriteLn('\tmkdir -p $(@D); cp $< $@')
- origin_src_dirs.append(os.path.dirname(source))
- final_generated_sources.append(local_file)
-
- # We add back in all of the non-compilable stuff to make sure that the
- # make rules have dependencies on them.
- final_generated_sources.extend(generated_not_sources)
- self.WriteList(final_generated_sources, 'LOCAL_GENERATED_SOURCES')
-
- origin_src_dirs = gyp.common.uniquer(origin_src_dirs)
- origin_src_dirs = map(Sourceify, map(self.LocalPathify, origin_src_dirs))
- self.WriteList(origin_src_dirs, 'GYP_COPIED_SOURCE_ORIGIN_DIRS')
-
- self.WriteList(local_files, 'LOCAL_SRC_FILES')
-
- # Write out the flags used to compile the source; this must be done last
- # so that GYP_COPIED_SOURCE_ORIGIN_DIRS can be used as an include path.
- self.WriteSourceFlags(spec, configs)
-
-
- def ComputeAndroidModule(self, spec):
- """Return the Android module name used for a gyp spec.
-
- We use the complete qualified target name to avoid collisions between
- duplicate targets in different directories. We also add a suffix to
- distinguish gyp-generated module names.
- """
-
- if int(spec.get('android_unmangled_name', 0)):
- assert self.type != 'shared_library' or self.target.startswith('lib')
- return self.target
-
- if self.type == 'shared_library':
- # For reasons of convention, the Android build system requires that all
- # shared library modules are named 'libfoo' when generating -l flags.
- prefix = 'lib_'
- else:
- prefix = ''
-
- if spec['toolset'] == 'host':
- suffix = '_$(TARGET_$(GYP_VAR_PREFIX)ARCH)_host_gyp'
- else:
- suffix = '_gyp'
-
- if self.path:
- middle = make.StringToMakefileVariable('%s_%s' % (self.path, self.target))
- else:
- middle = make.StringToMakefileVariable(self.target)
-
- return ''.join([prefix, middle, suffix])
-
-
- def ComputeOutputParts(self, spec):
- """Return the 'output basename' of a gyp spec, split into filename + ext.
-
- Android libraries must be named the same thing as their module name,
- otherwise the linker can't find them, so product_name and so on must be
- ignored if we are building a library, and the "lib" prepending is
- not done for Android.
- """
- assert self.type != 'loadable_module' # TODO: not supported?
-
- target = spec['target_name']
- target_prefix = ''
- target_ext = ''
- if self.type == 'static_library':
- target = self.ComputeAndroidModule(spec)
- target_ext = '.a'
- elif self.type == 'shared_library':
- target = self.ComputeAndroidModule(spec)
- target_ext = '.so'
- elif self.type == 'none':
- target_ext = '.stamp'
- elif self.type != 'executable':
- print ("ERROR: What output file should be generated?",
- "type", self.type, "target", target)
-
- if self.type != 'static_library' and self.type != 'shared_library':
- target_prefix = spec.get('product_prefix', target_prefix)
- target = spec.get('product_name', target)
- product_ext = spec.get('product_extension')
- if product_ext:
- target_ext = '.' + product_ext
-
- target_stem = target_prefix + target
- return (target_stem, target_ext)
-
-
- def ComputeOutputBasename(self, spec):
- """Return the 'output basename' of a gyp spec.
-
- E.g., the loadable module 'foobar' in directory 'baz' will produce
- 'libfoobar.so'
- """
- return ''.join(self.ComputeOutputParts(spec))
-
-
- def ComputeOutput(self, spec):
- """Return the 'output' (full output path) of a gyp spec.
-
- E.g., the loadable module 'foobar' in directory 'baz' will produce
- '$(obj)/baz/libfoobar.so'
- """
- if self.type == 'executable':
- # We install host executables into shared_intermediate_dir so they can be
- # run by gyp rules that refer to PRODUCT_DIR.
- path = '$(gyp_shared_intermediate_dir)'
- elif self.type == 'shared_library':
- if self.toolset == 'host':
- path = '$($(GYP_HOST_VAR_PREFIX)HOST_OUT_INTERMEDIATE_LIBRARIES)'
- else:
- path = '$($(GYP_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)'
- else:
- # Other targets just get built into their intermediate dir.
- if self.toolset == 'host':
- path = ('$(call intermediates-dir-for,%s,%s,true,,'
- '$(GYP_HOST_VAR_PREFIX))' % (self.android_class,
- self.android_module))
- else:
- path = ('$(call intermediates-dir-for,%s,%s,,,$(GYP_VAR_PREFIX))'
- % (self.android_class, self.android_module))
-
- assert spec.get('product_dir') is None # TODO: not supported?
- return os.path.join(path, self.ComputeOutputBasename(spec))
-
- def NormalizeIncludePaths(self, include_paths):
- """ Normalize include_paths.
- Convert absolute paths to relative to the Android top directory.
-
- Args:
- include_paths: A list of unprocessed include paths.
- Returns:
- A list of normalized include paths.
- """
- normalized = []
- for path in include_paths:
- if path[0] == '/':
- path = gyp.common.RelativePath(path, self.android_top_dir)
- normalized.append(path)
- return normalized
-
- def ExtractIncludesFromCFlags(self, cflags):
- """Extract includes "-I..." out from cflags
-
- Args:
- cflags: A list of compiler flags, which may be mixed with "-I.."
- Returns:
- A tuple of lists: (clean_clfags, include_paths). "-I.." is trimmed.
- """
- clean_cflags = []
- include_paths = []
- for flag in cflags:
- if flag.startswith('-I'):
- include_paths.append(flag[2:])
- else:
- clean_cflags.append(flag)
-
- return (clean_cflags, include_paths)
-
- def FilterLibraries(self, libraries):
- """Filter the 'libraries' key to separate things that shouldn't be ldflags.
-
- Library entries that look like filenames should be converted to android
- module names instead of being passed to the linker as flags.
-
- Args:
- libraries: the value of spec.get('libraries')
- Returns:
- A tuple (static_lib_modules, dynamic_lib_modules, ldflags)
- """
- static_lib_modules = []
- dynamic_lib_modules = []
- ldflags = []
- for libs in libraries:
- # Libs can have multiple words.
- for lib in libs.split():
- # Filter the system libraries, which are added by default by the Android
- # build system.
- if (lib == '-lc' or lib == '-lstdc++' or lib == '-lm' or
- lib.endswith('libgcc.a')):
- continue
- match = re.search(r'([^/]+)\.a$', lib)
- if match:
- static_lib_modules.append(match.group(1))
- continue
- match = re.search(r'([^/]+)\.so$', lib)
- if match:
- dynamic_lib_modules.append(match.group(1))
- continue
- if lib.startswith('-l'):
- ldflags.append(lib)
- return (static_lib_modules, dynamic_lib_modules, ldflags)
-
-
- def ComputeDeps(self, spec):
- """Compute the dependencies of a gyp spec.
-
- Returns a tuple (deps, link_deps), where each is a list of
- filenames that will need to be put in front of make for either
- building (deps) or linking (link_deps).
- """
- deps = []
- link_deps = []
- if 'dependencies' in spec:
- deps.extend([target_outputs[dep] for dep in spec['dependencies']
- if target_outputs[dep]])
- for dep in spec['dependencies']:
- if dep in target_link_deps:
- link_deps.append(target_link_deps[dep])
- deps.extend(link_deps)
- return (gyp.common.uniquer(deps), gyp.common.uniquer(link_deps))
-
-
- def WriteTargetFlags(self, spec, configs, link_deps):
- """Write Makefile code to specify the link flags and library dependencies.
-
- spec, configs: input from gyp.
- link_deps: link dependency list; see ComputeDeps()
- """
- # Libraries (i.e. -lfoo)
- # These must be included even for static libraries as some of them provide
- # implicit include paths through the build system.
- libraries = gyp.common.uniquer(spec.get('libraries', []))
- static_libs, dynamic_libs, ldflags_libs = self.FilterLibraries(libraries)
-
- if self.type != 'static_library':
- for configname, config in sorted(configs.iteritems()):
- ldflags = list(config.get('ldflags', []))
- self.WriteLn('')
- self.WriteList(ldflags, 'LOCAL_LDFLAGS_%s' % configname)
- self.WriteList(ldflags_libs, 'LOCAL_GYP_LIBS')
- self.WriteLn('LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION)) '
- '$(LOCAL_GYP_LIBS)')
-
- # Link dependencies (i.e. other gyp targets this target depends on)
- # These need not be included for static libraries as within the gyp build
- # we do not use the implicit include path mechanism.
- if self.type != 'static_library':
- static_link_deps = [x[1] for x in link_deps if x[0] == 'static']
- shared_link_deps = [x[1] for x in link_deps if x[0] == 'shared']
- else:
- static_link_deps = []
- shared_link_deps = []
-
- # Only write the lists if they are non-empty.
- if static_libs or static_link_deps:
- self.WriteLn('')
- self.WriteList(static_libs + static_link_deps,
- 'LOCAL_STATIC_LIBRARIES')
- self.WriteLn('# Enable grouping to fix circular references')
- self.WriteLn('LOCAL_GROUP_STATIC_LIBRARIES := true')
- if dynamic_libs or shared_link_deps:
- self.WriteLn('')
- self.WriteList(dynamic_libs + shared_link_deps,
- 'LOCAL_SHARED_LIBRARIES')
-
-
- def WriteTarget(self, spec, configs, deps, link_deps, part_of_all,
- write_alias_target):
- """Write Makefile code to produce the final target of the gyp spec.
-
- spec, configs: input from gyp.
- deps, link_deps: dependency lists; see ComputeDeps()
- part_of_all: flag indicating this target is part of 'all'
- write_alias_target: flag indicating whether to create short aliases for this
- target
- """
- self.WriteLn('### Rules for final target.')
-
- if self.type != 'none':
- self.WriteTargetFlags(spec, configs, link_deps)
-
- settings = spec.get('aosp_build_settings', {})
- if settings:
- self.WriteLn('### Set directly by aosp_build_settings.')
- for k, v in settings.iteritems():
- if isinstance(v, list):
- self.WriteList(v, k)
- else:
- self.WriteLn('%s := %s' % (k, make.QuoteIfNecessary(v)))
- self.WriteLn('')
-
- # Add to the set of targets which represent the gyp 'all' target. We use the
- # name 'gyp_all_modules' as the Android build system doesn't allow the use
- # of the Make target 'all' and because 'all_modules' is the equivalent of
- # the Make target 'all' on Android.
- if part_of_all and write_alias_target:
- self.WriteLn('# Add target alias to "gyp_all_modules" target.')
- self.WriteLn('.PHONY: gyp_all_modules')
- self.WriteLn('gyp_all_modules: %s' % self.android_module)
- self.WriteLn('')
-
- # Add an alias from the gyp target name to the Android module name. This
- # simplifies manual builds of the target, and is required by the test
- # framework.
- if self.target != self.android_module and write_alias_target:
- self.WriteLn('# Alias gyp target name.')
- self.WriteLn('.PHONY: %s' % self.target)
- self.WriteLn('%s: %s' % (self.target, self.android_module))
- self.WriteLn('')
-
- # Add the command to trigger build of the target type depending
- # on the toolset. Ex: BUILD_STATIC_LIBRARY vs. BUILD_HOST_STATIC_LIBRARY
- # NOTE: This has to come last!
- modifier = ''
- if self.toolset == 'host':
- modifier = 'HOST_'
- if self.type == 'static_library':
- self.WriteLn('include $(BUILD_%sSTATIC_LIBRARY)' % modifier)
- elif self.type == 'shared_library':
- self.WriteLn('LOCAL_PRELINK_MODULE := false')
- self.WriteLn('include $(BUILD_%sSHARED_LIBRARY)' % modifier)
- elif self.type == 'executable':
- self.WriteLn('LOCAL_CXX_STL := libc++_static')
- # Executables are for build and test purposes only, so they're installed
- # to a directory that doesn't get included in the system image.
- self.WriteLn('LOCAL_MODULE_PATH := $(gyp_shared_intermediate_dir)')
- self.WriteLn('include $(BUILD_%sEXECUTABLE)' % modifier)
- else:
- self.WriteLn('LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp')
- self.WriteLn('LOCAL_UNINSTALLABLE_MODULE := true')
- if self.toolset == 'target':
- self.WriteLn('LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)')
- else:
- self.WriteLn('LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_HOST_VAR_PREFIX)')
- self.WriteLn()
- self.WriteLn('include $(BUILD_SYSTEM)/base_rules.mk')
- self.WriteLn()
- self.WriteLn('$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)')
- self.WriteLn('\t$(hide) echo "Gyp timestamp: $@"')
- self.WriteLn('\t$(hide) mkdir -p $(dir $@)')
- self.WriteLn('\t$(hide) touch $@')
- self.WriteLn()
- self.WriteLn('LOCAL_2ND_ARCH_VAR_PREFIX :=')
-
-
- def WriteList(self, value_list, variable=None, prefix='',
- quoter=make.QuoteIfNecessary, local_pathify=False):
- """Write a variable definition that is a list of values.
-
- E.g. WriteList(['a','b'], 'foo', prefix='blah') writes out
- foo = blaha blahb
- but in a pretty-printed style.
- """
- values = ''
- if value_list:
- value_list = [quoter(prefix + l) for l in value_list]
- if local_pathify:
- value_list = [self.LocalPathify(l) for l in value_list]
- values = ' \\\n\t' + ' \\\n\t'.join(value_list)
- self.fp.write('%s :=%s\n\n' % (variable, values))
-
-
- def WriteLn(self, text=''):
- self.fp.write(text + '\n')
-
-
- def LocalPathify(self, path):
- """Convert a subdirectory-relative path into a normalized path which starts
- with the make variable $(LOCAL_PATH) (i.e. the top of the project tree).
- Absolute paths, or paths that contain variables, are just normalized."""
- if '$(' in path or os.path.isabs(path):
- # path is not a file in the project tree in this case, but calling
- # normpath is still important for trimming trailing slashes.
- return os.path.normpath(path)
- local_path = os.path.join('$(LOCAL_PATH)', self.path, path)
- local_path = os.path.normpath(local_path)
- # Check that normalizing the path didn't ../ itself out of $(LOCAL_PATH)
- # - i.e. that the resulting path is still inside the project tree. The
- # path may legitimately have ended up containing just $(LOCAL_PATH), though,
- # so we don't look for a slash.
- assert local_path.startswith('$(LOCAL_PATH)'), (
- 'Path %s attempts to escape from gyp path %s !)' % (path, self.path))
- return local_path
-
-
- def ExpandInputRoot(self, template, expansion, dirname):
- if '%(INPUT_ROOT)s' not in template and '%(INPUT_DIRNAME)s' not in template:
- return template
- path = template % {
- 'INPUT_ROOT': expansion,
- 'INPUT_DIRNAME': dirname,
- }
- return os.path.normpath(path)
-
-
-def PerformBuild(data, configurations, params):
- # The android backend only supports the default configuration.
- options = params['options']
- makefile = os.path.abspath(os.path.join(options.toplevel_dir,
- 'GypAndroid.mk'))
- env = dict(os.environ)
- env['ONE_SHOT_MAKEFILE'] = makefile
- arguments = ['make', '-C', os.environ['ANDROID_BUILD_TOP'], 'gyp_all_modules']
- print 'Building: %s' % arguments
- subprocess.check_call(arguments, env=env)
-
-
-def GenerateOutput(target_list, target_dicts, data, params):
- options = params['options']
- generator_flags = params.get('generator_flags', {})
- builddir_name = generator_flags.get('output_dir', 'out')
- limit_to_target_all = generator_flags.get('limit_to_target_all', False)
- write_alias_targets = generator_flags.get('write_alias_targets', True)
- sdk_version = generator_flags.get('aosp_sdk_version', 0)
- android_top_dir = os.environ.get('ANDROID_BUILD_TOP')
- assert android_top_dir, '$ANDROID_BUILD_TOP not set; you need to run lunch.'
-
- def CalculateMakefilePath(build_file, base_name):
- """Determine where to write a Makefile for a given gyp file."""
- # Paths in gyp files are relative to the .gyp file, but we want
- # paths relative to the source root for the master makefile. Grab
- # the path of the .gyp file as the base to relativize against.
- # E.g. "foo/bar" when we're constructing targets for "foo/bar/baz.gyp".
- base_path = gyp.common.RelativePath(os.path.dirname(build_file),
- options.depth)
- # We write the file in the base_path directory.
- output_file = os.path.join(options.depth, base_path, base_name)
- assert not options.generator_output, (
- 'The Android backend does not support options.generator_output.')
- base_path = gyp.common.RelativePath(os.path.dirname(build_file),
- options.toplevel_dir)
- return base_path, output_file
-
- # TODO: search for the first non-'Default' target. This can go
- # away when we add verification that all targets have the
- # necessary configurations.
- default_configuration = None
- toolsets = set([target_dicts[target]['toolset'] for target in target_list])
- for target in target_list:
- spec = target_dicts[target]
- if spec['default_configuration'] != 'Default':
- default_configuration = spec['default_configuration']
- break
- if not default_configuration:
- default_configuration = 'Default'
-
- srcdir = '.'
- makefile_name = 'GypAndroid' + options.suffix + '.mk'
- makefile_path = os.path.join(options.toplevel_dir, makefile_name)
- assert not options.generator_output, (
- 'The Android backend does not support options.generator_output.')
- gyp.common.EnsureDirExists(makefile_path)
- root_makefile = open(makefile_path, 'w')
-
- root_makefile.write(header)
-
- # We set LOCAL_PATH just once, here, to the top of the project tree. This
- # allows all the other paths we use to be relative to the Android.mk file,
- # as the Android build system expects.
- root_makefile.write('\nLOCAL_PATH := $(call my-dir)\n')
-
- # Find the list of targets that derive from the gyp file(s) being built.
- needed_targets = set()
- for build_file in params['build_files']:
- for target in gyp.common.AllTargets(target_list, target_dicts, build_file):
- needed_targets.add(target)
-
- build_files = set()
- include_list = set()
- android_modules = {}
- for qualified_target in target_list:
- build_file, target, toolset = gyp.common.ParseQualifiedTarget(
- qualified_target)
- relative_build_file = gyp.common.RelativePath(build_file,
- options.toplevel_dir)
- build_files.add(relative_build_file)
- included_files = data[build_file]['included_files']
- for included_file in included_files:
- # The included_files entries are relative to the dir of the build file
- # that included them, so we have to undo that and then make them relative
- # to the root dir.
- relative_include_file = gyp.common.RelativePath(
- gyp.common.UnrelativePath(included_file, build_file),
- options.toplevel_dir)
- abs_include_file = os.path.abspath(relative_include_file)
- # If the include file is from the ~/.gyp dir, we should use absolute path
- # so that relocating the src dir doesn't break the path.
- if (params['home_dot_gyp'] and
- abs_include_file.startswith(params['home_dot_gyp'])):
- build_files.add(abs_include_file)
- else:
- build_files.add(relative_include_file)
-
- base_path, output_file = CalculateMakefilePath(build_file,
- target + '.' + toolset + options.suffix + '.mk')
-
- spec = target_dicts[qualified_target]
- configs = spec['configurations']
-
- part_of_all = qualified_target in needed_targets
- if limit_to_target_all and not part_of_all:
- continue
-
- relative_target = gyp.common.QualifiedTarget(relative_build_file, target,
- toolset)
- writer = AndroidMkWriter(android_top_dir)
- android_module = writer.Write(qualified_target, relative_target, base_path,
- output_file, spec, configs,
- part_of_all=part_of_all,
- write_alias_target=write_alias_targets,
- sdk_version=sdk_version)
- if android_module in android_modules:
- print ('ERROR: Android module names must be unique. The following '
- 'targets both generate Android module name %s.\n %s\n %s' %
- (android_module, android_modules[android_module],
- qualified_target))
- return
- android_modules[android_module] = qualified_target
-
- # Our root_makefile lives at the source root. Compute the relative path
- # from there to the output_file for including.
- mkfile_rel_path = gyp.common.RelativePath(output_file,
- os.path.dirname(makefile_path))
- include_list.add(mkfile_rel_path)
-
- root_makefile.write('GYP_CONFIGURATION ?= %s\n' % default_configuration)
- root_makefile.write('GYP_VAR_PREFIX ?=\n')
- root_makefile.write('GYP_HOST_VAR_PREFIX ?=\n')
- root_makefile.write('GYP_HOST_MULTILIB ?= first\n')
-
- # Write out the sorted list of includes.
- root_makefile.write('\n')
- for include_file in sorted(include_list):
- root_makefile.write('include $(LOCAL_PATH)/' + include_file + '\n')
- root_makefile.write('\n')
-
- if write_alias_targets:
- root_makefile.write(ALL_MODULES_FOOTER)
-
- root_makefile.close()
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
deleted file mode 100644
index 17f5e63..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
+++ /dev/null
@@ -1,1221 +0,0 @@
-# Copyright (c) 2013 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""cmake output module
-
-This module is under development and should be considered experimental.
-
-This module produces cmake (2.8.8+) input as its output. One CMakeLists.txt is
-created for each configuration.
-
-This module's original purpose was to support editing in IDEs like KDevelop
-which use CMake for project management. It is also possible to use CMake to
-generate projects for other IDEs such as eclipse cdt and code::blocks. QtCreator
-will convert the CMakeLists.txt to a code::blocks cbp for the editor to read,
-but build using CMake. As a result QtCreator editor is unaware of compiler
-defines. The generated CMakeLists.txt can also be used to build on Linux. There
-is currently no support for building on platforms other than Linux.
-
-The generated CMakeLists.txt should properly compile all projects. However,
-there is a mismatch between gyp and cmake with regard to linking. All attempts
-are made to work around this, but CMake sometimes sees -Wl,--start-group as a
-library and incorrectly repeats it. As a result the output of this generator
-should not be relied on for building.
-
-When using with kdevelop, use version 4.4+. Previous versions of kdevelop will
-not be able to find the header file directories described in the generated
-CMakeLists.txt file.
-"""
-
-import multiprocessing
-import os
-import signal
-import string
-import subprocess
-import gyp.common
-
-generator_default_variables = {
- 'EXECUTABLE_PREFIX': '',
- 'EXECUTABLE_SUFFIX': '',
- 'STATIC_LIB_PREFIX': 'lib',
- 'STATIC_LIB_SUFFIX': '.a',
- 'SHARED_LIB_PREFIX': 'lib',
- 'SHARED_LIB_SUFFIX': '.so',
- 'SHARED_LIB_DIR': '${builddir}/lib.${TOOLSET}',
- 'LIB_DIR': '${obj}.${TOOLSET}',
- 'INTERMEDIATE_DIR': '${obj}.${TOOLSET}/${TARGET}/geni',
- 'SHARED_INTERMEDIATE_DIR': '${obj}/gen',
- 'PRODUCT_DIR': '${builddir}',
- 'RULE_INPUT_PATH': '${RULE_INPUT_PATH}',
- 'RULE_INPUT_DIRNAME': '${RULE_INPUT_DIRNAME}',
- 'RULE_INPUT_NAME': '${RULE_INPUT_NAME}',
- 'RULE_INPUT_ROOT': '${RULE_INPUT_ROOT}',
- 'RULE_INPUT_EXT': '${RULE_INPUT_EXT}',
- 'CONFIGURATION_NAME': '${configuration}',
-}
-
-FULL_PATH_VARS = ('${CMAKE_CURRENT_LIST_DIR}', '${builddir}', '${obj}')
-
-generator_supports_multiple_toolsets = True
-generator_wants_static_library_dependencies_adjusted = True
-
-COMPILABLE_EXTENSIONS = {
- '.c': 'cc',
- '.cc': 'cxx',
- '.cpp': 'cxx',
- '.cxx': 'cxx',
- '.s': 's', # cc
- '.S': 's', # cc
-}
-
-
-def RemovePrefix(a, prefix):
- """Returns 'a' without 'prefix' if it starts with 'prefix'."""
- return a[len(prefix):] if a.startswith(prefix) else a
-
-
-def CalculateVariables(default_variables, params):
- """Calculate additional variables for use in the build (called by gyp)."""
- default_variables.setdefault('OS', gyp.common.GetFlavor(params))
-
-
-def Compilable(filename):
- """Return true if the file is compilable (should be in OBJS)."""
- return any(filename.endswith(e) for e in COMPILABLE_EXTENSIONS)
-
-
-def Linkable(filename):
- """Return true if the file is linkable (should be on the link line)."""
- return filename.endswith('.o')
-
-
-def NormjoinPathForceCMakeSource(base_path, rel_path):
- """Resolves rel_path against base_path and returns the result.
-
- If rel_path is an absolute path it is returned unchanged.
- Otherwise it is resolved against base_path and normalized.
- If the result is a relative path, it is forced to be relative to the
- CMakeLists.txt.
- """
- if os.path.isabs(rel_path):
- return rel_path
- if any([rel_path.startswith(var) for var in FULL_PATH_VARS]):
- return rel_path
- # TODO: do we need to check base_path for absolute variables as well?
- return os.path.join('${CMAKE_CURRENT_LIST_DIR}',
- os.path.normpath(os.path.join(base_path, rel_path)))
-
-
-def NormjoinPath(base_path, rel_path):
- """Resolves rel_path against base_path and returns the result.
- TODO: what is this really used for?
- If rel_path begins with '$' it is returned unchanged.
- Otherwise it is resolved against base_path if relative, then normalized.
- """
- if rel_path.startswith('$') and not rel_path.startswith('${configuration}'):
- return rel_path
- return os.path.normpath(os.path.join(base_path, rel_path))
-
-
-def CMakeStringEscape(a):
- """Escapes the string 'a' for use inside a CMake string.
-
- This means escaping
- '\' otherwise it may be seen as modifying the next character
- '"' otherwise it will end the string
- ';' otherwise the string becomes a list
-
- The following do not need to be escaped
- '#' when the lexer is in string state, this does not start a comment
-
- The following are yet unknown
- '$' generator variables (like ${obj}) must not be escaped,
- but text $ should be escaped
- what is wanted is to know which $ come from generator variables
- """
- return a.replace('\\', '\\\\').replace(';', '\\;').replace('"', '\\"')
-
-
-def SetFileProperty(output, source_name, property_name, values, sep):
- """Given a set of source file, sets the given property on them."""
- output.write('set_source_files_properties(')
- output.write(source_name)
- output.write(' PROPERTIES ')
- output.write(property_name)
- output.write(' "')
- for value in values:
- output.write(CMakeStringEscape(value))
- output.write(sep)
- output.write('")\n')
-
-
-def SetFilesProperty(output, variable, property_name, values, sep):
- """Given a set of source files, sets the given property on them."""
- output.write('set_source_files_properties(')
- WriteVariable(output, variable)
- output.write(' PROPERTIES ')
- output.write(property_name)
- output.write(' "')
- for value in values:
- output.write(CMakeStringEscape(value))
- output.write(sep)
- output.write('")\n')
-
-
-def SetTargetProperty(output, target_name, property_name, values, sep=''):
- """Given a target, sets the given property."""
- output.write('set_target_properties(')
- output.write(target_name)
- output.write(' PROPERTIES ')
- output.write(property_name)
- output.write(' "')
- for value in values:
- output.write(CMakeStringEscape(value))
- output.write(sep)
- output.write('")\n')
-
-
-def SetVariable(output, variable_name, value):
- """Sets a CMake variable."""
- output.write('set(')
- output.write(variable_name)
- output.write(' "')
- output.write(CMakeStringEscape(value))
- output.write('")\n')
-
-
-def SetVariableList(output, variable_name, values):
- """Sets a CMake variable to a list."""
- if not values:
- return SetVariable(output, variable_name, "")
- if len(values) == 1:
- return SetVariable(output, variable_name, values[0])
- output.write('list(APPEND ')
- output.write(variable_name)
- output.write('\n "')
- output.write('"\n "'.join([CMakeStringEscape(value) for value in values]))
- output.write('")\n')
-
-
-def UnsetVariable(output, variable_name):
- """Unsets a CMake variable."""
- output.write('unset(')
- output.write(variable_name)
- output.write(')\n')
-
-
-def WriteVariable(output, variable_name, prepend=None):
- if prepend:
- output.write(prepend)
- output.write('${')
- output.write(variable_name)
- output.write('}')
-
-
-class CMakeTargetType(object):
- def __init__(self, command, modifier, property_modifier):
- self.command = command
- self.modifier = modifier
- self.property_modifier = property_modifier
-
-
-cmake_target_type_from_gyp_target_type = {
- 'executable': CMakeTargetType('add_executable', None, 'RUNTIME'),
- 'static_library': CMakeTargetType('add_library', 'STATIC', 'ARCHIVE'),
- 'shared_library': CMakeTargetType('add_library', 'SHARED', 'LIBRARY'),
- 'loadable_module': CMakeTargetType('add_library', 'MODULE', 'LIBRARY'),
- 'none': CMakeTargetType('add_custom_target', 'SOURCES', None),
-}
-
-
-def StringToCMakeTargetName(a):
- """Converts the given string 'a' to a valid CMake target name.
-
- All invalid characters are replaced by '_'.
- Invalid for cmake: ' ', '/', '(', ')', '"'
- Invalid for make: ':'
- Invalid for unknown reasons but cause failures: '.'
- """
- return a.translate(string.maketrans(' /():."', '_______'))
-
-
-def WriteActions(target_name, actions, extra_sources, extra_deps,
- path_to_gyp, output):
- """Write CMake for the 'actions' in the target.
-
- Args:
- target_name: the name of the CMake target being generated.
- actions: the Gyp 'actions' dict for this target.
- extra_sources: [(<cmake_src>, <src>)] to append with generated source files.
- extra_deps: [<cmake_taget>] to append with generated targets.
- path_to_gyp: relative path from CMakeLists.txt being generated to
- the Gyp file in which the target being generated is defined.
- """
- for action in actions:
- action_name = StringToCMakeTargetName(action['action_name'])
- action_target_name = '%s__%s' % (target_name, action_name)
-
- inputs = action['inputs']
- inputs_name = action_target_name + '__input'
- SetVariableList(output, inputs_name,
- [NormjoinPathForceCMakeSource(path_to_gyp, dep) for dep in inputs])
-
- outputs = action['outputs']
- cmake_outputs = [NormjoinPathForceCMakeSource(path_to_gyp, out)
- for out in outputs]
- outputs_name = action_target_name + '__output'
- SetVariableList(output, outputs_name, cmake_outputs)
-
- # Build up a list of outputs.
- # Collect the output dirs we'll need.
- dirs = set(dir for dir in (os.path.dirname(o) for o in outputs) if dir)
-
- if int(action.get('process_outputs_as_sources', False)):
- extra_sources.extend(zip(cmake_outputs, outputs))
-
- # add_custom_command
- output.write('add_custom_command(OUTPUT ')
- WriteVariable(output, outputs_name)
- output.write('\n')
-
- if len(dirs) > 0:
- for directory in dirs:
- output.write(' COMMAND ${CMAKE_COMMAND} -E make_directory ')
- output.write(directory)
- output.write('\n')
-
- output.write(' COMMAND ')
- output.write(gyp.common.EncodePOSIXShellList(action['action']))
- output.write('\n')
-
- output.write(' DEPENDS ')
- WriteVariable(output, inputs_name)
- output.write('\n')
-
- output.write(' WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/')
- output.write(path_to_gyp)
- output.write('\n')
-
- output.write(' COMMENT ')
- if 'message' in action:
- output.write(action['message'])
- else:
- output.write(action_target_name)
- output.write('\n')
-
- output.write(' VERBATIM\n')
- output.write(')\n')
-
- # add_custom_target
- output.write('add_custom_target(')
- output.write(action_target_name)
- output.write('\n DEPENDS ')
- WriteVariable(output, outputs_name)
- output.write('\n SOURCES ')
- WriteVariable(output, inputs_name)
- output.write('\n)\n')
-
- extra_deps.append(action_target_name)
-
-
-def NormjoinRulePathForceCMakeSource(base_path, rel_path, rule_source):
- if rel_path.startswith(("${RULE_INPUT_PATH}","${RULE_INPUT_DIRNAME}")):
- if any([rule_source.startswith(var) for var in FULL_PATH_VARS]):
- return rel_path
- return NormjoinPathForceCMakeSource(base_path, rel_path)
-
-
-def WriteRules(target_name, rules, extra_sources, extra_deps,
- path_to_gyp, output):
- """Write CMake for the 'rules' in the target.
-
- Args:
- target_name: the name of the CMake target being generated.
- actions: the Gyp 'actions' dict for this target.
- extra_sources: [(<cmake_src>, <src>)] to append with generated source files.
- extra_deps: [<cmake_taget>] to append with generated targets.
- path_to_gyp: relative path from CMakeLists.txt being generated to
- the Gyp file in which the target being generated is defined.
- """
- for rule in rules:
- rule_name = StringToCMakeTargetName(target_name + '__' + rule['rule_name'])
-
- inputs = rule.get('inputs', [])
- inputs_name = rule_name + '__input'
- SetVariableList(output, inputs_name,
- [NormjoinPathForceCMakeSource(path_to_gyp, dep) for dep in inputs])
- outputs = rule['outputs']
- var_outputs = []
-
- for count, rule_source in enumerate(rule.get('rule_sources', [])):
- action_name = rule_name + '_' + str(count)
-
- rule_source_dirname, rule_source_basename = os.path.split(rule_source)
- rule_source_root, rule_source_ext = os.path.splitext(rule_source_basename)
-
- SetVariable(output, 'RULE_INPUT_PATH', rule_source)
- SetVariable(output, 'RULE_INPUT_DIRNAME', rule_source_dirname)
- SetVariable(output, 'RULE_INPUT_NAME', rule_source_basename)
- SetVariable(output, 'RULE_INPUT_ROOT', rule_source_root)
- SetVariable(output, 'RULE_INPUT_EXT', rule_source_ext)
-
- # Build up a list of outputs.
- # Collect the output dirs we'll need.
- dirs = set(dir for dir in (os.path.dirname(o) for o in outputs) if dir)
-
- # Create variables for the output, as 'local' variable will be unset.
- these_outputs = []
- for output_index, out in enumerate(outputs):
- output_name = action_name + '_' + str(output_index)
- SetVariable(output, output_name,
- NormjoinRulePathForceCMakeSource(path_to_gyp, out,
- rule_source))
- if int(rule.get('process_outputs_as_sources', False)):
- extra_sources.append(('${' + output_name + '}', out))
- these_outputs.append('${' + output_name + '}')
- var_outputs.append('${' + output_name + '}')
-
- # add_custom_command
- output.write('add_custom_command(OUTPUT\n')
- for out in these_outputs:
- output.write(' ')
- output.write(out)
- output.write('\n')
-
- for directory in dirs:
- output.write(' COMMAND ${CMAKE_COMMAND} -E make_directory ')
- output.write(directory)
- output.write('\n')
-
- output.write(' COMMAND ')
- output.write(gyp.common.EncodePOSIXShellList(rule['action']))
- output.write('\n')
-
- output.write(' DEPENDS ')
- WriteVariable(output, inputs_name)
- output.write(' ')
- output.write(NormjoinPath(path_to_gyp, rule_source))
- output.write('\n')
-
- # CMAKE_CURRENT_LIST_DIR is where the CMakeLists.txt lives.
- # The cwd is the current build directory.
- output.write(' WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/')
- output.write(path_to_gyp)
- output.write('\n')
-
- output.write(' COMMENT ')
- if 'message' in rule:
- output.write(rule['message'])
- else:
- output.write(action_name)
- output.write('\n')
-
- output.write(' VERBATIM\n')
- output.write(')\n')
-
- UnsetVariable(output, 'RULE_INPUT_PATH')
- UnsetVariable(output, 'RULE_INPUT_DIRNAME')
- UnsetVariable(output, 'RULE_INPUT_NAME')
- UnsetVariable(output, 'RULE_INPUT_ROOT')
- UnsetVariable(output, 'RULE_INPUT_EXT')
-
- # add_custom_target
- output.write('add_custom_target(')
- output.write(rule_name)
- output.write(' DEPENDS\n')
- for out in var_outputs:
- output.write(' ')
- output.write(out)
- output.write('\n')
- output.write('SOURCES ')
- WriteVariable(output, inputs_name)
- output.write('\n')
- for rule_source in rule.get('rule_sources', []):
- output.write(' ')
- output.write(NormjoinPath(path_to_gyp, rule_source))
- output.write('\n')
- output.write(')\n')
-
- extra_deps.append(rule_name)
-
-
-def WriteCopies(target_name, copies, extra_deps, path_to_gyp, output):
- """Write CMake for the 'copies' in the target.
-
- Args:
- target_name: the name of the CMake target being generated.
- actions: the Gyp 'actions' dict for this target.
- extra_deps: [<cmake_taget>] to append with generated targets.
- path_to_gyp: relative path from CMakeLists.txt being generated to
- the Gyp file in which the target being generated is defined.
- """
- copy_name = target_name + '__copies'
-
- # CMake gets upset with custom targets with OUTPUT which specify no output.
- have_copies = any(copy['files'] for copy in copies)
- if not have_copies:
- output.write('add_custom_target(')
- output.write(copy_name)
- output.write(')\n')
- extra_deps.append(copy_name)
- return
-
- class Copy(object):
- def __init__(self, ext, command):
- self.cmake_inputs = []
- self.cmake_outputs = []
- self.gyp_inputs = []
- self.gyp_outputs = []
- self.ext = ext
- self.inputs_name = None
- self.outputs_name = None
- self.command = command
-
- file_copy = Copy('', 'copy')
- dir_copy = Copy('_dirs', 'copy_directory')
-
- for copy in copies:
- files = copy['files']
- destination = copy['destination']
- for src in files:
- path = os.path.normpath(src)
- basename = os.path.split(path)[1]
- dst = os.path.join(destination, basename)
-
- copy = file_copy if os.path.basename(src) else dir_copy
-
- copy.cmake_inputs.append(NormjoinPathForceCMakeSource(path_to_gyp, src))
- copy.cmake_outputs.append(NormjoinPathForceCMakeSource(path_to_gyp, dst))
- copy.gyp_inputs.append(src)
- copy.gyp_outputs.append(dst)
-
- for copy in (file_copy, dir_copy):
- if copy.cmake_inputs:
- copy.inputs_name = copy_name + '__input' + copy.ext
- SetVariableList(output, copy.inputs_name, copy.cmake_inputs)
-
- copy.outputs_name = copy_name + '__output' + copy.ext
- SetVariableList(output, copy.outputs_name, copy.cmake_outputs)
-
- # add_custom_command
- output.write('add_custom_command(\n')
-
- output.write('OUTPUT')
- for copy in (file_copy, dir_copy):
- if copy.outputs_name:
- WriteVariable(output, copy.outputs_name, ' ')
- output.write('\n')
-
- for copy in (file_copy, dir_copy):
- for src, dst in zip(copy.gyp_inputs, copy.gyp_outputs):
- # 'cmake -E copy src dst' will create the 'dst' directory if needed.
- output.write('COMMAND ${CMAKE_COMMAND} -E %s ' % copy.command)
- output.write(src)
- output.write(' ')
- output.write(dst)
- output.write("\n")
-
- output.write('DEPENDS')
- for copy in (file_copy, dir_copy):
- if copy.inputs_name:
- WriteVariable(output, copy.inputs_name, ' ')
- output.write('\n')
-
- output.write('WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/')
- output.write(path_to_gyp)
- output.write('\n')
-
- output.write('COMMENT Copying for ')
- output.write(target_name)
- output.write('\n')
-
- output.write('VERBATIM\n')
- output.write(')\n')
-
- # add_custom_target
- output.write('add_custom_target(')
- output.write(copy_name)
- output.write('\n DEPENDS')
- for copy in (file_copy, dir_copy):
- if copy.outputs_name:
- WriteVariable(output, copy.outputs_name, ' ')
- output.write('\n SOURCES')
- if file_copy.inputs_name:
- WriteVariable(output, file_copy.inputs_name, ' ')
- output.write('\n)\n')
-
- extra_deps.append(copy_name)
-
-
-def CreateCMakeTargetBaseName(qualified_target):
- """This is the name we would like the target to have."""
- _, gyp_target_name, gyp_target_toolset = (
- gyp.common.ParseQualifiedTarget(qualified_target))
- cmake_target_base_name = gyp_target_name
- if gyp_target_toolset and gyp_target_toolset != 'target':
- cmake_target_base_name += '_' + gyp_target_toolset
- return StringToCMakeTargetName(cmake_target_base_name)
-
-
-def CreateCMakeTargetFullName(qualified_target):
- """An unambiguous name for the target."""
- gyp_file, gyp_target_name, gyp_target_toolset = (
- gyp.common.ParseQualifiedTarget(qualified_target))
- cmake_target_full_name = gyp_file + ':' + gyp_target_name
- if gyp_target_toolset and gyp_target_toolset != 'target':
- cmake_target_full_name += '_' + gyp_target_toolset
- return StringToCMakeTargetName(cmake_target_full_name)
-
-
-class CMakeNamer(object):
- """Converts Gyp target names into CMake target names.
-
- CMake requires that target names be globally unique. One way to ensure
- this is to fully qualify the names of the targets. Unfortunatly, this
- ends up with all targets looking like "chrome_chrome_gyp_chrome" instead
- of just "chrome". If this generator were only interested in building, it
- would be possible to fully qualify all target names, then create
- unqualified target names which depend on all qualified targets which
- should have had that name. This is more or less what the 'make' generator
- does with aliases. However, one goal of this generator is to create CMake
- files for use with IDEs, and fully qualified names are not as user
- friendly.
-
- Since target name collision is rare, we do the above only when required.
-
- Toolset variants are always qualified from the base, as this is required for
- building. However, it also makes sense for an IDE, as it is possible for
- defines to be different.
- """
- def __init__(self, target_list):
- self.cmake_target_base_names_conficting = set()
-
- cmake_target_base_names_seen = set()
- for qualified_target in target_list:
- cmake_target_base_name = CreateCMakeTargetBaseName(qualified_target)
-
- if cmake_target_base_name not in cmake_target_base_names_seen:
- cmake_target_base_names_seen.add(cmake_target_base_name)
- else:
- self.cmake_target_base_names_conficting.add(cmake_target_base_name)
-
- def CreateCMakeTargetName(self, qualified_target):
- base_name = CreateCMakeTargetBaseName(qualified_target)
- if base_name in self.cmake_target_base_names_conficting:
- return CreateCMakeTargetFullName(qualified_target)
- return base_name
-
-
-def WriteTarget(namer, qualified_target, target_dicts, build_dir, config_to_use,
- options, generator_flags, all_qualified_targets, output):
-
- # The make generator does this always.
- # TODO: It would be nice to be able to tell CMake all dependencies.
- circular_libs = generator_flags.get('circular', True)
-
- if not generator_flags.get('standalone', False):
- output.write('\n#')
- output.write(qualified_target)
- output.write('\n')
-
- gyp_file, _, _ = gyp.common.ParseQualifiedTarget(qualified_target)
- rel_gyp_file = gyp.common.RelativePath(gyp_file, options.toplevel_dir)
- rel_gyp_dir = os.path.dirname(rel_gyp_file)
-
- # Relative path from build dir to top dir.
- build_to_top = gyp.common.InvertRelativePath(build_dir, options.toplevel_dir)
- # Relative path from build dir to gyp dir.
- build_to_gyp = os.path.join(build_to_top, rel_gyp_dir)
-
- path_from_cmakelists_to_gyp = build_to_gyp
-
- spec = target_dicts.get(qualified_target, {})
- config = spec.get('configurations', {}).get(config_to_use, {})
-
- target_name = spec.get('target_name', '<missing target name>')
- target_type = spec.get('type', '<missing target type>')
- target_toolset = spec.get('toolset')
-
- cmake_target_type = cmake_target_type_from_gyp_target_type.get(target_type)
- if cmake_target_type is None:
- print ('Target %s has unknown target type %s, skipping.' %
- ( target_name, target_type ) )
- return
-
- SetVariable(output, 'TARGET', target_name)
- SetVariable(output, 'TOOLSET', target_toolset)
-
- cmake_target_name = namer.CreateCMakeTargetName(qualified_target)
-
- extra_sources = []
- extra_deps = []
-
- # Actions must come first, since they can generate more OBJs for use below.
- if 'actions' in spec:
- WriteActions(cmake_target_name, spec['actions'], extra_sources, extra_deps,
- path_from_cmakelists_to_gyp, output)
-
- # Rules must be early like actions.
- if 'rules' in spec:
- WriteRules(cmake_target_name, spec['rules'], extra_sources, extra_deps,
- path_from_cmakelists_to_gyp, output)
-
- # Copies
- if 'copies' in spec:
- WriteCopies(cmake_target_name, spec['copies'], extra_deps,
- path_from_cmakelists_to_gyp, output)
-
- # Target and sources
- srcs = spec.get('sources', [])
-
- # Gyp separates the sheep from the goats based on file extensions.
- # A full separation is done here because of flag handing (see below).
- s_sources = []
- c_sources = []
- cxx_sources = []
- linkable_sources = []
- other_sources = []
- for src in srcs:
- _, ext = os.path.splitext(src)
- src_type = COMPILABLE_EXTENSIONS.get(ext, None)
- src_norm_path = NormjoinPath(path_from_cmakelists_to_gyp, src);
-
- if src_type == 's':
- s_sources.append(src_norm_path)
- elif src_type == 'cc':
- c_sources.append(src_norm_path)
- elif src_type == 'cxx':
- cxx_sources.append(src_norm_path)
- elif Linkable(ext):
- linkable_sources.append(src_norm_path)
- else:
- other_sources.append(src_norm_path)
-
- for extra_source in extra_sources:
- src, real_source = extra_source
- _, ext = os.path.splitext(real_source)
- src_type = COMPILABLE_EXTENSIONS.get(ext, None)
-
- if src_type == 's':
- s_sources.append(src)
- elif src_type == 'cc':
- c_sources.append(src)
- elif src_type == 'cxx':
- cxx_sources.append(src)
- elif Linkable(ext):
- linkable_sources.append(src)
- else:
- other_sources.append(src)
-
- s_sources_name = None
- if s_sources:
- s_sources_name = cmake_target_name + '__asm_srcs'
- SetVariableList(output, s_sources_name, s_sources)
-
- c_sources_name = None
- if c_sources:
- c_sources_name = cmake_target_name + '__c_srcs'
- SetVariableList(output, c_sources_name, c_sources)
-
- cxx_sources_name = None
- if cxx_sources:
- cxx_sources_name = cmake_target_name + '__cxx_srcs'
- SetVariableList(output, cxx_sources_name, cxx_sources)
-
- linkable_sources_name = None
- if linkable_sources:
- linkable_sources_name = cmake_target_name + '__linkable_srcs'
- SetVariableList(output, linkable_sources_name, linkable_sources)
-
- other_sources_name = None
- if other_sources:
- other_sources_name = cmake_target_name + '__other_srcs'
- SetVariableList(output, other_sources_name, other_sources)
-
- # CMake gets upset when executable targets provide no sources.
- # http://www.cmake.org/pipermail/cmake/2010-July/038461.html
- dummy_sources_name = None
- has_sources = (s_sources_name or
- c_sources_name or
- cxx_sources_name or
- linkable_sources_name or
- other_sources_name)
- if target_type == 'executable' and not has_sources:
- dummy_sources_name = cmake_target_name + '__dummy_srcs'
- SetVariable(output, dummy_sources_name,
- "${obj}.${TOOLSET}/${TARGET}/genc/dummy.c")
- output.write('if(NOT EXISTS "')
- WriteVariable(output, dummy_sources_name)
- output.write('")\n')
- output.write(' file(WRITE "')
- WriteVariable(output, dummy_sources_name)
- output.write('" "")\n')
- output.write("endif()\n")
-
-
- # CMake is opposed to setting linker directories and considers the practice
- # of setting linker directories dangerous. Instead, it favors the use of
- # find_library and passing absolute paths to target_link_libraries.
- # However, CMake does provide the command link_directories, which adds
- # link directories to targets defined after it is called.
- # As a result, link_directories must come before the target definition.
- # CMake unfortunately has no means of removing entries from LINK_DIRECTORIES.
- library_dirs = config.get('library_dirs')
- if library_dirs is not None:
- output.write('link_directories(')
- for library_dir in library_dirs:
- output.write(' ')
- output.write(NormjoinPath(path_from_cmakelists_to_gyp, library_dir))
- output.write('\n')
- output.write(')\n')
-
- output.write(cmake_target_type.command)
- output.write('(')
- output.write(cmake_target_name)
-
- if cmake_target_type.modifier is not None:
- output.write(' ')
- output.write(cmake_target_type.modifier)
-
- if s_sources_name:
- WriteVariable(output, s_sources_name, ' ')
- if c_sources_name:
- WriteVariable(output, c_sources_name, ' ')
- if cxx_sources_name:
- WriteVariable(output, cxx_sources_name, ' ')
- if linkable_sources_name:
- WriteVariable(output, linkable_sources_name, ' ')
- if other_sources_name:
- WriteVariable(output, other_sources_name, ' ')
- if dummy_sources_name:
- WriteVariable(output, dummy_sources_name, ' ')
-
- output.write(')\n')
-
- # Let CMake know if the 'all' target should depend on this target.
- exclude_from_all = ('TRUE' if qualified_target not in all_qualified_targets
- else 'FALSE')
- SetTargetProperty(output, cmake_target_name,
- 'EXCLUDE_FROM_ALL', exclude_from_all)
- for extra_target_name in extra_deps:
- SetTargetProperty(output, extra_target_name,
- 'EXCLUDE_FROM_ALL', exclude_from_all)
-
- # Output name and location.
- if target_type != 'none':
- # Link as 'C' if there are no other files
- if not c_sources and not cxx_sources:
- SetTargetProperty(output, cmake_target_name, 'LINKER_LANGUAGE', ['C'])
-
- # Mark uncompiled sources as uncompiled.
- if other_sources_name:
- output.write('set_source_files_properties(')
- WriteVariable(output, other_sources_name, '')
- output.write(' PROPERTIES HEADER_FILE_ONLY "TRUE")\n')
-
- # Mark object sources as linkable.
- if linkable_sources_name:
- output.write('set_source_files_properties(')
- WriteVariable(output, other_sources_name, '')
- output.write(' PROPERTIES EXTERNAL_OBJECT "TRUE")\n')
-
- # Output directory
- target_output_directory = spec.get('product_dir')
- if target_output_directory is None:
- if target_type in ('executable', 'loadable_module'):
- target_output_directory = generator_default_variables['PRODUCT_DIR']
- elif target_type == 'shared_library':
- target_output_directory = '${builddir}/lib.${TOOLSET}'
- elif spec.get('standalone_static_library', False):
- target_output_directory = generator_default_variables['PRODUCT_DIR']
- else:
- base_path = gyp.common.RelativePath(os.path.dirname(gyp_file),
- options.toplevel_dir)
- target_output_directory = '${obj}.${TOOLSET}'
- target_output_directory = (
- os.path.join(target_output_directory, base_path))
-
- cmake_target_output_directory = NormjoinPathForceCMakeSource(
- path_from_cmakelists_to_gyp,
- target_output_directory)
- SetTargetProperty(output,
- cmake_target_name,
- cmake_target_type.property_modifier + '_OUTPUT_DIRECTORY',
- cmake_target_output_directory)
-
- # Output name
- default_product_prefix = ''
- default_product_name = target_name
- default_product_ext = ''
- if target_type == 'static_library':
- static_library_prefix = generator_default_variables['STATIC_LIB_PREFIX']
- default_product_name = RemovePrefix(default_product_name,
- static_library_prefix)
- default_product_prefix = static_library_prefix
- default_product_ext = generator_default_variables['STATIC_LIB_SUFFIX']
-
- elif target_type in ('loadable_module', 'shared_library'):
- shared_library_prefix = generator_default_variables['SHARED_LIB_PREFIX']
- default_product_name = RemovePrefix(default_product_name,
- shared_library_prefix)
- default_product_prefix = shared_library_prefix
- default_product_ext = generator_default_variables['SHARED_LIB_SUFFIX']
-
- elif target_type != 'executable':
- print ('ERROR: What output file should be generated?',
- 'type', target_type, 'target', target_name)
-
- product_prefix = spec.get('product_prefix', default_product_prefix)
- product_name = spec.get('product_name', default_product_name)
- product_ext = spec.get('product_extension')
- if product_ext:
- product_ext = '.' + product_ext
- else:
- product_ext = default_product_ext
-
- SetTargetProperty(output, cmake_target_name, 'PREFIX', product_prefix)
- SetTargetProperty(output, cmake_target_name,
- cmake_target_type.property_modifier + '_OUTPUT_NAME',
- product_name)
- SetTargetProperty(output, cmake_target_name, 'SUFFIX', product_ext)
-
- # Make the output of this target referenceable as a source.
- cmake_target_output_basename = product_prefix + product_name + product_ext
- cmake_target_output = os.path.join(cmake_target_output_directory,
- cmake_target_output_basename)
- SetFileProperty(output, cmake_target_output, 'GENERATED', ['TRUE'], '')
-
- # Includes
- includes = config.get('include_dirs')
- if includes:
- # This (target include directories) is what requires CMake 2.8.8
- includes_name = cmake_target_name + '__include_dirs'
- SetVariableList(output, includes_name,
- [NormjoinPathForceCMakeSource(path_from_cmakelists_to_gyp, include)
- for include in includes])
- output.write('set_property(TARGET ')
- output.write(cmake_target_name)
- output.write(' APPEND PROPERTY INCLUDE_DIRECTORIES ')
- WriteVariable(output, includes_name, '')
- output.write(')\n')
-
- # Defines
- defines = config.get('defines')
- if defines is not None:
- SetTargetProperty(output,
- cmake_target_name,
- 'COMPILE_DEFINITIONS',
- defines,
- ';')
-
- # Compile Flags - http://www.cmake.org/Bug/view.php?id=6493
- # CMake currently does not have target C and CXX flags.
- # So, instead of doing...
-
- # cflags_c = config.get('cflags_c')
- # if cflags_c is not None:
- # SetTargetProperty(output, cmake_target_name,
- # 'C_COMPILE_FLAGS', cflags_c, ' ')
-
- # cflags_cc = config.get('cflags_cc')
- # if cflags_cc is not None:
- # SetTargetProperty(output, cmake_target_name,
- # 'CXX_COMPILE_FLAGS', cflags_cc, ' ')
-
- # Instead we must...
- cflags = config.get('cflags', [])
- cflags_c = config.get('cflags_c', [])
- cflags_cxx = config.get('cflags_cc', [])
- if (not cflags_c or not c_sources) and (not cflags_cxx or not cxx_sources):
- SetTargetProperty(output, cmake_target_name, 'COMPILE_FLAGS', cflags, ' ')
-
- elif c_sources and not (s_sources or cxx_sources):
- flags = []
- flags.extend(cflags)
- flags.extend(cflags_c)
- SetTargetProperty(output, cmake_target_name, 'COMPILE_FLAGS', flags, ' ')
-
- elif cxx_sources and not (s_sources or c_sources):
- flags = []
- flags.extend(cflags)
- flags.extend(cflags_cxx)
- SetTargetProperty(output, cmake_target_name, 'COMPILE_FLAGS', flags, ' ')
-
- else:
- # TODO: This is broken, one cannot generally set properties on files,
- # as other targets may require different properties on the same files.
- if s_sources and cflags:
- SetFilesProperty(output, s_sources_name, 'COMPILE_FLAGS', cflags, ' ')
-
- if c_sources and (cflags or cflags_c):
- flags = []
- flags.extend(cflags)
- flags.extend(cflags_c)
- SetFilesProperty(output, c_sources_name, 'COMPILE_FLAGS', flags, ' ')
-
- if cxx_sources and (cflags or cflags_cxx):
- flags = []
- flags.extend(cflags)
- flags.extend(cflags_cxx)
- SetFilesProperty(output, cxx_sources_name, 'COMPILE_FLAGS', flags, ' ')
-
- # Linker flags
- ldflags = config.get('ldflags')
- if ldflags is not None:
- SetTargetProperty(output, cmake_target_name, 'LINK_FLAGS', ldflags, ' ')
-
- # Note on Dependencies and Libraries:
- # CMake wants to handle link order, resolving the link line up front.
- # Gyp does not retain or enforce specifying enough information to do so.
- # So do as other gyp generators and use --start-group and --end-group.
- # Give CMake as little information as possible so that it doesn't mess it up.
-
- # Dependencies
- rawDeps = spec.get('dependencies', [])
-
- static_deps = []
- shared_deps = []
- other_deps = []
- for rawDep in rawDeps:
- dep_cmake_name = namer.CreateCMakeTargetName(rawDep)
- dep_spec = target_dicts.get(rawDep, {})
- dep_target_type = dep_spec.get('type', None)
-
- if dep_target_type == 'static_library':
- static_deps.append(dep_cmake_name)
- elif dep_target_type == 'shared_library':
- shared_deps.append(dep_cmake_name)
- else:
- other_deps.append(dep_cmake_name)
-
- # ensure all external dependencies are complete before internal dependencies
- # extra_deps currently only depend on their own deps, so otherwise run early
- if static_deps or shared_deps or other_deps:
- for extra_dep in extra_deps:
- output.write('add_dependencies(')
- output.write(extra_dep)
- output.write('\n')
- for deps in (static_deps, shared_deps, other_deps):
- for dep in gyp.common.uniquer(deps):
- output.write(' ')
- output.write(dep)
- output.write('\n')
- output.write(')\n')
-
- linkable = target_type in ('executable', 'loadable_module', 'shared_library')
- other_deps.extend(extra_deps)
- if other_deps or (not linkable and (static_deps or shared_deps)):
- output.write('add_dependencies(')
- output.write(cmake_target_name)
- output.write('\n')
- for dep in gyp.common.uniquer(other_deps):
- output.write(' ')
- output.write(dep)
- output.write('\n')
- if not linkable:
- for deps in (static_deps, shared_deps):
- for lib_dep in gyp.common.uniquer(deps):
- output.write(' ')
- output.write(lib_dep)
- output.write('\n')
- output.write(')\n')
-
- # Libraries
- if linkable:
- external_libs = [lib for lib in spec.get('libraries', []) if len(lib) > 0]
- if external_libs or static_deps or shared_deps:
- output.write('target_link_libraries(')
- output.write(cmake_target_name)
- output.write('\n')
- if static_deps:
- write_group = circular_libs and len(static_deps) > 1
- if write_group:
- output.write('-Wl,--start-group\n')
- for dep in gyp.common.uniquer(static_deps):
- output.write(' ')
- output.write(dep)
- output.write('\n')
- if write_group:
- output.write('-Wl,--end-group\n')
- if shared_deps:
- for dep in gyp.common.uniquer(shared_deps):
- output.write(' ')
- output.write(dep)
- output.write('\n')
- if external_libs:
- for lib in gyp.common.uniquer(external_libs):
- output.write(' ')
- output.write(lib)
- output.write('\n')
-
- output.write(')\n')
-
- UnsetVariable(output, 'TOOLSET')
- UnsetVariable(output, 'TARGET')
-
-
-def GenerateOutputForConfig(target_list, target_dicts, data,
- params, config_to_use):
- options = params['options']
- generator_flags = params['generator_flags']
-
- # generator_dir: relative path from pwd to where make puts build files.
- # Makes migrating from make to cmake easier, cmake doesn't put anything here.
- # Each Gyp configuration creates a different CMakeLists.txt file
- # to avoid incompatibilities between Gyp and CMake configurations.
- generator_dir = os.path.relpath(options.generator_output or '.')
-
- # output_dir: relative path from generator_dir to the build directory.
- output_dir = generator_flags.get('output_dir', 'out')
-
- # build_dir: relative path from source root to our output files.
- # e.g. "out/Debug"
- build_dir = os.path.normpath(os.path.join(generator_dir,
- output_dir,
- config_to_use))
-
- toplevel_build = os.path.join(options.toplevel_dir, build_dir)
-
- output_file = os.path.join(toplevel_build, 'CMakeLists.txt')
- gyp.common.EnsureDirExists(output_file)
-
- output = open(output_file, 'w')
- output.write('cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)\n')
- output.write('cmake_policy(VERSION 2.8.8)\n')
-
- gyp_file, project_target, _ = gyp.common.ParseQualifiedTarget(target_list[-1])
- output.write('project(')
- output.write(project_target)
- output.write(')\n')
-
- SetVariable(output, 'configuration', config_to_use)
-
- ar = None
- cc = None
- cxx = None
-
- make_global_settings = data[gyp_file].get('make_global_settings', [])
- build_to_top = gyp.common.InvertRelativePath(build_dir,
- options.toplevel_dir)
- for key, value in make_global_settings:
- if key == 'AR':
- ar = os.path.join(build_to_top, value)
- if key == 'CC':
- cc = os.path.join(build_to_top, value)
- if key == 'CXX':
- cxx = os.path.join(build_to_top, value)
-
- ar = gyp.common.GetEnvironFallback(['AR_target', 'AR'], ar)
- cc = gyp.common.GetEnvironFallback(['CC_target', 'CC'], cc)
- cxx = gyp.common.GetEnvironFallback(['CXX_target', 'CXX'], cxx)
-
- if ar:
- SetVariable(output, 'CMAKE_AR', ar)
- if cc:
- SetVariable(output, 'CMAKE_C_COMPILER', cc)
- if cxx:
- SetVariable(output, 'CMAKE_CXX_COMPILER', cxx)
-
- # The following appears to be as-yet undocumented.
- # http://public.kitware.com/Bug/view.php?id=8392
- output.write('enable_language(ASM)\n')
- # ASM-ATT does not support .S files.
- # output.write('enable_language(ASM-ATT)\n')
-
- if cc:
- SetVariable(output, 'CMAKE_ASM_COMPILER', cc)
-
- SetVariable(output, 'builddir', '${CMAKE_CURRENT_BINARY_DIR}')
- SetVariable(output, 'obj', '${builddir}/obj')
- output.write('\n')
-
- # TODO: Undocumented/unsupported (the CMake Java generator depends on it).
- # CMake by default names the object resulting from foo.c to be foo.c.o.
- # Gyp traditionally names the object resulting from foo.c foo.o.
- # This should be irrelevant, but some targets extract .o files from .a
- # and depend on the name of the extracted .o files.
- output.write('set(CMAKE_C_OUTPUT_EXTENSION_REPLACE 1)\n')
- output.write('set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE 1)\n')
- output.write('\n')
-
- # Force ninja to use rsp files. Otherwise link and ar lines can get too long,
- # resulting in 'Argument list too long' errors.
- output.write('set(CMAKE_NINJA_FORCE_RESPONSE_FILE 1)\n')
- output.write('\n')
-
- namer = CMakeNamer(target_list)
-
- # The list of targets upon which the 'all' target should depend.
- # CMake has it's own implicit 'all' target, one is not created explicitly.
- all_qualified_targets = set()
- for build_file in params['build_files']:
- for qualified_target in gyp.common.AllTargets(target_list,
- target_dicts,
- os.path.normpath(build_file)):
- all_qualified_targets.add(qualified_target)
-
- for qualified_target in target_list:
- WriteTarget(namer, qualified_target, target_dicts, build_dir, config_to_use,
- options, generator_flags, all_qualified_targets, output)
-
- output.close()
-
-
-def PerformBuild(data, configurations, params):
- options = params['options']
- generator_flags = params['generator_flags']
-
- # generator_dir: relative path from pwd to where make puts build files.
- # Makes migrating from make to cmake easier, cmake doesn't put anything here.
- generator_dir = os.path.relpath(options.generator_output or '.')
-
- # output_dir: relative path from generator_dir to the build directory.
- output_dir = generator_flags.get('output_dir', 'out')
-
- for config_name in configurations:
- # build_dir: relative path from source root to our output files.
- # e.g. "out/Debug"
- build_dir = os.path.normpath(os.path.join(generator_dir,
- output_dir,
- config_name))
- arguments = ['cmake', '-G', 'Ninja']
- print 'Generating [%s]: %s' % (config_name, arguments)
- subprocess.check_call(arguments, cwd=build_dir)
-
- arguments = ['ninja', '-C', build_dir]
- print 'Building [%s]: %s' % (config_name, arguments)
- subprocess.check_call(arguments)
-
-
-def CallGenerateOutputForConfig(arglist):
- # Ignore the interrupt signal so that the parent process catches it and
- # kills all multiprocessing children.
- signal.signal(signal.SIGINT, signal.SIG_IGN)
-
- target_list, target_dicts, data, params, config_name = arglist
- GenerateOutputForConfig(target_list, target_dicts, data, params, config_name)
-
-
-def GenerateOutput(target_list, target_dicts, data, params):
- user_config = params.get('generator_flags', {}).get('config', None)
- if user_config:
- GenerateOutputForConfig(target_list, target_dicts, data,
- params, user_config)
- else:
- config_names = target_dicts[target_list[0]]['configurations'].keys()
- if params['parallel']:
- try:
- pool = multiprocessing.Pool(len(config_names))
- arglists = []
- for config_name in config_names:
- arglists.append((target_list, target_dicts, data,
- params, config_name))
- pool.map(CallGenerateOutputForConfig, arglists)
- except KeyboardInterrupt, e:
- pool.terminate()
- raise e
- else:
- for config_name in config_names:
- GenerateOutputForConfig(target_list, target_dicts, data,
- params, config_name)
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
deleted file mode 100644
index 160eafe..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import collections
-import os
-import gyp
-import gyp.common
-import gyp.msvs_emulation
-import json
-import sys
-
-generator_supports_multiple_toolsets = True
-
-generator_wants_static_library_dependencies_adjusted = False
-
-generator_filelist_paths = {
-}
-
-generator_default_variables = {
-}
-for dirname in ['INTERMEDIATE_DIR', 'SHARED_INTERMEDIATE_DIR', 'PRODUCT_DIR',
- 'LIB_DIR', 'SHARED_LIB_DIR']:
- # Some gyp steps fail if these are empty(!).
- generator_default_variables[dirname] = 'dir'
-for unused in ['RULE_INPUT_PATH', 'RULE_INPUT_ROOT', 'RULE_INPUT_NAME',
- 'RULE_INPUT_DIRNAME', 'RULE_INPUT_EXT',
- 'EXECUTABLE_PREFIX', 'EXECUTABLE_SUFFIX',
- 'STATIC_LIB_PREFIX', 'STATIC_LIB_SUFFIX',
- 'SHARED_LIB_PREFIX', 'SHARED_LIB_SUFFIX',
- 'CONFIGURATION_NAME']:
- generator_default_variables[unused] = ''
-
-
-def CalculateVariables(default_variables, params):
- generator_flags = params.get('generator_flags', {})
- for key, val in generator_flags.items():
- default_variables.setdefault(key, val)
- default_variables.setdefault('OS', gyp.common.GetFlavor(params))
-
- flavor = gyp.common.GetFlavor(params)
- if flavor =='win':
- # Copy additional generator configuration data from VS, which is shared
- # by the Windows Ninja generator.
- import gyp.generator.msvs as msvs_generator
- generator_additional_non_configuration_keys = getattr(msvs_generator,
- 'generator_additional_non_configuration_keys', [])
- generator_additional_path_sections = getattr(msvs_generator,
- 'generator_additional_path_sections', [])
-
- gyp.msvs_emulation.CalculateCommonVariables(default_variables, params)
-
-
-def CalculateGeneratorInputInfo(params):
- """Calculate the generator specific info that gets fed to input (called by
- gyp)."""
- generator_flags = params.get('generator_flags', {})
- if generator_flags.get('adjust_static_libraries', False):
- global generator_wants_static_library_dependencies_adjusted
- generator_wants_static_library_dependencies_adjusted = True
-
- toplevel = params['options'].toplevel_dir
- generator_dir = os.path.relpath(params['options'].generator_output or '.')
- # output_dir: relative path from generator_dir to the build directory.
- output_dir = generator_flags.get('output_dir', 'out')
- qualified_out_dir = os.path.normpath(os.path.join(
- toplevel, generator_dir, output_dir, 'gypfiles'))
- global generator_filelist_paths
- generator_filelist_paths = {
- 'toplevel': toplevel,
- 'qualified_out_dir': qualified_out_dir,
- }
-
-def GenerateOutput(target_list, target_dicts, data, params):
- # Map of target -> list of targets it depends on.
- edges = {}
-
- # Queue of targets to visit.
- targets_to_visit = target_list[:]
-
- while len(targets_to_visit) > 0:
- target = targets_to_visit.pop()
- if target in edges:
- continue
- edges[target] = []
-
- for dep in target_dicts[target].get('dependencies', []):
- edges[target].append(dep)
- targets_to_visit.append(dep)
-
- try:
- filepath = params['generator_flags']['output_dir']
- except KeyError:
- filepath = '.'
- filename = os.path.join(filepath, 'dump.json')
- f = open(filename, 'w')
- json.dump(edges, f)
- f.close()
- print 'Wrote json to %s.' % filename
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
deleted file mode 100644
index 3544347..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
+++ /dev/null
@@ -1,425 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""GYP backend that generates Eclipse CDT settings files.
-
-This backend DOES NOT generate Eclipse CDT projects. Instead, it generates XML
-files that can be imported into an Eclipse CDT project. The XML file contains a
-list of include paths and symbols (i.e. defines).
-
-Because a full .cproject definition is not created by this generator, it's not
-possible to properly define the include dirs and symbols for each file
-individually. Instead, one set of includes/symbols is generated for the entire
-project. This works fairly well (and is a vast improvement in general), but may
-still result in a few indexer issues here and there.
-
-This generator has no automated tests, so expect it to be broken.
-"""
-
-from xml.sax.saxutils import escape
-import os.path
-import subprocess
-import gyp
-import gyp.common
-import gyp.msvs_emulation
-import shlex
-import xml.etree.cElementTree as ET
-
-generator_wants_static_library_dependencies_adjusted = False
-
-generator_default_variables = {
-}
-
-for dirname in ['INTERMEDIATE_DIR', 'PRODUCT_DIR', 'LIB_DIR', 'SHARED_LIB_DIR']:
- # Some gyp steps fail if these are empty(!), so we convert them to variables
- generator_default_variables[dirname] = '$' + dirname
-
-for unused in ['RULE_INPUT_PATH', 'RULE_INPUT_ROOT', 'RULE_INPUT_NAME',
- 'RULE_INPUT_DIRNAME', 'RULE_INPUT_EXT',
- 'EXECUTABLE_PREFIX', 'EXECUTABLE_SUFFIX',
- 'STATIC_LIB_PREFIX', 'STATIC_LIB_SUFFIX',
- 'SHARED_LIB_PREFIX', 'SHARED_LIB_SUFFIX',
- 'CONFIGURATION_NAME']:
- generator_default_variables[unused] = ''
-
-# Include dirs will occasionally use the SHARED_INTERMEDIATE_DIR variable as
-# part of the path when dealing with generated headers. This value will be
-# replaced dynamically for each configuration.
-generator_default_variables['SHARED_INTERMEDIATE_DIR'] = \
- '$SHARED_INTERMEDIATE_DIR'
-
-
-def CalculateVariables(default_variables, params):
- generator_flags = params.get('generator_flags', {})
- for key, val in generator_flags.items():
- default_variables.setdefault(key, val)
- flavor = gyp.common.GetFlavor(params)
- default_variables.setdefault('OS', flavor)
- if flavor == 'win':
- # Copy additional generator configuration data from VS, which is shared
- # by the Eclipse generator.
- import gyp.generator.msvs as msvs_generator
- generator_additional_non_configuration_keys = getattr(msvs_generator,
- 'generator_additional_non_configuration_keys', [])
- generator_additional_path_sections = getattr(msvs_generator,
- 'generator_additional_path_sections', [])
-
- gyp.msvs_emulation.CalculateCommonVariables(default_variables, params)
-
-
-def CalculateGeneratorInputInfo(params):
- """Calculate the generator specific info that gets fed to input (called by
- gyp)."""
- generator_flags = params.get('generator_flags', {})
- if generator_flags.get('adjust_static_libraries', False):
- global generator_wants_static_library_dependencies_adjusted
- generator_wants_static_library_dependencies_adjusted = True
-
-
-def GetAllIncludeDirectories(target_list, target_dicts,
- shared_intermediate_dirs, config_name, params,
- compiler_path):
- """Calculate the set of include directories to be used.
-
- Returns:
- A list including all the include_dir's specified for every target followed
- by any include directories that were added as cflag compiler options.
- """
-
- gyp_includes_set = set()
- compiler_includes_list = []
-
- # Find compiler's default include dirs.
- if compiler_path:
- command = shlex.split(compiler_path)
- command.extend(['-E', '-xc++', '-v', '-'])
- proc = subprocess.Popen(args=command, stdin=subprocess.PIPE,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- output = proc.communicate()[1]
- # Extract the list of include dirs from the output, which has this format:
- # ...
- # #include "..." search starts here:
- # #include <...> search starts here:
- # /usr/include/c++/4.6
- # /usr/local/include
- # End of search list.
- # ...
- in_include_list = False
- for line in output.splitlines():
- if line.startswith('#include'):
- in_include_list = True
- continue
- if line.startswith('End of search list.'):
- break
- if in_include_list:
- include_dir = line.strip()
- if include_dir not in compiler_includes_list:
- compiler_includes_list.append(include_dir)
-
- flavor = gyp.common.GetFlavor(params)
- if flavor == 'win':
- generator_flags = params.get('generator_flags', {})
- for target_name in target_list:
- target = target_dicts[target_name]
- if config_name in target['configurations']:
- config = target['configurations'][config_name]
-
- # Look for any include dirs that were explicitly added via cflags. This
- # may be done in gyp files to force certain includes to come at the end.
- # TODO(jgreenwald): Change the gyp files to not abuse cflags for this, and
- # remove this.
- if flavor == 'win':
- msvs_settings = gyp.msvs_emulation.MsvsSettings(target, generator_flags)
- cflags = msvs_settings.GetCflags(config_name)
- else:
- cflags = config['cflags']
- for cflag in cflags:
- if cflag.startswith('-I'):
- include_dir = cflag[2:]
- if include_dir not in compiler_includes_list:
- compiler_includes_list.append(include_dir)
-
- # Find standard gyp include dirs.
- if config.has_key('include_dirs'):
- include_dirs = config['include_dirs']
- for shared_intermediate_dir in shared_intermediate_dirs:
- for include_dir in include_dirs:
- include_dir = include_dir.replace('$SHARED_INTERMEDIATE_DIR',
- shared_intermediate_dir)
- if not os.path.isabs(include_dir):
- base_dir = os.path.dirname(target_name)
-
- include_dir = base_dir + '/' + include_dir
- include_dir = os.path.abspath(include_dir)
-
- gyp_includes_set.add(include_dir)
-
- # Generate a list that has all the include dirs.
- all_includes_list = list(gyp_includes_set)
- all_includes_list.sort()
- for compiler_include in compiler_includes_list:
- if not compiler_include in gyp_includes_set:
- all_includes_list.append(compiler_include)
-
- # All done.
- return all_includes_list
-
-
-def GetCompilerPath(target_list, data, options):
- """Determine a command that can be used to invoke the compiler.
-
- Returns:
- If this is a gyp project that has explicit make settings, try to determine
- the compiler from that. Otherwise, see if a compiler was specified via the
- CC_target environment variable.
- """
- # First, see if the compiler is configured in make's settings.
- build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0])
- make_global_settings_dict = data[build_file].get('make_global_settings', {})
- for key, value in make_global_settings_dict:
- if key in ['CC', 'CXX']:
- return os.path.join(options.toplevel_dir, value)
-
- # Check to see if the compiler was specified as an environment variable.
- for key in ['CC_target', 'CC', 'CXX']:
- compiler = os.environ.get(key)
- if compiler:
- return compiler
-
- return 'gcc'
-
-
-def GetAllDefines(target_list, target_dicts, data, config_name, params,
- compiler_path):
- """Calculate the defines for a project.
-
- Returns:
- A dict that includes explict defines declared in gyp files along with all of
- the default defines that the compiler uses.
- """
-
- # Get defines declared in the gyp files.
- all_defines = {}
- flavor = gyp.common.GetFlavor(params)
- if flavor == 'win':
- generator_flags = params.get('generator_flags', {})
- for target_name in target_list:
- target = target_dicts[target_name]
-
- if flavor == 'win':
- msvs_settings = gyp.msvs_emulation.MsvsSettings(target, generator_flags)
- extra_defines = msvs_settings.GetComputedDefines(config_name)
- else:
- extra_defines = []
- if config_name in target['configurations']:
- config = target['configurations'][config_name]
- target_defines = config['defines']
- else:
- target_defines = []
- for define in target_defines + extra_defines:
- split_define = define.split('=', 1)
- if len(split_define) == 1:
- split_define.append('1')
- if split_define[0].strip() in all_defines:
- # Already defined
- continue
- all_defines[split_define[0].strip()] = split_define[1].strip()
- # Get default compiler defines (if possible).
- if flavor == 'win':
- return all_defines # Default defines already processed in the loop above.
- if compiler_path:
- command = shlex.split(compiler_path)
- command.extend(['-E', '-dM', '-'])
- cpp_proc = subprocess.Popen(args=command, cwd='.',
- stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- cpp_output = cpp_proc.communicate()[0]
- cpp_lines = cpp_output.split('\n')
- for cpp_line in cpp_lines:
- if not cpp_line.strip():
- continue
- cpp_line_parts = cpp_line.split(' ', 2)
- key = cpp_line_parts[1]
- if len(cpp_line_parts) >= 3:
- val = cpp_line_parts[2]
- else:
- val = '1'
- all_defines[key] = val
-
- return all_defines
-
-
-def WriteIncludePaths(out, eclipse_langs, include_dirs):
- """Write the includes section of a CDT settings export file."""
-
- out.write(' <section name="org.eclipse.cdt.internal.ui.wizards.' \
- 'settingswizards.IncludePaths">\n')
- out.write(' <language name="holder for library settings"></language>\n')
- for lang in eclipse_langs:
- out.write(' <language name="%s">\n' % lang)
- for include_dir in include_dirs:
- out.write(' <includepath workspace_path="false">%s</includepath>\n' %
- include_dir)
- out.write(' </language>\n')
- out.write(' </section>\n')
-
-
-def WriteMacros(out, eclipse_langs, defines):
- """Write the macros section of a CDT settings export file."""
-
- out.write(' <section name="org.eclipse.cdt.internal.ui.wizards.' \
- 'settingswizards.Macros">\n')
- out.write(' <language name="holder for library settings"></language>\n')
- for lang in eclipse_langs:
- out.write(' <language name="%s">\n' % lang)
- for key in sorted(defines.iterkeys()):
- out.write(' <macro><name>%s</name><value>%s</value></macro>\n' %
- (escape(key), escape(defines[key])))
- out.write(' </language>\n')
- out.write(' </section>\n')
-
-
-def GenerateOutputForConfig(target_list, target_dicts, data, params,
- config_name):
- options = params['options']
- generator_flags = params.get('generator_flags', {})
-
- # build_dir: relative path from source root to our output files.
- # e.g. "out/Debug"
- build_dir = os.path.join(generator_flags.get('output_dir', 'out'),
- config_name)
-
- toplevel_build = os.path.join(options.toplevel_dir, build_dir)
- # Ninja uses out/Debug/gen while make uses out/Debug/obj/gen as the
- # SHARED_INTERMEDIATE_DIR. Include both possible locations.
- shared_intermediate_dirs = [os.path.join(toplevel_build, 'obj', 'gen'),
- os.path.join(toplevel_build, 'gen')]
-
- GenerateCdtSettingsFile(target_list,
- target_dicts,
- data,
- params,
- config_name,
- os.path.join(toplevel_build,
- 'eclipse-cdt-settings.xml'),
- options,
- shared_intermediate_dirs)
- GenerateClasspathFile(target_list,
- target_dicts,
- options.toplevel_dir,
- toplevel_build,
- os.path.join(toplevel_build,
- 'eclipse-classpath.xml'))
-
-
-def GenerateCdtSettingsFile(target_list, target_dicts, data, params,
- config_name, out_name, options,
- shared_intermediate_dirs):
- gyp.common.EnsureDirExists(out_name)
- with open(out_name, 'w') as out:
- out.write('<?xml version="1.0" encoding="UTF-8"?>\n')
- out.write('<cdtprojectproperties>\n')
-
- eclipse_langs = ['C++ Source File', 'C Source File', 'Assembly Source File',
- 'GNU C++', 'GNU C', 'Assembly']
- compiler_path = GetCompilerPath(target_list, data, options)
- include_dirs = GetAllIncludeDirectories(target_list, target_dicts,
- shared_intermediate_dirs,
- config_name, params, compiler_path)
- WriteIncludePaths(out, eclipse_langs, include_dirs)
- defines = GetAllDefines(target_list, target_dicts, data, config_name,
- params, compiler_path)
- WriteMacros(out, eclipse_langs, defines)
-
- out.write('</cdtprojectproperties>\n')
-
-
-def GenerateClasspathFile(target_list, target_dicts, toplevel_dir,
- toplevel_build, out_name):
- '''Generates a classpath file suitable for symbol navigation and code
- completion of Java code (such as in Android projects) by finding all
- .java and .jar files used as action inputs.'''
- gyp.common.EnsureDirExists(out_name)
- result = ET.Element('classpath')
-
- def AddElements(kind, paths):
- # First, we need to normalize the paths so they are all relative to the
- # toplevel dir.
- rel_paths = set()
- for path in paths:
- if os.path.isabs(path):
- rel_paths.add(os.path.relpath(path, toplevel_dir))
- else:
- rel_paths.add(path)
-
- for path in sorted(rel_paths):
- entry_element = ET.SubElement(result, 'classpathentry')
- entry_element.set('kind', kind)
- entry_element.set('path', path)
-
- AddElements('lib', GetJavaJars(target_list, target_dicts, toplevel_dir))
- AddElements('src', GetJavaSourceDirs(target_list, target_dicts, toplevel_dir))
- # Include the standard JRE container and a dummy out folder
- AddElements('con', ['org.eclipse.jdt.launching.JRE_CONTAINER'])
- # Include a dummy out folder so that Eclipse doesn't use the default /bin
- # folder in the root of the project.
- AddElements('output', [os.path.join(toplevel_build, '.eclipse-java-build')])
-
- ET.ElementTree(result).write(out_name)
-
-
-def GetJavaJars(target_list, target_dicts, toplevel_dir):
- '''Generates a sequence of all .jars used as inputs.'''
- for target_name in target_list:
- target = target_dicts[target_name]
- for action in target.get('actions', []):
- for input_ in action['inputs']:
- if os.path.splitext(input_)[1] == '.jar' and not input_.startswith('$'):
- if os.path.isabs(input_):
- yield input_
- else:
- yield os.path.join(os.path.dirname(target_name), input_)
-
-
-def GetJavaSourceDirs(target_list, target_dicts, toplevel_dir):
- '''Generates a sequence of all likely java package root directories.'''
- for target_name in target_list:
- target = target_dicts[target_name]
- for action in target.get('actions', []):
- for input_ in action['inputs']:
- if (os.path.splitext(input_)[1] == '.java' and
- not input_.startswith('$')):
- dir_ = os.path.dirname(os.path.join(os.path.dirname(target_name),
- input_))
- # If there is a parent 'src' or 'java' folder, navigate up to it -
- # these are canonical package root names in Chromium. This will
- # break if 'src' or 'java' exists in the package structure. This
- # could be further improved by inspecting the java file for the
- # package name if this proves to be too fragile in practice.
- parent_search = dir_
- while os.path.basename(parent_search) not in ['src', 'java']:
- parent_search, _ = os.path.split(parent_search)
- if not parent_search or parent_search == toplevel_dir:
- # Didn't find a known root, just return the original path
- yield dir_
- break
- else:
- yield parent_search
-
-
-def GenerateOutput(target_list, target_dicts, data, params):
- """Generate an XML settings file that can be imported into a CDT project."""
-
- if params['options'].generator_output:
- raise NotImplementedError("--generator_output not implemented for eclipse")
-
- user_config = params.get('generator_flags', {}).get('config', None)
- if user_config:
- GenerateOutputForConfig(target_list, target_dicts, data, params,
- user_config)
- else:
- config_names = target_dicts[target_list[0]]['configurations'].keys()
- for config_name in config_names:
- GenerateOutputForConfig(target_list, target_dicts, data, params,
- config_name)
-
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py
deleted file mode 100644
index 3efdb99..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py
+++ /dev/null
@@ -1,94 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""gypd output module
-
-This module produces gyp input as its output. Output files are given the
-.gypd extension to avoid overwriting the .gyp files that they are generated
-from. Internal references to .gyp files (such as those found in
-"dependencies" sections) are not adjusted to point to .gypd files instead;
-unlike other paths, which are relative to the .gyp or .gypd file, such paths
-are relative to the directory from which gyp was run to create the .gypd file.
-
-This generator module is intended to be a sample and a debugging aid, hence
-the "d" for "debug" in .gypd. It is useful to inspect the results of the
-various merges, expansions, and conditional evaluations performed by gyp
-and to see a representation of what would be fed to a generator module.
-
-It's not advisable to rename .gypd files produced by this module to .gyp,
-because they will have all merges, expansions, and evaluations already
-performed and the relevant constructs not present in the output; paths to
-dependencies may be wrong; and various sections that do not belong in .gyp
-files such as such as "included_files" and "*_excluded" will be present.
-Output will also be stripped of comments. This is not intended to be a
-general-purpose gyp pretty-printer; for that, you probably just want to
-run "pprint.pprint(eval(open('source.gyp').read()))", which will still strip
-comments but won't do all of the other things done to this module's output.
-
-The specific formatting of the output generated by this module is subject
-to change.
-"""
-
-
-import gyp.common
-import errno
-import os
-import pprint
-
-
-# These variables should just be spit back out as variable references.
-_generator_identity_variables = [
- 'CONFIGURATION_NAME',
- 'EXECUTABLE_PREFIX',
- 'EXECUTABLE_SUFFIX',
- 'INTERMEDIATE_DIR',
- 'LIB_DIR',
- 'PRODUCT_DIR',
- 'RULE_INPUT_ROOT',
- 'RULE_INPUT_DIRNAME',
- 'RULE_INPUT_EXT',
- 'RULE_INPUT_NAME',
- 'RULE_INPUT_PATH',
- 'SHARED_INTERMEDIATE_DIR',
- 'SHARED_LIB_DIR',
- 'SHARED_LIB_PREFIX',
- 'SHARED_LIB_SUFFIX',
- 'STATIC_LIB_PREFIX',
- 'STATIC_LIB_SUFFIX',
-]
-
-# gypd doesn't define a default value for OS like many other generator
-# modules. Specify "-D OS=whatever" on the command line to provide a value.
-generator_default_variables = {
-}
-
-# gypd supports multiple toolsets
-generator_supports_multiple_toolsets = True
-
-# TODO(mark): This always uses <, which isn't right. The input module should
-# notify the generator to tell it which phase it is operating in, and this
-# module should use < for the early phase and then switch to > for the late
-# phase. Bonus points for carrying @ back into the output too.
-for v in _generator_identity_variables:
- generator_default_variables[v] = '<(%s)' % v
-
-
-def GenerateOutput(target_list, target_dicts, data, params):
- output_files = {}
- for qualified_target in target_list:
- [input_file, target] = \
- gyp.common.ParseQualifiedTarget(qualified_target)[0:2]
-
- if input_file[-4:] != '.gyp':
- continue
- input_file_stem = input_file[:-4]
- output_file = input_file_stem + params['options'].suffix + '.gypd'
-
- if not output_file in output_files:
- output_files[output_file] = input_file
-
- for output_file, input_file in output_files.iteritems():
- output = open(output_file, 'w')
- pprint.pprint(data[input_file], output)
- output.close()
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
deleted file mode 100644
index bd405f4..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""gypsh output module
-
-gypsh is a GYP shell. It's not really a generator per se. All it does is
-fire up an interactive Python session with a few local variables set to the
-variables passed to the generator. Like gypd, it's intended as a debugging
-aid, to facilitate the exploration of .gyp structures after being processed
-by the input module.
-
-The expected usage is "gyp -f gypsh -D OS=desired_os".
-"""
-
-
-import code
-import sys
-
-
-# All of this stuff about generator variables was lovingly ripped from gypd.py.
-# That module has a much better description of what's going on and why.
-_generator_identity_variables = [
- 'EXECUTABLE_PREFIX',
- 'EXECUTABLE_SUFFIX',
- 'INTERMEDIATE_DIR',
- 'PRODUCT_DIR',
- 'RULE_INPUT_ROOT',
- 'RULE_INPUT_DIRNAME',
- 'RULE_INPUT_EXT',
- 'RULE_INPUT_NAME',
- 'RULE_INPUT_PATH',
- 'SHARED_INTERMEDIATE_DIR',
-]
-
-generator_default_variables = {
-}
-
-for v in _generator_identity_variables:
- generator_default_variables[v] = '<(%s)' % v
-
-
-def GenerateOutput(target_list, target_dicts, data, params):
- locals = {
- 'target_list': target_list,
- 'target_dicts': target_dicts,
- 'data': data,
- }
-
- # Use a banner that looks like the stock Python one and like what
- # code.interact uses by default, but tack on something to indicate what
- # locals are available, and identify gypsh.
- banner='Python %s on %s\nlocals.keys() = %s\ngypsh' % \
- (sys.version, sys.platform, repr(sorted(locals.keys())))
-
- code.interact(banner, local=locals)
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
deleted file mode 100644
index fe801b7..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
+++ /dev/null
@@ -1,2263 +0,0 @@
-# Copyright (c) 2013 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Notes:
-#
-# This is all roughly based on the Makefile system used by the Linux
-# kernel, but is a non-recursive make -- we put the entire dependency
-# graph in front of make and let it figure it out.
-#
-# The code below generates a separate .mk file for each target, but
-# all are sourced by the top-level Makefile. This means that all
-# variables in .mk-files clobber one another. Be careful to use :=
-# where appropriate for immediate evaluation, and similarly to watch
-# that you're not relying on a variable value to last beween different
-# .mk files.
-#
-# TODOs:
-#
-# Global settings and utility functions are currently stuffed in the
-# toplevel Makefile. It may make sense to generate some .mk files on
-# the side to keep the files readable.
-
-import os
-import re
-import sys
-import subprocess
-import gyp
-import gyp.common
-import gyp.xcode_emulation
-from gyp.common import GetEnvironFallback
-from gyp.common import GypError
-
-import hashlib
-
-generator_default_variables = {
- 'EXECUTABLE_PREFIX': '',
- 'EXECUTABLE_SUFFIX': '',
- 'STATIC_LIB_PREFIX': 'lib',
- 'SHARED_LIB_PREFIX': 'lib',
- 'STATIC_LIB_SUFFIX': '.a',
- 'INTERMEDIATE_DIR': '$(obj).$(TOOLSET)/$(TARGET)/geni',
- 'SHARED_INTERMEDIATE_DIR': '$(obj)/gen',
- 'PRODUCT_DIR': '$(builddir)',
- 'RULE_INPUT_ROOT': '%(INPUT_ROOT)s', # This gets expanded by Python.
- 'RULE_INPUT_DIRNAME': '%(INPUT_DIRNAME)s', # This gets expanded by Python.
- 'RULE_INPUT_PATH': '$(abspath $<)',
- 'RULE_INPUT_EXT': '$(suffix $<)',
- 'RULE_INPUT_NAME': '$(notdir $<)',
- 'CONFIGURATION_NAME': '$(BUILDTYPE)',
-}
-
-# Make supports multiple toolsets
-generator_supports_multiple_toolsets = True
-
-# Request sorted dependencies in the order from dependents to dependencies.
-generator_wants_sorted_dependencies = False
-
-# Placates pylint.
-generator_additional_non_configuration_keys = []
-generator_additional_path_sections = []
-generator_extra_sources_for_rules = []
-generator_filelist_paths = None
-
-
-def CalculateVariables(default_variables, params):
- """Calculate additional variables for use in the build (called by gyp)."""
- flavor = gyp.common.GetFlavor(params)
- if flavor == 'mac':
- default_variables.setdefault('OS', 'mac')
- default_variables.setdefault('SHARED_LIB_SUFFIX', '.dylib')
- default_variables.setdefault('SHARED_LIB_DIR',
- generator_default_variables['PRODUCT_DIR'])
- default_variables.setdefault('LIB_DIR',
- generator_default_variables['PRODUCT_DIR'])
-
- # Copy additional generator configuration data from Xcode, which is shared
- # by the Mac Make generator.
- import gyp.generator.xcode as xcode_generator
- global generator_additional_non_configuration_keys
- generator_additional_non_configuration_keys = getattr(xcode_generator,
- 'generator_additional_non_configuration_keys', [])
- global generator_additional_path_sections
- generator_additional_path_sections = getattr(xcode_generator,
- 'generator_additional_path_sections', [])
- global generator_extra_sources_for_rules
- generator_extra_sources_for_rules = getattr(xcode_generator,
- 'generator_extra_sources_for_rules', [])
- COMPILABLE_EXTENSIONS.update({'.m': 'objc', '.mm' : 'objcxx'})
- else:
- operating_system = flavor
- if flavor == 'android':
- operating_system = 'linux' # Keep this legacy behavior for now.
- default_variables.setdefault('OS', operating_system)
- if flavor == 'aix':
- default_variables.setdefault('SHARED_LIB_SUFFIX', '.a')
- else:
- default_variables.setdefault('SHARED_LIB_SUFFIX', '.so')
- default_variables.setdefault('SHARED_LIB_DIR','$(builddir)/lib.$(TOOLSET)')
- default_variables.setdefault('LIB_DIR', '$(obj).$(TOOLSET)')
-
-
-def CalculateGeneratorInputInfo(params):
- """Calculate the generator specific info that gets fed to input (called by
- gyp)."""
- generator_flags = params.get('generator_flags', {})
- android_ndk_version = generator_flags.get('android_ndk_version', None)
- # Android NDK requires a strict link order.
- if android_ndk_version:
- global generator_wants_sorted_dependencies
- generator_wants_sorted_dependencies = True
-
- output_dir = params['options'].generator_output or \
- params['options'].toplevel_dir
- builddir_name = generator_flags.get('output_dir', 'out')
- qualified_out_dir = os.path.normpath(os.path.join(
- output_dir, builddir_name, 'gypfiles'))
-
- global generator_filelist_paths
- generator_filelist_paths = {
- 'toplevel': params['options'].toplevel_dir,
- 'qualified_out_dir': qualified_out_dir,
- }
-
-
-# The .d checking code below uses these functions:
-# wildcard, sort, foreach, shell, wordlist
-# wildcard can handle spaces, the rest can't.
-# Since I could find no way to make foreach work with spaces in filenames
-# correctly, the .d files have spaces replaced with another character. The .d
-# file for
-# Chromium\ Framework.framework/foo
-# is for example
-# out/Release/.deps/out/Release/Chromium?Framework.framework/foo
-# This is the replacement character.
-SPACE_REPLACEMENT = '?'
-
-
-LINK_COMMANDS_LINUX = """\
-quiet_cmd_alink = AR($(TOOLSET)) $@
-cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
-
-quiet_cmd_alink_thin = AR($(TOOLSET)) $@
-cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^)
-
-# Due to circular dependencies between libraries :(, we wrap the
-# special "figure out circular dependencies" flags around the entire
-# input list during linking.
-quiet_cmd_link = LINK($(TOOLSET)) $@
-cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) $(LIBS) -Wl,--end-group
-
-# We support two kinds of shared objects (.so):
-# 1) shared_library, which is just bundling together many dependent libraries
-# into a link line.
-# 2) loadable_module, which is generating a module intended for dlopen().
-#
-# They differ only slightly:
-# In the former case, we want to package all dependent code into the .so.
-# In the latter case, we want to package just the API exposed by the
-# outermost module.
-# This means shared_library uses --whole-archive, while loadable_module doesn't.
-# (Note that --whole-archive is incompatible with the --start-group used in
-# normal linking.)
-
-# Other shared-object link notes:
-# - Set SONAME to the library filename so our binaries don't reference
-# the local, absolute paths used on the link command-line.
-quiet_cmd_solink = SOLINK($(TOOLSET)) $@
-cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS)
-
-quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
-cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS)
-"""
-
-LINK_COMMANDS_MAC = """\
-quiet_cmd_alink = LIBTOOL-STATIC $@
-cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^)
-
-quiet_cmd_link = LINK($(TOOLSET)) $@
-cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS)
-
-quiet_cmd_solink = SOLINK($(TOOLSET)) $@
-cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS)
-
-quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
-cmd_solink_module = $(LINK.$(TOOLSET)) -bundle $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
-"""
-
-LINK_COMMANDS_ANDROID = """\
-quiet_cmd_alink = AR($(TOOLSET)) $@
-cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
-
-quiet_cmd_alink_thin = AR($(TOOLSET)) $@
-cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^)
-
-# Due to circular dependencies between libraries :(, we wrap the
-# special "figure out circular dependencies" flags around the entire
-# input list during linking.
-quiet_cmd_link = LINK($(TOOLSET)) $@
-quiet_cmd_link_host = LINK($(TOOLSET)) $@
-cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS)
-cmd_link_host = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
-
-# Other shared-object link notes:
-# - Set SONAME to the library filename so our binaries don't reference
-# the local, absolute paths used on the link command-line.
-quiet_cmd_solink = SOLINK($(TOOLSET)) $@
-cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS)
-
-quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
-cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS)
-quiet_cmd_solink_module_host = SOLINK_MODULE($(TOOLSET)) $@
-cmd_solink_module_host = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
-"""
-
-
-LINK_COMMANDS_AIX = """\
-quiet_cmd_alink = AR($(TOOLSET)) $@
-cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) -X32_64 crs $@ $(filter %.o,$^)
-
-quiet_cmd_alink_thin = AR($(TOOLSET)) $@
-cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) -X32_64 crs $@ $(filter %.o,$^)
-
-quiet_cmd_link = LINK($(TOOLSET)) $@
-cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
-
-quiet_cmd_solink = SOLINK($(TOOLSET)) $@
-cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
-
-quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
-cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
-"""
-
-
-LINK_COMMANDS_OS390 = """\
-quiet_cmd_alink = AR($(TOOLSET)) $@
-cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
-
-quiet_cmd_alink_thin = AR($(TOOLSET)) $@
-cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^)
-
-quiet_cmd_link = LINK($(TOOLSET)) $@
-cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
-
-quiet_cmd_solink = SOLINK($(TOOLSET)) $@
-cmd_solink = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) -Wl,DLL
-
-quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
-cmd_solink_module = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) -Wl,DLL
-
-"""
-
-
-# Header of toplevel Makefile.
-# This should go into the build tree, but it's easier to keep it here for now.
-SHARED_HEADER = ("""\
-# We borrow heavily from the kernel build setup, though we are simpler since
-# we don't have Kconfig tweaking settings on us.
-
-# The implicit make rules have it looking for RCS files, among other things.
-# We instead explicitly write all the rules we care about.
-# It's even quicker (saves ~200ms) to pass -r on the command line.
-MAKEFLAGS=-r
-
-# The source directory tree.
-srcdir := %(srcdir)s
-abs_srcdir := $(abspath $(srcdir))
-
-# The name of the builddir.
-builddir_name ?= %(builddir)s
-
-# The V=1 flag on command line makes us verbosely print command lines.
-ifdef V
- quiet=
-else
- quiet=quiet_
-endif
-
-# Specify BUILDTYPE=Release on the command line for a release build.
-BUILDTYPE ?= %(default_configuration)s
-
-# Directory all our build output goes into.
-# Note that this must be two directories beneath src/ for unit tests to pass,
-# as they reach into the src/ directory for data with relative paths.
-builddir ?= $(builddir_name)/$(BUILDTYPE)
-abs_builddir := $(abspath $(builddir))
-depsdir := $(builddir)/.deps
-
-# Object output directory.
-obj := $(builddir)/obj
-abs_obj := $(abspath $(obj))
-
-# We build up a list of every single one of the targets so we can slurp in the
-# generated dependency rule Makefiles in one pass.
-all_deps :=
-
-%(make_global_settings)s
-
-CC.target ?= %(CC.target)s
-CFLAGS.target ?= $(CPPFLAGS) $(CFLAGS)
-CXX.target ?= %(CXX.target)s
-CXXFLAGS.target ?= $(CPPFLAGS) $(CXXFLAGS)
-LINK.target ?= %(LINK.target)s
-LDFLAGS.target ?= $(LDFLAGS)
-AR.target ?= $(AR)
-
-# C++ apps need to be linked with g++.
-LINK ?= $(CXX.target)
-
-# TODO(evan): move all cross-compilation logic to gyp-time so we don't need
-# to replicate this environment fallback in make as well.
-CC.host ?= %(CC.host)s
-CFLAGS.host ?= $(CPPFLAGS_host) $(CFLAGS_host)
-CXX.host ?= %(CXX.host)s
-CXXFLAGS.host ?= $(CPPFLAGS_host) $(CXXFLAGS_host)
-LINK.host ?= %(LINK.host)s
-LDFLAGS.host ?=
-AR.host ?= %(AR.host)s
-
-# Define a dir function that can handle spaces.
-# http://www.gnu.org/software/make/manual/make.html#Syntax-of-Functions
-# "leading spaces cannot appear in the text of the first argument as written.
-# These characters can be put into the argument value by variable substitution."
-empty :=
-space := $(empty) $(empty)
-
-# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
-replace_spaces = $(subst $(space),""" + SPACE_REPLACEMENT + """,$1)
-unreplace_spaces = $(subst """ + SPACE_REPLACEMENT + """,$(space),$1)
-dirx = $(call unreplace_spaces,$(dir $(call replace_spaces,$1)))
-
-# Flags to make gcc output dependency info. Note that you need to be
-# careful here to use the flags that ccache and distcc can understand.
-# We write to a dep file on the side first and then rename at the end
-# so we can't end up with a broken dep file.
-depfile = $(depsdir)/$(call replace_spaces,$@).d
-DEPFLAGS = %(makedep_args)s -MF $(depfile).raw
-
-# We have to fixup the deps output in a few ways.
-# (1) the file output should mention the proper .o file.
-# ccache or distcc lose the path to the target, so we convert a rule of
-# the form:
-# foobar.o: DEP1 DEP2
-# into
-# path/to/foobar.o: DEP1 DEP2
-# (2) we want missing files not to cause us to fail to build.
-# We want to rewrite
-# foobar.o: DEP1 DEP2 \\
-# DEP3
-# to
-# DEP1:
-# DEP2:
-# DEP3:
-# so if the files are missing, they're just considered phony rules.
-# We have to do some pretty insane escaping to get those backslashes
-# and dollar signs past make, the shell, and sed at the same time.
-# Doesn't work with spaces, but that's fine: .d files have spaces in
-# their names replaced with other characters."""
-r"""
-define fixup_dep
-# The depfile may not exist if the input file didn't have any #includes.
-touch $(depfile).raw
-# Fixup path as in (1).
-sed -e "s|^$(notdir $@)|$@|" $(depfile).raw >> $(depfile)
-# Add extra rules as in (2).
-# We remove slashes and replace spaces with new lines;
-# remove blank lines;
-# delete the first line and append a colon to the remaining lines.
-sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\
- grep -v '^$$' |\
- sed -e 1d -e 's|$$|:|' \
- >> $(depfile)
-rm $(depfile).raw
-endef
-"""
-"""
-# Command definitions:
-# - cmd_foo is the actual command to run;
-# - quiet_cmd_foo is the brief-output summary of the command.
-
-quiet_cmd_cc = CC($(TOOLSET)) $@
-cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $@ $<
-
-quiet_cmd_cxx = CXX($(TOOLSET)) $@
-cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $<
-%(extra_commands)s
-quiet_cmd_touch = TOUCH $@
-cmd_touch = touch $@
-
-quiet_cmd_copy = COPY $@
-# send stderr to /dev/null to ignore messages when linking directories.
-cmd_copy = rm -rf "$@" && cp %(copy_archive_args)s "$<" "$@"
-
-%(link_commands)s
-"""
-
-r"""
-# Define an escape_quotes function to escape single quotes.
-# This allows us to handle quotes properly as long as we always use
-# use single quotes and escape_quotes.
-escape_quotes = $(subst ','\'',$(1))
-# This comment is here just to include a ' to unconfuse syntax highlighting.
-# Define an escape_vars function to escape '$' variable syntax.
-# This allows us to read/write command lines with shell variables (e.g.
-# $LD_LIBRARY_PATH), without triggering make substitution.
-escape_vars = $(subst $$,$$$$,$(1))
-# Helper that expands to a shell command to echo a string exactly as it is in
-# make. This uses printf instead of echo because printf's behaviour with respect
-# to escape sequences is more portable than echo's across different shells
-# (e.g., dash, bash).
-exact_echo = printf '%%s\n' '$(call escape_quotes,$(1))'
-"""
-"""
-# Helper to compare the command we're about to run against the command
-# we logged the last time we ran the command. Produces an empty
-# string (false) when the commands match.
-# Tricky point: Make has no string-equality test function.
-# The kernel uses the following, but it seems like it would have false
-# positives, where one string reordered its arguments.
-# arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \\
-# $(filter-out $(cmd_$@), $(cmd_$(1))))
-# We instead substitute each for the empty string into the other, and
-# say they're equal if both substitutions produce the empty string.
-# .d files contain """ + SPACE_REPLACEMENT + \
- """ instead of spaces, take that into account.
-command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\\
- $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1))))
-
-# Helper that is non-empty when a prerequisite changes.
-# Normally make does this implicitly, but we force rules to always run
-# so we can check their command lines.
-# $? -- new prerequisites
-# $| -- order-only dependencies
-prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?))
-
-# Helper that executes all postbuilds until one fails.
-define do_postbuilds
- @E=0;\\
- for p in $(POSTBUILDS); do\\
- eval $$p;\\
- E=$$?;\\
- if [ $$E -ne 0 ]; then\\
- break;\\
- fi;\\
- done;\\
- if [ $$E -ne 0 ]; then\\
- rm -rf "$@";\\
- exit $$E;\\
- fi
-endef
-
-# do_cmd: run a command via the above cmd_foo names, if necessary.
-# Should always run for a given target to handle command-line changes.
-# Second argument, if non-zero, makes it do asm/C/C++ dependency munging.
-# Third argument, if non-zero, makes it do POSTBUILDS processing.
-# Note: We intentionally do NOT call dirx for depfile, since it contains """ + \
- SPACE_REPLACEMENT + """ for
-# spaces already and dirx strips the """ + SPACE_REPLACEMENT + \
- """ characters.
-define do_cmd
-$(if $(or $(command_changed),$(prereq_changed)),
- @$(call exact_echo, $($(quiet)cmd_$(1)))
- @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))"
- $(if $(findstring flock,$(word %(flock_index)d,$(cmd_$1))),
- @$(cmd_$(1))
- @echo " $(quiet_cmd_$(1)): Finished",
- @$(cmd_$(1))
- )
- @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile)
- @$(if $(2),$(fixup_dep))
- $(if $(and $(3), $(POSTBUILDS)),
- $(call do_postbuilds)
- )
-)
-endef
-
-# Declare the "%(default_target)s" target first so it is the default,
-# even though we don't have the deps yet.
-.PHONY: %(default_target)s
-%(default_target)s:
-
-# make looks for ways to re-generate included makefiles, but in our case, we
-# don't have a direct way. Explicitly telling make that it has nothing to do
-# for them makes it go faster.
-%%.d: ;
-
-# Use FORCE_DO_CMD to force a target to run. Should be coupled with
-# do_cmd.
-.PHONY: FORCE_DO_CMD
-FORCE_DO_CMD:
-
-""")
-
-SHARED_HEADER_MAC_COMMANDS = """
-quiet_cmd_objc = CXX($(TOOLSET)) $@
-cmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $<
-
-quiet_cmd_objcxx = CXX($(TOOLSET)) $@
-cmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $<
-
-# Commands for precompiled header files.
-quiet_cmd_pch_c = CXX($(TOOLSET)) $@
-cmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $<
-quiet_cmd_pch_cc = CXX($(TOOLSET)) $@
-cmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $<
-quiet_cmd_pch_m = CXX($(TOOLSET)) $@
-cmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $<
-quiet_cmd_pch_mm = CXX($(TOOLSET)) $@
-cmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $<
-
-# gyp-mac-tool is written next to the root Makefile by gyp.
-# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd
-# already.
-quiet_cmd_mac_tool = MACTOOL $(4) $<
-cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@"
-
-quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@
-cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4)
-
-quiet_cmd_infoplist = INFOPLIST $@
-cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@"
-"""
-
-
-def WriteRootHeaderSuffixRules(writer):
- extensions = sorted(COMPILABLE_EXTENSIONS.keys(), key=str.lower)
-
- writer.write('# Suffix rules, putting all outputs into $(obj).\n')
- for ext in extensions:
- writer.write('$(obj).$(TOOLSET)/%%.o: $(srcdir)/%%%s FORCE_DO_CMD\n' % ext)
- writer.write('\t@$(call do_cmd,%s,1)\n' % COMPILABLE_EXTENSIONS[ext])
-
- writer.write('\n# Try building from generated source, too.\n')
- for ext in extensions:
- writer.write(
- '$(obj).$(TOOLSET)/%%.o: $(obj).$(TOOLSET)/%%%s FORCE_DO_CMD\n' % ext)
- writer.write('\t@$(call do_cmd,%s,1)\n' % COMPILABLE_EXTENSIONS[ext])
- writer.write('\n')
- for ext in extensions:
- writer.write('$(obj).$(TOOLSET)/%%.o: $(obj)/%%%s FORCE_DO_CMD\n' % ext)
- writer.write('\t@$(call do_cmd,%s,1)\n' % COMPILABLE_EXTENSIONS[ext])
- writer.write('\n')
-
-
-SHARED_HEADER_SUFFIX_RULES_COMMENT1 = ("""\
-# Suffix rules, putting all outputs into $(obj).
-""")
-
-
-SHARED_HEADER_SUFFIX_RULES_COMMENT2 = ("""\
-# Try building from generated source, too.
-""")
-
-
-SHARED_FOOTER = """\
-# "all" is a concatenation of the "all" targets from all the included
-# sub-makefiles. This is just here to clarify.
-all:
-
-# Add in dependency-tracking rules. $(all_deps) is the list of every single
-# target in our tree. Only consider the ones with .d (dependency) info:
-d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d))
-ifneq ($(d_files),)
- include $(d_files)
-endif
-"""
-
-header = """\
-# This file is generated by gyp; do not edit.
-
-"""
-
-# Maps every compilable file extension to the do_cmd that compiles it.
-COMPILABLE_EXTENSIONS = {
- '.c': 'cc',
- '.cc': 'cxx',
- '.cpp': 'cxx',
- '.cxx': 'cxx',
- '.s': 'cc',
- '.S': 'cc',
-}
-
-def Compilable(filename):
- """Return true if the file is compilable (should be in OBJS)."""
- for res in (filename.endswith(e) for e in COMPILABLE_EXTENSIONS):
- if res:
- return True
- return False
-
-
-def Linkable(filename):
- """Return true if the file is linkable (should be on the link line)."""
- return filename.endswith('.o')
-
-
-def Target(filename):
- """Translate a compilable filename to its .o target."""
- return os.path.splitext(filename)[0] + '.o'
-
-
-def EscapeShellArgument(s):
- """Quotes an argument so that it will be interpreted literally by a POSIX
- shell. Taken from
- http://stackoverflow.com/questions/35817/whats-the-best-way-to-escape-ossystem-calls-in-python
- """
- return "'" + s.replace("'", "'\\''") + "'"
-
-
-def EscapeMakeVariableExpansion(s):
- """Make has its own variable expansion syntax using $. We must escape it for
- string to be interpreted literally."""
- return s.replace('$', '$$')
-
-
-def EscapeCppDefine(s):
- """Escapes a CPP define so that it will reach the compiler unaltered."""
- s = EscapeShellArgument(s)
- s = EscapeMakeVariableExpansion(s)
- # '#' characters must be escaped even embedded in a string, else Make will
- # treat it as the start of a comment.
- return s.replace('#', r'\#')
-
-
-def QuoteIfNecessary(string):
- """TODO: Should this ideally be replaced with one or more of the above
- functions?"""
- if '"' in string:
- string = '"' + string.replace('"', '\\"') + '"'
- return string
-
-
-def StringToMakefileVariable(string):
- """Convert a string to a value that is acceptable as a make variable name."""
- return re.sub('[^a-zA-Z0-9_]', '_', string)
-
-
-srcdir_prefix = ''
-def Sourceify(path):
- """Convert a path to its source directory form."""
- if '$(' in path:
- return path
- if os.path.isabs(path):
- return path
- return srcdir_prefix + path
-
-
-def QuoteSpaces(s, quote=r'\ '):
- return s.replace(' ', quote)
-
-def SourceifyAndQuoteSpaces(path):
- """Convert a path to its source directory form and quote spaces."""
- return QuoteSpaces(Sourceify(path))
-
-# TODO: Avoid code duplication with _ValidateSourcesForMSVSProject in msvs.py.
-def _ValidateSourcesForOSX(spec, all_sources):
- """Makes sure if duplicate basenames are not specified in the source list.
-
- Arguments:
- spec: The target dictionary containing the properties of the target.
- """
- if spec.get('type', None) != 'static_library':
- return
-
- basenames = {}
- for source in all_sources:
- name, ext = os.path.splitext(source)
- is_compiled_file = ext in [
- '.c', '.cc', '.cpp', '.cxx', '.m', '.mm', '.s', '.S']
- if not is_compiled_file:
- continue
- basename = os.path.basename(name) # Don't include extension.
- basenames.setdefault(basename, []).append(source)
-
- error = ''
- for basename, files in basenames.iteritems():
- if len(files) > 1:
- error += ' %s: %s\n' % (basename, ' '.join(files))
-
- if error:
- print('static library %s has several files with the same basename:\n' %
- spec['target_name'] + error + 'libtool on OS X will generate' +
- ' warnings for them.')
- raise GypError('Duplicate basenames in sources section, see list above')
-
-
-# Map from qualified target to path to output.
-target_outputs = {}
-# Map from qualified target to any linkable output. A subset
-# of target_outputs. E.g. when mybinary depends on liba, we want to
-# include liba in the linker line; when otherbinary depends on
-# mybinary, we just want to build mybinary first.
-target_link_deps = {}
-
-
-class MakefileWriter(object):
- """MakefileWriter packages up the writing of one target-specific foobar.mk.
-
- Its only real entry point is Write(), and is mostly used for namespacing.
- """
-
- def __init__(self, generator_flags, flavor):
- self.generator_flags = generator_flags
- self.flavor = flavor
-
- self.suffix_rules_srcdir = {}
- self.suffix_rules_objdir1 = {}
- self.suffix_rules_objdir2 = {}
-
- # Generate suffix rules for all compilable extensions.
- for ext in COMPILABLE_EXTENSIONS.keys():
- # Suffix rules for source folder.
- self.suffix_rules_srcdir.update({ext: ("""\
-$(obj).$(TOOLSET)/$(TARGET)/%%.o: $(srcdir)/%%%s FORCE_DO_CMD
- @$(call do_cmd,%s,1)
-""" % (ext, COMPILABLE_EXTENSIONS[ext]))})
-
- # Suffix rules for generated source files.
- self.suffix_rules_objdir1.update({ext: ("""\
-$(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj).$(TOOLSET)/%%%s FORCE_DO_CMD
- @$(call do_cmd,%s,1)
-""" % (ext, COMPILABLE_EXTENSIONS[ext]))})
- self.suffix_rules_objdir2.update({ext: ("""\
-$(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
- @$(call do_cmd,%s,1)
-""" % (ext, COMPILABLE_EXTENSIONS[ext]))})
-
-
- def Write(self, qualified_target, base_path, output_filename, spec, configs,
- part_of_all):
- """The main entry point: writes a .mk file for a single target.
-
- Arguments:
- qualified_target: target we're generating
- base_path: path relative to source root we're building in, used to resolve
- target-relative paths
- output_filename: output .mk file name to write
- spec, configs: gyp info
- part_of_all: flag indicating this target is part of 'all'
- """
- gyp.common.EnsureDirExists(output_filename)
-
- self.fp = open(output_filename, 'w')
-
- self.fp.write(header)
-
- self.qualified_target = qualified_target
- self.path = base_path
- self.target = spec['target_name']
- self.type = spec['type']
- self.toolset = spec['toolset']
-
- self.is_mac_bundle = gyp.xcode_emulation.IsMacBundle(self.flavor, spec)
- if self.flavor == 'mac':
- self.xcode_settings = gyp.xcode_emulation.XcodeSettings(spec)
- else:
- self.xcode_settings = None
-
- deps, link_deps = self.ComputeDeps(spec)
-
- # Some of the generation below can add extra output, sources, or
- # link dependencies. All of the out params of the functions that
- # follow use names like extra_foo.
- extra_outputs = []
- extra_sources = []
- extra_link_deps = []
- extra_mac_bundle_resources = []
- mac_bundle_deps = []
-
- if self.is_mac_bundle:
- self.output = self.ComputeMacBundleOutput(spec)
- self.output_binary = self.ComputeMacBundleBinaryOutput(spec)
- else:
- self.output = self.output_binary = self.ComputeOutput(spec)
-
- self.is_standalone_static_library = bool(
- spec.get('standalone_static_library', 0))
- self._INSTALLABLE_TARGETS = ('executable', 'loadable_module',
- 'shared_library')
- if (self.is_standalone_static_library or
- self.type in self._INSTALLABLE_TARGETS):
- self.alias = os.path.basename(self.output)
- install_path = self._InstallableTargetInstallPath()
- else:
- self.alias = self.output
- install_path = self.output
-
- self.WriteLn("TOOLSET := " + self.toolset)
- self.WriteLn("TARGET := " + self.target)
-
- # Actions must come first, since they can generate more OBJs for use below.
- if 'actions' in spec:
- self.WriteActions(spec['actions'], extra_sources, extra_outputs,
- extra_mac_bundle_resources, part_of_all)
-
- # Rules must be early like actions.
- if 'rules' in spec:
- self.WriteRules(spec['rules'], extra_sources, extra_outputs,
- extra_mac_bundle_resources, part_of_all)
-
- if 'copies' in spec:
- self.WriteCopies(spec['copies'], extra_outputs, part_of_all)
-
- # Bundle resources.
- if self.is_mac_bundle:
- all_mac_bundle_resources = (
- spec.get('mac_bundle_resources', []) + extra_mac_bundle_resources)
- self.WriteMacBundleResources(all_mac_bundle_resources, mac_bundle_deps)
- self.WriteMacInfoPlist(mac_bundle_deps)
-
- # Sources.
- all_sources = spec.get('sources', []) + extra_sources
- if all_sources:
- if self.flavor == 'mac':
- # libtool on OS X generates warnings for duplicate basenames in the same
- # target.
- _ValidateSourcesForOSX(spec, all_sources)
- self.WriteSources(
- configs, deps, all_sources, extra_outputs,
- extra_link_deps, part_of_all,
- gyp.xcode_emulation.MacPrefixHeader(
- self.xcode_settings, lambda p: Sourceify(self.Absolutify(p)),
- self.Pchify))
- sources = filter(Compilable, all_sources)
- if sources:
- self.WriteLn(SHARED_HEADER_SUFFIX_RULES_COMMENT1)
- extensions = set([os.path.splitext(s)[1] for s in sources])
- for ext in extensions:
- if ext in self.suffix_rules_srcdir:
- self.WriteLn(self.suffix_rules_srcdir[ext])
- self.WriteLn(SHARED_HEADER_SUFFIX_RULES_COMMENT2)
- for ext in extensions:
- if ext in self.suffix_rules_objdir1:
- self.WriteLn(self.suffix_rules_objdir1[ext])
- for ext in extensions:
- if ext in self.suffix_rules_objdir2:
- self.WriteLn(self.suffix_rules_objdir2[ext])
- self.WriteLn('# End of this set of suffix rules')
-
- # Add dependency from bundle to bundle binary.
- if self.is_mac_bundle:
- mac_bundle_deps.append(self.output_binary)
-
- self.WriteTarget(spec, configs, deps, extra_link_deps + link_deps,
- mac_bundle_deps, extra_outputs, part_of_all)
-
- # Update global list of target outputs, used in dependency tracking.
- target_outputs[qualified_target] = install_path
-
- # Update global list of link dependencies.
- if self.type in ('static_library', 'shared_library'):
- target_link_deps[qualified_target] = self.output_binary
-
- # Currently any versions have the same effect, but in future the behavior
- # could be different.
- if self.generator_flags.get('android_ndk_version', None):
- self.WriteAndroidNdkModuleRule(self.target, all_sources, link_deps)
-
- self.fp.close()
-
-
- def WriteSubMake(self, output_filename, makefile_path, targets, build_dir):
- """Write a "sub-project" Makefile.
-
- This is a small, wrapper Makefile that calls the top-level Makefile to build
- the targets from a single gyp file (i.e. a sub-project).
-
- Arguments:
- output_filename: sub-project Makefile name to write
- makefile_path: path to the top-level Makefile
- targets: list of "all" targets for this sub-project
- build_dir: build output directory, relative to the sub-project
- """
- gyp.common.EnsureDirExists(output_filename)
- self.fp = open(output_filename, 'w')
- self.fp.write(header)
- # For consistency with other builders, put sub-project build output in the
- # sub-project dir (see test/subdirectory/gyptest-subdir-all.py).
- self.WriteLn('export builddir_name ?= %s' %
- os.path.join(os.path.dirname(output_filename), build_dir))
- self.WriteLn('.PHONY: all')
- self.WriteLn('all:')
- if makefile_path:
- makefile_path = ' -C ' + makefile_path
- self.WriteLn('\t$(MAKE)%s %s' % (makefile_path, ' '.join(targets)))
- self.fp.close()
-
-
- def WriteActions(self, actions, extra_sources, extra_outputs,
- extra_mac_bundle_resources, part_of_all):
- """Write Makefile code for any 'actions' from the gyp input.
-
- extra_sources: a list that will be filled in with newly generated source
- files, if any
- extra_outputs: a list that will be filled in with any outputs of these
- actions (used to make other pieces dependent on these
- actions)
- part_of_all: flag indicating this target is part of 'all'
- """
- env = self.GetSortedXcodeEnv()
- for action in actions:
- name = StringToMakefileVariable('%s_%s' % (self.qualified_target,
- action['action_name']))
- self.WriteLn('### Rules for action "%s":' % action['action_name'])
- inputs = action['inputs']
- outputs = action['outputs']
-
- # Build up a list of outputs.
- # Collect the output dirs we'll need.
- dirs = set()
- for out in outputs:
- dir = os.path.split(out)[0]
- if dir:
- dirs.add(dir)
- if int(action.get('process_outputs_as_sources', False)):
- extra_sources += outputs
- if int(action.get('process_outputs_as_mac_bundle_resources', False)):
- extra_mac_bundle_resources += outputs
-
- # Write the actual command.
- action_commands = action['action']
- if self.flavor == 'mac':
- action_commands = [gyp.xcode_emulation.ExpandEnvVars(command, env)
- for command in action_commands]
- command = gyp.common.EncodePOSIXShellList(action_commands)
- if 'message' in action:
- self.WriteLn('quiet_cmd_%s = ACTION %s $@' % (name, action['message']))
- else:
- self.WriteLn('quiet_cmd_%s = ACTION %s $@' % (name, name))
- if len(dirs) > 0:
- command = 'mkdir -p %s' % ' '.join(dirs) + '; ' + command
-
- cd_action = 'cd %s; ' % Sourceify(self.path or '.')
-
- # command and cd_action get written to a toplevel variable called
- # cmd_foo. Toplevel variables can't handle things that change per
- # makefile like $(TARGET), so hardcode the target.
- command = command.replace('$(TARGET)', self.target)
- cd_action = cd_action.replace('$(TARGET)', self.target)
-
- # Set LD_LIBRARY_PATH in case the action runs an executable from this
- # build which links to shared libs from this build.
- # actions run on the host, so they should in theory only use host
- # libraries, but until everything is made cross-compile safe, also use
- # target libraries.
- # TODO(piman): when everything is cross-compile safe, remove lib.target
- self.WriteLn('cmd_%s = LD_LIBRARY_PATH=$(builddir)/lib.host:'
- '$(builddir)/lib.target:$$LD_LIBRARY_PATH; '
- 'export LD_LIBRARY_PATH; '
- '%s%s'
- % (name, cd_action, command))
- self.WriteLn()
- outputs = map(self.Absolutify, outputs)
- # The makefile rules are all relative to the top dir, but the gyp actions
- # are defined relative to their containing dir. This replaces the obj
- # variable for the action rule with an absolute version so that the output
- # goes in the right place.
- # Only write the 'obj' and 'builddir' rules for the "primary" output (:1);
- # it's superfluous for the "extra outputs", and this avoids accidentally
- # writing duplicate dummy rules for those outputs.
- # Same for environment.
- self.WriteLn("%s: obj := $(abs_obj)" % QuoteSpaces(outputs[0]))
- self.WriteLn("%s: builddir := $(abs_builddir)" % QuoteSpaces(outputs[0]))
- self.WriteSortedXcodeEnv(outputs[0], self.GetSortedXcodeEnv())
-
- for input in inputs:
- assert ' ' not in input, (
- "Spaces in action input filenames not supported (%s)" % input)
- for output in outputs:
- assert ' ' not in output, (
- "Spaces in action output filenames not supported (%s)" % output)
-
- # See the comment in WriteCopies about expanding env vars.
- outputs = [gyp.xcode_emulation.ExpandEnvVars(o, env) for o in outputs]
- inputs = [gyp.xcode_emulation.ExpandEnvVars(i, env) for i in inputs]
-
- self.WriteDoCmd(outputs, map(Sourceify, map(self.Absolutify, inputs)),
- part_of_all=part_of_all, command=name)
-
- # Stuff the outputs in a variable so we can refer to them later.
- outputs_variable = 'action_%s_outputs' % name
- self.WriteLn('%s := %s' % (outputs_variable, ' '.join(outputs)))
- extra_outputs.append('$(%s)' % outputs_variable)
- self.WriteLn()
-
- self.WriteLn()
-
-
- def WriteRules(self, rules, extra_sources, extra_outputs,
- extra_mac_bundle_resources, part_of_all):
- """Write Makefile code for any 'rules' from the gyp input.
-
- extra_sources: a list that will be filled in with newly generated source
- files, if any
- extra_outputs: a list that will be filled in with any outputs of these
- rules (used to make other pieces dependent on these rules)
- part_of_all: flag indicating this target is part of 'all'
- """
- env = self.GetSortedXcodeEnv()
- for rule in rules:
- name = StringToMakefileVariable('%s_%s' % (self.qualified_target,
- rule['rule_name']))
- count = 0
- self.WriteLn('### Generated for rule %s:' % name)
-
- all_outputs = []
-
- for rule_source in rule.get('rule_sources', []):
- dirs = set()
- (rule_source_dirname, rule_source_basename) = os.path.split(rule_source)
- (rule_source_root, rule_source_ext) = \
- os.path.splitext(rule_source_basename)
-
- outputs = [self.ExpandInputRoot(out, rule_source_root,
- rule_source_dirname)
- for out in rule['outputs']]
-
- for out in outputs:
- dir = os.path.dirname(out)
- if dir:
- dirs.add(dir)
- if int(rule.get('process_outputs_as_sources', False)):
- extra_sources += outputs
- if int(rule.get('process_outputs_as_mac_bundle_resources', False)):
- extra_mac_bundle_resources += outputs
- inputs = map(Sourceify, map(self.Absolutify, [rule_source] +
- rule.get('inputs', [])))
- actions = ['$(call do_cmd,%s_%d)' % (name, count)]
-
- if name == 'resources_grit':
- # HACK: This is ugly. Grit intentionally doesn't touch the
- # timestamp of its output file when the file doesn't change,
- # which is fine in hash-based dependency systems like scons
- # and forge, but not kosher in the make world. After some
- # discussion, hacking around it here seems like the least
- # amount of pain.
- actions += ['@touch --no-create $@']
-
- # See the comment in WriteCopies about expanding env vars.
- outputs = [gyp.xcode_emulation.ExpandEnvVars(o, env) for o in outputs]
- inputs = [gyp.xcode_emulation.ExpandEnvVars(i, env) for i in inputs]
-
- outputs = map(self.Absolutify, outputs)
- all_outputs += outputs
- # Only write the 'obj' and 'builddir' rules for the "primary" output
- # (:1); it's superfluous for the "extra outputs", and this avoids
- # accidentally writing duplicate dummy rules for those outputs.
- self.WriteLn('%s: obj := $(abs_obj)' % outputs[0])
- self.WriteLn('%s: builddir := $(abs_builddir)' % outputs[0])
- self.WriteMakeRule(outputs, inputs, actions,
- command="%s_%d" % (name, count))
- # Spaces in rule filenames are not supported, but rule variables have
- # spaces in them (e.g. RULE_INPUT_PATH expands to '$(abspath $<)').
- # The spaces within the variables are valid, so remove the variables
- # before checking.
- variables_with_spaces = re.compile(r'\$\([^ ]* \$<\)')
- for output in outputs:
- output = re.sub(variables_with_spaces, '', output)
- assert ' ' not in output, (
- "Spaces in rule filenames not yet supported (%s)" % output)
- self.WriteLn('all_deps += %s' % ' '.join(outputs))
-
- action = [self.ExpandInputRoot(ac, rule_source_root,
- rule_source_dirname)
- for ac in rule['action']]
- mkdirs = ''
- if len(dirs) > 0:
- mkdirs = 'mkdir -p %s; ' % ' '.join(dirs)
- cd_action = 'cd %s; ' % Sourceify(self.path or '.')
-
- # action, cd_action, and mkdirs get written to a toplevel variable
- # called cmd_foo. Toplevel variables can't handle things that change
- # per makefile like $(TARGET), so hardcode the target.
- if self.flavor == 'mac':
- action = [gyp.xcode_emulation.ExpandEnvVars(command, env)
- for command in action]
- action = gyp.common.EncodePOSIXShellList(action)
- action = action.replace('$(TARGET)', self.target)
- cd_action = cd_action.replace('$(TARGET)', self.target)
- mkdirs = mkdirs.replace('$(TARGET)', self.target)
-
- # Set LD_LIBRARY_PATH in case the rule runs an executable from this
- # build which links to shared libs from this build.
- # rules run on the host, so they should in theory only use host
- # libraries, but until everything is made cross-compile safe, also use
- # target libraries.
- # TODO(piman): when everything is cross-compile safe, remove lib.target
- self.WriteLn(
- "cmd_%(name)s_%(count)d = LD_LIBRARY_PATH="
- "$(builddir)/lib.host:$(builddir)/lib.target:$$LD_LIBRARY_PATH; "
- "export LD_LIBRARY_PATH; "
- "%(cd_action)s%(mkdirs)s%(action)s" % {
- 'action': action,
- 'cd_action': cd_action,
- 'count': count,
- 'mkdirs': mkdirs,
- 'name': name,
- })
- self.WriteLn(
- 'quiet_cmd_%(name)s_%(count)d = RULE %(name)s_%(count)d $@' % {
- 'count': count,
- 'name': name,
- })
- self.WriteLn()
- count += 1
-
- outputs_variable = 'rule_%s_outputs' % name
- self.WriteList(all_outputs, outputs_variable)
- extra_outputs.append('$(%s)' % outputs_variable)
-
- self.WriteLn('### Finished generating for rule: %s' % name)
- self.WriteLn()
- self.WriteLn('### Finished generating for all rules')
- self.WriteLn('')
-
-
- def WriteCopies(self, copies, extra_outputs, part_of_all):
- """Write Makefile code for any 'copies' from the gyp input.
-
- extra_outputs: a list that will be filled in with any outputs of this action
- (used to make other pieces dependent on this action)
- part_of_all: flag indicating this target is part of 'all'
- """
- self.WriteLn('### Generated for copy rule.')
-
- variable = StringToMakefileVariable(self.qualified_target + '_copies')
- outputs = []
- for copy in copies:
- for path in copy['files']:
- # Absolutify() may call normpath, and will strip trailing slashes.
- path = Sourceify(self.Absolutify(path))
- filename = os.path.split(path)[1]
- output = Sourceify(self.Absolutify(os.path.join(copy['destination'],
- filename)))
-
- # If the output path has variables in it, which happens in practice for
- # 'copies', writing the environment as target-local doesn't work,
- # because the variables are already needed for the target name.
- # Copying the environment variables into global make variables doesn't
- # work either, because then the .d files will potentially contain spaces
- # after variable expansion, and .d file handling cannot handle spaces.
- # As a workaround, manually expand variables at gyp time. Since 'copies'
- # can't run scripts, there's no need to write the env then.
- # WriteDoCmd() will escape spaces for .d files.
- env = self.GetSortedXcodeEnv()
- output = gyp.xcode_emulation.ExpandEnvVars(output, env)
- path = gyp.xcode_emulation.ExpandEnvVars(path, env)
- self.WriteDoCmd([output], [path], 'copy', part_of_all)
- outputs.append(output)
- self.WriteLn('%s = %s' % (variable, ' '.join(map(QuoteSpaces, outputs))))
- extra_outputs.append('$(%s)' % variable)
- self.WriteLn()
-
-
- def WriteMacBundleResources(self, resources, bundle_deps):
- """Writes Makefile code for 'mac_bundle_resources'."""
- self.WriteLn('### Generated for mac_bundle_resources')
-
- for output, res in gyp.xcode_emulation.GetMacBundleResources(
- generator_default_variables['PRODUCT_DIR'], self.xcode_settings,
- map(Sourceify, map(self.Absolutify, resources))):
- _, ext = os.path.splitext(output)
- if ext != '.xcassets':
- # Make does not supports '.xcassets' emulation.
- self.WriteDoCmd([output], [res], 'mac_tool,,,copy-bundle-resource',
- part_of_all=True)
- bundle_deps.append(output)
-
-
- def WriteMacInfoPlist(self, bundle_deps):
- """Write Makefile code for bundle Info.plist files."""
- info_plist, out, defines, extra_env = gyp.xcode_emulation.GetMacInfoPlist(
- generator_default_variables['PRODUCT_DIR'], self.xcode_settings,
- lambda p: Sourceify(self.Absolutify(p)))
- if not info_plist:
- return
- if defines:
- # Create an intermediate file to store preprocessed results.
- intermediate_plist = ('$(obj).$(TOOLSET)/$(TARGET)/' +
- os.path.basename(info_plist))
- self.WriteList(defines, intermediate_plist + ': INFOPLIST_DEFINES', '-D',
- quoter=EscapeCppDefine)
- self.WriteMakeRule([intermediate_plist], [info_plist],
- ['$(call do_cmd,infoplist)',
- # "Convert" the plist so that any weird whitespace changes from the
- # preprocessor do not affect the XML parser in mac_tool.
- '@plutil -convert xml1 $@ $@'])
- info_plist = intermediate_plist
- # plists can contain envvars and substitute them into the file.
- self.WriteSortedXcodeEnv(
- out, self.GetSortedXcodeEnv(additional_settings=extra_env))
- self.WriteDoCmd([out], [info_plist], 'mac_tool,,,copy-info-plist',
- part_of_all=True)
- bundle_deps.append(out)
-
-
- def WriteSources(self, configs, deps, sources,
- extra_outputs, extra_link_deps,
- part_of_all, precompiled_header):
- """Write Makefile code for any 'sources' from the gyp input.
- These are source files necessary to build the current target.
-
- configs, deps, sources: input from gyp.
- extra_outputs: a list of extra outputs this action should be dependent on;
- used to serialize action/rules before compilation
- extra_link_deps: a list that will be filled in with any outputs of
- compilation (to be used in link lines)
- part_of_all: flag indicating this target is part of 'all'
- """
-
- # Write configuration-specific variables for CFLAGS, etc.
- for configname in sorted(configs.keys()):
- config = configs[configname]
- self.WriteList(config.get('defines'), 'DEFS_%s' % configname, prefix='-D',
- quoter=EscapeCppDefine)
-
- if self.flavor == 'mac':
- cflags = self.xcode_settings.GetCflags(configname)
- cflags_c = self.xcode_settings.GetCflagsC(configname)
- cflags_cc = self.xcode_settings.GetCflagsCC(configname)
- cflags_objc = self.xcode_settings.GetCflagsObjC(configname)
- cflags_objcc = self.xcode_settings.GetCflagsObjCC(configname)
- else:
- cflags = config.get('cflags')
- cflags_c = config.get('cflags_c')
- cflags_cc = config.get('cflags_cc')
-
- self.WriteLn("# Flags passed to all source files.");
- self.WriteList(cflags, 'CFLAGS_%s' % configname)
- self.WriteLn("# Flags passed to only C files.");
- self.WriteList(cflags_c, 'CFLAGS_C_%s' % configname)
- self.WriteLn("# Flags passed to only C++ files.");
- self.WriteList(cflags_cc, 'CFLAGS_CC_%s' % configname)
- if self.flavor == 'mac':
- self.WriteLn("# Flags passed to only ObjC files.");
- self.WriteList(cflags_objc, 'CFLAGS_OBJC_%s' % configname)
- self.WriteLn("# Flags passed to only ObjC++ files.");
- self.WriteList(cflags_objcc, 'CFLAGS_OBJCC_%s' % configname)
- includes = config.get('include_dirs')
- if includes:
- includes = map(Sourceify, map(self.Absolutify, includes))
- self.WriteList(includes, 'INCS_%s' % configname, prefix='-I')
-
- compilable = filter(Compilable, sources)
- objs = map(self.Objectify, map(self.Absolutify, map(Target, compilable)))
- self.WriteList(objs, 'OBJS')
-
- for obj in objs:
- assert ' ' not in obj, (
- "Spaces in object filenames not supported (%s)" % obj)
- self.WriteLn('# Add to the list of files we specially track '
- 'dependencies for.')
- self.WriteLn('all_deps += $(OBJS)')
- self.WriteLn()
-
- # Make sure our dependencies are built first.
- if deps:
- self.WriteMakeRule(['$(OBJS)'], deps,
- comment = 'Make sure our dependencies are built '
- 'before any of us.',
- order_only = True)
-
- # Make sure the actions and rules run first.
- # If they generate any extra headers etc., the per-.o file dep tracking
- # will catch the proper rebuilds, so order only is still ok here.
- if extra_outputs:
- self.WriteMakeRule(['$(OBJS)'], extra_outputs,
- comment = 'Make sure our actions/rules run '
- 'before any of us.',
- order_only = True)
-
- pchdeps = precompiled_header.GetObjDependencies(compilable, objs )
- if pchdeps:
- self.WriteLn('# Dependencies from obj files to their precompiled headers')
- for source, obj, gch in pchdeps:
- self.WriteLn('%s: %s' % (obj, gch))
- self.WriteLn('# End precompiled header dependencies')
-
- if objs:
- extra_link_deps.append('$(OBJS)')
- self.WriteLn("""\
-# CFLAGS et al overrides must be target-local.
-# See "Target-specific Variable Values" in the GNU Make manual.""")
- self.WriteLn("$(OBJS): TOOLSET := $(TOOLSET)")
- self.WriteLn("$(OBJS): GYP_CFLAGS := "
- "$(DEFS_$(BUILDTYPE)) "
- "$(INCS_$(BUILDTYPE)) "
- "%s " % precompiled_header.GetInclude('c') +
- "$(CFLAGS_$(BUILDTYPE)) "
- "$(CFLAGS_C_$(BUILDTYPE))")
- self.WriteLn("$(OBJS): GYP_CXXFLAGS := "
- "$(DEFS_$(BUILDTYPE)) "
- "$(INCS_$(BUILDTYPE)) "
- "%s " % precompiled_header.GetInclude('cc') +
- "$(CFLAGS_$(BUILDTYPE)) "
- "$(CFLAGS_CC_$(BUILDTYPE))")
- if self.flavor == 'mac':
- self.WriteLn("$(OBJS): GYP_OBJCFLAGS := "
- "$(DEFS_$(BUILDTYPE)) "
- "$(INCS_$(BUILDTYPE)) "
- "%s " % precompiled_header.GetInclude('m') +
- "$(CFLAGS_$(BUILDTYPE)) "
- "$(CFLAGS_C_$(BUILDTYPE)) "
- "$(CFLAGS_OBJC_$(BUILDTYPE))")
- self.WriteLn("$(OBJS): GYP_OBJCXXFLAGS := "
- "$(DEFS_$(BUILDTYPE)) "
- "$(INCS_$(BUILDTYPE)) "
- "%s " % precompiled_header.GetInclude('mm') +
- "$(CFLAGS_$(BUILDTYPE)) "
- "$(CFLAGS_CC_$(BUILDTYPE)) "
- "$(CFLAGS_OBJCC_$(BUILDTYPE))")
-
- self.WritePchTargets(precompiled_header.GetPchBuildCommands())
-
- # If there are any object files in our input file list, link them into our
- # output.
- extra_link_deps += filter(Linkable, sources)
-
- self.WriteLn()
-
- def WritePchTargets(self, pch_commands):
- """Writes make rules to compile prefix headers."""
- if not pch_commands:
- return
-
- for gch, lang_flag, lang, input in pch_commands:
- extra_flags = {
- 'c': '$(CFLAGS_C_$(BUILDTYPE))',
- 'cc': '$(CFLAGS_CC_$(BUILDTYPE))',
- 'm': '$(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE))',
- 'mm': '$(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE))',
- }[lang]
- var_name = {
- 'c': 'GYP_PCH_CFLAGS',
- 'cc': 'GYP_PCH_CXXFLAGS',
- 'm': 'GYP_PCH_OBJCFLAGS',
- 'mm': 'GYP_PCH_OBJCXXFLAGS',
- }[lang]
- self.WriteLn("%s: %s := %s " % (gch, var_name, lang_flag) +
- "$(DEFS_$(BUILDTYPE)) "
- "$(INCS_$(BUILDTYPE)) "
- "$(CFLAGS_$(BUILDTYPE)) " +
- extra_flags)
-
- self.WriteLn('%s: %s FORCE_DO_CMD' % (gch, input))
- self.WriteLn('\t@$(call do_cmd,pch_%s,1)' % lang)
- self.WriteLn('')
- assert ' ' not in gch, (
- "Spaces in gch filenames not supported (%s)" % gch)
- self.WriteLn('all_deps += %s' % gch)
- self.WriteLn('')
-
-
- def ComputeOutputBasename(self, spec):
- """Return the 'output basename' of a gyp spec.
-
- E.g., the loadable module 'foobar' in directory 'baz' will produce
- 'libfoobar.so'
- """
- assert not self.is_mac_bundle
-
- if self.flavor == 'mac' and self.type in (
- 'static_library', 'executable', 'shared_library', 'loadable_module'):
- return self.xcode_settings.GetExecutablePath()
-
- target = spec['target_name']
- target_prefix = ''
- target_ext = ''
- if self.type == 'static_library':
- if target[:3] == 'lib':
- target = target[3:]
- target_prefix = 'lib'
- target_ext = '.a'
- elif self.type in ('loadable_module', 'shared_library'):
- if target[:3] == 'lib':
- target = target[3:]
- target_prefix = 'lib'
- if self.flavor == 'aix':
- target_ext = '.a'
- else:
- target_ext = '.so'
- elif self.type == 'none':
- target = '%s.stamp' % target
- elif self.type != 'executable':
- print ("ERROR: What output file should be generated?",
- "type", self.type, "target", target)
-
- target_prefix = spec.get('product_prefix', target_prefix)
- target = spec.get('product_name', target)
- product_ext = spec.get('product_extension')
- if product_ext:
- target_ext = '.' + product_ext
-
- return target_prefix + target + target_ext
-
-
- def _InstallImmediately(self):
- return self.toolset == 'target' and self.flavor == 'mac' and self.type in (
- 'static_library', 'executable', 'shared_library', 'loadable_module')
-
-
- def ComputeOutput(self, spec):
- """Return the 'output' (full output path) of a gyp spec.
-
- E.g., the loadable module 'foobar' in directory 'baz' will produce
- '$(obj)/baz/libfoobar.so'
- """
- assert not self.is_mac_bundle
-
- path = os.path.join('$(obj).' + self.toolset, self.path)
- if self.type == 'executable' or self._InstallImmediately():
- path = '$(builddir)'
- path = spec.get('product_dir', path)
- return os.path.join(path, self.ComputeOutputBasename(spec))
-
-
- def ComputeMacBundleOutput(self, spec):
- """Return the 'output' (full output path) to a bundle output directory."""
- assert self.is_mac_bundle
- path = generator_default_variables['PRODUCT_DIR']
- return os.path.join(path, self.xcode_settings.GetWrapperName())
-
-
- def ComputeMacBundleBinaryOutput(self, spec):
- """Return the 'output' (full output path) to the binary in a bundle."""
- path = generator_default_variables['PRODUCT_DIR']
- return os.path.join(path, self.xcode_settings.GetExecutablePath())
-
-
- def ComputeDeps(self, spec):
- """Compute the dependencies of a gyp spec.
-
- Returns a tuple (deps, link_deps), where each is a list of
- filenames that will need to be put in front of make for either
- building (deps) or linking (link_deps).
- """
- deps = []
- link_deps = []
- if 'dependencies' in spec:
- deps.extend([target_outputs[dep] for dep in spec['dependencies']
- if target_outputs[dep]])
- for dep in spec['dependencies']:
- if dep in target_link_deps:
- link_deps.append(target_link_deps[dep])
- deps.extend(link_deps)
- # TODO: It seems we need to transitively link in libraries (e.g. -lfoo)?
- # This hack makes it work:
- # link_deps.extend(spec.get('libraries', []))
- return (gyp.common.uniquer(deps), gyp.common.uniquer(link_deps))
-
-
- def WriteDependencyOnExtraOutputs(self, target, extra_outputs):
- self.WriteMakeRule([self.output_binary], extra_outputs,
- comment = 'Build our special outputs first.',
- order_only = True)
-
-
- def WriteTarget(self, spec, configs, deps, link_deps, bundle_deps,
- extra_outputs, part_of_all):
- """Write Makefile code to produce the final target of the gyp spec.
-
- spec, configs: input from gyp.
- deps, link_deps: dependency lists; see ComputeDeps()
- extra_outputs: any extra outputs that our target should depend on
- part_of_all: flag indicating this target is part of 'all'
- """
-
- self.WriteLn('### Rules for final target.')
-
- if extra_outputs:
- self.WriteDependencyOnExtraOutputs(self.output_binary, extra_outputs)
- self.WriteMakeRule(extra_outputs, deps,
- comment=('Preserve order dependency of '
- 'special output on deps.'),
- order_only = True)
-
- target_postbuilds = {}
- if self.type != 'none':
- for configname in sorted(configs.keys()):
- config = configs[configname]
- if self.flavor == 'mac':
- ldflags = self.xcode_settings.GetLdflags(configname,
- generator_default_variables['PRODUCT_DIR'],
- lambda p: Sourceify(self.Absolutify(p)))
-
- # TARGET_POSTBUILDS_$(BUILDTYPE) is added to postbuilds later on.
- gyp_to_build = gyp.common.InvertRelativePath(self.path)
- target_postbuild = self.xcode_settings.AddImplicitPostbuilds(
- configname,
- QuoteSpaces(os.path.normpath(os.path.join(gyp_to_build,
- self.output))),
- QuoteSpaces(os.path.normpath(os.path.join(gyp_to_build,
- self.output_binary))))
- if target_postbuild:
- target_postbuilds[configname] = target_postbuild
- else:
- ldflags = config.get('ldflags', [])
- # Compute an rpath for this output if needed.
- if any(dep.endswith('.so') or '.so.' in dep for dep in deps):
- # We want to get the literal string "$ORIGIN" into the link command,
- # so we need lots of escaping.
- ldflags.append(r'-Wl,-rpath=\$$ORIGIN/lib.%s/' % self.toolset)
- ldflags.append(r'-Wl,-rpath-link=\$(builddir)/lib.%s/' %
- self.toolset)
- library_dirs = config.get('library_dirs', [])
- ldflags += [('-L%s' % library_dir) for library_dir in library_dirs]
- self.WriteList(ldflags, 'LDFLAGS_%s' % configname)
- if self.flavor == 'mac':
- self.WriteList(self.xcode_settings.GetLibtoolflags(configname),
- 'LIBTOOLFLAGS_%s' % configname)
- libraries = spec.get('libraries')
- if libraries:
- # Remove duplicate entries
- libraries = gyp.common.uniquer(libraries)
- if self.flavor == 'mac':
- libraries = self.xcode_settings.AdjustLibraries(libraries)
- self.WriteList(libraries, 'LIBS')
- self.WriteLn('%s: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE))' %
- QuoteSpaces(self.output_binary))
- self.WriteLn('%s: LIBS := $(LIBS)' % QuoteSpaces(self.output_binary))
-
- if self.flavor == 'mac':
- self.WriteLn('%s: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE))' %
- QuoteSpaces(self.output_binary))
-
- # Postbuild actions. Like actions, but implicitly depend on the target's
- # output.
- postbuilds = []
- if self.flavor == 'mac':
- if target_postbuilds:
- postbuilds.append('$(TARGET_POSTBUILDS_$(BUILDTYPE))')
- postbuilds.extend(
- gyp.xcode_emulation.GetSpecPostbuildCommands(spec))
-
- if postbuilds:
- # Envvars may be referenced by TARGET_POSTBUILDS_$(BUILDTYPE),
- # so we must output its definition first, since we declare variables
- # using ":=".
- self.WriteSortedXcodeEnv(self.output, self.GetSortedXcodePostbuildEnv())
-
- for configname in target_postbuilds:
- self.WriteLn('%s: TARGET_POSTBUILDS_%s := %s' %
- (QuoteSpaces(self.output),
- configname,
- gyp.common.EncodePOSIXShellList(target_postbuilds[configname])))
-
- # Postbuilds expect to be run in the gyp file's directory, so insert an
- # implicit postbuild to cd to there.
- postbuilds.insert(0, gyp.common.EncodePOSIXShellList(['cd', self.path]))
- for i in xrange(len(postbuilds)):
- if not postbuilds[i].startswith('$'):
- postbuilds[i] = EscapeShellArgument(postbuilds[i])
- self.WriteLn('%s: builddir := $(abs_builddir)' % QuoteSpaces(self.output))
- self.WriteLn('%s: POSTBUILDS := %s' % (
- QuoteSpaces(self.output), ' '.join(postbuilds)))
-
- # A bundle directory depends on its dependencies such as bundle resources
- # and bundle binary. When all dependencies have been built, the bundle
- # needs to be packaged.
- if self.is_mac_bundle:
- # If the framework doesn't contain a binary, then nothing depends
- # on the actions -- make the framework depend on them directly too.
- self.WriteDependencyOnExtraOutputs(self.output, extra_outputs)
-
- # Bundle dependencies. Note that the code below adds actions to this
- # target, so if you move these two lines, move the lines below as well.
- self.WriteList(map(QuoteSpaces, bundle_deps), 'BUNDLE_DEPS')
- self.WriteLn('%s: $(BUNDLE_DEPS)' % QuoteSpaces(self.output))
-
- # After the framework is built, package it. Needs to happen before
- # postbuilds, since postbuilds depend on this.
- if self.type in ('shared_library', 'loadable_module'):
- self.WriteLn('\t@$(call do_cmd,mac_package_framework,,,%s)' %
- self.xcode_settings.GetFrameworkVersion())
-
- # Bundle postbuilds can depend on the whole bundle, so run them after
- # the bundle is packaged, not already after the bundle binary is done.
- if postbuilds:
- self.WriteLn('\t@$(call do_postbuilds)')
- postbuilds = [] # Don't write postbuilds for target's output.
-
- # Needed by test/mac/gyptest-rebuild.py.
- self.WriteLn('\t@true # No-op, used by tests')
-
- # Since this target depends on binary and resources which are in
- # nested subfolders, the framework directory will be older than
- # its dependencies usually. To prevent this rule from executing
- # on every build (expensive, especially with postbuilds), expliclity
- # update the time on the framework directory.
- self.WriteLn('\t@touch -c %s' % QuoteSpaces(self.output))
-
- if postbuilds:
- assert not self.is_mac_bundle, ('Postbuilds for bundles should be done '
- 'on the bundle, not the binary (target \'%s\')' % self.target)
- assert 'product_dir' not in spec, ('Postbuilds do not work with '
- 'custom product_dir')
-
- if self.type == 'executable':
- self.WriteLn('%s: LD_INPUTS := %s' % (
- QuoteSpaces(self.output_binary),
- ' '.join(map(QuoteSpaces, link_deps))))
- if self.toolset == 'host' and self.flavor == 'android':
- self.WriteDoCmd([self.output_binary], link_deps, 'link_host',
- part_of_all, postbuilds=postbuilds)
- else:
- self.WriteDoCmd([self.output_binary], link_deps, 'link', part_of_all,
- postbuilds=postbuilds)
-
- elif self.type == 'static_library':
- for link_dep in link_deps:
- assert ' ' not in link_dep, (
- "Spaces in alink input filenames not supported (%s)" % link_dep)
- if (self.flavor not in ('mac', 'openbsd', 'netbsd', 'win') and not
- self.is_standalone_static_library):
- self.WriteDoCmd([self.output_binary], link_deps, 'alink_thin',
- part_of_all, postbuilds=postbuilds)
- else:
- self.WriteDoCmd([self.output_binary], link_deps, 'alink', part_of_all,
- postbuilds=postbuilds)
- elif self.type == 'shared_library':
- self.WriteLn('%s: LD_INPUTS := %s' % (
- QuoteSpaces(self.output_binary),
- ' '.join(map(QuoteSpaces, link_deps))))
- self.WriteDoCmd([self.output_binary], link_deps, 'solink', part_of_all,
- postbuilds=postbuilds)
- elif self.type == 'loadable_module':
- for link_dep in link_deps:
- assert ' ' not in link_dep, (
- "Spaces in module input filenames not supported (%s)" % link_dep)
- if self.toolset == 'host' and self.flavor == 'android':
- self.WriteDoCmd([self.output_binary], link_deps, 'solink_module_host',
- part_of_all, postbuilds=postbuilds)
- else:
- self.WriteDoCmd(
- [self.output_binary], link_deps, 'solink_module', part_of_all,
- postbuilds=postbuilds)
- elif self.type == 'none':
- # Write a stamp line.
- self.WriteDoCmd([self.output_binary], deps, 'touch', part_of_all,
- postbuilds=postbuilds)
- else:
- print "WARNING: no output for", self.type, target
-
- # Add an alias for each target (if there are any outputs).
- # Installable target aliases are created below.
- if ((self.output and self.output != self.target) and
- (self.type not in self._INSTALLABLE_TARGETS)):
- self.WriteMakeRule([self.target], [self.output],
- comment='Add target alias', phony = True)
- if part_of_all:
- self.WriteMakeRule(['all'], [self.target],
- comment = 'Add target alias to "all" target.',
- phony = True)
-
- # Add special-case rules for our installable targets.
- # 1) They need to install to the build dir or "product" dir.
- # 2) They get shortcuts for building (e.g. "make chrome").
- # 3) They are part of "make all".
- if (self.type in self._INSTALLABLE_TARGETS or
- self.is_standalone_static_library):
- if self.type == 'shared_library':
- file_desc = 'shared library'
- elif self.type == 'static_library':
- file_desc = 'static library'
- else:
- file_desc = 'executable'
- install_path = self._InstallableTargetInstallPath()
- installable_deps = [self.output]
- if (self.flavor == 'mac' and not 'product_dir' in spec and
- self.toolset == 'target'):
- # On mac, products are created in install_path immediately.
- assert install_path == self.output, '%s != %s' % (
- install_path, self.output)
-
- # Point the target alias to the final binary output.
- self.WriteMakeRule([self.target], [install_path],
- comment='Add target alias', phony = True)
- if install_path != self.output:
- assert not self.is_mac_bundle # See comment a few lines above.
- self.WriteDoCmd([install_path], [self.output], 'copy',
- comment = 'Copy this to the %s output path.' %
- file_desc, part_of_all=part_of_all)
- installable_deps.append(install_path)
- if self.output != self.alias and self.alias != self.target:
- self.WriteMakeRule([self.alias], installable_deps,
- comment = 'Short alias for building this %s.' %
- file_desc, phony = True)
- if part_of_all:
- self.WriteMakeRule(['all'], [install_path],
- comment = 'Add %s to "all" target.' % file_desc,
- phony = True)
-
-
- def WriteList(self, value_list, variable=None, prefix='',
- quoter=QuoteIfNecessary):
- """Write a variable definition that is a list of values.
-
- E.g. WriteList(['a','b'], 'foo', prefix='blah') writes out
- foo = blaha blahb
- but in a pretty-printed style.
- """
- values = ''
- if value_list:
- value_list = [quoter(prefix + l) for l in value_list]
- values = ' \\\n\t' + ' \\\n\t'.join(value_list)
- self.fp.write('%s :=%s\n\n' % (variable, values))
-
-
- def WriteDoCmd(self, outputs, inputs, command, part_of_all, comment=None,
- postbuilds=False):
- """Write a Makefile rule that uses do_cmd.
-
- This makes the outputs dependent on the command line that was run,
- as well as support the V= make command line flag.
- """
- suffix = ''
- if postbuilds:
- assert ',' not in command
- suffix = ',,1' # Tell do_cmd to honor $POSTBUILDS
- self.WriteMakeRule(outputs, inputs,
- actions = ['$(call do_cmd,%s%s)' % (command, suffix)],
- comment = comment,
- command = command,
- force = True)
- # Add our outputs to the list of targets we read depfiles from.
- # all_deps is only used for deps file reading, and for deps files we replace
- # spaces with ? because escaping doesn't work with make's $(sort) and
- # other functions.
- outputs = [QuoteSpaces(o, SPACE_REPLACEMENT) for o in outputs]
- self.WriteLn('all_deps += %s' % ' '.join(outputs))
-
-
- def WriteMakeRule(self, outputs, inputs, actions=None, comment=None,
- order_only=False, force=False, phony=False, command=None):
- """Write a Makefile rule, with some extra tricks.
-
- outputs: a list of outputs for the rule (note: this is not directly
- supported by make; see comments below)
- inputs: a list of inputs for the rule
- actions: a list of shell commands to run for the rule
- comment: a comment to put in the Makefile above the rule (also useful
- for making this Python script's code self-documenting)
- order_only: if true, makes the dependency order-only
- force: if true, include FORCE_DO_CMD as an order-only dep
- phony: if true, the rule does not actually generate the named output, the
- output is just a name to run the rule
- command: (optional) command name to generate unambiguous labels
- """
- outputs = map(QuoteSpaces, outputs)
- inputs = map(QuoteSpaces, inputs)
-
- if comment:
- self.WriteLn('# ' + comment)
- if phony:
- self.WriteLn('.PHONY: ' + ' '.join(outputs))
- if actions:
- self.WriteLn("%s: TOOLSET := $(TOOLSET)" % outputs[0])
- force_append = ' FORCE_DO_CMD' if force else ''
-
- if order_only:
- # Order only rule: Just write a simple rule.
- # TODO(evanm): just make order_only a list of deps instead of this hack.
- self.WriteLn('%s: | %s%s' %
- (' '.join(outputs), ' '.join(inputs), force_append))
- elif len(outputs) == 1:
- # Regular rule, one output: Just write a simple rule.
- self.WriteLn('%s: %s%s' % (outputs[0], ' '.join(inputs), force_append))
- else:
- # Regular rule, more than one output: Multiple outputs are tricky in
- # make. We will write three rules:
- # - All outputs depend on an intermediate file.
- # - Make .INTERMEDIATE depend on the intermediate.
- # - The intermediate file depends on the inputs and executes the
- # actual command.
- # - The intermediate recipe will 'touch' the intermediate file.
- # - The multi-output rule will have an do-nothing recipe.
-
- # Hash the target name to avoid generating overlong filenames.
- cmddigest = hashlib.sha1(command if command else self.target).hexdigest()
- intermediate = "%s.intermediate" % cmddigest
- self.WriteLn('%s: %s' % (' '.join(outputs), intermediate))
- self.WriteLn('\t%s' % '@:');
- self.WriteLn('%s: %s' % ('.INTERMEDIATE', intermediate))
- self.WriteLn('%s: %s%s' %
- (intermediate, ' '.join(inputs), force_append))
- actions.insert(0, '$(call do_cmd,touch)')
-
- if actions:
- for action in actions:
- self.WriteLn('\t%s' % action)
- self.WriteLn()
-
-
- def WriteAndroidNdkModuleRule(self, module_name, all_sources, link_deps):
- """Write a set of LOCAL_XXX definitions for Android NDK.
-
- These variable definitions will be used by Android NDK but do nothing for
- non-Android applications.
-
- Arguments:
- module_name: Android NDK module name, which must be unique among all
- module names.
- all_sources: A list of source files (will be filtered by Compilable).
- link_deps: A list of link dependencies, which must be sorted in
- the order from dependencies to dependents.
- """
- if self.type not in ('executable', 'shared_library', 'static_library'):
- return
-
- self.WriteLn('# Variable definitions for Android applications')
- self.WriteLn('include $(CLEAR_VARS)')
- self.WriteLn('LOCAL_MODULE := ' + module_name)
- self.WriteLn('LOCAL_CFLAGS := $(CFLAGS_$(BUILDTYPE)) '
- '$(DEFS_$(BUILDTYPE)) '
- # LOCAL_CFLAGS is applied to both of C and C++. There is
- # no way to specify $(CFLAGS_C_$(BUILDTYPE)) only for C
- # sources.
- '$(CFLAGS_C_$(BUILDTYPE)) '
- # $(INCS_$(BUILDTYPE)) includes the prefix '-I' while
- # LOCAL_C_INCLUDES does not expect it. So put it in
- # LOCAL_CFLAGS.
- '$(INCS_$(BUILDTYPE))')
- # LOCAL_CXXFLAGS is obsolete and LOCAL_CPPFLAGS is preferred.
- self.WriteLn('LOCAL_CPPFLAGS := $(CFLAGS_CC_$(BUILDTYPE))')
- self.WriteLn('LOCAL_C_INCLUDES :=')
- self.WriteLn('LOCAL_LDLIBS := $(LDFLAGS_$(BUILDTYPE)) $(LIBS)')
-
- # Detect the C++ extension.
- cpp_ext = {'.cc': 0, '.cpp': 0, '.cxx': 0}
- default_cpp_ext = '.cpp'
- for filename in all_sources:
- ext = os.path.splitext(filename)[1]
- if ext in cpp_ext:
- cpp_ext[ext] += 1
- if cpp_ext[ext] > cpp_ext[default_cpp_ext]:
- default_cpp_ext = ext
- self.WriteLn('LOCAL_CPP_EXTENSION := ' + default_cpp_ext)
-
- self.WriteList(map(self.Absolutify, filter(Compilable, all_sources)),
- 'LOCAL_SRC_FILES')
-
- # Filter out those which do not match prefix and suffix and produce
- # the resulting list without prefix and suffix.
- def DepsToModules(deps, prefix, suffix):
- modules = []
- for filepath in deps:
- filename = os.path.basename(filepath)
- if filename.startswith(prefix) and filename.endswith(suffix):
- modules.append(filename[len(prefix):-len(suffix)])
- return modules
-
- # Retrieve the default value of 'SHARED_LIB_SUFFIX'
- params = {'flavor': 'linux'}
- default_variables = {}
- CalculateVariables(default_variables, params)
-
- self.WriteList(
- DepsToModules(link_deps,
- generator_default_variables['SHARED_LIB_PREFIX'],
- default_variables['SHARED_LIB_SUFFIX']),
- 'LOCAL_SHARED_LIBRARIES')
- self.WriteList(
- DepsToModules(link_deps,
- generator_default_variables['STATIC_LIB_PREFIX'],
- generator_default_variables['STATIC_LIB_SUFFIX']),
- 'LOCAL_STATIC_LIBRARIES')
-
- if self.type == 'executable':
- self.WriteLn('include $(BUILD_EXECUTABLE)')
- elif self.type == 'shared_library':
- self.WriteLn('include $(BUILD_SHARED_LIBRARY)')
- elif self.type == 'static_library':
- self.WriteLn('include $(BUILD_STATIC_LIBRARY)')
- self.WriteLn()
-
-
- def WriteLn(self, text=''):
- self.fp.write(text + '\n')
-
-
- def GetSortedXcodeEnv(self, additional_settings=None):
- return gyp.xcode_emulation.GetSortedXcodeEnv(
- self.xcode_settings, "$(abs_builddir)",
- os.path.join("$(abs_srcdir)", self.path), "$(BUILDTYPE)",
- additional_settings)
-
-
- def GetSortedXcodePostbuildEnv(self):
- # CHROMIUM_STRIP_SAVE_FILE is a chromium-specific hack.
- # TODO(thakis): It would be nice to have some general mechanism instead.
- strip_save_file = self.xcode_settings.GetPerTargetSetting(
- 'CHROMIUM_STRIP_SAVE_FILE', '')
- # Even if strip_save_file is empty, explicitly write it. Else a postbuild
- # might pick up an export from an earlier target.
- return self.GetSortedXcodeEnv(
- additional_settings={'CHROMIUM_STRIP_SAVE_FILE': strip_save_file})
-
-
- def WriteSortedXcodeEnv(self, target, env):
- for k, v in env:
- # For
- # foo := a\ b
- # the escaped space does the right thing. For
- # export foo := a\ b
- # it does not -- the backslash is written to the env as literal character.
- # So don't escape spaces in |env[k]|.
- self.WriteLn('%s: export %s := %s' % (QuoteSpaces(target), k, v))
-
-
- def Objectify(self, path):
- """Convert a path to its output directory form."""
- if '$(' in path:
- path = path.replace('$(obj)/', '$(obj).%s/$(TARGET)/' % self.toolset)
- if not '$(obj)' in path:
- path = '$(obj).%s/$(TARGET)/%s' % (self.toolset, path)
- return path
-
-
- def Pchify(self, path, lang):
- """Convert a prefix header path to its output directory form."""
- path = self.Absolutify(path)
- if '$(' in path:
- path = path.replace('$(obj)/', '$(obj).%s/$(TARGET)/pch-%s' %
- (self.toolset, lang))
- return path
- return '$(obj).%s/$(TARGET)/pch-%s/%s' % (self.toolset, lang, path)
-
-
- def Absolutify(self, path):
- """Convert a subdirectory-relative path into a base-relative path.
- Skips over paths that contain variables."""
- if '$(' in path:
- # Don't call normpath in this case, as it might collapse the
- # path too aggressively if it features '..'. However it's still
- # important to strip trailing slashes.
- return path.rstrip('/')
- return os.path.normpath(os.path.join(self.path, path))
-
-
- def ExpandInputRoot(self, template, expansion, dirname):
- if '%(INPUT_ROOT)s' not in template and '%(INPUT_DIRNAME)s' not in template:
- return template
- path = template % {
- 'INPUT_ROOT': expansion,
- 'INPUT_DIRNAME': dirname,
- }
- return path
-
-
- def _InstallableTargetInstallPath(self):
- """Returns the location of the final output for an installable target."""
- # Xcode puts shared_library results into PRODUCT_DIR, and some gyp files
- # rely on this. Emulate this behavior for mac.
-
- # XXX(TooTallNate): disabling this code since we don't want this behavior...
- #if (self.type == 'shared_library' and
- # (self.flavor != 'mac' or self.toolset != 'target')):
- # # Install all shared libs into a common directory (per toolset) for
- # # convenient access with LD_LIBRARY_PATH.
- # return '$(builddir)/lib.%s/%s' % (self.toolset, self.alias)
- return '$(builddir)/' + self.alias
-
-
-def WriteAutoRegenerationRule(params, root_makefile, makefile_name,
- build_files):
- """Write the target to regenerate the Makefile."""
- options = params['options']
- build_files_args = [gyp.common.RelativePath(filename, options.toplevel_dir)
- for filename in params['build_files_arg']]
-
- gyp_binary = gyp.common.FixIfRelativePath(params['gyp_binary'],
- options.toplevel_dir)
- if not gyp_binary.startswith(os.sep):
- gyp_binary = os.path.join('.', gyp_binary)
-
- root_makefile.write(
- "quiet_cmd_regen_makefile = ACTION Regenerating $@\n"
- "cmd_regen_makefile = cd $(srcdir); %(cmd)s\n"
- "%(makefile_name)s: %(deps)s\n"
- "\t$(call do_cmd,regen_makefile)\n\n" % {
- 'makefile_name': makefile_name,
- 'deps': ' '.join(map(SourceifyAndQuoteSpaces, build_files)),
- 'cmd': gyp.common.EncodePOSIXShellList(
- [gyp_binary, '-fmake'] +
- gyp.RegenerateFlags(options) +
- build_files_args)})
-
-
-def PerformBuild(data, configurations, params):
- options = params['options']
- for config in configurations:
- arguments = ['make']
- if options.toplevel_dir and options.toplevel_dir != '.':
- arguments += '-C', options.toplevel_dir
- arguments.append('BUILDTYPE=' + config)
- print 'Building [%s]: %s' % (config, arguments)
- subprocess.check_call(arguments)
-
-
-def GenerateOutput(target_list, target_dicts, data, params):
- options = params['options']
- flavor = gyp.common.GetFlavor(params)
- generator_flags = params.get('generator_flags', {})
- builddir_name = generator_flags.get('output_dir', 'out')
- android_ndk_version = generator_flags.get('android_ndk_version', None)
- default_target = generator_flags.get('default_target', 'all')
-
- def CalculateMakefilePath(build_file, base_name):
- """Determine where to write a Makefile for a given gyp file."""
- # Paths in gyp files are relative to the .gyp file, but we want
- # paths relative to the source root for the master makefile. Grab
- # the path of the .gyp file as the base to relativize against.
- # E.g. "foo/bar" when we're constructing targets for "foo/bar/baz.gyp".
- base_path = gyp.common.RelativePath(os.path.dirname(build_file),
- options.depth)
- # We write the file in the base_path directory.
- output_file = os.path.join(options.depth, base_path, base_name)
- if options.generator_output:
- output_file = os.path.join(
- options.depth, options.generator_output, base_path, base_name)
- base_path = gyp.common.RelativePath(os.path.dirname(build_file),
- options.toplevel_dir)
- return base_path, output_file
-
- # TODO: search for the first non-'Default' target. This can go
- # away when we add verification that all targets have the
- # necessary configurations.
- default_configuration = None
- toolsets = set([target_dicts[target]['toolset'] for target in target_list])
- for target in target_list:
- spec = target_dicts[target]
- if spec['default_configuration'] != 'Default':
- default_configuration = spec['default_configuration']
- break
- if not default_configuration:
- default_configuration = 'Default'
-
- srcdir = '.'
- makefile_name = 'Makefile' + options.suffix
- makefile_path = os.path.join(options.toplevel_dir, makefile_name)
- if options.generator_output:
- global srcdir_prefix
- makefile_path = os.path.join(
- options.toplevel_dir, options.generator_output, makefile_name)
- srcdir = gyp.common.RelativePath(srcdir, options.generator_output)
- srcdir_prefix = '$(srcdir)/'
-
- flock_command= 'flock'
- copy_archive_arguments = '-af'
- makedep_arguments = '-MMD'
- header_params = {
- 'default_target': default_target,
- 'builddir': builddir_name,
- 'default_configuration': default_configuration,
- 'flock': flock_command,
- 'flock_index': 1,
- 'link_commands': LINK_COMMANDS_LINUX,
- 'extra_commands': '',
- 'srcdir': srcdir,
- 'copy_archive_args': copy_archive_arguments,
- 'makedep_args': makedep_arguments,
- }
- if flavor == 'mac':
- flock_command = './gyp-mac-tool flock'
- header_params.update({
- 'flock': flock_command,
- 'flock_index': 2,
- 'link_commands': LINK_COMMANDS_MAC,
- 'extra_commands': SHARED_HEADER_MAC_COMMANDS,
- })
- elif flavor == 'android':
- header_params.update({
- 'link_commands': LINK_COMMANDS_ANDROID,
- })
- elif flavor == 'zos':
- copy_archive_arguments = '-fPR'
- makedep_arguments = '-qmakedep=gcc'
- header_params.update({
- 'copy_archive_args': copy_archive_arguments,
- 'makedep_args': makedep_arguments,
- 'link_commands': LINK_COMMANDS_OS390,
- })
- elif flavor == 'solaris':
- header_params.update({
- 'flock': './gyp-flock-tool flock',
- 'flock_index': 2,
- })
- elif flavor == 'freebsd':
- # Note: OpenBSD has sysutils/flock. lockf seems to be FreeBSD specific.
- header_params.update({
- 'flock': 'lockf',
- })
- elif flavor == 'openbsd':
- copy_archive_arguments = '-pPRf'
- header_params.update({
- 'copy_archive_args': copy_archive_arguments,
- })
- elif flavor == 'aix':
- copy_archive_arguments = '-pPRf'
- header_params.update({
- 'copy_archive_args': copy_archive_arguments,
- 'link_commands': LINK_COMMANDS_AIX,
- 'flock': './gyp-flock-tool flock',
- 'flock_index': 2,
- })
-
- header_params.update({
- 'CC.target': GetEnvironFallback(('CC_target', 'CC'), '$(CC)'),
- 'AR.target': GetEnvironFallback(('AR_target', 'AR'), '$(AR)'),
- 'CXX.target': GetEnvironFallback(('CXX_target', 'CXX'), '$(CXX)'),
- 'LINK.target': GetEnvironFallback(('LINK_target', 'LINK'), '$(LINK)'),
- 'CC.host': GetEnvironFallback(('CC_host', 'CC'), 'gcc'),
- 'AR.host': GetEnvironFallback(('AR_host', 'AR'), 'ar'),
- 'CXX.host': GetEnvironFallback(('CXX_host', 'CXX'), 'g++'),
- 'LINK.host': GetEnvironFallback(('LINK_host', 'LINK'), '$(CXX.host)'),
- })
-
- build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0])
- make_global_settings_array = data[build_file].get('make_global_settings', [])
- wrappers = {}
- for key, value in make_global_settings_array:
- if key.endswith('_wrapper'):
- wrappers[key[:-len('_wrapper')]] = '$(abspath %s)' % value
- make_global_settings = ''
- for key, value in make_global_settings_array:
- if re.match('.*_wrapper', key):
- continue
- if value[0] != '$':
- value = '$(abspath %s)' % value
- wrapper = wrappers.get(key)
- if wrapper:
- value = '%s %s' % (wrapper, value)
- del wrappers[key]
- if key in ('CC', 'CC.host', 'CXX', 'CXX.host'):
- make_global_settings += (
- 'ifneq (,$(filter $(origin %s), undefined default))\n' % key)
- # Let gyp-time envvars win over global settings.
- env_key = key.replace('.', '_') # CC.host -> CC_host
- if env_key in os.environ:
- value = os.environ[env_key]
- make_global_settings += ' %s = %s\n' % (key, value)
- make_global_settings += 'endif\n'
- else:
- make_global_settings += '%s ?= %s\n' % (key, value)
- # TODO(ukai): define cmd when only wrapper is specified in
- # make_global_settings.
-
- header_params['make_global_settings'] = make_global_settings
-
- gyp.common.EnsureDirExists(makefile_path)
- root_makefile = open(makefile_path, 'w')
- root_makefile.write(SHARED_HEADER % header_params)
- # Currently any versions have the same effect, but in future the behavior
- # could be different.
- if android_ndk_version:
- root_makefile.write(
- '# Define LOCAL_PATH for build of Android applications.\n'
- 'LOCAL_PATH := $(call my-dir)\n'
- '\n')
- for toolset in toolsets:
- root_makefile.write('TOOLSET := %s\n' % toolset)
- WriteRootHeaderSuffixRules(root_makefile)
-
- # Put build-time support tools next to the root Makefile.
- dest_path = os.path.dirname(makefile_path)
- gyp.common.CopyTool(flavor, dest_path)
-
- # Find the list of targets that derive from the gyp file(s) being built.
- needed_targets = set()
- for build_file in params['build_files']:
- for target in gyp.common.AllTargets(target_list, target_dicts, build_file):
- needed_targets.add(target)
-
- build_files = set()
- include_list = set()
- for qualified_target in target_list:
- build_file, target, toolset = gyp.common.ParseQualifiedTarget(
- qualified_target)
-
- this_make_global_settings = data[build_file].get('make_global_settings', [])
- assert make_global_settings_array == this_make_global_settings, (
- "make_global_settings needs to be the same for all targets. %s vs. %s" %
- (this_make_global_settings, make_global_settings))
-
- build_files.add(gyp.common.RelativePath(build_file, options.toplevel_dir))
- included_files = data[build_file]['included_files']
- for included_file in included_files:
- # The included_files entries are relative to the dir of the build file
- # that included them, so we have to undo that and then make them relative
- # to the root dir.
- relative_include_file = gyp.common.RelativePath(
- gyp.common.UnrelativePath(included_file, build_file),
- options.toplevel_dir)
- abs_include_file = os.path.abspath(relative_include_file)
- # If the include file is from the ~/.gyp dir, we should use absolute path
- # so that relocating the src dir doesn't break the path.
- if (params['home_dot_gyp'] and
- abs_include_file.startswith(params['home_dot_gyp'])):
- build_files.add(abs_include_file)
- else:
- build_files.add(relative_include_file)
-
- base_path, output_file = CalculateMakefilePath(build_file,
- target + '.' + toolset + options.suffix + '.mk')
-
- spec = target_dicts[qualified_target]
- configs = spec['configurations']
-
- if flavor == 'mac':
- gyp.xcode_emulation.MergeGlobalXcodeSettingsToSpec(data[build_file], spec)
-
- writer = MakefileWriter(generator_flags, flavor)
- writer.Write(qualified_target, base_path, output_file, spec, configs,
- part_of_all=qualified_target in needed_targets)
-
- # Our root_makefile lives at the source root. Compute the relative path
- # from there to the output_file for including.
- mkfile_rel_path = gyp.common.RelativePath(output_file,
- os.path.dirname(makefile_path))
- include_list.add(mkfile_rel_path)
-
- # Write out per-gyp (sub-project) Makefiles.
- depth_rel_path = gyp.common.RelativePath(options.depth, os.getcwd())
- for build_file in build_files:
- # The paths in build_files were relativized above, so undo that before
- # testing against the non-relativized items in target_list and before
- # calculating the Makefile path.
- build_file = os.path.join(depth_rel_path, build_file)
- gyp_targets = [target_dicts[target]['target_name'] for target in target_list
- if target.startswith(build_file) and
- target in needed_targets]
- # Only generate Makefiles for gyp files with targets.
- if not gyp_targets:
- continue
- base_path, output_file = CalculateMakefilePath(build_file,
- os.path.splitext(os.path.basename(build_file))[0] + '.Makefile')
- makefile_rel_path = gyp.common.RelativePath(os.path.dirname(makefile_path),
- os.path.dirname(output_file))
- writer.WriteSubMake(output_file, makefile_rel_path, gyp_targets,
- builddir_name)
-
-
- # Write out the sorted list of includes.
- root_makefile.write('\n')
- for include_file in sorted(include_list):
- # We wrap each .mk include in an if statement so users can tell make to
- # not load a file by setting NO_LOAD. The below make code says, only
- # load the .mk file if the .mk filename doesn't start with a token in
- # NO_LOAD.
- root_makefile.write(
- "ifeq ($(strip $(foreach prefix,$(NO_LOAD),\\\n"
- " $(findstring $(join ^,$(prefix)),\\\n"
- " $(join ^," + include_file + ")))),)\n")
- root_makefile.write(" include " + include_file + "\n")
- root_makefile.write("endif\n")
- root_makefile.write('\n')
-
- if (not generator_flags.get('standalone')
- and generator_flags.get('auto_regeneration', True)):
- WriteAutoRegenerationRule(params, root_makefile, makefile_name, build_files)
-
- root_makefile.write(SHARED_FOOTER)
-
- root_makefile.close()
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/make.pyc b/node_modules/node-gyp/gyp/pylib/gyp/generator/make.pyc
deleted file mode 100644
index 18138f7..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/make.pyc
+++ /dev/null
Binary files differ
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
deleted file mode 100644
index 3901ba9..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
+++ /dev/null
@@ -1,3494 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import copy
-import ntpath
-import os
-import posixpath
-import re
-import subprocess
-import sys
-
-import gyp.common
-import gyp.easy_xml as easy_xml
-import gyp.generator.ninja as ninja_generator
-import gyp.MSVSNew as MSVSNew
-import gyp.MSVSProject as MSVSProject
-import gyp.MSVSSettings as MSVSSettings
-import gyp.MSVSToolFile as MSVSToolFile
-import gyp.MSVSUserFile as MSVSUserFile
-import gyp.MSVSUtil as MSVSUtil
-import gyp.MSVSVersion as MSVSVersion
-from gyp.common import GypError
-from gyp.common import OrderedSet
-
-# TODO: Remove once bots are on 2.7, http://crbug.com/241769
-def _import_OrderedDict():
- import collections
- try:
- return collections.OrderedDict
- except AttributeError:
- import gyp.ordered_dict
- return gyp.ordered_dict.OrderedDict
-OrderedDict = _import_OrderedDict()
-
-
-# Regular expression for validating Visual Studio GUIDs. If the GUID
-# contains lowercase hex letters, MSVS will be fine. However,
-# IncrediBuild BuildConsole will parse the solution file, but then
-# silently skip building the target causing hard to track down errors.
-# Note that this only happens with the BuildConsole, and does not occur
-# if IncrediBuild is executed from inside Visual Studio. This regex
-# validates that the string looks like a GUID with all uppercase hex
-# letters.
-VALID_MSVS_GUID_CHARS = re.compile(r'^[A-F0-9\-]+$')
-
-
-generator_default_variables = {
- 'EXECUTABLE_PREFIX': '',
- 'EXECUTABLE_SUFFIX': '.exe',
- 'STATIC_LIB_PREFIX': '',
- 'SHARED_LIB_PREFIX': '',
- 'STATIC_LIB_SUFFIX': '.lib',
- 'SHARED_LIB_SUFFIX': '.dll',
- 'INTERMEDIATE_DIR': '$(IntDir)',
- 'SHARED_INTERMEDIATE_DIR': '$(OutDir)obj/global_intermediate',
- 'OS': 'win',
- 'PRODUCT_DIR': '$(OutDir)',
- 'LIB_DIR': '$(OutDir)lib',
- 'RULE_INPUT_ROOT': '$(InputName)',
- 'RULE_INPUT_DIRNAME': '$(InputDir)',
- 'RULE_INPUT_EXT': '$(InputExt)',
- 'RULE_INPUT_NAME': '$(InputFileName)',
- 'RULE_INPUT_PATH': '$(InputPath)',
- 'CONFIGURATION_NAME': '$(ConfigurationName)',
-}
-
-
-# The msvs specific sections that hold paths
-generator_additional_path_sections = [
- 'msvs_cygwin_dirs',
- 'msvs_props',
-]
-
-
-generator_additional_non_configuration_keys = [
- 'msvs_cygwin_dirs',
- 'msvs_cygwin_shell',
- 'msvs_large_pdb',
- 'msvs_shard',
- 'msvs_external_builder',
- 'msvs_external_builder_out_dir',
- 'msvs_external_builder_build_cmd',
- 'msvs_external_builder_clean_cmd',
- 'msvs_external_builder_clcompile_cmd',
- 'msvs_enable_winrt',
- 'msvs_requires_importlibrary',
- 'msvs_enable_winphone',
- 'msvs_application_type_revision',
- 'msvs_target_platform_version',
- 'msvs_target_platform_minversion',
-]
-
-
-# List of precompiled header related keys.
-precomp_keys = [
- 'msvs_precompiled_header',
- 'msvs_precompiled_source',
-]
-
-
-cached_username = None
-
-
-cached_domain = None
-
-
-# TODO(gspencer): Switch the os.environ calls to be
-# win32api.GetDomainName() and win32api.GetUserName() once the
-# python version in depot_tools has been updated to work on Vista
-# 64-bit.
-def _GetDomainAndUserName():
- if sys.platform not in ('win32', 'cygwin'):
- return ('DOMAIN', 'USERNAME')
- global cached_username
- global cached_domain
- if not cached_domain or not cached_username:
- domain = os.environ.get('USERDOMAIN')
- username = os.environ.get('USERNAME')
- if not domain or not username:
- call = subprocess.Popen(['net', 'config', 'Workstation'],
- stdout=subprocess.PIPE)
- config = call.communicate()[0]
- username_re = re.compile(r'^User name\s+(\S+)', re.MULTILINE)
- username_match = username_re.search(config)
- if username_match:
- username = username_match.group(1)
- domain_re = re.compile(r'^Logon domain\s+(\S+)', re.MULTILINE)
- domain_match = domain_re.search(config)
- if domain_match:
- domain = domain_match.group(1)
- cached_domain = domain
- cached_username = username
- return (cached_domain, cached_username)
-
-fixpath_prefix = None
-
-
-def _NormalizedSource(source):
- """Normalize the path.
-
- But not if that gets rid of a variable, as this may expand to something
- larger than one directory.
-
- Arguments:
- source: The path to be normalize.d
-
- Returns:
- The normalized path.
- """
- normalized = os.path.normpath(source)
- if source.count('$') == normalized.count('$'):
- source = normalized
- return source
-
-
-def _FixPath(path):
- """Convert paths to a form that will make sense in a vcproj file.
-
- Arguments:
- path: The path to convert, may contain / etc.
- Returns:
- The path with all slashes made into backslashes.
- """
- if fixpath_prefix and path and not os.path.isabs(path) and not path[0] == '$':
- path = os.path.join(fixpath_prefix, path)
- path = path.replace('/', '\\')
- path = _NormalizedSource(path)
- if path and path[-1] == '\\':
- path = path[:-1]
- return path
-
-
-def _FixPaths(paths):
- """Fix each of the paths of the list."""
- return [_FixPath(i) for i in paths]
-
-
-def _ConvertSourcesToFilterHierarchy(sources, prefix=None, excluded=None,
- list_excluded=True, msvs_version=None):
- """Converts a list split source file paths into a vcproj folder hierarchy.
-
- Arguments:
- sources: A list of source file paths split.
- prefix: A list of source file path layers meant to apply to each of sources.
- excluded: A set of excluded files.
- msvs_version: A MSVSVersion object.
-
- Returns:
- A hierarchy of filenames and MSVSProject.Filter objects that matches the
- layout of the source tree.
- For example:
- _ConvertSourcesToFilterHierarchy([['a', 'bob1.c'], ['b', 'bob2.c']],
- prefix=['joe'])
- -->
- [MSVSProject.Filter('a', contents=['joe\\a\\bob1.c']),
- MSVSProject.Filter('b', contents=['joe\\b\\bob2.c'])]
- """
- if not prefix: prefix = []
- result = []
- excluded_result = []
- folders = OrderedDict()
- # Gather files into the final result, excluded, or folders.
- for s in sources:
- if len(s) == 1:
- filename = _NormalizedSource('\\'.join(prefix + s))
- if filename in excluded:
- excluded_result.append(filename)
- else:
- result.append(filename)
- elif msvs_version and not msvs_version.UsesVcxproj():
- # For MSVS 2008 and earlier, we need to process all files before walking
- # the sub folders.
- if not folders.get(s[0]):
- folders[s[0]] = []
- folders[s[0]].append(s[1:])
- else:
- contents = _ConvertSourcesToFilterHierarchy([s[1:]], prefix + [s[0]],
- excluded=excluded,
- list_excluded=list_excluded,
- msvs_version=msvs_version)
- contents = MSVSProject.Filter(s[0], contents=contents)
- result.append(contents)
- # Add a folder for excluded files.
- if excluded_result and list_excluded:
- excluded_folder = MSVSProject.Filter('_excluded_files',
- contents=excluded_result)
- result.append(excluded_folder)
-
- if msvs_version and msvs_version.UsesVcxproj():
- return result
-
- # Populate all the folders.
- for f in folders:
- contents = _ConvertSourcesToFilterHierarchy(folders[f], prefix=prefix + [f],
- excluded=excluded,
- list_excluded=list_excluded,
- msvs_version=msvs_version)
- contents = MSVSProject.Filter(f, contents=contents)
- result.append(contents)
- return result
-
-
-def _ToolAppend(tools, tool_name, setting, value, only_if_unset=False):
- if not value: return
- _ToolSetOrAppend(tools, tool_name, setting, value, only_if_unset)
-
-
-def _ToolSetOrAppend(tools, tool_name, setting, value, only_if_unset=False):
- # TODO(bradnelson): ugly hack, fix this more generally!!!
- if 'Directories' in setting or 'Dependencies' in setting:
- if type(value) == str:
- value = value.replace('/', '\\')
- else:
- value = [i.replace('/', '\\') for i in value]
- if not tools.get(tool_name):
- tools[tool_name] = dict()
- tool = tools[tool_name]
- if tool.get(setting):
- if only_if_unset: return
- if type(tool[setting]) == list and type(value) == list:
- tool[setting] += value
- else:
- raise TypeError(
- 'Appending "%s" to a non-list setting "%s" for tool "%s" is '
- 'not allowed, previous value: %s' % (
- value, setting, tool_name, str(tool[setting])))
- else:
- tool[setting] = value
-
-
-def _ConfigPlatform(config_data):
- return config_data.get('msvs_configuration_platform', 'Win32')
-
-
-def _ConfigBaseName(config_name, platform_name):
- if config_name.endswith('_' + platform_name):
- return config_name[0:-len(platform_name) - 1]
- else:
- return config_name
-
-
-def _ConfigFullName(config_name, config_data):
- platform_name = _ConfigPlatform(config_data)
- return '%s|%s' % (_ConfigBaseName(config_name, platform_name), platform_name)
-
-
-def _ConfigWindowsTargetPlatformVersion(config_data):
- ver = config_data.get('msvs_windows_target_platform_version')
- if not ver or re.match(r'^\d+', ver):
- return ver
- for key in [r'HKLM\Software\Microsoft\Microsoft SDKs\Windows\%s',
- r'HKLM\Software\Wow6432Node\Microsoft\Microsoft SDKs\Windows\%s']:
- sdkdir = MSVSVersion._RegistryGetValue(key % ver, 'InstallationFolder')
- if not sdkdir:
- continue
- version = MSVSVersion._RegistryGetValue(key % ver, 'ProductVersion') or ''
- # find a matching entry in sdkdir\include
- names = sorted([x for x in os.listdir(r'%s\include' % sdkdir) \
- if x.startswith(version)], reverse = True)
- return names[0]
-
-
-def _BuildCommandLineForRuleRaw(spec, cmd, cygwin_shell, has_input_path,
- quote_cmd, do_setup_env):
-
- if [x for x in cmd if '$(InputDir)' in x]:
- input_dir_preamble = (
- 'set INPUTDIR=$(InputDir)\n'
- 'if NOT DEFINED INPUTDIR set INPUTDIR=.\\\n'
- 'set INPUTDIR=%INPUTDIR:~0,-1%\n'
- )
- else:
- input_dir_preamble = ''
-
- if cygwin_shell:
- # Find path to cygwin.
- cygwin_dir = _FixPath(spec.get('msvs_cygwin_dirs', ['.'])[0])
- # Prepare command.
- direct_cmd = cmd
- direct_cmd = [i.replace('$(IntDir)',
- '`cygpath -m "${INTDIR}"`') for i in direct_cmd]
- direct_cmd = [i.replace('$(OutDir)',
- '`cygpath -m "${OUTDIR}"`') for i in direct_cmd]
- direct_cmd = [i.replace('$(InputDir)',
- '`cygpath -m "${INPUTDIR}"`') for i in direct_cmd]
- if has_input_path:
- direct_cmd = [i.replace('$(InputPath)',
- '`cygpath -m "${INPUTPATH}"`')
- for i in direct_cmd]
- direct_cmd = ['\\"%s\\"' % i.replace('"', '\\\\\\"') for i in direct_cmd]
- # direct_cmd = gyp.common.EncodePOSIXShellList(direct_cmd)
- direct_cmd = ' '.join(direct_cmd)
- # TODO(quote): regularize quoting path names throughout the module
- cmd = ''
- if do_setup_env:
- cmd += 'call "$(ProjectDir)%(cygwin_dir)s\\setup_env.bat" && '
- cmd += 'set CYGWIN=nontsec&& '
- if direct_cmd.find('NUMBER_OF_PROCESSORS') >= 0:
- cmd += 'set /a NUMBER_OF_PROCESSORS_PLUS_1=%%NUMBER_OF_PROCESSORS%%+1&& '
- if direct_cmd.find('INTDIR') >= 0:
- cmd += 'set INTDIR=$(IntDir)&& '
- if direct_cmd.find('OUTDIR') >= 0:
- cmd += 'set OUTDIR=$(OutDir)&& '
- if has_input_path and direct_cmd.find('INPUTPATH') >= 0:
- cmd += 'set INPUTPATH=$(InputPath) && '
- cmd += 'bash -c "%(cmd)s"'
- cmd = cmd % {'cygwin_dir': cygwin_dir,
- 'cmd': direct_cmd}
- return input_dir_preamble + cmd
- else:
- # Convert cat --> type to mimic unix.
- if cmd[0] == 'cat':
- command = ['type']
- else:
- command = [cmd[0].replace('/', '\\')]
- # Add call before command to ensure that commands can be tied together one
- # after the other without aborting in Incredibuild, since IB makes a bat
- # file out of the raw command string, and some commands (like python) are
- # actually batch files themselves.
- command.insert(0, 'call')
- # Fix the paths
- # TODO(quote): This is a really ugly heuristic, and will miss path fixing
- # for arguments like "--arg=path" or "/opt:path".
- # If the argument starts with a slash or dash, it's probably a command line
- # switch
- arguments = [i if (i[:1] in "/-") else _FixPath(i) for i in cmd[1:]]
- arguments = [i.replace('$(InputDir)', '%INPUTDIR%') for i in arguments]
- arguments = [MSVSSettings.FixVCMacroSlashes(i) for i in arguments]
- if quote_cmd:
- # Support a mode for using cmd directly.
- # Convert any paths to native form (first element is used directly).
- # TODO(quote): regularize quoting path names throughout the module
- arguments = ['"%s"' % i for i in arguments]
- # Collapse into a single command.
- return input_dir_preamble + ' '.join(command + arguments)
-
-
-def _BuildCommandLineForRule(spec, rule, has_input_path, do_setup_env):
- # Currently this weird argument munging is used to duplicate the way a
- # python script would need to be run as part of the chrome tree.
- # Eventually we should add some sort of rule_default option to set this
- # per project. For now the behavior chrome needs is the default.
- mcs = rule.get('msvs_cygwin_shell')
- if mcs is None:
- mcs = int(spec.get('msvs_cygwin_shell', 1))
- elif isinstance(mcs, str):
- mcs = int(mcs)
- quote_cmd = int(rule.get('msvs_quote_cmd', 1))
- return _BuildCommandLineForRuleRaw(spec, rule['action'], mcs, has_input_path,
- quote_cmd, do_setup_env=do_setup_env)
-
-
-def _AddActionStep(actions_dict, inputs, outputs, description, command):
- """Merge action into an existing list of actions.
-
- Care must be taken so that actions which have overlapping inputs either don't
- get assigned to the same input, or get collapsed into one.
-
- Arguments:
- actions_dict: dictionary keyed on input name, which maps to a list of
- dicts describing the actions attached to that input file.
- inputs: list of inputs
- outputs: list of outputs
- description: description of the action
- command: command line to execute
- """
- # Require there to be at least one input (call sites will ensure this).
- assert inputs
-
- action = {
- 'inputs': inputs,
- 'outputs': outputs,
- 'description': description,
- 'command': command,
- }
-
- # Pick where to stick this action.
- # While less than optimal in terms of build time, attach them to the first
- # input for now.
- chosen_input = inputs[0]
-
- # Add it there.
- if chosen_input not in actions_dict:
- actions_dict[chosen_input] = []
- actions_dict[chosen_input].append(action)
-
-
-def _AddCustomBuildToolForMSVS(p, spec, primary_input,
- inputs, outputs, description, cmd):
- """Add a custom build tool to execute something.
-
- Arguments:
- p: the target project
- spec: the target project dict
- primary_input: input file to attach the build tool to
- inputs: list of inputs
- outputs: list of outputs
- description: description of the action
- cmd: command line to execute
- """
- inputs = _FixPaths(inputs)
- outputs = _FixPaths(outputs)
- tool = MSVSProject.Tool(
- 'VCCustomBuildTool',
- {'Description': description,
- 'AdditionalDependencies': ';'.join(inputs),
- 'Outputs': ';'.join(outputs),
- 'CommandLine': cmd,
- })
- # Add to the properties of primary input for each config.
- for config_name, c_data in spec['configurations'].iteritems():
- p.AddFileConfig(_FixPath(primary_input),
- _ConfigFullName(config_name, c_data), tools=[tool])
-
-
-def _AddAccumulatedActionsToMSVS(p, spec, actions_dict):
- """Add actions accumulated into an actions_dict, merging as needed.
-
- Arguments:
- p: the target project
- spec: the target project dict
- actions_dict: dictionary keyed on input name, which maps to a list of
- dicts describing the actions attached to that input file.
- """
- for primary_input in actions_dict:
- inputs = OrderedSet()
- outputs = OrderedSet()
- descriptions = []
- commands = []
- for action in actions_dict[primary_input]:
- inputs.update(OrderedSet(action['inputs']))
- outputs.update(OrderedSet(action['outputs']))
- descriptions.append(action['description'])
- commands.append(action['command'])
- # Add the custom build step for one input file.
- description = ', and also '.join(descriptions)
- command = '\r\n'.join(commands)
- _AddCustomBuildToolForMSVS(p, spec,
- primary_input=primary_input,
- inputs=inputs,
- outputs=outputs,
- description=description,
- cmd=command)
-
-
-def _RuleExpandPath(path, input_file):
- """Given the input file to which a rule applied, string substitute a path.
-
- Arguments:
- path: a path to string expand
- input_file: the file to which the rule applied.
- Returns:
- The string substituted path.
- """
- path = path.replace('$(InputName)',
- os.path.splitext(os.path.split(input_file)[1])[0])
- path = path.replace('$(InputDir)', os.path.dirname(input_file))
- path = path.replace('$(InputExt)',
- os.path.splitext(os.path.split(input_file)[1])[1])
- path = path.replace('$(InputFileName)', os.path.split(input_file)[1])
- path = path.replace('$(InputPath)', input_file)
- return path
-
-
-def _FindRuleTriggerFiles(rule, sources):
- """Find the list of files which a particular rule applies to.
-
- Arguments:
- rule: the rule in question
- sources: the set of all known source files for this project
- Returns:
- The list of sources that trigger a particular rule.
- """
- return rule.get('rule_sources', [])
-
-
-def _RuleInputsAndOutputs(rule, trigger_file):
- """Find the inputs and outputs generated by a rule.
-
- Arguments:
- rule: the rule in question.
- trigger_file: the main trigger for this rule.
- Returns:
- The pair of (inputs, outputs) involved in this rule.
- """
- raw_inputs = _FixPaths(rule.get('inputs', []))
- raw_outputs = _FixPaths(rule.get('outputs', []))
- inputs = OrderedSet()
- outputs = OrderedSet()
- inputs.add(trigger_file)
- for i in raw_inputs:
- inputs.add(_RuleExpandPath(i, trigger_file))
- for o in raw_outputs:
- outputs.add(_RuleExpandPath(o, trigger_file))
- return (inputs, outputs)
-
-
-def _GenerateNativeRulesForMSVS(p, rules, output_dir, spec, options):
- """Generate a native rules file.
-
- Arguments:
- p: the target project
- rules: the set of rules to include
- output_dir: the directory in which the project/gyp resides
- spec: the project dict
- options: global generator options
- """
- rules_filename = '%s%s.rules' % (spec['target_name'],
- options.suffix)
- rules_file = MSVSToolFile.Writer(os.path.join(output_dir, rules_filename),
- spec['target_name'])
- # Add each rule.
- for r in rules:
- rule_name = r['rule_name']
- rule_ext = r['extension']
- inputs = _FixPaths(r.get('inputs', []))
- outputs = _FixPaths(r.get('outputs', []))
- # Skip a rule with no action and no inputs.
- if 'action' not in r and not r.get('rule_sources', []):
- continue
- cmd = _BuildCommandLineForRule(spec, r, has_input_path=True,
- do_setup_env=True)
- rules_file.AddCustomBuildRule(name=rule_name,
- description=r.get('message', rule_name),
- extensions=[rule_ext],
- additional_dependencies=inputs,
- outputs=outputs,
- cmd=cmd)
- # Write out rules file.
- rules_file.WriteIfChanged()
-
- # Add rules file to project.
- p.AddToolFile(rules_filename)
-
-
-def _Cygwinify(path):
- path = path.replace('$(OutDir)', '$(OutDirCygwin)')
- path = path.replace('$(IntDir)', '$(IntDirCygwin)')
- return path
-
-
-def _GenerateExternalRules(rules, output_dir, spec,
- sources, options, actions_to_add):
- """Generate an external makefile to do a set of rules.
-
- Arguments:
- rules: the list of rules to include
- output_dir: path containing project and gyp files
- spec: project specification data
- sources: set of sources known
- options: global generator options
- actions_to_add: The list of actions we will add to.
- """
- filename = '%s_rules%s.mk' % (spec['target_name'], options.suffix)
- mk_file = gyp.common.WriteOnDiff(os.path.join(output_dir, filename))
- # Find cygwin style versions of some paths.
- mk_file.write('OutDirCygwin:=$(shell cygpath -u "$(OutDir)")\n')
- mk_file.write('IntDirCygwin:=$(shell cygpath -u "$(IntDir)")\n')
- # Gather stuff needed to emit all: target.
- all_inputs = OrderedSet()
- all_outputs = OrderedSet()
- all_output_dirs = OrderedSet()
- first_outputs = []
- for rule in rules:
- trigger_files = _FindRuleTriggerFiles(rule, sources)
- for tf in trigger_files:
- inputs, outputs = _RuleInputsAndOutputs(rule, tf)
- all_inputs.update(OrderedSet(inputs))
- all_outputs.update(OrderedSet(outputs))
- # Only use one target from each rule as the dependency for
- # 'all' so we don't try to build each rule multiple times.
- first_outputs.append(list(outputs)[0])
- # Get the unique output directories for this rule.
- output_dirs = [os.path.split(i)[0] for i in outputs]
- for od in output_dirs:
- all_output_dirs.add(od)
- first_outputs_cyg = [_Cygwinify(i) for i in first_outputs]
- # Write out all: target, including mkdir for each output directory.
- mk_file.write('all: %s\n' % ' '.join(first_outputs_cyg))
- for od in all_output_dirs:
- if od:
- mk_file.write('\tmkdir -p `cygpath -u "%s"`\n' % od)
- mk_file.write('\n')
- # Define how each output is generated.
- for rule in rules:
- trigger_files = _FindRuleTriggerFiles(rule, sources)
- for tf in trigger_files:
- # Get all the inputs and outputs for this rule for this trigger file.
- inputs, outputs = _RuleInputsAndOutputs(rule, tf)
- inputs = [_Cygwinify(i) for i in inputs]
- outputs = [_Cygwinify(i) for i in outputs]
- # Prepare the command line for this rule.
- cmd = [_RuleExpandPath(c, tf) for c in rule['action']]
- cmd = ['"%s"' % i for i in cmd]
- cmd = ' '.join(cmd)
- # Add it to the makefile.
- mk_file.write('%s: %s\n' % (' '.join(outputs), ' '.join(inputs)))
- mk_file.write('\t%s\n\n' % cmd)
- # Close up the file.
- mk_file.close()
-
- # Add makefile to list of sources.
- sources.add(filename)
- # Add a build action to call makefile.
- cmd = ['make',
- 'OutDir=$(OutDir)',
- 'IntDir=$(IntDir)',
- '-j', '${NUMBER_OF_PROCESSORS_PLUS_1}',
- '-f', filename]
- cmd = _BuildCommandLineForRuleRaw(spec, cmd, True, False, True, True)
- # Insert makefile as 0'th input, so it gets the action attached there,
- # as this is easier to understand from in the IDE.
- all_inputs = list(all_inputs)
- all_inputs.insert(0, filename)
- _AddActionStep(actions_to_add,
- inputs=_FixPaths(all_inputs),
- outputs=_FixPaths(all_outputs),
- description='Running external rules for %s' %
- spec['target_name'],
- command=cmd)
-
-
-def _EscapeEnvironmentVariableExpansion(s):
- """Escapes % characters.
-
- Escapes any % characters so that Windows-style environment variable
- expansions will leave them alone.
- See http://connect.microsoft.com/VisualStudio/feedback/details/106127/cl-d-name-text-containing-percentage-characters-doesnt-compile
- to understand why we have to do this.
-
- Args:
- s: The string to be escaped.
-
- Returns:
- The escaped string.
- """
- s = s.replace('%', '%%')
- return s
-
-
-quote_replacer_regex = re.compile(r'(\\*)"')
-
-
-def _EscapeCommandLineArgumentForMSVS(s):
- """Escapes a Windows command-line argument.
-
- So that the Win32 CommandLineToArgv function will turn the escaped result back
- into the original string.
- See http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
- ("Parsing C++ Command-Line Arguments") to understand why we have to do
- this.
-
- Args:
- s: the string to be escaped.
- Returns:
- the escaped string.
- """
-
- def _Replace(match):
- # For a literal quote, CommandLineToArgv requires an odd number of
- # backslashes preceding it, and it produces half as many literal backslashes
- # (rounded down). So we need to produce 2n+1 backslashes.
- return 2 * match.group(1) + '\\"'
-
- # Escape all quotes so that they are interpreted literally.
- s = quote_replacer_regex.sub(_Replace, s)
- # Now add unescaped quotes so that any whitespace is interpreted literally.
- s = '"' + s + '"'
- return s
-
-
-delimiters_replacer_regex = re.compile(r'(\\*)([,;]+)')
-
-
-def _EscapeVCProjCommandLineArgListItem(s):
- """Escapes command line arguments for MSVS.
-
- The VCProj format stores string lists in a single string using commas and
- semi-colons as separators, which must be quoted if they are to be
- interpreted literally. However, command-line arguments may already have
- quotes, and the VCProj parser is ignorant of the backslash escaping
- convention used by CommandLineToArgv, so the command-line quotes and the
- VCProj quotes may not be the same quotes. So to store a general
- command-line argument in a VCProj list, we need to parse the existing
- quoting according to VCProj's convention and quote any delimiters that are
- not already quoted by that convention. The quotes that we add will also be
- seen by CommandLineToArgv, so if backslashes precede them then we also have
- to escape those backslashes according to the CommandLineToArgv
- convention.
-
- Args:
- s: the string to be escaped.
- Returns:
- the escaped string.
- """
-
- def _Replace(match):
- # For a non-literal quote, CommandLineToArgv requires an even number of
- # backslashes preceding it, and it produces half as many literal
- # backslashes. So we need to produce 2n backslashes.
- return 2 * match.group(1) + '"' + match.group(2) + '"'
-
- segments = s.split('"')
- # The unquoted segments are at the even-numbered indices.
- for i in range(0, len(segments), 2):
- segments[i] = delimiters_replacer_regex.sub(_Replace, segments[i])
- # Concatenate back into a single string
- s = '"'.join(segments)
- if len(segments) % 2 == 0:
- # String ends while still quoted according to VCProj's convention. This
- # means the delimiter and the next list item that follow this one in the
- # .vcproj file will be misinterpreted as part of this item. There is nothing
- # we can do about this. Adding an extra quote would correct the problem in
- # the VCProj but cause the same problem on the final command-line. Moving
- # the item to the end of the list does works, but that's only possible if
- # there's only one such item. Let's just warn the user.
- print >> sys.stderr, ('Warning: MSVS may misinterpret the odd number of ' +
- 'quotes in ' + s)
- return s
-
-
-def _EscapeCppDefineForMSVS(s):
- """Escapes a CPP define so that it will reach the compiler unaltered."""
- s = _EscapeEnvironmentVariableExpansion(s)
- s = _EscapeCommandLineArgumentForMSVS(s)
- s = _EscapeVCProjCommandLineArgListItem(s)
- # cl.exe replaces literal # characters with = in preprocesor definitions for
- # some reason. Octal-encode to work around that.
- s = s.replace('#', '\\%03o' % ord('#'))
- return s
-
-
-quote_replacer_regex2 = re.compile(r'(\\+)"')
-
-
-def _EscapeCommandLineArgumentForMSBuild(s):
- """Escapes a Windows command-line argument for use by MSBuild."""
-
- def _Replace(match):
- return (len(match.group(1)) / 2 * 4) * '\\' + '\\"'
-
- # Escape all quotes so that they are interpreted literally.
- s = quote_replacer_regex2.sub(_Replace, s)
- return s
-
-
-def _EscapeMSBuildSpecialCharacters(s):
- escape_dictionary = {
- '%': '%25',
- '$': '%24',
- '@': '%40',
- "'": '%27',
- ';': '%3B',
- '?': '%3F',
- '*': '%2A'
- }
- result = ''.join([escape_dictionary.get(c, c) for c in s])
- return result
-
-
-def _EscapeCppDefineForMSBuild(s):
- """Escapes a CPP define so that it will reach the compiler unaltered."""
- s = _EscapeEnvironmentVariableExpansion(s)
- s = _EscapeCommandLineArgumentForMSBuild(s)
- s = _EscapeMSBuildSpecialCharacters(s)
- # cl.exe replaces literal # characters with = in preprocesor definitions for
- # some reason. Octal-encode to work around that.
- s = s.replace('#', '\\%03o' % ord('#'))
- return s
-
-
-def _GenerateRulesForMSVS(p, output_dir, options, spec,
- sources, excluded_sources,
- actions_to_add):
- """Generate all the rules for a particular project.
-
- Arguments:
- p: the project
- output_dir: directory to emit rules to
- options: global options passed to the generator
- spec: the specification for this project
- sources: the set of all known source files in this project
- excluded_sources: the set of sources excluded from normal processing
- actions_to_add: deferred list of actions to add in
- """
- rules = spec.get('rules', [])
- rules_native = [r for r in rules if not int(r.get('msvs_external_rule', 0))]
- rules_external = [r for r in rules if int(r.get('msvs_external_rule', 0))]
-
- # Handle rules that use a native rules file.
- if rules_native:
- _GenerateNativeRulesForMSVS(p, rules_native, output_dir, spec, options)
-
- # Handle external rules (non-native rules).
- if rules_external:
- _GenerateExternalRules(rules_external, output_dir, spec,
- sources, options, actions_to_add)
- _AdjustSourcesForRules(rules, sources, excluded_sources, False)
-
-
-def _AdjustSourcesForRules(rules, sources, excluded_sources, is_msbuild):
- # Add outputs generated by each rule (if applicable).
- for rule in rules:
- # Add in the outputs from this rule.
- trigger_files = _FindRuleTriggerFiles(rule, sources)
- for trigger_file in trigger_files:
- # Remove trigger_file from excluded_sources to let the rule be triggered
- # (e.g. rule trigger ax_enums.idl is added to excluded_sources
- # because it's also in an action's inputs in the same project)
- excluded_sources.discard(_FixPath(trigger_file))
- # Done if not processing outputs as sources.
- if int(rule.get('process_outputs_as_sources', False)):
- inputs, outputs = _RuleInputsAndOutputs(rule, trigger_file)
- inputs = OrderedSet(_FixPaths(inputs))
- outputs = OrderedSet(_FixPaths(outputs))
- inputs.remove(_FixPath(trigger_file))
- sources.update(inputs)
- if not is_msbuild:
- excluded_sources.update(inputs)
- sources.update(outputs)
-
-
-def _FilterActionsFromExcluded(excluded_sources, actions_to_add):
- """Take inputs with actions attached out of the list of exclusions.
-
- Arguments:
- excluded_sources: list of source files not to be built.
- actions_to_add: dict of actions keyed on source file they're attached to.
- Returns:
- excluded_sources with files that have actions attached removed.
- """
- must_keep = OrderedSet(_FixPaths(actions_to_add.keys()))
- return [s for s in excluded_sources if s not in must_keep]
-
-
-def _GetDefaultConfiguration(spec):
- return spec['configurations'][spec['default_configuration']]
-
-
-def _GetGuidOfProject(proj_path, spec):
- """Get the guid for the project.
-
- Arguments:
- proj_path: Path of the vcproj or vcxproj file to generate.
- spec: The target dictionary containing the properties of the target.
- Returns:
- the guid.
- Raises:
- ValueError: if the specified GUID is invalid.
- """
- # Pluck out the default configuration.
- default_config = _GetDefaultConfiguration(spec)
- # Decide the guid of the project.
- guid = default_config.get('msvs_guid')
- if guid:
- if VALID_MSVS_GUID_CHARS.match(guid) is None:
- raise ValueError('Invalid MSVS guid: "%s". Must match regex: "%s".' %
- (guid, VALID_MSVS_GUID_CHARS.pattern))
- guid = '{%s}' % guid
- guid = guid or MSVSNew.MakeGuid(proj_path)
- return guid
-
-
-def _GetMsbuildToolsetOfProject(proj_path, spec, version):
- """Get the platform toolset for the project.
-
- Arguments:
- proj_path: Path of the vcproj or vcxproj file to generate.
- spec: The target dictionary containing the properties of the target.
- version: The MSVSVersion object.
- Returns:
- the platform toolset string or None.
- """
- # Pluck out the default configuration.
- default_config = _GetDefaultConfiguration(spec)
- toolset = default_config.get('msbuild_toolset')
- if not toolset and version.DefaultToolset():
- toolset = version.DefaultToolset()
- return toolset
-
-
-def _GenerateProject(project, options, version, generator_flags):
- """Generates a vcproj file.
-
- Arguments:
- project: the MSVSProject object.
- options: global generator options.
- version: the MSVSVersion object.
- generator_flags: dict of generator-specific flags.
- Returns:
- A list of source files that cannot be found on disk.
- """
- default_config = _GetDefaultConfiguration(project.spec)
-
- # Skip emitting anything if told to with msvs_existing_vcproj option.
- if default_config.get('msvs_existing_vcproj'):
- return []
-
- if version.UsesVcxproj():
- return _GenerateMSBuildProject(project, options, version, generator_flags)
- else:
- return _GenerateMSVSProject(project, options, version, generator_flags)
-
-
-# TODO: Avoid code duplication with _ValidateSourcesForOSX in make.py.
-def _ValidateSourcesForMSVSProject(spec, version):
- """Makes sure if duplicate basenames are not specified in the source list.
-
- Arguments:
- spec: The target dictionary containing the properties of the target.
- version: The VisualStudioVersion object.
- """
- # This validation should not be applied to MSVC2010 and later.
- assert not version.UsesVcxproj()
-
- # TODO: Check if MSVC allows this for loadable_module targets.
- if spec.get('type', None) not in ('static_library', 'shared_library'):
- return
- sources = spec.get('sources', [])
- basenames = {}
- for source in sources:
- name, ext = os.path.splitext(source)
- is_compiled_file = ext in [
- '.c', '.cc', '.cpp', '.cxx', '.m', '.mm', '.s', '.S']
- if not is_compiled_file:
- continue
- basename = os.path.basename(name) # Don't include extension.
- basenames.setdefault(basename, []).append(source)
-
- error = ''
- for basename, files in basenames.iteritems():
- if len(files) > 1:
- error += ' %s: %s\n' % (basename, ' '.join(files))
-
- if error:
- print('static library %s has several files with the same basename:\n' %
- spec['target_name'] + error + 'MSVC08 cannot handle that.')
- raise GypError('Duplicate basenames in sources section, see list above')
-
-
-def _GenerateMSVSProject(project, options, version, generator_flags):
- """Generates a .vcproj file. It may create .rules and .user files too.
-
- Arguments:
- project: The project object we will generate the file for.
- options: Global options passed to the generator.
- version: The VisualStudioVersion object.
- generator_flags: dict of generator-specific flags.
- """
- spec = project.spec
- gyp.common.EnsureDirExists(project.path)
-
- platforms = _GetUniquePlatforms(spec)
- p = MSVSProject.Writer(project.path, version, spec['target_name'],
- project.guid, platforms)
-
- # Get directory project file is in.
- project_dir = os.path.split(project.path)[0]
- gyp_path = _NormalizedSource(project.build_file)
- relative_path_of_gyp_file = gyp.common.RelativePath(gyp_path, project_dir)
-
- config_type = _GetMSVSConfigurationType(spec, project.build_file)
- for config_name, config in spec['configurations'].iteritems():
- _AddConfigurationToMSVSProject(p, spec, config_type, config_name, config)
-
- # MSVC08 and prior version cannot handle duplicate basenames in the same
- # target.
- # TODO: Take excluded sources into consideration if possible.
- _ValidateSourcesForMSVSProject(spec, version)
-
- # Prepare list of sources and excluded sources.
- gyp_file = os.path.split(project.build_file)[1]
- sources, excluded_sources = _PrepareListOfSources(spec, generator_flags,
- gyp_file)
-
- # Add rules.
- actions_to_add = {}
- _GenerateRulesForMSVS(p, project_dir, options, spec,
- sources, excluded_sources,
- actions_to_add)
- list_excluded = generator_flags.get('msvs_list_excluded_files', True)
- sources, excluded_sources, excluded_idl = (
- _AdjustSourcesAndConvertToFilterHierarchy(spec, options, project_dir,
- sources, excluded_sources,
- list_excluded, version))
-
- # Add in files.
- missing_sources = _VerifySourcesExist(sources, project_dir)
- p.AddFiles(sources)
-
- _AddToolFilesToMSVS(p, spec)
- _HandlePreCompiledHeaders(p, sources, spec)
- _AddActions(actions_to_add, spec, relative_path_of_gyp_file)
- _AddCopies(actions_to_add, spec)
- _WriteMSVSUserFile(project.path, version, spec)
-
- # NOTE: this stanza must appear after all actions have been decided.
- # Don't excluded sources with actions attached, or they won't run.
- excluded_sources = _FilterActionsFromExcluded(
- excluded_sources, actions_to_add)
- _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources, excluded_idl,
- list_excluded)
- _AddAccumulatedActionsToMSVS(p, spec, actions_to_add)
-
- # Write it out.
- p.WriteIfChanged()
-
- return missing_sources
-
-
-def _GetUniquePlatforms(spec):
- """Returns the list of unique platforms for this spec, e.g ['win32', ...].
-
- Arguments:
- spec: The target dictionary containing the properties of the target.
- Returns:
- The MSVSUserFile object created.
- """
- # Gather list of unique platforms.
- platforms = OrderedSet()
- for configuration in spec['configurations']:
- platforms.add(_ConfigPlatform(spec['configurations'][configuration]))
- platforms = list(platforms)
- return platforms
-
-
-def _CreateMSVSUserFile(proj_path, version, spec):
- """Generates a .user file for the user running this Gyp program.
-
- Arguments:
- proj_path: The path of the project file being created. The .user file
- shares the same path (with an appropriate suffix).
- version: The VisualStudioVersion object.
- spec: The target dictionary containing the properties of the target.
- Returns:
- The MSVSUserFile object created.
- """
- (domain, username) = _GetDomainAndUserName()
- vcuser_filename = '.'.join([proj_path, domain, username, 'user'])
- user_file = MSVSUserFile.Writer(vcuser_filename, version,
- spec['target_name'])
- return user_file
-
-
-def _GetMSVSConfigurationType(spec, build_file):
- """Returns the configuration type for this project.
-
- It's a number defined by Microsoft. May raise an exception.
-
- Args:
- spec: The target dictionary containing the properties of the target.
- build_file: The path of the gyp file.
- Returns:
- An integer, the configuration type.
- """
- try:
- config_type = {
- 'executable': '1', # .exe
- 'shared_library': '2', # .dll
- 'loadable_module': '2', # .dll
- 'static_library': '4', # .lib
- 'none': '10', # Utility type
- }[spec['type']]
- except KeyError:
- if spec.get('type'):
- raise GypError('Target type %s is not a valid target type for '
- 'target %s in %s.' %
- (spec['type'], spec['target_name'], build_file))
- else:
- raise GypError('Missing type field for target %s in %s.' %
- (spec['target_name'], build_file))
- return config_type
-
-
-def _AddConfigurationToMSVSProject(p, spec, config_type, config_name, config):
- """Adds a configuration to the MSVS project.
-
- Many settings in a vcproj file are specific to a configuration. This
- function the main part of the vcproj file that's configuration specific.
-
- Arguments:
- p: The target project being generated.
- spec: The target dictionary containing the properties of the target.
- config_type: The configuration type, a number as defined by Microsoft.
- config_name: The name of the configuration.
- config: The dictionary that defines the special processing to be done
- for this configuration.
- """
- # Get the information for this configuration
- include_dirs, midl_include_dirs, resource_include_dirs = \
- _GetIncludeDirs(config)
- libraries = _GetLibraries(spec)
- library_dirs = _GetLibraryDirs(config)
- out_file, vc_tool, _ = _GetOutputFilePathAndTool(spec, msbuild=False)
- defines = _GetDefines(config)
- defines = [_EscapeCppDefineForMSVS(d) for d in defines]
- disabled_warnings = _GetDisabledWarnings(config)
- prebuild = config.get('msvs_prebuild')
- postbuild = config.get('msvs_postbuild')
- def_file = _GetModuleDefinition(spec)
- precompiled_header = config.get('msvs_precompiled_header')
-
- # Prepare the list of tools as a dictionary.
- tools = dict()
- # Add in user specified msvs_settings.
- msvs_settings = config.get('msvs_settings', {})
- MSVSSettings.ValidateMSVSSettings(msvs_settings)
-
- # Prevent default library inheritance from the environment.
- _ToolAppend(tools, 'VCLinkerTool', 'AdditionalDependencies', ['$(NOINHERIT)'])
-
- for tool in msvs_settings:
- settings = config['msvs_settings'][tool]
- for setting in settings:
- _ToolAppend(tools, tool, setting, settings[setting])
- # Add the information to the appropriate tool
- _ToolAppend(tools, 'VCCLCompilerTool',
- 'AdditionalIncludeDirectories', include_dirs)
- _ToolAppend(tools, 'VCMIDLTool',
- 'AdditionalIncludeDirectories', midl_include_dirs)
- _ToolAppend(tools, 'VCResourceCompilerTool',
- 'AdditionalIncludeDirectories', resource_include_dirs)
- # Add in libraries.
- _ToolAppend(tools, 'VCLinkerTool', 'AdditionalDependencies', libraries)
- _ToolAppend(tools, 'VCLinkerTool', 'AdditionalLibraryDirectories',
- library_dirs)
- if out_file:
- _ToolAppend(tools, vc_tool, 'OutputFile', out_file, only_if_unset=True)
- # Add defines.
- _ToolAppend(tools, 'VCCLCompilerTool', 'PreprocessorDefinitions', defines)
- _ToolAppend(tools, 'VCResourceCompilerTool', 'PreprocessorDefinitions',
- defines)
- # Change program database directory to prevent collisions.
- _ToolAppend(tools, 'VCCLCompilerTool', 'ProgramDataBaseFileName',
- '$(IntDir)$(ProjectName)\\vc80.pdb', only_if_unset=True)
- # Add disabled warnings.
- _ToolAppend(tools, 'VCCLCompilerTool',
- 'DisableSpecificWarnings', disabled_warnings)
- # Add Pre-build.
- _ToolAppend(tools, 'VCPreBuildEventTool', 'CommandLine', prebuild)
- # Add Post-build.
- _ToolAppend(tools, 'VCPostBuildEventTool', 'CommandLine', postbuild)
- # Turn on precompiled headers if appropriate.
- if precompiled_header:
- precompiled_header = os.path.split(precompiled_header)[1]
- _ToolAppend(tools, 'VCCLCompilerTool', 'UsePrecompiledHeader', '2')
- _ToolAppend(tools, 'VCCLCompilerTool',
- 'PrecompiledHeaderThrough', precompiled_header)
- _ToolAppend(tools, 'VCCLCompilerTool',
- 'ForcedIncludeFiles', precompiled_header)
- # Loadable modules don't generate import libraries;
- # tell dependent projects to not expect one.
- if spec['type'] == 'loadable_module':
- _ToolAppend(tools, 'VCLinkerTool', 'IgnoreImportLibrary', 'true')
- # Set the module definition file if any.
- if def_file:
- _ToolAppend(tools, 'VCLinkerTool', 'ModuleDefinitionFile', def_file)
-
- _AddConfigurationToMSVS(p, spec, tools, config, config_type, config_name)
-
-
-def _GetIncludeDirs(config):
- """Returns the list of directories to be used for #include directives.
-
- Arguments:
- config: The dictionary that defines the special processing to be done
- for this configuration.
- Returns:
- The list of directory paths.
- """
- # TODO(bradnelson): include_dirs should really be flexible enough not to
- # require this sort of thing.
- include_dirs = (
- config.get('include_dirs', []) +
- config.get('msvs_system_include_dirs', []))
- midl_include_dirs = (
- config.get('midl_include_dirs', []) +
- config.get('msvs_system_include_dirs', []))
- resource_include_dirs = config.get('resource_include_dirs', include_dirs)
- include_dirs = _FixPaths(include_dirs)
- midl_include_dirs = _FixPaths(midl_include_dirs)
- resource_include_dirs = _FixPaths(resource_include_dirs)
- return include_dirs, midl_include_dirs, resource_include_dirs
-
-
-def _GetLibraryDirs(config):
- """Returns the list of directories to be used for library search paths.
-
- Arguments:
- config: The dictionary that defines the special processing to be done
- for this configuration.
- Returns:
- The list of directory paths.
- """
-
- library_dirs = config.get('library_dirs', [])
- library_dirs = _FixPaths(library_dirs)
- return library_dirs
-
-
-def _GetLibraries(spec):
- """Returns the list of libraries for this configuration.
-
- Arguments:
- spec: The target dictionary containing the properties of the target.
- Returns:
- The list of directory paths.
- """
- libraries = spec.get('libraries', [])
- # Strip out -l, as it is not used on windows (but is needed so we can pass
- # in libraries that are assumed to be in the default library path).
- # Also remove duplicate entries, leaving only the last duplicate, while
- # preserving order.
- found = OrderedSet()
- unique_libraries_list = []
- for entry in reversed(libraries):
- library = re.sub(r'^\-l', '', entry)
- if not os.path.splitext(library)[1]:
- library += '.lib'
- if library not in found:
- found.add(library)
- unique_libraries_list.append(library)
- unique_libraries_list.reverse()
- return unique_libraries_list
-
-
-def _GetOutputFilePathAndTool(spec, msbuild):
- """Returns the path and tool to use for this target.
-
- Figures out the path of the file this spec will create and the name of
- the VC tool that will create it.
-
- Arguments:
- spec: The target dictionary containing the properties of the target.
- Returns:
- A triple of (file path, name of the vc tool, name of the msbuild tool)
- """
- # Select a name for the output file.
- out_file = ''
- vc_tool = ''
- msbuild_tool = ''
- output_file_map = {
- 'executable': ('VCLinkerTool', 'Link', '$(OutDir)', '.exe'),
- 'shared_library': ('VCLinkerTool', 'Link', '$(OutDir)', '.dll'),
- 'loadable_module': ('VCLinkerTool', 'Link', '$(OutDir)', '.dll'),
- 'static_library': ('VCLibrarianTool', 'Lib', '$(OutDir)lib\\', '.lib'),
- }
- output_file_props = output_file_map.get(spec['type'])
- if output_file_props and int(spec.get('msvs_auto_output_file', 1)):
- vc_tool, msbuild_tool, out_dir, suffix = output_file_props
- if spec.get('standalone_static_library', 0):
- out_dir = '$(OutDir)'
- out_dir = spec.get('product_dir', out_dir)
- product_extension = spec.get('product_extension')
- if product_extension:
- suffix = '.' + product_extension
- elif msbuild:
- suffix = '$(TargetExt)'
- prefix = spec.get('product_prefix', '')
- product_name = spec.get('product_name', '$(ProjectName)')
- out_file = ntpath.join(out_dir, prefix + product_name + suffix)
- return out_file, vc_tool, msbuild_tool
-
-
-def _GetOutputTargetExt(spec):
- """Returns the extension for this target, including the dot
-
- If product_extension is specified, set target_extension to this to avoid
- MSB8012, returns None otherwise. Ignores any target_extension settings in
- the input files.
-
- Arguments:
- spec: The target dictionary containing the properties of the target.
- Returns:
- A string with the extension, or None
- """
- target_extension = spec.get('product_extension')
- if target_extension:
- return '.' + target_extension
- return None
-
-
-def _GetDefines(config):
- """Returns the list of preprocessor definitions for this configuation.
-
- Arguments:
- config: The dictionary that defines the special processing to be done
- for this configuration.
- Returns:
- The list of preprocessor definitions.
- """
- defines = []
- for d in config.get('defines', []):
- if type(d) == list:
- fd = '='.join([str(dpart) for dpart in d])
- else:
- fd = str(d)
- defines.append(fd)
- return defines
-
-
-def _GetDisabledWarnings(config):
- return [str(i) for i in config.get('msvs_disabled_warnings', [])]
-
-
-def _GetModuleDefinition(spec):
- def_file = ''
- if spec['type'] in ['shared_library', 'loadable_module', 'executable']:
- def_files = [s for s in spec.get('sources', []) if s.endswith('.def')]
- if len(def_files) == 1:
- def_file = _FixPath(def_files[0])
- elif def_files:
- raise ValueError(
- 'Multiple module definition files in one target, target %s lists '
- 'multiple .def files: %s' % (
- spec['target_name'], ' '.join(def_files)))
- return def_file
-
-
-def _ConvertToolsToExpectedForm(tools):
- """Convert tools to a form expected by Visual Studio.
-
- Arguments:
- tools: A dictionary of settings; the tool name is the key.
- Returns:
- A list of Tool objects.
- """
- tool_list = []
- for tool, settings in tools.iteritems():
- # Collapse settings with lists.
- settings_fixed = {}
- for setting, value in settings.iteritems():
- if type(value) == list:
- if ((tool == 'VCLinkerTool' and
- setting == 'AdditionalDependencies') or
- setting == 'AdditionalOptions'):
- settings_fixed[setting] = ' '.join(value)
- else:
- settings_fixed[setting] = ';'.join(value)
- else:
- settings_fixed[setting] = value
- # Add in this tool.
- tool_list.append(MSVSProject.Tool(tool, settings_fixed))
- return tool_list
-
-
-def _AddConfigurationToMSVS(p, spec, tools, config, config_type, config_name):
- """Add to the project file the configuration specified by config.
-
- Arguments:
- p: The target project being generated.
- spec: the target project dict.
- tools: A dictionary of settings; the tool name is the key.
- config: The dictionary that defines the special processing to be done
- for this configuration.
- config_type: The configuration type, a number as defined by Microsoft.
- config_name: The name of the configuration.
- """
- attributes = _GetMSVSAttributes(spec, config, config_type)
- # Add in this configuration.
- tool_list = _ConvertToolsToExpectedForm(tools)
- p.AddConfig(_ConfigFullName(config_name, config),
- attrs=attributes, tools=tool_list)
-
-
-def _GetMSVSAttributes(spec, config, config_type):
- # Prepare configuration attributes.
- prepared_attrs = {}
- source_attrs = config.get('msvs_configuration_attributes', {})
- for a in source_attrs:
- prepared_attrs[a] = source_attrs[a]
- # Add props files.
- vsprops_dirs = config.get('msvs_props', [])
- vsprops_dirs = _FixPaths(vsprops_dirs)
- if vsprops_dirs:
- prepared_attrs['InheritedPropertySheets'] = ';'.join(vsprops_dirs)
- # Set configuration type.
- prepared_attrs['ConfigurationType'] = config_type
- output_dir = prepared_attrs.get('OutputDirectory',
- '$(SolutionDir)$(ConfigurationName)')
- prepared_attrs['OutputDirectory'] = _FixPath(output_dir) + '\\'
- if 'IntermediateDirectory' not in prepared_attrs:
- intermediate = '$(ConfigurationName)\\obj\\$(ProjectName)'
- prepared_attrs['IntermediateDirectory'] = _FixPath(intermediate) + '\\'
- else:
- intermediate = _FixPath(prepared_attrs['IntermediateDirectory']) + '\\'
- intermediate = MSVSSettings.FixVCMacroSlashes(intermediate)
- prepared_attrs['IntermediateDirectory'] = intermediate
- return prepared_attrs
-
-
-def _AddNormalizedSources(sources_set, sources_array):
- sources_set.update(_NormalizedSource(s) for s in sources_array)
-
-
-def _PrepareListOfSources(spec, generator_flags, gyp_file):
- """Prepare list of sources and excluded sources.
-
- Besides the sources specified directly in the spec, adds the gyp file so
- that a change to it will cause a re-compile. Also adds appropriate sources
- for actions and copies. Assumes later stage will un-exclude files which
- have custom build steps attached.
-
- Arguments:
- spec: The target dictionary containing the properties of the target.
- gyp_file: The name of the gyp file.
- Returns:
- A pair of (list of sources, list of excluded sources).
- The sources will be relative to the gyp file.
- """
- sources = OrderedSet()
- _AddNormalizedSources(sources, spec.get('sources', []))
- excluded_sources = OrderedSet()
- # Add in the gyp file.
- if not generator_flags.get('standalone'):
- sources.add(gyp_file)
-
- # Add in 'action' inputs and outputs.
- for a in spec.get('actions', []):
- inputs = a['inputs']
- inputs = [_NormalizedSource(i) for i in inputs]
- # Add all inputs to sources and excluded sources.
- inputs = OrderedSet(inputs)
- sources.update(inputs)
- if not spec.get('msvs_external_builder'):
- excluded_sources.update(inputs)
- if int(a.get('process_outputs_as_sources', False)):
- _AddNormalizedSources(sources, a.get('outputs', []))
- # Add in 'copies' inputs and outputs.
- for cpy in spec.get('copies', []):
- _AddNormalizedSources(sources, cpy.get('files', []))
- return (sources, excluded_sources)
-
-
-def _AdjustSourcesAndConvertToFilterHierarchy(
- spec, options, gyp_dir, sources, excluded_sources, list_excluded, version):
- """Adjusts the list of sources and excluded sources.
-
- Also converts the sets to lists.
-
- Arguments:
- spec: The target dictionary containing the properties of the target.
- options: Global generator options.
- gyp_dir: The path to the gyp file being processed.
- sources: A set of sources to be included for this project.
- excluded_sources: A set of sources to be excluded for this project.
- version: A MSVSVersion object.
- Returns:
- A trio of (list of sources, list of excluded sources,
- path of excluded IDL file)
- """
- # Exclude excluded sources coming into the generator.
- excluded_sources.update(OrderedSet(spec.get('sources_excluded', [])))
- # Add excluded sources into sources for good measure.
- sources.update(excluded_sources)
- # Convert to proper windows form.
- # NOTE: sources goes from being a set to a list here.
- # NOTE: excluded_sources goes from being a set to a list here.
- sources = _FixPaths(sources)
- # Convert to proper windows form.
- excluded_sources = _FixPaths(excluded_sources)
-
- excluded_idl = _IdlFilesHandledNonNatively(spec, sources)
-
- precompiled_related = _GetPrecompileRelatedFiles(spec)
- # Find the excluded ones, minus the precompiled header related ones.
- fully_excluded = [i for i in excluded_sources if i not in precompiled_related]
-
- # Convert to folders and the right slashes.
- sources = [i.split('\\') for i in sources]
- sources = _ConvertSourcesToFilterHierarchy(sources, excluded=fully_excluded,
- list_excluded=list_excluded,
- msvs_version=version)
-
- # Prune filters with a single child to flatten ugly directory structures
- # such as ../../src/modules/module1 etc.
- if version.UsesVcxproj():
- while all([isinstance(s, MSVSProject.Filter) for s in sources]) \
- and len(set([s.name for s in sources])) == 1:
- assert all([len(s.contents) == 1 for s in sources])
- sources = [s.contents[0] for s in sources]
- else:
- while len(sources) == 1 and isinstance(sources[0], MSVSProject.Filter):
- sources = sources[0].contents
-
- return sources, excluded_sources, excluded_idl
-
-
-def _IdlFilesHandledNonNatively(spec, sources):
- # If any non-native rules use 'idl' as an extension exclude idl files.
- # Gather a list here to use later.
- using_idl = False
- for rule in spec.get('rules', []):
- if rule['extension'] == 'idl' and int(rule.get('msvs_external_rule', 0)):
- using_idl = True
- break
- if using_idl:
- excluded_idl = [i for i in sources if i.endswith('.idl')]
- else:
- excluded_idl = []
- return excluded_idl
-
-
-def _GetPrecompileRelatedFiles(spec):
- # Gather a list of precompiled header related sources.
- precompiled_related = []
- for _, config in spec['configurations'].iteritems():
- for k in precomp_keys:
- f = config.get(k)
- if f:
- precompiled_related.append(_FixPath(f))
- return precompiled_related
-
-
-def _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources, excluded_idl,
- list_excluded):
- exclusions = _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl)
- for file_name, excluded_configs in exclusions.iteritems():
- if (not list_excluded and
- len(excluded_configs) == len(spec['configurations'])):
- # If we're not listing excluded files, then they won't appear in the
- # project, so don't try to configure them to be excluded.
- pass
- else:
- for config_name, config in excluded_configs:
- p.AddFileConfig(file_name, _ConfigFullName(config_name, config),
- {'ExcludedFromBuild': 'true'})
-
-
-def _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl):
- exclusions = {}
- # Exclude excluded sources from being built.
- for f in excluded_sources:
- excluded_configs = []
- for config_name, config in spec['configurations'].iteritems():
- precomped = [_FixPath(config.get(i, '')) for i in precomp_keys]
- # Don't do this for ones that are precompiled header related.
- if f not in precomped:
- excluded_configs.append((config_name, config))
- exclusions[f] = excluded_configs
- # If any non-native rules use 'idl' as an extension exclude idl files.
- # Exclude them now.
- for f in excluded_idl:
- excluded_configs = []
- for config_name, config in spec['configurations'].iteritems():
- excluded_configs.append((config_name, config))
- exclusions[f] = excluded_configs
- return exclusions
-
-
-def _AddToolFilesToMSVS(p, spec):
- # Add in tool files (rules).
- tool_files = OrderedSet()
- for _, config in spec['configurations'].iteritems():
- for f in config.get('msvs_tool_files', []):
- tool_files.add(f)
- for f in tool_files:
- p.AddToolFile(f)
-
-
-def _HandlePreCompiledHeaders(p, sources, spec):
- # Pre-compiled header source stubs need a different compiler flag
- # (generate precompiled header) and any source file not of the same
- # kind (i.e. C vs. C++) as the precompiled header source stub needs
- # to have use of precompiled headers disabled.
- extensions_excluded_from_precompile = []
- for config_name, config in spec['configurations'].iteritems():
- source = config.get('msvs_precompiled_source')
- if source:
- source = _FixPath(source)
- # UsePrecompiledHeader=1 for if using precompiled headers.
- tool = MSVSProject.Tool('VCCLCompilerTool',
- {'UsePrecompiledHeader': '1'})
- p.AddFileConfig(source, _ConfigFullName(config_name, config),
- {}, tools=[tool])
- basename, extension = os.path.splitext(source)
- if extension == '.c':
- extensions_excluded_from_precompile = ['.cc', '.cpp', '.cxx']
- else:
- extensions_excluded_from_precompile = ['.c']
- def DisableForSourceTree(source_tree):
- for source in source_tree:
- if isinstance(source, MSVSProject.Filter):
- DisableForSourceTree(source.contents)
- else:
- basename, extension = os.path.splitext(source)
- if extension in extensions_excluded_from_precompile:
- for config_name, config in spec['configurations'].iteritems():
- tool = MSVSProject.Tool('VCCLCompilerTool',
- {'UsePrecompiledHeader': '0',
- 'ForcedIncludeFiles': '$(NOINHERIT)'})
- p.AddFileConfig(_FixPath(source),
- _ConfigFullName(config_name, config),
- {}, tools=[tool])
- # Do nothing if there was no precompiled source.
- if extensions_excluded_from_precompile:
- DisableForSourceTree(sources)
-
-
-def _AddActions(actions_to_add, spec, relative_path_of_gyp_file):
- # Add actions.
- actions = spec.get('actions', [])
- # Don't setup_env every time. When all the actions are run together in one
- # batch file in VS, the PATH will grow too long.
- # Membership in this set means that the cygwin environment has been set up,
- # and does not need to be set up again.
- have_setup_env = set()
- for a in actions:
- # Attach actions to the gyp file if nothing else is there.
- inputs = a.get('inputs') or [relative_path_of_gyp_file]
- attached_to = inputs[0]
- need_setup_env = attached_to not in have_setup_env
- cmd = _BuildCommandLineForRule(spec, a, has_input_path=False,
- do_setup_env=need_setup_env)
- have_setup_env.add(attached_to)
- # Add the action.
- _AddActionStep(actions_to_add,
- inputs=inputs,
- outputs=a.get('outputs', []),
- description=a.get('message', a['action_name']),
- command=cmd)
-
-
-def _WriteMSVSUserFile(project_path, version, spec):
- # Add run_as and test targets.
- if 'run_as' in spec:
- run_as = spec['run_as']
- action = run_as.get('action', [])
- environment = run_as.get('environment', [])
- working_directory = run_as.get('working_directory', '.')
- elif int(spec.get('test', 0)):
- action = ['$(TargetPath)', '--gtest_print_time']
- environment = []
- working_directory = '.'
- else:
- return # Nothing to add
- # Write out the user file.
- user_file = _CreateMSVSUserFile(project_path, version, spec)
- for config_name, c_data in spec['configurations'].iteritems():
- user_file.AddDebugSettings(_ConfigFullName(config_name, c_data),
- action, environment, working_directory)
- user_file.WriteIfChanged()
-
-
-def _AddCopies(actions_to_add, spec):
- copies = _GetCopies(spec)
- for inputs, outputs, cmd, description in copies:
- _AddActionStep(actions_to_add, inputs=inputs, outputs=outputs,
- description=description, command=cmd)
-
-
-def _GetCopies(spec):
- copies = []
- # Add copies.
- for cpy in spec.get('copies', []):
- for src in cpy.get('files', []):
- dst = os.path.join(cpy['destination'], os.path.basename(src))
- # _AddCustomBuildToolForMSVS() will call _FixPath() on the inputs and
- # outputs, so do the same for our generated command line.
- if src.endswith('/'):
- src_bare = src[:-1]
- base_dir = posixpath.split(src_bare)[0]
- outer_dir = posixpath.split(src_bare)[1]
- cmd = 'cd "%s" && xcopy /e /f /y "%s" "%s\\%s\\"' % (
- _FixPath(base_dir), outer_dir, _FixPath(dst), outer_dir)
- copies.append(([src], ['dummy_copies', dst], cmd,
- 'Copying %s to %s' % (src, dst)))
- else:
- cmd = 'mkdir "%s" 2>nul & set ERRORLEVEL=0 & copy /Y "%s" "%s"' % (
- _FixPath(cpy['destination']), _FixPath(src), _FixPath(dst))
- copies.append(([src], [dst], cmd, 'Copying %s to %s' % (src, dst)))
- return copies
-
-
-def _GetPathDict(root, path):
- # |path| will eventually be empty (in the recursive calls) if it was initially
- # relative; otherwise it will eventually end up as '\', 'D:\', etc.
- if not path or path.endswith(os.sep):
- return root
- parent, folder = os.path.split(path)
- parent_dict = _GetPathDict(root, parent)
- if folder not in parent_dict:
- parent_dict[folder] = dict()
- return parent_dict[folder]
-
-
-def _DictsToFolders(base_path, bucket, flat):
- # Convert to folders recursively.
- children = []
- for folder, contents in bucket.iteritems():
- if type(contents) == dict:
- folder_children = _DictsToFolders(os.path.join(base_path, folder),
- contents, flat)
- if flat:
- children += folder_children
- else:
- folder_children = MSVSNew.MSVSFolder(os.path.join(base_path, folder),
- name='(' + folder + ')',
- entries=folder_children)
- children.append(folder_children)
- else:
- children.append(contents)
- return children
-
-
-def _CollapseSingles(parent, node):
- # Recursively explorer the tree of dicts looking for projects which are
- # the sole item in a folder which has the same name as the project. Bring
- # such projects up one level.
- if (type(node) == dict and
- len(node) == 1 and
- node.keys()[0] == parent + '.vcproj'):
- return node[node.keys()[0]]
- if type(node) != dict:
- return node
- for child in node:
- node[child] = _CollapseSingles(child, node[child])
- return node
-
-
-def _GatherSolutionFolders(sln_projects, project_objects, flat):
- root = {}
- # Convert into a tree of dicts on path.
- for p in sln_projects:
- gyp_file, target = gyp.common.ParseQualifiedTarget(p)[0:2]
- gyp_dir = os.path.dirname(gyp_file)
- path_dict = _GetPathDict(root, gyp_dir)
- path_dict[target + '.vcproj'] = project_objects[p]
- # Walk down from the top until we hit a folder that has more than one entry.
- # In practice, this strips the top-level "src/" dir from the hierarchy in
- # the solution.
- while len(root) == 1 and type(root[root.keys()[0]]) == dict:
- root = root[root.keys()[0]]
- # Collapse singles.
- root = _CollapseSingles('', root)
- # Merge buckets until everything is a root entry.
- return _DictsToFolders('', root, flat)
-
-
-def _GetPathOfProject(qualified_target, spec, options, msvs_version):
- default_config = _GetDefaultConfiguration(spec)
- proj_filename = default_config.get('msvs_existing_vcproj')
- if not proj_filename:
- proj_filename = (spec['target_name'] + options.suffix +
- msvs_version.ProjectExtension())
-
- build_file = gyp.common.BuildFile(qualified_target)
- proj_path = os.path.join(os.path.dirname(build_file), proj_filename)
- fix_prefix = None
- if options.generator_output:
- project_dir_path = os.path.dirname(os.path.abspath(proj_path))
- proj_path = os.path.join(options.generator_output, proj_path)
- fix_prefix = gyp.common.RelativePath(project_dir_path,
- os.path.dirname(proj_path))
- return proj_path, fix_prefix
-
-
-def _GetPlatformOverridesOfProject(spec):
- # Prepare a dict indicating which project configurations are used for which
- # solution configurations for this target.
- config_platform_overrides = {}
- for config_name, c in spec['configurations'].iteritems():
- config_fullname = _ConfigFullName(config_name, c)
- platform = c.get('msvs_target_platform', _ConfigPlatform(c))
- fixed_config_fullname = '%s|%s' % (
- _ConfigBaseName(config_name, _ConfigPlatform(c)), platform)
- config_platform_overrides[config_fullname] = fixed_config_fullname
- return config_platform_overrides
-
-
-def _CreateProjectObjects(target_list, target_dicts, options, msvs_version):
- """Create a MSVSProject object for the targets found in target list.
-
- Arguments:
- target_list: the list of targets to generate project objects for.
- target_dicts: the dictionary of specifications.
- options: global generator options.
- msvs_version: the MSVSVersion object.
- Returns:
- A set of created projects, keyed by target.
- """
- global fixpath_prefix
- # Generate each project.
- projects = {}
- for qualified_target in target_list:
- spec = target_dicts[qualified_target]
- if spec['toolset'] != 'target':
- raise GypError(
- 'Multiple toolsets not supported in msvs build (target %s)' %
- qualified_target)
- proj_path, fixpath_prefix = _GetPathOfProject(qualified_target, spec,
- options, msvs_version)
- guid = _GetGuidOfProject(proj_path, spec)
- overrides = _GetPlatformOverridesOfProject(spec)
- build_file = gyp.common.BuildFile(qualified_target)
- # Create object for this project.
- obj = MSVSNew.MSVSProject(
- proj_path,
- name=spec['target_name'],
- guid=guid,
- spec=spec,
- build_file=build_file,
- config_platform_overrides=overrides,
- fixpath_prefix=fixpath_prefix)
- # Set project toolset if any (MS build only)
- if msvs_version.UsesVcxproj():
- obj.set_msbuild_toolset(
- _GetMsbuildToolsetOfProject(proj_path, spec, msvs_version))
- projects[qualified_target] = obj
- # Set all the dependencies, but not if we are using an external builder like
- # ninja
- for project in projects.values():
- if not project.spec.get('msvs_external_builder'):
- deps = project.spec.get('dependencies', [])
- deps = [projects[d] for d in deps]
- project.set_dependencies(deps)
- return projects
-
-
-def _InitNinjaFlavor(params, target_list, target_dicts):
- """Initialize targets for the ninja flavor.
-
- This sets up the necessary variables in the targets to generate msvs projects
- that use ninja as an external builder. The variables in the spec are only set
- if they have not been set. This allows individual specs to override the
- default values initialized here.
- Arguments:
- params: Params provided to the generator.
- target_list: List of target pairs: 'base/base.gyp:base'.
- target_dicts: Dict of target properties keyed on target pair.
- """
- for qualified_target in target_list:
- spec = target_dicts[qualified_target]
- if spec.get('msvs_external_builder'):
- # The spec explicitly defined an external builder, so don't change it.
- continue
-
- path_to_ninja = spec.get('msvs_path_to_ninja', 'ninja.exe')
-
- spec['msvs_external_builder'] = 'ninja'
- if not spec.get('msvs_external_builder_out_dir'):
- gyp_file, _, _ = gyp.common.ParseQualifiedTarget(qualified_target)
- gyp_dir = os.path.dirname(gyp_file)
- configuration = '$(Configuration)'
- if params.get('target_arch') == 'x64':
- configuration += '_x64'
- spec['msvs_external_builder_out_dir'] = os.path.join(
- gyp.common.RelativePath(params['options'].toplevel_dir, gyp_dir),
- ninja_generator.ComputeOutputDir(params),
- configuration)
- if not spec.get('msvs_external_builder_build_cmd'):
- spec['msvs_external_builder_build_cmd'] = [
- path_to_ninja,
- '-C',
- '$(OutDir)',
- '$(ProjectName)',
- ]
- if not spec.get('msvs_external_builder_clean_cmd'):
- spec['msvs_external_builder_clean_cmd'] = [
- path_to_ninja,
- '-C',
- '$(OutDir)',
- '-tclean',
- '$(ProjectName)',
- ]
-
-
-def CalculateVariables(default_variables, params):
- """Generated variables that require params to be known."""
-
- generator_flags = params.get('generator_flags', {})
-
- # Select project file format version (if unset, default to auto detecting).
- msvs_version = MSVSVersion.SelectVisualStudioVersion(
- generator_flags.get('msvs_version', 'auto'))
- # Stash msvs_version for later (so we don't have to probe the system twice).
- params['msvs_version'] = msvs_version
-
- # Set a variable so conditions can be based on msvs_version.
- default_variables['MSVS_VERSION'] = msvs_version.ShortName()
-
- # To determine processor word size on Windows, in addition to checking
- # PROCESSOR_ARCHITECTURE (which reflects the word size of the current
- # process), it is also necessary to check PROCESSOR_ARCITEW6432 (which
- # contains the actual word size of the system when running thru WOW64).
- if (os.environ.get('PROCESSOR_ARCHITECTURE', '').find('64') >= 0 or
- os.environ.get('PROCESSOR_ARCHITEW6432', '').find('64') >= 0):
- default_variables['MSVS_OS_BITS'] = 64
- else:
- default_variables['MSVS_OS_BITS'] = 32
-
- if gyp.common.GetFlavor(params) == 'ninja':
- default_variables['SHARED_INTERMEDIATE_DIR'] = '$(OutDir)gen'
-
-
-def PerformBuild(data, configurations, params):
- options = params['options']
- msvs_version = params['msvs_version']
- devenv = os.path.join(msvs_version.path, 'Common7', 'IDE', 'devenv.com')
-
- for build_file, build_file_dict in data.iteritems():
- (build_file_root, build_file_ext) = os.path.splitext(build_file)
- if build_file_ext != '.gyp':
- continue
- sln_path = build_file_root + options.suffix + '.sln'
- if options.generator_output:
- sln_path = os.path.join(options.generator_output, sln_path)
-
- for config in configurations:
- arguments = [devenv, sln_path, '/Build', config]
- print 'Building [%s]: %s' % (config, arguments)
- rtn = subprocess.check_call(arguments)
-
-
-def GenerateOutput(target_list, target_dicts, data, params):
- """Generate .sln and .vcproj files.
-
- This is the entry point for this generator.
- Arguments:
- target_list: List of target pairs: 'base/base.gyp:base'.
- target_dicts: Dict of target properties keyed on target pair.
- data: Dictionary containing per .gyp data.
- """
- global fixpath_prefix
-
- options = params['options']
-
- # Get the project file format version back out of where we stashed it in
- # GeneratorCalculatedVariables.
- msvs_version = params['msvs_version']
-
- generator_flags = params.get('generator_flags', {})
-
- # Optionally shard targets marked with 'msvs_shard': SHARD_COUNT.
- (target_list, target_dicts) = MSVSUtil.ShardTargets(target_list, target_dicts)
-
- # Optionally use the large PDB workaround for targets marked with
- # 'msvs_large_pdb': 1.
- (target_list, target_dicts) = MSVSUtil.InsertLargePdbShims(
- target_list, target_dicts, generator_default_variables)
-
- # Optionally configure each spec to use ninja as the external builder.
- if params.get('flavor') == 'ninja':
- _InitNinjaFlavor(params, target_list, target_dicts)
-
- # Prepare the set of configurations.
- configs = set()
- for qualified_target in target_list:
- spec = target_dicts[qualified_target]
- for config_name, config in spec['configurations'].iteritems():
- configs.add(_ConfigFullName(config_name, config))
- configs = list(configs)
-
- # Figure out all the projects that will be generated and their guids
- project_objects = _CreateProjectObjects(target_list, target_dicts, options,
- msvs_version)
-
- # Generate each project.
- missing_sources = []
- for project in project_objects.values():
- fixpath_prefix = project.fixpath_prefix
- missing_sources.extend(_GenerateProject(project, options, msvs_version,
- generator_flags))
- fixpath_prefix = None
-
- for build_file in data:
- # Validate build_file extension
- if not build_file.endswith('.gyp'):
- continue
- sln_path = os.path.splitext(build_file)[0] + options.suffix + '.sln'
- if options.generator_output:
- sln_path = os.path.join(options.generator_output, sln_path)
- # Get projects in the solution, and their dependents.
- sln_projects = gyp.common.BuildFileTargets(target_list, build_file)
- sln_projects += gyp.common.DeepDependencyTargets(target_dicts, sln_projects)
- # Create folder hierarchy.
- root_entries = _GatherSolutionFolders(
- sln_projects, project_objects, flat=msvs_version.FlatSolution())
- # Create solution.
- sln = MSVSNew.MSVSSolution(sln_path,
- entries=root_entries,
- variants=configs,
- websiteProperties=False,
- version=msvs_version)
- sln.Write()
-
- if missing_sources:
- error_message = "Missing input files:\n" + \
- '\n'.join(set(missing_sources))
- if generator_flags.get('msvs_error_on_missing_sources', False):
- raise GypError(error_message)
- else:
- print >> sys.stdout, "Warning: " + error_message
-
-
-def _GenerateMSBuildFiltersFile(filters_path, source_files,
- rule_dependencies, extension_to_rule_name):
- """Generate the filters file.
-
- This file is used by Visual Studio to organize the presentation of source
- files into folders.
-
- Arguments:
- filters_path: The path of the file to be created.
- source_files: The hierarchical structure of all the sources.
- extension_to_rule_name: A dictionary mapping file extensions to rules.
- """
- filter_group = []
- source_group = []
- _AppendFiltersForMSBuild('', source_files, rule_dependencies,
- extension_to_rule_name, filter_group, source_group)
- if filter_group:
- content = ['Project',
- {'ToolsVersion': '4.0',
- 'xmlns': 'http://schemas.microsoft.com/developer/msbuild/2003'
- },
- ['ItemGroup'] + filter_group,
- ['ItemGroup'] + source_group
- ]
- easy_xml.WriteXmlIfChanged(content, filters_path, pretty=True, win32=True)
- elif os.path.exists(filters_path):
- # We don't need this filter anymore. Delete the old filter file.
- os.unlink(filters_path)
-
-
-def _AppendFiltersForMSBuild(parent_filter_name, sources, rule_dependencies,
- extension_to_rule_name,
- filter_group, source_group):
- """Creates the list of filters and sources to be added in the filter file.
-
- Args:
- parent_filter_name: The name of the filter under which the sources are
- found.
- sources: The hierarchy of filters and sources to process.
- extension_to_rule_name: A dictionary mapping file extensions to rules.
- filter_group: The list to which filter entries will be appended.
- source_group: The list to which source entries will be appeneded.
- """
- for source in sources:
- if isinstance(source, MSVSProject.Filter):
- # We have a sub-filter. Create the name of that sub-filter.
- if not parent_filter_name:
- filter_name = source.name
- else:
- filter_name = '%s\\%s' % (parent_filter_name, source.name)
- # Add the filter to the group.
- filter_group.append(
- ['Filter', {'Include': filter_name},
- ['UniqueIdentifier', MSVSNew.MakeGuid(source.name)]])
- # Recurse and add its dependents.
- _AppendFiltersForMSBuild(filter_name, source.contents,
- rule_dependencies, extension_to_rule_name,
- filter_group, source_group)
- else:
- # It's a source. Create a source entry.
- _, element = _MapFileToMsBuildSourceType(source, rule_dependencies,
- extension_to_rule_name)
- source_entry = [element, {'Include': source}]
- # Specify the filter it is part of, if any.
- if parent_filter_name:
- source_entry.append(['Filter', parent_filter_name])
- source_group.append(source_entry)
-
-
-def _MapFileToMsBuildSourceType(source, rule_dependencies,
- extension_to_rule_name):
- """Returns the group and element type of the source file.
-
- Arguments:
- source: The source file name.
- extension_to_rule_name: A dictionary mapping file extensions to rules.
-
- Returns:
- A pair of (group this file should be part of, the label of element)
- """
- _, ext = os.path.splitext(source)
- if ext in extension_to_rule_name:
- group = 'rule'
- element = extension_to_rule_name[ext]
- elif ext in ['.cc', '.cpp', '.c', '.cxx', '.mm']:
- group = 'compile'
- element = 'ClCompile'
- elif ext in ['.h', '.hxx']:
- group = 'include'
- element = 'ClInclude'
- elif ext == '.rc':
- group = 'resource'
- element = 'ResourceCompile'
- elif ext == '.asm':
- group = 'masm'
- element = 'MASM'
- elif ext == '.idl':
- group = 'midl'
- element = 'Midl'
- elif source in rule_dependencies:
- group = 'rule_dependency'
- element = 'CustomBuild'
- else:
- group = 'none'
- element = 'None'
- return (group, element)
-
-
-def _GenerateRulesForMSBuild(output_dir, options, spec,
- sources, excluded_sources,
- props_files_of_rules, targets_files_of_rules,
- actions_to_add, rule_dependencies,
- extension_to_rule_name):
- # MSBuild rules are implemented using three files: an XML file, a .targets
- # file and a .props file.
- # See http://blogs.msdn.com/b/vcblog/archive/2010/04/21/quick-help-on-vs2010-custom-build-rule.aspx
- # for more details.
- rules = spec.get('rules', [])
- rules_native = [r for r in rules if not int(r.get('msvs_external_rule', 0))]
- rules_external = [r for r in rules if int(r.get('msvs_external_rule', 0))]
-
- msbuild_rules = []
- for rule in rules_native:
- # Skip a rule with no action and no inputs.
- if 'action' not in rule and not rule.get('rule_sources', []):
- continue
- msbuild_rule = MSBuildRule(rule, spec)
- msbuild_rules.append(msbuild_rule)
- rule_dependencies.update(msbuild_rule.additional_dependencies.split(';'))
- extension_to_rule_name[msbuild_rule.extension] = msbuild_rule.rule_name
- if msbuild_rules:
- base = spec['target_name'] + options.suffix
- props_name = base + '.props'
- targets_name = base + '.targets'
- xml_name = base + '.xml'
-
- props_files_of_rules.add(props_name)
- targets_files_of_rules.add(targets_name)
-
- props_path = os.path.join(output_dir, props_name)
- targets_path = os.path.join(output_dir, targets_name)
- xml_path = os.path.join(output_dir, xml_name)
-
- _GenerateMSBuildRulePropsFile(props_path, msbuild_rules)
- _GenerateMSBuildRuleTargetsFile(targets_path, msbuild_rules)
- _GenerateMSBuildRuleXmlFile(xml_path, msbuild_rules)
-
- if rules_external:
- _GenerateExternalRules(rules_external, output_dir, spec,
- sources, options, actions_to_add)
- _AdjustSourcesForRules(rules, sources, excluded_sources, True)
-
-
-class MSBuildRule(object):
- """Used to store information used to generate an MSBuild rule.
-
- Attributes:
- rule_name: The rule name, sanitized to use in XML.
- target_name: The name of the target.
- after_targets: The name of the AfterTargets element.
- before_targets: The name of the BeforeTargets element.
- depends_on: The name of the DependsOn element.
- compute_output: The name of the ComputeOutput element.
- dirs_to_make: The name of the DirsToMake element.
- inputs: The name of the _inputs element.
- tlog: The name of the _tlog element.
- extension: The extension this rule applies to.
- description: The message displayed when this rule is invoked.
- additional_dependencies: A string listing additional dependencies.
- outputs: The outputs of this rule.
- command: The command used to run the rule.
- """
-
- def __init__(self, rule, spec):
- self.display_name = rule['rule_name']
- # Assure that the rule name is only characters and numbers
- self.rule_name = re.sub(r'\W', '_', self.display_name)
- # Create the various element names, following the example set by the
- # Visual Studio 2008 to 2010 conversion. I don't know if VS2010
- # is sensitive to the exact names.
- self.target_name = '_' + self.rule_name
- self.after_targets = self.rule_name + 'AfterTargets'
- self.before_targets = self.rule_name + 'BeforeTargets'
- self.depends_on = self.rule_name + 'DependsOn'
- self.compute_output = 'Compute%sOutput' % self.rule_name
- self.dirs_to_make = self.rule_name + 'DirsToMake'
- self.inputs = self.rule_name + '_inputs'
- self.tlog = self.rule_name + '_tlog'
- self.extension = rule['extension']
- if not self.extension.startswith('.'):
- self.extension = '.' + self.extension
-
- self.description = MSVSSettings.ConvertVCMacrosToMSBuild(
- rule.get('message', self.rule_name))
- old_additional_dependencies = _FixPaths(rule.get('inputs', []))
- self.additional_dependencies = (
- ';'.join([MSVSSettings.ConvertVCMacrosToMSBuild(i)
- for i in old_additional_dependencies]))
- old_outputs = _FixPaths(rule.get('outputs', []))
- self.outputs = ';'.join([MSVSSettings.ConvertVCMacrosToMSBuild(i)
- for i in old_outputs])
- old_command = _BuildCommandLineForRule(spec, rule, has_input_path=True,
- do_setup_env=True)
- self.command = MSVSSettings.ConvertVCMacrosToMSBuild(old_command)
-
-
-def _GenerateMSBuildRulePropsFile(props_path, msbuild_rules):
- """Generate the .props file."""
- content = ['Project',
- {'xmlns': 'http://schemas.microsoft.com/developer/msbuild/2003'}]
- for rule in msbuild_rules:
- content.extend([
- ['PropertyGroup',
- {'Condition': "'$(%s)' == '' and '$(%s)' == '' and "
- "'$(ConfigurationType)' != 'Makefile'" % (rule.before_targets,
- rule.after_targets)
- },
- [rule.before_targets, 'Midl'],
- [rule.after_targets, 'CustomBuild'],
- ],
- ['PropertyGroup',
- [rule.depends_on,
- {'Condition': "'$(ConfigurationType)' != 'Makefile'"},
- '_SelectedFiles;$(%s)' % rule.depends_on
- ],
- ],
- ['ItemDefinitionGroup',
- [rule.rule_name,
- ['CommandLineTemplate', rule.command],
- ['Outputs', rule.outputs],
- ['ExecutionDescription', rule.description],
- ['AdditionalDependencies', rule.additional_dependencies],
- ],
- ]
- ])
- easy_xml.WriteXmlIfChanged(content, props_path, pretty=True, win32=True)
-
-
-def _GenerateMSBuildRuleTargetsFile(targets_path, msbuild_rules):
- """Generate the .targets file."""
- content = ['Project',
- {'xmlns': 'http://schemas.microsoft.com/developer/msbuild/2003'
- }
- ]
- item_group = [
- 'ItemGroup',
- ['PropertyPageSchema',
- {'Include': '$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml'}
- ]
- ]
- for rule in msbuild_rules:
- item_group.append(
- ['AvailableItemName',
- {'Include': rule.rule_name},
- ['Targets', rule.target_name],
- ])
- content.append(item_group)
-
- for rule in msbuild_rules:
- content.append(
- ['UsingTask',
- {'TaskName': rule.rule_name,
- 'TaskFactory': 'XamlTaskFactory',
- 'AssemblyName': 'Microsoft.Build.Tasks.v4.0'
- },
- ['Task', '$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml'],
- ])
- for rule in msbuild_rules:
- rule_name = rule.rule_name
- target_outputs = '%%(%s.Outputs)' % rule_name
- target_inputs = ('%%(%s.Identity);%%(%s.AdditionalDependencies);'
- '$(MSBuildProjectFile)') % (rule_name, rule_name)
- rule_inputs = '%%(%s.Identity)' % rule_name
- extension_condition = ("'%(Extension)'=='.obj' or "
- "'%(Extension)'=='.res' or "
- "'%(Extension)'=='.rsc' or "
- "'%(Extension)'=='.lib'")
- remove_section = [
- 'ItemGroup',
- {'Condition': "'@(SelectedFiles)' != ''"},
- [rule_name,
- {'Remove': '@(%s)' % rule_name,
- 'Condition': "'%(Identity)' != '@(SelectedFiles)'"
- }
- ]
- ]
- inputs_section = [
- 'ItemGroup',
- [rule.inputs, {'Include': '%%(%s.AdditionalDependencies)' % rule_name}]
- ]
- logging_section = [
- 'ItemGroup',
- [rule.tlog,
- {'Include': '%%(%s.Outputs)' % rule_name,
- 'Condition': ("'%%(%s.Outputs)' != '' and "
- "'%%(%s.ExcludedFromBuild)' != 'true'" %
- (rule_name, rule_name))
- },
- ['Source', "@(%s, '|')" % rule_name],
- ['Inputs', "@(%s -> '%%(Fullpath)', ';')" % rule.inputs],
- ],
- ]
- message_section = [
- 'Message',
- {'Importance': 'High',
- 'Text': '%%(%s.ExecutionDescription)' % rule_name
- }
- ]
- write_tlog_section = [
- 'WriteLinesToFile',
- {'Condition': "'@(%s)' != '' and '%%(%s.ExcludedFromBuild)' != "
- "'true'" % (rule.tlog, rule.tlog),
- 'File': '$(IntDir)$(ProjectName).write.1.tlog',
- 'Lines': "^%%(%s.Source);@(%s->'%%(Fullpath)')" % (rule.tlog,
- rule.tlog)
- }
- ]
- read_tlog_section = [
- 'WriteLinesToFile',
- {'Condition': "'@(%s)' != '' and '%%(%s.ExcludedFromBuild)' != "
- "'true'" % (rule.tlog, rule.tlog),
- 'File': '$(IntDir)$(ProjectName).read.1.tlog',
- 'Lines': "^%%(%s.Source);%%(%s.Inputs)" % (rule.tlog, rule.tlog)
- }
- ]
- command_and_input_section = [
- rule_name,
- {'Condition': "'@(%s)' != '' and '%%(%s.ExcludedFromBuild)' != "
- "'true'" % (rule_name, rule_name),
- 'EchoOff': 'true',
- 'StandardOutputImportance': 'High',
- 'StandardErrorImportance': 'High',
- 'CommandLineTemplate': '%%(%s.CommandLineTemplate)' % rule_name,
- 'AdditionalOptions': '%%(%s.AdditionalOptions)' % rule_name,
- 'Inputs': rule_inputs
- }
- ]
- content.extend([
- ['Target',
- {'Name': rule.target_name,
- 'BeforeTargets': '$(%s)' % rule.before_targets,
- 'AfterTargets': '$(%s)' % rule.after_targets,
- 'Condition': "'@(%s)' != ''" % rule_name,
- 'DependsOnTargets': '$(%s);%s' % (rule.depends_on,
- rule.compute_output),
- 'Outputs': target_outputs,
- 'Inputs': target_inputs
- },
- remove_section,
- inputs_section,
- logging_section,
- message_section,
- write_tlog_section,
- read_tlog_section,
- command_and_input_section,
- ],
- ['PropertyGroup',
- ['ComputeLinkInputsTargets',
- '$(ComputeLinkInputsTargets);',
- '%s;' % rule.compute_output
- ],
- ['ComputeLibInputsTargets',
- '$(ComputeLibInputsTargets);',
- '%s;' % rule.compute_output
- ],
- ],
- ['Target',
- {'Name': rule.compute_output,
- 'Condition': "'@(%s)' != ''" % rule_name
- },
- ['ItemGroup',
- [rule.dirs_to_make,
- {'Condition': "'@(%s)' != '' and "
- "'%%(%s.ExcludedFromBuild)' != 'true'" % (rule_name, rule_name),
- 'Include': '%%(%s.Outputs)' % rule_name
- }
- ],
- ['Link',
- {'Include': '%%(%s.Identity)' % rule.dirs_to_make,
- 'Condition': extension_condition
- }
- ],
- ['Lib',
- {'Include': '%%(%s.Identity)' % rule.dirs_to_make,
- 'Condition': extension_condition
- }
- ],
- ['ImpLib',
- {'Include': '%%(%s.Identity)' % rule.dirs_to_make,
- 'Condition': extension_condition
- }
- ],
- ],
- ['MakeDir',
- {'Directories': ("@(%s->'%%(RootDir)%%(Directory)')" %
- rule.dirs_to_make)
- }
- ]
- ],
- ])
- easy_xml.WriteXmlIfChanged(content, targets_path, pretty=True, win32=True)
-
-
-def _GenerateMSBuildRuleXmlFile(xml_path, msbuild_rules):
- # Generate the .xml file
- content = [
- 'ProjectSchemaDefinitions',
- {'xmlns': ('clr-namespace:Microsoft.Build.Framework.XamlTypes;'
- 'assembly=Microsoft.Build.Framework'),
- 'xmlns:x': 'http://schemas.microsoft.com/winfx/2006/xaml',
- 'xmlns:sys': 'clr-namespace:System;assembly=mscorlib',
- 'xmlns:transformCallback':
- 'Microsoft.Cpp.Dev10.ConvertPropertyCallback'
- }
- ]
- for rule in msbuild_rules:
- content.extend([
- ['Rule',
- {'Name': rule.rule_name,
- 'PageTemplate': 'tool',
- 'DisplayName': rule.display_name,
- 'Order': '200'
- },
- ['Rule.DataSource',
- ['DataSource',
- {'Persistence': 'ProjectFile',
- 'ItemType': rule.rule_name
- }
- ]
- ],
- ['Rule.Categories',
- ['Category',
- {'Name': 'General'},
- ['Category.DisplayName',
- ['sys:String', 'General'],
- ],
- ],
- ['Category',
- {'Name': 'Command Line',
- 'Subtype': 'CommandLine'
- },
- ['Category.DisplayName',
- ['sys:String', 'Command Line'],
- ],
- ],
- ],
- ['StringListProperty',
- {'Name': 'Inputs',
- 'Category': 'Command Line',
- 'IsRequired': 'true',
- 'Switch': ' '
- },
- ['StringListProperty.DataSource',
- ['DataSource',
- {'Persistence': 'ProjectFile',
- 'ItemType': rule.rule_name,
- 'SourceType': 'Item'
- }
- ]
- ],
- ],
- ['StringProperty',
- {'Name': 'CommandLineTemplate',
- 'DisplayName': 'Command Line',
- 'Visible': 'False',
- 'IncludeInCommandLine': 'False'
- }
- ],
- ['DynamicEnumProperty',
- {'Name': rule.before_targets,
- 'Category': 'General',
- 'EnumProvider': 'Targets',
- 'IncludeInCommandLine': 'False'
- },
- ['DynamicEnumProperty.DisplayName',
- ['sys:String', 'Execute Before'],
- ],
- ['DynamicEnumProperty.Description',
- ['sys:String', 'Specifies the targets for the build customization'
- ' to run before.'
- ],
- ],
- ['DynamicEnumProperty.ProviderSettings',
- ['NameValuePair',
- {'Name': 'Exclude',
- 'Value': '^%s|^Compute' % rule.before_targets
- }
- ]
- ],
- ['DynamicEnumProperty.DataSource',
- ['DataSource',
- {'Persistence': 'ProjectFile',
- 'HasConfigurationCondition': 'true'
- }
- ]
- ],
- ],
- ['DynamicEnumProperty',
- {'Name': rule.after_targets,
- 'Category': 'General',
- 'EnumProvider': 'Targets',
- 'IncludeInCommandLine': 'False'
- },
- ['DynamicEnumProperty.DisplayName',
- ['sys:String', 'Execute After'],
- ],
- ['DynamicEnumProperty.Description',
- ['sys:String', ('Specifies the targets for the build customization'
- ' to run after.')
- ],
- ],
- ['DynamicEnumProperty.ProviderSettings',
- ['NameValuePair',
- {'Name': 'Exclude',
- 'Value': '^%s|^Compute' % rule.after_targets
- }
- ]
- ],
- ['DynamicEnumProperty.DataSource',
- ['DataSource',
- {'Persistence': 'ProjectFile',
- 'ItemType': '',
- 'HasConfigurationCondition': 'true'
- }
- ]
- ],
- ],
- ['StringListProperty',
- {'Name': 'Outputs',
- 'DisplayName': 'Outputs',
- 'Visible': 'False',
- 'IncludeInCommandLine': 'False'
- }
- ],
- ['StringProperty',
- {'Name': 'ExecutionDescription',
- 'DisplayName': 'Execution Description',
- 'Visible': 'False',
- 'IncludeInCommandLine': 'False'
- }
- ],
- ['StringListProperty',
- {'Name': 'AdditionalDependencies',
- 'DisplayName': 'Additional Dependencies',
- 'IncludeInCommandLine': 'False',
- 'Visible': 'false'
- }
- ],
- ['StringProperty',
- {'Subtype': 'AdditionalOptions',
- 'Name': 'AdditionalOptions',
- 'Category': 'Command Line'
- },
- ['StringProperty.DisplayName',
- ['sys:String', 'Additional Options'],
- ],
- ['StringProperty.Description',
- ['sys:String', 'Additional Options'],
- ],
- ],
- ],
- ['ItemType',
- {'Name': rule.rule_name,
- 'DisplayName': rule.display_name
- }
- ],
- ['FileExtension',
- {'Name': '*' + rule.extension,
- 'ContentType': rule.rule_name
- }
- ],
- ['ContentType',
- {'Name': rule.rule_name,
- 'DisplayName': '',
- 'ItemType': rule.rule_name
- }
- ]
- ])
- easy_xml.WriteXmlIfChanged(content, xml_path, pretty=True, win32=True)
-
-
-def _GetConfigurationAndPlatform(name, settings):
- configuration = name.rsplit('_', 1)[0]
- platform = settings.get('msvs_configuration_platform', 'Win32')
- return (configuration, platform)
-
-
-def _GetConfigurationCondition(name, settings):
- return (r"'$(Configuration)|$(Platform)'=='%s|%s'" %
- _GetConfigurationAndPlatform(name, settings))
-
-
-def _GetMSBuildProjectConfigurations(configurations):
- group = ['ItemGroup', {'Label': 'ProjectConfigurations'}]
- for (name, settings) in sorted(configurations.iteritems()):
- configuration, platform = _GetConfigurationAndPlatform(name, settings)
- designation = '%s|%s' % (configuration, platform)
- group.append(
- ['ProjectConfiguration', {'Include': designation},
- ['Configuration', configuration],
- ['Platform', platform]])
- return [group]
-
-
-def _GetMSBuildGlobalProperties(spec, guid, gyp_file_name):
- namespace = os.path.splitext(gyp_file_name)[0]
- properties = [
- ['PropertyGroup', {'Label': 'Globals'},
- ['ProjectGuid', guid],
- ['Keyword', 'Win32Proj'],
- ['RootNamespace', namespace],
- ['IgnoreWarnCompileDuplicatedFilename', 'true'],
- ]
- ]
-
- if os.environ.get('PROCESSOR_ARCHITECTURE') == 'AMD64' or \
- os.environ.get('PROCESSOR_ARCHITEW6432') == 'AMD64':
- properties[0].append(['PreferredToolArchitecture', 'x64'])
-
- if spec.get('msvs_enable_winrt'):
- properties[0].append(['DefaultLanguage', 'en-US'])
- properties[0].append(['AppContainerApplication', 'true'])
- if spec.get('msvs_application_type_revision'):
- app_type_revision = spec.get('msvs_application_type_revision')
- properties[0].append(['ApplicationTypeRevision', app_type_revision])
- else:
- properties[0].append(['ApplicationTypeRevision', '8.1'])
-
- if spec.get('msvs_target_platform_version'):
- target_platform_version = spec.get('msvs_target_platform_version')
- properties[0].append(['WindowsTargetPlatformVersion',
- target_platform_version])
- if spec.get('msvs_target_platform_minversion'):
- target_platform_minversion = spec.get('msvs_target_platform_minversion')
- properties[0].append(['WindowsTargetPlatformMinVersion',
- target_platform_minversion])
- else:
- properties[0].append(['WindowsTargetPlatformMinVersion',
- target_platform_version])
- if spec.get('msvs_enable_winphone'):
- properties[0].append(['ApplicationType', 'Windows Phone'])
- else:
- properties[0].append(['ApplicationType', 'Windows Store'])
-
- platform_name = None
- msvs_windows_target_platform_version = None
- for configuration in spec['configurations'].itervalues():
- platform_name = platform_name or _ConfigPlatform(configuration)
- msvs_windows_target_platform_version = \
- msvs_windows_target_platform_version or \
- _ConfigWindowsTargetPlatformVersion(configuration)
- if platform_name and msvs_windows_target_platform_version:
- break
-
- if platform_name == 'ARM':
- properties[0].append(['WindowsSDKDesktopARMSupport', 'true'])
- if msvs_windows_target_platform_version:
- properties[0].append(['WindowsTargetPlatformVersion', \
- str(msvs_windows_target_platform_version)])
-
- return properties
-
-def _GetMSBuildConfigurationDetails(spec, build_file):
- properties = {}
- for name, settings in spec['configurations'].iteritems():
- msbuild_attributes = _GetMSBuildAttributes(spec, settings, build_file)
- condition = _GetConfigurationCondition(name, settings)
- character_set = msbuild_attributes.get('CharacterSet')
- _AddConditionalProperty(properties, condition, 'ConfigurationType',
- msbuild_attributes['ConfigurationType'])
- if character_set:
- if 'msvs_enable_winrt' not in spec :
- _AddConditionalProperty(properties, condition, 'CharacterSet',
- character_set)
- return _GetMSBuildPropertyGroup(spec, 'Configuration', properties)
-
-
-def _GetMSBuildLocalProperties(msbuild_toolset):
- # Currently the only local property we support is PlatformToolset
- properties = {}
- if msbuild_toolset:
- properties = [
- ['PropertyGroup', {'Label': 'Locals'},
- ['PlatformToolset', msbuild_toolset],
- ]
- ]
- return properties
-
-
-def _GetMSBuildPropertySheets(configurations):
- user_props = r'$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props'
- additional_props = {}
- props_specified = False
- for name, settings in sorted(configurations.iteritems()):
- configuration = _GetConfigurationCondition(name, settings)
- if settings.has_key('msbuild_props'):
- additional_props[configuration] = _FixPaths(settings['msbuild_props'])
- props_specified = True
- else:
- additional_props[configuration] = ''
-
- if not props_specified:
- return [
- ['ImportGroup',
- {'Label': 'PropertySheets'},
- ['Import',
- {'Project': user_props,
- 'Condition': "exists('%s')" % user_props,
- 'Label': 'LocalAppDataPlatform'
- }
- ]
- ]
- ]
- else:
- sheets = []
- for condition, props in additional_props.iteritems():
- import_group = [
- 'ImportGroup',
- {'Label': 'PropertySheets',
- 'Condition': condition
- },
- ['Import',
- {'Project': user_props,
- 'Condition': "exists('%s')" % user_props,
- 'Label': 'LocalAppDataPlatform'
- }
- ]
- ]
- for props_file in props:
- import_group.append(['Import', {'Project':props_file}])
- sheets.append(import_group)
- return sheets
-
-def _ConvertMSVSBuildAttributes(spec, config, build_file):
- config_type = _GetMSVSConfigurationType(spec, build_file)
- msvs_attributes = _GetMSVSAttributes(spec, config, config_type)
- msbuild_attributes = {}
- for a in msvs_attributes:
- if a in ['IntermediateDirectory', 'OutputDirectory']:
- directory = MSVSSettings.ConvertVCMacrosToMSBuild(msvs_attributes[a])
- if not directory.endswith('\\'):
- directory += '\\'
- msbuild_attributes[a] = directory
- elif a == 'CharacterSet':
- msbuild_attributes[a] = _ConvertMSVSCharacterSet(msvs_attributes[a])
- elif a == 'ConfigurationType':
- msbuild_attributes[a] = _ConvertMSVSConfigurationType(msvs_attributes[a])
- else:
- print 'Warning: Do not know how to convert MSVS attribute ' + a
- return msbuild_attributes
-
-
-def _ConvertMSVSCharacterSet(char_set):
- if char_set.isdigit():
- char_set = {
- '0': 'MultiByte',
- '1': 'Unicode',
- '2': 'MultiByte',
- }[char_set]
- return char_set
-
-
-def _ConvertMSVSConfigurationType(config_type):
- if config_type.isdigit():
- config_type = {
- '1': 'Application',
- '2': 'DynamicLibrary',
- '4': 'StaticLibrary',
- '10': 'Utility'
- }[config_type]
- return config_type
-
-
-def _GetMSBuildAttributes(spec, config, build_file):
- if 'msbuild_configuration_attributes' not in config:
- msbuild_attributes = _ConvertMSVSBuildAttributes(spec, config, build_file)
-
- else:
- config_type = _GetMSVSConfigurationType(spec, build_file)
- config_type = _ConvertMSVSConfigurationType(config_type)
- msbuild_attributes = config.get('msbuild_configuration_attributes', {})
- msbuild_attributes.setdefault('ConfigurationType', config_type)
- output_dir = msbuild_attributes.get('OutputDirectory',
- '$(SolutionDir)$(Configuration)')
- msbuild_attributes['OutputDirectory'] = _FixPath(output_dir) + '\\'
- if 'IntermediateDirectory' not in msbuild_attributes:
- intermediate = _FixPath('$(Configuration)') + '\\'
- msbuild_attributes['IntermediateDirectory'] = intermediate
- if 'CharacterSet' in msbuild_attributes:
- msbuild_attributes['CharacterSet'] = _ConvertMSVSCharacterSet(
- msbuild_attributes['CharacterSet'])
- if 'TargetName' not in msbuild_attributes:
- prefix = spec.get('product_prefix', '')
- product_name = spec.get('product_name', '$(ProjectName)')
- target_name = prefix + product_name
- msbuild_attributes['TargetName'] = target_name
- if 'TargetExt' not in msbuild_attributes and 'product_extension' in spec:
- ext = spec.get('product_extension')
- msbuild_attributes['TargetExt'] = '.' + ext
-
- if spec.get('msvs_external_builder'):
- external_out_dir = spec.get('msvs_external_builder_out_dir', '.')
- msbuild_attributes['OutputDirectory'] = _FixPath(external_out_dir) + '\\'
-
- # Make sure that 'TargetPath' matches 'Lib.OutputFile' or 'Link.OutputFile'
- # (depending on the tool used) to avoid MSB8012 warning.
- msbuild_tool_map = {
- 'executable': 'Link',
- 'shared_library': 'Link',
- 'loadable_module': 'Link',
- 'static_library': 'Lib',
- }
- msbuild_tool = msbuild_tool_map.get(spec['type'])
- if msbuild_tool:
- msbuild_settings = config['finalized_msbuild_settings']
- out_file = msbuild_settings[msbuild_tool].get('OutputFile')
- if out_file:
- msbuild_attributes['TargetPath'] = _FixPath(out_file)
- target_ext = msbuild_settings[msbuild_tool].get('TargetExt')
- if target_ext:
- msbuild_attributes['TargetExt'] = target_ext
-
- return msbuild_attributes
-
-
-def _GetMSBuildConfigurationGlobalProperties(spec, configurations, build_file):
- # TODO(jeanluc) We could optimize out the following and do it only if
- # there are actions.
- # TODO(jeanluc) Handle the equivalent of setting 'CYGWIN=nontsec'.
- new_paths = []
- cygwin_dirs = spec.get('msvs_cygwin_dirs', ['.'])[0]
- if cygwin_dirs:
- cyg_path = '$(MSBuildProjectDirectory)\\%s\\bin\\' % _FixPath(cygwin_dirs)
- new_paths.append(cyg_path)
- # TODO(jeanluc) Change the convention to have both a cygwin_dir and a
- # python_dir.
- python_path = cyg_path.replace('cygwin\\bin', 'python_26')
- new_paths.append(python_path)
- if new_paths:
- new_paths = '$(ExecutablePath);' + ';'.join(new_paths)
-
- properties = {}
- for (name, configuration) in sorted(configurations.iteritems()):
- condition = _GetConfigurationCondition(name, configuration)
- attributes = _GetMSBuildAttributes(spec, configuration, build_file)
- msbuild_settings = configuration['finalized_msbuild_settings']
- _AddConditionalProperty(properties, condition, 'IntDir',
- attributes['IntermediateDirectory'])
- _AddConditionalProperty(properties, condition, 'OutDir',
- attributes['OutputDirectory'])
- _AddConditionalProperty(properties, condition, 'TargetName',
- attributes['TargetName'])
- if 'TargetExt' in attributes:
- _AddConditionalProperty(properties, condition, 'TargetExt',
- attributes['TargetExt'])
-
- if attributes.get('TargetPath'):
- _AddConditionalProperty(properties, condition, 'TargetPath',
- attributes['TargetPath'])
- if attributes.get('TargetExt'):
- _AddConditionalProperty(properties, condition, 'TargetExt',
- attributes['TargetExt'])
-
- if new_paths:
- _AddConditionalProperty(properties, condition, 'ExecutablePath',
- new_paths)
- tool_settings = msbuild_settings.get('', {})
- for name, value in sorted(tool_settings.iteritems()):
- formatted_value = _GetValueFormattedForMSBuild('', name, value)
- _AddConditionalProperty(properties, condition, name, formatted_value)
- return _GetMSBuildPropertyGroup(spec, None, properties)
-
-
-def _AddConditionalProperty(properties, condition, name, value):
- """Adds a property / conditional value pair to a dictionary.
-
- Arguments:
- properties: The dictionary to be modified. The key is the name of the
- property. The value is itself a dictionary; its key is the value and
- the value a list of condition for which this value is true.
- condition: The condition under which the named property has the value.
- name: The name of the property.
- value: The value of the property.
- """
- if name not in properties:
- properties[name] = {}
- values = properties[name]
- if value not in values:
- values[value] = []
- conditions = values[value]
- conditions.append(condition)
-
-
-# Regex for msvs variable references ( i.e. $(FOO) ).
-MSVS_VARIABLE_REFERENCE = re.compile(r'\$\(([a-zA-Z_][a-zA-Z0-9_]*)\)')
-
-
-def _GetMSBuildPropertyGroup(spec, label, properties):
- """Returns a PropertyGroup definition for the specified properties.
-
- Arguments:
- spec: The target project dict.
- label: An optional label for the PropertyGroup.
- properties: The dictionary to be converted. The key is the name of the
- property. The value is itself a dictionary; its key is the value and
- the value a list of condition for which this value is true.
- """
- group = ['PropertyGroup']
- if label:
- group.append({'Label': label})
- num_configurations = len(spec['configurations'])
- def GetEdges(node):
- # Use a definition of edges such that user_of_variable -> used_varible.
- # This happens to be easier in this case, since a variable's
- # definition contains all variables it references in a single string.
- edges = set()
- for value in sorted(properties[node].keys()):
- # Add to edges all $(...) references to variables.
- #
- # Variable references that refer to names not in properties are excluded
- # These can exist for instance to refer built in definitions like
- # $(SolutionDir).
- #
- # Self references are ignored. Self reference is used in a few places to
- # append to the default value. I.e. PATH=$(PATH);other_path
- edges.update(set([v for v in MSVS_VARIABLE_REFERENCE.findall(value)
- if v in properties and v != node]))
- return edges
- properties_ordered = gyp.common.TopologicallySorted(
- properties.keys(), GetEdges)
- # Walk properties in the reverse of a topological sort on
- # user_of_variable -> used_variable as this ensures variables are
- # defined before they are used.
- # NOTE: reverse(topsort(DAG)) = topsort(reverse_edges(DAG))
- for name in reversed(properties_ordered):
- values = properties[name]
- for value, conditions in sorted(values.iteritems()):
- if len(conditions) == num_configurations:
- # If the value is the same all configurations,
- # just add one unconditional entry.
- group.append([name, value])
- else:
- for condition in conditions:
- group.append([name, {'Condition': condition}, value])
- return [group]
-
-
-def _GetMSBuildToolSettingsSections(spec, configurations):
- groups = []
- for (name, configuration) in sorted(configurations.iteritems()):
- msbuild_settings = configuration['finalized_msbuild_settings']
- group = ['ItemDefinitionGroup',
- {'Condition': _GetConfigurationCondition(name, configuration)}
- ]
- for tool_name, tool_settings in sorted(msbuild_settings.iteritems()):
- # Skip the tool named '' which is a holder of global settings handled
- # by _GetMSBuildConfigurationGlobalProperties.
- if tool_name:
- if tool_settings:
- tool = [tool_name]
- for name, value in sorted(tool_settings.iteritems()):
- formatted_value = _GetValueFormattedForMSBuild(tool_name, name,
- value)
- tool.append([name, formatted_value])
- group.append(tool)
- groups.append(group)
- return groups
-
-
-def _FinalizeMSBuildSettings(spec, configuration):
- if 'msbuild_settings' in configuration:
- converted = False
- msbuild_settings = configuration['msbuild_settings']
- MSVSSettings.ValidateMSBuildSettings(msbuild_settings)
- else:
- converted = True
- msvs_settings = configuration.get('msvs_settings', {})
- msbuild_settings = MSVSSettings.ConvertToMSBuildSettings(msvs_settings)
- include_dirs, midl_include_dirs, resource_include_dirs = \
- _GetIncludeDirs(configuration)
- libraries = _GetLibraries(spec)
- library_dirs = _GetLibraryDirs(configuration)
- out_file, _, msbuild_tool = _GetOutputFilePathAndTool(spec, msbuild=True)
- target_ext = _GetOutputTargetExt(spec)
- defines = _GetDefines(configuration)
- if converted:
- # Visual Studio 2010 has TR1
- defines = [d for d in defines if d != '_HAS_TR1=0']
- # Warn of ignored settings
- ignored_settings = ['msvs_tool_files']
- for ignored_setting in ignored_settings:
- value = configuration.get(ignored_setting)
- if value:
- print ('Warning: The automatic conversion to MSBuild does not handle '
- '%s. Ignoring setting of %s' % (ignored_setting, str(value)))
-
- defines = [_EscapeCppDefineForMSBuild(d) for d in defines]
- disabled_warnings = _GetDisabledWarnings(configuration)
- prebuild = configuration.get('msvs_prebuild')
- postbuild = configuration.get('msvs_postbuild')
- def_file = _GetModuleDefinition(spec)
- precompiled_header = configuration.get('msvs_precompiled_header')
-
- # Add the information to the appropriate tool
- # TODO(jeanluc) We could optimize and generate these settings only if
- # the corresponding files are found, e.g. don't generate ResourceCompile
- # if you don't have any resources.
- _ToolAppend(msbuild_settings, 'ClCompile',
- 'AdditionalIncludeDirectories', include_dirs)
- _ToolAppend(msbuild_settings, 'Midl',
- 'AdditionalIncludeDirectories', midl_include_dirs)
- _ToolAppend(msbuild_settings, 'ResourceCompile',
- 'AdditionalIncludeDirectories', resource_include_dirs)
- # Add in libraries, note that even for empty libraries, we want this
- # set, to prevent inheriting default libraries from the enviroment.
- _ToolSetOrAppend(msbuild_settings, 'Link', 'AdditionalDependencies',
- libraries)
- _ToolAppend(msbuild_settings, 'Link', 'AdditionalLibraryDirectories',
- library_dirs)
- if out_file:
- _ToolAppend(msbuild_settings, msbuild_tool, 'OutputFile', out_file,
- only_if_unset=True)
- if target_ext:
- _ToolAppend(msbuild_settings, msbuild_tool, 'TargetExt', target_ext,
- only_if_unset=True)
- # Add defines.
- _ToolAppend(msbuild_settings, 'ClCompile',
- 'PreprocessorDefinitions', defines)
- _ToolAppend(msbuild_settings, 'ResourceCompile',
- 'PreprocessorDefinitions', defines)
- # Add disabled warnings.
- _ToolAppend(msbuild_settings, 'ClCompile',
- 'DisableSpecificWarnings', disabled_warnings)
- # Turn on precompiled headers if appropriate.
- if precompiled_header:
- precompiled_header = os.path.split(precompiled_header)[1]
- _ToolAppend(msbuild_settings, 'ClCompile', 'PrecompiledHeader', 'Use')
- _ToolAppend(msbuild_settings, 'ClCompile',
- 'PrecompiledHeaderFile', precompiled_header)
- _ToolAppend(msbuild_settings, 'ClCompile',
- 'ForcedIncludeFiles', [precompiled_header])
- else:
- _ToolAppend(msbuild_settings, 'ClCompile', 'PrecompiledHeader', 'NotUsing')
- # Turn off WinRT compilation
- _ToolAppend(msbuild_settings, 'ClCompile', 'CompileAsWinRT', 'false')
- # Turn on import libraries if appropriate
- if spec.get('msvs_requires_importlibrary'):
- _ToolAppend(msbuild_settings, '', 'IgnoreImportLibrary', 'false')
- # Loadable modules don't generate import libraries;
- # tell dependent projects to not expect one.
- if spec['type'] == 'loadable_module':
- _ToolAppend(msbuild_settings, '', 'IgnoreImportLibrary', 'true')
- # Set the module definition file if any.
- if def_file:
- _ToolAppend(msbuild_settings, 'Link', 'ModuleDefinitionFile', def_file)
- configuration['finalized_msbuild_settings'] = msbuild_settings
- if prebuild:
- _ToolAppend(msbuild_settings, 'PreBuildEvent', 'Command', prebuild)
- if postbuild:
- _ToolAppend(msbuild_settings, 'PostBuildEvent', 'Command', postbuild)
-
-
-def _GetValueFormattedForMSBuild(tool_name, name, value):
- if type(value) == list:
- # For some settings, VS2010 does not automatically extends the settings
- # TODO(jeanluc) Is this what we want?
- if name in ['AdditionalIncludeDirectories',
- 'AdditionalLibraryDirectories',
- 'AdditionalOptions',
- 'DelayLoadDLLs',
- 'DisableSpecificWarnings',
- 'PreprocessorDefinitions']:
- value.append('%%(%s)' % name)
- # For most tools, entries in a list should be separated with ';' but some
- # settings use a space. Check for those first.
- exceptions = {
- 'ClCompile': ['AdditionalOptions'],
- 'Link': ['AdditionalOptions'],
- 'Lib': ['AdditionalOptions']}
- if tool_name in exceptions and name in exceptions[tool_name]:
- char = ' '
- else:
- char = ';'
- formatted_value = char.join(
- [MSVSSettings.ConvertVCMacrosToMSBuild(i) for i in value])
- else:
- formatted_value = MSVSSettings.ConvertVCMacrosToMSBuild(value)
- return formatted_value
-
-
-def _VerifySourcesExist(sources, root_dir):
- """Verifies that all source files exist on disk.
-
- Checks that all regular source files, i.e. not created at run time,
- exist on disk. Missing files cause needless recompilation but no otherwise
- visible errors.
-
- Arguments:
- sources: A recursive list of Filter/file names.
- root_dir: The root directory for the relative path names.
- Returns:
- A list of source files that cannot be found on disk.
- """
- missing_sources = []
- for source in sources:
- if isinstance(source, MSVSProject.Filter):
- missing_sources.extend(_VerifySourcesExist(source.contents, root_dir))
- else:
- if '$' not in source:
- full_path = os.path.join(root_dir, source)
- if not os.path.exists(full_path):
- missing_sources.append(full_path)
- return missing_sources
-
-
-def _GetMSBuildSources(spec, sources, exclusions, rule_dependencies,
- extension_to_rule_name, actions_spec,
- sources_handled_by_action, list_excluded):
- groups = ['none', 'masm', 'midl', 'include', 'compile', 'resource', 'rule',
- 'rule_dependency']
- grouped_sources = {}
- for g in groups:
- grouped_sources[g] = []
-
- _AddSources2(spec, sources, exclusions, grouped_sources,
- rule_dependencies, extension_to_rule_name,
- sources_handled_by_action, list_excluded)
- sources = []
- for g in groups:
- if grouped_sources[g]:
- sources.append(['ItemGroup'] + grouped_sources[g])
- if actions_spec:
- sources.append(['ItemGroup'] + actions_spec)
- return sources
-
-
-def _AddSources2(spec, sources, exclusions, grouped_sources,
- rule_dependencies, extension_to_rule_name,
- sources_handled_by_action,
- list_excluded):
- extensions_excluded_from_precompile = []
- for source in sources:
- if isinstance(source, MSVSProject.Filter):
- _AddSources2(spec, source.contents, exclusions, grouped_sources,
- rule_dependencies, extension_to_rule_name,
- sources_handled_by_action,
- list_excluded)
- else:
- if not source in sources_handled_by_action:
- detail = []
- excluded_configurations = exclusions.get(source, [])
- if len(excluded_configurations) == len(spec['configurations']):
- detail.append(['ExcludedFromBuild', 'true'])
- else:
- for config_name, configuration in sorted(excluded_configurations):
- condition = _GetConfigurationCondition(config_name, configuration)
- detail.append(['ExcludedFromBuild',
- {'Condition': condition},
- 'true'])
- # Add precompile if needed
- for config_name, configuration in spec['configurations'].iteritems():
- precompiled_source = configuration.get('msvs_precompiled_source', '')
- if precompiled_source != '':
- precompiled_source = _FixPath(precompiled_source)
- if not extensions_excluded_from_precompile:
- # If the precompiled header is generated by a C source, we must
- # not try to use it for C++ sources, and vice versa.
- basename, extension = os.path.splitext(precompiled_source)
- if extension == '.c':
- extensions_excluded_from_precompile = ['.cc', '.cpp', '.cxx']
- else:
- extensions_excluded_from_precompile = ['.c']
-
- if precompiled_source == source:
- condition = _GetConfigurationCondition(config_name, configuration)
- detail.append(['PrecompiledHeader',
- {'Condition': condition},
- 'Create'
- ])
- else:
- # Turn off precompiled header usage for source files of a
- # different type than the file that generated the
- # precompiled header.
- for extension in extensions_excluded_from_precompile:
- if source.endswith(extension):
- detail.append(['PrecompiledHeader', ''])
- detail.append(['ForcedIncludeFiles', ''])
-
- group, element = _MapFileToMsBuildSourceType(source, rule_dependencies,
- extension_to_rule_name)
- grouped_sources[group].append([element, {'Include': source}] + detail)
-
-
-def _GetMSBuildProjectReferences(project):
- references = []
- if project.dependencies:
- group = ['ItemGroup']
- for dependency in project.dependencies:
- guid = dependency.guid
- project_dir = os.path.split(project.path)[0]
- relative_path = gyp.common.RelativePath(dependency.path, project_dir)
- project_ref = ['ProjectReference',
- {'Include': relative_path},
- ['Project', guid],
- ['ReferenceOutputAssembly', 'false']
- ]
- for config in dependency.spec.get('configurations', {}).itervalues():
- if config.get('msvs_use_library_dependency_inputs', 0):
- project_ref.append(['UseLibraryDependencyInputs', 'true'])
- break
- # If it's disabled in any config, turn it off in the reference.
- if config.get('msvs_2010_disable_uldi_when_referenced', 0):
- project_ref.append(['UseLibraryDependencyInputs', 'false'])
- break
- group.append(project_ref)
- references.append(group)
- return references
-
-
-def _GenerateMSBuildProject(project, options, version, generator_flags):
- spec = project.spec
- configurations = spec['configurations']
- project_dir, project_file_name = os.path.split(project.path)
- gyp.common.EnsureDirExists(project.path)
- # Prepare list of sources and excluded sources.
- gyp_path = _NormalizedSource(project.build_file)
- relative_path_of_gyp_file = gyp.common.RelativePath(gyp_path, project_dir)
-
- gyp_file = os.path.split(project.build_file)[1]
- sources, excluded_sources = _PrepareListOfSources(spec, generator_flags,
- gyp_file)
- # Add rules.
- actions_to_add = {}
- props_files_of_rules = set()
- targets_files_of_rules = set()
- rule_dependencies = set()
- extension_to_rule_name = {}
- list_excluded = generator_flags.get('msvs_list_excluded_files', True)
-
- # Don't generate rules if we are using an external builder like ninja.
- if not spec.get('msvs_external_builder'):
- _GenerateRulesForMSBuild(project_dir, options, spec,
- sources, excluded_sources,
- props_files_of_rules, targets_files_of_rules,
- actions_to_add, rule_dependencies,
- extension_to_rule_name)
- else:
- rules = spec.get('rules', [])
- _AdjustSourcesForRules(rules, sources, excluded_sources, True)
-
- sources, excluded_sources, excluded_idl = (
- _AdjustSourcesAndConvertToFilterHierarchy(spec, options,
- project_dir, sources,
- excluded_sources,
- list_excluded, version))
-
- # Don't add actions if we are using an external builder like ninja.
- if not spec.get('msvs_external_builder'):
- _AddActions(actions_to_add, spec, project.build_file)
- _AddCopies(actions_to_add, spec)
-
- # NOTE: this stanza must appear after all actions have been decided.
- # Don't excluded sources with actions attached, or they won't run.
- excluded_sources = _FilterActionsFromExcluded(
- excluded_sources, actions_to_add)
-
- exclusions = _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl)
- actions_spec, sources_handled_by_action = _GenerateActionsForMSBuild(
- spec, actions_to_add)
-
- _GenerateMSBuildFiltersFile(project.path + '.filters', sources,
- rule_dependencies,
- extension_to_rule_name)
- missing_sources = _VerifySourcesExist(sources, project_dir)
-
- for configuration in configurations.itervalues():
- _FinalizeMSBuildSettings(spec, configuration)
-
- # Add attributes to root element
-
- import_default_section = [
- ['Import', {'Project': r'$(VCTargetsPath)\Microsoft.Cpp.Default.props'}]]
- import_cpp_props_section = [
- ['Import', {'Project': r'$(VCTargetsPath)\Microsoft.Cpp.props'}]]
- import_cpp_targets_section = [
- ['Import', {'Project': r'$(VCTargetsPath)\Microsoft.Cpp.targets'}]]
- import_masm_props_section = [
- ['Import',
- {'Project': r'$(VCTargetsPath)\BuildCustomizations\masm.props'}]]
- import_masm_targets_section = [
- ['Import',
- {'Project': r'$(VCTargetsPath)\BuildCustomizations\masm.targets'}]]
- macro_section = [['PropertyGroup', {'Label': 'UserMacros'}]]
-
- content = [
- 'Project',
- {'xmlns': 'http://schemas.microsoft.com/developer/msbuild/2003',
- 'ToolsVersion': version.ProjectVersion(),
- 'DefaultTargets': 'Build'
- }]
-
- content += _GetMSBuildProjectConfigurations(configurations)
- content += _GetMSBuildGlobalProperties(spec, project.guid, project_file_name)
- content += import_default_section
- content += _GetMSBuildConfigurationDetails(spec, project.build_file)
- if spec.get('msvs_enable_winphone'):
- content += _GetMSBuildLocalProperties('v120_wp81')
- else:
- content += _GetMSBuildLocalProperties(project.msbuild_toolset)
- content += import_cpp_props_section
- content += import_masm_props_section
- content += _GetMSBuildExtensions(props_files_of_rules)
- content += _GetMSBuildPropertySheets(configurations)
- content += macro_section
- content += _GetMSBuildConfigurationGlobalProperties(spec, configurations,
- project.build_file)
- content += _GetMSBuildToolSettingsSections(spec, configurations)
- content += _GetMSBuildSources(
- spec, sources, exclusions, rule_dependencies, extension_to_rule_name,
- actions_spec, sources_handled_by_action, list_excluded)
- content += _GetMSBuildProjectReferences(project)
- content += import_cpp_targets_section
- content += import_masm_targets_section
- content += _GetMSBuildExtensionTargets(targets_files_of_rules)
-
- if spec.get('msvs_external_builder'):
- content += _GetMSBuildExternalBuilderTargets(spec)
-
- # TODO(jeanluc) File a bug to get rid of runas. We had in MSVS:
- # has_run_as = _WriteMSVSUserFile(project.path, version, spec)
-
- easy_xml.WriteXmlIfChanged(content, project.path, pretty=True, win32=True)
-
- return missing_sources
-
-
-def _GetMSBuildExternalBuilderTargets(spec):
- """Return a list of MSBuild targets for external builders.
-
- The "Build" and "Clean" targets are always generated. If the spec contains
- 'msvs_external_builder_clcompile_cmd', then the "ClCompile" target will also
- be generated, to support building selected C/C++ files.
-
- Arguments:
- spec: The gyp target spec.
- Returns:
- List of MSBuild 'Target' specs.
- """
- build_cmd = _BuildCommandLineForRuleRaw(
- spec, spec['msvs_external_builder_build_cmd'],
- False, False, False, False)
- build_target = ['Target', {'Name': 'Build'}]
- build_target.append(['Exec', {'Command': build_cmd}])
-
- clean_cmd = _BuildCommandLineForRuleRaw(
- spec, spec['msvs_external_builder_clean_cmd'],
- False, False, False, False)
- clean_target = ['Target', {'Name': 'Clean'}]
- clean_target.append(['Exec', {'Command': clean_cmd}])
-
- targets = [build_target, clean_target]
-
- if spec.get('msvs_external_builder_clcompile_cmd'):
- clcompile_cmd = _BuildCommandLineForRuleRaw(
- spec, spec['msvs_external_builder_clcompile_cmd'],
- False, False, False, False)
- clcompile_target = ['Target', {'Name': 'ClCompile'}]
- clcompile_target.append(['Exec', {'Command': clcompile_cmd}])
- targets.append(clcompile_target)
-
- return targets
-
-
-def _GetMSBuildExtensions(props_files_of_rules):
- extensions = ['ImportGroup', {'Label': 'ExtensionSettings'}]
- for props_file in props_files_of_rules:
- extensions.append(['Import', {'Project': props_file}])
- return [extensions]
-
-
-def _GetMSBuildExtensionTargets(targets_files_of_rules):
- targets_node = ['ImportGroup', {'Label': 'ExtensionTargets'}]
- for targets_file in sorted(targets_files_of_rules):
- targets_node.append(['Import', {'Project': targets_file}])
- return [targets_node]
-
-
-def _GenerateActionsForMSBuild(spec, actions_to_add):
- """Add actions accumulated into an actions_to_add, merging as needed.
-
- Arguments:
- spec: the target project dict
- actions_to_add: dictionary keyed on input name, which maps to a list of
- dicts describing the actions attached to that input file.
-
- Returns:
- A pair of (action specification, the sources handled by this action).
- """
- sources_handled_by_action = OrderedSet()
- actions_spec = []
- for primary_input, actions in actions_to_add.iteritems():
- inputs = OrderedSet()
- outputs = OrderedSet()
- descriptions = []
- commands = []
- for action in actions:
- inputs.update(OrderedSet(action['inputs']))
- outputs.update(OrderedSet(action['outputs']))
- descriptions.append(action['description'])
- cmd = action['command']
- # For most actions, add 'call' so that actions that invoke batch files
- # return and continue executing. msbuild_use_call provides a way to
- # disable this but I have not seen any adverse effect from doing that
- # for everything.
- if action.get('msbuild_use_call', True):
- cmd = 'call ' + cmd
- commands.append(cmd)
- # Add the custom build action for one input file.
- description = ', and also '.join(descriptions)
-
- # We can't join the commands simply with && because the command line will
- # get too long. See also _AddActions: cygwin's setup_env mustn't be called
- # for every invocation or the command that sets the PATH will grow too
- # long.
- command = '\r\n'.join([c + '\r\nif %errorlevel% neq 0 exit /b %errorlevel%'
- for c in commands])
- _AddMSBuildAction(spec,
- primary_input,
- inputs,
- outputs,
- command,
- description,
- sources_handled_by_action,
- actions_spec)
- return actions_spec, sources_handled_by_action
-
-
-def _AddMSBuildAction(spec, primary_input, inputs, outputs, cmd, description,
- sources_handled_by_action, actions_spec):
- command = MSVSSettings.ConvertVCMacrosToMSBuild(cmd)
- primary_input = _FixPath(primary_input)
- inputs_array = _FixPaths(inputs)
- outputs_array = _FixPaths(outputs)
- additional_inputs = ';'.join([i for i in inputs_array
- if i != primary_input])
- outputs = ';'.join(outputs_array)
- sources_handled_by_action.add(primary_input)
- action_spec = ['CustomBuild', {'Include': primary_input}]
- action_spec.extend(
- # TODO(jeanluc) 'Document' for all or just if as_sources?
- [['FileType', 'Document'],
- ['Command', command],
- ['Message', description],
- ['Outputs', outputs]
- ])
- if additional_inputs:
- action_spec.append(['AdditionalInputs', additional_inputs])
- actions_spec.append(action_spec)
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py
deleted file mode 100755
index c0b021d..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-""" Unit tests for the msvs.py file. """
-
-import gyp.generator.msvs as msvs
-import unittest
-import StringIO
-
-
-class TestSequenceFunctions(unittest.TestCase):
-
- def setUp(self):
- self.stderr = StringIO.StringIO()
-
- def test_GetLibraries(self):
- self.assertEqual(
- msvs._GetLibraries({}),
- [])
- self.assertEqual(
- msvs._GetLibraries({'libraries': []}),
- [])
- self.assertEqual(
- msvs._GetLibraries({'other':'foo', 'libraries': ['a.lib']}),
- ['a.lib'])
- self.assertEqual(
- msvs._GetLibraries({'libraries': ['-la']}),
- ['a.lib'])
- self.assertEqual(
- msvs._GetLibraries({'libraries': ['a.lib', 'b.lib', 'c.lib', '-lb.lib',
- '-lb.lib', 'd.lib', 'a.lib']}),
- ['c.lib', 'b.lib', 'd.lib', 'a.lib'])
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
deleted file mode 100644
index a00573e..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
+++ /dev/null
@@ -1,2422 +0,0 @@
-# Copyright (c) 2013 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import collections
-import copy
-import hashlib
-import json
-import multiprocessing
-import os.path
-import re
-import signal
-import subprocess
-import sys
-import gyp
-import gyp.common
-from gyp.common import OrderedSet
-import gyp.msvs_emulation
-import gyp.MSVSUtil as MSVSUtil
-import gyp.xcode_emulation
-from cStringIO import StringIO
-
-from gyp.common import GetEnvironFallback
-import gyp.ninja_syntax as ninja_syntax
-
-generator_default_variables = {
- 'EXECUTABLE_PREFIX': '',
- 'EXECUTABLE_SUFFIX': '',
- 'STATIC_LIB_PREFIX': 'lib',
- 'STATIC_LIB_SUFFIX': '.a',
- 'SHARED_LIB_PREFIX': 'lib',
-
- # Gyp expects the following variables to be expandable by the build
- # system to the appropriate locations. Ninja prefers paths to be
- # known at gyp time. To resolve this, introduce special
- # variables starting with $! and $| (which begin with a $ so gyp knows it
- # should be treated specially, but is otherwise an invalid
- # ninja/shell variable) that are passed to gyp here but expanded
- # before writing out into the target .ninja files; see
- # ExpandSpecial.
- # $! is used for variables that represent a path and that can only appear at
- # the start of a string, while $| is used for variables that can appear
- # anywhere in a string.
- 'INTERMEDIATE_DIR': '$!INTERMEDIATE_DIR',
- 'SHARED_INTERMEDIATE_DIR': '$!PRODUCT_DIR/gen',
- 'PRODUCT_DIR': '$!PRODUCT_DIR',
- 'CONFIGURATION_NAME': '$|CONFIGURATION_NAME',
-
- # Special variables that may be used by gyp 'rule' targets.
- # We generate definitions for these variables on the fly when processing a
- # rule.
- 'RULE_INPUT_ROOT': '${root}',
- 'RULE_INPUT_DIRNAME': '${dirname}',
- 'RULE_INPUT_PATH': '${source}',
- 'RULE_INPUT_EXT': '${ext}',
- 'RULE_INPUT_NAME': '${name}',
-}
-
-# Placates pylint.
-generator_additional_non_configuration_keys = []
-generator_additional_path_sections = []
-generator_extra_sources_for_rules = []
-generator_filelist_paths = None
-
-generator_supports_multiple_toolsets = gyp.common.CrossCompileRequested()
-
-def StripPrefix(arg, prefix):
- if arg.startswith(prefix):
- return arg[len(prefix):]
- return arg
-
-
-def QuoteShellArgument(arg, flavor):
- """Quote a string such that it will be interpreted as a single argument
- by the shell."""
- # Rather than attempting to enumerate the bad shell characters, just
- # whitelist common OK ones and quote anything else.
- if re.match(r'^[a-zA-Z0-9_=.\\/-]+$', arg):
- return arg # No quoting necessary.
- if flavor == 'win':
- return gyp.msvs_emulation.QuoteForRspFile(arg)
- return "'" + arg.replace("'", "'" + '"\'"' + "'") + "'"
-
-
-def Define(d, flavor):
- """Takes a preprocessor define and returns a -D parameter that's ninja- and
- shell-escaped."""
- if flavor == 'win':
- # cl.exe replaces literal # characters with = in preprocesor definitions for
- # some reason. Octal-encode to work around that.
- d = d.replace('#', '\\%03o' % ord('#'))
- return QuoteShellArgument(ninja_syntax.escape('-D' + d), flavor)
-
-
-def AddArch(output, arch):
- """Adds an arch string to an output path."""
- output, extension = os.path.splitext(output)
- return '%s.%s%s' % (output, arch, extension)
-
-
-class Target(object):
- """Target represents the paths used within a single gyp target.
-
- Conceptually, building a single target A is a series of steps:
-
- 1) actions/rules/copies generates source/resources/etc.
- 2) compiles generates .o files
- 3) link generates a binary (library/executable)
- 4) bundle merges the above in a mac bundle
-
- (Any of these steps can be optional.)
-
- From a build ordering perspective, a dependent target B could just
- depend on the last output of this series of steps.
-
- But some dependent commands sometimes need to reach inside the box.
- For example, when linking B it needs to get the path to the static
- library generated by A.
-
- This object stores those paths. To keep things simple, member
- variables only store concrete paths to single files, while methods
- compute derived values like "the last output of the target".
- """
- def __init__(self, type):
- # Gyp type ("static_library", etc.) of this target.
- self.type = type
- # File representing whether any input dependencies necessary for
- # dependent actions have completed.
- self.preaction_stamp = None
- # File representing whether any input dependencies necessary for
- # dependent compiles have completed.
- self.precompile_stamp = None
- # File representing the completion of actions/rules/copies, if any.
- self.actions_stamp = None
- # Path to the output of the link step, if any.
- self.binary = None
- # Path to the file representing the completion of building the bundle,
- # if any.
- self.bundle = None
- # On Windows, incremental linking requires linking against all the .objs
- # that compose a .lib (rather than the .lib itself). That list is stored
- # here. In this case, we also need to save the compile_deps for the target,
- # so that the target that directly depends on the .objs can also depend
- # on those.
- self.component_objs = None
- self.compile_deps = None
- # Windows only. The import .lib is the output of a build step, but
- # because dependents only link against the lib (not both the lib and the
- # dll) we keep track of the import library here.
- self.import_lib = None
-
- def Linkable(self):
- """Return true if this is a target that can be linked against."""
- return self.type in ('static_library', 'shared_library')
-
- def UsesToc(self, flavor):
- """Return true if the target should produce a restat rule based on a TOC
- file."""
- # For bundles, the .TOC should be produced for the binary, not for
- # FinalOutput(). But the naive approach would put the TOC file into the
- # bundle, so don't do this for bundles for now.
- if flavor == 'win' or self.bundle:
- return False
- return self.type in ('shared_library', 'loadable_module')
-
- def PreActionInput(self, flavor):
- """Return the path, if any, that should be used as a dependency of
- any dependent action step."""
- if self.UsesToc(flavor):
- return self.FinalOutput() + '.TOC'
- return self.FinalOutput() or self.preaction_stamp
-
- def PreCompileInput(self):
- """Return the path, if any, that should be used as a dependency of
- any dependent compile step."""
- return self.actions_stamp or self.precompile_stamp
-
- def FinalOutput(self):
- """Return the last output of the target, which depends on all prior
- steps."""
- return self.bundle or self.binary or self.actions_stamp
-
-
-# A small discourse on paths as used within the Ninja build:
-# All files we produce (both at gyp and at build time) appear in the
-# build directory (e.g. out/Debug).
-#
-# Paths within a given .gyp file are always relative to the directory
-# containing the .gyp file. Call these "gyp paths". This includes
-# sources as well as the starting directory a given gyp rule/action
-# expects to be run from. We call the path from the source root to
-# the gyp file the "base directory" within the per-.gyp-file
-# NinjaWriter code.
-#
-# All paths as written into the .ninja files are relative to the build
-# directory. Call these paths "ninja paths".
-#
-# We translate between these two notions of paths with two helper
-# functions:
-#
-# - GypPathToNinja translates a gyp path (i.e. relative to the .gyp file)
-# into the equivalent ninja path.
-#
-# - GypPathToUniqueOutput translates a gyp path into a ninja path to write
-# an output file; the result can be namespaced such that it is unique
-# to the input file name as well as the output target name.
-
-class NinjaWriter(object):
- def __init__(self, hash_for_rules, target_outputs, base_dir, build_dir,
- output_file, toplevel_build, output_file_name, flavor,
- toplevel_dir=None):
- """
- base_dir: path from source root to directory containing this gyp file,
- by gyp semantics, all input paths are relative to this
- build_dir: path from source root to build output
- toplevel_dir: path to the toplevel directory
- """
-
- self.hash_for_rules = hash_for_rules
- self.target_outputs = target_outputs
- self.base_dir = base_dir
- self.build_dir = build_dir
- self.ninja = ninja_syntax.Writer(output_file)
- self.toplevel_build = toplevel_build
- self.output_file_name = output_file_name
-
- self.flavor = flavor
- self.abs_build_dir = None
- if toplevel_dir is not None:
- self.abs_build_dir = os.path.abspath(os.path.join(toplevel_dir,
- build_dir))
- self.obj_ext = '.obj' if flavor == 'win' else '.o'
- if flavor == 'win':
- # See docstring of msvs_emulation.GenerateEnvironmentFiles().
- self.win_env = {}
- for arch in ('x86', 'x64'):
- self.win_env[arch] = 'environment.' + arch
-
- # Relative path from build output dir to base dir.
- build_to_top = gyp.common.InvertRelativePath(build_dir, toplevel_dir)
- self.build_to_base = os.path.join(build_to_top, base_dir)
- # Relative path from base dir to build dir.
- base_to_top = gyp.common.InvertRelativePath(base_dir, toplevel_dir)
- self.base_to_build = os.path.join(base_to_top, build_dir)
-
- def ExpandSpecial(self, path, product_dir=None):
- """Expand specials like $!PRODUCT_DIR in |path|.
-
- If |product_dir| is None, assumes the cwd is already the product
- dir. Otherwise, |product_dir| is the relative path to the product
- dir.
- """
-
- PRODUCT_DIR = '$!PRODUCT_DIR'
- if PRODUCT_DIR in path:
- if product_dir:
- path = path.replace(PRODUCT_DIR, product_dir)
- else:
- path = path.replace(PRODUCT_DIR + '/', '')
- path = path.replace(PRODUCT_DIR + '\\', '')
- path = path.replace(PRODUCT_DIR, '.')
-
- INTERMEDIATE_DIR = '$!INTERMEDIATE_DIR'
- if INTERMEDIATE_DIR in path:
- int_dir = self.GypPathToUniqueOutput('gen')
- # GypPathToUniqueOutput generates a path relative to the product dir,
- # so insert product_dir in front if it is provided.
- path = path.replace(INTERMEDIATE_DIR,
- os.path.join(product_dir or '', int_dir))
-
- CONFIGURATION_NAME = '$|CONFIGURATION_NAME'
- path = path.replace(CONFIGURATION_NAME, self.config_name)
-
- return path
-
- def ExpandRuleVariables(self, path, root, dirname, source, ext, name):
- if self.flavor == 'win':
- path = self.msvs_settings.ConvertVSMacros(
- path, config=self.config_name)
- path = path.replace(generator_default_variables['RULE_INPUT_ROOT'], root)
- path = path.replace(generator_default_variables['RULE_INPUT_DIRNAME'],
- dirname)
- path = path.replace(generator_default_variables['RULE_INPUT_PATH'], source)
- path = path.replace(generator_default_variables['RULE_INPUT_EXT'], ext)
- path = path.replace(generator_default_variables['RULE_INPUT_NAME'], name)
- return path
-
- def GypPathToNinja(self, path, env=None):
- """Translate a gyp path to a ninja path, optionally expanding environment
- variable references in |path| with |env|.
-
- See the above discourse on path conversions."""
- if env:
- if self.flavor == 'mac':
- path = gyp.xcode_emulation.ExpandEnvVars(path, env)
- elif self.flavor == 'win':
- path = gyp.msvs_emulation.ExpandMacros(path, env)
- if path.startswith('$!'):
- expanded = self.ExpandSpecial(path)
- if self.flavor == 'win':
- expanded = os.path.normpath(expanded)
- return expanded
- if '$|' in path:
- path = self.ExpandSpecial(path)
- assert '$' not in path, path
- return os.path.normpath(os.path.join(self.build_to_base, path))
-
- def GypPathToUniqueOutput(self, path, qualified=True):
- """Translate a gyp path to a ninja path for writing output.
-
- If qualified is True, qualify the resulting filename with the name
- of the target. This is necessary when e.g. compiling the same
- path twice for two separate output targets.
-
- See the above discourse on path conversions."""
-
- path = self.ExpandSpecial(path)
- assert not path.startswith('$'), path
-
- # Translate the path following this scheme:
- # Input: foo/bar.gyp, target targ, references baz/out.o
- # Output: obj/foo/baz/targ.out.o (if qualified)
- # obj/foo/baz/out.o (otherwise)
- # (and obj.host instead of obj for cross-compiles)
- #
- # Why this scheme and not some other one?
- # 1) for a given input, you can compute all derived outputs by matching
- # its path, even if the input is brought via a gyp file with '..'.
- # 2) simple files like libraries and stamps have a simple filename.
-
- obj = 'obj'
- if self.toolset != 'target':
- obj += '.' + self.toolset
-
- path_dir, path_basename = os.path.split(path)
- assert not os.path.isabs(path_dir), (
- "'%s' can not be absolute path (see crbug.com/462153)." % path_dir)
-
- if qualified:
- path_basename = self.name + '.' + path_basename
- return os.path.normpath(os.path.join(obj, self.base_dir, path_dir,
- path_basename))
-
- def WriteCollapsedDependencies(self, name, targets, order_only=None):
- """Given a list of targets, return a path for a single file
- representing the result of building all the targets or None.
-
- Uses a stamp file if necessary."""
-
- assert targets == filter(None, targets), targets
- if len(targets) == 0:
- assert not order_only
- return None
- if len(targets) > 1 or order_only:
- stamp = self.GypPathToUniqueOutput(name + '.stamp')
- targets = self.ninja.build(stamp, 'stamp', targets, order_only=order_only)
- self.ninja.newline()
- return targets[0]
-
- def _SubninjaNameForArch(self, arch):
- output_file_base = os.path.splitext(self.output_file_name)[0]
- return '%s.%s.ninja' % (output_file_base, arch)
-
- def WriteSpec(self, spec, config_name, generator_flags):
- """The main entry point for NinjaWriter: write the build rules for a spec.
-
- Returns a Target object, which represents the output paths for this spec.
- Returns None if there are no outputs (e.g. a settings-only 'none' type
- target)."""
-
- self.config_name = config_name
- self.name = spec['target_name']
- self.toolset = spec['toolset']
- config = spec['configurations'][config_name]
- self.target = Target(spec['type'])
- self.is_standalone_static_library = bool(
- spec.get('standalone_static_library', 0))
- # Track if this target contains any C++ files, to decide if gcc or g++
- # should be used for linking.
- self.uses_cpp = False
-
- self.is_mac_bundle = gyp.xcode_emulation.IsMacBundle(self.flavor, spec)
- self.xcode_settings = self.msvs_settings = None
- if self.flavor == 'mac':
- self.xcode_settings = gyp.xcode_emulation.XcodeSettings(spec)
- if self.flavor == 'win':
- self.msvs_settings = gyp.msvs_emulation.MsvsSettings(spec,
- generator_flags)
- arch = self.msvs_settings.GetArch(config_name)
- self.ninja.variable('arch', self.win_env[arch])
- self.ninja.variable('cc', '$cl_' + arch)
- self.ninja.variable('cxx', '$cl_' + arch)
- self.ninja.variable('cc_host', '$cl_' + arch)
- self.ninja.variable('cxx_host', '$cl_' + arch)
- self.ninja.variable('asm', '$ml_' + arch)
-
- if self.flavor == 'mac':
- self.archs = self.xcode_settings.GetActiveArchs(config_name)
- if len(self.archs) > 1:
- self.arch_subninjas = dict(
- (arch, ninja_syntax.Writer(
- OpenOutput(os.path.join(self.toplevel_build,
- self._SubninjaNameForArch(arch)),
- 'w')))
- for arch in self.archs)
-
- # Compute predepends for all rules.
- # actions_depends is the dependencies this target depends on before running
- # any of its action/rule/copy steps.
- # compile_depends is the dependencies this target depends on before running
- # any of its compile steps.
- actions_depends = []
- compile_depends = []
- # TODO(evan): it is rather confusing which things are lists and which
- # are strings. Fix these.
- if 'dependencies' in spec:
- for dep in spec['dependencies']:
- if dep in self.target_outputs:
- target = self.target_outputs[dep]
- actions_depends.append(target.PreActionInput(self.flavor))
- compile_depends.append(target.PreCompileInput())
- actions_depends = filter(None, actions_depends)
- compile_depends = filter(None, compile_depends)
- actions_depends = self.WriteCollapsedDependencies('actions_depends',
- actions_depends)
- compile_depends = self.WriteCollapsedDependencies('compile_depends',
- compile_depends)
- self.target.preaction_stamp = actions_depends
- self.target.precompile_stamp = compile_depends
-
- # Write out actions, rules, and copies. These must happen before we
- # compile any sources, so compute a list of predependencies for sources
- # while we do it.
- extra_sources = []
- mac_bundle_depends = []
- self.target.actions_stamp = self.WriteActionsRulesCopies(
- spec, extra_sources, actions_depends, mac_bundle_depends)
-
- # If we have actions/rules/copies, we depend directly on those, but
- # otherwise we depend on dependent target's actions/rules/copies etc.
- # We never need to explicitly depend on previous target's link steps,
- # because no compile ever depends on them.
- compile_depends_stamp = (self.target.actions_stamp or compile_depends)
-
- # Write out the compilation steps, if any.
- link_deps = []
- sources = extra_sources + spec.get('sources', [])
- if sources:
- if self.flavor == 'mac' and len(self.archs) > 1:
- # Write subninja file containing compile and link commands scoped to
- # a single arch if a fat binary is being built.
- for arch in self.archs:
- self.ninja.subninja(self._SubninjaNameForArch(arch))
-
- pch = None
- if self.flavor == 'win':
- gyp.msvs_emulation.VerifyMissingSources(
- sources, self.abs_build_dir, generator_flags, self.GypPathToNinja)
- pch = gyp.msvs_emulation.PrecompiledHeader(
- self.msvs_settings, config_name, self.GypPathToNinja,
- self.GypPathToUniqueOutput, self.obj_ext)
- else:
- pch = gyp.xcode_emulation.MacPrefixHeader(
- self.xcode_settings, self.GypPathToNinja,
- lambda path, lang: self.GypPathToUniqueOutput(path + '-' + lang))
- link_deps = self.WriteSources(
- self.ninja, config_name, config, sources, compile_depends_stamp, pch,
- spec)
- # Some actions/rules output 'sources' that are already object files.
- obj_outputs = [f for f in sources if f.endswith(self.obj_ext)]
- if obj_outputs:
- if self.flavor != 'mac' or len(self.archs) == 1:
- link_deps += [self.GypPathToNinja(o) for o in obj_outputs]
- else:
- print "Warning: Actions/rules writing object files don't work with " \
- "multiarch targets, dropping. (target %s)" % spec['target_name']
- elif self.flavor == 'mac' and len(self.archs) > 1:
- link_deps = collections.defaultdict(list)
-
- compile_deps = self.target.actions_stamp or actions_depends
- if self.flavor == 'win' and self.target.type == 'static_library':
- self.target.component_objs = link_deps
- self.target.compile_deps = compile_deps
-
- # Write out a link step, if needed.
- output = None
- is_empty_bundle = not link_deps and not mac_bundle_depends
- if link_deps or self.target.actions_stamp or actions_depends:
- output = self.WriteTarget(spec, config_name, config, link_deps,
- compile_deps)
- if self.is_mac_bundle:
- mac_bundle_depends.append(output)
-
- # Bundle all of the above together, if needed.
- if self.is_mac_bundle:
- output = self.WriteMacBundle(spec, mac_bundle_depends, is_empty_bundle)
-
- if not output:
- return None
-
- assert self.target.FinalOutput(), output
- return self.target
-
- def _WinIdlRule(self, source, prebuild, outputs):
- """Handle the implicit VS .idl rule for one source file. Fills |outputs|
- with files that are generated."""
- outdir, output, vars, flags = self.msvs_settings.GetIdlBuildData(
- source, self.config_name)
- outdir = self.GypPathToNinja(outdir)
- def fix_path(path, rel=None):
- path = os.path.join(outdir, path)
- dirname, basename = os.path.split(source)
- root, ext = os.path.splitext(basename)
- path = self.ExpandRuleVariables(
- path, root, dirname, source, ext, basename)
- if rel:
- path = os.path.relpath(path, rel)
- return path
- vars = [(name, fix_path(value, outdir)) for name, value in vars]
- output = [fix_path(p) for p in output]
- vars.append(('outdir', outdir))
- vars.append(('idlflags', flags))
- input = self.GypPathToNinja(source)
- self.ninja.build(output, 'idl', input,
- variables=vars, order_only=prebuild)
- outputs.extend(output)
-
- def WriteWinIdlFiles(self, spec, prebuild):
- """Writes rules to match MSVS's implicit idl handling."""
- assert self.flavor == 'win'
- if self.msvs_settings.HasExplicitIdlRulesOrActions(spec):
- return []
- outputs = []
- for source in filter(lambda x: x.endswith('.idl'), spec['sources']):
- self._WinIdlRule(source, prebuild, outputs)
- return outputs
-
- def WriteActionsRulesCopies(self, spec, extra_sources, prebuild,
- mac_bundle_depends):
- """Write out the Actions, Rules, and Copies steps. Return a path
- representing the outputs of these steps."""
- outputs = []
- if self.is_mac_bundle:
- mac_bundle_resources = spec.get('mac_bundle_resources', [])[:]
- else:
- mac_bundle_resources = []
- extra_mac_bundle_resources = []
-
- if 'actions' in spec:
- outputs += self.WriteActions(spec['actions'], extra_sources, prebuild,
- extra_mac_bundle_resources)
- if 'rules' in spec:
- outputs += self.WriteRules(spec['rules'], extra_sources, prebuild,
- mac_bundle_resources,
- extra_mac_bundle_resources)
- if 'copies' in spec:
- outputs += self.WriteCopies(spec['copies'], prebuild, mac_bundle_depends)
-
- if 'sources' in spec and self.flavor == 'win':
- outputs += self.WriteWinIdlFiles(spec, prebuild)
-
- stamp = self.WriteCollapsedDependencies('actions_rules_copies', outputs)
-
- if self.is_mac_bundle:
- xcassets = self.WriteMacBundleResources(
- extra_mac_bundle_resources + mac_bundle_resources, mac_bundle_depends)
- partial_info_plist = self.WriteMacXCassets(xcassets, mac_bundle_depends)
- self.WriteMacInfoPlist(partial_info_plist, mac_bundle_depends)
-
- return stamp
-
- def GenerateDescription(self, verb, message, fallback):
- """Generate and return a description of a build step.
-
- |verb| is the short summary, e.g. ACTION or RULE.
- |message| is a hand-written description, or None if not available.
- |fallback| is the gyp-level name of the step, usable as a fallback.
- """
- if self.toolset != 'target':
- verb += '(%s)' % self.toolset
- if message:
- return '%s %s' % (verb, self.ExpandSpecial(message))
- else:
- return '%s %s: %s' % (verb, self.name, fallback)
-
- def WriteActions(self, actions, extra_sources, prebuild,
- extra_mac_bundle_resources):
- # Actions cd into the base directory.
- env = self.GetToolchainEnv()
- all_outputs = []
- for action in actions:
- # First write out a rule for the action.
- name = '%s_%s' % (action['action_name'], self.hash_for_rules)
- description = self.GenerateDescription('ACTION',
- action.get('message', None),
- name)
- is_cygwin = (self.msvs_settings.IsRuleRunUnderCygwin(action)
- if self.flavor == 'win' else False)
- args = action['action']
- depfile = action.get('depfile', None)
- if depfile:
- depfile = self.ExpandSpecial(depfile, self.base_to_build)
- pool = 'console' if int(action.get('ninja_use_console', 0)) else None
- rule_name, _ = self.WriteNewNinjaRule(name, args, description,
- is_cygwin, env, pool,
- depfile=depfile)
-
- inputs = [self.GypPathToNinja(i, env) for i in action['inputs']]
- if int(action.get('process_outputs_as_sources', False)):
- extra_sources += action['outputs']
- if int(action.get('process_outputs_as_mac_bundle_resources', False)):
- extra_mac_bundle_resources += action['outputs']
- outputs = [self.GypPathToNinja(o, env) for o in action['outputs']]
-
- # Then write out an edge using the rule.
- self.ninja.build(outputs, rule_name, inputs,
- order_only=prebuild)
- all_outputs += outputs
-
- self.ninja.newline()
-
- return all_outputs
-
- def WriteRules(self, rules, extra_sources, prebuild,
- mac_bundle_resources, extra_mac_bundle_resources):
- env = self.GetToolchainEnv()
- all_outputs = []
- for rule in rules:
- # Skip a rule with no action and no inputs.
- if 'action' not in rule and not rule.get('rule_sources', []):
- continue
-
- # First write out a rule for the rule action.
- name = '%s_%s' % (rule['rule_name'], self.hash_for_rules)
-
- args = rule['action']
- description = self.GenerateDescription(
- 'RULE',
- rule.get('message', None),
- ('%s ' + generator_default_variables['RULE_INPUT_PATH']) % name)
- is_cygwin = (self.msvs_settings.IsRuleRunUnderCygwin(rule)
- if self.flavor == 'win' else False)
- pool = 'console' if int(rule.get('ninja_use_console', 0)) else None
- rule_name, args = self.WriteNewNinjaRule(
- name, args, description, is_cygwin, env, pool)
-
- # TODO: if the command references the outputs directly, we should
- # simplify it to just use $out.
-
- # Rules can potentially make use of some special variables which
- # must vary per source file.
- # Compute the list of variables we'll need to provide.
- special_locals = ('source', 'root', 'dirname', 'ext', 'name')
- needed_variables = set(['source'])
- for argument in args:
- for var in special_locals:
- if '${%s}' % var in argument:
- needed_variables.add(var)
-
- def cygwin_munge(path):
- # pylint: disable=cell-var-from-loop
- if is_cygwin:
- return path.replace('\\', '/')
- return path
-
- inputs = [self.GypPathToNinja(i, env) for i in rule.get('inputs', [])]
-
- # If there are n source files matching the rule, and m additional rule
- # inputs, then adding 'inputs' to each build edge written below will
- # write m * n inputs. Collapsing reduces this to m + n.
- sources = rule.get('rule_sources', [])
- num_inputs = len(inputs)
- if prebuild:
- num_inputs += 1
- if num_inputs > 2 and len(sources) > 2:
- inputs = [self.WriteCollapsedDependencies(
- rule['rule_name'], inputs, order_only=prebuild)]
- prebuild = []
-
- # For each source file, write an edge that generates all the outputs.
- for source in sources:
- source = os.path.normpath(source)
- dirname, basename = os.path.split(source)
- root, ext = os.path.splitext(basename)
-
- # Gather the list of inputs and outputs, expanding $vars if possible.
- outputs = [self.ExpandRuleVariables(o, root, dirname,
- source, ext, basename)
- for o in rule['outputs']]
-
- if int(rule.get('process_outputs_as_sources', False)):
- extra_sources += outputs
-
- was_mac_bundle_resource = source in mac_bundle_resources
- if was_mac_bundle_resource or \
- int(rule.get('process_outputs_as_mac_bundle_resources', False)):
- extra_mac_bundle_resources += outputs
- # Note: This is n_resources * n_outputs_in_rule. Put to-be-removed
- # items in a set and remove them all in a single pass if this becomes
- # a performance issue.
- if was_mac_bundle_resource:
- mac_bundle_resources.remove(source)
-
- extra_bindings = []
- for var in needed_variables:
- if var == 'root':
- extra_bindings.append(('root', cygwin_munge(root)))
- elif var == 'dirname':
- # '$dirname' is a parameter to the rule action, which means
- # it shouldn't be converted to a Ninja path. But we don't
- # want $!PRODUCT_DIR in there either.
- dirname_expanded = self.ExpandSpecial(dirname, self.base_to_build)
- extra_bindings.append(('dirname', cygwin_munge(dirname_expanded)))
- elif var == 'source':
- # '$source' is a parameter to the rule action, which means
- # it shouldn't be converted to a Ninja path. But we don't
- # want $!PRODUCT_DIR in there either.
- source_expanded = self.ExpandSpecial(source, self.base_to_build)
- extra_bindings.append(('source', cygwin_munge(source_expanded)))
- elif var == 'ext':
- extra_bindings.append(('ext', ext))
- elif var == 'name':
- extra_bindings.append(('name', cygwin_munge(basename)))
- else:
- assert var == None, repr(var)
-
- outputs = [self.GypPathToNinja(o, env) for o in outputs]
- if self.flavor == 'win':
- # WriteNewNinjaRule uses unique_name for creating an rsp file on win.
- extra_bindings.append(('unique_name',
- hashlib.md5(outputs[0]).hexdigest()))
- self.ninja.build(outputs, rule_name, self.GypPathToNinja(source),
- implicit=inputs,
- order_only=prebuild,
- variables=extra_bindings)
-
- all_outputs.extend(outputs)
-
- return all_outputs
-
- def WriteCopies(self, copies, prebuild, mac_bundle_depends):
- outputs = []
- env = self.GetToolchainEnv()
- for copy in copies:
- for path in copy['files']:
- # Normalize the path so trailing slashes don't confuse us.
- path = os.path.normpath(path)
- basename = os.path.split(path)[1]
- src = self.GypPathToNinja(path, env)
- dst = self.GypPathToNinja(os.path.join(copy['destination'], basename),
- env)
- outputs += self.ninja.build(dst, 'copy', src, order_only=prebuild)
- if self.is_mac_bundle:
- # gyp has mac_bundle_resources to copy things into a bundle's
- # Resources folder, but there's no built-in way to copy files to other
- # places in the bundle. Hence, some targets use copies for this. Check
- # if this file is copied into the current bundle, and if so add it to
- # the bundle depends so that dependent targets get rebuilt if the copy
- # input changes.
- if dst.startswith(self.xcode_settings.GetBundleContentsFolderPath()):
- mac_bundle_depends.append(dst)
-
- return outputs
-
- def WriteMacBundleResources(self, resources, bundle_depends):
- """Writes ninja edges for 'mac_bundle_resources'."""
- xcassets = []
- for output, res in gyp.xcode_emulation.GetMacBundleResources(
- generator_default_variables['PRODUCT_DIR'],
- self.xcode_settings, map(self.GypPathToNinja, resources)):
- output = self.ExpandSpecial(output)
- if os.path.splitext(output)[-1] != '.xcassets':
- isBinary = self.xcode_settings.IsBinaryOutputFormat(self.config_name)
- self.ninja.build(output, 'mac_tool', res,
- variables=[('mactool_cmd', 'copy-bundle-resource'), \
- ('binary', isBinary)])
- bundle_depends.append(output)
- else:
- xcassets.append(res)
- return xcassets
-
- def WriteMacXCassets(self, xcassets, bundle_depends):
- """Writes ninja edges for 'mac_bundle_resources' .xcassets files.
-
- This add an invocation of 'actool' via the 'mac_tool.py' helper script.
- It assumes that the assets catalogs define at least one imageset and
- thus an Assets.car file will be generated in the application resources
- directory. If this is not the case, then the build will probably be done
- at each invocation of ninja."""
- if not xcassets:
- return
-
- extra_arguments = {}
- settings_to_arg = {
- 'XCASSETS_APP_ICON': 'app-icon',
- 'XCASSETS_LAUNCH_IMAGE': 'launch-image',
- }
- settings = self.xcode_settings.xcode_settings[self.config_name]
- for settings_key, arg_name in settings_to_arg.iteritems():
- value = settings.get(settings_key)
- if value:
- extra_arguments[arg_name] = value
-
- partial_info_plist = None
- if extra_arguments:
- partial_info_plist = self.GypPathToUniqueOutput(
- 'assetcatalog_generated_info.plist')
- extra_arguments['output-partial-info-plist'] = partial_info_plist
-
- outputs = []
- outputs.append(
- os.path.join(
- self.xcode_settings.GetBundleResourceFolder(),
- 'Assets.car'))
- if partial_info_plist:
- outputs.append(partial_info_plist)
-
- keys = QuoteShellArgument(json.dumps(extra_arguments), self.flavor)
- extra_env = self.xcode_settings.GetPerTargetSettings()
- env = self.GetSortedXcodeEnv(additional_settings=extra_env)
- env = self.ComputeExportEnvString(env)
-
- bundle_depends.extend(self.ninja.build(
- outputs, 'compile_xcassets', xcassets,
- variables=[('env', env), ('keys', keys)]))
- return partial_info_plist
-
- def WriteMacInfoPlist(self, partial_info_plist, bundle_depends):
- """Write build rules for bundle Info.plist files."""
- info_plist, out, defines, extra_env = gyp.xcode_emulation.GetMacInfoPlist(
- generator_default_variables['PRODUCT_DIR'],
- self.xcode_settings, self.GypPathToNinja)
- if not info_plist:
- return
- out = self.ExpandSpecial(out)
- if defines:
- # Create an intermediate file to store preprocessed results.
- intermediate_plist = self.GypPathToUniqueOutput(
- os.path.basename(info_plist))
- defines = ' '.join([Define(d, self.flavor) for d in defines])
- info_plist = self.ninja.build(
- intermediate_plist, 'preprocess_infoplist', info_plist,
- variables=[('defines',defines)])
-
- env = self.GetSortedXcodeEnv(additional_settings=extra_env)
- env = self.ComputeExportEnvString(env)
-
- if partial_info_plist:
- intermediate_plist = self.GypPathToUniqueOutput('merged_info.plist')
- info_plist = self.ninja.build(
- intermediate_plist, 'merge_infoplist',
- [partial_info_plist, info_plist])
-
- keys = self.xcode_settings.GetExtraPlistItems(self.config_name)
- keys = QuoteShellArgument(json.dumps(keys), self.flavor)
- isBinary = self.xcode_settings.IsBinaryOutputFormat(self.config_name)
- self.ninja.build(out, 'copy_infoplist', info_plist,
- variables=[('env', env), ('keys', keys),
- ('binary', isBinary)])
- bundle_depends.append(out)
-
- def WriteSources(self, ninja_file, config_name, config, sources, predepends,
- precompiled_header, spec):
- """Write build rules to compile all of |sources|."""
- if self.toolset == 'host':
- self.ninja.variable('ar', '$ar_host')
- self.ninja.variable('cc', '$cc_host')
- self.ninja.variable('cxx', '$cxx_host')
- self.ninja.variable('ld', '$ld_host')
- self.ninja.variable('ldxx', '$ldxx_host')
- self.ninja.variable('nm', '$nm_host')
- self.ninja.variable('readelf', '$readelf_host')
-
- if self.flavor != 'mac' or len(self.archs) == 1:
- return self.WriteSourcesForArch(
- self.ninja, config_name, config, sources, predepends,
- precompiled_header, spec)
- else:
- return dict((arch, self.WriteSourcesForArch(
- self.arch_subninjas[arch], config_name, config, sources, predepends,
- precompiled_header, spec, arch=arch))
- for arch in self.archs)
-
- def WriteSourcesForArch(self, ninja_file, config_name, config, sources,
- predepends, precompiled_header, spec, arch=None):
- """Write build rules to compile all of |sources|."""
-
- extra_defines = []
- if self.flavor == 'mac':
- cflags = self.xcode_settings.GetCflags(config_name, arch=arch)
- cflags_c = self.xcode_settings.GetCflagsC(config_name)
- cflags_cc = self.xcode_settings.GetCflagsCC(config_name)
- cflags_objc = ['$cflags_c'] + \
- self.xcode_settings.GetCflagsObjC(config_name)
- cflags_objcc = ['$cflags_cc'] + \
- self.xcode_settings.GetCflagsObjCC(config_name)
- elif self.flavor == 'win':
- asmflags = self.msvs_settings.GetAsmflags(config_name)
- cflags = self.msvs_settings.GetCflags(config_name)
- cflags_c = self.msvs_settings.GetCflagsC(config_name)
- cflags_cc = self.msvs_settings.GetCflagsCC(config_name)
- extra_defines = self.msvs_settings.GetComputedDefines(config_name)
- # See comment at cc_command for why there's two .pdb files.
- pdbpath_c = pdbpath_cc = self.msvs_settings.GetCompilerPdbName(
- config_name, self.ExpandSpecial)
- if not pdbpath_c:
- obj = 'obj'
- if self.toolset != 'target':
- obj += '.' + self.toolset
- pdbpath = os.path.normpath(os.path.join(obj, self.base_dir, self.name))
- pdbpath_c = pdbpath + '.c.pdb'
- pdbpath_cc = pdbpath + '.cc.pdb'
- self.WriteVariableList(ninja_file, 'pdbname_c', [pdbpath_c])
- self.WriteVariableList(ninja_file, 'pdbname_cc', [pdbpath_cc])
- self.WriteVariableList(ninja_file, 'pchprefix', [self.name])
- else:
- cflags = config.get('cflags', [])
- cflags_c = config.get('cflags_c', [])
- cflags_cc = config.get('cflags_cc', [])
-
- # Respect environment variables related to build, but target-specific
- # flags can still override them.
- if self.toolset == 'target':
- cflags_c = (os.environ.get('CPPFLAGS', '').split() +
- os.environ.get('CFLAGS', '').split() + cflags_c)
- cflags_cc = (os.environ.get('CPPFLAGS', '').split() +
- os.environ.get('CXXFLAGS', '').split() + cflags_cc)
- elif self.toolset == 'host':
- cflags_c = (os.environ.get('CPPFLAGS_host', '').split() +
- os.environ.get('CFLAGS_host', '').split() + cflags_c)
- cflags_cc = (os.environ.get('CPPFLAGS_host', '').split() +
- os.environ.get('CXXFLAGS_host', '').split() + cflags_cc)
-
- defines = config.get('defines', []) + extra_defines
- self.WriteVariableList(ninja_file, 'defines',
- [Define(d, self.flavor) for d in defines])
- if self.flavor == 'win':
- self.WriteVariableList(ninja_file, 'asmflags',
- map(self.ExpandSpecial, asmflags))
- self.WriteVariableList(ninja_file, 'rcflags',
- [QuoteShellArgument(self.ExpandSpecial(f), self.flavor)
- for f in self.msvs_settings.GetRcflags(config_name,
- self.GypPathToNinja)])
-
- include_dirs = config.get('include_dirs', [])
-
- env = self.GetToolchainEnv()
- if self.flavor == 'win':
- include_dirs = self.msvs_settings.AdjustIncludeDirs(include_dirs,
- config_name)
- self.WriteVariableList(ninja_file, 'includes',
- [QuoteShellArgument('-I' + self.GypPathToNinja(i, env), self.flavor)
- for i in include_dirs])
-
- if self.flavor == 'win':
- midl_include_dirs = config.get('midl_include_dirs', [])
- midl_include_dirs = self.msvs_settings.AdjustMidlIncludeDirs(
- midl_include_dirs, config_name)
- self.WriteVariableList(ninja_file, 'midl_includes',
- [QuoteShellArgument('-I' + self.GypPathToNinja(i, env), self.flavor)
- for i in midl_include_dirs])
-
- pch_commands = precompiled_header.GetPchBuildCommands(arch)
- if self.flavor == 'mac':
- # Most targets use no precompiled headers, so only write these if needed.
- for ext, var in [('c', 'cflags_pch_c'), ('cc', 'cflags_pch_cc'),
- ('m', 'cflags_pch_objc'), ('mm', 'cflags_pch_objcc')]:
- include = precompiled_header.GetInclude(ext, arch)
- if include: ninja_file.variable(var, include)
-
- arflags = config.get('arflags', [])
-
- self.WriteVariableList(ninja_file, 'cflags',
- map(self.ExpandSpecial, cflags))
- self.WriteVariableList(ninja_file, 'cflags_c',
- map(self.ExpandSpecial, cflags_c))
- self.WriteVariableList(ninja_file, 'cflags_cc',
- map(self.ExpandSpecial, cflags_cc))
- if self.flavor == 'mac':
- self.WriteVariableList(ninja_file, 'cflags_objc',
- map(self.ExpandSpecial, cflags_objc))
- self.WriteVariableList(ninja_file, 'cflags_objcc',
- map(self.ExpandSpecial, cflags_objcc))
- self.WriteVariableList(ninja_file, 'arflags',
- map(self.ExpandSpecial, arflags))
- ninja_file.newline()
- outputs = []
- has_rc_source = False
- for source in sources:
- filename, ext = os.path.splitext(source)
- ext = ext[1:]
- obj_ext = self.obj_ext
- if ext in ('cc', 'cpp', 'cxx'):
- command = 'cxx'
- self.uses_cpp = True
- elif ext == 'c' or (ext == 'S' and self.flavor != 'win'):
- command = 'cc'
- elif ext == 's' and self.flavor != 'win': # Doesn't generate .o.d files.
- command = 'cc_s'
- elif (self.flavor == 'win' and ext == 'asm' and
- not self.msvs_settings.HasExplicitAsmRules(spec)):
- command = 'asm'
- # Add the _asm suffix as msvs is capable of handling .cc and
- # .asm files of the same name without collision.
- obj_ext = '_asm.obj'
- elif self.flavor == 'mac' and ext == 'm':
- command = 'objc'
- elif self.flavor == 'mac' and ext == 'mm':
- command = 'objcxx'
- self.uses_cpp = True
- elif self.flavor == 'win' and ext == 'rc':
- command = 'rc'
- obj_ext = '.res'
- has_rc_source = True
- else:
- # Ignore unhandled extensions.
- continue
- input = self.GypPathToNinja(source)
- output = self.GypPathToUniqueOutput(filename + obj_ext)
- if arch is not None:
- output = AddArch(output, arch)
- implicit = precompiled_header.GetObjDependencies([input], [output], arch)
- variables = []
- if self.flavor == 'win':
- variables, output, implicit = precompiled_header.GetFlagsModifications(
- input, output, implicit, command, cflags_c, cflags_cc,
- self.ExpandSpecial)
- ninja_file.build(output, command, input,
- implicit=[gch for _, _, gch in implicit],
- order_only=predepends, variables=variables)
- outputs.append(output)
-
- if has_rc_source:
- resource_include_dirs = config.get('resource_include_dirs', include_dirs)
- self.WriteVariableList(ninja_file, 'resource_includes',
- [QuoteShellArgument('-I' + self.GypPathToNinja(i, env), self.flavor)
- for i in resource_include_dirs])
-
- self.WritePchTargets(ninja_file, pch_commands)
-
- ninja_file.newline()
- return outputs
-
- def WritePchTargets(self, ninja_file, pch_commands):
- """Writes ninja rules to compile prefix headers."""
- if not pch_commands:
- return
-
- for gch, lang_flag, lang, input in pch_commands:
- var_name = {
- 'c': 'cflags_pch_c',
- 'cc': 'cflags_pch_cc',
- 'm': 'cflags_pch_objc',
- 'mm': 'cflags_pch_objcc',
- }[lang]
-
- map = { 'c': 'cc', 'cc': 'cxx', 'm': 'objc', 'mm': 'objcxx', }
- cmd = map.get(lang)
- ninja_file.build(gch, cmd, input, variables=[(var_name, lang_flag)])
-
- def WriteLink(self, spec, config_name, config, link_deps):
- """Write out a link step. Fills out target.binary. """
- if self.flavor != 'mac' or len(self.archs) == 1:
- return self.WriteLinkForArch(
- self.ninja, spec, config_name, config, link_deps)
- else:
- output = self.ComputeOutput(spec)
- inputs = [self.WriteLinkForArch(self.arch_subninjas[arch], spec,
- config_name, config, link_deps[arch],
- arch=arch)
- for arch in self.archs]
- extra_bindings = []
- build_output = output
- if not self.is_mac_bundle:
- self.AppendPostbuildVariable(extra_bindings, spec, output, output)
-
- # TODO(yyanagisawa): more work needed to fix:
- # https://code.google.com/p/gyp/issues/detail?id=411
- if (spec['type'] in ('shared_library', 'loadable_module') and
- not self.is_mac_bundle):
- extra_bindings.append(('lib', output))
- self.ninja.build([output, output + '.TOC'], 'solipo', inputs,
- variables=extra_bindings)
- else:
- self.ninja.build(build_output, 'lipo', inputs, variables=extra_bindings)
- return output
-
- def WriteLinkForArch(self, ninja_file, spec, config_name, config,
- link_deps, arch=None):
- """Write out a link step. Fills out target.binary. """
- command = {
- 'executable': 'link',
- 'loadable_module': 'solink_module',
- 'shared_library': 'solink',
- }[spec['type']]
- command_suffix = ''
-
- implicit_deps = set()
- solibs = set()
- order_deps = set()
-
- if 'dependencies' in spec:
- # Two kinds of dependencies:
- # - Linkable dependencies (like a .a or a .so): add them to the link line.
- # - Non-linkable dependencies (like a rule that generates a file
- # and writes a stamp file): add them to implicit_deps
- extra_link_deps = set()
- for dep in spec['dependencies']:
- target = self.target_outputs.get(dep)
- if not target:
- continue
- linkable = target.Linkable()
- if linkable:
- new_deps = []
- if (self.flavor == 'win' and
- target.component_objs and
- self.msvs_settings.IsUseLibraryDependencyInputs(config_name)):
- new_deps = target.component_objs
- if target.compile_deps:
- order_deps.add(target.compile_deps)
- elif self.flavor == 'win' and target.import_lib:
- new_deps = [target.import_lib]
- elif target.UsesToc(self.flavor):
- solibs.add(target.binary)
- implicit_deps.add(target.binary + '.TOC')
- else:
- new_deps = [target.binary]
- for new_dep in new_deps:
- if new_dep not in extra_link_deps:
- extra_link_deps.add(new_dep)
- link_deps.append(new_dep)
-
- final_output = target.FinalOutput()
- if not linkable or final_output != target.binary:
- implicit_deps.add(final_output)
-
- extra_bindings = []
- if self.uses_cpp and self.flavor != 'win':
- extra_bindings.append(('ld', '$ldxx'))
-
- output = self.ComputeOutput(spec, arch)
- if arch is None and not self.is_mac_bundle:
- self.AppendPostbuildVariable(extra_bindings, spec, output, output)
-
- is_executable = spec['type'] == 'executable'
- # The ldflags config key is not used on mac or win. On those platforms
- # linker flags are set via xcode_settings and msvs_settings, respectively.
- env_ldflags = os.environ.get('LDFLAGS', '').split()
- if self.flavor == 'mac':
- ldflags = self.xcode_settings.GetLdflags(config_name,
- self.ExpandSpecial(generator_default_variables['PRODUCT_DIR']),
- self.GypPathToNinja, arch)
- ldflags = env_ldflags + ldflags
- elif self.flavor == 'win':
- manifest_base_name = self.GypPathToUniqueOutput(
- self.ComputeOutputFileName(spec))
- ldflags, intermediate_manifest, manifest_files = \
- self.msvs_settings.GetLdflags(config_name, self.GypPathToNinja,
- self.ExpandSpecial, manifest_base_name,
- output, is_executable,
- self.toplevel_build)
- ldflags = env_ldflags + ldflags
- self.WriteVariableList(ninja_file, 'manifests', manifest_files)
- implicit_deps = implicit_deps.union(manifest_files)
- if intermediate_manifest:
- self.WriteVariableList(
- ninja_file, 'intermediatemanifest', [intermediate_manifest])
- command_suffix = _GetWinLinkRuleNameSuffix(
- self.msvs_settings.IsEmbedManifest(config_name))
- def_file = self.msvs_settings.GetDefFile(self.GypPathToNinja)
- if def_file:
- implicit_deps.add(def_file)
- else:
- # Respect environment variables related to build, but target-specific
- # flags can still override them.
- ldflags = env_ldflags + config.get('ldflags', [])
- if is_executable and len(solibs):
- rpath = 'lib/'
- if self.toolset != 'target':
- rpath += self.toolset
- ldflags.append(r'-Wl,-rpath=\$$ORIGIN/%s' % rpath)
- ldflags.append('-Wl,-rpath-link=%s' % rpath)
- self.WriteVariableList(ninja_file, 'ldflags',
- map(self.ExpandSpecial, ldflags))
-
- library_dirs = config.get('library_dirs', [])
- if self.flavor == 'win':
- library_dirs = [self.msvs_settings.ConvertVSMacros(l, config_name)
- for l in library_dirs]
- library_dirs = ['/LIBPATH:' + QuoteShellArgument(self.GypPathToNinja(l),
- self.flavor)
- for l in library_dirs]
- else:
- library_dirs = [QuoteShellArgument('-L' + self.GypPathToNinja(l),
- self.flavor)
- for l in library_dirs]
-
- libraries = gyp.common.uniquer(map(self.ExpandSpecial,
- spec.get('libraries', [])))
- if self.flavor == 'mac':
- libraries = self.xcode_settings.AdjustLibraries(libraries, config_name)
- elif self.flavor == 'win':
- libraries = self.msvs_settings.AdjustLibraries(libraries)
-
- self.WriteVariableList(ninja_file, 'libs', library_dirs + libraries)
-
- linked_binary = output
-
- if command in ('solink', 'solink_module'):
- extra_bindings.append(('soname', os.path.split(output)[1]))
- extra_bindings.append(('lib',
- gyp.common.EncodePOSIXShellArgument(output)))
- if self.flavor != 'win':
- link_file_list = output
- if self.is_mac_bundle:
- # 'Dependency Framework.framework/Versions/A/Dependency Framework' ->
- # 'Dependency Framework.framework.rsp'
- link_file_list = self.xcode_settings.GetWrapperName()
- if arch:
- link_file_list += '.' + arch
- link_file_list += '.rsp'
- # If an rspfile contains spaces, ninja surrounds the filename with
- # quotes around it and then passes it to open(), creating a file with
- # quotes in its name (and when looking for the rsp file, the name
- # makes it through bash which strips the quotes) :-/
- link_file_list = link_file_list.replace(' ', '_')
- extra_bindings.append(
- ('link_file_list',
- gyp.common.EncodePOSIXShellArgument(link_file_list)))
- if self.flavor == 'win':
- extra_bindings.append(('binary', output))
- if ('/NOENTRY' not in ldflags and
- not self.msvs_settings.GetNoImportLibrary(config_name)):
- self.target.import_lib = output + '.lib'
- extra_bindings.append(('implibflag',
- '/IMPLIB:%s' % self.target.import_lib))
- pdbname = self.msvs_settings.GetPDBName(
- config_name, self.ExpandSpecial, output + '.pdb')
- output = [output, self.target.import_lib]
- if pdbname:
- output.append(pdbname)
- elif not self.is_mac_bundle:
- output = [output, output + '.TOC']
- else:
- command = command + '_notoc'
- elif self.flavor == 'win':
- extra_bindings.append(('binary', output))
- pdbname = self.msvs_settings.GetPDBName(
- config_name, self.ExpandSpecial, output + '.pdb')
- if pdbname:
- output = [output, pdbname]
-
-
- if len(solibs):
- extra_bindings.append(('solibs', gyp.common.EncodePOSIXShellList(solibs)))
-
- ninja_file.build(output, command + command_suffix, link_deps,
- implicit=list(implicit_deps),
- order_only=list(order_deps),
- variables=extra_bindings)
- return linked_binary
-
- def WriteTarget(self, spec, config_name, config, link_deps, compile_deps):
- extra_link_deps = any(self.target_outputs.get(dep).Linkable()
- for dep in spec.get('dependencies', [])
- if dep in self.target_outputs)
- if spec['type'] == 'none' or (not link_deps and not extra_link_deps):
- # TODO(evan): don't call this function for 'none' target types, as
- # it doesn't do anything, and we fake out a 'binary' with a stamp file.
- self.target.binary = compile_deps
- self.target.type = 'none'
- elif spec['type'] == 'static_library':
- self.target.binary = self.ComputeOutput(spec)
- if (self.flavor not in ('mac', 'openbsd', 'netbsd', 'win') and not
- self.is_standalone_static_library):
- self.ninja.build(self.target.binary, 'alink_thin', link_deps,
- order_only=compile_deps)
- else:
- variables = []
- if self.xcode_settings:
- libtool_flags = self.xcode_settings.GetLibtoolflags(config_name)
- if libtool_flags:
- variables.append(('libtool_flags', libtool_flags))
- if self.msvs_settings:
- libflags = self.msvs_settings.GetLibFlags(config_name,
- self.GypPathToNinja)
- variables.append(('libflags', libflags))
-
- if self.flavor != 'mac' or len(self.archs) == 1:
- self.AppendPostbuildVariable(variables, spec,
- self.target.binary, self.target.binary)
- self.ninja.build(self.target.binary, 'alink', link_deps,
- order_only=compile_deps, variables=variables)
- else:
- inputs = []
- for arch in self.archs:
- output = self.ComputeOutput(spec, arch)
- self.arch_subninjas[arch].build(output, 'alink', link_deps[arch],
- order_only=compile_deps,
- variables=variables)
- inputs.append(output)
- # TODO: It's not clear if libtool_flags should be passed to the alink
- # call that combines single-arch .a files into a fat .a file.
- self.AppendPostbuildVariable(variables, spec,
- self.target.binary, self.target.binary)
- self.ninja.build(self.target.binary, 'alink', inputs,
- # FIXME: test proving order_only=compile_deps isn't
- # needed.
- variables=variables)
- else:
- self.target.binary = self.WriteLink(spec, config_name, config, link_deps)
- return self.target.binary
-
- def WriteMacBundle(self, spec, mac_bundle_depends, is_empty):
- assert self.is_mac_bundle
- package_framework = spec['type'] in ('shared_library', 'loadable_module')
- output = self.ComputeMacBundleOutput()
- if is_empty:
- output += '.stamp'
- variables = []
- self.AppendPostbuildVariable(variables, spec, output, self.target.binary,
- is_command_start=not package_framework)
- if package_framework and not is_empty:
- variables.append(('version', self.xcode_settings.GetFrameworkVersion()))
- self.ninja.build(output, 'package_framework', mac_bundle_depends,
- variables=variables)
- else:
- self.ninja.build(output, 'stamp', mac_bundle_depends,
- variables=variables)
- self.target.bundle = output
- return output
-
- def GetToolchainEnv(self, additional_settings=None):
- """Returns the variables toolchain would set for build steps."""
- env = self.GetSortedXcodeEnv(additional_settings=additional_settings)
- if self.flavor == 'win':
- env = self.GetMsvsToolchainEnv(
- additional_settings=additional_settings)
- return env
-
- def GetMsvsToolchainEnv(self, additional_settings=None):
- """Returns the variables Visual Studio would set for build steps."""
- return self.msvs_settings.GetVSMacroEnv('$!PRODUCT_DIR',
- config=self.config_name)
-
- def GetSortedXcodeEnv(self, additional_settings=None):
- """Returns the variables Xcode would set for build steps."""
- assert self.abs_build_dir
- abs_build_dir = self.abs_build_dir
- return gyp.xcode_emulation.GetSortedXcodeEnv(
- self.xcode_settings, abs_build_dir,
- os.path.join(abs_build_dir, self.build_to_base), self.config_name,
- additional_settings)
-
- def GetSortedXcodePostbuildEnv(self):
- """Returns the variables Xcode would set for postbuild steps."""
- postbuild_settings = {}
- # CHROMIUM_STRIP_SAVE_FILE is a chromium-specific hack.
- # TODO(thakis): It would be nice to have some general mechanism instead.
- strip_save_file = self.xcode_settings.GetPerTargetSetting(
- 'CHROMIUM_STRIP_SAVE_FILE')
- if strip_save_file:
- postbuild_settings['CHROMIUM_STRIP_SAVE_FILE'] = strip_save_file
- return self.GetSortedXcodeEnv(additional_settings=postbuild_settings)
-
- def AppendPostbuildVariable(self, variables, spec, output, binary,
- is_command_start=False):
- """Adds a 'postbuild' variable if there is a postbuild for |output|."""
- postbuild = self.GetPostbuildCommand(spec, output, binary, is_command_start)
- if postbuild:
- variables.append(('postbuilds', postbuild))
-
- def GetPostbuildCommand(self, spec, output, output_binary, is_command_start):
- """Returns a shell command that runs all the postbuilds, and removes
- |output| if any of them fails. If |is_command_start| is False, then the
- returned string will start with ' && '."""
- if not self.xcode_settings or spec['type'] == 'none' or not output:
- return ''
- output = QuoteShellArgument(output, self.flavor)
- postbuilds = gyp.xcode_emulation.GetSpecPostbuildCommands(spec, quiet=True)
- if output_binary is not None:
- postbuilds = self.xcode_settings.AddImplicitPostbuilds(
- self.config_name,
- os.path.normpath(os.path.join(self.base_to_build, output)),
- QuoteShellArgument(
- os.path.normpath(os.path.join(self.base_to_build, output_binary)),
- self.flavor),
- postbuilds, quiet=True)
-
- if not postbuilds:
- return ''
- # Postbuilds expect to be run in the gyp file's directory, so insert an
- # implicit postbuild to cd to there.
- postbuilds.insert(0, gyp.common.EncodePOSIXShellList(
- ['cd', self.build_to_base]))
- env = self.ComputeExportEnvString(self.GetSortedXcodePostbuildEnv())
- # G will be non-null if any postbuild fails. Run all postbuilds in a
- # subshell.
- commands = env + ' (' + \
- ' && '.join([ninja_syntax.escape(command) for command in postbuilds])
- command_string = (commands + '); G=$$?; '
- # Remove the final output if any postbuild failed.
- '((exit $$G) || rm -rf %s) ' % output + '&& exit $$G)')
- if is_command_start:
- return '(' + command_string + ' && '
- else:
- return '$ && (' + command_string
-
- def ComputeExportEnvString(self, env):
- """Given an environment, returns a string looking like
- 'export FOO=foo; export BAR="${FOO} bar;'
- that exports |env| to the shell."""
- export_str = []
- for k, v in env:
- export_str.append('export %s=%s;' %
- (k, ninja_syntax.escape(gyp.common.EncodePOSIXShellArgument(v))))
- return ' '.join(export_str)
-
- def ComputeMacBundleOutput(self):
- """Return the 'output' (full output path) to a bundle output directory."""
- assert self.is_mac_bundle
- path = generator_default_variables['PRODUCT_DIR']
- return self.ExpandSpecial(
- os.path.join(path, self.xcode_settings.GetWrapperName()))
-
- def ComputeOutputFileName(self, spec, type=None):
- """Compute the filename of the final output for the current target."""
- if not type:
- type = spec['type']
-
- default_variables = copy.copy(generator_default_variables)
- CalculateVariables(default_variables, {'flavor': self.flavor})
-
- # Compute filename prefix: the product prefix, or a default for
- # the product type.
- DEFAULT_PREFIX = {
- 'loadable_module': default_variables['SHARED_LIB_PREFIX'],
- 'shared_library': default_variables['SHARED_LIB_PREFIX'],
- 'static_library': default_variables['STATIC_LIB_PREFIX'],
- 'executable': default_variables['EXECUTABLE_PREFIX'],
- }
- prefix = spec.get('product_prefix', DEFAULT_PREFIX.get(type, ''))
-
- # Compute filename extension: the product extension, or a default
- # for the product type.
- DEFAULT_EXTENSION = {
- 'loadable_module': default_variables['SHARED_LIB_SUFFIX'],
- 'shared_library': default_variables['SHARED_LIB_SUFFIX'],
- 'static_library': default_variables['STATIC_LIB_SUFFIX'],
- 'executable': default_variables['EXECUTABLE_SUFFIX'],
- }
- extension = spec.get('product_extension')
- if extension:
- extension = '.' + extension
- else:
- extension = DEFAULT_EXTENSION.get(type, '')
-
- if 'product_name' in spec:
- # If we were given an explicit name, use that.
- target = spec['product_name']
- else:
- # Otherwise, derive a name from the target name.
- target = spec['target_name']
- if prefix == 'lib':
- # Snip out an extra 'lib' from libs if appropriate.
- target = StripPrefix(target, 'lib')
-
- if type in ('static_library', 'loadable_module', 'shared_library',
- 'executable'):
- return '%s%s%s' % (prefix, target, extension)
- elif type == 'none':
- return '%s.stamp' % target
- else:
- raise Exception('Unhandled output type %s' % type)
-
- def ComputeOutput(self, spec, arch=None):
- """Compute the path for the final output of the spec."""
- type = spec['type']
-
- if self.flavor == 'win':
- override = self.msvs_settings.GetOutputName(self.config_name,
- self.ExpandSpecial)
- if override:
- return override
-
- if arch is None and self.flavor == 'mac' and type in (
- 'static_library', 'executable', 'shared_library', 'loadable_module'):
- filename = self.xcode_settings.GetExecutablePath()
- else:
- filename = self.ComputeOutputFileName(spec, type)
-
- if arch is None and 'product_dir' in spec:
- path = os.path.join(spec['product_dir'], filename)
- return self.ExpandSpecial(path)
-
- # Some products go into the output root, libraries go into shared library
- # dir, and everything else goes into the normal place.
- type_in_output_root = ['executable', 'loadable_module']
- if self.flavor == 'mac' and self.toolset == 'target':
- type_in_output_root += ['shared_library', 'static_library']
- elif self.flavor == 'win' and self.toolset == 'target':
- type_in_output_root += ['shared_library']
-
- if arch is not None:
- # Make sure partial executables don't end up in a bundle or the regular
- # output directory.
- archdir = 'arch'
- if self.toolset != 'target':
- archdir = os.path.join('arch', '%s' % self.toolset)
- return os.path.join(archdir, AddArch(filename, arch))
- elif type in type_in_output_root or self.is_standalone_static_library:
- return filename
- elif type == 'shared_library':
- libdir = 'lib'
- if self.toolset != 'target':
- libdir = os.path.join('lib', '%s' % self.toolset)
- return os.path.join(libdir, filename)
- else:
- return self.GypPathToUniqueOutput(filename, qualified=False)
-
- def WriteVariableList(self, ninja_file, var, values):
- assert not isinstance(values, str)
- if values is None:
- values = []
- ninja_file.variable(var, ' '.join(values))
-
- def WriteNewNinjaRule(self, name, args, description, is_cygwin, env, pool,
- depfile=None):
- """Write out a new ninja "rule" statement for a given command.
-
- Returns the name of the new rule, and a copy of |args| with variables
- expanded."""
-
- if self.flavor == 'win':
- args = [self.msvs_settings.ConvertVSMacros(
- arg, self.base_to_build, config=self.config_name)
- for arg in args]
- description = self.msvs_settings.ConvertVSMacros(
- description, config=self.config_name)
- elif self.flavor == 'mac':
- # |env| is an empty list on non-mac.
- args = [gyp.xcode_emulation.ExpandEnvVars(arg, env) for arg in args]
- description = gyp.xcode_emulation.ExpandEnvVars(description, env)
-
- # TODO: we shouldn't need to qualify names; we do it because
- # currently the ninja rule namespace is global, but it really
- # should be scoped to the subninja.
- rule_name = self.name
- if self.toolset == 'target':
- rule_name += '.' + self.toolset
- rule_name += '.' + name
- rule_name = re.sub('[^a-zA-Z0-9_]', '_', rule_name)
-
- # Remove variable references, but not if they refer to the magic rule
- # variables. This is not quite right, as it also protects these for
- # actions, not just for rules where they are valid. Good enough.
- protect = [ '${root}', '${dirname}', '${source}', '${ext}', '${name}' ]
- protect = '(?!' + '|'.join(map(re.escape, protect)) + ')'
- description = re.sub(protect + r'\$', '_', description)
-
- # gyp dictates that commands are run from the base directory.
- # cd into the directory before running, and adjust paths in
- # the arguments to point to the proper locations.
- rspfile = None
- rspfile_content = None
- args = [self.ExpandSpecial(arg, self.base_to_build) for arg in args]
- if self.flavor == 'win':
- rspfile = rule_name + '.$unique_name.rsp'
- # The cygwin case handles this inside the bash sub-shell.
- run_in = '' if is_cygwin else ' ' + self.build_to_base
- if is_cygwin:
- rspfile_content = self.msvs_settings.BuildCygwinBashCommandLine(
- args, self.build_to_base)
- else:
- rspfile_content = gyp.msvs_emulation.EncodeRspFileList(args)
- command = ('%s gyp-win-tool action-wrapper $arch ' % sys.executable +
- rspfile + run_in)
- else:
- env = self.ComputeExportEnvString(env)
- command = gyp.common.EncodePOSIXShellList(args)
- command = 'cd %s; ' % self.build_to_base + env + command
-
- # GYP rules/actions express being no-ops by not touching their outputs.
- # Avoid executing downstream dependencies in this case by specifying
- # restat=1 to ninja.
- self.ninja.rule(rule_name, command, description, depfile=depfile,
- restat=True, pool=pool,
- rspfile=rspfile, rspfile_content=rspfile_content)
- self.ninja.newline()
-
- return rule_name, args
-
-
-def CalculateVariables(default_variables, params):
- """Calculate additional variables for use in the build (called by gyp)."""
- global generator_additional_non_configuration_keys
- global generator_additional_path_sections
- flavor = gyp.common.GetFlavor(params)
- if flavor == 'mac':
- default_variables.setdefault('OS', 'mac')
- default_variables.setdefault('SHARED_LIB_SUFFIX', '.dylib')
- default_variables.setdefault('SHARED_LIB_DIR',
- generator_default_variables['PRODUCT_DIR'])
- default_variables.setdefault('LIB_DIR',
- generator_default_variables['PRODUCT_DIR'])
-
- # Copy additional generator configuration data from Xcode, which is shared
- # by the Mac Ninja generator.
- import gyp.generator.xcode as xcode_generator
- generator_additional_non_configuration_keys = getattr(xcode_generator,
- 'generator_additional_non_configuration_keys', [])
- generator_additional_path_sections = getattr(xcode_generator,
- 'generator_additional_path_sections', [])
- global generator_extra_sources_for_rules
- generator_extra_sources_for_rules = getattr(xcode_generator,
- 'generator_extra_sources_for_rules', [])
- elif flavor == 'win':
- exts = gyp.MSVSUtil.TARGET_TYPE_EXT
- default_variables.setdefault('OS', 'win')
- default_variables['EXECUTABLE_SUFFIX'] = '.' + exts['executable']
- default_variables['STATIC_LIB_PREFIX'] = ''
- default_variables['STATIC_LIB_SUFFIX'] = '.' + exts['static_library']
- default_variables['SHARED_LIB_PREFIX'] = ''
- default_variables['SHARED_LIB_SUFFIX'] = '.' + exts['shared_library']
-
- # Copy additional generator configuration data from VS, which is shared
- # by the Windows Ninja generator.
- import gyp.generator.msvs as msvs_generator
- generator_additional_non_configuration_keys = getattr(msvs_generator,
- 'generator_additional_non_configuration_keys', [])
- generator_additional_path_sections = getattr(msvs_generator,
- 'generator_additional_path_sections', [])
-
- gyp.msvs_emulation.CalculateCommonVariables(default_variables, params)
- else:
- operating_system = flavor
- if flavor == 'android':
- operating_system = 'linux' # Keep this legacy behavior for now.
- default_variables.setdefault('OS', operating_system)
- default_variables.setdefault('SHARED_LIB_SUFFIX', '.so')
- default_variables.setdefault('SHARED_LIB_DIR',
- os.path.join('$!PRODUCT_DIR', 'lib'))
- default_variables.setdefault('LIB_DIR',
- os.path.join('$!PRODUCT_DIR', 'obj'))
-
-def ComputeOutputDir(params):
- """Returns the path from the toplevel_dir to the build output directory."""
- # generator_dir: relative path from pwd to where make puts build files.
- # Makes migrating from make to ninja easier, ninja doesn't put anything here.
- generator_dir = os.path.relpath(params['options'].generator_output or '.')
-
- # output_dir: relative path from generator_dir to the build directory.
- output_dir = params.get('generator_flags', {}).get('output_dir', 'out')
-
- # Relative path from source root to our output files. e.g. "out"
- return os.path.normpath(os.path.join(generator_dir, output_dir))
-
-
-def CalculateGeneratorInputInfo(params):
- """Called by __init__ to initialize generator values based on params."""
- # E.g. "out/gypfiles"
- toplevel = params['options'].toplevel_dir
- qualified_out_dir = os.path.normpath(os.path.join(
- toplevel, ComputeOutputDir(params), 'gypfiles'))
-
- global generator_filelist_paths
- generator_filelist_paths = {
- 'toplevel': toplevel,
- 'qualified_out_dir': qualified_out_dir,
- }
-
-
-def OpenOutput(path, mode='w'):
- """Open |path| for writing, creating directories if necessary."""
- gyp.common.EnsureDirExists(path)
- return open(path, mode)
-
-
-def CommandWithWrapper(cmd, wrappers, prog):
- wrapper = wrappers.get(cmd, '')
- if wrapper:
- return wrapper + ' ' + prog
- return prog
-
-
-def GetDefaultConcurrentLinks():
- """Returns a best-guess for a number of concurrent links."""
- pool_size = int(os.environ.get('GYP_LINK_CONCURRENCY', 0))
- if pool_size:
- return pool_size
-
- if sys.platform in ('win32', 'cygwin'):
- import ctypes
-
- class MEMORYSTATUSEX(ctypes.Structure):
- _fields_ = [
- ("dwLength", ctypes.c_ulong),
- ("dwMemoryLoad", ctypes.c_ulong),
- ("ullTotalPhys", ctypes.c_ulonglong),
- ("ullAvailPhys", ctypes.c_ulonglong),
- ("ullTotalPageFile", ctypes.c_ulonglong),
- ("ullAvailPageFile", ctypes.c_ulonglong),
- ("ullTotalVirtual", ctypes.c_ulonglong),
- ("ullAvailVirtual", ctypes.c_ulonglong),
- ("sullAvailExtendedVirtual", ctypes.c_ulonglong),
- ]
-
- stat = MEMORYSTATUSEX()
- stat.dwLength = ctypes.sizeof(stat)
- ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(stat))
-
- # VS 2015 uses 20% more working set than VS 2013 and can consume all RAM
- # on a 64 GB machine.
- mem_limit = max(1, stat.ullTotalPhys / (5 * (2 ** 30))) # total / 5GB
- hard_cap = max(1, int(os.environ.get('GYP_LINK_CONCURRENCY_MAX', 2**32)))
- return min(mem_limit, hard_cap)
- elif sys.platform.startswith('linux'):
- if os.path.exists("/proc/meminfo"):
- with open("/proc/meminfo") as meminfo:
- memtotal_re = re.compile(r'^MemTotal:\s*(\d*)\s*kB')
- for line in meminfo:
- match = memtotal_re.match(line)
- if not match:
- continue
- # Allow 8Gb per link on Linux because Gold is quite memory hungry
- return max(1, int(match.group(1)) / (8 * (2 ** 20)))
- return 1
- elif sys.platform == 'darwin':
- try:
- avail_bytes = int(subprocess.check_output(['sysctl', '-n', 'hw.memsize']))
- # A static library debug build of Chromium's unit_tests takes ~2.7GB, so
- # 4GB per ld process allows for some more bloat.
- return max(1, avail_bytes / (4 * (2 ** 30))) # total / 4GB
- except:
- return 1
- else:
- # TODO(scottmg): Implement this for other platforms.
- return 1
-
-
-def _GetWinLinkRuleNameSuffix(embed_manifest):
- """Returns the suffix used to select an appropriate linking rule depending on
- whether the manifest embedding is enabled."""
- return '_embed' if embed_manifest else ''
-
-
-def _AddWinLinkRules(master_ninja, embed_manifest):
- """Adds link rules for Windows platform to |master_ninja|."""
- def FullLinkCommand(ldcmd, out, binary_type):
- resource_name = {
- 'exe': '1',
- 'dll': '2',
- }[binary_type]
- return '%(python)s gyp-win-tool link-with-manifests $arch %(embed)s ' \
- '%(out)s "%(ldcmd)s" %(resname)s $mt $rc "$intermediatemanifest" ' \
- '$manifests' % {
- 'python': sys.executable,
- 'out': out,
- 'ldcmd': ldcmd,
- 'resname': resource_name,
- 'embed': embed_manifest }
- rule_name_suffix = _GetWinLinkRuleNameSuffix(embed_manifest)
- use_separate_mspdbsrv = (
- int(os.environ.get('GYP_USE_SEPARATE_MSPDBSRV', '0')) != 0)
- dlldesc = 'LINK%s(DLL) $binary' % rule_name_suffix.upper()
- dllcmd = ('%s gyp-win-tool link-wrapper $arch %s '
- '$ld /nologo $implibflag /DLL /OUT:$binary '
- '@$binary.rsp' % (sys.executable, use_separate_mspdbsrv))
- dllcmd = FullLinkCommand(dllcmd, '$binary', 'dll')
- master_ninja.rule('solink' + rule_name_suffix,
- description=dlldesc, command=dllcmd,
- rspfile='$binary.rsp',
- rspfile_content='$libs $in_newline $ldflags',
- restat=True,
- pool='link_pool')
- master_ninja.rule('solink_module' + rule_name_suffix,
- description=dlldesc, command=dllcmd,
- rspfile='$binary.rsp',
- rspfile_content='$libs $in_newline $ldflags',
- restat=True,
- pool='link_pool')
- # Note that ldflags goes at the end so that it has the option of
- # overriding default settings earlier in the command line.
- exe_cmd = ('%s gyp-win-tool link-wrapper $arch %s '
- '$ld /nologo /OUT:$binary @$binary.rsp' %
- (sys.executable, use_separate_mspdbsrv))
- exe_cmd = FullLinkCommand(exe_cmd, '$binary', 'exe')
- master_ninja.rule('link' + rule_name_suffix,
- description='LINK%s $binary' % rule_name_suffix.upper(),
- command=exe_cmd,
- rspfile='$binary.rsp',
- rspfile_content='$in_newline $libs $ldflags',
- pool='link_pool')
-
-
-def GenerateOutputForConfig(target_list, target_dicts, data, params,
- config_name):
- options = params['options']
- flavor = gyp.common.GetFlavor(params)
- generator_flags = params.get('generator_flags', {})
-
- # build_dir: relative path from source root to our output files.
- # e.g. "out/Debug"
- build_dir = os.path.normpath(
- os.path.join(ComputeOutputDir(params), config_name))
-
- toplevel_build = os.path.join(options.toplevel_dir, build_dir)
-
- master_ninja_file = OpenOutput(os.path.join(toplevel_build, 'build.ninja'))
- master_ninja = ninja_syntax.Writer(master_ninja_file, width=120)
-
- # Put build-time support tools in out/{config_name}.
- gyp.common.CopyTool(flavor, toplevel_build)
-
- # Grab make settings for CC/CXX.
- # The rules are
- # - The priority from low to high is gcc/g++, the 'make_global_settings' in
- # gyp, the environment variable.
- # - If there is no 'make_global_settings' for CC.host/CXX.host or
- # 'CC_host'/'CXX_host' enviroment variable, cc_host/cxx_host should be set
- # to cc/cxx.
- if flavor == 'win':
- ar = 'lib.exe'
- # cc and cxx must be set to the correct architecture by overriding with one
- # of cl_x86 or cl_x64 below.
- cc = 'UNSET'
- cxx = 'UNSET'
- ld = 'link.exe'
- ld_host = '$ld'
- else:
- ar = 'ar'
- cc = 'cc'
- cxx = 'c++'
- ld = '$cc'
- ldxx = '$cxx'
- ld_host = '$cc_host'
- ldxx_host = '$cxx_host'
-
- ar_host = 'ar'
- cc_host = None
- cxx_host = None
- cc_host_global_setting = None
- cxx_host_global_setting = None
- clang_cl = None
- nm = 'nm'
- nm_host = 'nm'
- readelf = 'readelf'
- readelf_host = 'readelf'
-
- build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0])
- make_global_settings = data[build_file].get('make_global_settings', [])
- build_to_root = gyp.common.InvertRelativePath(build_dir,
- options.toplevel_dir)
- wrappers = {}
- for key, value in make_global_settings:
- if key == 'AR':
- ar = os.path.join(build_to_root, value)
- if key == 'AR.host':
- ar_host = os.path.join(build_to_root, value)
- if key == 'CC':
- cc = os.path.join(build_to_root, value)
- if cc.endswith('clang-cl'):
- clang_cl = cc
- if key == 'CXX':
- cxx = os.path.join(build_to_root, value)
- if key == 'CC.host':
- cc_host = os.path.join(build_to_root, value)
- cc_host_global_setting = value
- if key == 'CXX.host':
- cxx_host = os.path.join(build_to_root, value)
- cxx_host_global_setting = value
- if key == 'LD':
- ld = os.path.join(build_to_root, value)
- if key == 'LD.host':
- ld_host = os.path.join(build_to_root, value)
- if key == 'LDXX':
- ldxx = os.path.join(build_to_root, value)
- if key == 'LDXX.host':
- ldxx_host = os.path.join(build_to_root, value)
- if key == 'NM':
- nm = os.path.join(build_to_root, value)
- if key == 'NM.host':
- nm_host = os.path.join(build_to_root, value)
- if key == 'READELF':
- readelf = os.path.join(build_to_root, value)
- if key == 'READELF.host':
- readelf_host = os.path.join(build_to_root, value)
- if key.endswith('_wrapper'):
- wrappers[key[:-len('_wrapper')]] = os.path.join(build_to_root, value)
-
- # Support wrappers from environment variables too.
- for key, value in os.environ.iteritems():
- if key.lower().endswith('_wrapper'):
- key_prefix = key[:-len('_wrapper')]
- key_prefix = re.sub(r'\.HOST$', '.host', key_prefix)
- wrappers[key_prefix] = os.path.join(build_to_root, value)
-
- if flavor == 'win':
- configs = [target_dicts[qualified_target]['configurations'][config_name]
- for qualified_target in target_list]
- shared_system_includes = None
- if not generator_flags.get('ninja_use_custom_environment_files', 0):
- shared_system_includes = \
- gyp.msvs_emulation.ExtractSharedMSVSSystemIncludes(
- configs, generator_flags)
- cl_paths = gyp.msvs_emulation.GenerateEnvironmentFiles(
- toplevel_build, generator_flags, shared_system_includes, OpenOutput)
- for arch, path in cl_paths.iteritems():
- if clang_cl:
- # If we have selected clang-cl, use that instead.
- path = clang_cl
- command = CommandWithWrapper('CC', wrappers,
- QuoteShellArgument(path, 'win'))
- if clang_cl:
- # Use clang-cl to cross-compile for x86 or x86_64.
- command += (' -m32' if arch == 'x86' else ' -m64')
- master_ninja.variable('cl_' + arch, command)
-
- cc = GetEnvironFallback(['CC_target', 'CC'], cc)
- master_ninja.variable('cc', CommandWithWrapper('CC', wrappers, cc))
- cxx = GetEnvironFallback(['CXX_target', 'CXX'], cxx)
- master_ninja.variable('cxx', CommandWithWrapper('CXX', wrappers, cxx))
-
- if flavor == 'win':
- master_ninja.variable('ld', ld)
- master_ninja.variable('idl', 'midl.exe')
- master_ninja.variable('ar', ar)
- master_ninja.variable('rc', 'rc.exe')
- master_ninja.variable('ml_x86', 'ml.exe')
- master_ninja.variable('ml_x64', 'ml64.exe')
- master_ninja.variable('mt', 'mt.exe')
- else:
- master_ninja.variable('ld', CommandWithWrapper('LINK', wrappers, ld))
- master_ninja.variable('ldxx', CommandWithWrapper('LINK', wrappers, ldxx))
- master_ninja.variable('ar', GetEnvironFallback(['AR_target', 'AR'], ar))
- if flavor != 'mac':
- # Mac does not use readelf/nm for .TOC generation, so avoiding polluting
- # the master ninja with extra unused variables.
- master_ninja.variable(
- 'nm', GetEnvironFallback(['NM_target', 'NM'], nm))
- master_ninja.variable(
- 'readelf', GetEnvironFallback(['READELF_target', 'READELF'], readelf))
-
- if generator_supports_multiple_toolsets:
- if not cc_host:
- cc_host = cc
- if not cxx_host:
- cxx_host = cxx
-
- master_ninja.variable('ar_host', GetEnvironFallback(['AR_host'], ar_host))
- master_ninja.variable('nm_host', GetEnvironFallback(['NM_host'], nm_host))
- master_ninja.variable('readelf_host',
- GetEnvironFallback(['READELF_host'], readelf_host))
- cc_host = GetEnvironFallback(['CC_host'], cc_host)
- cxx_host = GetEnvironFallback(['CXX_host'], cxx_host)
-
- # The environment variable could be used in 'make_global_settings', like
- # ['CC.host', '$(CC)'] or ['CXX.host', '$(CXX)'], transform them here.
- if '$(CC)' in cc_host and cc_host_global_setting:
- cc_host = cc_host_global_setting.replace('$(CC)', cc)
- if '$(CXX)' in cxx_host and cxx_host_global_setting:
- cxx_host = cxx_host_global_setting.replace('$(CXX)', cxx)
- master_ninja.variable('cc_host',
- CommandWithWrapper('CC.host', wrappers, cc_host))
- master_ninja.variable('cxx_host',
- CommandWithWrapper('CXX.host', wrappers, cxx_host))
- if flavor == 'win':
- master_ninja.variable('ld_host', ld_host)
- master_ninja.variable('ldxx_host', ldxx_host)
- else:
- master_ninja.variable('ld_host', CommandWithWrapper(
- 'LINK', wrappers, ld_host))
- master_ninja.variable('ldxx_host', CommandWithWrapper(
- 'LINK', wrappers, ldxx_host))
-
- master_ninja.newline()
-
- master_ninja.pool('link_pool', depth=GetDefaultConcurrentLinks())
- master_ninja.newline()
-
- deps = 'msvc' if flavor == 'win' else 'gcc'
-
- if flavor != 'win':
- master_ninja.rule(
- 'cc',
- description='CC $out',
- command=('$cc -MMD -MF $out.d $defines $includes $cflags $cflags_c '
- '$cflags_pch_c -c $in -o $out'),
- depfile='$out.d',
- deps=deps)
- master_ninja.rule(
- 'cc_s',
- description='CC $out',
- command=('$cc $defines $includes $cflags $cflags_c '
- '$cflags_pch_c -c $in -o $out'))
- master_ninja.rule(
- 'cxx',
- description='CXX $out',
- command=('$cxx -MMD -MF $out.d $defines $includes $cflags $cflags_cc '
- '$cflags_pch_cc -c $in -o $out'),
- depfile='$out.d',
- deps=deps)
- else:
- # TODO(scottmg) Separate pdb names is a test to see if it works around
- # http://crbug.com/142362. It seems there's a race between the creation of
- # the .pdb by the precompiled header step for .cc and the compilation of
- # .c files. This should be handled by mspdbsrv, but rarely errors out with
- # c1xx : fatal error C1033: cannot open program database
- # By making the rules target separate pdb files this might be avoided.
- cc_command = ('ninja -t msvc -e $arch ' +
- '-- '
- '$cc /nologo /showIncludes /FC '
- '@$out.rsp /c $in /Fo$out /Fd$pdbname_c ')
- cxx_command = ('ninja -t msvc -e $arch ' +
- '-- '
- '$cxx /nologo /showIncludes /FC '
- '@$out.rsp /c $in /Fo$out /Fd$pdbname_cc ')
- master_ninja.rule(
- 'cc',
- description='CC $out',
- command=cc_command,
- rspfile='$out.rsp',
- rspfile_content='$defines $includes $cflags $cflags_c',
- deps=deps)
- master_ninja.rule(
- 'cxx',
- description='CXX $out',
- command=cxx_command,
- rspfile='$out.rsp',
- rspfile_content='$defines $includes $cflags $cflags_cc',
- deps=deps)
- master_ninja.rule(
- 'idl',
- description='IDL $in',
- command=('%s gyp-win-tool midl-wrapper $arch $outdir '
- '$tlb $h $dlldata $iid $proxy $in '
- '$midl_includes $idlflags' % sys.executable))
- master_ninja.rule(
- 'rc',
- description='RC $in',
- # Note: $in must be last otherwise rc.exe complains.
- command=('%s gyp-win-tool rc-wrapper '
- '$arch $rc $defines $resource_includes $rcflags /fo$out $in' %
- sys.executable))
- master_ninja.rule(
- 'asm',
- description='ASM $out',
- command=('%s gyp-win-tool asm-wrapper '
- '$arch $asm $defines $includes $asmflags /c /Fo $out $in' %
- sys.executable))
-
- if flavor != 'mac' and flavor != 'win':
- master_ninja.rule(
- 'alink',
- description='AR $out',
- command='rm -f $out && $ar rcs $arflags $out $in')
- master_ninja.rule(
- 'alink_thin',
- description='AR $out',
- command='rm -f $out && $ar rcsT $arflags $out $in')
-
- # This allows targets that only need to depend on $lib's API to declare an
- # order-only dependency on $lib.TOC and avoid relinking such downstream
- # dependencies when $lib changes only in non-public ways.
- # The resulting string leaves an uninterpolated %{suffix} which
- # is used in the final substitution below.
- mtime_preserving_solink_base = (
- 'if [ ! -e $lib -o ! -e $lib.TOC ]; then '
- '%(solink)s && %(extract_toc)s > $lib.TOC; else '
- '%(solink)s && %(extract_toc)s > $lib.tmp && '
- 'if ! cmp -s $lib.tmp $lib.TOC; then mv $lib.tmp $lib.TOC ; '
- 'fi; fi'
- % { 'solink':
- '$ld -shared $ldflags -o $lib -Wl,-soname=$soname %(suffix)s',
- 'extract_toc':
- ('{ $readelf -d $lib | grep SONAME ; '
- '$nm -gD -f p $lib | cut -f1-2 -d\' \'; }')})
-
- master_ninja.rule(
- 'solink',
- description='SOLINK $lib',
- restat=True,
- command=mtime_preserving_solink_base % {'suffix': '@$link_file_list'},
- rspfile='$link_file_list',
- rspfile_content=
- '-Wl,--whole-archive $in $solibs -Wl,--no-whole-archive $libs',
- pool='link_pool')
- master_ninja.rule(
- 'solink_module',
- description='SOLINK(module) $lib',
- restat=True,
- command=mtime_preserving_solink_base % {'suffix': '@$link_file_list'},
- rspfile='$link_file_list',
- rspfile_content='-Wl,--start-group $in $solibs $libs -Wl,--end-group',
- pool='link_pool')
- master_ninja.rule(
- 'link',
- description='LINK $out',
- command=('$ld $ldflags -o $out '
- '-Wl,--start-group $in $solibs $libs -Wl,--end-group'),
- pool='link_pool')
- elif flavor == 'win':
- master_ninja.rule(
- 'alink',
- description='LIB $out',
- command=('%s gyp-win-tool link-wrapper $arch False '
- '$ar /nologo /ignore:4221 /OUT:$out @$out.rsp' %
- sys.executable),
- rspfile='$out.rsp',
- rspfile_content='$in_newline $libflags')
- _AddWinLinkRules(master_ninja, embed_manifest=True)
- _AddWinLinkRules(master_ninja, embed_manifest=False)
- else:
- master_ninja.rule(
- 'objc',
- description='OBJC $out',
- command=('$cc -MMD -MF $out.d $defines $includes $cflags $cflags_objc '
- '$cflags_pch_objc -c $in -o $out'),
- depfile='$out.d',
- deps=deps)
- master_ninja.rule(
- 'objcxx',
- description='OBJCXX $out',
- command=('$cxx -MMD -MF $out.d $defines $includes $cflags $cflags_objcc '
- '$cflags_pch_objcc -c $in -o $out'),
- depfile='$out.d',
- deps=deps)
- master_ninja.rule(
- 'alink',
- description='LIBTOOL-STATIC $out, POSTBUILDS',
- command='rm -f $out && '
- './gyp-mac-tool filter-libtool libtool $libtool_flags '
- '-static -o $out $in'
- '$postbuilds')
- master_ninja.rule(
- 'lipo',
- description='LIPO $out, POSTBUILDS',
- command='rm -f $out && lipo -create $in -output $out$postbuilds')
- master_ninja.rule(
- 'solipo',
- description='SOLIPO $out, POSTBUILDS',
- command=(
- 'rm -f $lib $lib.TOC && lipo -create $in -output $lib$postbuilds &&'
- '%(extract_toc)s > $lib.TOC'
- % { 'extract_toc':
- '{ otool -l $lib | grep LC_ID_DYLIB -A 5; '
- 'nm -gP $lib | cut -f1-2 -d\' \' | grep -v U$$; true; }'}))
-
-
- # Record the public interface of $lib in $lib.TOC. See the corresponding
- # comment in the posix section above for details.
- solink_base = '$ld %(type)s $ldflags -o $lib %(suffix)s'
- mtime_preserving_solink_base = (
- 'if [ ! -e $lib -o ! -e $lib.TOC ] || '
- # Always force dependent targets to relink if this library
- # reexports something. Handling this correctly would require
- # recursive TOC dumping but this is rare in practice, so punt.
- 'otool -l $lib | grep -q LC_REEXPORT_DYLIB ; then '
- '%(solink)s && %(extract_toc)s > $lib.TOC; '
- 'else '
- '%(solink)s && %(extract_toc)s > $lib.tmp && '
- 'if ! cmp -s $lib.tmp $lib.TOC; then '
- 'mv $lib.tmp $lib.TOC ; '
- 'fi; '
- 'fi'
- % { 'solink': solink_base,
- 'extract_toc':
- '{ otool -l $lib | grep LC_ID_DYLIB -A 5; '
- 'nm -gP $lib | cut -f1-2 -d\' \' | grep -v U$$; true; }'})
-
-
- solink_suffix = '@$link_file_list$postbuilds'
- master_ninja.rule(
- 'solink',
- description='SOLINK $lib, POSTBUILDS',
- restat=True,
- command=mtime_preserving_solink_base % {'suffix': solink_suffix,
- 'type': '-shared'},
- rspfile='$link_file_list',
- rspfile_content='$in $solibs $libs',
- pool='link_pool')
- master_ninja.rule(
- 'solink_notoc',
- description='SOLINK $lib, POSTBUILDS',
- restat=True,
- command=solink_base % {'suffix':solink_suffix, 'type': '-shared'},
- rspfile='$link_file_list',
- rspfile_content='$in $solibs $libs',
- pool='link_pool')
-
- master_ninja.rule(
- 'solink_module',
- description='SOLINK(module) $lib, POSTBUILDS',
- restat=True,
- command=mtime_preserving_solink_base % {'suffix': solink_suffix,
- 'type': '-bundle'},
- rspfile='$link_file_list',
- rspfile_content='$in $solibs $libs',
- pool='link_pool')
- master_ninja.rule(
- 'solink_module_notoc',
- description='SOLINK(module) $lib, POSTBUILDS',
- restat=True,
- command=solink_base % {'suffix': solink_suffix, 'type': '-bundle'},
- rspfile='$link_file_list',
- rspfile_content='$in $solibs $libs',
- pool='link_pool')
-
- master_ninja.rule(
- 'link',
- description='LINK $out, POSTBUILDS',
- command=('$ld $ldflags -o $out '
- '$in $solibs $libs$postbuilds'),
- pool='link_pool')
- master_ninja.rule(
- 'preprocess_infoplist',
- description='PREPROCESS INFOPLIST $out',
- command=('$cc -E -P -Wno-trigraphs -x c $defines $in -o $out && '
- 'plutil -convert xml1 $out $out'))
- master_ninja.rule(
- 'copy_infoplist',
- description='COPY INFOPLIST $in',
- command='$env ./gyp-mac-tool copy-info-plist $in $out $binary $keys')
- master_ninja.rule(
- 'merge_infoplist',
- description='MERGE INFOPLISTS $in',
- command='$env ./gyp-mac-tool merge-info-plist $out $in')
- master_ninja.rule(
- 'compile_xcassets',
- description='COMPILE XCASSETS $in',
- command='$env ./gyp-mac-tool compile-xcassets $keys $in')
- master_ninja.rule(
- 'mac_tool',
- description='MACTOOL $mactool_cmd $in',
- command='$env ./gyp-mac-tool $mactool_cmd $in $out $binary')
- master_ninja.rule(
- 'package_framework',
- description='PACKAGE FRAMEWORK $out, POSTBUILDS',
- command='./gyp-mac-tool package-framework $out $version$postbuilds '
- '&& touch $out')
- if flavor == 'win':
- master_ninja.rule(
- 'stamp',
- description='STAMP $out',
- command='%s gyp-win-tool stamp $out' % sys.executable)
- else:
- master_ninja.rule(
- 'stamp',
- description='STAMP $out',
- command='${postbuilds}touch $out')
- if flavor == 'win':
- master_ninja.rule(
- 'copy',
- description='COPY $in $out',
- command='%s gyp-win-tool recursive-mirror $in $out' % sys.executable)
- elif flavor == 'zos':
- master_ninja.rule(
- 'copy',
- description='COPY $in $out',
- command='rm -rf $out && cp -fRP $in $out')
- else:
- master_ninja.rule(
- 'copy',
- description='COPY $in $out',
- command='rm -rf $out && cp -af $in $out')
- master_ninja.newline()
-
- all_targets = set()
- for build_file in params['build_files']:
- for target in gyp.common.AllTargets(target_list,
- target_dicts,
- os.path.normpath(build_file)):
- all_targets.add(target)
- all_outputs = set()
-
- # target_outputs is a map from qualified target name to a Target object.
- target_outputs = {}
- # target_short_names is a map from target short name to a list of Target
- # objects.
- target_short_names = {}
-
- # short name of targets that were skipped because they didn't contain anything
- # interesting.
- # NOTE: there may be overlap between this an non_empty_target_names.
- empty_target_names = set()
-
- # Set of non-empty short target names.
- # NOTE: there may be overlap between this an empty_target_names.
- non_empty_target_names = set()
-
- for qualified_target in target_list:
- # qualified_target is like: third_party/icu/icu.gyp:icui18n#target
- build_file, name, toolset = \
- gyp.common.ParseQualifiedTarget(qualified_target)
-
- this_make_global_settings = data[build_file].get('make_global_settings', [])
- assert make_global_settings == this_make_global_settings, (
- "make_global_settings needs to be the same for all targets. %s vs. %s" %
- (this_make_global_settings, make_global_settings))
-
- spec = target_dicts[qualified_target]
- if flavor == 'mac':
- gyp.xcode_emulation.MergeGlobalXcodeSettingsToSpec(data[build_file], spec)
-
- # If build_file is a symlink, we must not follow it because there's a chance
- # it could point to a path above toplevel_dir, and we cannot correctly deal
- # with that case at the moment.
- build_file = gyp.common.RelativePath(build_file, options.toplevel_dir,
- False)
-
- qualified_target_for_hash = gyp.common.QualifiedTarget(build_file, name,
- toolset)
- hash_for_rules = hashlib.md5(qualified_target_for_hash).hexdigest()
-
- base_path = os.path.dirname(build_file)
- obj = 'obj'
- if toolset != 'target':
- obj += '.' + toolset
- output_file = os.path.join(obj, base_path, name + '.ninja')
-
- ninja_output = StringIO()
- writer = NinjaWriter(hash_for_rules, target_outputs, base_path, build_dir,
- ninja_output,
- toplevel_build, output_file,
- flavor, toplevel_dir=options.toplevel_dir)
-
- target = writer.WriteSpec(spec, config_name, generator_flags)
-
- if ninja_output.tell() > 0:
- # Only create files for ninja files that actually have contents.
- with OpenOutput(os.path.join(toplevel_build, output_file)) as ninja_file:
- ninja_file.write(ninja_output.getvalue())
- ninja_output.close()
- master_ninja.subninja(output_file)
-
- if target:
- if name != target.FinalOutput() and spec['toolset'] == 'target':
- target_short_names.setdefault(name, []).append(target)
- target_outputs[qualified_target] = target
- if qualified_target in all_targets:
- all_outputs.add(target.FinalOutput())
- non_empty_target_names.add(name)
- else:
- empty_target_names.add(name)
-
- if target_short_names:
- # Write a short name to build this target. This benefits both the
- # "build chrome" case as well as the gyp tests, which expect to be
- # able to run actions and build libraries by their short name.
- master_ninja.newline()
- master_ninja.comment('Short names for targets.')
- for short_name in target_short_names:
- master_ninja.build(short_name, 'phony', [x.FinalOutput() for x in
- target_short_names[short_name]])
-
- # Write phony targets for any empty targets that weren't written yet. As
- # short names are not necessarily unique only do this for short names that
- # haven't already been output for another target.
- empty_target_names = empty_target_names - non_empty_target_names
- if empty_target_names:
- master_ninja.newline()
- master_ninja.comment('Empty targets (output for completeness).')
- for name in sorted(empty_target_names):
- master_ninja.build(name, 'phony')
-
- if all_outputs:
- master_ninja.newline()
- master_ninja.build('all', 'phony', list(all_outputs))
- master_ninja.default(generator_flags.get('default_target', 'all'))
-
- master_ninja_file.close()
-
-
-def PerformBuild(data, configurations, params):
- options = params['options']
- for config in configurations:
- builddir = os.path.join(options.toplevel_dir, 'out', config)
- arguments = ['ninja', '-C', builddir]
- print 'Building [%s]: %s' % (config, arguments)
- subprocess.check_call(arguments)
-
-
-def CallGenerateOutputForConfig(arglist):
- # Ignore the interrupt signal so that the parent process catches it and
- # kills all multiprocessing children.
- signal.signal(signal.SIGINT, signal.SIG_IGN)
-
- (target_list, target_dicts, data, params, config_name) = arglist
- GenerateOutputForConfig(target_list, target_dicts, data, params, config_name)
-
-
-def GenerateOutput(target_list, target_dicts, data, params):
- # Update target_dicts for iOS device builds.
- target_dicts = gyp.xcode_emulation.CloneConfigurationForDeviceAndEmulator(
- target_dicts)
-
- user_config = params.get('generator_flags', {}).get('config', None)
- if gyp.common.GetFlavor(params) == 'win':
- target_list, target_dicts = MSVSUtil.ShardTargets(target_list, target_dicts)
- target_list, target_dicts = MSVSUtil.InsertLargePdbShims(
- target_list, target_dicts, generator_default_variables)
-
- if user_config:
- GenerateOutputForConfig(target_list, target_dicts, data, params,
- user_config)
- else:
- config_names = target_dicts[target_list[0]]['configurations'].keys()
- if params['parallel']:
- try:
- pool = multiprocessing.Pool(len(config_names))
- arglists = []
- for config_name in config_names:
- arglists.append(
- (target_list, target_dicts, data, params, config_name))
- pool.map(CallGenerateOutputForConfig, arglists)
- except KeyboardInterrupt, e:
- pool.terminate()
- raise e
- else:
- for config_name in config_names:
- GenerateOutputForConfig(target_list, target_dicts, data, params,
- config_name)
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
deleted file mode 100644
index 1767b2f..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-""" Unit tests for the ninja.py file. """
-
-import gyp.generator.ninja as ninja
-import unittest
-import StringIO
-import sys
-import TestCommon
-
-
-class TestPrefixesAndSuffixes(unittest.TestCase):
- def test_BinaryNamesWindows(self):
- # These cannot run on non-Windows as they require a VS installation to
- # correctly handle variable expansion.
- if sys.platform.startswith('win'):
- writer = ninja.NinjaWriter('foo', 'wee', '.', '.', 'build.ninja', '.',
- 'build.ninja', 'win')
- spec = { 'target_name': 'wee' }
- self.assertTrue(writer.ComputeOutputFileName(spec, 'executable').
- endswith('.exe'))
- self.assertTrue(writer.ComputeOutputFileName(spec, 'shared_library').
- endswith('.dll'))
- self.assertTrue(writer.ComputeOutputFileName(spec, 'static_library').
- endswith('.lib'))
-
- def test_BinaryNamesLinux(self):
- writer = ninja.NinjaWriter('foo', 'wee', '.', '.', 'build.ninja', '.',
- 'build.ninja', 'linux')
- spec = { 'target_name': 'wee' }
- self.assertTrue('.' not in writer.ComputeOutputFileName(spec,
- 'executable'))
- self.assertTrue(writer.ComputeOutputFileName(spec, 'shared_library').
- startswith('lib'))
- self.assertTrue(writer.ComputeOutputFileName(spec, 'static_library').
- startswith('lib'))
- self.assertTrue(writer.ComputeOutputFileName(spec, 'shared_library').
- endswith('.so'))
- self.assertTrue(writer.ComputeOutputFileName(spec, 'static_library').
- endswith('.a'))
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
deleted file mode 100644
index 0e3fb93..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
+++ /dev/null
@@ -1,1300 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import filecmp
-import gyp.common
-import gyp.xcodeproj_file
-import gyp.xcode_ninja
-import errno
-import os
-import sys
-import posixpath
-import re
-import shutil
-import subprocess
-import tempfile
-
-
-# Project files generated by this module will use _intermediate_var as a
-# custom Xcode setting whose value is a DerivedSources-like directory that's
-# project-specific and configuration-specific. The normal choice,
-# DERIVED_FILE_DIR, is target-specific, which is thought to be too restrictive
-# as it is likely that multiple targets within a single project file will want
-# to access the same set of generated files. The other option,
-# PROJECT_DERIVED_FILE_DIR, is unsuitable because while it is project-specific,
-# it is not configuration-specific. INTERMEDIATE_DIR is defined as
-# $(PROJECT_DERIVED_FILE_DIR)/$(CONFIGURATION).
-_intermediate_var = 'INTERMEDIATE_DIR'
-
-# SHARED_INTERMEDIATE_DIR is the same, except that it is shared among all
-# targets that share the same BUILT_PRODUCTS_DIR.
-_shared_intermediate_var = 'SHARED_INTERMEDIATE_DIR'
-
-_library_search_paths_var = 'LIBRARY_SEARCH_PATHS'
-
-generator_default_variables = {
- 'EXECUTABLE_PREFIX': '',
- 'EXECUTABLE_SUFFIX': '',
- 'STATIC_LIB_PREFIX': 'lib',
- 'SHARED_LIB_PREFIX': 'lib',
- 'STATIC_LIB_SUFFIX': '.a',
- 'SHARED_LIB_SUFFIX': '.dylib',
- # INTERMEDIATE_DIR is a place for targets to build up intermediate products.
- # It is specific to each build environment. It is only guaranteed to exist
- # and be constant within the context of a project, corresponding to a single
- # input file. Some build environments may allow their intermediate directory
- # to be shared on a wider scale, but this is not guaranteed.
- 'INTERMEDIATE_DIR': '$(%s)' % _intermediate_var,
- 'OS': 'mac',
- 'PRODUCT_DIR': '$(BUILT_PRODUCTS_DIR)',
- 'LIB_DIR': '$(BUILT_PRODUCTS_DIR)',
- 'RULE_INPUT_ROOT': '$(INPUT_FILE_BASE)',
- 'RULE_INPUT_EXT': '$(INPUT_FILE_SUFFIX)',
- 'RULE_INPUT_NAME': '$(INPUT_FILE_NAME)',
- 'RULE_INPUT_PATH': '$(INPUT_FILE_PATH)',
- 'RULE_INPUT_DIRNAME': '$(INPUT_FILE_DIRNAME)',
- 'SHARED_INTERMEDIATE_DIR': '$(%s)' % _shared_intermediate_var,
- 'CONFIGURATION_NAME': '$(CONFIGURATION)',
-}
-
-# The Xcode-specific sections that hold paths.
-generator_additional_path_sections = [
- 'mac_bundle_resources',
- 'mac_framework_headers',
- 'mac_framework_private_headers',
- # 'mac_framework_dirs', input already handles _dirs endings.
-]
-
-# The Xcode-specific keys that exist on targets and aren't moved down to
-# configurations.
-generator_additional_non_configuration_keys = [
- 'ios_app_extension',
- 'ios_watch_app',
- 'ios_watchkit_extension',
- 'mac_bundle',
- 'mac_bundle_resources',
- 'mac_framework_headers',
- 'mac_framework_private_headers',
- 'mac_xctest_bundle',
- 'xcode_create_dependents_test_runner',
-]
-
-# We want to let any rules apply to files that are resources also.
-generator_extra_sources_for_rules = [
- 'mac_bundle_resources',
- 'mac_framework_headers',
- 'mac_framework_private_headers',
-]
-
-generator_filelist_paths = None
-
-# Xcode's standard set of library directories, which don't need to be duplicated
-# in LIBRARY_SEARCH_PATHS. This list is not exhaustive, but that's okay.
-xcode_standard_library_dirs = frozenset([
- '$(SDKROOT)/usr/lib',
- '$(SDKROOT)/usr/local/lib',
-])
-
-def CreateXCConfigurationList(configuration_names):
- xccl = gyp.xcodeproj_file.XCConfigurationList({'buildConfigurations': []})
- if len(configuration_names) == 0:
- configuration_names = ['Default']
- for configuration_name in configuration_names:
- xcbc = gyp.xcodeproj_file.XCBuildConfiguration({
- 'name': configuration_name})
- xccl.AppendProperty('buildConfigurations', xcbc)
- xccl.SetProperty('defaultConfigurationName', configuration_names[0])
- return xccl
-
-
-class XcodeProject(object):
- def __init__(self, gyp_path, path, build_file_dict):
- self.gyp_path = gyp_path
- self.path = path
- self.project = gyp.xcodeproj_file.PBXProject(path=path)
- projectDirPath = gyp.common.RelativePath(
- os.path.dirname(os.path.abspath(self.gyp_path)),
- os.path.dirname(path) or '.')
- self.project.SetProperty('projectDirPath', projectDirPath)
- self.project_file = \
- gyp.xcodeproj_file.XCProjectFile({'rootObject': self.project})
- self.build_file_dict = build_file_dict
-
- # TODO(mark): add destructor that cleans up self.path if created_dir is
- # True and things didn't complete successfully. Or do something even
- # better with "try"?
- self.created_dir = False
- try:
- os.makedirs(self.path)
- self.created_dir = True
- except OSError, e:
- if e.errno != errno.EEXIST:
- raise
-
- def Finalize1(self, xcode_targets, serialize_all_tests):
- # Collect a list of all of the build configuration names used by the
- # various targets in the file. It is very heavily advised to keep each
- # target in an entire project (even across multiple project files) using
- # the same set of configuration names.
- configurations = []
- for xct in self.project.GetProperty('targets'):
- xccl = xct.GetProperty('buildConfigurationList')
- xcbcs = xccl.GetProperty('buildConfigurations')
- for xcbc in xcbcs:
- name = xcbc.GetProperty('name')
- if name not in configurations:
- configurations.append(name)
-
- # Replace the XCConfigurationList attached to the PBXProject object with
- # a new one specifying all of the configuration names used by the various
- # targets.
- try:
- xccl = CreateXCConfigurationList(configurations)
- self.project.SetProperty('buildConfigurationList', xccl)
- except:
- sys.stderr.write("Problem with gyp file %s\n" % self.gyp_path)
- raise
-
- # The need for this setting is explained above where _intermediate_var is
- # defined. The comments below about wanting to avoid project-wide build
- # settings apply here too, but this needs to be set on a project-wide basis
- # so that files relative to the _intermediate_var setting can be displayed
- # properly in the Xcode UI.
- #
- # Note that for configuration-relative files such as anything relative to
- # _intermediate_var, for the purposes of UI tree view display, Xcode will
- # only resolve the configuration name once, when the project file is
- # opened. If the active build configuration is changed, the project file
- # must be closed and reopened if it is desired for the tree view to update.
- # This is filed as Apple radar 6588391.
- xccl.SetBuildSetting(_intermediate_var,
- '$(PROJECT_DERIVED_FILE_DIR)/$(CONFIGURATION)')
- xccl.SetBuildSetting(_shared_intermediate_var,
- '$(SYMROOT)/DerivedSources/$(CONFIGURATION)')
-
- # Set user-specified project-wide build settings and config files. This
- # is intended to be used very sparingly. Really, almost everything should
- # go into target-specific build settings sections. The project-wide
- # settings are only intended to be used in cases where Xcode attempts to
- # resolve variable references in a project context as opposed to a target
- # context, such as when resolving sourceTree references while building up
- # the tree tree view for UI display.
- # Any values set globally are applied to all configurations, then any
- # per-configuration values are applied.
- for xck, xcv in self.build_file_dict.get('xcode_settings', {}).iteritems():
- xccl.SetBuildSetting(xck, xcv)
- if 'xcode_config_file' in self.build_file_dict:
- config_ref = self.project.AddOrGetFileInRootGroup(
- self.build_file_dict['xcode_config_file'])
- xccl.SetBaseConfiguration(config_ref)
- build_file_configurations = self.build_file_dict.get('configurations', {})
- if build_file_configurations:
- for config_name in configurations:
- build_file_configuration_named = \
- build_file_configurations.get(config_name, {})
- if build_file_configuration_named:
- xcc = xccl.ConfigurationNamed(config_name)
- for xck, xcv in build_file_configuration_named.get('xcode_settings',
- {}).iteritems():
- xcc.SetBuildSetting(xck, xcv)
- if 'xcode_config_file' in build_file_configuration_named:
- config_ref = self.project.AddOrGetFileInRootGroup(
- build_file_configurations[config_name]['xcode_config_file'])
- xcc.SetBaseConfiguration(config_ref)
-
- # Sort the targets based on how they appeared in the input.
- # TODO(mark): Like a lot of other things here, this assumes internal
- # knowledge of PBXProject - in this case, of its "targets" property.
-
- # ordinary_targets are ordinary targets that are already in the project
- # file. run_test_targets are the targets that run unittests and should be
- # used for the Run All Tests target. support_targets are the action/rule
- # targets used by GYP file targets, just kept for the assert check.
- ordinary_targets = []
- run_test_targets = []
- support_targets = []
-
- # targets is full list of targets in the project.
- targets = []
-
- # does the it define it's own "all"?
- has_custom_all = False
-
- # targets_for_all is the list of ordinary_targets that should be listed
- # in this project's "All" target. It includes each non_runtest_target
- # that does not have suppress_wildcard set.
- targets_for_all = []
-
- for target in self.build_file_dict['targets']:
- target_name = target['target_name']
- toolset = target['toolset']
- qualified_target = gyp.common.QualifiedTarget(self.gyp_path, target_name,
- toolset)
- xcode_target = xcode_targets[qualified_target]
- # Make sure that the target being added to the sorted list is already in
- # the unsorted list.
- assert xcode_target in self.project._properties['targets']
- targets.append(xcode_target)
- ordinary_targets.append(xcode_target)
- if xcode_target.support_target:
- support_targets.append(xcode_target.support_target)
- targets.append(xcode_target.support_target)
-
- if not int(target.get('suppress_wildcard', False)):
- targets_for_all.append(xcode_target)
-
- if target_name.lower() == 'all':
- has_custom_all = True;
-
- # If this target has a 'run_as' attribute, add its target to the
- # targets, and add it to the test targets.
- if target.get('run_as'):
- # Make a target to run something. It should have one
- # dependency, the parent xcode target.
- xccl = CreateXCConfigurationList(configurations)
- run_target = gyp.xcodeproj_file.PBXAggregateTarget({
- 'name': 'Run ' + target_name,
- 'productName': xcode_target.GetProperty('productName'),
- 'buildConfigurationList': xccl,
- },
- parent=self.project)
- run_target.AddDependency(xcode_target)
-
- command = target['run_as']
- script = ''
- if command.get('working_directory'):
- script = script + 'cd "%s"\n' % \
- gyp.xcodeproj_file.ConvertVariablesToShellSyntax(
- command.get('working_directory'))
-
- if command.get('environment'):
- script = script + "\n".join(
- ['export %s="%s"' %
- (key, gyp.xcodeproj_file.ConvertVariablesToShellSyntax(val))
- for (key, val) in command.get('environment').iteritems()]) + "\n"
-
- # Some test end up using sockets, files on disk, etc. and can get
- # confused if more then one test runs at a time. The generator
- # flag 'xcode_serialize_all_test_runs' controls the forcing of all
- # tests serially. It defaults to True. To get serial runs this
- # little bit of python does the same as the linux flock utility to
- # make sure only one runs at a time.
- command_prefix = ''
- if serialize_all_tests:
- command_prefix = \
-"""python -c "import fcntl, subprocess, sys
-file = open('$TMPDIR/GYP_serialize_test_runs', 'a')
-fcntl.flock(file.fileno(), fcntl.LOCK_EX)
-sys.exit(subprocess.call(sys.argv[1:]))" """
-
- # If we were unable to exec for some reason, we want to exit
- # with an error, and fixup variable references to be shell
- # syntax instead of xcode syntax.
- script = script + 'exec ' + command_prefix + '%s\nexit 1\n' % \
- gyp.xcodeproj_file.ConvertVariablesToShellSyntax(
- gyp.common.EncodePOSIXShellList(command.get('action')))
-
- ssbp = gyp.xcodeproj_file.PBXShellScriptBuildPhase({
- 'shellScript': script,
- 'showEnvVarsInLog': 0,
- })
- run_target.AppendProperty('buildPhases', ssbp)
-
- # Add the run target to the project file.
- targets.append(run_target)
- run_test_targets.append(run_target)
- xcode_target.test_runner = run_target
-
-
- # Make sure that the list of targets being replaced is the same length as
- # the one replacing it, but allow for the added test runner targets.
- assert len(self.project._properties['targets']) == \
- len(ordinary_targets) + len(support_targets)
-
- self.project._properties['targets'] = targets
-
- # Get rid of unnecessary levels of depth in groups like the Source group.
- self.project.RootGroupsTakeOverOnlyChildren(True)
-
- # Sort the groups nicely. Do this after sorting the targets, because the
- # Products group is sorted based on the order of the targets.
- self.project.SortGroups()
-
- # Create an "All" target if there's more than one target in this project
- # file and the project didn't define its own "All" target. Put a generated
- # "All" target first so that people opening up the project for the first
- # time will build everything by default.
- if len(targets_for_all) > 1 and not has_custom_all:
- xccl = CreateXCConfigurationList(configurations)
- all_target = gyp.xcodeproj_file.PBXAggregateTarget(
- {
- 'buildConfigurationList': xccl,
- 'name': 'All',
- },
- parent=self.project)
-
- for target in targets_for_all:
- all_target.AddDependency(target)
-
- # TODO(mark): This is evil because it relies on internal knowledge of
- # PBXProject._properties. It's important to get the "All" target first,
- # though.
- self.project._properties['targets'].insert(0, all_target)
-
- # The same, but for run_test_targets.
- if len(run_test_targets) > 1:
- xccl = CreateXCConfigurationList(configurations)
- run_all_tests_target = gyp.xcodeproj_file.PBXAggregateTarget(
- {
- 'buildConfigurationList': xccl,
- 'name': 'Run All Tests',
- },
- parent=self.project)
- for run_test_target in run_test_targets:
- run_all_tests_target.AddDependency(run_test_target)
-
- # Insert after the "All" target, which must exist if there is more than
- # one run_test_target.
- self.project._properties['targets'].insert(1, run_all_tests_target)
-
- def Finalize2(self, xcode_targets, xcode_target_to_target_dict):
- # Finalize2 needs to happen in a separate step because the process of
- # updating references to other projects depends on the ordering of targets
- # within remote project files. Finalize1 is responsible for sorting duty,
- # and once all project files are sorted, Finalize2 can come in and update
- # these references.
-
- # To support making a "test runner" target that will run all the tests
- # that are direct dependents of any given target, we look for
- # xcode_create_dependents_test_runner being set on an Aggregate target,
- # and generate a second target that will run the tests runners found under
- # the marked target.
- for bf_tgt in self.build_file_dict['targets']:
- if int(bf_tgt.get('xcode_create_dependents_test_runner', 0)):
- tgt_name = bf_tgt['target_name']
- toolset = bf_tgt['toolset']
- qualified_target = gyp.common.QualifiedTarget(self.gyp_path,
- tgt_name, toolset)
- xcode_target = xcode_targets[qualified_target]
- if isinstance(xcode_target, gyp.xcodeproj_file.PBXAggregateTarget):
- # Collect all the run test targets.
- all_run_tests = []
- pbxtds = xcode_target.GetProperty('dependencies')
- for pbxtd in pbxtds:
- pbxcip = pbxtd.GetProperty('targetProxy')
- dependency_xct = pbxcip.GetProperty('remoteGlobalIDString')
- if hasattr(dependency_xct, 'test_runner'):
- all_run_tests.append(dependency_xct.test_runner)
-
- # Directly depend on all the runners as they depend on the target
- # that builds them.
- if len(all_run_tests) > 0:
- run_all_target = gyp.xcodeproj_file.PBXAggregateTarget({
- 'name': 'Run %s Tests' % tgt_name,
- 'productName': tgt_name,
- },
- parent=self.project)
- for run_test_target in all_run_tests:
- run_all_target.AddDependency(run_test_target)
-
- # Insert the test runner after the related target.
- idx = self.project._properties['targets'].index(xcode_target)
- self.project._properties['targets'].insert(idx + 1, run_all_target)
-
- # Update all references to other projects, to make sure that the lists of
- # remote products are complete. Otherwise, Xcode will fill them in when
- # it opens the project file, which will result in unnecessary diffs.
- # TODO(mark): This is evil because it relies on internal knowledge of
- # PBXProject._other_pbxprojects.
- for other_pbxproject in self.project._other_pbxprojects.keys():
- self.project.AddOrGetProjectReference(other_pbxproject)
-
- self.project.SortRemoteProductReferences()
-
- # Give everything an ID.
- self.project_file.ComputeIDs()
-
- # Make sure that no two objects in the project file have the same ID. If
- # multiple objects wind up with the same ID, upon loading the file, Xcode
- # will only recognize one object (the last one in the file?) and the
- # results are unpredictable.
- self.project_file.EnsureNoIDCollisions()
-
- def Write(self):
- # Write the project file to a temporary location first. Xcode watches for
- # changes to the project file and presents a UI sheet offering to reload
- # the project when it does change. However, in some cases, especially when
- # multiple projects are open or when Xcode is busy, things don't work so
- # seamlessly. Sometimes, Xcode is able to detect that a project file has
- # changed but can't unload it because something else is referencing it.
- # To mitigate this problem, and to avoid even having Xcode present the UI
- # sheet when an open project is rewritten for inconsequential changes, the
- # project file is written to a temporary file in the xcodeproj directory
- # first. The new temporary file is then compared to the existing project
- # file, if any. If they differ, the new file replaces the old; otherwise,
- # the new project file is simply deleted. Xcode properly detects a file
- # being renamed over an open project file as a change and so it remains
- # able to present the "project file changed" sheet under this system.
- # Writing to a temporary file first also avoids the possible problem of
- # Xcode rereading an incomplete project file.
- (output_fd, new_pbxproj_path) = \
- tempfile.mkstemp(suffix='.tmp', prefix='project.pbxproj.gyp.',
- dir=self.path)
-
- try:
- output_file = os.fdopen(output_fd, 'wb')
-
- self.project_file.Print(output_file)
- output_file.close()
-
- pbxproj_path = os.path.join(self.path, 'project.pbxproj')
-
- same = False
- try:
- same = filecmp.cmp(pbxproj_path, new_pbxproj_path, False)
- except OSError, e:
- if e.errno != errno.ENOENT:
- raise
-
- if same:
- # The new file is identical to the old one, just get rid of the new
- # one.
- os.unlink(new_pbxproj_path)
- else:
- # The new file is different from the old one, or there is no old one.
- # Rename the new file to the permanent name.
- #
- # tempfile.mkstemp uses an overly restrictive mode, resulting in a
- # file that can only be read by the owner, regardless of the umask.
- # There's no reason to not respect the umask here, which means that
- # an extra hoop is required to fetch it and reset the new file's mode.
- #
- # No way to get the umask without setting a new one? Set a safe one
- # and then set it back to the old value.
- umask = os.umask(077)
- os.umask(umask)
-
- os.chmod(new_pbxproj_path, 0666 & ~umask)
- os.rename(new_pbxproj_path, pbxproj_path)
-
- except Exception:
- # Don't leave turds behind. In fact, if this code was responsible for
- # creating the xcodeproj directory, get rid of that too.
- os.unlink(new_pbxproj_path)
- if self.created_dir:
- shutil.rmtree(self.path, True)
- raise
-
-
-def AddSourceToTarget(source, type, pbxp, xct):
- # TODO(mark): Perhaps source_extensions and library_extensions can be made a
- # little bit fancier.
- source_extensions = ['c', 'cc', 'cpp', 'cxx', 'm', 'mm', 's', 'swift']
-
- # .o is conceptually more of a "source" than a "library," but Xcode thinks
- # of "sources" as things to compile and "libraries" (or "frameworks") as
- # things to link with. Adding an object file to an Xcode target's frameworks
- # phase works properly.
- library_extensions = ['a', 'dylib', 'framework', 'o']
-
- basename = posixpath.basename(source)
- (root, ext) = posixpath.splitext(basename)
- if ext:
- ext = ext[1:].lower()
-
- if ext in source_extensions and type != 'none':
- xct.SourcesPhase().AddFile(source)
- elif ext in library_extensions and type != 'none':
- xct.FrameworksPhase().AddFile(source)
- else:
- # Files that aren't added to a sources or frameworks build phase can still
- # go into the project file, just not as part of a build phase.
- pbxp.AddOrGetFileInRootGroup(source)
-
-
-def AddResourceToTarget(resource, pbxp, xct):
- # TODO(mark): Combine with AddSourceToTarget above? Or just inline this call
- # where it's used.
- xct.ResourcesPhase().AddFile(resource)
-
-
-def AddHeaderToTarget(header, pbxp, xct, is_public):
- # TODO(mark): Combine with AddSourceToTarget above? Or just inline this call
- # where it's used.
- settings = '{ATTRIBUTES = (%s, ); }' % ('Private', 'Public')[is_public]
- xct.HeadersPhase().AddFile(header, settings)
-
-
-_xcode_variable_re = re.compile(r'(\$\((.*?)\))')
-def ExpandXcodeVariables(string, expansions):
- """Expands Xcode-style $(VARIABLES) in string per the expansions dict.
-
- In some rare cases, it is appropriate to expand Xcode variables when a
- project file is generated. For any substring $(VAR) in string, if VAR is a
- key in the expansions dict, $(VAR) will be replaced with expansions[VAR].
- Any $(VAR) substring in string for which VAR is not a key in the expansions
- dict will remain in the returned string.
- """
-
- matches = _xcode_variable_re.findall(string)
- if matches == None:
- return string
-
- matches.reverse()
- for match in matches:
- (to_replace, variable) = match
- if not variable in expansions:
- continue
-
- replacement = expansions[variable]
- string = re.sub(re.escape(to_replace), replacement, string)
-
- return string
-
-
-_xcode_define_re = re.compile(r'([\\\"\' ])')
-def EscapeXcodeDefine(s):
- """We must escape the defines that we give to XCode so that it knows not to
- split on spaces and to respect backslash and quote literals. However, we
- must not quote the define, or Xcode will incorrectly intepret variables
- especially $(inherited)."""
- return re.sub(_xcode_define_re, r'\\\1', s)
-
-
-def PerformBuild(data, configurations, params):
- options = params['options']
-
- for build_file, build_file_dict in data.iteritems():
- (build_file_root, build_file_ext) = os.path.splitext(build_file)
- if build_file_ext != '.gyp':
- continue
- xcodeproj_path = build_file_root + options.suffix + '.xcodeproj'
- if options.generator_output:
- xcodeproj_path = os.path.join(options.generator_output, xcodeproj_path)
-
- for config in configurations:
- arguments = ['xcodebuild', '-project', xcodeproj_path]
- arguments += ['-configuration', config]
- print "Building [%s]: %s" % (config, arguments)
- subprocess.check_call(arguments)
-
-
-def CalculateGeneratorInputInfo(params):
- toplevel = params['options'].toplevel_dir
- if params.get('flavor') == 'ninja':
- generator_dir = os.path.relpath(params['options'].generator_output or '.')
- output_dir = params.get('generator_flags', {}).get('output_dir', 'out')
- output_dir = os.path.normpath(os.path.join(generator_dir, output_dir))
- qualified_out_dir = os.path.normpath(os.path.join(
- toplevel, output_dir, 'gypfiles-xcode-ninja'))
- else:
- output_dir = os.path.normpath(os.path.join(toplevel, 'xcodebuild'))
- qualified_out_dir = os.path.normpath(os.path.join(
- toplevel, output_dir, 'gypfiles'))
-
- global generator_filelist_paths
- generator_filelist_paths = {
- 'toplevel': toplevel,
- 'qualified_out_dir': qualified_out_dir,
- }
-
-
-def GenerateOutput(target_list, target_dicts, data, params):
- # Optionally configure each spec to use ninja as the external builder.
- ninja_wrapper = params.get('flavor') == 'ninja'
- if ninja_wrapper:
- (target_list, target_dicts, data) = \
- gyp.xcode_ninja.CreateWrapper(target_list, target_dicts, data, params)
-
- options = params['options']
- generator_flags = params.get('generator_flags', {})
- parallel_builds = generator_flags.get('xcode_parallel_builds', True)
- serialize_all_tests = \
- generator_flags.get('xcode_serialize_all_test_runs', True)
- upgrade_check_project_version = \
- generator_flags.get('xcode_upgrade_check_project_version', None)
-
- # Format upgrade_check_project_version with leading zeros as needed.
- if upgrade_check_project_version:
- upgrade_check_project_version = str(upgrade_check_project_version)
- while len(upgrade_check_project_version) < 4:
- upgrade_check_project_version = '0' + upgrade_check_project_version
-
- skip_excluded_files = \
- not generator_flags.get('xcode_list_excluded_files', True)
- xcode_projects = {}
- for build_file, build_file_dict in data.iteritems():
- (build_file_root, build_file_ext) = os.path.splitext(build_file)
- if build_file_ext != '.gyp':
- continue
- xcodeproj_path = build_file_root + options.suffix + '.xcodeproj'
- if options.generator_output:
- xcodeproj_path = os.path.join(options.generator_output, xcodeproj_path)
- xcp = XcodeProject(build_file, xcodeproj_path, build_file_dict)
- xcode_projects[build_file] = xcp
- pbxp = xcp.project
-
- # Set project-level attributes from multiple options
- project_attributes = {};
- if parallel_builds:
- project_attributes['BuildIndependentTargetsInParallel'] = 'YES'
- if upgrade_check_project_version:
- project_attributes['LastUpgradeCheck'] = upgrade_check_project_version
- project_attributes['LastTestingUpgradeCheck'] = \
- upgrade_check_project_version
- project_attributes['LastSwiftUpdateCheck'] = \
- upgrade_check_project_version
- pbxp.SetProperty('attributes', project_attributes)
-
- # Add gyp/gypi files to project
- if not generator_flags.get('standalone'):
- main_group = pbxp.GetProperty('mainGroup')
- build_group = gyp.xcodeproj_file.PBXGroup({'name': 'Build'})
- main_group.AppendChild(build_group)
- for included_file in build_file_dict['included_files']:
- build_group.AddOrGetFileByPath(included_file, False)
-
- xcode_targets = {}
- xcode_target_to_target_dict = {}
- for qualified_target in target_list:
- [build_file, target_name, toolset] = \
- gyp.common.ParseQualifiedTarget(qualified_target)
-
- spec = target_dicts[qualified_target]
- if spec['toolset'] != 'target':
- raise Exception(
- 'Multiple toolsets not supported in xcode build (target %s)' %
- qualified_target)
- configuration_names = [spec['default_configuration']]
- for configuration_name in sorted(spec['configurations'].keys()):
- if configuration_name not in configuration_names:
- configuration_names.append(configuration_name)
- xcp = xcode_projects[build_file]
- pbxp = xcp.project
-
- # Set up the configurations for the target according to the list of names
- # supplied.
- xccl = CreateXCConfigurationList(configuration_names)
-
- # Create an XCTarget subclass object for the target. The type with
- # "+bundle" appended will be used if the target has "mac_bundle" set.
- # loadable_modules not in a mac_bundle are mapped to
- # com.googlecode.gyp.xcode.bundle, a pseudo-type that xcode.py interprets
- # to create a single-file mh_bundle.
- _types = {
- 'executable': 'com.apple.product-type.tool',
- 'loadable_module': 'com.googlecode.gyp.xcode.bundle',
- 'shared_library': 'com.apple.product-type.library.dynamic',
- 'static_library': 'com.apple.product-type.library.static',
- 'mac_kernel_extension': 'com.apple.product-type.kernel-extension',
- 'executable+bundle': 'com.apple.product-type.application',
- 'loadable_module+bundle': 'com.apple.product-type.bundle',
- 'loadable_module+xctest': 'com.apple.product-type.bundle.unit-test',
- 'shared_library+bundle': 'com.apple.product-type.framework',
- 'executable+extension+bundle': 'com.apple.product-type.app-extension',
- 'executable+watch+extension+bundle':
- 'com.apple.product-type.watchkit-extension',
- 'executable+watch+bundle':
- 'com.apple.product-type.application.watchapp',
- 'mac_kernel_extension+bundle': 'com.apple.product-type.kernel-extension',
- }
-
- target_properties = {
- 'buildConfigurationList': xccl,
- 'name': target_name,
- }
-
- type = spec['type']
- is_xctest = int(spec.get('mac_xctest_bundle', 0))
- is_bundle = int(spec.get('mac_bundle', 0)) or is_xctest
- is_app_extension = int(spec.get('ios_app_extension', 0))
- is_watchkit_extension = int(spec.get('ios_watchkit_extension', 0))
- is_watch_app = int(spec.get('ios_watch_app', 0))
- if type != 'none':
- type_bundle_key = type
- if is_xctest:
- type_bundle_key += '+xctest'
- assert type == 'loadable_module', (
- 'mac_xctest_bundle targets must have type loadable_module '
- '(target %s)' % target_name)
- elif is_app_extension:
- assert is_bundle, ('ios_app_extension flag requires mac_bundle '
- '(target %s)' % target_name)
- type_bundle_key += '+extension+bundle'
- elif is_watchkit_extension:
- assert is_bundle, ('ios_watchkit_extension flag requires mac_bundle '
- '(target %s)' % target_name)
- type_bundle_key += '+watch+extension+bundle'
- elif is_watch_app:
- assert is_bundle, ('ios_watch_app flag requires mac_bundle '
- '(target %s)' % target_name)
- type_bundle_key += '+watch+bundle'
- elif is_bundle:
- type_bundle_key += '+bundle'
-
- xctarget_type = gyp.xcodeproj_file.PBXNativeTarget
- try:
- target_properties['productType'] = _types[type_bundle_key]
- except KeyError, e:
- gyp.common.ExceptionAppend(e, "-- unknown product type while "
- "writing target %s" % target_name)
- raise
- else:
- xctarget_type = gyp.xcodeproj_file.PBXAggregateTarget
- assert not is_bundle, (
- 'mac_bundle targets cannot have type none (target "%s")' %
- target_name)
- assert not is_xctest, (
- 'mac_xctest_bundle targets cannot have type none (target "%s")' %
- target_name)
-
- target_product_name = spec.get('product_name')
- if target_product_name is not None:
- target_properties['productName'] = target_product_name
-
- xct = xctarget_type(target_properties, parent=pbxp,
- force_outdir=spec.get('product_dir'),
- force_prefix=spec.get('product_prefix'),
- force_extension=spec.get('product_extension'))
- pbxp.AppendProperty('targets', xct)
- xcode_targets[qualified_target] = xct
- xcode_target_to_target_dict[xct] = spec
-
- spec_actions = spec.get('actions', [])
- spec_rules = spec.get('rules', [])
-
- # Xcode has some "issues" with checking dependencies for the "Compile
- # sources" step with any source files/headers generated by actions/rules.
- # To work around this, if a target is building anything directly (not
- # type "none"), then a second target is used to run the GYP actions/rules
- # and is made a dependency of this target. This way the work is done
- # before the dependency checks for what should be recompiled.
- support_xct = None
- # The Xcode "issues" don't affect xcode-ninja builds, since the dependency
- # logic all happens in ninja. Don't bother creating the extra targets in
- # that case.
- if type != 'none' and (spec_actions or spec_rules) and not ninja_wrapper:
- support_xccl = CreateXCConfigurationList(configuration_names);
- support_target_suffix = generator_flags.get(
- 'support_target_suffix', ' Support')
- support_target_properties = {
- 'buildConfigurationList': support_xccl,
- 'name': target_name + support_target_suffix,
- }
- if target_product_name:
- support_target_properties['productName'] = \
- target_product_name + ' Support'
- support_xct = \
- gyp.xcodeproj_file.PBXAggregateTarget(support_target_properties,
- parent=pbxp)
- pbxp.AppendProperty('targets', support_xct)
- xct.AddDependency(support_xct)
- # Hang the support target off the main target so it can be tested/found
- # by the generator during Finalize.
- xct.support_target = support_xct
-
- prebuild_index = 0
-
- # Add custom shell script phases for "actions" sections.
- for action in spec_actions:
- # There's no need to write anything into the script to ensure that the
- # output directories already exist, because Xcode will look at the
- # declared outputs and automatically ensure that they exist for us.
-
- # Do we have a message to print when this action runs?
- message = action.get('message')
- if message:
- message = 'echo note: ' + gyp.common.EncodePOSIXShellArgument(message)
- else:
- message = ''
-
- # Turn the list into a string that can be passed to a shell.
- action_string = gyp.common.EncodePOSIXShellList(action['action'])
-
- # Convert Xcode-type variable references to sh-compatible environment
- # variable references.
- message_sh = gyp.xcodeproj_file.ConvertVariablesToShellSyntax(message)
- action_string_sh = gyp.xcodeproj_file.ConvertVariablesToShellSyntax(
- action_string)
-
- script = ''
- # Include the optional message
- if message_sh:
- script += message_sh + '\n'
- # Be sure the script runs in exec, and that if exec fails, the script
- # exits signalling an error.
- script += 'exec ' + action_string_sh + '\nexit 1\n'
- ssbp = gyp.xcodeproj_file.PBXShellScriptBuildPhase({
- 'inputPaths': action['inputs'],
- 'name': 'Action "' + action['action_name'] + '"',
- 'outputPaths': action['outputs'],
- 'shellScript': script,
- 'showEnvVarsInLog': 0,
- })
-
- if support_xct:
- support_xct.AppendProperty('buildPhases', ssbp)
- else:
- # TODO(mark): this assumes too much knowledge of the internals of
- # xcodeproj_file; some of these smarts should move into xcodeproj_file
- # itself.
- xct._properties['buildPhases'].insert(prebuild_index, ssbp)
- prebuild_index = prebuild_index + 1
-
- # TODO(mark): Should verify that at most one of these is specified.
- if int(action.get('process_outputs_as_sources', False)):
- for output in action['outputs']:
- AddSourceToTarget(output, type, pbxp, xct)
-
- if int(action.get('process_outputs_as_mac_bundle_resources', False)):
- for output in action['outputs']:
- AddResourceToTarget(output, pbxp, xct)
-
- # tgt_mac_bundle_resources holds the list of bundle resources so
- # the rule processing can check against it.
- if is_bundle:
- tgt_mac_bundle_resources = spec.get('mac_bundle_resources', [])
- else:
- tgt_mac_bundle_resources = []
-
- # Add custom shell script phases driving "make" for "rules" sections.
- #
- # Xcode's built-in rule support is almost powerful enough to use directly,
- # but there are a few significant deficiencies that render them unusable.
- # There are workarounds for some of its inadequacies, but in aggregate,
- # the workarounds added complexity to the generator, and some workarounds
- # actually require input files to be crafted more carefully than I'd like.
- # Consequently, until Xcode rules are made more capable, "rules" input
- # sections will be handled in Xcode output by shell script build phases
- # performed prior to the compilation phase.
- #
- # The following problems with Xcode rules were found. The numbers are
- # Apple radar IDs. I hope that these shortcomings are addressed, I really
- # liked having the rules handled directly in Xcode during the period that
- # I was prototyping this.
- #
- # 6588600 Xcode compiles custom script rule outputs too soon, compilation
- # fails. This occurs when rule outputs from distinct inputs are
- # interdependent. The only workaround is to put rules and their
- # inputs in a separate target from the one that compiles the rule
- # outputs. This requires input file cooperation and it means that
- # process_outputs_as_sources is unusable.
- # 6584932 Need to declare that custom rule outputs should be excluded from
- # compilation. A possible workaround is to lie to Xcode about a
- # rule's output, giving it a dummy file it doesn't know how to
- # compile. The rule action script would need to touch the dummy.
- # 6584839 I need a way to declare additional inputs to a custom rule.
- # A possible workaround is a shell script phase prior to
- # compilation that touches a rule's primary input files if any
- # would-be additional inputs are newer than the output. Modifying
- # the source tree - even just modification times - feels dirty.
- # 6564240 Xcode "custom script" build rules always dump all environment
- # variables. This is a low-prioroty problem and is not a
- # show-stopper.
- rules_by_ext = {}
- for rule in spec_rules:
- rules_by_ext[rule['extension']] = rule
-
- # First, some definitions:
- #
- # A "rule source" is a file that was listed in a target's "sources"
- # list and will have a rule applied to it on the basis of matching the
- # rule's "extensions" attribute. Rule sources are direct inputs to
- # rules.
- #
- # Rule definitions may specify additional inputs in their "inputs"
- # attribute. These additional inputs are used for dependency tracking
- # purposes.
- #
- # A "concrete output" is a rule output with input-dependent variables
- # resolved. For example, given a rule with:
- # 'extension': 'ext', 'outputs': ['$(INPUT_FILE_BASE).cc'],
- # if the target's "sources" list contained "one.ext" and "two.ext",
- # the "concrete output" for rule input "two.ext" would be "two.cc". If
- # a rule specifies multiple outputs, each input file that the rule is
- # applied to will have the same number of concrete outputs.
- #
- # If any concrete outputs are outdated or missing relative to their
- # corresponding rule_source or to any specified additional input, the
- # rule action must be performed to generate the concrete outputs.
-
- # concrete_outputs_by_rule_source will have an item at the same index
- # as the rule['rule_sources'] that it corresponds to. Each item is a
- # list of all of the concrete outputs for the rule_source.
- concrete_outputs_by_rule_source = []
-
- # concrete_outputs_all is a flat list of all concrete outputs that this
- # rule is able to produce, given the known set of input files
- # (rule_sources) that apply to it.
- concrete_outputs_all = []
-
- # messages & actions are keyed by the same indices as rule['rule_sources']
- # and concrete_outputs_by_rule_source. They contain the message and
- # action to perform after resolving input-dependent variables. The
- # message is optional, in which case None is stored for each rule source.
- messages = []
- actions = []
-
- for rule_source in rule.get('rule_sources', []):
- rule_source_dirname, rule_source_basename = \
- posixpath.split(rule_source)
- (rule_source_root, rule_source_ext) = \
- posixpath.splitext(rule_source_basename)
-
- # These are the same variable names that Xcode uses for its own native
- # rule support. Because Xcode's rule engine is not being used, they
- # need to be expanded as they are written to the makefile.
- rule_input_dict = {
- 'INPUT_FILE_BASE': rule_source_root,
- 'INPUT_FILE_SUFFIX': rule_source_ext,
- 'INPUT_FILE_NAME': rule_source_basename,
- 'INPUT_FILE_PATH': rule_source,
- 'INPUT_FILE_DIRNAME': rule_source_dirname,
- }
-
- concrete_outputs_for_this_rule_source = []
- for output in rule.get('outputs', []):
- # Fortunately, Xcode and make both use $(VAR) format for their
- # variables, so the expansion is the only transformation necessary.
- # Any remaning $(VAR)-type variables in the string can be given
- # directly to make, which will pick up the correct settings from
- # what Xcode puts into the environment.
- concrete_output = ExpandXcodeVariables(output, rule_input_dict)
- concrete_outputs_for_this_rule_source.append(concrete_output)
-
- # Add all concrete outputs to the project.
- pbxp.AddOrGetFileInRootGroup(concrete_output)
-
- concrete_outputs_by_rule_source.append( \
- concrete_outputs_for_this_rule_source)
- concrete_outputs_all.extend(concrete_outputs_for_this_rule_source)
-
- # TODO(mark): Should verify that at most one of these is specified.
- if int(rule.get('process_outputs_as_sources', False)):
- for output in concrete_outputs_for_this_rule_source:
- AddSourceToTarget(output, type, pbxp, xct)
-
- # If the file came from the mac_bundle_resources list or if the rule
- # is marked to process outputs as bundle resource, do so.
- was_mac_bundle_resource = rule_source in tgt_mac_bundle_resources
- if was_mac_bundle_resource or \
- int(rule.get('process_outputs_as_mac_bundle_resources', False)):
- for output in concrete_outputs_for_this_rule_source:
- AddResourceToTarget(output, pbxp, xct)
-
- # Do we have a message to print when this rule runs?
- message = rule.get('message')
- if message:
- message = gyp.common.EncodePOSIXShellArgument(message)
- message = ExpandXcodeVariables(message, rule_input_dict)
- messages.append(message)
-
- # Turn the list into a string that can be passed to a shell.
- action_string = gyp.common.EncodePOSIXShellList(rule['action'])
-
- action = ExpandXcodeVariables(action_string, rule_input_dict)
- actions.append(action)
-
- if len(concrete_outputs_all) > 0:
- # TODO(mark): There's a possibilty for collision here. Consider
- # target "t" rule "A_r" and target "t_A" rule "r".
- makefile_name = '%s.make' % re.sub(
- '[^a-zA-Z0-9_]', '_' , '%s_%s' % (target_name, rule['rule_name']))
- makefile_path = os.path.join(xcode_projects[build_file].path,
- makefile_name)
- # TODO(mark): try/close? Write to a temporary file and swap it only
- # if it's got changes?
- makefile = open(makefile_path, 'wb')
-
- # make will build the first target in the makefile by default. By
- # convention, it's called "all". List all (or at least one)
- # concrete output for each rule source as a prerequisite of the "all"
- # target.
- makefile.write('all: \\\n')
- for concrete_output_index in \
- xrange(0, len(concrete_outputs_by_rule_source)):
- # Only list the first (index [0]) concrete output of each input
- # in the "all" target. Otherwise, a parallel make (-j > 1) would
- # attempt to process each input multiple times simultaneously.
- # Otherwise, "all" could just contain the entire list of
- # concrete_outputs_all.
- concrete_output = \
- concrete_outputs_by_rule_source[concrete_output_index][0]
- if concrete_output_index == len(concrete_outputs_by_rule_source) - 1:
- eol = ''
- else:
- eol = ' \\'
- makefile.write(' %s%s\n' % (concrete_output, eol))
-
- for (rule_source, concrete_outputs, message, action) in \
- zip(rule['rule_sources'], concrete_outputs_by_rule_source,
- messages, actions):
- makefile.write('\n')
-
- # Add a rule that declares it can build each concrete output of a
- # rule source. Collect the names of the directories that are
- # required.
- concrete_output_dirs = []
- for concrete_output_index in xrange(0, len(concrete_outputs)):
- concrete_output = concrete_outputs[concrete_output_index]
- if concrete_output_index == 0:
- bol = ''
- else:
- bol = ' '
- makefile.write('%s%s \\\n' % (bol, concrete_output))
-
- concrete_output_dir = posixpath.dirname(concrete_output)
- if (concrete_output_dir and
- concrete_output_dir not in concrete_output_dirs):
- concrete_output_dirs.append(concrete_output_dir)
-
- makefile.write(' : \\\n')
-
- # The prerequisites for this rule are the rule source itself and
- # the set of additional rule inputs, if any.
- prerequisites = [rule_source]
- prerequisites.extend(rule.get('inputs', []))
- for prerequisite_index in xrange(0, len(prerequisites)):
- prerequisite = prerequisites[prerequisite_index]
- if prerequisite_index == len(prerequisites) - 1:
- eol = ''
- else:
- eol = ' \\'
- makefile.write(' %s%s\n' % (prerequisite, eol))
-
- # Make sure that output directories exist before executing the rule
- # action.
- if len(concrete_output_dirs) > 0:
- makefile.write('\t@mkdir -p "%s"\n' %
- '" "'.join(concrete_output_dirs))
-
- # The rule message and action have already had the necessary variable
- # substitutions performed.
- if message:
- # Mark it with note: so Xcode picks it up in build output.
- makefile.write('\t@echo note: %s\n' % message)
- makefile.write('\t%s\n' % action)
-
- makefile.close()
-
- # It might be nice to ensure that needed output directories exist
- # here rather than in each target in the Makefile, but that wouldn't
- # work if there ever was a concrete output that had an input-dependent
- # variable anywhere other than in the leaf position.
-
- # Don't declare any inputPaths or outputPaths. If they're present,
- # Xcode will provide a slight optimization by only running the script
- # phase if any output is missing or outdated relative to any input.
- # Unfortunately, it will also assume that all outputs are touched by
- # the script, and if the outputs serve as files in a compilation
- # phase, they will be unconditionally rebuilt. Since make might not
- # rebuild everything that could be declared here as an output, this
- # extra compilation activity is unnecessary. With inputPaths and
- # outputPaths not supplied, make will always be called, but it knows
- # enough to not do anything when everything is up-to-date.
-
- # To help speed things up, pass -j COUNT to make so it does some work
- # in parallel. Don't use ncpus because Xcode will build ncpus targets
- # in parallel and if each target happens to have a rules step, there
- # would be ncpus^2 things going. With a machine that has 2 quad-core
- # Xeons, a build can quickly run out of processes based on
- # scheduling/other tasks, and randomly failing builds are no good.
- script = \
-"""JOB_COUNT="$(/usr/sbin/sysctl -n hw.ncpu)"
-if [ "${JOB_COUNT}" -gt 4 ]; then
- JOB_COUNT=4
-fi
-exec xcrun make -f "${PROJECT_FILE_PATH}/%s" -j "${JOB_COUNT}"
-exit 1
-""" % makefile_name
- ssbp = gyp.xcodeproj_file.PBXShellScriptBuildPhase({
- 'name': 'Rule "' + rule['rule_name'] + '"',
- 'shellScript': script,
- 'showEnvVarsInLog': 0,
- })
-
- if support_xct:
- support_xct.AppendProperty('buildPhases', ssbp)
- else:
- # TODO(mark): this assumes too much knowledge of the internals of
- # xcodeproj_file; some of these smarts should move into xcodeproj_file
- # itself.
- xct._properties['buildPhases'].insert(prebuild_index, ssbp)
- prebuild_index = prebuild_index + 1
-
- # Extra rule inputs also go into the project file. Concrete outputs were
- # already added when they were computed.
- groups = ['inputs', 'inputs_excluded']
- if skip_excluded_files:
- groups = [x for x in groups if not x.endswith('_excluded')]
- for group in groups:
- for item in rule.get(group, []):
- pbxp.AddOrGetFileInRootGroup(item)
-
- # Add "sources".
- for source in spec.get('sources', []):
- (source_root, source_extension) = posixpath.splitext(source)
- if source_extension[1:] not in rules_by_ext:
- # AddSourceToTarget will add the file to a root group if it's not
- # already there.
- AddSourceToTarget(source, type, pbxp, xct)
- else:
- pbxp.AddOrGetFileInRootGroup(source)
-
- # Add "mac_bundle_resources" and "mac_framework_private_headers" if
- # it's a bundle of any type.
- if is_bundle:
- for resource in tgt_mac_bundle_resources:
- (resource_root, resource_extension) = posixpath.splitext(resource)
- if resource_extension[1:] not in rules_by_ext:
- AddResourceToTarget(resource, pbxp, xct)
- else:
- pbxp.AddOrGetFileInRootGroup(resource)
-
- for header in spec.get('mac_framework_private_headers', []):
- AddHeaderToTarget(header, pbxp, xct, False)
-
- # Add "mac_framework_headers". These can be valid for both frameworks
- # and static libraries.
- if is_bundle or type == 'static_library':
- for header in spec.get('mac_framework_headers', []):
- AddHeaderToTarget(header, pbxp, xct, True)
-
- # Add "copies".
- pbxcp_dict = {}
- for copy_group in spec.get('copies', []):
- dest = copy_group['destination']
- if dest[0] not in ('/', '$'):
- # Relative paths are relative to $(SRCROOT).
- dest = '$(SRCROOT)/' + dest
-
- code_sign = int(copy_group.get('xcode_code_sign', 0))
- settings = (None, '{ATTRIBUTES = (CodeSignOnCopy, ); }')[code_sign];
-
- # Coalesce multiple "copies" sections in the same target with the same
- # "destination" property into the same PBXCopyFilesBuildPhase, otherwise
- # they'll wind up with ID collisions.
- pbxcp = pbxcp_dict.get(dest, None)
- if pbxcp is None:
- pbxcp = gyp.xcodeproj_file.PBXCopyFilesBuildPhase({
- 'name': 'Copy to ' + copy_group['destination']
- },
- parent=xct)
- pbxcp.SetDestination(dest)
-
- # TODO(mark): The usual comment about this knowing too much about
- # gyp.xcodeproj_file internals applies.
- xct._properties['buildPhases'].insert(prebuild_index, pbxcp)
-
- pbxcp_dict[dest] = pbxcp
-
- for file in copy_group['files']:
- pbxcp.AddFile(file, settings)
-
- # Excluded files can also go into the project file.
- if not skip_excluded_files:
- for key in ['sources', 'mac_bundle_resources', 'mac_framework_headers',
- 'mac_framework_private_headers']:
- excluded_key = key + '_excluded'
- for item in spec.get(excluded_key, []):
- pbxp.AddOrGetFileInRootGroup(item)
-
- # So can "inputs" and "outputs" sections of "actions" groups.
- groups = ['inputs', 'inputs_excluded', 'outputs', 'outputs_excluded']
- if skip_excluded_files:
- groups = [x for x in groups if not x.endswith('_excluded')]
- for action in spec.get('actions', []):
- for group in groups:
- for item in action.get(group, []):
- # Exclude anything in BUILT_PRODUCTS_DIR. They're products, not
- # sources.
- if not item.startswith('$(BUILT_PRODUCTS_DIR)/'):
- pbxp.AddOrGetFileInRootGroup(item)
-
- for postbuild in spec.get('postbuilds', []):
- action_string_sh = gyp.common.EncodePOSIXShellList(postbuild['action'])
- script = 'exec ' + action_string_sh + '\nexit 1\n'
-
- # Make the postbuild step depend on the output of ld or ar from this
- # target. Apparently putting the script step after the link step isn't
- # sufficient to ensure proper ordering in all cases. With an input
- # declared but no outputs, the script step should run every time, as
- # desired.
- ssbp = gyp.xcodeproj_file.PBXShellScriptBuildPhase({
- 'inputPaths': ['$(BUILT_PRODUCTS_DIR)/$(EXECUTABLE_PATH)'],
- 'name': 'Postbuild "' + postbuild['postbuild_name'] + '"',
- 'shellScript': script,
- 'showEnvVarsInLog': 0,
- })
- xct.AppendProperty('buildPhases', ssbp)
-
- # Add dependencies before libraries, because adding a dependency may imply
- # adding a library. It's preferable to keep dependencies listed first
- # during a link phase so that they can override symbols that would
- # otherwise be provided by libraries, which will usually include system
- # libraries. On some systems, ld is finicky and even requires the
- # libraries to be ordered in such a way that unresolved symbols in
- # earlier-listed libraries may only be resolved by later-listed libraries.
- # The Mac linker doesn't work that way, but other platforms do, and so
- # their linker invocations need to be constructed in this way. There's
- # no compelling reason for Xcode's linker invocations to differ.
-
- if 'dependencies' in spec:
- for dependency in spec['dependencies']:
- xct.AddDependency(xcode_targets[dependency])
- # The support project also gets the dependencies (in case they are
- # needed for the actions/rules to work).
- if support_xct:
- support_xct.AddDependency(xcode_targets[dependency])
-
- if 'libraries' in spec:
- for library in spec['libraries']:
- xct.FrameworksPhase().AddFile(library)
- # Add the library's directory to LIBRARY_SEARCH_PATHS if necessary.
- # I wish Xcode handled this automatically.
- library_dir = posixpath.dirname(library)
- if library_dir not in xcode_standard_library_dirs and (
- not xct.HasBuildSetting(_library_search_paths_var) or
- library_dir not in xct.GetBuildSetting(_library_search_paths_var)):
- xct.AppendBuildSetting(_library_search_paths_var, library_dir)
-
- for configuration_name in configuration_names:
- configuration = spec['configurations'][configuration_name]
- xcbc = xct.ConfigurationNamed(configuration_name)
- for include_dir in configuration.get('mac_framework_dirs', []):
- xcbc.AppendBuildSetting('FRAMEWORK_SEARCH_PATHS', include_dir)
- for include_dir in configuration.get('include_dirs', []):
- xcbc.AppendBuildSetting('HEADER_SEARCH_PATHS', include_dir)
- for library_dir in configuration.get('library_dirs', []):
- if library_dir not in xcode_standard_library_dirs and (
- not xcbc.HasBuildSetting(_library_search_paths_var) or
- library_dir not in xcbc.GetBuildSetting(_library_search_paths_var)):
- xcbc.AppendBuildSetting(_library_search_paths_var, library_dir)
-
- if 'defines' in configuration:
- for define in configuration['defines']:
- set_define = EscapeXcodeDefine(define)
- xcbc.AppendBuildSetting('GCC_PREPROCESSOR_DEFINITIONS', set_define)
- if 'xcode_settings' in configuration:
- for xck, xcv in configuration['xcode_settings'].iteritems():
- xcbc.SetBuildSetting(xck, xcv)
- if 'xcode_config_file' in configuration:
- config_ref = pbxp.AddOrGetFileInRootGroup(
- configuration['xcode_config_file'])
- xcbc.SetBaseConfiguration(config_ref)
-
- build_files = []
- for build_file, build_file_dict in data.iteritems():
- if build_file.endswith('.gyp'):
- build_files.append(build_file)
-
- for build_file in build_files:
- xcode_projects[build_file].Finalize1(xcode_targets, serialize_all_tests)
-
- for build_file in build_files:
- xcode_projects[build_file].Finalize2(xcode_targets,
- xcode_target_to_target_dict)
-
- for build_file in build_files:
- xcode_projects[build_file].Write()
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py b/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
deleted file mode 100644
index 260324a..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2013 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-""" Unit tests for the xcode.py file. """
-
-import gyp.generator.xcode as xcode
-import unittest
-import sys
-
-
-class TestEscapeXcodeDefine(unittest.TestCase):
- if sys.platform == 'darwin':
- def test_InheritedRemainsUnescaped(self):
- self.assertEqual(xcode.EscapeXcodeDefine('$(inherited)'), '$(inherited)')
-
- def test_Escaping(self):
- self.assertEqual(xcode.EscapeXcodeDefine('a b"c\\'), 'a\\ b\\"c\\\\')
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/input.py b/node_modules/node-gyp/gyp/pylib/gyp/input.py
deleted file mode 100644
index 10f6e0d..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/input.py
+++ /dev/null
@@ -1,2902 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from compiler.ast import Const
-from compiler.ast import Dict
-from compiler.ast import Discard
-from compiler.ast import List
-from compiler.ast import Module
-from compiler.ast import Node
-from compiler.ast import Stmt
-import compiler
-import gyp.common
-import gyp.simple_copy
-import multiprocessing
-import optparse
-import os.path
-import re
-import shlex
-import signal
-import subprocess
-import sys
-import threading
-import time
-import traceback
-from gyp.common import GypError
-from gyp.common import OrderedSet
-
-
-# A list of types that are treated as linkable.
-linkable_types = [
- 'executable',
- 'shared_library',
- 'loadable_module',
- 'mac_kernel_extension',
-]
-
-# A list of sections that contain links to other targets.
-dependency_sections = ['dependencies', 'export_dependent_settings']
-
-# base_path_sections is a list of sections defined by GYP that contain
-# pathnames. The generators can provide more keys, the two lists are merged
-# into path_sections, but you should call IsPathSection instead of using either
-# list directly.
-base_path_sections = [
- 'destination',
- 'files',
- 'include_dirs',
- 'inputs',
- 'libraries',
- 'outputs',
- 'sources',
-]
-path_sections = set()
-
-# These per-process dictionaries are used to cache build file data when loading
-# in parallel mode.
-per_process_data = {}
-per_process_aux_data = {}
-
-def IsPathSection(section):
- # If section ends in one of the '=+?!' characters, it's applied to a section
- # without the trailing characters. '/' is notably absent from this list,
- # because there's no way for a regular expression to be treated as a path.
- while section and section[-1:] in '=+?!':
- section = section[:-1]
-
- if section in path_sections:
- return True
-
- # Sections mathing the regexp '_(dir|file|path)s?$' are also
- # considered PathSections. Using manual string matching since that
- # is much faster than the regexp and this can be called hundreds of
- # thousands of times so micro performance matters.
- if "_" in section:
- tail = section[-6:]
- if tail[-1] == 's':
- tail = tail[:-1]
- if tail[-5:] in ('_file', '_path'):
- return True
- return tail[-4:] == '_dir'
-
- return False
-
-# base_non_configuration_keys is a list of key names that belong in the target
-# itself and should not be propagated into its configurations. It is merged
-# with a list that can come from the generator to
-# create non_configuration_keys.
-base_non_configuration_keys = [
- # Sections that must exist inside targets and not configurations.
- 'actions',
- 'configurations',
- 'copies',
- 'default_configuration',
- 'dependencies',
- 'dependencies_original',
- 'libraries',
- 'postbuilds',
- 'product_dir',
- 'product_extension',
- 'product_name',
- 'product_prefix',
- 'rules',
- 'run_as',
- 'sources',
- 'standalone_static_library',
- 'suppress_wildcard',
- 'target_name',
- 'toolset',
- 'toolsets',
- 'type',
-
- # Sections that can be found inside targets or configurations, but that
- # should not be propagated from targets into their configurations.
- 'variables',
-]
-non_configuration_keys = []
-
-# Keys that do not belong inside a configuration dictionary.
-invalid_configuration_keys = [
- 'actions',
- 'all_dependent_settings',
- 'configurations',
- 'dependencies',
- 'direct_dependent_settings',
- 'libraries',
- 'link_settings',
- 'sources',
- 'standalone_static_library',
- 'target_name',
- 'type',
-]
-
-# Controls whether or not the generator supports multiple toolsets.
-multiple_toolsets = False
-
-# Paths for converting filelist paths to output paths: {
-# toplevel,
-# qualified_output_dir,
-# }
-generator_filelist_paths = None
-
-def GetIncludedBuildFiles(build_file_path, aux_data, included=None):
- """Return a list of all build files included into build_file_path.
-
- The returned list will contain build_file_path as well as all other files
- that it included, either directly or indirectly. Note that the list may
- contain files that were included into a conditional section that evaluated
- to false and was not merged into build_file_path's dict.
-
- aux_data is a dict containing a key for each build file or included build
- file. Those keys provide access to dicts whose "included" keys contain
- lists of all other files included by the build file.
-
- included should be left at its default None value by external callers. It
- is used for recursion.
-
- The returned list will not contain any duplicate entries. Each build file
- in the list will be relative to the current directory.
- """
-
- if included == None:
- included = []
-
- if build_file_path in included:
- return included
-
- included.append(build_file_path)
-
- for included_build_file in aux_data[build_file_path].get('included', []):
- GetIncludedBuildFiles(included_build_file, aux_data, included)
-
- return included
-
-
-def CheckedEval(file_contents):
- """Return the eval of a gyp file.
-
- The gyp file is restricted to dictionaries and lists only, and
- repeated keys are not allowed.
-
- Note that this is slower than eval() is.
- """
-
- ast = compiler.parse(file_contents)
- assert isinstance(ast, Module)
- c1 = ast.getChildren()
- assert c1[0] is None
- assert isinstance(c1[1], Stmt)
- c2 = c1[1].getChildren()
- assert isinstance(c2[0], Discard)
- c3 = c2[0].getChildren()
- assert len(c3) == 1
- return CheckNode(c3[0], [])
-
-
-def CheckNode(node, keypath):
- if isinstance(node, Dict):
- c = node.getChildren()
- dict = {}
- for n in range(0, len(c), 2):
- assert isinstance(c[n], Const)
- key = c[n].getChildren()[0]
- if key in dict:
- raise GypError("Key '" + key + "' repeated at level " +
- repr(len(keypath) + 1) + " with key path '" +
- '.'.join(keypath) + "'")
- kp = list(keypath) # Make a copy of the list for descending this node.
- kp.append(key)
- dict[key] = CheckNode(c[n + 1], kp)
- return dict
- elif isinstance(node, List):
- c = node.getChildren()
- children = []
- for index, child in enumerate(c):
- kp = list(keypath) # Copy list.
- kp.append(repr(index))
- children.append(CheckNode(child, kp))
- return children
- elif isinstance(node, Const):
- return node.getChildren()[0]
- else:
- raise TypeError("Unknown AST node at key path '" + '.'.join(keypath) +
- "': " + repr(node))
-
-
-def LoadOneBuildFile(build_file_path, data, aux_data, includes,
- is_target, check):
- if build_file_path in data:
- return data[build_file_path]
-
- if os.path.exists(build_file_path):
- # Open the build file for read ('r') with universal-newlines mode ('U')
- # to make sure platform specific newlines ('\r\n' or '\r') are converted to '\n'
- # which otherwise will fail eval()
- if sys.platform == 'zos':
- # On z/OS, universal-newlines mode treats the file as an ascii file. But since
- # node-gyp produces ebcdic files, do not use that mode.
- build_file_contents = open(build_file_path, 'r').read()
- else:
- build_file_contents = open(build_file_path, 'rU').read()
- else:
- raise GypError("%s not found (cwd: %s)" % (build_file_path, os.getcwd()))
-
- build_file_data = None
- try:
- if check:
- build_file_data = CheckedEval(build_file_contents)
- else:
- build_file_data = eval(build_file_contents, {'__builtins__': None},
- None)
- except SyntaxError, e:
- e.filename = build_file_path
- raise
- except Exception, e:
- gyp.common.ExceptionAppend(e, 'while reading ' + build_file_path)
- raise
-
- if type(build_file_data) is not dict:
- raise GypError("%s does not evaluate to a dictionary." % build_file_path)
-
- data[build_file_path] = build_file_data
- aux_data[build_file_path] = {}
-
- # Scan for includes and merge them in.
- if ('skip_includes' not in build_file_data or
- not build_file_data['skip_includes']):
- try:
- if is_target:
- LoadBuildFileIncludesIntoDict(build_file_data, build_file_path, data,
- aux_data, includes, check)
- else:
- LoadBuildFileIncludesIntoDict(build_file_data, build_file_path, data,
- aux_data, None, check)
- except Exception, e:
- gyp.common.ExceptionAppend(e,
- 'while reading includes of ' + build_file_path)
- raise
-
- return build_file_data
-
-
-def LoadBuildFileIncludesIntoDict(subdict, subdict_path, data, aux_data,
- includes, check):
- includes_list = []
- if includes != None:
- includes_list.extend(includes)
- if 'includes' in subdict:
- for include in subdict['includes']:
- # "include" is specified relative to subdict_path, so compute the real
- # path to include by appending the provided "include" to the directory
- # in which subdict_path resides.
- relative_include = \
- os.path.normpath(os.path.join(os.path.dirname(subdict_path), include))
- includes_list.append(relative_include)
- # Unhook the includes list, it's no longer needed.
- del subdict['includes']
-
- # Merge in the included files.
- for include in includes_list:
- if not 'included' in aux_data[subdict_path]:
- aux_data[subdict_path]['included'] = []
- aux_data[subdict_path]['included'].append(include)
-
- gyp.DebugOutput(gyp.DEBUG_INCLUDES, "Loading Included File: '%s'", include)
-
- MergeDicts(subdict,
- LoadOneBuildFile(include, data, aux_data, None, False, check),
- subdict_path, include)
-
- # Recurse into subdictionaries.
- for k, v in subdict.iteritems():
- if type(v) is dict:
- LoadBuildFileIncludesIntoDict(v, subdict_path, data, aux_data,
- None, check)
- elif type(v) is list:
- LoadBuildFileIncludesIntoList(v, subdict_path, data, aux_data,
- check)
-
-
-# This recurses into lists so that it can look for dicts.
-def LoadBuildFileIncludesIntoList(sublist, sublist_path, data, aux_data, check):
- for item in sublist:
- if type(item) is dict:
- LoadBuildFileIncludesIntoDict(item, sublist_path, data, aux_data,
- None, check)
- elif type(item) is list:
- LoadBuildFileIncludesIntoList(item, sublist_path, data, aux_data, check)
-
-# Processes toolsets in all the targets. This recurses into condition entries
-# since they can contain toolsets as well.
-def ProcessToolsetsInDict(data):
- if 'targets' in data:
- target_list = data['targets']
- new_target_list = []
- for target in target_list:
- # If this target already has an explicit 'toolset', and no 'toolsets'
- # list, don't modify it further.
- if 'toolset' in target and 'toolsets' not in target:
- new_target_list.append(target)
- continue
- if multiple_toolsets:
- toolsets = target.get('toolsets', ['target'])
- else:
- toolsets = ['target']
- # Make sure this 'toolsets' definition is only processed once.
- if 'toolsets' in target:
- del target['toolsets']
- if len(toolsets) > 0:
- # Optimization: only do copies if more than one toolset is specified.
- for build in toolsets[1:]:
- new_target = gyp.simple_copy.deepcopy(target)
- new_target['toolset'] = build
- new_target_list.append(new_target)
- target['toolset'] = toolsets[0]
- new_target_list.append(target)
- data['targets'] = new_target_list
- if 'conditions' in data:
- for condition in data['conditions']:
- if type(condition) is list:
- for condition_dict in condition[1:]:
- if type(condition_dict) is dict:
- ProcessToolsetsInDict(condition_dict)
-
-
-# TODO(mark): I don't love this name. It just means that it's going to load
-# a build file that contains targets and is expected to provide a targets dict
-# that contains the targets...
-def LoadTargetBuildFile(build_file_path, data, aux_data, variables, includes,
- depth, check, load_dependencies):
- # If depth is set, predefine the DEPTH variable to be a relative path from
- # this build file's directory to the directory identified by depth.
- if depth:
- # TODO(dglazkov) The backslash/forward-slash replacement at the end is a
- # temporary measure. This should really be addressed by keeping all paths
- # in POSIX until actual project generation.
- d = gyp.common.RelativePath(depth, os.path.dirname(build_file_path))
- if d == '':
- variables['DEPTH'] = '.'
- else:
- variables['DEPTH'] = d.replace('\\', '/')
-
- # The 'target_build_files' key is only set when loading target build files in
- # the non-parallel code path, where LoadTargetBuildFile is called
- # recursively. In the parallel code path, we don't need to check whether the
- # |build_file_path| has already been loaded, because the 'scheduled' set in
- # ParallelState guarantees that we never load the same |build_file_path|
- # twice.
- if 'target_build_files' in data:
- if build_file_path in data['target_build_files']:
- # Already loaded.
- return False
- data['target_build_files'].add(build_file_path)
-
- gyp.DebugOutput(gyp.DEBUG_INCLUDES,
- "Loading Target Build File '%s'", build_file_path)
-
- build_file_data = LoadOneBuildFile(build_file_path, data, aux_data,
- includes, True, check)
-
- # Store DEPTH for later use in generators.
- build_file_data['_DEPTH'] = depth
-
- # Set up the included_files key indicating which .gyp files contributed to
- # this target dict.
- if 'included_files' in build_file_data:
- raise GypError(build_file_path + ' must not contain included_files key')
-
- included = GetIncludedBuildFiles(build_file_path, aux_data)
- build_file_data['included_files'] = []
- for included_file in included:
- # included_file is relative to the current directory, but it needs to
- # be made relative to build_file_path's directory.
- included_relative = \
- gyp.common.RelativePath(included_file,
- os.path.dirname(build_file_path))
- build_file_data['included_files'].append(included_relative)
-
- # Do a first round of toolsets expansion so that conditions can be defined
- # per toolset.
- ProcessToolsetsInDict(build_file_data)
-
- # Apply "pre"/"early" variable expansions and condition evaluations.
- ProcessVariablesAndConditionsInDict(
- build_file_data, PHASE_EARLY, variables, build_file_path)
-
- # Since some toolsets might have been defined conditionally, perform
- # a second round of toolsets expansion now.
- ProcessToolsetsInDict(build_file_data)
-
- # Look at each project's target_defaults dict, and merge settings into
- # targets.
- if 'target_defaults' in build_file_data:
- if 'targets' not in build_file_data:
- raise GypError("Unable to find targets in build file %s" %
- build_file_path)
-
- index = 0
- while index < len(build_file_data['targets']):
- # This procedure needs to give the impression that target_defaults is
- # used as defaults, and the individual targets inherit from that.
- # The individual targets need to be merged into the defaults. Make
- # a deep copy of the defaults for each target, merge the target dict
- # as found in the input file into that copy, and then hook up the
- # copy with the target-specific data merged into it as the replacement
- # target dict.
- old_target_dict = build_file_data['targets'][index]
- new_target_dict = gyp.simple_copy.deepcopy(
- build_file_data['target_defaults'])
- MergeDicts(new_target_dict, old_target_dict,
- build_file_path, build_file_path)
- build_file_data['targets'][index] = new_target_dict
- index += 1
-
- # No longer needed.
- del build_file_data['target_defaults']
-
- # Look for dependencies. This means that dependency resolution occurs
- # after "pre" conditionals and variable expansion, but before "post" -
- # in other words, you can't put a "dependencies" section inside a "post"
- # conditional within a target.
-
- dependencies = []
- if 'targets' in build_file_data:
- for target_dict in build_file_data['targets']:
- if 'dependencies' not in target_dict:
- continue
- for dependency in target_dict['dependencies']:
- dependencies.append(
- gyp.common.ResolveTarget(build_file_path, dependency, None)[0])
-
- if load_dependencies:
- for dependency in dependencies:
- try:
- LoadTargetBuildFile(dependency, data, aux_data, variables,
- includes, depth, check, load_dependencies)
- except Exception, e:
- gyp.common.ExceptionAppend(
- e, 'while loading dependencies of %s' % build_file_path)
- raise
- else:
- return (build_file_path, dependencies)
-
-def CallLoadTargetBuildFile(global_flags,
- build_file_path, variables,
- includes, depth, check,
- generator_input_info):
- """Wrapper around LoadTargetBuildFile for parallel processing.
-
- This wrapper is used when LoadTargetBuildFile is executed in
- a worker process.
- """
-
- try:
- signal.signal(signal.SIGINT, signal.SIG_IGN)
-
- # Apply globals so that the worker process behaves the same.
- for key, value in global_flags.iteritems():
- globals()[key] = value
-
- SetGeneratorGlobals(generator_input_info)
- result = LoadTargetBuildFile(build_file_path, per_process_data,
- per_process_aux_data, variables,
- includes, depth, check, False)
- if not result:
- return result
-
- (build_file_path, dependencies) = result
-
- # We can safely pop the build_file_data from per_process_data because it
- # will never be referenced by this process again, so we don't need to keep
- # it in the cache.
- build_file_data = per_process_data.pop(build_file_path)
-
- # This gets serialized and sent back to the main process via a pipe.
- # It's handled in LoadTargetBuildFileCallback.
- return (build_file_path,
- build_file_data,
- dependencies)
- except GypError, e:
- sys.stderr.write("gyp: %s\n" % e)
- return None
- except Exception, e:
- print >>sys.stderr, 'Exception:', e
- print >>sys.stderr, traceback.format_exc()
- return None
-
-
-class ParallelProcessingError(Exception):
- pass
-
-
-class ParallelState(object):
- """Class to keep track of state when processing input files in parallel.
-
- If build files are loaded in parallel, use this to keep track of
- state during farming out and processing parallel jobs. It's stored
- in a global so that the callback function can have access to it.
- """
-
- def __init__(self):
- # The multiprocessing pool.
- self.pool = None
- # The condition variable used to protect this object and notify
- # the main loop when there might be more data to process.
- self.condition = None
- # The "data" dict that was passed to LoadTargetBuildFileParallel
- self.data = None
- # The number of parallel calls outstanding; decremented when a response
- # was received.
- self.pending = 0
- # The set of all build files that have been scheduled, so we don't
- # schedule the same one twice.
- self.scheduled = set()
- # A list of dependency build file paths that haven't been scheduled yet.
- self.dependencies = []
- # Flag to indicate if there was an error in a child process.
- self.error = False
-
- def LoadTargetBuildFileCallback(self, result):
- """Handle the results of running LoadTargetBuildFile in another process.
- """
- self.condition.acquire()
- if not result:
- self.error = True
- self.condition.notify()
- self.condition.release()
- return
- (build_file_path0, build_file_data0, dependencies0) = result
- self.data[build_file_path0] = build_file_data0
- self.data['target_build_files'].add(build_file_path0)
- for new_dependency in dependencies0:
- if new_dependency not in self.scheduled:
- self.scheduled.add(new_dependency)
- self.dependencies.append(new_dependency)
- self.pending -= 1
- self.condition.notify()
- self.condition.release()
-
-
-def LoadTargetBuildFilesParallel(build_files, data, variables, includes, depth,
- check, generator_input_info):
- parallel_state = ParallelState()
- parallel_state.condition = threading.Condition()
- # Make copies of the build_files argument that we can modify while working.
- parallel_state.dependencies = list(build_files)
- parallel_state.scheduled = set(build_files)
- parallel_state.pending = 0
- parallel_state.data = data
-
- try:
- parallel_state.condition.acquire()
- while parallel_state.dependencies or parallel_state.pending:
- if parallel_state.error:
- break
- if not parallel_state.dependencies:
- parallel_state.condition.wait()
- continue
-
- dependency = parallel_state.dependencies.pop()
-
- parallel_state.pending += 1
- global_flags = {
- 'path_sections': globals()['path_sections'],
- 'non_configuration_keys': globals()['non_configuration_keys'],
- 'multiple_toolsets': globals()['multiple_toolsets']}
-
- if not parallel_state.pool:
- parallel_state.pool = multiprocessing.Pool(multiprocessing.cpu_count())
- parallel_state.pool.apply_async(
- CallLoadTargetBuildFile,
- args = (global_flags, dependency,
- variables, includes, depth, check, generator_input_info),
- callback = parallel_state.LoadTargetBuildFileCallback)
- except KeyboardInterrupt, e:
- parallel_state.pool.terminate()
- raise e
-
- parallel_state.condition.release()
-
- parallel_state.pool.close()
- parallel_state.pool.join()
- parallel_state.pool = None
-
- if parallel_state.error:
- sys.exit(1)
-
-# Look for the bracket that matches the first bracket seen in a
-# string, and return the start and end as a tuple. For example, if
-# the input is something like "<(foo <(bar)) blah", then it would
-# return (1, 13), indicating the entire string except for the leading
-# "<" and trailing " blah".
-LBRACKETS= set('{[(')
-BRACKETS = {'}': '{', ']': '[', ')': '('}
-def FindEnclosingBracketGroup(input_str):
- stack = []
- start = -1
- for index, char in enumerate(input_str):
- if char in LBRACKETS:
- stack.append(char)
- if start == -1:
- start = index
- elif char in BRACKETS:
- if not stack:
- return (-1, -1)
- if stack.pop() != BRACKETS[char]:
- return (-1, -1)
- if not stack:
- return (start, index + 1)
- return (-1, -1)
-
-
-def IsStrCanonicalInt(string):
- """Returns True if |string| is in its canonical integer form.
-
- The canonical form is such that str(int(string)) == string.
- """
- if type(string) is str:
- # This function is called a lot so for maximum performance, avoid
- # involving regexps which would otherwise make the code much
- # shorter. Regexps would need twice the time of this function.
- if string:
- if string == "0":
- return True
- if string[0] == "-":
- string = string[1:]
- if not string:
- return False
- if '1' <= string[0] <= '9':
- return string.isdigit()
-
- return False
-
-
-# This matches things like "<(asdf)", "<!(cmd)", "<!@(cmd)", "<|(list)",
-# "<!interpreter(arguments)", "<([list])", and even "<([)" and "<(<())".
-# In the last case, the inner "<()" is captured in match['content'].
-early_variable_re = re.compile(
- r'(?P<replace>(?P<type><(?:(?:!?@?)|\|)?)'
- r'(?P<command_string>[-a-zA-Z0-9_.]+)?'
- r'\((?P<is_array>\s*\[?)'
- r'(?P<content>.*?)(\]?)\))')
-
-# This matches the same as early_variable_re, but with '>' instead of '<'.
-late_variable_re = re.compile(
- r'(?P<replace>(?P<type>>(?:(?:!?@?)|\|)?)'
- r'(?P<command_string>[-a-zA-Z0-9_.]+)?'
- r'\((?P<is_array>\s*\[?)'
- r'(?P<content>.*?)(\]?)\))')
-
-# This matches the same as early_variable_re, but with '^' instead of '<'.
-latelate_variable_re = re.compile(
- r'(?P<replace>(?P<type>[\^](?:(?:!?@?)|\|)?)'
- r'(?P<command_string>[-a-zA-Z0-9_.]+)?'
- r'\((?P<is_array>\s*\[?)'
- r'(?P<content>.*?)(\]?)\))')
-
-# Global cache of results from running commands so they don't have to be run
-# more then once.
-cached_command_results = {}
-
-
-def FixupPlatformCommand(cmd):
- if sys.platform == 'win32':
- if type(cmd) is list:
- cmd = [re.sub('^cat ', 'type ', cmd[0])] + cmd[1:]
- else:
- cmd = re.sub('^cat ', 'type ', cmd)
- return cmd
-
-
-PHASE_EARLY = 0
-PHASE_LATE = 1
-PHASE_LATELATE = 2
-
-
-def ExpandVariables(input, phase, variables, build_file):
- # Look for the pattern that gets expanded into variables
- if phase == PHASE_EARLY:
- variable_re = early_variable_re
- expansion_symbol = '<'
- elif phase == PHASE_LATE:
- variable_re = late_variable_re
- expansion_symbol = '>'
- elif phase == PHASE_LATELATE:
- variable_re = latelate_variable_re
- expansion_symbol = '^'
- else:
- assert False
-
- input_str = str(input)
- if IsStrCanonicalInt(input_str):
- return int(input_str)
-
- # Do a quick scan to determine if an expensive regex search is warranted.
- if expansion_symbol not in input_str:
- return input_str
-
- # Get the entire list of matches as a list of MatchObject instances.
- # (using findall here would return strings instead of MatchObjects).
- matches = list(variable_re.finditer(input_str))
- if not matches:
- return input_str
-
- output = input_str
- # Reverse the list of matches so that replacements are done right-to-left.
- # That ensures that earlier replacements won't mess up the string in a
- # way that causes later calls to find the earlier substituted text instead
- # of what's intended for replacement.
- matches.reverse()
- for match_group in matches:
- match = match_group.groupdict()
- gyp.DebugOutput(gyp.DEBUG_VARIABLES, "Matches: %r", match)
- # match['replace'] is the substring to look for, match['type']
- # is the character code for the replacement type (< > <! >! <| >| <@
- # >@ <!@ >!@), match['is_array'] contains a '[' for command
- # arrays, and match['content'] is the name of the variable (< >)
- # or command to run (<! >!). match['command_string'] is an optional
- # command string. Currently, only 'pymod_do_main' is supported.
-
- # run_command is true if a ! variant is used.
- run_command = '!' in match['type']
- command_string = match['command_string']
-
- # file_list is true if a | variant is used.
- file_list = '|' in match['type']
-
- # Capture these now so we can adjust them later.
- replace_start = match_group.start('replace')
- replace_end = match_group.end('replace')
-
- # Find the ending paren, and re-evaluate the contained string.
- (c_start, c_end) = FindEnclosingBracketGroup(input_str[replace_start:])
-
- # Adjust the replacement range to match the entire command
- # found by FindEnclosingBracketGroup (since the variable_re
- # probably doesn't match the entire command if it contained
- # nested variables).
- replace_end = replace_start + c_end
-
- # Find the "real" replacement, matching the appropriate closing
- # paren, and adjust the replacement start and end.
- replacement = input_str[replace_start:replace_end]
-
- # Figure out what the contents of the variable parens are.
- contents_start = replace_start + c_start + 1
- contents_end = replace_end - 1
- contents = input_str[contents_start:contents_end]
-
- # Do filter substitution now for <|().
- # Admittedly, this is different than the evaluation order in other
- # contexts. However, since filtration has no chance to run on <|(),
- # this seems like the only obvious way to give them access to filters.
- if file_list:
- processed_variables = gyp.simple_copy.deepcopy(variables)
- ProcessListFiltersInDict(contents, processed_variables)
- # Recurse to expand variables in the contents
- contents = ExpandVariables(contents, phase,
- processed_variables, build_file)
- else:
- # Recurse to expand variables in the contents
- contents = ExpandVariables(contents, phase, variables, build_file)
-
- # Strip off leading/trailing whitespace so that variable matches are
- # simpler below (and because they are rarely needed).
- contents = contents.strip()
-
- # expand_to_list is true if an @ variant is used. In that case,
- # the expansion should result in a list. Note that the caller
- # is to be expecting a list in return, and not all callers do
- # because not all are working in list context. Also, for list
- # expansions, there can be no other text besides the variable
- # expansion in the input string.
- expand_to_list = '@' in match['type'] and input_str == replacement
-
- if run_command or file_list:
- # Find the build file's directory, so commands can be run or file lists
- # generated relative to it.
- build_file_dir = os.path.dirname(build_file)
- if build_file_dir == '' and not file_list:
- # If build_file is just a leaf filename indicating a file in the
- # current directory, build_file_dir might be an empty string. Set
- # it to None to signal to subprocess.Popen that it should run the
- # command in the current directory.
- build_file_dir = None
-
- # Support <|(listfile.txt ...) which generates a file
- # containing items from a gyp list, generated at gyp time.
- # This works around actions/rules which have more inputs than will
- # fit on the command line.
- if file_list:
- if type(contents) is list:
- contents_list = contents
- else:
- contents_list = contents.split(' ')
- replacement = contents_list[0]
- if os.path.isabs(replacement):
- raise GypError('| cannot handle absolute paths, got "%s"' % replacement)
-
- if not generator_filelist_paths:
- path = os.path.join(build_file_dir, replacement)
- else:
- if os.path.isabs(build_file_dir):
- toplevel = generator_filelist_paths['toplevel']
- rel_build_file_dir = gyp.common.RelativePath(build_file_dir, toplevel)
- else:
- rel_build_file_dir = build_file_dir
- qualified_out_dir = generator_filelist_paths['qualified_out_dir']
- path = os.path.join(qualified_out_dir, rel_build_file_dir, replacement)
- gyp.common.EnsureDirExists(path)
-
- replacement = gyp.common.RelativePath(path, build_file_dir)
- f = gyp.common.WriteOnDiff(path)
- for i in contents_list[1:]:
- f.write('%s\n' % i)
- f.close()
-
- elif run_command:
- use_shell = True
- if match['is_array']:
- contents = eval(contents)
- use_shell = False
-
- # Check for a cached value to avoid executing commands, or generating
- # file lists more than once. The cache key contains the command to be
- # run as well as the directory to run it from, to account for commands
- # that depend on their current directory.
- # TODO(http://code.google.com/p/gyp/issues/detail?id=111): In theory,
- # someone could author a set of GYP files where each time the command
- # is invoked it produces different output by design. When the need
- # arises, the syntax should be extended to support no caching off a
- # command's output so it is run every time.
- cache_key = (str(contents), build_file_dir)
- cached_value = cached_command_results.get(cache_key, None)
- if cached_value is None:
- gyp.DebugOutput(gyp.DEBUG_VARIABLES,
- "Executing command '%s' in directory '%s'",
- contents, build_file_dir)
-
- replacement = ''
-
- if command_string == 'pymod_do_main':
- # <!pymod_do_main(modulename param eters) loads |modulename| as a
- # python module and then calls that module's DoMain() function,
- # passing ["param", "eters"] as a single list argument. For modules
- # that don't load quickly, this can be faster than
- # <!(python modulename param eters). Do this in |build_file_dir|.
- oldwd = os.getcwd() # Python doesn't like os.open('.'): no fchdir.
- if build_file_dir: # build_file_dir may be None (see above).
- os.chdir(build_file_dir)
- try:
-
- parsed_contents = shlex.split(contents)
- try:
- py_module = __import__(parsed_contents[0])
- except ImportError as e:
- raise GypError("Error importing pymod_do_main"
- "module (%s): %s" % (parsed_contents[0], e))
- replacement = str(py_module.DoMain(parsed_contents[1:])).rstrip()
- finally:
- os.chdir(oldwd)
- assert replacement != None
- elif command_string:
- raise GypError("Unknown command string '%s' in '%s'." %
- (command_string, contents))
- else:
- # Fix up command with platform specific workarounds.
- contents = FixupPlatformCommand(contents)
- try:
- p = subprocess.Popen(contents, shell=use_shell,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- stdin=subprocess.PIPE,
- cwd=build_file_dir)
- except Exception, e:
- raise GypError("%s while executing command '%s' in %s" %
- (e, contents, build_file))
-
- p_stdout, p_stderr = p.communicate('')
-
- if p.wait() != 0 or p_stderr:
- sys.stderr.write(p_stderr)
- # Simulate check_call behavior, since check_call only exists
- # in python 2.5 and later.
- raise GypError("Call to '%s' returned exit status %d while in %s." %
- (contents, p.returncode, build_file))
- replacement = p_stdout.rstrip()
-
- cached_command_results[cache_key] = replacement
- else:
- gyp.DebugOutput(gyp.DEBUG_VARIABLES,
- "Had cache value for command '%s' in directory '%s'",
- contents,build_file_dir)
- replacement = cached_value
-
- else:
- if not contents in variables:
- if contents[-1] in ['!', '/']:
- # In order to allow cross-compiles (nacl) to happen more naturally,
- # we will allow references to >(sources/) etc. to resolve to
- # and empty list if undefined. This allows actions to:
- # 'action!': [
- # '>@(_sources!)',
- # ],
- # 'action/': [
- # '>@(_sources/)',
- # ],
- replacement = []
- else:
- raise GypError('Undefined variable ' + contents +
- ' in ' + build_file)
- else:
- replacement = variables[contents]
-
- if type(replacement) is list:
- for item in replacement:
- if not contents[-1] == '/' and type(item) not in (str, int):
- raise GypError('Variable ' + contents +
- ' must expand to a string or list of strings; ' +
- 'list contains a ' +
- item.__class__.__name__)
- # Run through the list and handle variable expansions in it. Since
- # the list is guaranteed not to contain dicts, this won't do anything
- # with conditions sections.
- ProcessVariablesAndConditionsInList(replacement, phase, variables,
- build_file)
- elif type(replacement) not in (str, int):
- raise GypError('Variable ' + contents +
- ' must expand to a string or list of strings; ' +
- 'found a ' + replacement.__class__.__name__)
-
- if expand_to_list:
- # Expanding in list context. It's guaranteed that there's only one
- # replacement to do in |input_str| and that it's this replacement. See
- # above.
- if type(replacement) is list:
- # If it's already a list, make a copy.
- output = replacement[:]
- else:
- # Split it the same way sh would split arguments.
- output = shlex.split(str(replacement))
- else:
- # Expanding in string context.
- encoded_replacement = ''
- if type(replacement) is list:
- # When expanding a list into string context, turn the list items
- # into a string in a way that will work with a subprocess call.
- #
- # TODO(mark): This isn't completely correct. This should
- # call a generator-provided function that observes the
- # proper list-to-argument quoting rules on a specific
- # platform instead of just calling the POSIX encoding
- # routine.
- encoded_replacement = gyp.common.EncodePOSIXShellList(replacement)
- else:
- encoded_replacement = replacement
-
- output = output[:replace_start] + str(encoded_replacement) + \
- output[replace_end:]
- # Prepare for the next match iteration.
- input_str = output
-
- if output == input:
- gyp.DebugOutput(gyp.DEBUG_VARIABLES,
- "Found only identity matches on %r, avoiding infinite "
- "recursion.",
- output)
- else:
- # Look for more matches now that we've replaced some, to deal with
- # expanding local variables (variables defined in the same
- # variables block as this one).
- gyp.DebugOutput(gyp.DEBUG_VARIABLES, "Found output %r, recursing.", output)
- if type(output) is list:
- if output and type(output[0]) is list:
- # Leave output alone if it's a list of lists.
- # We don't want such lists to be stringified.
- pass
- else:
- new_output = []
- for item in output:
- new_output.append(
- ExpandVariables(item, phase, variables, build_file))
- output = new_output
- else:
- output = ExpandVariables(output, phase, variables, build_file)
-
- # Convert all strings that are canonically-represented integers into integers.
- if type(output) is list:
- for index in xrange(0, len(output)):
- if IsStrCanonicalInt(output[index]):
- output[index] = int(output[index])
- elif IsStrCanonicalInt(output):
- output = int(output)
-
- return output
-
-# The same condition is often evaluated over and over again so it
-# makes sense to cache as much as possible between evaluations.
-cached_conditions_asts = {}
-
-def EvalCondition(condition, conditions_key, phase, variables, build_file):
- """Returns the dict that should be used or None if the result was
- that nothing should be used."""
- if type(condition) is not list:
- raise GypError(conditions_key + ' must be a list')
- if len(condition) < 2:
- # It's possible that condition[0] won't work in which case this
- # attempt will raise its own IndexError. That's probably fine.
- raise GypError(conditions_key + ' ' + condition[0] +
- ' must be at least length 2, not ' + str(len(condition)))
-
- i = 0
- result = None
- while i < len(condition):
- cond_expr = condition[i]
- true_dict = condition[i + 1]
- if type(true_dict) is not dict:
- raise GypError('{} {} must be followed by a dictionary, not {}'.format(
- conditions_key, cond_expr, type(true_dict)))
- if len(condition) > i + 2 and type(condition[i + 2]) is dict:
- false_dict = condition[i + 2]
- i = i + 3
- if i != len(condition):
- raise GypError('{} {} has {} unexpected trailing items'.format(
- conditions_key, cond_expr, len(condition) - i))
- else:
- false_dict = None
- i = i + 2
- if result == None:
- result = EvalSingleCondition(
- cond_expr, true_dict, false_dict, phase, variables, build_file)
-
- return result
-
-
-def EvalSingleCondition(
- cond_expr, true_dict, false_dict, phase, variables, build_file):
- """Returns true_dict if cond_expr evaluates to true, and false_dict
- otherwise."""
- # Do expansions on the condition itself. Since the conditon can naturally
- # contain variable references without needing to resort to GYP expansion
- # syntax, this is of dubious value for variables, but someone might want to
- # use a command expansion directly inside a condition.
- cond_expr_expanded = ExpandVariables(cond_expr, phase, variables,
- build_file)
- if type(cond_expr_expanded) not in (str, int):
- raise ValueError(
- 'Variable expansion in this context permits str and int ' + \
- 'only, found ' + cond_expr_expanded.__class__.__name__)
-
- try:
- if cond_expr_expanded in cached_conditions_asts:
- ast_code = cached_conditions_asts[cond_expr_expanded]
- else:
- ast_code = compile(cond_expr_expanded, '<string>', 'eval')
- cached_conditions_asts[cond_expr_expanded] = ast_code
- if eval(ast_code, {'__builtins__': None}, variables):
- return true_dict
- return false_dict
- except SyntaxError, e:
- syntax_error = SyntaxError('%s while evaluating condition \'%s\' in %s '
- 'at character %d.' %
- (str(e.args[0]), e.text, build_file, e.offset),
- e.filename, e.lineno, e.offset, e.text)
- raise syntax_error
- except NameError, e:
- gyp.common.ExceptionAppend(e, 'while evaluating condition \'%s\' in %s' %
- (cond_expr_expanded, build_file))
- raise GypError(e)
-
-
-def ProcessConditionsInDict(the_dict, phase, variables, build_file):
- # Process a 'conditions' or 'target_conditions' section in the_dict,
- # depending on phase.
- # early -> conditions
- # late -> target_conditions
- # latelate -> no conditions
- #
- # Each item in a conditions list consists of cond_expr, a string expression
- # evaluated as the condition, and true_dict, a dict that will be merged into
- # the_dict if cond_expr evaluates to true. Optionally, a third item,
- # false_dict, may be present. false_dict is merged into the_dict if
- # cond_expr evaluates to false.
- #
- # Any dict merged into the_dict will be recursively processed for nested
- # conditionals and other expansions, also according to phase, immediately
- # prior to being merged.
-
- if phase == PHASE_EARLY:
- conditions_key = 'conditions'
- elif phase == PHASE_LATE:
- conditions_key = 'target_conditions'
- elif phase == PHASE_LATELATE:
- return
- else:
- assert False
-
- if not conditions_key in the_dict:
- return
-
- conditions_list = the_dict[conditions_key]
- # Unhook the conditions list, it's no longer needed.
- del the_dict[conditions_key]
-
- for condition in conditions_list:
- merge_dict = EvalCondition(condition, conditions_key, phase, variables,
- build_file)
-
- if merge_dict != None:
- # Expand variables and nested conditinals in the merge_dict before
- # merging it.
- ProcessVariablesAndConditionsInDict(merge_dict, phase,
- variables, build_file)
-
- MergeDicts(the_dict, merge_dict, build_file, build_file)
-
-
-def LoadAutomaticVariablesFromDict(variables, the_dict):
- # Any keys with plain string values in the_dict become automatic variables.
- # The variable name is the key name with a "_" character prepended.
- for key, value in the_dict.iteritems():
- if type(value) in (str, int, list):
- variables['_' + key] = value
-
-
-def LoadVariablesFromVariablesDict(variables, the_dict, the_dict_key):
- # Any keys in the_dict's "variables" dict, if it has one, becomes a
- # variable. The variable name is the key name in the "variables" dict.
- # Variables that end with the % character are set only if they are unset in
- # the variables dict. the_dict_key is the name of the key that accesses
- # the_dict in the_dict's parent dict. If the_dict's parent is not a dict
- # (it could be a list or it could be parentless because it is a root dict),
- # the_dict_key will be None.
- for key, value in the_dict.get('variables', {}).iteritems():
- if type(value) not in (str, int, list):
- continue
-
- if key.endswith('%'):
- variable_name = key[:-1]
- if variable_name in variables:
- # If the variable is already set, don't set it.
- continue
- if the_dict_key is 'variables' and variable_name in the_dict:
- # If the variable is set without a % in the_dict, and the_dict is a
- # variables dict (making |variables| a varaibles sub-dict of a
- # variables dict), use the_dict's definition.
- value = the_dict[variable_name]
- else:
- variable_name = key
-
- variables[variable_name] = value
-
-
-def ProcessVariablesAndConditionsInDict(the_dict, phase, variables_in,
- build_file, the_dict_key=None):
- """Handle all variable and command expansion and conditional evaluation.
-
- This function is the public entry point for all variable expansions and
- conditional evaluations. The variables_in dictionary will not be modified
- by this function.
- """
-
- # Make a copy of the variables_in dict that can be modified during the
- # loading of automatics and the loading of the variables dict.
- variables = variables_in.copy()
- LoadAutomaticVariablesFromDict(variables, the_dict)
-
- if 'variables' in the_dict:
- # Make sure all the local variables are added to the variables
- # list before we process them so that you can reference one
- # variable from another. They will be fully expanded by recursion
- # in ExpandVariables.
- for key, value in the_dict['variables'].iteritems():
- variables[key] = value
-
- # Handle the associated variables dict first, so that any variable
- # references within can be resolved prior to using them as variables.
- # Pass a copy of the variables dict to avoid having it be tainted.
- # Otherwise, it would have extra automatics added for everything that
- # should just be an ordinary variable in this scope.
- ProcessVariablesAndConditionsInDict(the_dict['variables'], phase,
- variables, build_file, 'variables')
-
- LoadVariablesFromVariablesDict(variables, the_dict, the_dict_key)
-
- for key, value in the_dict.iteritems():
- # Skip "variables", which was already processed if present.
- if key != 'variables' and type(value) is str:
- expanded = ExpandVariables(value, phase, variables, build_file)
- if type(expanded) not in (str, int):
- raise ValueError(
- 'Variable expansion in this context permits str and int ' + \
- 'only, found ' + expanded.__class__.__name__ + ' for ' + key)
- the_dict[key] = expanded
-
- # Variable expansion may have resulted in changes to automatics. Reload.
- # TODO(mark): Optimization: only reload if no changes were made.
- variables = variables_in.copy()
- LoadAutomaticVariablesFromDict(variables, the_dict)
- LoadVariablesFromVariablesDict(variables, the_dict, the_dict_key)
-
- # Process conditions in this dict. This is done after variable expansion
- # so that conditions may take advantage of expanded variables. For example,
- # if the_dict contains:
- # {'type': '<(library_type)',
- # 'conditions': [['_type=="static_library"', { ... }]]},
- # _type, as used in the condition, will only be set to the value of
- # library_type if variable expansion is performed before condition
- # processing. However, condition processing should occur prior to recursion
- # so that variables (both automatic and "variables" dict type) may be
- # adjusted by conditions sections, merged into the_dict, and have the
- # intended impact on contained dicts.
- #
- # This arrangement means that a "conditions" section containing a "variables"
- # section will only have those variables effective in subdicts, not in
- # the_dict. The workaround is to put a "conditions" section within a
- # "variables" section. For example:
- # {'conditions': [['os=="mac"', {'variables': {'define': 'IS_MAC'}}]],
- # 'defines': ['<(define)'],
- # 'my_subdict': {'defines': ['<(define)']}},
- # will not result in "IS_MAC" being appended to the "defines" list in the
- # current scope but would result in it being appended to the "defines" list
- # within "my_subdict". By comparison:
- # {'variables': {'conditions': [['os=="mac"', {'define': 'IS_MAC'}]]},
- # 'defines': ['<(define)'],
- # 'my_subdict': {'defines': ['<(define)']}},
- # will append "IS_MAC" to both "defines" lists.
-
- # Evaluate conditions sections, allowing variable expansions within them
- # as well as nested conditionals. This will process a 'conditions' or
- # 'target_conditions' section, perform appropriate merging and recursive
- # conditional and variable processing, and then remove the conditions section
- # from the_dict if it is present.
- ProcessConditionsInDict(the_dict, phase, variables, build_file)
-
- # Conditional processing may have resulted in changes to automatics or the
- # variables dict. Reload.
- variables = variables_in.copy()
- LoadAutomaticVariablesFromDict(variables, the_dict)
- LoadVariablesFromVariablesDict(variables, the_dict, the_dict_key)
-
- # Recurse into child dicts, or process child lists which may result in
- # further recursion into descendant dicts.
- for key, value in the_dict.iteritems():
- # Skip "variables" and string values, which were already processed if
- # present.
- if key == 'variables' or type(value) is str:
- continue
- if type(value) is dict:
- # Pass a copy of the variables dict so that subdicts can't influence
- # parents.
- ProcessVariablesAndConditionsInDict(value, phase, variables,
- build_file, key)
- elif type(value) is list:
- # The list itself can't influence the variables dict, and
- # ProcessVariablesAndConditionsInList will make copies of the variables
- # dict if it needs to pass it to something that can influence it. No
- # copy is necessary here.
- ProcessVariablesAndConditionsInList(value, phase, variables,
- build_file)
- elif type(value) is not int:
- raise TypeError('Unknown type ' + value.__class__.__name__ + \
- ' for ' + key)
-
-
-def ProcessVariablesAndConditionsInList(the_list, phase, variables,
- build_file):
- # Iterate using an index so that new values can be assigned into the_list.
- index = 0
- while index < len(the_list):
- item = the_list[index]
- if type(item) is dict:
- # Make a copy of the variables dict so that it won't influence anything
- # outside of its own scope.
- ProcessVariablesAndConditionsInDict(item, phase, variables, build_file)
- elif type(item) is list:
- ProcessVariablesAndConditionsInList(item, phase, variables, build_file)
- elif type(item) is str:
- expanded = ExpandVariables(item, phase, variables, build_file)
- if type(expanded) in (str, int):
- the_list[index] = expanded
- elif type(expanded) is list:
- the_list[index:index+1] = expanded
- index += len(expanded)
-
- # index now identifies the next item to examine. Continue right now
- # without falling into the index increment below.
- continue
- else:
- raise ValueError(
- 'Variable expansion in this context permits strings and ' + \
- 'lists only, found ' + expanded.__class__.__name__ + ' at ' + \
- index)
- elif type(item) is not int:
- raise TypeError('Unknown type ' + item.__class__.__name__ + \
- ' at index ' + index)
- index = index + 1
-
-
-def BuildTargetsDict(data):
- """Builds a dict mapping fully-qualified target names to their target dicts.
-
- |data| is a dict mapping loaded build files by pathname relative to the
- current directory. Values in |data| are build file contents. For each
- |data| value with a "targets" key, the value of the "targets" key is taken
- as a list containing target dicts. Each target's fully-qualified name is
- constructed from the pathname of the build file (|data| key) and its
- "target_name" property. These fully-qualified names are used as the keys
- in the returned dict. These keys provide access to the target dicts,
- the dicts in the "targets" lists.
- """
-
- targets = {}
- for build_file in data['target_build_files']:
- for target in data[build_file].get('targets', []):
- target_name = gyp.common.QualifiedTarget(build_file,
- target['target_name'],
- target['toolset'])
- if target_name in targets:
- raise GypError('Duplicate target definitions for ' + target_name)
- targets[target_name] = target
-
- return targets
-
-
-def QualifyDependencies(targets):
- """Make dependency links fully-qualified relative to the current directory.
-
- |targets| is a dict mapping fully-qualified target names to their target
- dicts. For each target in this dict, keys known to contain dependency
- links are examined, and any dependencies referenced will be rewritten
- so that they are fully-qualified and relative to the current directory.
- All rewritten dependencies are suitable for use as keys to |targets| or a
- similar dict.
- """
-
- all_dependency_sections = [dep + op
- for dep in dependency_sections
- for op in ('', '!', '/')]
-
- for target, target_dict in targets.iteritems():
- target_build_file = gyp.common.BuildFile(target)
- toolset = target_dict['toolset']
- for dependency_key in all_dependency_sections:
- dependencies = target_dict.get(dependency_key, [])
- for index in xrange(0, len(dependencies)):
- dep_file, dep_target, dep_toolset = gyp.common.ResolveTarget(
- target_build_file, dependencies[index], toolset)
- if not multiple_toolsets:
- # Ignore toolset specification in the dependency if it is specified.
- dep_toolset = toolset
- dependency = gyp.common.QualifiedTarget(dep_file,
- dep_target,
- dep_toolset)
- dependencies[index] = dependency
-
- # Make sure anything appearing in a list other than "dependencies" also
- # appears in the "dependencies" list.
- if dependency_key != 'dependencies' and \
- dependency not in target_dict['dependencies']:
- raise GypError('Found ' + dependency + ' in ' + dependency_key +
- ' of ' + target + ', but not in dependencies')
-
-
-def ExpandWildcardDependencies(targets, data):
- """Expands dependencies specified as build_file:*.
-
- For each target in |targets|, examines sections containing links to other
- targets. If any such section contains a link of the form build_file:*, it
- is taken as a wildcard link, and is expanded to list each target in
- build_file. The |data| dict provides access to build file dicts.
-
- Any target that does not wish to be included by wildcard can provide an
- optional "suppress_wildcard" key in its target dict. When present and
- true, a wildcard dependency link will not include such targets.
-
- All dependency names, including the keys to |targets| and the values in each
- dependency list, must be qualified when this function is called.
- """
-
- for target, target_dict in targets.iteritems():
- toolset = target_dict['toolset']
- target_build_file = gyp.common.BuildFile(target)
- for dependency_key in dependency_sections:
- dependencies = target_dict.get(dependency_key, [])
-
- # Loop this way instead of "for dependency in" or "for index in xrange"
- # because the dependencies list will be modified within the loop body.
- index = 0
- while index < len(dependencies):
- (dependency_build_file, dependency_target, dependency_toolset) = \
- gyp.common.ParseQualifiedTarget(dependencies[index])
- if dependency_target != '*' and dependency_toolset != '*':
- # Not a wildcard. Keep it moving.
- index = index + 1
- continue
-
- if dependency_build_file == target_build_file:
- # It's an error for a target to depend on all other targets in
- # the same file, because a target cannot depend on itself.
- raise GypError('Found wildcard in ' + dependency_key + ' of ' +
- target + ' referring to same build file')
-
- # Take the wildcard out and adjust the index so that the next
- # dependency in the list will be processed the next time through the
- # loop.
- del dependencies[index]
- index = index - 1
-
- # Loop through the targets in the other build file, adding them to
- # this target's list of dependencies in place of the removed
- # wildcard.
- dependency_target_dicts = data[dependency_build_file]['targets']
- for dependency_target_dict in dependency_target_dicts:
- if int(dependency_target_dict.get('suppress_wildcard', False)):
- continue
- dependency_target_name = dependency_target_dict['target_name']
- if (dependency_target != '*' and
- dependency_target != dependency_target_name):
- continue
- dependency_target_toolset = dependency_target_dict['toolset']
- if (dependency_toolset != '*' and
- dependency_toolset != dependency_target_toolset):
- continue
- dependency = gyp.common.QualifiedTarget(dependency_build_file,
- dependency_target_name,
- dependency_target_toolset)
- index = index + 1
- dependencies.insert(index, dependency)
-
- index = index + 1
-
-
-def Unify(l):
- """Removes duplicate elements from l, keeping the first element."""
- seen = {}
- return [seen.setdefault(e, e) for e in l if e not in seen]
-
-
-def RemoveDuplicateDependencies(targets):
- """Makes sure every dependency appears only once in all targets's dependency
- lists."""
- for target_name, target_dict in targets.iteritems():
- for dependency_key in dependency_sections:
- dependencies = target_dict.get(dependency_key, [])
- if dependencies:
- target_dict[dependency_key] = Unify(dependencies)
-
-
-def Filter(l, item):
- """Removes item from l."""
- res = {}
- return [res.setdefault(e, e) for e in l if e != item]
-
-
-def RemoveSelfDependencies(targets):
- """Remove self dependencies from targets that have the prune_self_dependency
- variable set."""
- for target_name, target_dict in targets.iteritems():
- for dependency_key in dependency_sections:
- dependencies = target_dict.get(dependency_key, [])
- if dependencies:
- for t in dependencies:
- if t == target_name:
- if targets[t].get('variables', {}).get('prune_self_dependency', 0):
- target_dict[dependency_key] = Filter(dependencies, target_name)
-
-
-def RemoveLinkDependenciesFromNoneTargets(targets):
- """Remove dependencies having the 'link_dependency' attribute from the 'none'
- targets."""
- for target_name, target_dict in targets.iteritems():
- for dependency_key in dependency_sections:
- dependencies = target_dict.get(dependency_key, [])
- if dependencies:
- for t in dependencies:
- if target_dict.get('type', None) == 'none':
- if targets[t].get('variables', {}).get('link_dependency', 0):
- target_dict[dependency_key] = \
- Filter(target_dict[dependency_key], t)
-
-
-class DependencyGraphNode(object):
- """
-
- Attributes:
- ref: A reference to an object that this DependencyGraphNode represents.
- dependencies: List of DependencyGraphNodes on which this one depends.
- dependents: List of DependencyGraphNodes that depend on this one.
- """
-
- class CircularException(GypError):
- pass
-
- def __init__(self, ref):
- self.ref = ref
- self.dependencies = []
- self.dependents = []
-
- def __repr__(self):
- return '<DependencyGraphNode: %r>' % self.ref
-
- def FlattenToList(self):
- # flat_list is the sorted list of dependencies - actually, the list items
- # are the "ref" attributes of DependencyGraphNodes. Every target will
- # appear in flat_list after all of its dependencies, and before all of its
- # dependents.
- flat_list = OrderedSet()
-
- # in_degree_zeros is the list of DependencyGraphNodes that have no
- # dependencies not in flat_list. Initially, it is a copy of the children
- # of this node, because when the graph was built, nodes with no
- # dependencies were made implicit dependents of the root node.
- in_degree_zeros = set(self.dependents[:])
-
- while in_degree_zeros:
- # Nodes in in_degree_zeros have no dependencies not in flat_list, so they
- # can be appended to flat_list. Take these nodes out of in_degree_zeros
- # as work progresses, so that the next node to process from the list can
- # always be accessed at a consistent position.
- node = in_degree_zeros.pop()
- flat_list.add(node.ref)
-
- # Look at dependents of the node just added to flat_list. Some of them
- # may now belong in in_degree_zeros.
- for node_dependent in node.dependents:
- is_in_degree_zero = True
- # TODO: We want to check through the
- # node_dependent.dependencies list but if it's long and we
- # always start at the beginning, then we get O(n^2) behaviour.
- for node_dependent_dependency in node_dependent.dependencies:
- if not node_dependent_dependency.ref in flat_list:
- # The dependent one or more dependencies not in flat_list. There
- # will be more chances to add it to flat_list when examining
- # it again as a dependent of those other dependencies, provided
- # that there are no cycles.
- is_in_degree_zero = False
- break
-
- if is_in_degree_zero:
- # All of the dependent's dependencies are already in flat_list. Add
- # it to in_degree_zeros where it will be processed in a future
- # iteration of the outer loop.
- in_degree_zeros.add(node_dependent)
-
- return list(flat_list)
-
- def FindCycles(self):
- """
- Returns a list of cycles in the graph, where each cycle is its own list.
- """
- results = []
- visited = set()
-
- def Visit(node, path):
- for child in node.dependents:
- if child in path:
- results.append([child] + path[:path.index(child) + 1])
- elif not child in visited:
- visited.add(child)
- Visit(child, [child] + path)
-
- visited.add(self)
- Visit(self, [self])
-
- return results
-
- def DirectDependencies(self, dependencies=None):
- """Returns a list of just direct dependencies."""
- if dependencies == None:
- dependencies = []
-
- for dependency in self.dependencies:
- # Check for None, corresponding to the root node.
- if dependency.ref != None and dependency.ref not in dependencies:
- dependencies.append(dependency.ref)
-
- return dependencies
-
- def _AddImportedDependencies(self, targets, dependencies=None):
- """Given a list of direct dependencies, adds indirect dependencies that
- other dependencies have declared to export their settings.
-
- This method does not operate on self. Rather, it operates on the list
- of dependencies in the |dependencies| argument. For each dependency in
- that list, if any declares that it exports the settings of one of its
- own dependencies, those dependencies whose settings are "passed through"
- are added to the list. As new items are added to the list, they too will
- be processed, so it is possible to import settings through multiple levels
- of dependencies.
-
- This method is not terribly useful on its own, it depends on being
- "primed" with a list of direct dependencies such as one provided by
- DirectDependencies. DirectAndImportedDependencies is intended to be the
- public entry point.
- """
-
- if dependencies == None:
- dependencies = []
-
- index = 0
- while index < len(dependencies):
- dependency = dependencies[index]
- dependency_dict = targets[dependency]
- # Add any dependencies whose settings should be imported to the list
- # if not already present. Newly-added items will be checked for
- # their own imports when the list iteration reaches them.
- # Rather than simply appending new items, insert them after the
- # dependency that exported them. This is done to more closely match
- # the depth-first method used by DeepDependencies.
- add_index = 1
- for imported_dependency in \
- dependency_dict.get('export_dependent_settings', []):
- if imported_dependency not in dependencies:
- dependencies.insert(index + add_index, imported_dependency)
- add_index = add_index + 1
- index = index + 1
-
- return dependencies
-
- def DirectAndImportedDependencies(self, targets, dependencies=None):
- """Returns a list of a target's direct dependencies and all indirect
- dependencies that a dependency has advertised settings should be exported
- through the dependency for.
- """
-
- dependencies = self.DirectDependencies(dependencies)
- return self._AddImportedDependencies(targets, dependencies)
-
- def DeepDependencies(self, dependencies=None):
- """Returns an OrderedSet of all of a target's dependencies, recursively."""
- if dependencies is None:
- # Using a list to get ordered output and a set to do fast "is it
- # already added" checks.
- dependencies = OrderedSet()
-
- for dependency in self.dependencies:
- # Check for None, corresponding to the root node.
- if dependency.ref is None:
- continue
- if dependency.ref not in dependencies:
- dependency.DeepDependencies(dependencies)
- dependencies.add(dependency.ref)
-
- return dependencies
-
- def _LinkDependenciesInternal(self, targets, include_shared_libraries,
- dependencies=None, initial=True):
- """Returns an OrderedSet of dependency targets that are linked
- into this target.
-
- This function has a split personality, depending on the setting of
- |initial|. Outside callers should always leave |initial| at its default
- setting.
-
- When adding a target to the list of dependencies, this function will
- recurse into itself with |initial| set to False, to collect dependencies
- that are linked into the linkable target for which the list is being built.
-
- If |include_shared_libraries| is False, the resulting dependencies will not
- include shared_library targets that are linked into this target.
- """
- if dependencies is None:
- # Using a list to get ordered output and a set to do fast "is it
- # already added" checks.
- dependencies = OrderedSet()
-
- # Check for None, corresponding to the root node.
- if self.ref is None:
- return dependencies
-
- # It's kind of sucky that |targets| has to be passed into this function,
- # but that's presently the easiest way to access the target dicts so that
- # this function can find target types.
-
- if 'target_name' not in targets[self.ref]:
- raise GypError("Missing 'target_name' field in target.")
-
- if 'type' not in targets[self.ref]:
- raise GypError("Missing 'type' field in target %s" %
- targets[self.ref]['target_name'])
-
- target_type = targets[self.ref]['type']
-
- is_linkable = target_type in linkable_types
-
- if initial and not is_linkable:
- # If this is the first target being examined and it's not linkable,
- # return an empty list of link dependencies, because the link
- # dependencies are intended to apply to the target itself (initial is
- # True) and this target won't be linked.
- return dependencies
-
- # Don't traverse 'none' targets if explicitly excluded.
- if (target_type == 'none' and
- not targets[self.ref].get('dependencies_traverse', True)):
- dependencies.add(self.ref)
- return dependencies
-
- # Executables, mac kernel extensions and loadable modules are already fully
- # and finally linked. Nothing else can be a link dependency of them, there
- # can only be dependencies in the sense that a dependent target might run
- # an executable or load the loadable_module.
- if not initial and target_type in ('executable', 'loadable_module',
- 'mac_kernel_extension'):
- return dependencies
-
- # Shared libraries are already fully linked. They should only be included
- # in |dependencies| when adjusting static library dependencies (in order to
- # link against the shared_library's import lib), but should not be included
- # in |dependencies| when propagating link_settings.
- # The |include_shared_libraries| flag controls which of these two cases we
- # are handling.
- if (not initial and target_type == 'shared_library' and
- not include_shared_libraries):
- return dependencies
-
- # The target is linkable, add it to the list of link dependencies.
- if self.ref not in dependencies:
- dependencies.add(self.ref)
- if initial or not is_linkable:
- # If this is a subsequent target and it's linkable, don't look any
- # further for linkable dependencies, as they'll already be linked into
- # this target linkable. Always look at dependencies of the initial
- # target, and always look at dependencies of non-linkables.
- for dependency in self.dependencies:
- dependency._LinkDependenciesInternal(targets,
- include_shared_libraries,
- dependencies, False)
-
- return dependencies
-
- def DependenciesForLinkSettings(self, targets):
- """
- Returns a list of dependency targets whose link_settings should be merged
- into this target.
- """
-
- # TODO(sbaig) Currently, chrome depends on the bug that shared libraries'
- # link_settings are propagated. So for now, we will allow it, unless the
- # 'allow_sharedlib_linksettings_propagation' flag is explicitly set to
- # False. Once chrome is fixed, we can remove this flag.
- include_shared_libraries = \
- targets[self.ref].get('allow_sharedlib_linksettings_propagation', True)
- return self._LinkDependenciesInternal(targets, include_shared_libraries)
-
- def DependenciesToLinkAgainst(self, targets):
- """
- Returns a list of dependency targets that are linked into this target.
- """
- return self._LinkDependenciesInternal(targets, True)
-
-
-def BuildDependencyList(targets):
- # Create a DependencyGraphNode for each target. Put it into a dict for easy
- # access.
- dependency_nodes = {}
- for target, spec in targets.iteritems():
- if target not in dependency_nodes:
- dependency_nodes[target] = DependencyGraphNode(target)
-
- # Set up the dependency links. Targets that have no dependencies are treated
- # as dependent on root_node.
- root_node = DependencyGraphNode(None)
- for target, spec in targets.iteritems():
- target_node = dependency_nodes[target]
- target_build_file = gyp.common.BuildFile(target)
- dependencies = spec.get('dependencies')
- if not dependencies:
- target_node.dependencies = [root_node]
- root_node.dependents.append(target_node)
- else:
- for dependency in dependencies:
- dependency_node = dependency_nodes.get(dependency)
- if not dependency_node:
- raise GypError("Dependency '%s' not found while "
- "trying to load target %s" % (dependency, target))
- target_node.dependencies.append(dependency_node)
- dependency_node.dependents.append(target_node)
-
- flat_list = root_node.FlattenToList()
-
- # If there's anything left unvisited, there must be a circular dependency
- # (cycle).
- if len(flat_list) != len(targets):
- if not root_node.dependents:
- # If all targets have dependencies, add the first target as a dependent
- # of root_node so that the cycle can be discovered from root_node.
- target = targets.keys()[0]
- target_node = dependency_nodes[target]
- target_node.dependencies.append(root_node)
- root_node.dependents.append(target_node)
-
- cycles = []
- for cycle in root_node.FindCycles():
- paths = [node.ref for node in cycle]
- cycles.append('Cycle: %s' % ' -> '.join(paths))
- raise DependencyGraphNode.CircularException(
- 'Cycles in dependency graph detected:\n' + '\n'.join(cycles))
-
- return [dependency_nodes, flat_list]
-
-
-def VerifyNoGYPFileCircularDependencies(targets):
- # Create a DependencyGraphNode for each gyp file containing a target. Put
- # it into a dict for easy access.
- dependency_nodes = {}
- for target in targets.iterkeys():
- build_file = gyp.common.BuildFile(target)
- if not build_file in dependency_nodes:
- dependency_nodes[build_file] = DependencyGraphNode(build_file)
-
- # Set up the dependency links.
- for target, spec in targets.iteritems():
- build_file = gyp.common.BuildFile(target)
- build_file_node = dependency_nodes[build_file]
- target_dependencies = spec.get('dependencies', [])
- for dependency in target_dependencies:
- try:
- dependency_build_file = gyp.common.BuildFile(dependency)
- except GypError, e:
- gyp.common.ExceptionAppend(
- e, 'while computing dependencies of .gyp file %s' % build_file)
- raise
-
- if dependency_build_file == build_file:
- # A .gyp file is allowed to refer back to itself.
- continue
- dependency_node = dependency_nodes.get(dependency_build_file)
- if not dependency_node:
- raise GypError("Dependancy '%s' not found" % dependency_build_file)
- if dependency_node not in build_file_node.dependencies:
- build_file_node.dependencies.append(dependency_node)
- dependency_node.dependents.append(build_file_node)
-
-
- # Files that have no dependencies are treated as dependent on root_node.
- root_node = DependencyGraphNode(None)
- for build_file_node in dependency_nodes.itervalues():
- if len(build_file_node.dependencies) == 0:
- build_file_node.dependencies.append(root_node)
- root_node.dependents.append(build_file_node)
-
- flat_list = root_node.FlattenToList()
-
- # If there's anything left unvisited, there must be a circular dependency
- # (cycle).
- if len(flat_list) != len(dependency_nodes):
- if not root_node.dependents:
- # If all files have dependencies, add the first file as a dependent
- # of root_node so that the cycle can be discovered from root_node.
- file_node = dependency_nodes.values()[0]
- file_node.dependencies.append(root_node)
- root_node.dependents.append(file_node)
- cycles = []
- for cycle in root_node.FindCycles():
- paths = [node.ref for node in cycle]
- cycles.append('Cycle: %s' % ' -> '.join(paths))
- raise DependencyGraphNode.CircularException(
- 'Cycles in .gyp file dependency graph detected:\n' + '\n'.join(cycles))
-
-
-def DoDependentSettings(key, flat_list, targets, dependency_nodes):
- # key should be one of all_dependent_settings, direct_dependent_settings,
- # or link_settings.
-
- for target in flat_list:
- target_dict = targets[target]
- build_file = gyp.common.BuildFile(target)
-
- if key == 'all_dependent_settings':
- dependencies = dependency_nodes[target].DeepDependencies()
- elif key == 'direct_dependent_settings':
- dependencies = \
- dependency_nodes[target].DirectAndImportedDependencies(targets)
- elif key == 'link_settings':
- dependencies = \
- dependency_nodes[target].DependenciesForLinkSettings(targets)
- else:
- raise GypError("DoDependentSettings doesn't know how to determine "
- 'dependencies for ' + key)
-
- for dependency in dependencies:
- dependency_dict = targets[dependency]
- if not key in dependency_dict:
- continue
- dependency_build_file = gyp.common.BuildFile(dependency)
- MergeDicts(target_dict, dependency_dict[key],
- build_file, dependency_build_file)
-
-
-def AdjustStaticLibraryDependencies(flat_list, targets, dependency_nodes,
- sort_dependencies):
- # Recompute target "dependencies" properties. For each static library
- # target, remove "dependencies" entries referring to other static libraries,
- # unless the dependency has the "hard_dependency" attribute set. For each
- # linkable target, add a "dependencies" entry referring to all of the
- # target's computed list of link dependencies (including static libraries
- # if no such entry is already present.
- for target in flat_list:
- target_dict = targets[target]
- target_type = target_dict['type']
-
- if target_type == 'static_library':
- if not 'dependencies' in target_dict:
- continue
-
- target_dict['dependencies_original'] = target_dict.get(
- 'dependencies', [])[:]
-
- # A static library should not depend on another static library unless
- # the dependency relationship is "hard," which should only be done when
- # a dependent relies on some side effect other than just the build
- # product, like a rule or action output. Further, if a target has a
- # non-hard dependency, but that dependency exports a hard dependency,
- # the non-hard dependency can safely be removed, but the exported hard
- # dependency must be added to the target to keep the same dependency
- # ordering.
- dependencies = \
- dependency_nodes[target].DirectAndImportedDependencies(targets)
- index = 0
- while index < len(dependencies):
- dependency = dependencies[index]
- dependency_dict = targets[dependency]
-
- # Remove every non-hard static library dependency and remove every
- # non-static library dependency that isn't a direct dependency.
- if (dependency_dict['type'] == 'static_library' and \
- not dependency_dict.get('hard_dependency', False)) or \
- (dependency_dict['type'] != 'static_library' and \
- not dependency in target_dict['dependencies']):
- # Take the dependency out of the list, and don't increment index
- # because the next dependency to analyze will shift into the index
- # formerly occupied by the one being removed.
- del dependencies[index]
- else:
- index = index + 1
-
- # Update the dependencies. If the dependencies list is empty, it's not
- # needed, so unhook it.
- if len(dependencies) > 0:
- target_dict['dependencies'] = dependencies
- else:
- del target_dict['dependencies']
-
- elif target_type in linkable_types:
- # Get a list of dependency targets that should be linked into this
- # target. Add them to the dependencies list if they're not already
- # present.
-
- link_dependencies = \
- dependency_nodes[target].DependenciesToLinkAgainst(targets)
- for dependency in link_dependencies:
- if dependency == target:
- continue
- if not 'dependencies' in target_dict:
- target_dict['dependencies'] = []
- if not dependency in target_dict['dependencies']:
- target_dict['dependencies'].append(dependency)
- # Sort the dependencies list in the order from dependents to dependencies.
- # e.g. If A and B depend on C and C depends on D, sort them in A, B, C, D.
- # Note: flat_list is already sorted in the order from dependencies to
- # dependents.
- if sort_dependencies and 'dependencies' in target_dict:
- target_dict['dependencies'] = [dep for dep in reversed(flat_list)
- if dep in target_dict['dependencies']]
-
-
-# Initialize this here to speed up MakePathRelative.
-exception_re = re.compile(r'''["']?[-/$<>^]''')
-
-
-def MakePathRelative(to_file, fro_file, item):
- # If item is a relative path, it's relative to the build file dict that it's
- # coming from. Fix it up to make it relative to the build file dict that
- # it's going into.
- # Exception: any |item| that begins with these special characters is
- # returned without modification.
- # / Used when a path is already absolute (shortcut optimization;
- # such paths would be returned as absolute anyway)
- # $ Used for build environment variables
- # - Used for some build environment flags (such as -lapr-1 in a
- # "libraries" section)
- # < Used for our own variable and command expansions (see ExpandVariables)
- # > Used for our own variable and command expansions (see ExpandVariables)
- # ^ Used for our own variable and command expansions (see ExpandVariables)
- #
- # "/' Used when a value is quoted. If these are present, then we
- # check the second character instead.
- #
- if to_file == fro_file or exception_re.match(item):
- return item
- else:
- # TODO(dglazkov) The backslash/forward-slash replacement at the end is a
- # temporary measure. This should really be addressed by keeping all paths
- # in POSIX until actual project generation.
- ret = os.path.normpath(os.path.join(
- gyp.common.RelativePath(os.path.dirname(fro_file),
- os.path.dirname(to_file)),
- item)).replace('\\', '/')
- if item[-1:] == '/':
- ret += '/'
- return ret
-
-def MergeLists(to, fro, to_file, fro_file, is_paths=False, append=True):
- # Python documentation recommends objects which do not support hash
- # set this value to None. Python library objects follow this rule.
- is_hashable = lambda val: val.__hash__
-
- # If x is hashable, returns whether x is in s. Else returns whether x is in l.
- def is_in_set_or_list(x, s, l):
- if is_hashable(x):
- return x in s
- return x in l
-
- prepend_index = 0
-
- # Make membership testing of hashables in |to| (in particular, strings)
- # faster.
- hashable_to_set = set(x for x in to if is_hashable(x))
- for item in fro:
- singleton = False
- if type(item) in (str, int):
- # The cheap and easy case.
- if is_paths:
- to_item = MakePathRelative(to_file, fro_file, item)
- else:
- to_item = item
-
- if not (type(item) is str and item.startswith('-')):
- # Any string that doesn't begin with a "-" is a singleton - it can
- # only appear once in a list, to be enforced by the list merge append
- # or prepend.
- singleton = True
- elif type(item) is dict:
- # Make a copy of the dictionary, continuing to look for paths to fix.
- # The other intelligent aspects of merge processing won't apply because
- # item is being merged into an empty dict.
- to_item = {}
- MergeDicts(to_item, item, to_file, fro_file)
- elif type(item) is list:
- # Recurse, making a copy of the list. If the list contains any
- # descendant dicts, path fixing will occur. Note that here, custom
- # values for is_paths and append are dropped; those are only to be
- # applied to |to| and |fro|, not sublists of |fro|. append shouldn't
- # matter anyway because the new |to_item| list is empty.
- to_item = []
- MergeLists(to_item, item, to_file, fro_file)
- else:
- raise TypeError(
- 'Attempt to merge list item of unsupported type ' + \
- item.__class__.__name__)
-
- if append:
- # If appending a singleton that's already in the list, don't append.
- # This ensures that the earliest occurrence of the item will stay put.
- if not singleton or not is_in_set_or_list(to_item, hashable_to_set, to):
- to.append(to_item)
- if is_hashable(to_item):
- hashable_to_set.add(to_item)
- else:
- # If prepending a singleton that's already in the list, remove the
- # existing instance and proceed with the prepend. This ensures that the
- # item appears at the earliest possible position in the list.
- while singleton and to_item in to:
- to.remove(to_item)
-
- # Don't just insert everything at index 0. That would prepend the new
- # items to the list in reverse order, which would be an unwelcome
- # surprise.
- to.insert(prepend_index, to_item)
- if is_hashable(to_item):
- hashable_to_set.add(to_item)
- prepend_index = prepend_index + 1
-
-
-def MergeDicts(to, fro, to_file, fro_file):
- # I wanted to name the parameter "from" but it's a Python keyword...
- for k, v in fro.iteritems():
- # It would be nice to do "if not k in to: to[k] = v" but that wouldn't give
- # copy semantics. Something else may want to merge from the |fro| dict
- # later, and having the same dict ref pointed to twice in the tree isn't
- # what anyone wants considering that the dicts may subsequently be
- # modified.
- if k in to:
- bad_merge = False
- if type(v) in (str, int):
- if type(to[k]) not in (str, int):
- bad_merge = True
- elif type(v) is not type(to[k]):
- bad_merge = True
-
- if bad_merge:
- raise TypeError(
- 'Attempt to merge dict value of type ' + v.__class__.__name__ + \
- ' into incompatible type ' + to[k].__class__.__name__ + \
- ' for key ' + k)
- if type(v) in (str, int):
- # Overwrite the existing value, if any. Cheap and easy.
- is_path = IsPathSection(k)
- if is_path:
- to[k] = MakePathRelative(to_file, fro_file, v)
- else:
- to[k] = v
- elif type(v) is dict:
- # Recurse, guaranteeing copies will be made of objects that require it.
- if not k in to:
- to[k] = {}
- MergeDicts(to[k], v, to_file, fro_file)
- elif type(v) is list:
- # Lists in dicts can be merged with different policies, depending on
- # how the key in the "from" dict (k, the from-key) is written.
- #
- # If the from-key has ...the to-list will have this action
- # this character appended:... applied when receiving the from-list:
- # = replace
- # + prepend
- # ? set, only if to-list does not yet exist
- # (none) append
- #
- # This logic is list-specific, but since it relies on the associated
- # dict key, it's checked in this dict-oriented function.
- ext = k[-1]
- append = True
- if ext == '=':
- list_base = k[:-1]
- lists_incompatible = [list_base, list_base + '?']
- to[list_base] = []
- elif ext == '+':
- list_base = k[:-1]
- lists_incompatible = [list_base + '=', list_base + '?']
- append = False
- elif ext == '?':
- list_base = k[:-1]
- lists_incompatible = [list_base, list_base + '=', list_base + '+']
- else:
- list_base = k
- lists_incompatible = [list_base + '=', list_base + '?']
-
- # Some combinations of merge policies appearing together are meaningless.
- # It's stupid to replace and append simultaneously, for example. Append
- # and prepend are the only policies that can coexist.
- for list_incompatible in lists_incompatible:
- if list_incompatible in fro:
- raise GypError('Incompatible list policies ' + k + ' and ' +
- list_incompatible)
-
- if list_base in to:
- if ext == '?':
- # If the key ends in "?", the list will only be merged if it doesn't
- # already exist.
- continue
- elif type(to[list_base]) is not list:
- # This may not have been checked above if merging in a list with an
- # extension character.
- raise TypeError(
- 'Attempt to merge dict value of type ' + v.__class__.__name__ + \
- ' into incompatible type ' + to[list_base].__class__.__name__ + \
- ' for key ' + list_base + '(' + k + ')')
- else:
- to[list_base] = []
-
- # Call MergeLists, which will make copies of objects that require it.
- # MergeLists can recurse back into MergeDicts, although this will be
- # to make copies of dicts (with paths fixed), there will be no
- # subsequent dict "merging" once entering a list because lists are
- # always replaced, appended to, or prepended to.
- is_paths = IsPathSection(list_base)
- MergeLists(to[list_base], v, to_file, fro_file, is_paths, append)
- else:
- raise TypeError(
- 'Attempt to merge dict value of unsupported type ' + \
- v.__class__.__name__ + ' for key ' + k)
-
-
-def MergeConfigWithInheritance(new_configuration_dict, build_file,
- target_dict, configuration, visited):
- # Skip if previously visted.
- if configuration in visited:
- return
-
- # Look at this configuration.
- configuration_dict = target_dict['configurations'][configuration]
-
- # Merge in parents.
- for parent in configuration_dict.get('inherit_from', []):
- MergeConfigWithInheritance(new_configuration_dict, build_file,
- target_dict, parent, visited + [configuration])
-
- # Merge it into the new config.
- MergeDicts(new_configuration_dict, configuration_dict,
- build_file, build_file)
-
- # Drop abstract.
- if 'abstract' in new_configuration_dict:
- del new_configuration_dict['abstract']
-
-
-def SetUpConfigurations(target, target_dict):
- # key_suffixes is a list of key suffixes that might appear on key names.
- # These suffixes are handled in conditional evaluations (for =, +, and ?)
- # and rules/exclude processing (for ! and /). Keys with these suffixes
- # should be treated the same as keys without.
- key_suffixes = ['=', '+', '?', '!', '/']
-
- build_file = gyp.common.BuildFile(target)
-
- # Provide a single configuration by default if none exists.
- # TODO(mark): Signal an error if default_configurations exists but
- # configurations does not.
- if not 'configurations' in target_dict:
- target_dict['configurations'] = {'Default': {}}
- if not 'default_configuration' in target_dict:
- concrete = [i for (i, config) in target_dict['configurations'].iteritems()
- if not config.get('abstract')]
- target_dict['default_configuration'] = sorted(concrete)[0]
-
- merged_configurations = {}
- configs = target_dict['configurations']
- for (configuration, old_configuration_dict) in configs.iteritems():
- # Skip abstract configurations (saves work only).
- if old_configuration_dict.get('abstract'):
- continue
- # Configurations inherit (most) settings from the enclosing target scope.
- # Get the inheritance relationship right by making a copy of the target
- # dict.
- new_configuration_dict = {}
- for (key, target_val) in target_dict.iteritems():
- key_ext = key[-1:]
- if key_ext in key_suffixes:
- key_base = key[:-1]
- else:
- key_base = key
- if not key_base in non_configuration_keys:
- new_configuration_dict[key] = gyp.simple_copy.deepcopy(target_val)
-
- # Merge in configuration (with all its parents first).
- MergeConfigWithInheritance(new_configuration_dict, build_file,
- target_dict, configuration, [])
-
- merged_configurations[configuration] = new_configuration_dict
-
- # Put the new configurations back into the target dict as a configuration.
- for configuration in merged_configurations.keys():
- target_dict['configurations'][configuration] = (
- merged_configurations[configuration])
-
- # Now drop all the abstract ones.
- for configuration in target_dict['configurations'].keys():
- old_configuration_dict = target_dict['configurations'][configuration]
- if old_configuration_dict.get('abstract'):
- del target_dict['configurations'][configuration]
-
- # Now that all of the target's configurations have been built, go through
- # the target dict's keys and remove everything that's been moved into a
- # "configurations" section.
- delete_keys = []
- for key in target_dict:
- key_ext = key[-1:]
- if key_ext in key_suffixes:
- key_base = key[:-1]
- else:
- key_base = key
- if not key_base in non_configuration_keys:
- delete_keys.append(key)
- for key in delete_keys:
- del target_dict[key]
-
- # Check the configurations to see if they contain invalid keys.
- for configuration in target_dict['configurations'].keys():
- configuration_dict = target_dict['configurations'][configuration]
- for key in configuration_dict.keys():
- if key in invalid_configuration_keys:
- raise GypError('%s not allowed in the %s configuration, found in '
- 'target %s' % (key, configuration, target))
-
-
-
-def ProcessListFiltersInDict(name, the_dict):
- """Process regular expression and exclusion-based filters on lists.
-
- An exclusion list is in a dict key named with a trailing "!", like
- "sources!". Every item in such a list is removed from the associated
- main list, which in this example, would be "sources". Removed items are
- placed into a "sources_excluded" list in the dict.
-
- Regular expression (regex) filters are contained in dict keys named with a
- trailing "/", such as "sources/" to operate on the "sources" list. Regex
- filters in a dict take the form:
- 'sources/': [ ['exclude', '_(linux|mac|win)\\.cc$'],
- ['include', '_mac\\.cc$'] ],
- The first filter says to exclude all files ending in _linux.cc, _mac.cc, and
- _win.cc. The second filter then includes all files ending in _mac.cc that
- are now or were once in the "sources" list. Items matching an "exclude"
- filter are subject to the same processing as would occur if they were listed
- by name in an exclusion list (ending in "!"). Items matching an "include"
- filter are brought back into the main list if previously excluded by an
- exclusion list or exclusion regex filter. Subsequent matching "exclude"
- patterns can still cause items to be excluded after matching an "include".
- """
-
- # Look through the dictionary for any lists whose keys end in "!" or "/".
- # These are lists that will be treated as exclude lists and regular
- # expression-based exclude/include lists. Collect the lists that are
- # needed first, looking for the lists that they operate on, and assemble
- # then into |lists|. This is done in a separate loop up front, because
- # the _included and _excluded keys need to be added to the_dict, and that
- # can't be done while iterating through it.
-
- lists = []
- del_lists = []
- for key, value in the_dict.iteritems():
- operation = key[-1]
- if operation != '!' and operation != '/':
- continue
-
- if type(value) is not list:
- raise ValueError(name + ' key ' + key + ' must be list, not ' + \
- value.__class__.__name__)
-
- list_key = key[:-1]
- if list_key not in the_dict:
- # This happens when there's a list like "sources!" but no corresponding
- # "sources" list. Since there's nothing for it to operate on, queue up
- # the "sources!" list for deletion now.
- del_lists.append(key)
- continue
-
- if type(the_dict[list_key]) is not list:
- value = the_dict[list_key]
- raise ValueError(name + ' key ' + list_key + \
- ' must be list, not ' + \
- value.__class__.__name__ + ' when applying ' + \
- {'!': 'exclusion', '/': 'regex'}[operation])
-
- if not list_key in lists:
- lists.append(list_key)
-
- # Delete the lists that are known to be unneeded at this point.
- for del_list in del_lists:
- del the_dict[del_list]
-
- for list_key in lists:
- the_list = the_dict[list_key]
-
- # Initialize the list_actions list, which is parallel to the_list. Each
- # item in list_actions identifies whether the corresponding item in
- # the_list should be excluded, unconditionally preserved (included), or
- # whether no exclusion or inclusion has been applied. Items for which
- # no exclusion or inclusion has been applied (yet) have value -1, items
- # excluded have value 0, and items included have value 1. Includes and
- # excludes override previous actions. All items in list_actions are
- # initialized to -1 because no excludes or includes have been processed
- # yet.
- list_actions = list((-1,) * len(the_list))
-
- exclude_key = list_key + '!'
- if exclude_key in the_dict:
- for exclude_item in the_dict[exclude_key]:
- for index in xrange(0, len(the_list)):
- if exclude_item == the_list[index]:
- # This item matches the exclude_item, so set its action to 0
- # (exclude).
- list_actions[index] = 0
-
- # The "whatever!" list is no longer needed, dump it.
- del the_dict[exclude_key]
-
- regex_key = list_key + '/'
- if regex_key in the_dict:
- for regex_item in the_dict[regex_key]:
- [action, pattern] = regex_item
- pattern_re = re.compile(pattern)
-
- if action == 'exclude':
- # This item matches an exclude regex, so set its value to 0 (exclude).
- action_value = 0
- elif action == 'include':
- # This item matches an include regex, so set its value to 1 (include).
- action_value = 1
- else:
- # This is an action that doesn't make any sense.
- raise ValueError('Unrecognized action ' + action + ' in ' + name + \
- ' key ' + regex_key)
-
- for index in xrange(0, len(the_list)):
- list_item = the_list[index]
- if list_actions[index] == action_value:
- # Even if the regex matches, nothing will change so continue (regex
- # searches are expensive).
- continue
- if pattern_re.search(list_item):
- # Regular expression match.
- list_actions[index] = action_value
-
- # The "whatever/" list is no longer needed, dump it.
- del the_dict[regex_key]
-
- # Add excluded items to the excluded list.
- #
- # Note that exclude_key ("sources!") is different from excluded_key
- # ("sources_excluded"). The exclude_key list is input and it was already
- # processed and deleted; the excluded_key list is output and it's about
- # to be created.
- excluded_key = list_key + '_excluded'
- if excluded_key in the_dict:
- raise GypError(name + ' key ' + excluded_key +
- ' must not be present prior '
- ' to applying exclusion/regex filters for ' + list_key)
-
- excluded_list = []
-
- # Go backwards through the list_actions list so that as items are deleted,
- # the indices of items that haven't been seen yet don't shift. That means
- # that things need to be prepended to excluded_list to maintain them in the
- # same order that they existed in the_list.
- for index in xrange(len(list_actions) - 1, -1, -1):
- if list_actions[index] == 0:
- # Dump anything with action 0 (exclude). Keep anything with action 1
- # (include) or -1 (no include or exclude seen for the item).
- excluded_list.insert(0, the_list[index])
- del the_list[index]
-
- # If anything was excluded, put the excluded list into the_dict at
- # excluded_key.
- if len(excluded_list) > 0:
- the_dict[excluded_key] = excluded_list
-
- # Now recurse into subdicts and lists that may contain dicts.
- for key, value in the_dict.iteritems():
- if type(value) is dict:
- ProcessListFiltersInDict(key, value)
- elif type(value) is list:
- ProcessListFiltersInList(key, value)
-
-
-def ProcessListFiltersInList(name, the_list):
- for item in the_list:
- if type(item) is dict:
- ProcessListFiltersInDict(name, item)
- elif type(item) is list:
- ProcessListFiltersInList(name, item)
-
-
-def ValidateTargetType(target, target_dict):
- """Ensures the 'type' field on the target is one of the known types.
-
- Arguments:
- target: string, name of target.
- target_dict: dict, target spec.
-
- Raises an exception on error.
- """
- VALID_TARGET_TYPES = ('executable', 'loadable_module',
- 'static_library', 'shared_library',
- 'mac_kernel_extension', 'none')
- target_type = target_dict.get('type', None)
- if target_type not in VALID_TARGET_TYPES:
- raise GypError("Target %s has an invalid target type '%s'. "
- "Must be one of %s." %
- (target, target_type, '/'.join(VALID_TARGET_TYPES)))
- if (target_dict.get('standalone_static_library', 0) and
- not target_type == 'static_library'):
- raise GypError('Target %s has type %s but standalone_static_library flag is'
- ' only valid for static_library type.' % (target,
- target_type))
-
-
-def ValidateSourcesInTarget(target, target_dict, build_file,
- duplicate_basename_check):
- if not duplicate_basename_check:
- return
- if target_dict.get('type', None) != 'static_library':
- return
- sources = target_dict.get('sources', [])
- basenames = {}
- for source in sources:
- name, ext = os.path.splitext(source)
- is_compiled_file = ext in [
- '.c', '.cc', '.cpp', '.cxx', '.m', '.mm', '.s', '.S']
- if not is_compiled_file:
- continue
- basename = os.path.basename(name) # Don't include extension.
- basenames.setdefault(basename, []).append(source)
-
- error = ''
- for basename, files in basenames.iteritems():
- if len(files) > 1:
- error += ' %s: %s\n' % (basename, ' '.join(files))
-
- if error:
- print('static library %s has several files with the same basename:\n' %
- target + error + 'libtool on Mac cannot handle that. Use '
- '--no-duplicate-basename-check to disable this validation.')
- raise GypError('Duplicate basenames in sources section, see list above')
-
-
-def ValidateRulesInTarget(target, target_dict, extra_sources_for_rules):
- """Ensures that the rules sections in target_dict are valid and consistent,
- and determines which sources they apply to.
-
- Arguments:
- target: string, name of target.
- target_dict: dict, target spec containing "rules" and "sources" lists.
- extra_sources_for_rules: a list of keys to scan for rule matches in
- addition to 'sources'.
- """
-
- # Dicts to map between values found in rules' 'rule_name' and 'extension'
- # keys and the rule dicts themselves.
- rule_names = {}
- rule_extensions = {}
-
- rules = target_dict.get('rules', [])
- for rule in rules:
- # Make sure that there's no conflict among rule names and extensions.
- rule_name = rule['rule_name']
- if rule_name in rule_names:
- raise GypError('rule %s exists in duplicate, target %s' %
- (rule_name, target))
- rule_names[rule_name] = rule
-
- rule_extension = rule['extension']
- if rule_extension.startswith('.'):
- rule_extension = rule_extension[1:]
- if rule_extension in rule_extensions:
- raise GypError(('extension %s associated with multiple rules, ' +
- 'target %s rules %s and %s') %
- (rule_extension, target,
- rule_extensions[rule_extension]['rule_name'],
- rule_name))
- rule_extensions[rule_extension] = rule
-
- # Make sure rule_sources isn't already there. It's going to be
- # created below if needed.
- if 'rule_sources' in rule:
- raise GypError(
- 'rule_sources must not exist in input, target %s rule %s' %
- (target, rule_name))
-
- rule_sources = []
- source_keys = ['sources']
- source_keys.extend(extra_sources_for_rules)
- for source_key in source_keys:
- for source in target_dict.get(source_key, []):
- (source_root, source_extension) = os.path.splitext(source)
- if source_extension.startswith('.'):
- source_extension = source_extension[1:]
- if source_extension == rule_extension:
- rule_sources.append(source)
-
- if len(rule_sources) > 0:
- rule['rule_sources'] = rule_sources
-
-
-def ValidateRunAsInTarget(target, target_dict, build_file):
- target_name = target_dict.get('target_name')
- run_as = target_dict.get('run_as')
- if not run_as:
- return
- if type(run_as) is not dict:
- raise GypError("The 'run_as' in target %s from file %s should be a "
- "dictionary." %
- (target_name, build_file))
- action = run_as.get('action')
- if not action:
- raise GypError("The 'run_as' in target %s from file %s must have an "
- "'action' section." %
- (target_name, build_file))
- if type(action) is not list:
- raise GypError("The 'action' for 'run_as' in target %s from file %s "
- "must be a list." %
- (target_name, build_file))
- working_directory = run_as.get('working_directory')
- if working_directory and type(working_directory) is not str:
- raise GypError("The 'working_directory' for 'run_as' in target %s "
- "in file %s should be a string." %
- (target_name, build_file))
- environment = run_as.get('environment')
- if environment and type(environment) is not dict:
- raise GypError("The 'environment' for 'run_as' in target %s "
- "in file %s should be a dictionary." %
- (target_name, build_file))
-
-
-def ValidateActionsInTarget(target, target_dict, build_file):
- '''Validates the inputs to the actions in a target.'''
- target_name = target_dict.get('target_name')
- actions = target_dict.get('actions', [])
- for action in actions:
- action_name = action.get('action_name')
- if not action_name:
- raise GypError("Anonymous action in target %s. "
- "An action must have an 'action_name' field." %
- target_name)
- inputs = action.get('inputs', None)
- if inputs is None:
- raise GypError('Action in target %s has no inputs.' % target_name)
- action_command = action.get('action')
- if action_command and not action_command[0]:
- raise GypError("Empty action as command in target %s." % target_name)
-
-
-def TurnIntIntoStrInDict(the_dict):
- """Given dict the_dict, recursively converts all integers into strings.
- """
- # Use items instead of iteritems because there's no need to try to look at
- # reinserted keys and their associated values.
- for k, v in the_dict.items():
- if type(v) is int:
- v = str(v)
- the_dict[k] = v
- elif type(v) is dict:
- TurnIntIntoStrInDict(v)
- elif type(v) is list:
- TurnIntIntoStrInList(v)
-
- if type(k) is int:
- del the_dict[k]
- the_dict[str(k)] = v
-
-
-def TurnIntIntoStrInList(the_list):
- """Given list the_list, recursively converts all integers into strings.
- """
- for index in xrange(0, len(the_list)):
- item = the_list[index]
- if type(item) is int:
- the_list[index] = str(item)
- elif type(item) is dict:
- TurnIntIntoStrInDict(item)
- elif type(item) is list:
- TurnIntIntoStrInList(item)
-
-
-def PruneUnwantedTargets(targets, flat_list, dependency_nodes, root_targets,
- data):
- """Return only the targets that are deep dependencies of |root_targets|."""
- qualified_root_targets = []
- for target in root_targets:
- target = target.strip()
- qualified_targets = gyp.common.FindQualifiedTargets(target, flat_list)
- if not qualified_targets:
- raise GypError("Could not find target %s" % target)
- qualified_root_targets.extend(qualified_targets)
-
- wanted_targets = {}
- for target in qualified_root_targets:
- wanted_targets[target] = targets[target]
- for dependency in dependency_nodes[target].DeepDependencies():
- wanted_targets[dependency] = targets[dependency]
-
- wanted_flat_list = [t for t in flat_list if t in wanted_targets]
-
- # Prune unwanted targets from each build_file's data dict.
- for build_file in data['target_build_files']:
- if not 'targets' in data[build_file]:
- continue
- new_targets = []
- for target in data[build_file]['targets']:
- qualified_name = gyp.common.QualifiedTarget(build_file,
- target['target_name'],
- target['toolset'])
- if qualified_name in wanted_targets:
- new_targets.append(target)
- data[build_file]['targets'] = new_targets
-
- return wanted_targets, wanted_flat_list
-
-
-def VerifyNoCollidingTargets(targets):
- """Verify that no two targets in the same directory share the same name.
-
- Arguments:
- targets: A list of targets in the form 'path/to/file.gyp:target_name'.
- """
- # Keep a dict going from 'subdirectory:target_name' to 'foo.gyp'.
- used = {}
- for target in targets:
- # Separate out 'path/to/file.gyp, 'target_name' from
- # 'path/to/file.gyp:target_name'.
- path, name = target.rsplit(':', 1)
- # Separate out 'path/to', 'file.gyp' from 'path/to/file.gyp'.
- subdir, gyp = os.path.split(path)
- # Use '.' for the current directory '', so that the error messages make
- # more sense.
- if not subdir:
- subdir = '.'
- # Prepare a key like 'path/to:target_name'.
- key = subdir + ':' + name
- if key in used:
- # Complain if this target is already used.
- raise GypError('Duplicate target name "%s" in directory "%s" used both '
- 'in "%s" and "%s".' % (name, subdir, gyp, used[key]))
- used[key] = gyp
-
-
-def SetGeneratorGlobals(generator_input_info):
- # Set up path_sections and non_configuration_keys with the default data plus
- # the generator-specific data.
- global path_sections
- path_sections = set(base_path_sections)
- path_sections.update(generator_input_info['path_sections'])
-
- global non_configuration_keys
- non_configuration_keys = base_non_configuration_keys[:]
- non_configuration_keys.extend(generator_input_info['non_configuration_keys'])
-
- global multiple_toolsets
- multiple_toolsets = generator_input_info[
- 'generator_supports_multiple_toolsets']
-
- global generator_filelist_paths
- generator_filelist_paths = generator_input_info['generator_filelist_paths']
-
-
-def Load(build_files, variables, includes, depth, generator_input_info, check,
- circular_check, duplicate_basename_check, parallel, root_targets):
- SetGeneratorGlobals(generator_input_info)
- # A generator can have other lists (in addition to sources) be processed
- # for rules.
- extra_sources_for_rules = generator_input_info['extra_sources_for_rules']
-
- # Load build files. This loads every target-containing build file into
- # the |data| dictionary such that the keys to |data| are build file names,
- # and the values are the entire build file contents after "early" or "pre"
- # processing has been done and includes have been resolved.
- # NOTE: data contains both "target" files (.gyp) and "includes" (.gypi), as
- # well as meta-data (e.g. 'included_files' key). 'target_build_files' keeps
- # track of the keys corresponding to "target" files.
- data = {'target_build_files': set()}
- # Normalize paths everywhere. This is important because paths will be
- # used as keys to the data dict and for references between input files.
- build_files = set(map(os.path.normpath, build_files))
- if parallel:
- LoadTargetBuildFilesParallel(build_files, data, variables, includes, depth,
- check, generator_input_info)
- else:
- aux_data = {}
- for build_file in build_files:
- try:
- LoadTargetBuildFile(build_file, data, aux_data,
- variables, includes, depth, check, True)
- except Exception, e:
- gyp.common.ExceptionAppend(e, 'while trying to load %s' % build_file)
- raise
-
- # Build a dict to access each target's subdict by qualified name.
- targets = BuildTargetsDict(data)
-
- # Fully qualify all dependency links.
- QualifyDependencies(targets)
-
- # Remove self-dependencies from targets that have 'prune_self_dependencies'
- # set to 1.
- RemoveSelfDependencies(targets)
-
- # Expand dependencies specified as build_file:*.
- ExpandWildcardDependencies(targets, data)
-
- # Remove all dependencies marked as 'link_dependency' from the targets of
- # type 'none'.
- RemoveLinkDependenciesFromNoneTargets(targets)
-
- # Apply exclude (!) and regex (/) list filters only for dependency_sections.
- for target_name, target_dict in targets.iteritems():
- tmp_dict = {}
- for key_base in dependency_sections:
- for op in ('', '!', '/'):
- key = key_base + op
- if key in target_dict:
- tmp_dict[key] = target_dict[key]
- del target_dict[key]
- ProcessListFiltersInDict(target_name, tmp_dict)
- # Write the results back to |target_dict|.
- for key in tmp_dict:
- target_dict[key] = tmp_dict[key]
-
- # Make sure every dependency appears at most once.
- RemoveDuplicateDependencies(targets)
-
- if circular_check:
- # Make sure that any targets in a.gyp don't contain dependencies in other
- # .gyp files that further depend on a.gyp.
- VerifyNoGYPFileCircularDependencies(targets)
-
- [dependency_nodes, flat_list] = BuildDependencyList(targets)
-
- if root_targets:
- # Remove, from |targets| and |flat_list|, the targets that are not deep
- # dependencies of the targets specified in |root_targets|.
- targets, flat_list = PruneUnwantedTargets(
- targets, flat_list, dependency_nodes, root_targets, data)
-
- # Check that no two targets in the same directory have the same name.
- VerifyNoCollidingTargets(flat_list)
-
- # Handle dependent settings of various types.
- for settings_type in ['all_dependent_settings',
- 'direct_dependent_settings',
- 'link_settings']:
- DoDependentSettings(settings_type, flat_list, targets, dependency_nodes)
-
- # Take out the dependent settings now that they've been published to all
- # of the targets that require them.
- for target in flat_list:
- if settings_type in targets[target]:
- del targets[target][settings_type]
-
- # Make sure static libraries don't declare dependencies on other static
- # libraries, but that linkables depend on all unlinked static libraries
- # that they need so that their link steps will be correct.
- gii = generator_input_info
- if gii['generator_wants_static_library_dependencies_adjusted']:
- AdjustStaticLibraryDependencies(flat_list, targets, dependency_nodes,
- gii['generator_wants_sorted_dependencies'])
-
- # Apply "post"/"late"/"target" variable expansions and condition evaluations.
- for target in flat_list:
- target_dict = targets[target]
- build_file = gyp.common.BuildFile(target)
- ProcessVariablesAndConditionsInDict(
- target_dict, PHASE_LATE, variables, build_file)
-
- # Move everything that can go into a "configurations" section into one.
- for target in flat_list:
- target_dict = targets[target]
- SetUpConfigurations(target, target_dict)
-
- # Apply exclude (!) and regex (/) list filters.
- for target in flat_list:
- target_dict = targets[target]
- ProcessListFiltersInDict(target, target_dict)
-
- # Apply "latelate" variable expansions and condition evaluations.
- for target in flat_list:
- target_dict = targets[target]
- build_file = gyp.common.BuildFile(target)
- ProcessVariablesAndConditionsInDict(
- target_dict, PHASE_LATELATE, variables, build_file)
-
- # Make sure that the rules make sense, and build up rule_sources lists as
- # needed. Not all generators will need to use the rule_sources lists, but
- # some may, and it seems best to build the list in a common spot.
- # Also validate actions and run_as elements in targets.
- for target in flat_list:
- target_dict = targets[target]
- build_file = gyp.common.BuildFile(target)
- ValidateTargetType(target, target_dict)
- ValidateSourcesInTarget(target, target_dict, build_file,
- duplicate_basename_check)
- ValidateRulesInTarget(target, target_dict, extra_sources_for_rules)
- ValidateRunAsInTarget(target, target_dict, build_file)
- ValidateActionsInTarget(target, target_dict, build_file)
-
- # Generators might not expect ints. Turn them into strs.
- TurnIntIntoStrInDict(data)
-
- # TODO(mark): Return |data| for now because the generator needs a list of
- # build files that came in. In the future, maybe it should just accept
- # a list, and not the whole data dict.
- return [flat_list, targets, data]
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/input.pyc b/node_modules/node-gyp/gyp/pylib/gyp/input.pyc
deleted file mode 100644
index 2d8158e..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/input.pyc
+++ /dev/null
Binary files differ
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/input_test.py b/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
deleted file mode 100755
index 4234fbb..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2013 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Unit tests for the input.py file."""
-
-import gyp.input
-import unittest
-import sys
-
-
-class TestFindCycles(unittest.TestCase):
- def setUp(self):
- self.nodes = {}
- for x in ('a', 'b', 'c', 'd', 'e'):
- self.nodes[x] = gyp.input.DependencyGraphNode(x)
-
- def _create_dependency(self, dependent, dependency):
- dependent.dependencies.append(dependency)
- dependency.dependents.append(dependent)
-
- def test_no_cycle_empty_graph(self):
- for label, node in self.nodes.iteritems():
- self.assertEquals([], node.FindCycles())
-
- def test_no_cycle_line(self):
- self._create_dependency(self.nodes['a'], self.nodes['b'])
- self._create_dependency(self.nodes['b'], self.nodes['c'])
- self._create_dependency(self.nodes['c'], self.nodes['d'])
-
- for label, node in self.nodes.iteritems():
- self.assertEquals([], node.FindCycles())
-
- def test_no_cycle_dag(self):
- self._create_dependency(self.nodes['a'], self.nodes['b'])
- self._create_dependency(self.nodes['a'], self.nodes['c'])
- self._create_dependency(self.nodes['b'], self.nodes['c'])
-
- for label, node in self.nodes.iteritems():
- self.assertEquals([], node.FindCycles())
-
- def test_cycle_self_reference(self):
- self._create_dependency(self.nodes['a'], self.nodes['a'])
-
- self.assertEquals([[self.nodes['a'], self.nodes['a']]],
- self.nodes['a'].FindCycles())
-
- def test_cycle_two_nodes(self):
- self._create_dependency(self.nodes['a'], self.nodes['b'])
- self._create_dependency(self.nodes['b'], self.nodes['a'])
-
- self.assertEquals([[self.nodes['a'], self.nodes['b'], self.nodes['a']]],
- self.nodes['a'].FindCycles())
- self.assertEquals([[self.nodes['b'], self.nodes['a'], self.nodes['b']]],
- self.nodes['b'].FindCycles())
-
- def test_two_cycles(self):
- self._create_dependency(self.nodes['a'], self.nodes['b'])
- self._create_dependency(self.nodes['b'], self.nodes['a'])
-
- self._create_dependency(self.nodes['b'], self.nodes['c'])
- self._create_dependency(self.nodes['c'], self.nodes['b'])
-
- cycles = self.nodes['a'].FindCycles()
- self.assertTrue(
- [self.nodes['a'], self.nodes['b'], self.nodes['a']] in cycles)
- self.assertTrue(
- [self.nodes['b'], self.nodes['c'], self.nodes['b']] in cycles)
- self.assertEquals(2, len(cycles))
-
- def test_big_cycle(self):
- self._create_dependency(self.nodes['a'], self.nodes['b'])
- self._create_dependency(self.nodes['b'], self.nodes['c'])
- self._create_dependency(self.nodes['c'], self.nodes['d'])
- self._create_dependency(self.nodes['d'], self.nodes['e'])
- self._create_dependency(self.nodes['e'], self.nodes['a'])
-
- self.assertEquals([[self.nodes['a'],
- self.nodes['b'],
- self.nodes['c'],
- self.nodes['d'],
- self.nodes['e'],
- self.nodes['a']]],
- self.nodes['a'].FindCycles())
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py b/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
deleted file mode 100755
index eeeaceb..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
+++ /dev/null
@@ -1,610 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Utility functions to perform Xcode-style build steps.
-
-These functions are executed via gyp-mac-tool when using the Makefile generator.
-"""
-
-import fcntl
-import fnmatch
-import glob
-import json
-import os
-import plistlib
-import re
-import shutil
-import string
-import subprocess
-import sys
-import tempfile
-
-
-def main(args):
- executor = MacTool()
- exit_code = executor.Dispatch(args)
- if exit_code is not None:
- sys.exit(exit_code)
-
-
-class MacTool(object):
- """This class performs all the Mac tooling steps. The methods can either be
- executed directly, or dispatched from an argument list."""
-
- def Dispatch(self, args):
- """Dispatches a string command to a method."""
- if len(args) < 1:
- raise Exception("Not enough arguments")
-
- method = "Exec%s" % self._CommandifyName(args[0])
- return getattr(self, method)(*args[1:])
-
- def _CommandifyName(self, name_string):
- """Transforms a tool name like copy-info-plist to CopyInfoPlist"""
- return name_string.title().replace('-', '')
-
- def ExecCopyBundleResource(self, source, dest, convert_to_binary):
- """Copies a resource file to the bundle/Resources directory, performing any
- necessary compilation on each resource."""
- extension = os.path.splitext(source)[1].lower()
- if os.path.isdir(source):
- # Copy tree.
- # TODO(thakis): This copies file attributes like mtime, while the
- # single-file branch below doesn't. This should probably be changed to
- # be consistent with the single-file branch.
- if os.path.exists(dest):
- shutil.rmtree(dest)
- shutil.copytree(source, dest)
- elif extension == '.xib':
- return self._CopyXIBFile(source, dest)
- elif extension == '.storyboard':
- return self._CopyXIBFile(source, dest)
- elif extension == '.strings':
- self._CopyStringsFile(source, dest, convert_to_binary)
- else:
- shutil.copy(source, dest)
-
- def _CopyXIBFile(self, source, dest):
- """Compiles a XIB file with ibtool into a binary plist in the bundle."""
-
- # ibtool sometimes crashes with relative paths. See crbug.com/314728.
- base = os.path.dirname(os.path.realpath(__file__))
- if os.path.relpath(source):
- source = os.path.join(base, source)
- if os.path.relpath(dest):
- dest = os.path.join(base, dest)
-
- args = ['xcrun', 'ibtool', '--errors', '--warnings', '--notices',
- '--output-format', 'human-readable-text', '--compile', dest, source]
- ibtool_section_re = re.compile(r'/\*.*\*/')
- ibtool_re = re.compile(r'.*note:.*is clipping its content')
- ibtoolout = subprocess.Popen(args, stdout=subprocess.PIPE)
- current_section_header = None
- for line in ibtoolout.stdout:
- if ibtool_section_re.match(line):
- current_section_header = line
- elif not ibtool_re.match(line):
- if current_section_header:
- sys.stdout.write(current_section_header)
- current_section_header = None
- sys.stdout.write(line)
- return ibtoolout.returncode
-
- def _ConvertToBinary(self, dest):
- subprocess.check_call([
- 'xcrun', 'plutil', '-convert', 'binary1', '-o', dest, dest])
-
- def _CopyStringsFile(self, source, dest, convert_to_binary):
- """Copies a .strings file using iconv to reconvert the input into UTF-16."""
- input_code = self._DetectInputEncoding(source) or "UTF-8"
-
- # Xcode's CpyCopyStringsFile / builtin-copyStrings seems to call
- # CFPropertyListCreateFromXMLData() behind the scenes; at least it prints
- # CFPropertyListCreateFromXMLData(): Old-style plist parser: missing
- # semicolon in dictionary.
- # on invalid files. Do the same kind of validation.
- import CoreFoundation
- s = open(source, 'rb').read()
- d = CoreFoundation.CFDataCreate(None, s, len(s))
- _, error = CoreFoundation.CFPropertyListCreateFromXMLData(None, d, 0, None)
- if error:
- return
-
- fp = open(dest, 'wb')
- fp.write(s.decode(input_code).encode('UTF-16'))
- fp.close()
-
- if convert_to_binary == 'True':
- self._ConvertToBinary(dest)
-
- def _DetectInputEncoding(self, file_name):
- """Reads the first few bytes from file_name and tries to guess the text
- encoding. Returns None as a guess if it can't detect it."""
- fp = open(file_name, 'rb')
- try:
- header = fp.read(3)
- except e:
- fp.close()
- return None
- fp.close()
- if header.startswith("\xFE\xFF"):
- return "UTF-16"
- elif header.startswith("\xFF\xFE"):
- return "UTF-16"
- elif header.startswith("\xEF\xBB\xBF"):
- return "UTF-8"
- else:
- return None
-
- def ExecCopyInfoPlist(self, source, dest, convert_to_binary, *keys):
- """Copies the |source| Info.plist to the destination directory |dest|."""
- # Read the source Info.plist into memory.
- fd = open(source, 'r')
- lines = fd.read()
- fd.close()
-
- # Insert synthesized key/value pairs (e.g. BuildMachineOSBuild).
- plist = plistlib.readPlistFromString(lines)
- if keys:
- plist = dict(plist.items() + json.loads(keys[0]).items())
- lines = plistlib.writePlistToString(plist)
-
- # Go through all the environment variables and replace them as variables in
- # the file.
- IDENT_RE = re.compile(r'[/\s]')
- for key in os.environ:
- if key.startswith('_'):
- continue
- evar = '${%s}' % key
- evalue = os.environ[key]
- lines = string.replace(lines, evar, evalue)
-
- # Xcode supports various suffices on environment variables, which are
- # all undocumented. :rfc1034identifier is used in the standard project
- # template these days, and :identifier was used earlier. They are used to
- # convert non-url characters into things that look like valid urls --
- # except that the replacement character for :identifier, '_' isn't valid
- # in a URL either -- oops, hence :rfc1034identifier was born.
- evar = '${%s:identifier}' % key
- evalue = IDENT_RE.sub('_', os.environ[key])
- lines = string.replace(lines, evar, evalue)
-
- evar = '${%s:rfc1034identifier}' % key
- evalue = IDENT_RE.sub('-', os.environ[key])
- lines = string.replace(lines, evar, evalue)
-
- # Remove any keys with values that haven't been replaced.
- lines = lines.split('\n')
- for i in range(len(lines)):
- if lines[i].strip().startswith("<string>${"):
- lines[i] = None
- lines[i - 1] = None
- lines = '\n'.join(filter(lambda x: x is not None, lines))
-
- # Write out the file with variables replaced.
- fd = open(dest, 'w')
- fd.write(lines)
- fd.close()
-
- # Now write out PkgInfo file now that the Info.plist file has been
- # "compiled".
- self._WritePkgInfo(dest)
-
- if convert_to_binary == 'True':
- self._ConvertToBinary(dest)
-
- def _WritePkgInfo(self, info_plist):
- """This writes the PkgInfo file from the data stored in Info.plist."""
- plist = plistlib.readPlist(info_plist)
- if not plist:
- return
-
- # Only create PkgInfo for executable types.
- package_type = plist['CFBundlePackageType']
- if package_type != 'APPL':
- return
-
- # The format of PkgInfo is eight characters, representing the bundle type
- # and bundle signature, each four characters. If that is missing, four
- # '?' characters are used instead.
- signature_code = plist.get('CFBundleSignature', '????')
- if len(signature_code) != 4: # Wrong length resets everything, too.
- signature_code = '?' * 4
-
- dest = os.path.join(os.path.dirname(info_plist), 'PkgInfo')
- fp = open(dest, 'w')
- fp.write('%s%s' % (package_type, signature_code))
- fp.close()
-
- def ExecFlock(self, lockfile, *cmd_list):
- """Emulates the most basic behavior of Linux's flock(1)."""
- # Rely on exception handling to report errors.
- fd = os.open(lockfile, os.O_RDONLY|os.O_NOCTTY|os.O_CREAT, 0o666)
- fcntl.flock(fd, fcntl.LOCK_EX)
- return subprocess.call(cmd_list)
-
- def ExecFilterLibtool(self, *cmd_list):
- """Calls libtool and filters out '/path/to/libtool: file: foo.o has no
- symbols'."""
- libtool_re = re.compile(r'^.*libtool: file: .* has no symbols$')
- libtool_re5 = re.compile(
- r'^.*libtool: warning for library: ' +
- r'.* the table of contents is empty ' +
- r'\(no object file members in the library define global symbols\)$')
- env = os.environ.copy()
- # Ref:
- # http://www.opensource.apple.com/source/cctools/cctools-809/misc/libtool.c
- # The problem with this flag is that it resets the file mtime on the file to
- # epoch=0, e.g. 1970-1-1 or 1969-12-31 depending on timezone.
- env['ZERO_AR_DATE'] = '1'
- libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE, env=env)
- _, err = libtoolout.communicate()
- for line in err.splitlines():
- if not libtool_re.match(line) and not libtool_re5.match(line):
- print >>sys.stderr, line
- # Unconditionally touch the output .a file on the command line if present
- # and the command succeeded. A bit hacky.
- if not libtoolout.returncode:
- for i in range(len(cmd_list) - 1):
- if cmd_list[i] == "-o" and cmd_list[i+1].endswith('.a'):
- os.utime(cmd_list[i+1], None)
- break
- return libtoolout.returncode
-
- def ExecPackageFramework(self, framework, version):
- """Takes a path to Something.framework and the Current version of that and
- sets up all the symlinks."""
- # Find the name of the binary based on the part before the ".framework".
- binary = os.path.basename(framework).split('.')[0]
-
- CURRENT = 'Current'
- RESOURCES = 'Resources'
- VERSIONS = 'Versions'
-
- if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)):
- # Binary-less frameworks don't seem to contain symlinks (see e.g.
- # chromium's out/Debug/org.chromium.Chromium.manifest/ bundle).
- return
-
- # Move into the framework directory to set the symlinks correctly.
- pwd = os.getcwd()
- os.chdir(framework)
-
- # Set up the Current version.
- self._Relink(version, os.path.join(VERSIONS, CURRENT))
-
- # Set up the root symlinks.
- self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary)
- self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES)
-
- # Back to where we were before!
- os.chdir(pwd)
-
- def _Relink(self, dest, link):
- """Creates a symlink to |dest| named |link|. If |link| already exists,
- it is overwritten."""
- if os.path.lexists(link):
- os.remove(link)
- os.symlink(dest, link)
-
- def ExecCompileXcassets(self, keys, *inputs):
- """Compiles multiple .xcassets files into a single .car file.
-
- This invokes 'actool' to compile all the inputs .xcassets files. The
- |keys| arguments is a json-encoded dictionary of extra arguments to
- pass to 'actool' when the asset catalogs contains an application icon
- or a launch image.
-
- Note that 'actool' does not create the Assets.car file if the asset
- catalogs does not contains imageset.
- """
- command_line = [
- 'xcrun', 'actool', '--output-format', 'human-readable-text',
- '--compress-pngs', '--notices', '--warnings', '--errors',
- ]
- is_iphone_target = 'IPHONEOS_DEPLOYMENT_TARGET' in os.environ
- if is_iphone_target:
- platform = os.environ['CONFIGURATION'].split('-')[-1]
- if platform not in ('iphoneos', 'iphonesimulator'):
- platform = 'iphonesimulator'
- command_line.extend([
- '--platform', platform, '--target-device', 'iphone',
- '--target-device', 'ipad', '--minimum-deployment-target',
- os.environ['IPHONEOS_DEPLOYMENT_TARGET'], '--compile',
- os.path.abspath(os.environ['CONTENTS_FOLDER_PATH']),
- ])
- else:
- command_line.extend([
- '--platform', 'macosx', '--target-device', 'mac',
- '--minimum-deployment-target', os.environ['MACOSX_DEPLOYMENT_TARGET'],
- '--compile',
- os.path.abspath(os.environ['UNLOCALIZED_RESOURCES_FOLDER_PATH']),
- ])
- if keys:
- keys = json.loads(keys)
- for key, value in keys.iteritems():
- arg_name = '--' + key
- if isinstance(value, bool):
- if value:
- command_line.append(arg_name)
- elif isinstance(value, list):
- for v in value:
- command_line.append(arg_name)
- command_line.append(str(v))
- else:
- command_line.append(arg_name)
- command_line.append(str(value))
- # Note: actool crashes if inputs path are relative, so use os.path.abspath
- # to get absolute path name for inputs.
- command_line.extend(map(os.path.abspath, inputs))
- subprocess.check_call(command_line)
-
- def ExecMergeInfoPlist(self, output, *inputs):
- """Merge multiple .plist files into a single .plist file."""
- merged_plist = {}
- for path in inputs:
- plist = self._LoadPlistMaybeBinary(path)
- self._MergePlist(merged_plist, plist)
- plistlib.writePlist(merged_plist, output)
-
- def ExecCodeSignBundle(self, key, resource_rules, entitlements, provisioning):
- """Code sign a bundle.
-
- This function tries to code sign an iOS bundle, following the same
- algorithm as Xcode:
- 1. copy ResourceRules.plist from the user or the SDK into the bundle,
- 2. pick the provisioning profile that best match the bundle identifier,
- and copy it into the bundle as embedded.mobileprovision,
- 3. copy Entitlements.plist from user or SDK next to the bundle,
- 4. code sign the bundle.
- """
- resource_rules_path = self._InstallResourceRules(resource_rules)
- substitutions, overrides = self._InstallProvisioningProfile(
- provisioning, self._GetCFBundleIdentifier())
- entitlements_path = self._InstallEntitlements(
- entitlements, substitutions, overrides)
- subprocess.check_call([
- 'codesign', '--force', '--sign', key, '--resource-rules',
- resource_rules_path, '--entitlements', entitlements_path,
- os.path.join(
- os.environ['TARGET_BUILD_DIR'],
- os.environ['FULL_PRODUCT_NAME'])])
-
- def _InstallResourceRules(self, resource_rules):
- """Installs ResourceRules.plist from user or SDK into the bundle.
-
- Args:
- resource_rules: string, optional, path to the ResourceRules.plist file
- to use, default to "${SDKROOT}/ResourceRules.plist"
-
- Returns:
- Path to the copy of ResourceRules.plist into the bundle.
- """
- source_path = resource_rules
- target_path = os.path.join(
- os.environ['BUILT_PRODUCTS_DIR'],
- os.environ['CONTENTS_FOLDER_PATH'],
- 'ResourceRules.plist')
- if not source_path:
- source_path = os.path.join(
- os.environ['SDKROOT'], 'ResourceRules.plist')
- shutil.copy2(source_path, target_path)
- return target_path
-
- def _InstallProvisioningProfile(self, profile, bundle_identifier):
- """Installs embedded.mobileprovision into the bundle.
-
- Args:
- profile: string, optional, short name of the .mobileprovision file
- to use, if empty or the file is missing, the best file installed
- will be used
- bundle_identifier: string, value of CFBundleIdentifier from Info.plist
-
- Returns:
- A tuple containing two dictionary: variables substitutions and values
- to overrides when generating the entitlements file.
- """
- source_path, provisioning_data, team_id = self._FindProvisioningProfile(
- profile, bundle_identifier)
- target_path = os.path.join(
- os.environ['BUILT_PRODUCTS_DIR'],
- os.environ['CONTENTS_FOLDER_PATH'],
- 'embedded.mobileprovision')
- shutil.copy2(source_path, target_path)
- substitutions = self._GetSubstitutions(bundle_identifier, team_id + '.')
- return substitutions, provisioning_data['Entitlements']
-
- def _FindProvisioningProfile(self, profile, bundle_identifier):
- """Finds the .mobileprovision file to use for signing the bundle.
-
- Checks all the installed provisioning profiles (or if the user specified
- the PROVISIONING_PROFILE variable, only consult it) and select the most
- specific that correspond to the bundle identifier.
-
- Args:
- profile: string, optional, short name of the .mobileprovision file
- to use, if empty or the file is missing, the best file installed
- will be used
- bundle_identifier: string, value of CFBundleIdentifier from Info.plist
-
- Returns:
- A tuple of the path to the selected provisioning profile, the data of
- the embedded plist in the provisioning profile and the team identifier
- to use for code signing.
-
- Raises:
- SystemExit: if no .mobileprovision can be used to sign the bundle.
- """
- profiles_dir = os.path.join(
- os.environ['HOME'], 'Library', 'MobileDevice', 'Provisioning Profiles')
- if not os.path.isdir(profiles_dir):
- print >>sys.stderr, (
- 'cannot find mobile provisioning for %s' % bundle_identifier)
- sys.exit(1)
- provisioning_profiles = None
- if profile:
- profile_path = os.path.join(profiles_dir, profile + '.mobileprovision')
- if os.path.exists(profile_path):
- provisioning_profiles = [profile_path]
- if not provisioning_profiles:
- provisioning_profiles = glob.glob(
- os.path.join(profiles_dir, '*.mobileprovision'))
- valid_provisioning_profiles = {}
- for profile_path in provisioning_profiles:
- profile_data = self._LoadProvisioningProfile(profile_path)
- app_id_pattern = profile_data.get(
- 'Entitlements', {}).get('application-identifier', '')
- for team_identifier in profile_data.get('TeamIdentifier', []):
- app_id = '%s.%s' % (team_identifier, bundle_identifier)
- if fnmatch.fnmatch(app_id, app_id_pattern):
- valid_provisioning_profiles[app_id_pattern] = (
- profile_path, profile_data, team_identifier)
- if not valid_provisioning_profiles:
- print >>sys.stderr, (
- 'cannot find mobile provisioning for %s' % bundle_identifier)
- sys.exit(1)
- # If the user has multiple provisioning profiles installed that can be
- # used for ${bundle_identifier}, pick the most specific one (ie. the
- # provisioning profile whose pattern is the longest).
- selected_key = max(valid_provisioning_profiles, key=lambda v: len(v))
- return valid_provisioning_profiles[selected_key]
-
- def _LoadProvisioningProfile(self, profile_path):
- """Extracts the plist embedded in a provisioning profile.
-
- Args:
- profile_path: string, path to the .mobileprovision file
-
- Returns:
- Content of the plist embedded in the provisioning profile as a dictionary.
- """
- with tempfile.NamedTemporaryFile() as temp:
- subprocess.check_call([
- 'security', 'cms', '-D', '-i', profile_path, '-o', temp.name])
- return self._LoadPlistMaybeBinary(temp.name)
-
- def _MergePlist(self, merged_plist, plist):
- """Merge |plist| into |merged_plist|."""
- for key, value in plist.iteritems():
- if isinstance(value, dict):
- merged_value = merged_plist.get(key, {})
- if isinstance(merged_value, dict):
- self._MergePlist(merged_value, value)
- merged_plist[key] = merged_value
- else:
- merged_plist[key] = value
- else:
- merged_plist[key] = value
-
- def _LoadPlistMaybeBinary(self, plist_path):
- """Loads into a memory a plist possibly encoded in binary format.
-
- This is a wrapper around plistlib.readPlist that tries to convert the
- plist to the XML format if it can't be parsed (assuming that it is in
- the binary format).
-
- Args:
- plist_path: string, path to a plist file, in XML or binary format
-
- Returns:
- Content of the plist as a dictionary.
- """
- try:
- # First, try to read the file using plistlib that only supports XML,
- # and if an exception is raised, convert a temporary copy to XML and
- # load that copy.
- return plistlib.readPlist(plist_path)
- except:
- pass
- with tempfile.NamedTemporaryFile() as temp:
- shutil.copy2(plist_path, temp.name)
- subprocess.check_call(['plutil', '-convert', 'xml1', temp.name])
- return plistlib.readPlist(temp.name)
-
- def _GetSubstitutions(self, bundle_identifier, app_identifier_prefix):
- """Constructs a dictionary of variable substitutions for Entitlements.plist.
-
- Args:
- bundle_identifier: string, value of CFBundleIdentifier from Info.plist
- app_identifier_prefix: string, value for AppIdentifierPrefix
-
- Returns:
- Dictionary of substitutions to apply when generating Entitlements.plist.
- """
- return {
- 'CFBundleIdentifier': bundle_identifier,
- 'AppIdentifierPrefix': app_identifier_prefix,
- }
-
- def _GetCFBundleIdentifier(self):
- """Extracts CFBundleIdentifier value from Info.plist in the bundle.
-
- Returns:
- Value of CFBundleIdentifier in the Info.plist located in the bundle.
- """
- info_plist_path = os.path.join(
- os.environ['TARGET_BUILD_DIR'],
- os.environ['INFOPLIST_PATH'])
- info_plist_data = self._LoadPlistMaybeBinary(info_plist_path)
- return info_plist_data['CFBundleIdentifier']
-
- def _InstallEntitlements(self, entitlements, substitutions, overrides):
- """Generates and install the ${BundleName}.xcent entitlements file.
-
- Expands variables "$(variable)" pattern in the source entitlements file,
- add extra entitlements defined in the .mobileprovision file and the copy
- the generated plist to "${BundlePath}.xcent".
-
- Args:
- entitlements: string, optional, path to the Entitlements.plist template
- to use, defaults to "${SDKROOT}/Entitlements.plist"
- substitutions: dictionary, variable substitutions
- overrides: dictionary, values to add to the entitlements
-
- Returns:
- Path to the generated entitlements file.
- """
- source_path = entitlements
- target_path = os.path.join(
- os.environ['BUILT_PRODUCTS_DIR'],
- os.environ['PRODUCT_NAME'] + '.xcent')
- if not source_path:
- source_path = os.path.join(
- os.environ['SDKROOT'],
- 'Entitlements.plist')
- shutil.copy2(source_path, target_path)
- data = self._LoadPlistMaybeBinary(target_path)
- data = self._ExpandVariables(data, substitutions)
- if overrides:
- for key in overrides:
- if key not in data:
- data[key] = overrides[key]
- plistlib.writePlist(data, target_path)
- return target_path
-
- def _ExpandVariables(self, data, substitutions):
- """Expands variables "$(variable)" in data.
-
- Args:
- data: object, can be either string, list or dictionary
- substitutions: dictionary, variable substitutions to perform
-
- Returns:
- Copy of data where each references to "$(variable)" has been replaced
- by the corresponding value found in substitutions, or left intact if
- the key was not found.
- """
- if isinstance(data, str):
- for key, value in substitutions.iteritems():
- data = data.replace('$(%s)' % key, value)
- return data
- if isinstance(data, list):
- return [self._ExpandVariables(v, substitutions) for v in data]
- if isinstance(data, dict):
- return {k: self._ExpandVariables(data[k], substitutions) for k in data}
- return data
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv[1:]))
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py b/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
deleted file mode 100644
index ca67b12..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
+++ /dev/null
@@ -1,1087 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-This module helps emulate Visual Studio 2008 behavior on top of other
-build systems, primarily ninja.
-"""
-
-import os
-import re
-import subprocess
-import sys
-
-from gyp.common import OrderedSet
-import gyp.MSVSUtil
-import gyp.MSVSVersion
-
-
-windows_quoter_regex = re.compile(r'(\\*)"')
-
-
-def QuoteForRspFile(arg):
- """Quote a command line argument so that it appears as one argument when
- processed via cmd.exe and parsed by CommandLineToArgvW (as is typical for
- Windows programs)."""
- # See http://goo.gl/cuFbX and http://goo.gl/dhPnp including the comment
- # threads. This is actually the quoting rules for CommandLineToArgvW, not
- # for the shell, because the shell doesn't do anything in Windows. This
- # works more or less because most programs (including the compiler, etc.)
- # use that function to handle command line arguments.
-
- # For a literal quote, CommandLineToArgvW requires 2n+1 backslashes
- # preceding it, and results in n backslashes + the quote. So we substitute
- # in 2* what we match, +1 more, plus the quote.
- arg = windows_quoter_regex.sub(lambda mo: 2 * mo.group(1) + '\\"', arg)
-
- # %'s also need to be doubled otherwise they're interpreted as batch
- # positional arguments. Also make sure to escape the % so that they're
- # passed literally through escaping so they can be singled to just the
- # original %. Otherwise, trying to pass the literal representation that
- # looks like an environment variable to the shell (e.g. %PATH%) would fail.
- arg = arg.replace('%', '%%')
-
- # These commands are used in rsp files, so no escaping for the shell (via ^)
- # is necessary.
-
- # Finally, wrap the whole thing in quotes so that the above quote rule
- # applies and whitespace isn't a word break.
- return '"' + arg + '"'
-
-
-def EncodeRspFileList(args):
- """Process a list of arguments using QuoteCmdExeArgument."""
- # Note that the first argument is assumed to be the command. Don't add
- # quotes around it because then built-ins like 'echo', etc. won't work.
- # Take care to normpath only the path in the case of 'call ../x.bat' because
- # otherwise the whole thing is incorrectly interpreted as a path and not
- # normalized correctly.
- if not args: return ''
- if args[0].startswith('call '):
- call, program = args[0].split(' ', 1)
- program = call + ' ' + os.path.normpath(program)
- else:
- program = os.path.normpath(args[0])
- return program + ' ' + ' '.join(QuoteForRspFile(arg) for arg in args[1:])
-
-
-def _GenericRetrieve(root, default, path):
- """Given a list of dictionary keys |path| and a tree of dicts |root|, find
- value at path, or return |default| if any of the path doesn't exist."""
- if not root:
- return default
- if not path:
- return root
- return _GenericRetrieve(root.get(path[0]), default, path[1:])
-
-
-def _AddPrefix(element, prefix):
- """Add |prefix| to |element| or each subelement if element is iterable."""
- if element is None:
- return element
- # Note, not Iterable because we don't want to handle strings like that.
- if isinstance(element, list) or isinstance(element, tuple):
- return [prefix + e for e in element]
- else:
- return prefix + element
-
-
-def _DoRemapping(element, map):
- """If |element| then remap it through |map|. If |element| is iterable then
- each item will be remapped. Any elements not found will be removed."""
- if map is not None and element is not None:
- if not callable(map):
- map = map.get # Assume it's a dict, otherwise a callable to do the remap.
- if isinstance(element, list) or isinstance(element, tuple):
- element = filter(None, [map(elem) for elem in element])
- else:
- element = map(element)
- return element
-
-
-def _AppendOrReturn(append, element):
- """If |append| is None, simply return |element|. If |append| is not None,
- then add |element| to it, adding each item in |element| if it's a list or
- tuple."""
- if append is not None and element is not None:
- if isinstance(element, list) or isinstance(element, tuple):
- append.extend(element)
- else:
- append.append(element)
- else:
- return element
-
-
-def _FindDirectXInstallation():
- """Try to find an installation location for the DirectX SDK. Check for the
- standard environment variable, and if that doesn't exist, try to find
- via the registry. May return None if not found in either location."""
- # Return previously calculated value, if there is one
- if hasattr(_FindDirectXInstallation, 'dxsdk_dir'):
- return _FindDirectXInstallation.dxsdk_dir
-
- dxsdk_dir = os.environ.get('DXSDK_DIR')
- if not dxsdk_dir:
- # Setup params to pass to and attempt to launch reg.exe.
- cmd = ['reg.exe', 'query', r'HKLM\Software\Microsoft\DirectX', '/s']
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- for line in p.communicate()[0].splitlines():
- if 'InstallPath' in line:
- dxsdk_dir = line.split(' ')[3] + "\\"
-
- # Cache return value
- _FindDirectXInstallation.dxsdk_dir = dxsdk_dir
- return dxsdk_dir
-
-
-def GetGlobalVSMacroEnv(vs_version):
- """Get a dict of variables mapping internal VS macro names to their gyp
- equivalents. Returns all variables that are independent of the target."""
- env = {}
- # '$(VSInstallDir)' and '$(VCInstallDir)' are available when and only when
- # Visual Studio is actually installed.
- if vs_version.Path():
- env['$(VSInstallDir)'] = vs_version.Path()
- env['$(VCInstallDir)'] = os.path.join(vs_version.Path(), 'VC') + '\\'
- # Chromium uses DXSDK_DIR in include/lib paths, but it may or may not be
- # set. This happens when the SDK is sync'd via src-internal, rather than
- # by typical end-user installation of the SDK. If it's not set, we don't
- # want to leave the unexpanded variable in the path, so simply strip it.
- dxsdk_dir = _FindDirectXInstallation()
- env['$(DXSDK_DIR)'] = dxsdk_dir if dxsdk_dir else ''
- # Try to find an installation location for the Windows DDK by checking
- # the WDK_DIR environment variable, may be None.
- env['$(WDK_DIR)'] = os.environ.get('WDK_DIR', '')
- return env
-
-def ExtractSharedMSVSSystemIncludes(configs, generator_flags):
- """Finds msvs_system_include_dirs that are common to all targets, removes
- them from all targets, and returns an OrderedSet containing them."""
- all_system_includes = OrderedSet(
- configs[0].get('msvs_system_include_dirs', []))
- for config in configs[1:]:
- system_includes = config.get('msvs_system_include_dirs', [])
- all_system_includes = all_system_includes & OrderedSet(system_includes)
- if not all_system_includes:
- return None
- # Expand macros in all_system_includes.
- env = GetGlobalVSMacroEnv(GetVSVersion(generator_flags))
- expanded_system_includes = OrderedSet([ExpandMacros(include, env)
- for include in all_system_includes])
- if any(['$' in include for include in expanded_system_includes]):
- # Some path relies on target-specific variables, bail.
- return None
-
- # Remove system includes shared by all targets from the targets.
- for config in configs:
- includes = config.get('msvs_system_include_dirs', [])
- if includes: # Don't insert a msvs_system_include_dirs key if not needed.
- # This must check the unexpanded includes list:
- new_includes = [i for i in includes if i not in all_system_includes]
- config['msvs_system_include_dirs'] = new_includes
- return expanded_system_includes
-
-
-class MsvsSettings(object):
- """A class that understands the gyp 'msvs_...' values (especially the
- msvs_settings field). They largely correpond to the VS2008 IDE DOM. This
- class helps map those settings to command line options."""
-
- def __init__(self, spec, generator_flags):
- self.spec = spec
- self.vs_version = GetVSVersion(generator_flags)
-
- supported_fields = [
- ('msvs_configuration_attributes', dict),
- ('msvs_settings', dict),
- ('msvs_system_include_dirs', list),
- ('msvs_disabled_warnings', list),
- ('msvs_precompiled_header', str),
- ('msvs_precompiled_source', str),
- ('msvs_configuration_platform', str),
- ('msvs_target_platform', str),
- ]
- configs = spec['configurations']
- for field, default in supported_fields:
- setattr(self, field, {})
- for configname, config in configs.iteritems():
- getattr(self, field)[configname] = config.get(field, default())
-
- self.msvs_cygwin_dirs = spec.get('msvs_cygwin_dirs', ['.'])
-
- unsupported_fields = [
- 'msvs_prebuild',
- 'msvs_postbuild',
- ]
- unsupported = []
- for field in unsupported_fields:
- for config in configs.values():
- if field in config:
- unsupported += ["%s not supported (target %s)." %
- (field, spec['target_name'])]
- if unsupported:
- raise Exception('\n'.join(unsupported))
-
- def GetExtension(self):
- """Returns the extension for the target, with no leading dot.
-
- Uses 'product_extension' if specified, otherwise uses MSVS defaults based on
- the target type.
- """
- ext = self.spec.get('product_extension', None)
- if ext:
- return ext
- return gyp.MSVSUtil.TARGET_TYPE_EXT.get(self.spec['type'], '')
-
- def GetVSMacroEnv(self, base_to_build=None, config=None):
- """Get a dict of variables mapping internal VS macro names to their gyp
- equivalents."""
- target_platform = 'Win32' if self.GetArch(config) == 'x86' else 'x64'
- target_name = self.spec.get('product_prefix', '') + \
- self.spec.get('product_name', self.spec['target_name'])
- target_dir = base_to_build + '\\' if base_to_build else ''
- target_ext = '.' + self.GetExtension()
- target_file_name = target_name + target_ext
-
- replacements = {
- '$(InputName)': '${root}',
- '$(InputPath)': '${source}',
- '$(IntDir)': '$!INTERMEDIATE_DIR',
- '$(OutDir)\\': target_dir,
- '$(PlatformName)': target_platform,
- '$(ProjectDir)\\': '',
- '$(ProjectName)': self.spec['target_name'],
- '$(TargetDir)\\': target_dir,
- '$(TargetExt)': target_ext,
- '$(TargetFileName)': target_file_name,
- '$(TargetName)': target_name,
- '$(TargetPath)': os.path.join(target_dir, target_file_name),
- }
- replacements.update(GetGlobalVSMacroEnv(self.vs_version))
- return replacements
-
- def ConvertVSMacros(self, s, base_to_build=None, config=None):
- """Convert from VS macro names to something equivalent."""
- env = self.GetVSMacroEnv(base_to_build, config=config)
- return ExpandMacros(s, env)
-
- def AdjustLibraries(self, libraries):
- """Strip -l from library if it's specified with that."""
- libs = [lib[2:] if lib.startswith('-l') else lib for lib in libraries]
- return [lib + '.lib' if not lib.endswith('.lib') else lib for lib in libs]
-
- def _GetAndMunge(self, field, path, default, prefix, append, map):
- """Retrieve a value from |field| at |path| or return |default|. If
- |append| is specified, and the item is found, it will be appended to that
- object instead of returned. If |map| is specified, results will be
- remapped through |map| before being returned or appended."""
- result = _GenericRetrieve(field, default, path)
- result = _DoRemapping(result, map)
- result = _AddPrefix(result, prefix)
- return _AppendOrReturn(append, result)
-
- class _GetWrapper(object):
- def __init__(self, parent, field, base_path, append=None):
- self.parent = parent
- self.field = field
- self.base_path = [base_path]
- self.append = append
- def __call__(self, name, map=None, prefix='', default=None):
- return self.parent._GetAndMunge(self.field, self.base_path + [name],
- default=default, prefix=prefix, append=self.append, map=map)
-
- def GetArch(self, config):
- """Get architecture based on msvs_configuration_platform and
- msvs_target_platform. Returns either 'x86' or 'x64'."""
- configuration_platform = self.msvs_configuration_platform.get(config, '')
- platform = self.msvs_target_platform.get(config, '')
- if not platform: # If no specific override, use the configuration's.
- platform = configuration_platform
- # Map from platform to architecture.
- return {'Win32': 'x86', 'x64': 'x64'}.get(platform, 'x86')
-
- def _TargetConfig(self, config):
- """Returns the target-specific configuration."""
- # There's two levels of architecture/platform specification in VS. The
- # first level is globally for the configuration (this is what we consider
- # "the" config at the gyp level, which will be something like 'Debug' or
- # 'Release_x64'), and a second target-specific configuration, which is an
- # override for the global one. |config| is remapped here to take into
- # account the local target-specific overrides to the global configuration.
- arch = self.GetArch(config)
- if arch == 'x64' and not config.endswith('_x64'):
- config += '_x64'
- if arch == 'x86' and config.endswith('_x64'):
- config = config.rsplit('_', 1)[0]
- return config
-
- def _Setting(self, path, config,
- default=None, prefix='', append=None, map=None):
- """_GetAndMunge for msvs_settings."""
- return self._GetAndMunge(
- self.msvs_settings[config], path, default, prefix, append, map)
-
- def _ConfigAttrib(self, path, config,
- default=None, prefix='', append=None, map=None):
- """_GetAndMunge for msvs_configuration_attributes."""
- return self._GetAndMunge(
- self.msvs_configuration_attributes[config],
- path, default, prefix, append, map)
-
- def AdjustIncludeDirs(self, include_dirs, config):
- """Updates include_dirs to expand VS specific paths, and adds the system
- include dirs used for platform SDK and similar."""
- config = self._TargetConfig(config)
- includes = include_dirs + self.msvs_system_include_dirs[config]
- includes.extend(self._Setting(
- ('VCCLCompilerTool', 'AdditionalIncludeDirectories'), config, default=[]))
- return [self.ConvertVSMacros(p, config=config) for p in includes]
-
- def AdjustMidlIncludeDirs(self, midl_include_dirs, config):
- """Updates midl_include_dirs to expand VS specific paths, and adds the
- system include dirs used for platform SDK and similar."""
- config = self._TargetConfig(config)
- includes = midl_include_dirs + self.msvs_system_include_dirs[config]
- includes.extend(self._Setting(
- ('VCMIDLTool', 'AdditionalIncludeDirectories'), config, default=[]))
- return [self.ConvertVSMacros(p, config=config) for p in includes]
-
- def GetComputedDefines(self, config):
- """Returns the set of defines that are injected to the defines list based
- on other VS settings."""
- config = self._TargetConfig(config)
- defines = []
- if self._ConfigAttrib(['CharacterSet'], config) == '1':
- defines.extend(('_UNICODE', 'UNICODE'))
- if self._ConfigAttrib(['CharacterSet'], config) == '2':
- defines.append('_MBCS')
- defines.extend(self._Setting(
- ('VCCLCompilerTool', 'PreprocessorDefinitions'), config, default=[]))
- return defines
-
- def GetCompilerPdbName(self, config, expand_special):
- """Get the pdb file name that should be used for compiler invocations, or
- None if there's no explicit name specified."""
- config = self._TargetConfig(config)
- pdbname = self._Setting(
- ('VCCLCompilerTool', 'ProgramDataBaseFileName'), config)
- if pdbname:
- pdbname = expand_special(self.ConvertVSMacros(pdbname))
- return pdbname
-
- def GetMapFileName(self, config, expand_special):
- """Gets the explicitly overriden map file name for a target or returns None
- if it's not set."""
- config = self._TargetConfig(config)
- map_file = self._Setting(('VCLinkerTool', 'MapFileName'), config)
- if map_file:
- map_file = expand_special(self.ConvertVSMacros(map_file, config=config))
- return map_file
-
- def GetOutputName(self, config, expand_special):
- """Gets the explicitly overridden output name for a target or returns None
- if it's not overridden."""
- config = self._TargetConfig(config)
- type = self.spec['type']
- root = 'VCLibrarianTool' if type == 'static_library' else 'VCLinkerTool'
- # TODO(scottmg): Handle OutputDirectory without OutputFile.
- output_file = self._Setting((root, 'OutputFile'), config)
- if output_file:
- output_file = expand_special(self.ConvertVSMacros(
- output_file, config=config))
- return output_file
-
- def GetPDBName(self, config, expand_special, default):
- """Gets the explicitly overridden pdb name for a target or returns
- default if it's not overridden, or if no pdb will be generated."""
- config = self._TargetConfig(config)
- output_file = self._Setting(('VCLinkerTool', 'ProgramDatabaseFile'), config)
- generate_debug_info = self._Setting(
- ('VCLinkerTool', 'GenerateDebugInformation'), config)
- if generate_debug_info == 'true':
- if output_file:
- return expand_special(self.ConvertVSMacros(output_file, config=config))
- else:
- return default
- else:
- return None
-
- def GetNoImportLibrary(self, config):
- """If NoImportLibrary: true, ninja will not expect the output to include
- an import library."""
- config = self._TargetConfig(config)
- noimplib = self._Setting(('NoImportLibrary',), config)
- return noimplib == 'true'
-
- def GetAsmflags(self, config):
- """Returns the flags that need to be added to ml invocations."""
- config = self._TargetConfig(config)
- asmflags = []
- safeseh = self._Setting(('MASM', 'UseSafeExceptionHandlers'), config)
- if safeseh == 'true':
- asmflags.append('/safeseh')
- return asmflags
-
- def GetCflags(self, config):
- """Returns the flags that need to be added to .c and .cc compilations."""
- config = self._TargetConfig(config)
- cflags = []
- cflags.extend(['/wd' + w for w in self.msvs_disabled_warnings[config]])
- cl = self._GetWrapper(self, self.msvs_settings[config],
- 'VCCLCompilerTool', append=cflags)
- cl('Optimization',
- map={'0': 'd', '1': '1', '2': '2', '3': 'x'}, prefix='/O', default='2')
- cl('InlineFunctionExpansion', prefix='/Ob')
- cl('DisableSpecificWarnings', prefix='/wd')
- cl('StringPooling', map={'true': '/GF'})
- cl('EnableFiberSafeOptimizations', map={'true': '/GT'})
- cl('OmitFramePointers', map={'false': '-', 'true': ''}, prefix='/Oy')
- cl('EnableIntrinsicFunctions', map={'false': '-', 'true': ''}, prefix='/Oi')
- cl('FavorSizeOrSpeed', map={'1': 't', '2': 's'}, prefix='/O')
- cl('FloatingPointModel',
- map={'0': 'precise', '1': 'strict', '2': 'fast'}, prefix='/fp:',
- default='0')
- cl('CompileAsManaged', map={'false': '', 'true': '/clr'})
- cl('WholeProgramOptimization', map={'true': '/GL'})
- cl('WarningLevel', prefix='/W')
- cl('WarnAsError', map={'true': '/WX'})
- cl('CallingConvention',
- map={'0': 'd', '1': 'r', '2': 'z', '3': 'v'}, prefix='/G')
- cl('DebugInformationFormat',
- map={'1': '7', '3': 'i', '4': 'I'}, prefix='/Z')
- cl('RuntimeTypeInfo', map={'true': '/GR', 'false': '/GR-'})
- cl('EnableFunctionLevelLinking', map={'true': '/Gy', 'false': '/Gy-'})
- cl('MinimalRebuild', map={'true': '/Gm'})
- cl('BufferSecurityCheck', map={'true': '/GS', 'false': '/GS-'})
- cl('BasicRuntimeChecks', map={'1': 's', '2': 'u', '3': '1'}, prefix='/RTC')
- cl('RuntimeLibrary',
- map={'0': 'T', '1': 'Td', '2': 'D', '3': 'Dd'}, prefix='/M')
- cl('ExceptionHandling', map={'1': 'sc','2': 'a'}, prefix='/EH')
- cl('DefaultCharIsUnsigned', map={'true': '/J'})
- cl('TreatWChar_tAsBuiltInType',
- map={'false': '-', 'true': ''}, prefix='/Zc:wchar_t')
- cl('EnablePREfast', map={'true': '/analyze'})
- cl('AdditionalOptions', prefix='')
- cl('EnableEnhancedInstructionSet',
- map={'1': 'SSE', '2': 'SSE2', '3': 'AVX', '4': 'IA32', '5': 'AVX2'},
- prefix='/arch:')
- cflags.extend(['/FI' + f for f in self._Setting(
- ('VCCLCompilerTool', 'ForcedIncludeFiles'), config, default=[])])
- if self.vs_version.short_name in ('2013', '2013e', '2015'):
- # New flag required in 2013 to maintain previous PDB behavior.
- cflags.append('/FS')
- # ninja handles parallelism by itself, don't have the compiler do it too.
- cflags = filter(lambda x: not x.startswith('/MP'), cflags)
- return cflags
-
- def _GetPchFlags(self, config, extension):
- """Get the flags to be added to the cflags for precompiled header support.
- """
- config = self._TargetConfig(config)
- # The PCH is only built once by a particular source file. Usage of PCH must
- # only be for the same language (i.e. C vs. C++), so only include the pch
- # flags when the language matches.
- if self.msvs_precompiled_header[config]:
- source_ext = os.path.splitext(self.msvs_precompiled_source[config])[1]
- if _LanguageMatchesForPch(source_ext, extension):
- pch = os.path.split(self.msvs_precompiled_header[config])[1]
- return ['/Yu' + pch, '/FI' + pch, '/Fp${pchprefix}.' + pch + '.pch']
- return []
-
- def GetCflagsC(self, config):
- """Returns the flags that need to be added to .c compilations."""
- config = self._TargetConfig(config)
- return self._GetPchFlags(config, '.c')
-
- def GetCflagsCC(self, config):
- """Returns the flags that need to be added to .cc compilations."""
- config = self._TargetConfig(config)
- return ['/TP'] + self._GetPchFlags(config, '.cc')
-
- def _GetAdditionalLibraryDirectories(self, root, config, gyp_to_build_path):
- """Get and normalize the list of paths in AdditionalLibraryDirectories
- setting."""
- config = self._TargetConfig(config)
- libpaths = self._Setting((root, 'AdditionalLibraryDirectories'),
- config, default=[])
- libpaths = [os.path.normpath(
- gyp_to_build_path(self.ConvertVSMacros(p, config=config)))
- for p in libpaths]
- return ['/LIBPATH:"' + p + '"' for p in libpaths]
-
- def GetLibFlags(self, config, gyp_to_build_path):
- """Returns the flags that need to be added to lib commands."""
- config = self._TargetConfig(config)
- libflags = []
- lib = self._GetWrapper(self, self.msvs_settings[config],
- 'VCLibrarianTool', append=libflags)
- libflags.extend(self._GetAdditionalLibraryDirectories(
- 'VCLibrarianTool', config, gyp_to_build_path))
- lib('LinkTimeCodeGeneration', map={'true': '/LTCG'})
- lib('TargetMachine', map={'1': 'X86', '17': 'X64', '3': 'ARM'},
- prefix='/MACHINE:')
- lib('AdditionalOptions')
- return libflags
-
- def GetDefFile(self, gyp_to_build_path):
- """Returns the .def file from sources, if any. Otherwise returns None."""
- spec = self.spec
- if spec['type'] in ('shared_library', 'loadable_module', 'executable'):
- def_files = [s for s in spec.get('sources', []) if s.endswith('.def')]
- if len(def_files) == 1:
- return gyp_to_build_path(def_files[0])
- elif len(def_files) > 1:
- raise Exception("Multiple .def files")
- return None
-
- def _GetDefFileAsLdflags(self, ldflags, gyp_to_build_path):
- """.def files get implicitly converted to a ModuleDefinitionFile for the
- linker in the VS generator. Emulate that behaviour here."""
- def_file = self.GetDefFile(gyp_to_build_path)
- if def_file:
- ldflags.append('/DEF:"%s"' % def_file)
-
- def GetPGDName(self, config, expand_special):
- """Gets the explicitly overridden pgd name for a target or returns None
- if it's not overridden."""
- config = self._TargetConfig(config)
- output_file = self._Setting(
- ('VCLinkerTool', 'ProfileGuidedDatabase'), config)
- if output_file:
- output_file = expand_special(self.ConvertVSMacros(
- output_file, config=config))
- return output_file
-
- def GetLdflags(self, config, gyp_to_build_path, expand_special,
- manifest_base_name, output_name, is_executable, build_dir):
- """Returns the flags that need to be added to link commands, and the
- manifest files."""
- config = self._TargetConfig(config)
- ldflags = []
- ld = self._GetWrapper(self, self.msvs_settings[config],
- 'VCLinkerTool', append=ldflags)
- self._GetDefFileAsLdflags(ldflags, gyp_to_build_path)
- ld('GenerateDebugInformation', map={'true': '/DEBUG'})
- ld('TargetMachine', map={'1': 'X86', '17': 'X64', '3': 'ARM'},
- prefix='/MACHINE:')
- ldflags.extend(self._GetAdditionalLibraryDirectories(
- 'VCLinkerTool', config, gyp_to_build_path))
- ld('DelayLoadDLLs', prefix='/DELAYLOAD:')
- ld('TreatLinkerWarningAsErrors', prefix='/WX',
- map={'true': '', 'false': ':NO'})
- out = self.GetOutputName(config, expand_special)
- if out:
- ldflags.append('/OUT:' + out)
- pdb = self.GetPDBName(config, expand_special, output_name + '.pdb')
- if pdb:
- ldflags.append('/PDB:' + pdb)
- pgd = self.GetPGDName(config, expand_special)
- if pgd:
- ldflags.append('/PGD:' + pgd)
- map_file = self.GetMapFileName(config, expand_special)
- ld('GenerateMapFile', map={'true': '/MAP:' + map_file if map_file
- else '/MAP'})
- ld('MapExports', map={'true': '/MAPINFO:EXPORTS'})
- ld('AdditionalOptions', prefix='')
-
- minimum_required_version = self._Setting(
- ('VCLinkerTool', 'MinimumRequiredVersion'), config, default='')
- if minimum_required_version:
- minimum_required_version = ',' + minimum_required_version
- ld('SubSystem',
- map={'1': 'CONSOLE%s' % minimum_required_version,
- '2': 'WINDOWS%s' % minimum_required_version},
- prefix='/SUBSYSTEM:')
-
- stack_reserve_size = self._Setting(
- ('VCLinkerTool', 'StackReserveSize'), config, default='')
- if stack_reserve_size:
- stack_commit_size = self._Setting(
- ('VCLinkerTool', 'StackCommitSize'), config, default='')
- if stack_commit_size:
- stack_commit_size = ',' + stack_commit_size
- ldflags.append('/STACK:%s%s' % (stack_reserve_size, stack_commit_size))
-
- ld('TerminalServerAware', map={'1': ':NO', '2': ''}, prefix='/TSAWARE')
- ld('LinkIncremental', map={'1': ':NO', '2': ''}, prefix='/INCREMENTAL')
- ld('BaseAddress', prefix='/BASE:')
- ld('FixedBaseAddress', map={'1': ':NO', '2': ''}, prefix='/FIXED')
- ld('RandomizedBaseAddress',
- map={'1': ':NO', '2': ''}, prefix='/DYNAMICBASE')
- ld('DataExecutionPrevention',
- map={'1': ':NO', '2': ''}, prefix='/NXCOMPAT')
- ld('OptimizeReferences', map={'1': 'NOREF', '2': 'REF'}, prefix='/OPT:')
- ld('ForceSymbolReferences', prefix='/INCLUDE:')
- ld('EnableCOMDATFolding', map={'1': 'NOICF', '2': 'ICF'}, prefix='/OPT:')
- ld('LinkTimeCodeGeneration',
- map={'1': '', '2': ':PGINSTRUMENT', '3': ':PGOPTIMIZE',
- '4': ':PGUPDATE'},
- prefix='/LTCG')
- ld('IgnoreDefaultLibraryNames', prefix='/NODEFAULTLIB:')
- ld('ResourceOnlyDLL', map={'true': '/NOENTRY'})
- ld('EntryPointSymbol', prefix='/ENTRY:')
- ld('Profile', map={'true': '/PROFILE'})
- ld('LargeAddressAware',
- map={'1': ':NO', '2': ''}, prefix='/LARGEADDRESSAWARE')
- # TODO(scottmg): This should sort of be somewhere else (not really a flag).
- ld('AdditionalDependencies', prefix='')
-
- if self.GetArch(config) == 'x86':
- safeseh_default = 'true'
- else:
- safeseh_default = None
- ld('ImageHasSafeExceptionHandlers',
- map={'false': ':NO', 'true': ''}, prefix='/SAFESEH',
- default=safeseh_default)
-
- # If the base address is not specifically controlled, DYNAMICBASE should
- # be on by default.
- base_flags = filter(lambda x: 'DYNAMICBASE' in x or x == '/FIXED',
- ldflags)
- if not base_flags:
- ldflags.append('/DYNAMICBASE')
-
- # If the NXCOMPAT flag has not been specified, default to on. Despite the
- # documentation that says this only defaults to on when the subsystem is
- # Vista or greater (which applies to the linker), the IDE defaults it on
- # unless it's explicitly off.
- if not filter(lambda x: 'NXCOMPAT' in x, ldflags):
- ldflags.append('/NXCOMPAT')
-
- have_def_file = filter(lambda x: x.startswith('/DEF:'), ldflags)
- manifest_flags, intermediate_manifest, manifest_files = \
- self._GetLdManifestFlags(config, manifest_base_name, gyp_to_build_path,
- is_executable and not have_def_file, build_dir)
- ldflags.extend(manifest_flags)
- return ldflags, intermediate_manifest, manifest_files
-
- def _GetLdManifestFlags(self, config, name, gyp_to_build_path,
- allow_isolation, build_dir):
- """Returns a 3-tuple:
- - the set of flags that need to be added to the link to generate
- a default manifest
- - the intermediate manifest that the linker will generate that should be
- used to assert it doesn't add anything to the merged one.
- - the list of all the manifest files to be merged by the manifest tool and
- included into the link."""
- generate_manifest = self._Setting(('VCLinkerTool', 'GenerateManifest'),
- config,
- default='true')
- if generate_manifest != 'true':
- # This means not only that the linker should not generate the intermediate
- # manifest but also that the manifest tool should do nothing even when
- # additional manifests are specified.
- return ['/MANIFEST:NO'], [], []
-
- output_name = name + '.intermediate.manifest'
- flags = [
- '/MANIFEST',
- '/ManifestFile:' + output_name,
- ]
-
- # Instead of using the MANIFESTUAC flags, we generate a .manifest to
- # include into the list of manifests. This allows us to avoid the need to
- # do two passes during linking. The /MANIFEST flag and /ManifestFile are
- # still used, and the intermediate manifest is used to assert that the
- # final manifest we get from merging all the additional manifest files
- # (plus the one we generate here) isn't modified by merging the
- # intermediate into it.
-
- # Always NO, because we generate a manifest file that has what we want.
- flags.append('/MANIFESTUAC:NO')
-
- config = self._TargetConfig(config)
- enable_uac = self._Setting(('VCLinkerTool', 'EnableUAC'), config,
- default='true')
- manifest_files = []
- generated_manifest_outer = \
-"<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" \
-"<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>%s" \
-"</assembly>"
- if enable_uac == 'true':
- execution_level = self._Setting(('VCLinkerTool', 'UACExecutionLevel'),
- config, default='0')
- execution_level_map = {
- '0': 'asInvoker',
- '1': 'highestAvailable',
- '2': 'requireAdministrator'
- }
-
- ui_access = self._Setting(('VCLinkerTool', 'UACUIAccess'), config,
- default='false')
-
- inner = '''
-<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
- <security>
- <requestedPrivileges>
- <requestedExecutionLevel level='%s' uiAccess='%s' />
- </requestedPrivileges>
- </security>
-</trustInfo>''' % (execution_level_map[execution_level], ui_access)
- else:
- inner = ''
-
- generated_manifest_contents = generated_manifest_outer % inner
- generated_name = name + '.generated.manifest'
- # Need to join with the build_dir here as we're writing it during
- # generation time, but we return the un-joined version because the build
- # will occur in that directory. We only write the file if the contents
- # have changed so that simply regenerating the project files doesn't
- # cause a relink.
- build_dir_generated_name = os.path.join(build_dir, generated_name)
- gyp.common.EnsureDirExists(build_dir_generated_name)
- f = gyp.common.WriteOnDiff(build_dir_generated_name)
- f.write(generated_manifest_contents)
- f.close()
- manifest_files = [generated_name]
-
- if allow_isolation:
- flags.append('/ALLOWISOLATION')
-
- manifest_files += self._GetAdditionalManifestFiles(config,
- gyp_to_build_path)
- return flags, output_name, manifest_files
-
- def _GetAdditionalManifestFiles(self, config, gyp_to_build_path):
- """Gets additional manifest files that are added to the default one
- generated by the linker."""
- files = self._Setting(('VCManifestTool', 'AdditionalManifestFiles'), config,
- default=[])
- if isinstance(files, str):
- files = files.split(';')
- return [os.path.normpath(
- gyp_to_build_path(self.ConvertVSMacros(f, config=config)))
- for f in files]
-
- def IsUseLibraryDependencyInputs(self, config):
- """Returns whether the target should be linked via Use Library Dependency
- Inputs (using component .objs of a given .lib)."""
- config = self._TargetConfig(config)
- uldi = self._Setting(('VCLinkerTool', 'UseLibraryDependencyInputs'), config)
- return uldi == 'true'
-
- def IsEmbedManifest(self, config):
- """Returns whether manifest should be linked into binary."""
- config = self._TargetConfig(config)
- embed = self._Setting(('VCManifestTool', 'EmbedManifest'), config,
- default='true')
- return embed == 'true'
-
- def IsLinkIncremental(self, config):
- """Returns whether the target should be linked incrementally."""
- config = self._TargetConfig(config)
- link_inc = self._Setting(('VCLinkerTool', 'LinkIncremental'), config)
- return link_inc != '1'
-
- def GetRcflags(self, config, gyp_to_ninja_path):
- """Returns the flags that need to be added to invocations of the resource
- compiler."""
- config = self._TargetConfig(config)
- rcflags = []
- rc = self._GetWrapper(self, self.msvs_settings[config],
- 'VCResourceCompilerTool', append=rcflags)
- rc('AdditionalIncludeDirectories', map=gyp_to_ninja_path, prefix='/I')
- rcflags.append('/I' + gyp_to_ninja_path('.'))
- rc('PreprocessorDefinitions', prefix='/d')
- # /l arg must be in hex without leading '0x'
- rc('Culture', prefix='/l', map=lambda x: hex(int(x))[2:])
- return rcflags
-
- def BuildCygwinBashCommandLine(self, args, path_to_base):
- """Build a command line that runs args via cygwin bash. We assume that all
- incoming paths are in Windows normpath'd form, so they need to be
- converted to posix style for the part of the command line that's passed to
- bash. We also have to do some Visual Studio macro emulation here because
- various rules use magic VS names for things. Also note that rules that
- contain ninja variables cannot be fixed here (for example ${source}), so
- the outer generator needs to make sure that the paths that are written out
- are in posix style, if the command line will be used here."""
- cygwin_dir = os.path.normpath(
- os.path.join(path_to_base, self.msvs_cygwin_dirs[0]))
- cd = ('cd %s' % path_to_base).replace('\\', '/')
- args = [a.replace('\\', '/').replace('"', '\\"') for a in args]
- args = ["'%s'" % a.replace("'", "'\\''") for a in args]
- bash_cmd = ' '.join(args)
- cmd = (
- 'call "%s\\setup_env.bat" && set CYGWIN=nontsec && ' % cygwin_dir +
- 'bash -c "%s ; %s"' % (cd, bash_cmd))
- return cmd
-
- def IsRuleRunUnderCygwin(self, rule):
- """Determine if an action should be run under cygwin. If the variable is
- unset, or set to 1 we use cygwin."""
- return int(rule.get('msvs_cygwin_shell',
- self.spec.get('msvs_cygwin_shell', 1))) != 0
-
- def _HasExplicitRuleForExtension(self, spec, extension):
- """Determine if there's an explicit rule for a particular extension."""
- for rule in spec.get('rules', []):
- if rule['extension'] == extension:
- return True
- return False
-
- def _HasExplicitIdlActions(self, spec):
- """Determine if an action should not run midl for .idl files."""
- return any([action.get('explicit_idl_action', 0)
- for action in spec.get('actions', [])])
-
- def HasExplicitIdlRulesOrActions(self, spec):
- """Determine if there's an explicit rule or action for idl files. When
- there isn't we need to generate implicit rules to build MIDL .idl files."""
- return (self._HasExplicitRuleForExtension(spec, 'idl') or
- self._HasExplicitIdlActions(spec))
-
- def HasExplicitAsmRules(self, spec):
- """Determine if there's an explicit rule for asm files. When there isn't we
- need to generate implicit rules to assemble .asm files."""
- return self._HasExplicitRuleForExtension(spec, 'asm')
-
- def GetIdlBuildData(self, source, config):
- """Determine the implicit outputs for an idl file. Returns output
- directory, outputs, and variables and flags that are required."""
- config = self._TargetConfig(config)
- midl_get = self._GetWrapper(self, self.msvs_settings[config], 'VCMIDLTool')
- def midl(name, default=None):
- return self.ConvertVSMacros(midl_get(name, default=default),
- config=config)
- tlb = midl('TypeLibraryName', default='${root}.tlb')
- header = midl('HeaderFileName', default='${root}.h')
- dlldata = midl('DLLDataFileName', default='dlldata.c')
- iid = midl('InterfaceIdentifierFileName', default='${root}_i.c')
- proxy = midl('ProxyFileName', default='${root}_p.c')
- # Note that .tlb is not included in the outputs as it is not always
- # generated depending on the content of the input idl file.
- outdir = midl('OutputDirectory', default='')
- output = [header, dlldata, iid, proxy]
- variables = [('tlb', tlb),
- ('h', header),
- ('dlldata', dlldata),
- ('iid', iid),
- ('proxy', proxy)]
- # TODO(scottmg): Are there configuration settings to set these flags?
- target_platform = 'win32' if self.GetArch(config) == 'x86' else 'x64'
- flags = ['/char', 'signed', '/env', target_platform, '/Oicf']
- return outdir, output, variables, flags
-
-
-def _LanguageMatchesForPch(source_ext, pch_source_ext):
- c_exts = ('.c',)
- cc_exts = ('.cc', '.cxx', '.cpp')
- return ((source_ext in c_exts and pch_source_ext in c_exts) or
- (source_ext in cc_exts and pch_source_ext in cc_exts))
-
-
-class PrecompiledHeader(object):
- """Helper to generate dependencies and build rules to handle generation of
- precompiled headers. Interface matches the GCH handler in xcode_emulation.py.
- """
- def __init__(
- self, settings, config, gyp_to_build_path, gyp_to_unique_output, obj_ext):
- self.settings = settings
- self.config = config
- pch_source = self.settings.msvs_precompiled_source[self.config]
- self.pch_source = gyp_to_build_path(pch_source)
- filename, _ = os.path.splitext(pch_source)
- self.output_obj = gyp_to_unique_output(filename + obj_ext).lower()
-
- def _PchHeader(self):
- """Get the header that will appear in an #include line for all source
- files."""
- return os.path.split(self.settings.msvs_precompiled_header[self.config])[1]
-
- def GetObjDependencies(self, sources, objs, arch):
- """Given a list of sources files and the corresponding object files,
- returns a list of the pch files that should be depended upon. The
- additional wrapping in the return value is for interface compatibility
- with make.py on Mac, and xcode_emulation.py."""
- assert arch is None
- if not self._PchHeader():
- return []
- pch_ext = os.path.splitext(self.pch_source)[1]
- for source in sources:
- if _LanguageMatchesForPch(os.path.splitext(source)[1], pch_ext):
- return [(None, None, self.output_obj)]
- return []
-
- def GetPchBuildCommands(self, arch):
- """Not used on Windows as there are no additional build steps required
- (instead, existing steps are modified in GetFlagsModifications below)."""
- return []
-
- def GetFlagsModifications(self, input, output, implicit, command,
- cflags_c, cflags_cc, expand_special):
- """Get the modified cflags and implicit dependencies that should be used
- for the pch compilation step."""
- if input == self.pch_source:
- pch_output = ['/Yc' + self._PchHeader()]
- if command == 'cxx':
- return ([('cflags_cc', map(expand_special, cflags_cc + pch_output))],
- self.output_obj, [])
- elif command == 'cc':
- return ([('cflags_c', map(expand_special, cflags_c + pch_output))],
- self.output_obj, [])
- return [], output, implicit
-
-
-vs_version = None
-def GetVSVersion(generator_flags):
- global vs_version
- if not vs_version:
- vs_version = gyp.MSVSVersion.SelectVisualStudioVersion(
- generator_flags.get('msvs_version', 'auto'),
- allow_fallback=False)
- return vs_version
-
-def _GetVsvarsSetupArgs(generator_flags, arch):
- vs = GetVSVersion(generator_flags)
- return vs.SetupScript()
-
-def ExpandMacros(string, expansions):
- """Expand $(Variable) per expansions dict. See MsvsSettings.GetVSMacroEnv
- for the canonical way to retrieve a suitable dict."""
- if '$' in string:
- for old, new in expansions.iteritems():
- assert '$(' not in new, new
- string = string.replace(old, new)
- return string
-
-def _ExtractImportantEnvironment(output_of_set):
- """Extracts environment variables required for the toolchain to run from
- a textual dump output by the cmd.exe 'set' command."""
- envvars_to_save = (
- 'goma_.*', # TODO(scottmg): This is ugly, but needed for goma.
- 'include',
- 'lib',
- 'libpath',
- 'path',
- 'pathext',
- 'systemroot',
- 'temp',
- 'tmp',
- )
- env = {}
- for line in output_of_set.splitlines():
- for envvar in envvars_to_save:
- if re.match(envvar + '=', line.lower()):
- var, setting = line.split('=', 1)
- if envvar == 'path':
- # Our own rules (for running gyp-win-tool) and other actions in
- # Chromium rely on python being in the path. Add the path to this
- # python here so that if it's not in the path when ninja is run
- # later, python will still be found.
- setting = os.path.dirname(sys.executable) + os.pathsep + setting
- env[var.upper()] = setting
- break
- for required in ('SYSTEMROOT', 'TEMP', 'TMP'):
- if required not in env:
- raise Exception('Environment variable "%s" '
- 'required to be set to valid path' % required)
- return env
-
-def _FormatAsEnvironmentBlock(envvar_dict):
- """Format as an 'environment block' directly suitable for CreateProcess.
- Briefly this is a list of key=value\0, terminated by an additional \0. See
- CreateProcess documentation for more details."""
- block = ''
- nul = '\0'
- for key, value in envvar_dict.iteritems():
- block += key + '=' + value + nul
- block += nul
- return block
-
-def _ExtractCLPath(output_of_where):
- """Gets the path to cl.exe based on the output of calling the environment
- setup batch file, followed by the equivalent of `where`."""
- # Take the first line, as that's the first found in the PATH.
- for line in output_of_where.strip().splitlines():
- if line.startswith('LOC:'):
- return line[len('LOC:'):].strip()
-
-def GenerateEnvironmentFiles(toplevel_build_dir, generator_flags,
- system_includes, open_out):
- """It's not sufficient to have the absolute path to the compiler, linker,
- etc. on Windows, as those tools rely on .dlls being in the PATH. We also
- need to support both x86 and x64 compilers within the same build (to support
- msvs_target_platform hackery). Different architectures require a different
- compiler binary, and different supporting environment variables (INCLUDE,
- LIB, LIBPATH). So, we extract the environment here, wrap all invocations
- of compiler tools (cl, link, lib, rc, midl, etc.) via win_tool.py which
- sets up the environment, and then we do not prefix the compiler with
- an absolute path, instead preferring something like "cl.exe" in the rule
- which will then run whichever the environment setup has put in the path.
- When the following procedure to generate environment files does not
- meet your requirement (e.g. for custom toolchains), you can pass
- "-G ninja_use_custom_environment_files" to the gyp to suppress file
- generation and use custom environment files prepared by yourself."""
- archs = ('x86', 'x64')
- if generator_flags.get('ninja_use_custom_environment_files', 0):
- cl_paths = {}
- for arch in archs:
- cl_paths[arch] = 'cl.exe'
- return cl_paths
- vs = GetVSVersion(generator_flags)
- cl_paths = {}
- for arch in archs:
- # Extract environment variables for subprocesses.
- args = vs.SetupScript(arch)
- args.extend(('&&', 'set'))
- popen = subprocess.Popen(
- args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- variables, _ = popen.communicate()
- env = _ExtractImportantEnvironment(variables)
-
- # Inject system includes from gyp files into INCLUDE.
- if system_includes:
- system_includes = system_includes | OrderedSet(
- env.get('INCLUDE', '').split(';'))
- env['INCLUDE'] = ';'.join(system_includes)
-
- env_block = _FormatAsEnvironmentBlock(env)
- f = open_out(os.path.join(toplevel_build_dir, 'environment.' + arch), 'wb')
- f.write(env_block)
- f.close()
-
- # Find cl.exe location for this architecture.
- args = vs.SetupScript(arch)
- args.extend(('&&',
- 'for', '%i', 'in', '(cl.exe)', 'do', '@echo', 'LOC:%~$PATH:i'))
- popen = subprocess.Popen(args, shell=True, stdout=subprocess.PIPE)
- output, _ = popen.communicate()
- cl_paths[arch] = _ExtractCLPath(output)
- return cl_paths
-
-def VerifyMissingSources(sources, build_dir, generator_flags, gyp_to_ninja):
- """Emulate behavior of msvs_error_on_missing_sources present in the msvs
- generator: Check that all regular source files, i.e. not created at run time,
- exist on disk. Missing files cause needless recompilation when building via
- VS, and we want this check to match for people/bots that build using ninja,
- so they're not surprised when the VS build fails."""
- if int(generator_flags.get('msvs_error_on_missing_sources', 0)):
- no_specials = filter(lambda x: '$' not in x, sources)
- relative = [os.path.join(build_dir, gyp_to_ninja(s)) for s in no_specials]
- missing = filter(lambda x: not os.path.exists(x), relative)
- if missing:
- # They'll look like out\Release\..\..\stuff\things.cc, so normalize the
- # path for a slightly less crazy looking output.
- cleaned_up = [os.path.normpath(x) for x in missing]
- raise Exception('Missing input files:\n%s' % '\n'.join(cleaned_up))
-
-# Sets some values in default_variables, which are required for many
-# generators, run on Windows.
-def CalculateCommonVariables(default_variables, params):
- generator_flags = params.get('generator_flags', {})
-
- # Set a variable so conditions can be based on msvs_version.
- msvs_version = gyp.msvs_emulation.GetVSVersion(generator_flags)
- default_variables['MSVS_VERSION'] = msvs_version.ShortName()
-
- # To determine processor word size on Windows, in addition to checking
- # PROCESSOR_ARCHITECTURE (which reflects the word size of the current
- # process), it is also necessary to check PROCESSOR_ARCHITEW6432 (which
- # contains the actual word size of the system when running thru WOW64).
- if ('64' in os.environ.get('PROCESSOR_ARCHITECTURE', '') or
- '64' in os.environ.get('PROCESSOR_ARCHITEW6432', '')):
- default_variables['MSVS_OS_BITS'] = 64
- else:
- default_variables['MSVS_OS_BITS'] = 32
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py b/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py
deleted file mode 100644
index d2948f0..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py
+++ /dev/null
@@ -1,160 +0,0 @@
-# This file comes from
-# https://github.com/martine/ninja/blob/master/misc/ninja_syntax.py
-# Do not edit! Edit the upstream one instead.
-
-"""Python module for generating .ninja files.
-
-Note that this is emphatically not a required piece of Ninja; it's
-just a helpful utility for build-file-generation systems that already
-use Python.
-"""
-
-import textwrap
-import re
-
-def escape_path(word):
- return word.replace('$ ','$$ ').replace(' ','$ ').replace(':', '$:')
-
-class Writer(object):
- def __init__(self, output, width=78):
- self.output = output
- self.width = width
-
- def newline(self):
- self.output.write('\n')
-
- def comment(self, text):
- for line in textwrap.wrap(text, self.width - 2):
- self.output.write('# ' + line + '\n')
-
- def variable(self, key, value, indent=0):
- if value is None:
- return
- if isinstance(value, list):
- value = ' '.join(filter(None, value)) # Filter out empty strings.
- self._line('%s = %s' % (key, value), indent)
-
- def pool(self, name, depth):
- self._line('pool %s' % name)
- self.variable('depth', depth, indent=1)
-
- def rule(self, name, command, description=None, depfile=None,
- generator=False, pool=None, restat=False, rspfile=None,
- rspfile_content=None, deps=None):
- self._line('rule %s' % name)
- self.variable('command', command, indent=1)
- if description:
- self.variable('description', description, indent=1)
- if depfile:
- self.variable('depfile', depfile, indent=1)
- if generator:
- self.variable('generator', '1', indent=1)
- if pool:
- self.variable('pool', pool, indent=1)
- if restat:
- self.variable('restat', '1', indent=1)
- if rspfile:
- self.variable('rspfile', rspfile, indent=1)
- if rspfile_content:
- self.variable('rspfile_content', rspfile_content, indent=1)
- if deps:
- self.variable('deps', deps, indent=1)
-
- def build(self, outputs, rule, inputs=None, implicit=None, order_only=None,
- variables=None):
- outputs = self._as_list(outputs)
- all_inputs = self._as_list(inputs)[:]
- out_outputs = list(map(escape_path, outputs))
- all_inputs = list(map(escape_path, all_inputs))
-
- if implicit:
- implicit = map(escape_path, self._as_list(implicit))
- all_inputs.append('|')
- all_inputs.extend(implicit)
- if order_only:
- order_only = map(escape_path, self._as_list(order_only))
- all_inputs.append('||')
- all_inputs.extend(order_only)
-
- self._line('build %s: %s' % (' '.join(out_outputs),
- ' '.join([rule] + all_inputs)))
-
- if variables:
- if isinstance(variables, dict):
- iterator = iter(variables.items())
- else:
- iterator = iter(variables)
-
- for key, val in iterator:
- self.variable(key, val, indent=1)
-
- return outputs
-
- def include(self, path):
- self._line('include %s' % path)
-
- def subninja(self, path):
- self._line('subninja %s' % path)
-
- def default(self, paths):
- self._line('default %s' % ' '.join(self._as_list(paths)))
-
- def _count_dollars_before_index(self, s, i):
- """Returns the number of '$' characters right in front of s[i]."""
- dollar_count = 0
- dollar_index = i - 1
- while dollar_index > 0 and s[dollar_index] == '$':
- dollar_count += 1
- dollar_index -= 1
- return dollar_count
-
- def _line(self, text, indent=0):
- """Write 'text' word-wrapped at self.width characters."""
- leading_space = ' ' * indent
- while len(leading_space) + len(text) > self.width:
- # The text is too wide; wrap if possible.
-
- # Find the rightmost space that would obey our width constraint and
- # that's not an escaped space.
- available_space = self.width - len(leading_space) - len(' $')
- space = available_space
- while True:
- space = text.rfind(' ', 0, space)
- if space < 0 or \
- self._count_dollars_before_index(text, space) % 2 == 0:
- break
-
- if space < 0:
- # No such space; just use the first unescaped space we can find.
- space = available_space - 1
- while True:
- space = text.find(' ', space + 1)
- if space < 0 or \
- self._count_dollars_before_index(text, space) % 2 == 0:
- break
- if space < 0:
- # Give up on breaking.
- break
-
- self.output.write(leading_space + text[0:space] + ' $\n')
- text = text[space+1:]
-
- # Subsequent lines are continuations, so indent them.
- leading_space = ' ' * (indent+2)
-
- self.output.write(leading_space + text + '\n')
-
- def _as_list(self, input):
- if input is None:
- return []
- if isinstance(input, list):
- return input
- return [input]
-
-
-def escape(string):
- """Escape a string such that it can be embedded into a Ninja file without
- further interpretation."""
- assert '\n' not in string, 'Ninja syntax does not allow newlines'
- # We only have one special metacharacter: '$'.
- return string.replace('$', '$$')
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/ordered_dict.py b/node_modules/node-gyp/gyp/pylib/gyp/ordered_dict.py
deleted file mode 100644
index a1e89f9..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/ordered_dict.py
+++ /dev/null
@@ -1,289 +0,0 @@
-# Unmodified from http://code.activestate.com/recipes/576693/
-# other than to add MIT license header (as specified on page, but not in code).
-# Linked from Python documentation here:
-# http://docs.python.org/2/library/collections.html#collections.OrderedDict
-#
-# This should be deleted once Py2.7 is available on all bots, see
-# http://crbug.com/241769.
-#
-# Copyright (c) 2009 Raymond Hettinger.
-#
-# 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.
-
-# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy.
-# Passes Python2.7's test suite and incorporates all the latest updates.
-
-try:
- from thread import get_ident as _get_ident
-except ImportError:
- from dummy_thread import get_ident as _get_ident
-
-try:
- from _abcoll import KeysView, ValuesView, ItemsView
-except ImportError:
- pass
-
-
-class OrderedDict(dict):
- 'Dictionary that remembers insertion order'
- # An inherited dict maps keys to values.
- # The inherited dict provides __getitem__, __len__, __contains__, and get.
- # The remaining methods are order-aware.
- # Big-O running times for all methods are the same as for regular dictionaries.
-
- # The internal self.__map dictionary maps keys to links in a doubly linked list.
- # The circular doubly linked list starts and ends with a sentinel element.
- # The sentinel element never gets deleted (this simplifies the algorithm).
- # Each link is stored as a list of length three: [PREV, NEXT, KEY].
-
- def __init__(self, *args, **kwds):
- '''Initialize an ordered dictionary. Signature is the same as for
- regular dictionaries, but keyword arguments are not recommended
- because their insertion order is arbitrary.
-
- '''
- if len(args) > 1:
- raise TypeError('expected at most 1 arguments, got %d' % len(args))
- try:
- self.__root
- except AttributeError:
- self.__root = root = [] # sentinel node
- root[:] = [root, root, None]
- self.__map = {}
- self.__update(*args, **kwds)
-
- def __setitem__(self, key, value, dict_setitem=dict.__setitem__):
- 'od.__setitem__(i, y) <==> od[i]=y'
- # Setting a new item creates a new link which goes at the end of the linked
- # list, and the inherited dictionary is updated with the new key/value pair.
- if key not in self:
- root = self.__root
- last = root[0]
- last[1] = root[0] = self.__map[key] = [last, root, key]
- dict_setitem(self, key, value)
-
- def __delitem__(self, key, dict_delitem=dict.__delitem__):
- 'od.__delitem__(y) <==> del od[y]'
- # Deleting an existing item uses self.__map to find the link which is
- # then removed by updating the links in the predecessor and successor nodes.
- dict_delitem(self, key)
- link_prev, link_next, key = self.__map.pop(key)
- link_prev[1] = link_next
- link_next[0] = link_prev
-
- def __iter__(self):
- 'od.__iter__() <==> iter(od)'
- root = self.__root
- curr = root[1]
- while curr is not root:
- yield curr[2]
- curr = curr[1]
-
- def __reversed__(self):
- 'od.__reversed__() <==> reversed(od)'
- root = self.__root
- curr = root[0]
- while curr is not root:
- yield curr[2]
- curr = curr[0]
-
- def clear(self):
- 'od.clear() -> None. Remove all items from od.'
- try:
- for node in self.__map.itervalues():
- del node[:]
- root = self.__root
- root[:] = [root, root, None]
- self.__map.clear()
- except AttributeError:
- pass
- dict.clear(self)
-
- def popitem(self, last=True):
- '''od.popitem() -> (k, v), return and remove a (key, value) pair.
- Pairs are returned in LIFO order if last is true or FIFO order if false.
-
- '''
- if not self:
- raise KeyError('dictionary is empty')
- root = self.__root
- if last:
- link = root[0]
- link_prev = link[0]
- link_prev[1] = root
- root[0] = link_prev
- else:
- link = root[1]
- link_next = link[1]
- root[1] = link_next
- link_next[0] = root
- key = link[2]
- del self.__map[key]
- value = dict.pop(self, key)
- return key, value
-
- # -- the following methods do not depend on the internal structure --
-
- def keys(self):
- 'od.keys() -> list of keys in od'
- return list(self)
-
- def values(self):
- 'od.values() -> list of values in od'
- return [self[key] for key in self]
-
- def items(self):
- 'od.items() -> list of (key, value) pairs in od'
- return [(key, self[key]) for key in self]
-
- def iterkeys(self):
- 'od.iterkeys() -> an iterator over the keys in od'
- return iter(self)
-
- def itervalues(self):
- 'od.itervalues -> an iterator over the values in od'
- for k in self:
- yield self[k]
-
- def iteritems(self):
- 'od.iteritems -> an iterator over the (key, value) items in od'
- for k in self:
- yield (k, self[k])
-
- # Suppress 'OrderedDict.update: Method has no argument':
- # pylint: disable=E0211
- def update(*args, **kwds):
- '''od.update(E, **F) -> None. Update od from dict/iterable E and F.
-
- If E is a dict instance, does: for k in E: od[k] = E[k]
- If E has a .keys() method, does: for k in E.keys(): od[k] = E[k]
- Or if E is an iterable of items, does: for k, v in E: od[k] = v
- In either case, this is followed by: for k, v in F.items(): od[k] = v
-
- '''
- if len(args) > 2:
- raise TypeError('update() takes at most 2 positional '
- 'arguments (%d given)' % (len(args),))
- elif not args:
- raise TypeError('update() takes at least 1 argument (0 given)')
- self = args[0]
- # Make progressively weaker assumptions about "other"
- other = ()
- if len(args) == 2:
- other = args[1]
- if isinstance(other, dict):
- for key in other:
- self[key] = other[key]
- elif hasattr(other, 'keys'):
- for key in other.keys():
- self[key] = other[key]
- else:
- for key, value in other:
- self[key] = value
- for key, value in kwds.items():
- self[key] = value
-
- __update = update # let subclasses override update without breaking __init__
-
- __marker = object()
-
- def pop(self, key, default=__marker):
- '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value.
- If key is not found, d is returned if given, otherwise KeyError is raised.
-
- '''
- if key in self:
- result = self[key]
- del self[key]
- return result
- if default is self.__marker:
- raise KeyError(key)
- return default
-
- def setdefault(self, key, default=None):
- 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od'
- if key in self:
- return self[key]
- self[key] = default
- return default
-
- def __repr__(self, _repr_running={}):
- 'od.__repr__() <==> repr(od)'
- call_key = id(self), _get_ident()
- if call_key in _repr_running:
- return '...'
- _repr_running[call_key] = 1
- try:
- if not self:
- return '%s()' % (self.__class__.__name__,)
- return '%s(%r)' % (self.__class__.__name__, self.items())
- finally:
- del _repr_running[call_key]
-
- def __reduce__(self):
- 'Return state information for pickling'
- items = [[k, self[k]] for k in self]
- inst_dict = vars(self).copy()
- for k in vars(OrderedDict()):
- inst_dict.pop(k, None)
- if inst_dict:
- return (self.__class__, (items,), inst_dict)
- return self.__class__, (items,)
-
- def copy(self):
- 'od.copy() -> a shallow copy of od'
- return self.__class__(self)
-
- @classmethod
- def fromkeys(cls, iterable, value=None):
- '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
- and values equal to v (which defaults to None).
-
- '''
- d = cls()
- for key in iterable:
- d[key] = value
- return d
-
- def __eq__(self, other):
- '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive
- while comparison to a regular mapping is order-insensitive.
-
- '''
- if isinstance(other, OrderedDict):
- return len(self)==len(other) and self.items() == other.items()
- return dict.__eq__(self, other)
-
- def __ne__(self, other):
- return not self == other
-
- # -- the following methods are only used in Python 2.7 --
-
- def viewkeys(self):
- "od.viewkeys() -> a set-like object providing a view on od's keys"
- return KeysView(self)
-
- def viewvalues(self):
- "od.viewvalues() -> an object providing a view on od's values"
- return ValuesView(self)
-
- def viewitems(self):
- "od.viewitems() -> a set-like object providing a view on od's items"
- return ItemsView(self)
-
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py b/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py
deleted file mode 100644
index 74c98c5..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright 2014 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A clone of the default copy.deepcopy that doesn't handle cyclic
-structures or complex types except for dicts and lists. This is
-because gyp copies so large structure that small copy overhead ends up
-taking seconds in a project the size of Chromium."""
-
-class Error(Exception):
- pass
-
-__all__ = ["Error", "deepcopy"]
-
-def deepcopy(x):
- """Deep copy operation on gyp objects such as strings, ints, dicts
- and lists. More than twice as fast as copy.deepcopy but much less
- generic."""
-
- try:
- return _deepcopy_dispatch[type(x)](x)
- except KeyError:
- raise Error('Unsupported type %s for deepcopy. Use copy.deepcopy ' +
- 'or expand simple_copy support.' % type(x))
-
-_deepcopy_dispatch = d = {}
-
-def _deepcopy_atomic(x):
- return x
-
-for x in (type(None), int, long, float,
- bool, str, unicode, type):
- d[x] = _deepcopy_atomic
-
-def _deepcopy_list(x):
- return [deepcopy(a) for a in x]
-d[list] = _deepcopy_list
-
-def _deepcopy_dict(x):
- y = {}
- for key, value in x.iteritems():
- y[deepcopy(key)] = deepcopy(value)
- return y
-d[dict] = _deepcopy_dict
-
-del d
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.pyc b/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.pyc
deleted file mode 100644
index 804201d..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.pyc
+++ /dev/null
Binary files differ
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py b/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
deleted file mode 100755
index bb6f1ea..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
+++ /dev/null
@@ -1,314 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Utility functions for Windows builds.
-
-These functions are executed via gyp-win-tool when using the ninja generator.
-"""
-
-import os
-import re
-import shutil
-import subprocess
-import stat
-import string
-import sys
-
-BASE_DIR = os.path.dirname(os.path.abspath(__file__))
-
-# A regex matching an argument corresponding to the output filename passed to
-# link.exe.
-_LINK_EXE_OUT_ARG = re.compile('/OUT:(?P<out>.+)$', re.IGNORECASE)
-
-def main(args):
- executor = WinTool()
- exit_code = executor.Dispatch(args)
- if exit_code is not None:
- sys.exit(exit_code)
-
-
-class WinTool(object):
- """This class performs all the Windows tooling steps. The methods can either
- be executed directly, or dispatched from an argument list."""
-
- def _UseSeparateMspdbsrv(self, env, args):
- """Allows to use a unique instance of mspdbsrv.exe per linker instead of a
- shared one."""
- if len(args) < 1:
- raise Exception("Not enough arguments")
-
- if args[0] != 'link.exe':
- return
-
- # Use the output filename passed to the linker to generate an endpoint name
- # for mspdbsrv.exe.
- endpoint_name = None
- for arg in args:
- m = _LINK_EXE_OUT_ARG.match(arg)
- if m:
- endpoint_name = re.sub(r'\W+', '',
- '%s_%d' % (m.group('out'), os.getpid()))
- break
-
- if endpoint_name is None:
- return
-
- # Adds the appropriate environment variable. This will be read by link.exe
- # to know which instance of mspdbsrv.exe it should connect to (if it's
- # not set then the default endpoint is used).
- env['_MSPDBSRV_ENDPOINT_'] = endpoint_name
-
- def Dispatch(self, args):
- """Dispatches a string command to a method."""
- if len(args) < 1:
- raise Exception("Not enough arguments")
-
- method = "Exec%s" % self._CommandifyName(args[0])
- return getattr(self, method)(*args[1:])
-
- def _CommandifyName(self, name_string):
- """Transforms a tool name like recursive-mirror to RecursiveMirror."""
- return name_string.title().replace('-', '')
-
- def _GetEnv(self, arch):
- """Gets the saved environment from a file for a given architecture."""
- # The environment is saved as an "environment block" (see CreateProcess
- # and msvs_emulation for details). We convert to a dict here.
- # Drop last 2 NULs, one for list terminator, one for trailing vs. separator.
- pairs = open(arch).read()[:-2].split('\0')
- kvs = [item.split('=', 1) for item in pairs]
- return dict(kvs)
-
- def ExecStamp(self, path):
- """Simple stamp command."""
- open(path, 'w').close()
-
- def ExecRecursiveMirror(self, source, dest):
- """Emulation of rm -rf out && cp -af in out."""
- if os.path.exists(dest):
- if os.path.isdir(dest):
- def _on_error(fn, path, excinfo):
- # The operation failed, possibly because the file is set to
- # read-only. If that's why, make it writable and try the op again.
- if not os.access(path, os.W_OK):
- os.chmod(path, stat.S_IWRITE)
- fn(path)
- shutil.rmtree(dest, onerror=_on_error)
- else:
- if not os.access(dest, os.W_OK):
- # Attempt to make the file writable before deleting it.
- os.chmod(dest, stat.S_IWRITE)
- os.unlink(dest)
-
- if os.path.isdir(source):
- shutil.copytree(source, dest)
- else:
- shutil.copy2(source, dest)
-
- def ExecLinkWrapper(self, arch, use_separate_mspdbsrv, *args):
- """Filter diagnostic output from link that looks like:
- ' Creating library ui.dll.lib and object ui.dll.exp'
- This happens when there are exports from the dll or exe.
- """
- env = self._GetEnv(arch)
- if use_separate_mspdbsrv == 'True':
- self._UseSeparateMspdbsrv(env, args)
- link = subprocess.Popen([args[0].replace('/', '\\')] + list(args[1:]),
- shell=True,
- env=env,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT)
- out, _ = link.communicate()
- for line in out.splitlines():
- if (not line.startswith(' Creating library ') and
- not line.startswith('Generating code') and
- not line.startswith('Finished generating code')):
- print line
- return link.returncode
-
- def ExecLinkWithManifests(self, arch, embed_manifest, out, ldcmd, resname,
- mt, rc, intermediate_manifest, *manifests):
- """A wrapper for handling creating a manifest resource and then executing
- a link command."""
- # The 'normal' way to do manifests is to have link generate a manifest
- # based on gathering dependencies from the object files, then merge that
- # manifest with other manifests supplied as sources, convert the merged
- # manifest to a resource, and then *relink*, including the compiled
- # version of the manifest resource. This breaks incremental linking, and
- # is generally overly complicated. Instead, we merge all the manifests
- # provided (along with one that includes what would normally be in the
- # linker-generated one, see msvs_emulation.py), and include that into the
- # first and only link. We still tell link to generate a manifest, but we
- # only use that to assert that our simpler process did not miss anything.
- variables = {
- 'python': sys.executable,
- 'arch': arch,
- 'out': out,
- 'ldcmd': ldcmd,
- 'resname': resname,
- 'mt': mt,
- 'rc': rc,
- 'intermediate_manifest': intermediate_manifest,
- 'manifests': ' '.join(manifests),
- }
- add_to_ld = ''
- if manifests:
- subprocess.check_call(
- '%(python)s gyp-win-tool manifest-wrapper %(arch)s %(mt)s -nologo '
- '-manifest %(manifests)s -out:%(out)s.manifest' % variables)
- if embed_manifest == 'True':
- subprocess.check_call(
- '%(python)s gyp-win-tool manifest-to-rc %(arch)s %(out)s.manifest'
- ' %(out)s.manifest.rc %(resname)s' % variables)
- subprocess.check_call(
- '%(python)s gyp-win-tool rc-wrapper %(arch)s %(rc)s '
- '%(out)s.manifest.rc' % variables)
- add_to_ld = ' %(out)s.manifest.res' % variables
- subprocess.check_call(ldcmd + add_to_ld)
-
- # Run mt.exe on the theoretically complete manifest we generated, merging
- # it with the one the linker generated to confirm that the linker
- # generated one does not add anything. This is strictly unnecessary for
- # correctness, it's only to verify that e.g. /MANIFESTDEPENDENCY was not
- # used in a #pragma comment.
- if manifests:
- # Merge the intermediate one with ours to .assert.manifest, then check
- # that .assert.manifest is identical to ours.
- subprocess.check_call(
- '%(python)s gyp-win-tool manifest-wrapper %(arch)s %(mt)s -nologo '
- '-manifest %(out)s.manifest %(intermediate_manifest)s '
- '-out:%(out)s.assert.manifest' % variables)
- assert_manifest = '%(out)s.assert.manifest' % variables
- our_manifest = '%(out)s.manifest' % variables
- # Load and normalize the manifests. mt.exe sometimes removes whitespace,
- # and sometimes doesn't unfortunately.
- with open(our_manifest, 'rb') as our_f:
- with open(assert_manifest, 'rb') as assert_f:
- our_data = our_f.read().translate(None, string.whitespace)
- assert_data = assert_f.read().translate(None, string.whitespace)
- if our_data != assert_data:
- os.unlink(out)
- def dump(filename):
- sys.stderr.write('%s\n-----\n' % filename)
- with open(filename, 'rb') as f:
- sys.stderr.write(f.read() + '\n-----\n')
- dump(intermediate_manifest)
- dump(our_manifest)
- dump(assert_manifest)
- sys.stderr.write(
- 'Linker generated manifest "%s" added to final manifest "%s" '
- '(result in "%s"). '
- 'Were /MANIFEST switches used in #pragma statements? ' % (
- intermediate_manifest, our_manifest, assert_manifest))
- return 1
-
- def ExecManifestWrapper(self, arch, *args):
- """Run manifest tool with environment set. Strip out undesirable warning
- (some XML blocks are recognized by the OS loader, but not the manifest
- tool)."""
- env = self._GetEnv(arch)
- popen = subprocess.Popen(args, shell=True, env=env,
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- out, _ = popen.communicate()
- for line in out.splitlines():
- if line and 'manifest authoring warning 81010002' not in line:
- print line
- return popen.returncode
-
- def ExecManifestToRc(self, arch, *args):
- """Creates a resource file pointing a SxS assembly manifest.
- |args| is tuple containing path to resource file, path to manifest file
- and resource name which can be "1" (for executables) or "2" (for DLLs)."""
- manifest_path, resource_path, resource_name = args
- with open(resource_path, 'wb') as output:
- output.write('#include <windows.h>\n%s RT_MANIFEST "%s"' % (
- resource_name,
- os.path.abspath(manifest_path).replace('\\', '/')))
-
- def ExecMidlWrapper(self, arch, outdir, tlb, h, dlldata, iid, proxy, idl,
- *flags):
- """Filter noisy filenames output from MIDL compile step that isn't
- quietable via command line flags.
- """
- args = ['midl', '/nologo'] + list(flags) + [
- '/out', outdir,
- '/tlb', tlb,
- '/h', h,
- '/dlldata', dlldata,
- '/iid', iid,
- '/proxy', proxy,
- idl]
- env = self._GetEnv(arch)
- popen = subprocess.Popen(args, shell=True, env=env,
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- out, _ = popen.communicate()
- # Filter junk out of stdout, and write filtered versions. Output we want
- # to filter is pairs of lines that look like this:
- # Processing C:\Program Files (x86)\Microsoft SDKs\...\include\objidl.idl
- # objidl.idl
- lines = out.splitlines()
- prefixes = ('Processing ', '64 bit Processing ')
- processing = set(os.path.basename(x)
- for x in lines if x.startswith(prefixes))
- for line in lines:
- if not line.startswith(prefixes) and line not in processing:
- print line
- return popen.returncode
-
- def ExecAsmWrapper(self, arch, *args):
- """Filter logo banner from invocations of asm.exe."""
- env = self._GetEnv(arch)
- popen = subprocess.Popen(args, shell=True, env=env,
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- out, _ = popen.communicate()
- for line in out.splitlines():
- if (not line.startswith('Copyright (C) Microsoft Corporation') and
- not line.startswith('Microsoft (R) Macro Assembler') and
- not line.startswith(' Assembling: ') and
- line):
- print line
- return popen.returncode
-
- def ExecRcWrapper(self, arch, *args):
- """Filter logo banner from invocations of rc.exe. Older versions of RC
- don't support the /nologo flag."""
- env = self._GetEnv(arch)
- popen = subprocess.Popen(args, shell=True, env=env,
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- out, _ = popen.communicate()
- for line in out.splitlines():
- if (not line.startswith('Microsoft (R) Windows (R) Resource Compiler') and
- not line.startswith('Copyright (C) Microsoft Corporation') and
- line):
- print line
- return popen.returncode
-
- def ExecActionWrapper(self, arch, rspfile, *dir):
- """Runs an action command line from a response file using the environment
- for |arch|. If |dir| is supplied, use that as the working directory."""
- env = self._GetEnv(arch)
- # TODO(scottmg): This is a temporary hack to get some specific variables
- # through to actions that are set after gyp-time. http://crbug.com/333738.
- for k, v in os.environ.iteritems():
- if k not in env:
- env[k] = v
- args = open(rspfile).read()
- dir = dir[0] if dir else None
- return subprocess.call(args, shell=True, env=env, cwd=dir)
-
- def ExecClCompile(self, project_dir, selected_files):
- """Executed by msvs-ninja projects when the 'ClCompile' target is used to
- build selected C/C++ files."""
- project_dir = os.path.relpath(project_dir, BASE_DIR)
- selected_files = selected_files.split(';')
- ninja_targets = [os.path.join(project_dir, filename) + '^^'
- for filename in selected_files]
- cmd = ['ninja.exe']
- cmd.extend(ninja_targets)
- return subprocess.call(cmd, shell=True, cwd=BASE_DIR)
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv[1:]))
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py b/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
deleted file mode 100644
index 69f7d97..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
+++ /dev/null
@@ -1,1653 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-This module contains classes that help to emulate xcodebuild behavior on top of
-other build systems, such as make and ninja.
-"""
-
-import copy
-import gyp.common
-import os
-import os.path
-import re
-import shlex
-import subprocess
-import sys
-import tempfile
-from gyp.common import GypError
-
-# Populated lazily by XcodeVersion, for efficiency, and to fix an issue when
-# "xcodebuild" is called too quickly (it has been found to return incorrect
-# version number).
-XCODE_VERSION_CACHE = None
-
-# Populated lazily by GetXcodeArchsDefault, to an |XcodeArchsDefault| instance
-# corresponding to the installed version of Xcode.
-XCODE_ARCHS_DEFAULT_CACHE = None
-
-
-def XcodeArchsVariableMapping(archs, archs_including_64_bit=None):
- """Constructs a dictionary with expansion for $(ARCHS_STANDARD) variable,
- and optionally for $(ARCHS_STANDARD_INCLUDING_64_BIT)."""
- mapping = {'$(ARCHS_STANDARD)': archs}
- if archs_including_64_bit:
- mapping['$(ARCHS_STANDARD_INCLUDING_64_BIT)'] = archs_including_64_bit
- return mapping
-
-class XcodeArchsDefault(object):
- """A class to resolve ARCHS variable from xcode_settings, resolving Xcode
- macros and implementing filtering by VALID_ARCHS. The expansion of macros
- depends on the SDKROOT used ("macosx", "iphoneos", "iphonesimulator") and
- on the version of Xcode.
- """
-
- # Match variable like $(ARCHS_STANDARD).
- variable_pattern = re.compile(r'\$\([a-zA-Z_][a-zA-Z0-9_]*\)$')
-
- def __init__(self, default, mac, iphonesimulator, iphoneos):
- self._default = (default,)
- self._archs = {'mac': mac, 'ios': iphoneos, 'iossim': iphonesimulator}
-
- def _VariableMapping(self, sdkroot):
- """Returns the dictionary of variable mapping depending on the SDKROOT."""
- sdkroot = sdkroot.lower()
- if 'iphoneos' in sdkroot:
- return self._archs['ios']
- elif 'iphonesimulator' in sdkroot:
- return self._archs['iossim']
- else:
- return self._archs['mac']
-
- def _ExpandArchs(self, archs, sdkroot):
- """Expands variables references in ARCHS, and remove duplicates."""
- variable_mapping = self._VariableMapping(sdkroot)
- expanded_archs = []
- for arch in archs:
- if self.variable_pattern.match(arch):
- variable = arch
- try:
- variable_expansion = variable_mapping[variable]
- for arch in variable_expansion:
- if arch not in expanded_archs:
- expanded_archs.append(arch)
- except KeyError as e:
- print 'Warning: Ignoring unsupported variable "%s".' % variable
- elif arch not in expanded_archs:
- expanded_archs.append(arch)
- return expanded_archs
-
- def ActiveArchs(self, archs, valid_archs, sdkroot):
- """Expands variables references in ARCHS, and filter by VALID_ARCHS if it
- is defined (if not set, Xcode accept any value in ARCHS, otherwise, only
- values present in VALID_ARCHS are kept)."""
- expanded_archs = self._ExpandArchs(archs or self._default, sdkroot or '')
- if valid_archs:
- filtered_archs = []
- for arch in expanded_archs:
- if arch in valid_archs:
- filtered_archs.append(arch)
- expanded_archs = filtered_archs
- return expanded_archs
-
-
-def GetXcodeArchsDefault():
- """Returns the |XcodeArchsDefault| object to use to expand ARCHS for the
- installed version of Xcode. The default values used by Xcode for ARCHS
- and the expansion of the variables depends on the version of Xcode used.
-
- For all version anterior to Xcode 5.0 or posterior to Xcode 5.1 included
- uses $(ARCHS_STANDARD) if ARCHS is unset, while Xcode 5.0 to 5.0.2 uses
- $(ARCHS_STANDARD_INCLUDING_64_BIT). This variable was added to Xcode 5.0
- and deprecated with Xcode 5.1.
-
- For "macosx" SDKROOT, all version starting with Xcode 5.0 includes 64-bit
- architecture as part of $(ARCHS_STANDARD) and default to only building it.
-
- For "iphoneos" and "iphonesimulator" SDKROOT, 64-bit architectures are part
- of $(ARCHS_STANDARD_INCLUDING_64_BIT) from Xcode 5.0. From Xcode 5.1, they
- are also part of $(ARCHS_STANDARD).
-
- All thoses rules are coded in the construction of the |XcodeArchsDefault|
- object to use depending on the version of Xcode detected. The object is
- for performance reason."""
- global XCODE_ARCHS_DEFAULT_CACHE
- if XCODE_ARCHS_DEFAULT_CACHE:
- return XCODE_ARCHS_DEFAULT_CACHE
- xcode_version, _ = XcodeVersion()
- if xcode_version < '0500':
- XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault(
- '$(ARCHS_STANDARD)',
- XcodeArchsVariableMapping(['i386']),
- XcodeArchsVariableMapping(['i386']),
- XcodeArchsVariableMapping(['armv7']))
- elif xcode_version < '0510':
- XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault(
- '$(ARCHS_STANDARD_INCLUDING_64_BIT)',
- XcodeArchsVariableMapping(['x86_64'], ['x86_64']),
- XcodeArchsVariableMapping(['i386'], ['i386', 'x86_64']),
- XcodeArchsVariableMapping(
- ['armv7', 'armv7s'],
- ['armv7', 'armv7s', 'arm64']))
- else:
- XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault(
- '$(ARCHS_STANDARD)',
- XcodeArchsVariableMapping(['x86_64'], ['x86_64']),
- XcodeArchsVariableMapping(['i386', 'x86_64'], ['i386', 'x86_64']),
- XcodeArchsVariableMapping(
- ['armv7', 'armv7s', 'arm64'],
- ['armv7', 'armv7s', 'arm64']))
- return XCODE_ARCHS_DEFAULT_CACHE
-
-
-class XcodeSettings(object):
- """A class that understands the gyp 'xcode_settings' object."""
-
- # Populated lazily by _SdkPath(). Shared by all XcodeSettings, so cached
- # at class-level for efficiency.
- _sdk_path_cache = {}
- _sdk_root_cache = {}
-
- # Populated lazily by GetExtraPlistItems(). Shared by all XcodeSettings, so
- # cached at class-level for efficiency.
- _plist_cache = {}
-
- # Populated lazily by GetIOSPostbuilds. Shared by all XcodeSettings, so
- # cached at class-level for efficiency.
- _codesigning_key_cache = {}
-
- def __init__(self, spec):
- self.spec = spec
-
- self.isIOS = False
-
- # Per-target 'xcode_settings' are pushed down into configs earlier by gyp.
- # This means self.xcode_settings[config] always contains all settings
- # for that config -- the per-target settings as well. Settings that are
- # the same for all configs are implicitly per-target settings.
- self.xcode_settings = {}
- configs = spec['configurations']
- for configname, config in configs.iteritems():
- self.xcode_settings[configname] = config.get('xcode_settings', {})
- self._ConvertConditionalKeys(configname)
- if self.xcode_settings[configname].get('IPHONEOS_DEPLOYMENT_TARGET',
- None):
- self.isIOS = True
-
- # This is only non-None temporarily during the execution of some methods.
- self.configname = None
-
- # Used by _AdjustLibrary to match .a and .dylib entries in libraries.
- self.library_re = re.compile(r'^lib([^/]+)\.(a|dylib)$')
-
- def _ConvertConditionalKeys(self, configname):
- """Converts or warns on conditional keys. Xcode supports conditional keys,
- such as CODE_SIGN_IDENTITY[sdk=iphoneos*]. This is a partial implementation
- with some keys converted while the rest force a warning."""
- settings = self.xcode_settings[configname]
- conditional_keys = [key for key in settings if key.endswith(']')]
- for key in conditional_keys:
- # If you need more, speak up at http://crbug.com/122592
- if key.endswith("[sdk=iphoneos*]"):
- if configname.endswith("iphoneos"):
- new_key = key.split("[")[0]
- settings[new_key] = settings[key]
- else:
- print 'Warning: Conditional keys not implemented, ignoring:', \
- ' '.join(conditional_keys)
- del settings[key]
-
- def _Settings(self):
- assert self.configname
- return self.xcode_settings[self.configname]
-
- def _Test(self, test_key, cond_key, default):
- return self._Settings().get(test_key, default) == cond_key
-
- def _Appendf(self, lst, test_key, format_str, default=None):
- if test_key in self._Settings():
- lst.append(format_str % str(self._Settings()[test_key]))
- elif default:
- lst.append(format_str % str(default))
-
- def _WarnUnimplemented(self, test_key):
- if test_key in self._Settings():
- print 'Warning: Ignoring not yet implemented key "%s".' % test_key
-
- def IsBinaryOutputFormat(self, configname):
- default = "binary" if self.isIOS else "xml"
- format = self.xcode_settings[configname].get('INFOPLIST_OUTPUT_FORMAT',
- default)
- return format == "binary"
-
- def _IsBundle(self):
- return int(self.spec.get('mac_bundle', 0)) != 0
-
- def _IsIosAppExtension(self):
- return int(self.spec.get('ios_app_extension', 0)) != 0
-
- def _IsIosWatchKitExtension(self):
- return int(self.spec.get('ios_watchkit_extension', 0)) != 0
-
- def _IsIosWatchApp(self):
- return int(self.spec.get('ios_watch_app', 0)) != 0
-
- def _IsXCTest(self):
- return int(self.spec.get('mac_xctest_bundle', 0)) != 0
-
- def GetFrameworkVersion(self):
- """Returns the framework version of the current target. Only valid for
- bundles."""
- assert self._IsBundle()
- return self.GetPerTargetSetting('FRAMEWORK_VERSION', default='A')
-
- def GetWrapperExtension(self):
- """Returns the bundle extension (.app, .framework, .plugin, etc). Only
- valid for bundles."""
- assert self._IsBundle()
- if self.spec['type'] in ('loadable_module', 'shared_library'):
- default_wrapper_extension = {
- 'loadable_module': 'bundle',
- 'shared_library': 'framework',
- }[self.spec['type']]
- wrapper_extension = self.GetPerTargetSetting(
- 'WRAPPER_EXTENSION', default=default_wrapper_extension)
- return '.' + self.spec.get('product_extension', wrapper_extension)
- elif self.spec['type'] == 'executable':
- if self._IsIosAppExtension() or self._IsIosWatchKitExtension():
- return '.' + self.spec.get('product_extension', 'appex')
- else:
- return '.' + self.spec.get('product_extension', 'app')
- else:
- assert False, "Don't know extension for '%s', target '%s'" % (
- self.spec['type'], self.spec['target_name'])
-
- def GetProductName(self):
- """Returns PRODUCT_NAME."""
- return self.spec.get('product_name', self.spec['target_name'])
-
- def GetFullProductName(self):
- """Returns FULL_PRODUCT_NAME."""
- if self._IsBundle():
- return self.GetWrapperName()
- else:
- return self._GetStandaloneBinaryPath()
-
- def GetWrapperName(self):
- """Returns the directory name of the bundle represented by this target.
- Only valid for bundles."""
- assert self._IsBundle()
- return self.GetProductName() + self.GetWrapperExtension()
-
- def GetBundleContentsFolderPath(self):
- """Returns the qualified path to the bundle's contents folder. E.g.
- Chromium.app/Contents or Foo.bundle/Versions/A. Only valid for bundles."""
- if self.isIOS:
- return self.GetWrapperName()
- assert self._IsBundle()
- if self.spec['type'] == 'shared_library':
- return os.path.join(
- self.GetWrapperName(), 'Versions', self.GetFrameworkVersion())
- else:
- # loadable_modules have a 'Contents' folder like executables.
- return os.path.join(self.GetWrapperName(), 'Contents')
-
- def GetBundleResourceFolder(self):
- """Returns the qualified path to the bundle's resource folder. E.g.
- Chromium.app/Contents/Resources. Only valid for bundles."""
- assert self._IsBundle()
- if self.isIOS:
- return self.GetBundleContentsFolderPath()
- return os.path.join(self.GetBundleContentsFolderPath(), 'Resources')
-
- def GetBundlePlistPath(self):
- """Returns the qualified path to the bundle's plist file. E.g.
- Chromium.app/Contents/Info.plist. Only valid for bundles."""
- assert self._IsBundle()
- if self.spec['type'] in ('executable', 'loadable_module'):
- return os.path.join(self.GetBundleContentsFolderPath(), 'Info.plist')
- else:
- return os.path.join(self.GetBundleContentsFolderPath(),
- 'Resources', 'Info.plist')
-
- def GetProductType(self):
- """Returns the PRODUCT_TYPE of this target."""
- if self._IsIosAppExtension():
- assert self._IsBundle(), ('ios_app_extension flag requires mac_bundle '
- '(target %s)' % self.spec['target_name'])
- return 'com.apple.product-type.app-extension'
- if self._IsIosWatchKitExtension():
- assert self._IsBundle(), ('ios_watchkit_extension flag requires '
- 'mac_bundle (target %s)' % self.spec['target_name'])
- return 'com.apple.product-type.watchkit-extension'
- if self._IsIosWatchApp():
- assert self._IsBundle(), ('ios_watch_app flag requires mac_bundle '
- '(target %s)' % self.spec['target_name'])
- return 'com.apple.product-type.application.watchapp'
- if self._IsBundle():
- return {
- 'executable': 'com.apple.product-type.application',
- 'loadable_module': 'com.apple.product-type.bundle',
- 'shared_library': 'com.apple.product-type.framework',
- }[self.spec['type']]
- else:
- return {
- 'executable': 'com.apple.product-type.tool',
- 'loadable_module': 'com.apple.product-type.library.dynamic',
- 'shared_library': 'com.apple.product-type.library.dynamic',
- 'static_library': 'com.apple.product-type.library.static',
- }[self.spec['type']]
-
- def GetMachOType(self):
- """Returns the MACH_O_TYPE of this target."""
- # Weird, but matches Xcode.
- if not self._IsBundle() and self.spec['type'] == 'executable':
- return ''
- return {
- 'executable': 'mh_execute',
- 'static_library': 'staticlib',
- 'shared_library': 'mh_dylib',
- 'loadable_module': 'mh_bundle',
- }[self.spec['type']]
-
- def _GetBundleBinaryPath(self):
- """Returns the name of the bundle binary of by this target.
- E.g. Chromium.app/Contents/MacOS/Chromium. Only valid for bundles."""
- assert self._IsBundle()
- if self.spec['type'] in ('shared_library') or self.isIOS:
- path = self.GetBundleContentsFolderPath()
- elif self.spec['type'] in ('executable', 'loadable_module'):
- path = os.path.join(self.GetBundleContentsFolderPath(), 'MacOS')
- return os.path.join(path, self.GetExecutableName())
-
- def _GetStandaloneExecutableSuffix(self):
- if 'product_extension' in self.spec:
- return '.' + self.spec['product_extension']
- return {
- 'executable': '',
- 'static_library': '.a',
- 'shared_library': '.dylib',
- 'loadable_module': '.so',
- }[self.spec['type']]
-
- def _GetStandaloneExecutablePrefix(self):
- return self.spec.get('product_prefix', {
- 'executable': '',
- 'static_library': 'lib',
- 'shared_library': 'lib',
- # Non-bundled loadable_modules are called foo.so for some reason
- # (that is, .so and no prefix) with the xcode build -- match that.
- 'loadable_module': '',
- }[self.spec['type']])
-
- def _GetStandaloneBinaryPath(self):
- """Returns the name of the non-bundle binary represented by this target.
- E.g. hello_world. Only valid for non-bundles."""
- assert not self._IsBundle()
- assert self.spec['type'] in (
- 'executable', 'shared_library', 'static_library', 'loadable_module'), (
- 'Unexpected type %s' % self.spec['type'])
- target = self.spec['target_name']
- if self.spec['type'] == 'static_library':
- if target[:3] == 'lib':
- target = target[3:]
- elif self.spec['type'] in ('loadable_module', 'shared_library'):
- if target[:3] == 'lib':
- target = target[3:]
-
- target_prefix = self._GetStandaloneExecutablePrefix()
- target = self.spec.get('product_name', target)
- target_ext = self._GetStandaloneExecutableSuffix()
- return target_prefix + target + target_ext
-
- def GetExecutableName(self):
- """Returns the executable name of the bundle represented by this target.
- E.g. Chromium."""
- if self._IsBundle():
- return self.spec.get('product_name', self.spec['target_name'])
- else:
- return self._GetStandaloneBinaryPath()
-
- def GetExecutablePath(self):
- """Returns the directory name of the bundle represented by this target. E.g.
- Chromium.app/Contents/MacOS/Chromium."""
- if self._IsBundle():
- return self._GetBundleBinaryPath()
- else:
- return self._GetStandaloneBinaryPath()
-
- def GetActiveArchs(self, configname):
- """Returns the architectures this target should be built for."""
- config_settings = self.xcode_settings[configname]
- xcode_archs_default = GetXcodeArchsDefault()
- return xcode_archs_default.ActiveArchs(
- config_settings.get('ARCHS'),
- config_settings.get('VALID_ARCHS'),
- config_settings.get('SDKROOT'))
-
- def _GetSdkVersionInfoItem(self, sdk, infoitem):
- # xcodebuild requires Xcode and can't run on Command Line Tools-only
- # systems from 10.7 onward.
- # Since the CLT has no SDK paths anyway, returning None is the
- # most sensible route and should still do the right thing.
- try:
- return GetStdoutQuiet(['xcodebuild', '-version', '-sdk', sdk, infoitem])
- except:
- pass
-
- def _SdkRoot(self, configname):
- if configname is None:
- configname = self.configname
- return self.GetPerConfigSetting('SDKROOT', configname, default='')
-
- def _SdkPath(self, configname=None):
- sdk_root = self._SdkRoot(configname)
- if sdk_root.startswith('/'):
- return sdk_root
- return self._XcodeSdkPath(sdk_root)
-
- def _XcodeSdkPath(self, sdk_root):
- if sdk_root not in XcodeSettings._sdk_path_cache:
- sdk_path = self._GetSdkVersionInfoItem(sdk_root, 'Path')
- XcodeSettings._sdk_path_cache[sdk_root] = sdk_path
- if sdk_root:
- XcodeSettings._sdk_root_cache[sdk_path] = sdk_root
- return XcodeSettings._sdk_path_cache[sdk_root]
-
- def _AppendPlatformVersionMinFlags(self, lst):
- self._Appendf(lst, 'MACOSX_DEPLOYMENT_TARGET', '-mmacosx-version-min=%s')
- if 'IPHONEOS_DEPLOYMENT_TARGET' in self._Settings():
- # TODO: Implement this better?
- sdk_path_basename = os.path.basename(self._SdkPath())
- if sdk_path_basename.lower().startswith('iphonesimulator'):
- self._Appendf(lst, 'IPHONEOS_DEPLOYMENT_TARGET',
- '-mios-simulator-version-min=%s')
- else:
- self._Appendf(lst, 'IPHONEOS_DEPLOYMENT_TARGET',
- '-miphoneos-version-min=%s')
-
- def GetCflags(self, configname, arch=None):
- """Returns flags that need to be added to .c, .cc, .m, and .mm
- compilations."""
- # This functions (and the similar ones below) do not offer complete
- # emulation of all xcode_settings keys. They're implemented on demand.
-
- self.configname = configname
- cflags = []
-
- sdk_root = self._SdkPath()
- if 'SDKROOT' in self._Settings() and sdk_root:
- cflags.append('-isysroot %s' % sdk_root)
-
- if self._Test('CLANG_WARN_CONSTANT_CONVERSION', 'YES', default='NO'):
- cflags.append('-Wconstant-conversion')
-
- if self._Test('GCC_CHAR_IS_UNSIGNED_CHAR', 'YES', default='NO'):
- cflags.append('-funsigned-char')
-
- if self._Test('GCC_CW_ASM_SYNTAX', 'YES', default='YES'):
- cflags.append('-fasm-blocks')
-
- if 'GCC_DYNAMIC_NO_PIC' in self._Settings():
- if self._Settings()['GCC_DYNAMIC_NO_PIC'] == 'YES':
- cflags.append('-mdynamic-no-pic')
- else:
- pass
- # TODO: In this case, it depends on the target. xcode passes
- # mdynamic-no-pic by default for executable and possibly static lib
- # according to mento
-
- if self._Test('GCC_ENABLE_PASCAL_STRINGS', 'YES', default='YES'):
- cflags.append('-mpascal-strings')
-
- self._Appendf(cflags, 'GCC_OPTIMIZATION_LEVEL', '-O%s', default='s')
-
- if self._Test('GCC_GENERATE_DEBUGGING_SYMBOLS', 'YES', default='YES'):
- dbg_format = self._Settings().get('DEBUG_INFORMATION_FORMAT', 'dwarf')
- if dbg_format == 'dwarf':
- cflags.append('-gdwarf-2')
- elif dbg_format == 'stabs':
- raise NotImplementedError('stabs debug format is not supported yet.')
- elif dbg_format == 'dwarf-with-dsym':
- cflags.append('-gdwarf-2')
- else:
- raise NotImplementedError('Unknown debug format %s' % dbg_format)
-
- if self._Settings().get('GCC_STRICT_ALIASING') == 'YES':
- cflags.append('-fstrict-aliasing')
- elif self._Settings().get('GCC_STRICT_ALIASING') == 'NO':
- cflags.append('-fno-strict-aliasing')
-
- if self._Test('GCC_SYMBOLS_PRIVATE_EXTERN', 'YES', default='NO'):
- cflags.append('-fvisibility=hidden')
-
- if self._Test('GCC_TREAT_WARNINGS_AS_ERRORS', 'YES', default='NO'):
- cflags.append('-Werror')
-
- if self._Test('GCC_WARN_ABOUT_MISSING_NEWLINE', 'YES', default='NO'):
- cflags.append('-Wnewline-eof')
-
- # In Xcode, this is only activated when GCC_COMPILER_VERSION is clang or
- # llvm-gcc. It also requires a fairly recent libtool, and
- # if the system clang isn't used, DYLD_LIBRARY_PATH needs to contain the
- # path to the libLTO.dylib that matches the used clang.
- if self._Test('LLVM_LTO', 'YES', default='NO'):
- cflags.append('-flto')
-
- self._AppendPlatformVersionMinFlags(cflags)
-
- # TODO:
- if self._Test('COPY_PHASE_STRIP', 'YES', default='NO'):
- self._WarnUnimplemented('COPY_PHASE_STRIP')
- self._WarnUnimplemented('GCC_DEBUGGING_SYMBOLS')
- self._WarnUnimplemented('GCC_ENABLE_OBJC_EXCEPTIONS')
-
- # TODO: This is exported correctly, but assigning to it is not supported.
- self._WarnUnimplemented('MACH_O_TYPE')
- self._WarnUnimplemented('PRODUCT_TYPE')
-
- if arch is not None:
- archs = [arch]
- else:
- assert self.configname
- archs = self.GetActiveArchs(self.configname)
- if len(archs) != 1:
- # TODO: Supporting fat binaries will be annoying.
- self._WarnUnimplemented('ARCHS')
- archs = ['i386']
- cflags.append('-arch ' + archs[0])
-
- if archs[0] in ('i386', 'x86_64'):
- if self._Test('GCC_ENABLE_SSE3_EXTENSIONS', 'YES', default='NO'):
- cflags.append('-msse3')
- if self._Test('GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS', 'YES',
- default='NO'):
- cflags.append('-mssse3') # Note 3rd 's'.
- if self._Test('GCC_ENABLE_SSE41_EXTENSIONS', 'YES', default='NO'):
- cflags.append('-msse4.1')
- if self._Test('GCC_ENABLE_SSE42_EXTENSIONS', 'YES', default='NO'):
- cflags.append('-msse4.2')
-
- cflags += self._Settings().get('WARNING_CFLAGS', [])
-
- if self._IsXCTest():
- platform_root = self._XcodePlatformPath(configname)
- if platform_root:
- cflags.append('-F' + platform_root + '/Developer/Library/Frameworks/')
-
- if sdk_root:
- framework_root = sdk_root
- else:
- framework_root = ''
- config = self.spec['configurations'][self.configname]
- framework_dirs = config.get('mac_framework_dirs', [])
- for directory in framework_dirs:
- cflags.append('-F' + directory.replace('$(SDKROOT)', framework_root))
-
- self.configname = None
- return cflags
-
- def GetCflagsC(self, configname):
- """Returns flags that need to be added to .c, and .m compilations."""
- self.configname = configname
- cflags_c = []
- if self._Settings().get('GCC_C_LANGUAGE_STANDARD', '') == 'ansi':
- cflags_c.append('-ansi')
- else:
- self._Appendf(cflags_c, 'GCC_C_LANGUAGE_STANDARD', '-std=%s')
- cflags_c += self._Settings().get('OTHER_CFLAGS', [])
- self.configname = None
- return cflags_c
-
- def GetCflagsCC(self, configname):
- """Returns flags that need to be added to .cc, and .mm compilations."""
- self.configname = configname
- cflags_cc = []
-
- clang_cxx_language_standard = self._Settings().get(
- 'CLANG_CXX_LANGUAGE_STANDARD')
- # Note: Don't make c++0x to c++11 so that c++0x can be used with older
- # clangs that don't understand c++11 yet (like Xcode 4.2's).
- if clang_cxx_language_standard:
- cflags_cc.append('-std=%s' % clang_cxx_language_standard)
-
- self._Appendf(cflags_cc, 'CLANG_CXX_LIBRARY', '-stdlib=%s')
-
- if self._Test('GCC_ENABLE_CPP_RTTI', 'NO', default='YES'):
- cflags_cc.append('-fno-rtti')
- if self._Test('GCC_ENABLE_CPP_EXCEPTIONS', 'NO', default='YES'):
- cflags_cc.append('-fno-exceptions')
- if self._Test('GCC_INLINES_ARE_PRIVATE_EXTERN', 'YES', default='NO'):
- cflags_cc.append('-fvisibility-inlines-hidden')
- if self._Test('GCC_THREADSAFE_STATICS', 'NO', default='YES'):
- cflags_cc.append('-fno-threadsafe-statics')
- # Note: This flag is a no-op for clang, it only has an effect for gcc.
- if self._Test('GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO', 'NO', default='YES'):
- cflags_cc.append('-Wno-invalid-offsetof')
-
- other_ccflags = []
-
- for flag in self._Settings().get('OTHER_CPLUSPLUSFLAGS', ['$(inherited)']):
- # TODO: More general variable expansion. Missing in many other places too.
- if flag in ('$inherited', '$(inherited)', '${inherited}'):
- flag = '$OTHER_CFLAGS'
- if flag in ('$OTHER_CFLAGS', '$(OTHER_CFLAGS)', '${OTHER_CFLAGS}'):
- other_ccflags += self._Settings().get('OTHER_CFLAGS', [])
- else:
- other_ccflags.append(flag)
- cflags_cc += other_ccflags
-
- self.configname = None
- return cflags_cc
-
- def _AddObjectiveCGarbageCollectionFlags(self, flags):
- gc_policy = self._Settings().get('GCC_ENABLE_OBJC_GC', 'unsupported')
- if gc_policy == 'supported':
- flags.append('-fobjc-gc')
- elif gc_policy == 'required':
- flags.append('-fobjc-gc-only')
-
- def _AddObjectiveCARCFlags(self, flags):
- if self._Test('CLANG_ENABLE_OBJC_ARC', 'YES', default='NO'):
- flags.append('-fobjc-arc')
-
- def _AddObjectiveCMissingPropertySynthesisFlags(self, flags):
- if self._Test('CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS',
- 'YES', default='NO'):
- flags.append('-Wobjc-missing-property-synthesis')
-
- def GetCflagsObjC(self, configname):
- """Returns flags that need to be added to .m compilations."""
- self.configname = configname
- cflags_objc = []
- self._AddObjectiveCGarbageCollectionFlags(cflags_objc)
- self._AddObjectiveCARCFlags(cflags_objc)
- self._AddObjectiveCMissingPropertySynthesisFlags(cflags_objc)
- self.configname = None
- return cflags_objc
-
- def GetCflagsObjCC(self, configname):
- """Returns flags that need to be added to .mm compilations."""
- self.configname = configname
- cflags_objcc = []
- self._AddObjectiveCGarbageCollectionFlags(cflags_objcc)
- self._AddObjectiveCARCFlags(cflags_objcc)
- self._AddObjectiveCMissingPropertySynthesisFlags(cflags_objcc)
- if self._Test('GCC_OBJC_CALL_CXX_CDTORS', 'YES', default='NO'):
- cflags_objcc.append('-fobjc-call-cxx-cdtors')
- self.configname = None
- return cflags_objcc
-
- def GetInstallNameBase(self):
- """Return DYLIB_INSTALL_NAME_BASE for this target."""
- # Xcode sets this for shared_libraries, and for nonbundled loadable_modules.
- if (self.spec['type'] != 'shared_library' and
- (self.spec['type'] != 'loadable_module' or self._IsBundle())):
- return None
- install_base = self.GetPerTargetSetting(
- 'DYLIB_INSTALL_NAME_BASE',
- default='/Library/Frameworks' if self._IsBundle() else '/usr/local/lib')
- return install_base
-
- def _StandardizePath(self, path):
- """Do :standardizepath processing for path."""
- # I'm not quite sure what :standardizepath does. Just call normpath(),
- # but don't let @executable_path/../foo collapse to foo.
- if '/' in path:
- prefix, rest = '', path
- if path.startswith('@'):
- prefix, rest = path.split('/', 1)
- rest = os.path.normpath(rest) # :standardizepath
- path = os.path.join(prefix, rest)
- return path
-
- def GetInstallName(self):
- """Return LD_DYLIB_INSTALL_NAME for this target."""
- # Xcode sets this for shared_libraries, and for nonbundled loadable_modules.
- if (self.spec['type'] != 'shared_library' and
- (self.spec['type'] != 'loadable_module' or self._IsBundle())):
- return None
-
- default_install_name = \
- '$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)'
- install_name = self.GetPerTargetSetting(
- 'LD_DYLIB_INSTALL_NAME', default=default_install_name)
-
- # Hardcode support for the variables used in chromium for now, to
- # unblock people using the make build.
- if '$' in install_name:
- assert install_name in ('$(DYLIB_INSTALL_NAME_BASE:standardizepath)/'
- '$(WRAPPER_NAME)/$(PRODUCT_NAME)', default_install_name), (
- 'Variables in LD_DYLIB_INSTALL_NAME are not generally supported '
- 'yet in target \'%s\' (got \'%s\')' %
- (self.spec['target_name'], install_name))
-
- install_name = install_name.replace(
- '$(DYLIB_INSTALL_NAME_BASE:standardizepath)',
- self._StandardizePath(self.GetInstallNameBase()))
- if self._IsBundle():
- # These are only valid for bundles, hence the |if|.
- install_name = install_name.replace(
- '$(WRAPPER_NAME)', self.GetWrapperName())
- install_name = install_name.replace(
- '$(PRODUCT_NAME)', self.GetProductName())
- else:
- assert '$(WRAPPER_NAME)' not in install_name
- assert '$(PRODUCT_NAME)' not in install_name
-
- install_name = install_name.replace(
- '$(EXECUTABLE_PATH)', self.GetExecutablePath())
- return install_name
-
- def _MapLinkerFlagFilename(self, ldflag, gyp_to_build_path):
- """Checks if ldflag contains a filename and if so remaps it from
- gyp-directory-relative to build-directory-relative."""
- # This list is expanded on demand.
- # They get matched as:
- # -exported_symbols_list file
- # -Wl,exported_symbols_list file
- # -Wl,exported_symbols_list,file
- LINKER_FILE = r'(\S+)'
- WORD = r'\S+'
- linker_flags = [
- ['-exported_symbols_list', LINKER_FILE], # Needed for NaCl.
- ['-unexported_symbols_list', LINKER_FILE],
- ['-reexported_symbols_list', LINKER_FILE],
- ['-sectcreate', WORD, WORD, LINKER_FILE], # Needed for remoting.
- ]
- for flag_pattern in linker_flags:
- regex = re.compile('(?:-Wl,)?' + '[ ,]'.join(flag_pattern))
- m = regex.match(ldflag)
- if m:
- ldflag = ldflag[:m.start(1)] + gyp_to_build_path(m.group(1)) + \
- ldflag[m.end(1):]
- # Required for ffmpeg (no idea why they don't use LIBRARY_SEARCH_PATHS,
- # TODO(thakis): Update ffmpeg.gyp):
- if ldflag.startswith('-L'):
- ldflag = '-L' + gyp_to_build_path(ldflag[len('-L'):])
- return ldflag
-
- def GetLdflags(self, configname, product_dir, gyp_to_build_path, arch=None):
- """Returns flags that need to be passed to the linker.
-
- Args:
- configname: The name of the configuration to get ld flags for.
- product_dir: The directory where products such static and dynamic
- libraries are placed. This is added to the library search path.
- gyp_to_build_path: A function that converts paths relative to the
- current gyp file to paths relative to the build direcotry.
- """
- self.configname = configname
- ldflags = []
-
- # The xcode build is relative to a gyp file's directory, and OTHER_LDFLAGS
- # can contain entries that depend on this. Explicitly absolutify these.
- for ldflag in self._Settings().get('OTHER_LDFLAGS', []):
- ldflags.append(self._MapLinkerFlagFilename(ldflag, gyp_to_build_path))
-
- if self._Test('DEAD_CODE_STRIPPING', 'YES', default='NO'):
- ldflags.append('-Wl,-dead_strip')
-
- if self._Test('PREBINDING', 'YES', default='NO'):
- ldflags.append('-Wl,-prebind')
-
- self._Appendf(
- ldflags, 'DYLIB_COMPATIBILITY_VERSION', '-compatibility_version %s')
- self._Appendf(
- ldflags, 'DYLIB_CURRENT_VERSION', '-current_version %s')
-
- self._AppendPlatformVersionMinFlags(ldflags)
-
- if 'SDKROOT' in self._Settings() and self._SdkPath():
- ldflags.append('-isysroot ' + self._SdkPath())
-
- for library_path in self._Settings().get('LIBRARY_SEARCH_PATHS', []):
- ldflags.append('-L' + gyp_to_build_path(library_path))
-
- if 'ORDER_FILE' in self._Settings():
- ldflags.append('-Wl,-order_file ' +
- '-Wl,' + gyp_to_build_path(
- self._Settings()['ORDER_FILE']))
-
- if arch is not None:
- archs = [arch]
- else:
- assert self.configname
- archs = self.GetActiveArchs(self.configname)
- if len(archs) != 1:
- # TODO: Supporting fat binaries will be annoying.
- self._WarnUnimplemented('ARCHS')
- archs = ['i386']
- ldflags.append('-arch ' + archs[0])
-
- # Xcode adds the product directory by default.
- ldflags.append('-L' + product_dir)
-
- install_name = self.GetInstallName()
- if install_name and self.spec['type'] != 'loadable_module':
- ldflags.append('-install_name ' + install_name.replace(' ', r'\ '))
-
- for rpath in self._Settings().get('LD_RUNPATH_SEARCH_PATHS', []):
- ldflags.append('-Wl,-rpath,' + rpath)
-
- sdk_root = self._SdkPath()
- if not sdk_root:
- sdk_root = ''
- config = self.spec['configurations'][self.configname]
- framework_dirs = config.get('mac_framework_dirs', [])
- for directory in framework_dirs:
- ldflags.append('-F' + directory.replace('$(SDKROOT)', sdk_root))
-
- if self._IsXCTest():
- platform_root = self._XcodePlatformPath(configname)
- if platform_root:
- cflags.append('-F' + platform_root + '/Developer/Library/Frameworks/')
-
- is_extension = self._IsIosAppExtension() or self._IsIosWatchKitExtension()
- if sdk_root and is_extension:
- # Adds the link flags for extensions. These flags are common for all
- # extensions and provide loader and main function.
- # These flags reflect the compilation options used by xcode to compile
- # extensions.
- ldflags.append('-lpkstart')
- if XcodeVersion() < '0900':
- ldflags.append(sdk_root +
- '/System/Library/PrivateFrameworks/PlugInKit.framework/PlugInKit')
- ldflags.append('-fapplication-extension')
- ldflags.append('-Xlinker -rpath '
- '-Xlinker @executable_path/../../Frameworks')
-
- self._Appendf(ldflags, 'CLANG_CXX_LIBRARY', '-stdlib=%s')
-
- self.configname = None
- return ldflags
-
- def GetLibtoolflags(self, configname):
- """Returns flags that need to be passed to the static linker.
-
- Args:
- configname: The name of the configuration to get ld flags for.
- """
- self.configname = configname
- libtoolflags = []
-
- for libtoolflag in self._Settings().get('OTHER_LDFLAGS', []):
- libtoolflags.append(libtoolflag)
- # TODO(thakis): ARCHS?
-
- self.configname = None
- return libtoolflags
-
- def GetPerTargetSettings(self):
- """Gets a list of all the per-target settings. This will only fetch keys
- whose values are the same across all configurations."""
- first_pass = True
- result = {}
- for configname in sorted(self.xcode_settings.keys()):
- if first_pass:
- result = dict(self.xcode_settings[configname])
- first_pass = False
- else:
- for key, value in self.xcode_settings[configname].iteritems():
- if key not in result:
- continue
- elif result[key] != value:
- del result[key]
- return result
-
- def GetPerConfigSetting(self, setting, configname, default=None):
- if configname in self.xcode_settings:
- return self.xcode_settings[configname].get(setting, default)
- else:
- return self.GetPerTargetSetting(setting, default)
-
- def GetPerTargetSetting(self, setting, default=None):
- """Tries to get xcode_settings.setting from spec. Assumes that the setting
- has the same value in all configurations and throws otherwise."""
- is_first_pass = True
- result = None
- for configname in sorted(self.xcode_settings.keys()):
- if is_first_pass:
- result = self.xcode_settings[configname].get(setting, None)
- is_first_pass = False
- else:
- assert result == self.xcode_settings[configname].get(setting, None), (
- "Expected per-target setting for '%s', got per-config setting "
- "(target %s)" % (setting, self.spec['target_name']))
- if result is None:
- return default
- return result
-
- def _GetStripPostbuilds(self, configname, output_binary, quiet):
- """Returns a list of shell commands that contain the shell commands
- neccessary to strip this target's binary. These should be run as postbuilds
- before the actual postbuilds run."""
- self.configname = configname
-
- result = []
- if (self._Test('DEPLOYMENT_POSTPROCESSING', 'YES', default='NO') and
- self._Test('STRIP_INSTALLED_PRODUCT', 'YES', default='NO')):
-
- default_strip_style = 'debugging'
- if self.spec['type'] == 'loadable_module' and self._IsBundle():
- default_strip_style = 'non-global'
- elif self.spec['type'] == 'executable':
- default_strip_style = 'all'
-
- strip_style = self._Settings().get('STRIP_STYLE', default_strip_style)
- strip_flags = {
- 'all': '',
- 'non-global': '-x',
- 'debugging': '-S',
- }[strip_style]
-
- explicit_strip_flags = self._Settings().get('STRIPFLAGS', '')
- if explicit_strip_flags:
- strip_flags += ' ' + _NormalizeEnvVarReferences(explicit_strip_flags)
-
- if not quiet:
- result.append('echo STRIP\\(%s\\)' % self.spec['target_name'])
- result.append('strip %s %s' % (strip_flags, output_binary))
-
- self.configname = None
- return result
-
- def _GetDebugInfoPostbuilds(self, configname, output, output_binary, quiet):
- """Returns a list of shell commands that contain the shell commands
- neccessary to massage this target's debug information. These should be run
- as postbuilds before the actual postbuilds run."""
- self.configname = configname
-
- # For static libraries, no dSYMs are created.
- result = []
- if (self._Test('GCC_GENERATE_DEBUGGING_SYMBOLS', 'YES', default='YES') and
- self._Test(
- 'DEBUG_INFORMATION_FORMAT', 'dwarf-with-dsym', default='dwarf') and
- self.spec['type'] != 'static_library'):
- if not quiet:
- result.append('echo DSYMUTIL\\(%s\\)' % self.spec['target_name'])
- result.append('dsymutil %s -o %s' % (output_binary, output + '.dSYM'))
-
- self.configname = None
- return result
-
- def _GetTargetPostbuilds(self, configname, output, output_binary,
- quiet=False):
- """Returns a list of shell commands that contain the shell commands
- to run as postbuilds for this target, before the actual postbuilds."""
- # dSYMs need to build before stripping happens.
- return (
- self._GetDebugInfoPostbuilds(configname, output, output_binary, quiet) +
- self._GetStripPostbuilds(configname, output_binary, quiet))
-
- def _GetIOSPostbuilds(self, configname, output_binary):
- """Return a shell command to codesign the iOS output binary so it can
- be deployed to a device. This should be run as the very last step of the
- build."""
- if not (self.isIOS and self.spec['type'] == 'executable'):
- return []
-
- settings = self.xcode_settings[configname]
- key = self._GetIOSCodeSignIdentityKey(settings)
- if not key:
- return []
-
- # Warn for any unimplemented signing xcode keys.
- unimpl = ['OTHER_CODE_SIGN_FLAGS']
- unimpl = set(unimpl) & set(self.xcode_settings[configname].keys())
- if unimpl:
- print 'Warning: Some codesign keys not implemented, ignoring: %s' % (
- ', '.join(sorted(unimpl)))
-
- return ['%s code-sign-bundle "%s" "%s" "%s" "%s"' % (
- os.path.join('${TARGET_BUILD_DIR}', 'gyp-mac-tool'), key,
- settings.get('CODE_SIGN_RESOURCE_RULES_PATH', ''),
- settings.get('CODE_SIGN_ENTITLEMENTS', ''),
- settings.get('PROVISIONING_PROFILE', ''))
- ]
-
- def _GetIOSCodeSignIdentityKey(self, settings):
- identity = settings.get('CODE_SIGN_IDENTITY')
- if not identity:
- return None
- if identity not in XcodeSettings._codesigning_key_cache:
- output = subprocess.check_output(
- ['security', 'find-identity', '-p', 'codesigning', '-v'])
- for line in output.splitlines():
- if identity in line:
- fingerprint = line.split()[1]
- cache = XcodeSettings._codesigning_key_cache
- assert identity not in cache or fingerprint == cache[identity], (
- "Multiple codesigning fingerprints for identity: %s" % identity)
- XcodeSettings._codesigning_key_cache[identity] = fingerprint
- return XcodeSettings._codesigning_key_cache.get(identity, '')
-
- def AddImplicitPostbuilds(self, configname, output, output_binary,
- postbuilds=[], quiet=False):
- """Returns a list of shell commands that should run before and after
- |postbuilds|."""
- assert output_binary is not None
- pre = self._GetTargetPostbuilds(configname, output, output_binary, quiet)
- post = self._GetIOSPostbuilds(configname, output_binary)
- return pre + postbuilds + post
-
- def _AdjustLibrary(self, library, config_name=None):
- if library.endswith('.framework'):
- l = '-framework ' + os.path.splitext(os.path.basename(library))[0]
- else:
- m = self.library_re.match(library)
- if m:
- l = '-l' + m.group(1)
- else:
- l = library
-
- sdk_root = self._SdkPath(config_name)
- if not sdk_root:
- sdk_root = ''
- # Xcode 7 started shipping with ".tbd" (text based stubs) files instead of
- # ".dylib" without providing a real support for them. What it does, for
- # "/usr/lib" libraries, is do "-L/usr/lib -lname" which is dependent on the
- # library order and cause collision when building Chrome.
- #
- # Instead substitude ".tbd" to ".dylib" in the generated project when the
- # following conditions are both true:
- # - library is referenced in the gyp file as "$(SDKROOT)/**/*.dylib",
- # - the ".dylib" file does not exists but a ".tbd" file do.
- library = l.replace('$(SDKROOT)', sdk_root)
- if l.startswith('$(SDKROOT)'):
- basename, ext = os.path.splitext(library)
- if ext == '.dylib' and not os.path.exists(library):
- tbd_library = basename + '.tbd'
- if os.path.exists(tbd_library):
- library = tbd_library
- return library
-
- def AdjustLibraries(self, libraries, config_name=None):
- """Transforms entries like 'Cocoa.framework' in libraries into entries like
- '-framework Cocoa', 'libcrypto.dylib' into '-lcrypto', etc.
- """
- libraries = [self._AdjustLibrary(library, config_name)
- for library in libraries]
- return libraries
-
- def _BuildMachineOSBuild(self):
- return GetStdout(['sw_vers', '-buildVersion'])
-
- def _XcodeIOSDeviceFamily(self, configname):
- family = self.xcode_settings[configname].get('TARGETED_DEVICE_FAMILY', '1')
- return [int(x) for x in family.split(',')]
-
- def GetExtraPlistItems(self, configname=None):
- """Returns a dictionary with extra items to insert into Info.plist."""
- if configname not in XcodeSettings._plist_cache:
- cache = {}
- cache['BuildMachineOSBuild'] = self._BuildMachineOSBuild()
-
- xcode, xcode_build = XcodeVersion()
- cache['DTXcode'] = xcode
- cache['DTXcodeBuild'] = xcode_build
-
- sdk_root = self._SdkRoot(configname)
- if not sdk_root:
- sdk_root = self._DefaultSdkRoot()
- cache['DTSDKName'] = sdk_root
- if xcode >= '0430':
- cache['DTSDKBuild'] = self._GetSdkVersionInfoItem(
- sdk_root, 'ProductBuildVersion')
- else:
- cache['DTSDKBuild'] = cache['BuildMachineOSBuild']
-
- if self.isIOS:
- cache['DTPlatformName'] = cache['DTSDKName']
- if configname.endswith("iphoneos"):
- cache['DTPlatformVersion'] = self._GetSdkVersionInfoItem(
- sdk_root, 'ProductVersion')
- cache['CFBundleSupportedPlatforms'] = ['iPhoneOS']
- else:
- cache['CFBundleSupportedPlatforms'] = ['iPhoneSimulator']
- XcodeSettings._plist_cache[configname] = cache
-
- # Include extra plist items that are per-target, not per global
- # XcodeSettings.
- items = dict(XcodeSettings._plist_cache[configname])
- if self.isIOS:
- items['UIDeviceFamily'] = self._XcodeIOSDeviceFamily(configname)
- return items
-
- def _DefaultSdkRoot(self):
- """Returns the default SDKROOT to use.
-
- Prior to version 5.0.0, if SDKROOT was not explicitly set in the Xcode
- project, then the environment variable was empty. Starting with this
- version, Xcode uses the name of the newest SDK installed.
- """
- xcode_version, xcode_build = XcodeVersion()
- if xcode_version < '0500':
- return ''
- default_sdk_path = self._XcodeSdkPath('')
- default_sdk_root = XcodeSettings._sdk_root_cache.get(default_sdk_path)
- if default_sdk_root:
- return default_sdk_root
- try:
- all_sdks = GetStdout(['xcodebuild', '-showsdks'])
- except:
- # If xcodebuild fails, there will be no valid SDKs
- return ''
- for line in all_sdks.splitlines():
- items = line.split()
- if len(items) >= 3 and items[-2] == '-sdk':
- sdk_root = items[-1]
- sdk_path = self._XcodeSdkPath(sdk_root)
- if sdk_path == default_sdk_path:
- return sdk_root
- return ''
-
-
-class MacPrefixHeader(object):
- """A class that helps with emulating Xcode's GCC_PREFIX_HEADER feature.
-
- This feature consists of several pieces:
- * If GCC_PREFIX_HEADER is present, all compilations in that project get an
- additional |-include path_to_prefix_header| cflag.
- * If GCC_PRECOMPILE_PREFIX_HEADER is present too, then the prefix header is
- instead compiled, and all other compilations in the project get an
- additional |-include path_to_compiled_header| instead.
- + Compiled prefix headers have the extension gch. There is one gch file for
- every language used in the project (c, cc, m, mm), since gch files for
- different languages aren't compatible.
- + gch files themselves are built with the target's normal cflags, but they
- obviously don't get the |-include| flag. Instead, they need a -x flag that
- describes their language.
- + All o files in the target need to depend on the gch file, to make sure
- it's built before any o file is built.
-
- This class helps with some of these tasks, but it needs help from the build
- system for writing dependencies to the gch files, for writing build commands
- for the gch files, and for figuring out the location of the gch files.
- """
- def __init__(self, xcode_settings,
- gyp_path_to_build_path, gyp_path_to_build_output):
- """If xcode_settings is None, all methods on this class are no-ops.
-
- Args:
- gyp_path_to_build_path: A function that takes a gyp-relative path,
- and returns a path relative to the build directory.
- gyp_path_to_build_output: A function that takes a gyp-relative path and
- a language code ('c', 'cc', 'm', or 'mm'), and that returns a path
- to where the output of precompiling that path for that language
- should be placed (without the trailing '.gch').
- """
- # This doesn't support per-configuration prefix headers. Good enough
- # for now.
- self.header = None
- self.compile_headers = False
- if xcode_settings:
- self.header = xcode_settings.GetPerTargetSetting('GCC_PREFIX_HEADER')
- self.compile_headers = xcode_settings.GetPerTargetSetting(
- 'GCC_PRECOMPILE_PREFIX_HEADER', default='NO') != 'NO'
- self.compiled_headers = {}
- if self.header:
- if self.compile_headers:
- for lang in ['c', 'cc', 'm', 'mm']:
- self.compiled_headers[lang] = gyp_path_to_build_output(
- self.header, lang)
- self.header = gyp_path_to_build_path(self.header)
-
- def _CompiledHeader(self, lang, arch):
- assert self.compile_headers
- h = self.compiled_headers[lang]
- if arch:
- h += '.' + arch
- return h
-
- def GetInclude(self, lang, arch=None):
- """Gets the cflags to include the prefix header for language |lang|."""
- if self.compile_headers and lang in self.compiled_headers:
- return '-include %s' % self._CompiledHeader(lang, arch)
- elif self.header:
- return '-include %s' % self.header
- else:
- return ''
-
- def _Gch(self, lang, arch):
- """Returns the actual file name of the prefix header for language |lang|."""
- assert self.compile_headers
- return self._CompiledHeader(lang, arch) + '.gch'
-
- def GetObjDependencies(self, sources, objs, arch=None):
- """Given a list of source files and the corresponding object files, returns
- a list of (source, object, gch) tuples, where |gch| is the build-directory
- relative path to the gch file each object file depends on. |compilable[i]|
- has to be the source file belonging to |objs[i]|."""
- if not self.header or not self.compile_headers:
- return []
-
- result = []
- for source, obj in zip(sources, objs):
- ext = os.path.splitext(source)[1]
- lang = {
- '.c': 'c',
- '.cpp': 'cc', '.cc': 'cc', '.cxx': 'cc',
- '.m': 'm',
- '.mm': 'mm',
- }.get(ext, None)
- if lang:
- result.append((source, obj, self._Gch(lang, arch)))
- return result
-
- def GetPchBuildCommands(self, arch=None):
- """Returns [(path_to_gch, language_flag, language, header)].
- |path_to_gch| and |header| are relative to the build directory.
- """
- if not self.header or not self.compile_headers:
- return []
- return [
- (self._Gch('c', arch), '-x c-header', 'c', self.header),
- (self._Gch('cc', arch), '-x c++-header', 'cc', self.header),
- (self._Gch('m', arch), '-x objective-c-header', 'm', self.header),
- (self._Gch('mm', arch), '-x objective-c++-header', 'mm', self.header),
- ]
-
-
-def XcodeVersion():
- """Returns a tuple of version and build version of installed Xcode."""
- # `xcodebuild -version` output looks like
- # Xcode 4.6.3
- # Build version 4H1503
- # or like
- # Xcode 3.2.6
- # Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0
- # BuildVersion: 10M2518
- # Convert that to '0463', '4H1503'.
- global XCODE_VERSION_CACHE
- if XCODE_VERSION_CACHE:
- return XCODE_VERSION_CACHE
- try:
- version_list = GetStdoutQuiet(['xcodebuild', '-version']).splitlines()
- # In some circumstances xcodebuild exits 0 but doesn't return
- # the right results; for example, a user on 10.7 or 10.8 with
- # a bogus path set via xcode-select
- # In that case this may be a CLT-only install so fall back to
- # checking that version.
- if len(version_list) < 2:
- raise GypError("xcodebuild returned unexpected results")
- except:
- version = CLTVersion()
- if version:
- version = re.match(r'(\d+\.\d+\.?\d*)', version).groups()[0]
- else:
- raise GypError("No Xcode or CLT version detected!")
- # The CLT has no build information, so we return an empty string.
- version_list = [version, '']
- version = version_list[0]
- build = version_list[-1]
- # Be careful to convert "4.2" to "0420":
- version = version.split()[-1].replace('.', '')
- version = (version + '0' * (3 - len(version))).zfill(4)
- if build:
- build = build.split()[-1]
- XCODE_VERSION_CACHE = (version, build)
- return XCODE_VERSION_CACHE
-
-
-# This function ported from the logic in Homebrew's CLT version check
-def CLTVersion():
- """Returns the version of command-line tools from pkgutil."""
- # pkgutil output looks like
- # package-id: com.apple.pkg.CLTools_Executables
- # version: 5.0.1.0.1.1382131676
- # volume: /
- # location: /
- # install-time: 1382544035
- # groups: com.apple.FindSystemFiles.pkg-group com.apple.DevToolsBoth.pkg-group com.apple.DevToolsNonRelocatableShared.pkg-group
- STANDALONE_PKG_ID = "com.apple.pkg.DeveloperToolsCLILeo"
- FROM_XCODE_PKG_ID = "com.apple.pkg.DeveloperToolsCLI"
- MAVERICKS_PKG_ID = "com.apple.pkg.CLTools_Executables"
-
- regex = re.compile('version: (?P<version>.+)')
- for key in [MAVERICKS_PKG_ID, STANDALONE_PKG_ID, FROM_XCODE_PKG_ID]:
- try:
- output = GetStdout(['/usr/sbin/pkgutil', '--pkg-info', key])
- return re.search(regex, output).groupdict()['version']
- except:
- continue
-
-
-def GetStdoutQuiet(cmdlist):
- """Returns the content of standard output returned by invoking |cmdlist|.
- Ignores the stderr.
- Raises |GypError| if the command return with a non-zero return code."""
- job = subprocess.Popen(cmdlist, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out = job.communicate()[0]
- if job.returncode != 0:
- raise GypError('Error %d running %s' % (job.returncode, cmdlist[0]))
- return out.rstrip('\n')
-
-
-def GetStdout(cmdlist):
- """Returns the content of standard output returned by invoking |cmdlist|.
- Raises |GypError| if the command return with a non-zero return code."""
- job = subprocess.Popen(cmdlist, stdout=subprocess.PIPE)
- out = job.communicate()[0]
- if job.returncode != 0:
- sys.stderr.write(out + '\n')
- raise GypError('Error %d running %s' % (job.returncode, cmdlist[0]))
- return out.rstrip('\n')
-
-
-def MergeGlobalXcodeSettingsToSpec(global_dict, spec):
- """Merges the global xcode_settings dictionary into each configuration of the
- target represented by spec. For keys that are both in the global and the local
- xcode_settings dict, the local key gets precendence.
- """
- # The xcode generator special-cases global xcode_settings and does something
- # that amounts to merging in the global xcode_settings into each local
- # xcode_settings dict.
- global_xcode_settings = global_dict.get('xcode_settings', {})
- for config in spec['configurations'].values():
- if 'xcode_settings' in config:
- new_settings = global_xcode_settings.copy()
- new_settings.update(config['xcode_settings'])
- config['xcode_settings'] = new_settings
-
-
-def IsMacBundle(flavor, spec):
- """Returns if |spec| should be treated as a bundle.
-
- Bundles are directories with a certain subdirectory structure, instead of
- just a single file. Bundle rules do not produce a binary but also package
- resources into that directory."""
- is_mac_bundle = (int(spec.get('mac_bundle', 0)) != 0 and flavor == 'mac')
- if is_mac_bundle:
- assert spec['type'] != 'none', (
- 'mac_bundle targets cannot have type none (target "%s")' %
- spec['target_name'])
- return is_mac_bundle
-
-
-def GetMacBundleResources(product_dir, xcode_settings, resources):
- """Yields (output, resource) pairs for every resource in |resources|.
- Only call this for mac bundle targets.
-
- Args:
- product_dir: Path to the directory containing the output bundle,
- relative to the build directory.
- xcode_settings: The XcodeSettings of the current target.
- resources: A list of bundle resources, relative to the build directory.
- """
- dest = os.path.join(product_dir,
- xcode_settings.GetBundleResourceFolder())
- for res in resources:
- output = dest
-
- # The make generator doesn't support it, so forbid it everywhere
- # to keep the generators more interchangable.
- assert ' ' not in res, (
- "Spaces in resource filenames not supported (%s)" % res)
-
- # Split into (path,file).
- res_parts = os.path.split(res)
-
- # Now split the path into (prefix,maybe.lproj).
- lproj_parts = os.path.split(res_parts[0])
- # If the resource lives in a .lproj bundle, add that to the destination.
- if lproj_parts[1].endswith('.lproj'):
- output = os.path.join(output, lproj_parts[1])
-
- output = os.path.join(output, res_parts[1])
- # Compiled XIB files are referred to by .nib.
- if output.endswith('.xib'):
- output = os.path.splitext(output)[0] + '.nib'
- # Compiled storyboard files are referred to by .storyboardc.
- if output.endswith('.storyboard'):
- output = os.path.splitext(output)[0] + '.storyboardc'
-
- yield output, res
-
-
-def GetMacInfoPlist(product_dir, xcode_settings, gyp_path_to_build_path):
- """Returns (info_plist, dest_plist, defines, extra_env), where:
- * |info_plist| is the source plist path, relative to the
- build directory,
- * |dest_plist| is the destination plist path, relative to the
- build directory,
- * |defines| is a list of preprocessor defines (empty if the plist
- shouldn't be preprocessed,
- * |extra_env| is a dict of env variables that should be exported when
- invoking |mac_tool copy-info-plist|.
-
- Only call this for mac bundle targets.
-
- Args:
- product_dir: Path to the directory containing the output bundle,
- relative to the build directory.
- xcode_settings: The XcodeSettings of the current target.
- gyp_to_build_path: A function that converts paths relative to the
- current gyp file to paths relative to the build direcotry.
- """
- info_plist = xcode_settings.GetPerTargetSetting('INFOPLIST_FILE')
- if not info_plist:
- return None, None, [], {}
-
- # The make generator doesn't support it, so forbid it everywhere
- # to keep the generators more interchangable.
- assert ' ' not in info_plist, (
- "Spaces in Info.plist filenames not supported (%s)" % info_plist)
-
- info_plist = gyp_path_to_build_path(info_plist)
-
- # If explicitly set to preprocess the plist, invoke the C preprocessor and
- # specify any defines as -D flags.
- if xcode_settings.GetPerTargetSetting(
- 'INFOPLIST_PREPROCESS', default='NO') == 'YES':
- # Create an intermediate file based on the path.
- defines = shlex.split(xcode_settings.GetPerTargetSetting(
- 'INFOPLIST_PREPROCESSOR_DEFINITIONS', default=''))
- else:
- defines = []
-
- dest_plist = os.path.join(product_dir, xcode_settings.GetBundlePlistPath())
- extra_env = xcode_settings.GetPerTargetSettings()
-
- return info_plist, dest_plist, defines, extra_env
-
-
-def _GetXcodeEnv(xcode_settings, built_products_dir, srcroot, configuration,
- additional_settings=None):
- """Return the environment variables that Xcode would set. See
- http://developer.apple.com/library/mac/#documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html#//apple_ref/doc/uid/TP40003931-CH3-SW153
- for a full list.
-
- Args:
- xcode_settings: An XcodeSettings object. If this is None, this function
- returns an empty dict.
- built_products_dir: Absolute path to the built products dir.
- srcroot: Absolute path to the source root.
- configuration: The build configuration name.
- additional_settings: An optional dict with more values to add to the
- result.
- """
- if not xcode_settings: return {}
-
- # This function is considered a friend of XcodeSettings, so let it reach into
- # its implementation details.
- spec = xcode_settings.spec
-
- # These are filled in on a as-needed basis.
- env = {
- 'BUILT_FRAMEWORKS_DIR' : built_products_dir,
- 'BUILT_PRODUCTS_DIR' : built_products_dir,
- 'CONFIGURATION' : configuration,
- 'PRODUCT_NAME' : xcode_settings.GetProductName(),
- # See /Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX\ Product\ Types.xcspec for FULL_PRODUCT_NAME
- 'SRCROOT' : srcroot,
- 'SOURCE_ROOT': '${SRCROOT}',
- # This is not true for static libraries, but currently the env is only
- # written for bundles:
- 'TARGET_BUILD_DIR' : built_products_dir,
- 'TEMP_DIR' : '${TMPDIR}',
- }
- if xcode_settings.GetPerConfigSetting('SDKROOT', configuration):
- env['SDKROOT'] = xcode_settings._SdkPath(configuration)
- else:
- env['SDKROOT'] = ''
-
- if spec['type'] in (
- 'executable', 'static_library', 'shared_library', 'loadable_module'):
- env['EXECUTABLE_NAME'] = xcode_settings.GetExecutableName()
- env['EXECUTABLE_PATH'] = xcode_settings.GetExecutablePath()
- env['FULL_PRODUCT_NAME'] = xcode_settings.GetFullProductName()
- mach_o_type = xcode_settings.GetMachOType()
- if mach_o_type:
- env['MACH_O_TYPE'] = mach_o_type
- env['PRODUCT_TYPE'] = xcode_settings.GetProductType()
- if xcode_settings._IsBundle():
- env['CONTENTS_FOLDER_PATH'] = \
- xcode_settings.GetBundleContentsFolderPath()
- env['UNLOCALIZED_RESOURCES_FOLDER_PATH'] = \
- xcode_settings.GetBundleResourceFolder()
- env['INFOPLIST_PATH'] = xcode_settings.GetBundlePlistPath()
- env['WRAPPER_NAME'] = xcode_settings.GetWrapperName()
-
- install_name = xcode_settings.GetInstallName()
- if install_name:
- env['LD_DYLIB_INSTALL_NAME'] = install_name
- install_name_base = xcode_settings.GetInstallNameBase()
- if install_name_base:
- env['DYLIB_INSTALL_NAME_BASE'] = install_name_base
- if XcodeVersion() >= '0500' and not env.get('SDKROOT'):
- sdk_root = xcode_settings._SdkRoot(configuration)
- if not sdk_root:
- sdk_root = xcode_settings._XcodeSdkPath('')
- if sdk_root is None:
- sdk_root = ''
- env['SDKROOT'] = sdk_root
-
- if not additional_settings:
- additional_settings = {}
- else:
- # Flatten lists to strings.
- for k in additional_settings:
- if not isinstance(additional_settings[k], str):
- additional_settings[k] = ' '.join(additional_settings[k])
- additional_settings.update(env)
-
- for k in additional_settings:
- additional_settings[k] = _NormalizeEnvVarReferences(additional_settings[k])
-
- return additional_settings
-
-
-def _NormalizeEnvVarReferences(str):
- """Takes a string containing variable references in the form ${FOO}, $(FOO),
- or $FOO, and returns a string with all variable references in the form ${FOO}.
- """
- # $FOO -> ${FOO}
- str = re.sub(r'\$([a-zA-Z_][a-zA-Z0-9_]*)', r'${\1}', str)
-
- # $(FOO) -> ${FOO}
- matches = re.findall(r'(\$\(([a-zA-Z0-9\-_]+)\))', str)
- for match in matches:
- to_replace, variable = match
- assert '$(' not in match, '$($(FOO)) variables not supported: ' + match
- str = str.replace(to_replace, '${' + variable + '}')
-
- return str
-
-
-def ExpandEnvVars(string, expansions):
- """Expands ${VARIABLES}, $(VARIABLES), and $VARIABLES in string per the
- expansions list. If the variable expands to something that references
- another variable, this variable is expanded as well if it's in env --
- until no variables present in env are left."""
- for k, v in reversed(expansions):
- string = string.replace('${' + k + '}', v)
- string = string.replace('$(' + k + ')', v)
- string = string.replace('$' + k, v)
- return string
-
-
-def _TopologicallySortedEnvVarKeys(env):
- """Takes a dict |env| whose values are strings that can refer to other keys,
- for example env['foo'] = '$(bar) and $(baz)'. Returns a list L of all keys of
- env such that key2 is after key1 in L if env[key2] refers to env[key1].
-
- Throws an Exception in case of dependency cycles.
- """
- # Since environment variables can refer to other variables, the evaluation
- # order is important. Below is the logic to compute the dependency graph
- # and sort it.
- regex = re.compile(r'\$\{([a-zA-Z0-9\-_]+)\}')
- def GetEdges(node):
- # Use a definition of edges such that user_of_variable -> used_varible.
- # This happens to be easier in this case, since a variable's
- # definition contains all variables it references in a single string.
- # We can then reverse the result of the topological sort at the end.
- # Since: reverse(topsort(DAG)) = topsort(reverse_edges(DAG))
- matches = set([v for v in regex.findall(env[node]) if v in env])
- for dependee in matches:
- assert '${' not in dependee, 'Nested variables not supported: ' + dependee
- return matches
-
- try:
- # Topologically sort, and then reverse, because we used an edge definition
- # that's inverted from the expected result of this function (see comment
- # above).
- order = gyp.common.TopologicallySorted(env.keys(), GetEdges)
- order.reverse()
- return order
- except gyp.common.CycleError, e:
- raise GypError(
- 'Xcode environment variables are cyclically dependent: ' + str(e.nodes))
-
-
-def GetSortedXcodeEnv(xcode_settings, built_products_dir, srcroot,
- configuration, additional_settings=None):
- env = _GetXcodeEnv(xcode_settings, built_products_dir, srcroot, configuration,
- additional_settings)
- return [(key, env[key]) for key in _TopologicallySortedEnvVarKeys(env)]
-
-
-def GetSpecPostbuildCommands(spec, quiet=False):
- """Returns the list of postbuilds explicitly defined on |spec|, in a form
- executable by a shell."""
- postbuilds = []
- for postbuild in spec.get('postbuilds', []):
- if not quiet:
- postbuilds.append('echo POSTBUILD\\(%s\\) %s' % (
- spec['target_name'], postbuild['postbuild_name']))
- postbuilds.append(gyp.common.EncodePOSIXShellList(postbuild['action']))
- return postbuilds
-
-
-def _HasIOSTarget(targets):
- """Returns true if any target contains the iOS specific key
- IPHONEOS_DEPLOYMENT_TARGET."""
- for target_dict in targets.values():
- for config in target_dict['configurations'].values():
- if config.get('xcode_settings', {}).get('IPHONEOS_DEPLOYMENT_TARGET'):
- return True
- return False
-
-
-def _AddIOSDeviceConfigurations(targets):
- """Clone all targets and append -iphoneos to the name. Configure these targets
- to build for iOS devices and use correct architectures for those builds."""
- for target_dict in targets.itervalues():
- toolset = target_dict['toolset']
- configs = target_dict['configurations']
- for config_name, config_dict in dict(configs).iteritems():
- iphoneos_config_dict = copy.deepcopy(config_dict)
- configs[config_name + '-iphoneos'] = iphoneos_config_dict
- configs[config_name + '-iphonesimulator'] = config_dict
- if toolset == 'target':
- iphoneos_config_dict['xcode_settings']['SDKROOT'] = 'iphoneos'
- return targets
-
-def CloneConfigurationForDeviceAndEmulator(target_dicts):
- """If |target_dicts| contains any iOS targets, automatically create -iphoneos
- targets for iOS device builds."""
- if _HasIOSTarget(target_dicts):
- return _AddIOSDeviceConfigurations(target_dicts)
- return target_dicts
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.pyc b/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.pyc
deleted file mode 100644
index a1c3ad7..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.pyc
+++ /dev/null
Binary files differ
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py b/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
deleted file mode 100644
index 3820d6b..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
+++ /dev/null
@@ -1,270 +0,0 @@
-# Copyright (c) 2014 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Xcode-ninja wrapper project file generator.
-
-This updates the data structures passed to the Xcode gyp generator to build
-with ninja instead. The Xcode project itself is transformed into a list of
-executable targets, each with a build step to build with ninja, and a target
-with every source and resource file. This appears to sidestep some of the
-major performance headaches experienced using complex projects and large number
-of targets within Xcode.
-"""
-
-import errno
-import gyp.generator.ninja
-import os
-import re
-import xml.sax.saxutils
-
-
-def _WriteWorkspace(main_gyp, sources_gyp, params):
- """ Create a workspace to wrap main and sources gyp paths. """
- (build_file_root, build_file_ext) = os.path.splitext(main_gyp)
- workspace_path = build_file_root + '.xcworkspace'
- options = params['options']
- if options.generator_output:
- workspace_path = os.path.join(options.generator_output, workspace_path)
- try:
- os.makedirs(workspace_path)
- except OSError, e:
- if e.errno != errno.EEXIST:
- raise
- output_string = '<?xml version="1.0" encoding="UTF-8"?>\n' + \
- '<Workspace version = "1.0">\n'
- for gyp_name in [main_gyp, sources_gyp]:
- name = os.path.splitext(os.path.basename(gyp_name))[0] + '.xcodeproj'
- name = xml.sax.saxutils.quoteattr("group:" + name)
- output_string += ' <FileRef location = %s></FileRef>\n' % name
- output_string += '</Workspace>\n'
-
- workspace_file = os.path.join(workspace_path, "contents.xcworkspacedata")
-
- try:
- with open(workspace_file, 'r') as input_file:
- input_string = input_file.read()
- if input_string == output_string:
- return
- except IOError:
- # Ignore errors if the file doesn't exist.
- pass
-
- with open(workspace_file, 'w') as output_file:
- output_file.write(output_string)
-
-def _TargetFromSpec(old_spec, params):
- """ Create fake target for xcode-ninja wrapper. """
- # Determine ninja top level build dir (e.g. /path/to/out).
- ninja_toplevel = None
- jobs = 0
- if params:
- options = params['options']
- ninja_toplevel = \
- os.path.join(options.toplevel_dir,
- gyp.generator.ninja.ComputeOutputDir(params))
- jobs = params.get('generator_flags', {}).get('xcode_ninja_jobs', 0)
-
- target_name = old_spec.get('target_name')
- product_name = old_spec.get('product_name', target_name)
- product_extension = old_spec.get('product_extension')
-
- ninja_target = {}
- ninja_target['target_name'] = target_name
- ninja_target['product_name'] = product_name
- if product_extension:
- ninja_target['product_extension'] = product_extension
- ninja_target['toolset'] = old_spec.get('toolset')
- ninja_target['default_configuration'] = old_spec.get('default_configuration')
- ninja_target['configurations'] = {}
-
- # Tell Xcode to look in |ninja_toplevel| for build products.
- new_xcode_settings = {}
- if ninja_toplevel:
- new_xcode_settings['CONFIGURATION_BUILD_DIR'] = \
- "%s/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)" % ninja_toplevel
-
- if 'configurations' in old_spec:
- for config in old_spec['configurations'].iterkeys():
- old_xcode_settings = \
- old_spec['configurations'][config].get('xcode_settings', {})
- if 'IPHONEOS_DEPLOYMENT_TARGET' in old_xcode_settings:
- new_xcode_settings['CODE_SIGNING_REQUIRED'] = "NO"
- new_xcode_settings['IPHONEOS_DEPLOYMENT_TARGET'] = \
- old_xcode_settings['IPHONEOS_DEPLOYMENT_TARGET']
- ninja_target['configurations'][config] = {}
- ninja_target['configurations'][config]['xcode_settings'] = \
- new_xcode_settings
-
- ninja_target['mac_bundle'] = old_spec.get('mac_bundle', 0)
- ninja_target['ios_app_extension'] = old_spec.get('ios_app_extension', 0)
- ninja_target['ios_watchkit_extension'] = \
- old_spec.get('ios_watchkit_extension', 0)
- ninja_target['ios_watchkit_app'] = old_spec.get('ios_watchkit_app', 0)
- ninja_target['type'] = old_spec['type']
- if ninja_toplevel:
- ninja_target['actions'] = [
- {
- 'action_name': 'Compile and copy %s via ninja' % target_name,
- 'inputs': [],
- 'outputs': [],
- 'action': [
- 'env',
- 'PATH=%s' % os.environ['PATH'],
- 'ninja',
- '-C',
- new_xcode_settings['CONFIGURATION_BUILD_DIR'],
- target_name,
- ],
- 'message': 'Compile and copy %s via ninja' % target_name,
- },
- ]
- if jobs > 0:
- ninja_target['actions'][0]['action'].extend(('-j', jobs))
- return ninja_target
-
-def IsValidTargetForWrapper(target_extras, executable_target_pattern, spec):
- """Limit targets for Xcode wrapper.
-
- Xcode sometimes performs poorly with too many targets, so only include
- proper executable targets, with filters to customize.
- Arguments:
- target_extras: Regular expression to always add, matching any target.
- executable_target_pattern: Regular expression limiting executable targets.
- spec: Specifications for target.
- """
- target_name = spec.get('target_name')
- # Always include targets matching target_extras.
- if target_extras is not None and re.search(target_extras, target_name):
- return True
-
- # Otherwise just show executable targets.
- if spec.get('type', '') == 'executable' and \
- spec.get('product_extension', '') != 'bundle':
-
- # If there is a filter and the target does not match, exclude the target.
- if executable_target_pattern is not None:
- if not re.search(executable_target_pattern, target_name):
- return False
- return True
- return False
-
-def CreateWrapper(target_list, target_dicts, data, params):
- """Initialize targets for the ninja wrapper.
-
- This sets up the necessary variables in the targets to generate Xcode projects
- that use ninja as an external builder.
- Arguments:
- target_list: List of target pairs: 'base/base.gyp:base'.
- target_dicts: Dict of target properties keyed on target pair.
- data: Dict of flattened build files keyed on gyp path.
- params: Dict of global options for gyp.
- """
- orig_gyp = params['build_files'][0]
- for gyp_name, gyp_dict in data.iteritems():
- if gyp_name == orig_gyp:
- depth = gyp_dict['_DEPTH']
-
- # Check for custom main gyp name, otherwise use the default CHROMIUM_GYP_FILE
- # and prepend .ninja before the .gyp extension.
- generator_flags = params.get('generator_flags', {})
- main_gyp = generator_flags.get('xcode_ninja_main_gyp', None)
- if main_gyp is None:
- (build_file_root, build_file_ext) = os.path.splitext(orig_gyp)
- main_gyp = build_file_root + ".ninja" + build_file_ext
-
- # Create new |target_list|, |target_dicts| and |data| data structures.
- new_target_list = []
- new_target_dicts = {}
- new_data = {}
-
- # Set base keys needed for |data|.
- new_data[main_gyp] = {}
- new_data[main_gyp]['included_files'] = []
- new_data[main_gyp]['targets'] = []
- new_data[main_gyp]['xcode_settings'] = \
- data[orig_gyp].get('xcode_settings', {})
-
- # Normally the xcode-ninja generator includes only valid executable targets.
- # If |xcode_ninja_executable_target_pattern| is set, that list is reduced to
- # executable targets that match the pattern. (Default all)
- executable_target_pattern = \
- generator_flags.get('xcode_ninja_executable_target_pattern', None)
-
- # For including other non-executable targets, add the matching target name
- # to the |xcode_ninja_target_pattern| regular expression. (Default none)
- target_extras = generator_flags.get('xcode_ninja_target_pattern', None)
-
- for old_qualified_target in target_list:
- spec = target_dicts[old_qualified_target]
- if IsValidTargetForWrapper(target_extras, executable_target_pattern, spec):
- # Add to new_target_list.
- target_name = spec.get('target_name')
- new_target_name = '%s:%s#target' % (main_gyp, target_name)
- new_target_list.append(new_target_name)
-
- # Add to new_target_dicts.
- new_target_dicts[new_target_name] = _TargetFromSpec(spec, params)
-
- # Add to new_data.
- for old_target in data[old_qualified_target.split(':')[0]]['targets']:
- if old_target['target_name'] == target_name:
- new_data_target = {}
- new_data_target['target_name'] = old_target['target_name']
- new_data_target['toolset'] = old_target['toolset']
- new_data[main_gyp]['targets'].append(new_data_target)
-
- # Create sources target.
- sources_target_name = 'sources_for_indexing'
- sources_target = _TargetFromSpec(
- { 'target_name' : sources_target_name,
- 'toolset': 'target',
- 'default_configuration': 'Default',
- 'mac_bundle': '0',
- 'type': 'executable'
- }, None)
-
- # Tell Xcode to look everywhere for headers.
- sources_target['configurations'] = {'Default': { 'include_dirs': [ depth ] } }
-
- sources = []
- for target, target_dict in target_dicts.iteritems():
- base = os.path.dirname(target)
- files = target_dict.get('sources', []) + \
- target_dict.get('mac_bundle_resources', [])
- for action in target_dict.get('actions', []):
- files.extend(action.get('inputs', []))
- # Remove files starting with $. These are mostly intermediate files for the
- # build system.
- files = [ file for file in files if not file.startswith('$')]
-
- # Make sources relative to root build file.
- relative_path = os.path.dirname(main_gyp)
- sources += [ os.path.relpath(os.path.join(base, file), relative_path)
- for file in files ]
-
- sources_target['sources'] = sorted(set(sources))
-
- # Put sources_to_index in it's own gyp.
- sources_gyp = \
- os.path.join(os.path.dirname(main_gyp), sources_target_name + ".gyp")
- fully_qualified_target_name = \
- '%s:%s#target' % (sources_gyp, sources_target_name)
-
- # Add to new_target_list, new_target_dicts and new_data.
- new_target_list.append(fully_qualified_target_name)
- new_target_dicts[fully_qualified_target_name] = sources_target
- new_data_target = {}
- new_data_target['target_name'] = sources_target['target_name']
- new_data_target['_DEPTH'] = depth
- new_data_target['toolset'] = "target"
- new_data[sources_gyp] = {}
- new_data[sources_gyp]['targets'] = []
- new_data[sources_gyp]['included_files'] = []
- new_data[sources_gyp]['xcode_settings'] = \
- data[orig_gyp].get('xcode_settings', {})
- new_data[sources_gyp]['targets'].append(new_data_target)
-
- # Write workspace to file.
- _WriteWorkspace(main_gyp, sources_gyp, params)
- return (new_target_list, new_target_dicts, new_data)
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py b/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
deleted file mode 100644
index d08b7f7..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
+++ /dev/null
@@ -1,2927 +0,0 @@
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Xcode project file generator.
-
-This module is both an Xcode project file generator and a documentation of the
-Xcode project file format. Knowledge of the project file format was gained
-based on extensive experience with Xcode, and by making changes to projects in
-Xcode.app and observing the resultant changes in the associated project files.
-
-XCODE PROJECT FILES
-
-The generator targets the file format as written by Xcode 3.2 (specifically,
-3.2.6), but past experience has taught that the format has not changed
-significantly in the past several years, and future versions of Xcode are able
-to read older project files.
-
-Xcode project files are "bundled": the project "file" from an end-user's
-perspective is actually a directory with an ".xcodeproj" extension. The
-project file from this module's perspective is actually a file inside this
-directory, always named "project.pbxproj". This file contains a complete
-description of the project and is all that is needed to use the xcodeproj.
-Other files contained in the xcodeproj directory are simply used to store
-per-user settings, such as the state of various UI elements in the Xcode
-application.
-
-The project.pbxproj file is a property list, stored in a format almost
-identical to the NeXTstep property list format. The file is able to carry
-Unicode data, and is encoded in UTF-8. The root element in the property list
-is a dictionary that contains several properties of minimal interest, and two
-properties of immense interest. The most important property is a dictionary
-named "objects". The entire structure of the project is represented by the
-children of this property. The objects dictionary is keyed by unique 96-bit
-values represented by 24 uppercase hexadecimal characters. Each value in the
-objects dictionary is itself a dictionary, describing an individual object.
-
-Each object in the dictionary is a member of a class, which is identified by
-the "isa" property of each object. A variety of classes are represented in a
-project file. Objects can refer to other objects by ID, using the 24-character
-hexadecimal object key. A project's objects form a tree, with a root object
-of class PBXProject at the root. As an example, the PBXProject object serves
-as parent to an XCConfigurationList object defining the build configurations
-used in the project, a PBXGroup object serving as a container for all files
-referenced in the project, and a list of target objects, each of which defines
-a target in the project. There are several different types of target object,
-such as PBXNativeTarget and PBXAggregateTarget. In this module, this
-relationship is expressed by having each target type derive from an abstract
-base named XCTarget.
-
-The project.pbxproj file's root dictionary also contains a property, sibling to
-the "objects" dictionary, named "rootObject". The value of rootObject is a
-24-character object key referring to the root PBXProject object in the
-objects dictionary.
-
-In Xcode, every file used as input to a target or produced as a final product
-of a target must appear somewhere in the hierarchy rooted at the PBXGroup
-object referenced by the PBXProject's mainGroup property. A PBXGroup is
-generally represented as a folder in the Xcode application. PBXGroups can
-contain other PBXGroups as well as PBXFileReferences, which are pointers to
-actual files.
-
-Each XCTarget contains a list of build phases, represented in this module by
-the abstract base XCBuildPhase. Examples of concrete XCBuildPhase derivations
-are PBXSourcesBuildPhase and PBXFrameworksBuildPhase, which correspond to the
-"Compile Sources" and "Link Binary With Libraries" phases displayed in the
-Xcode application. Files used as input to these phases (for example, source
-files in the former case and libraries and frameworks in the latter) are
-represented by PBXBuildFile objects, referenced by elements of "files" lists
-in XCTarget objects. Each PBXBuildFile object refers to a PBXBuildFile
-object as a "weak" reference: it does not "own" the PBXBuildFile, which is
-owned by the root object's mainGroup or a descendant group. In most cases, the
-layer of indirection between an XCBuildPhase and a PBXFileReference via a
-PBXBuildFile appears extraneous, but there's actually one reason for this:
-file-specific compiler flags are added to the PBXBuildFile object so as to
-allow a single file to be a member of multiple targets while having distinct
-compiler flags for each. These flags can be modified in the Xcode applciation
-in the "Build" tab of a File Info window.
-
-When a project is open in the Xcode application, Xcode will rewrite it. As
-such, this module is careful to adhere to the formatting used by Xcode, to
-avoid insignificant changes appearing in the file when it is used in the
-Xcode application. This will keep version control repositories happy, and
-makes it possible to compare a project file used in Xcode to one generated by
-this module to determine if any significant changes were made in the
-application.
-
-Xcode has its own way of assigning 24-character identifiers to each object,
-which is not duplicated here. Because the identifier only is only generated
-once, when an object is created, and is then left unchanged, there is no need
-to attempt to duplicate Xcode's behavior in this area. The generator is free
-to select any identifier, even at random, to refer to the objects it creates,
-and Xcode will retain those identifiers and use them when subsequently
-rewriting the project file. However, the generator would choose new random
-identifiers each time the project files are generated, leading to difficulties
-comparing "used" project files to "pristine" ones produced by this module,
-and causing the appearance of changes as every object identifier is changed
-when updated projects are checked in to a version control repository. To
-mitigate this problem, this module chooses identifiers in a more deterministic
-way, by hashing a description of each object as well as its parent and ancestor
-objects. This strategy should result in minimal "shift" in IDs as successive
-generations of project files are produced.
-
-THIS MODULE
-
-This module introduces several classes, all derived from the XCObject class.
-Nearly all of the "brains" are built into the XCObject class, which understands
-how to create and modify objects, maintain the proper tree structure, compute
-identifiers, and print objects. For the most part, classes derived from
-XCObject need only provide a _schema class object, a dictionary that
-expresses what properties objects of the class may contain.
-
-Given this structure, it's possible to build a minimal project file by creating
-objects of the appropriate types and making the proper connections:
-
- config_list = XCConfigurationList()
- group = PBXGroup()
- project = PBXProject({'buildConfigurationList': config_list,
- 'mainGroup': group})
-
-With the project object set up, it can be added to an XCProjectFile object.
-XCProjectFile is a pseudo-class in the sense that it is a concrete XCObject
-subclass that does not actually correspond to a class type found in a project
-file. Rather, it is used to represent the project file's root dictionary.
-Printing an XCProjectFile will print the entire project file, including the
-full "objects" dictionary.
-
- project_file = XCProjectFile({'rootObject': project})
- project_file.ComputeIDs()
- project_file.Print()
-
-Xcode project files are always encoded in UTF-8. This module will accept
-strings of either the str class or the unicode class. Strings of class str
-are assumed to already be encoded in UTF-8. Obviously, if you're just using
-ASCII, you won't encounter difficulties because ASCII is a UTF-8 subset.
-Strings of class unicode are handled properly and encoded in UTF-8 when
-a project file is output.
-"""
-
-import gyp.common
-import posixpath
-import re
-import struct
-import sys
-
-# hashlib is supplied as of Python 2.5 as the replacement interface for sha
-# and other secure hashes. In 2.6, sha is deprecated. Import hashlib if
-# available, avoiding a deprecation warning under 2.6. Import sha otherwise,
-# preserving 2.4 compatibility.
-try:
- import hashlib
- _new_sha1 = hashlib.sha1
-except ImportError:
- import sha
- _new_sha1 = sha.new
-
-
-# See XCObject._EncodeString. This pattern is used to determine when a string
-# can be printed unquoted. Strings that match this pattern may be printed
-# unquoted. Strings that do not match must be quoted and may be further
-# transformed to be properly encoded. Note that this expression matches the
-# characters listed with "+", for 1 or more occurrences: if a string is empty,
-# it must not match this pattern, because it needs to be encoded as "".
-_unquoted = re.compile('^[A-Za-z0-9$./_]+$')
-
-# Strings that match this pattern are quoted regardless of what _unquoted says.
-# Oddly, Xcode will quote any string with a run of three or more underscores.
-_quoted = re.compile('___')
-
-# This pattern should match any character that needs to be escaped by
-# XCObject._EncodeString. See that function.
-_escaped = re.compile('[\\\\"]|[\x00-\x1f]')
-
-
-# Used by SourceTreeAndPathFromPath
-_path_leading_variable = re.compile(r'^\$\((.*?)\)(/(.*))?$')
-
-def SourceTreeAndPathFromPath(input_path):
- """Given input_path, returns a tuple with sourceTree and path values.
-
- Examples:
- input_path (source_tree, output_path)
- '$(VAR)/path' ('VAR', 'path')
- '$(VAR)' ('VAR', None)
- 'path' (None, 'path')
- """
-
- source_group_match = _path_leading_variable.match(input_path)
- if source_group_match:
- source_tree = source_group_match.group(1)
- output_path = source_group_match.group(3) # This may be None.
- else:
- source_tree = None
- output_path = input_path
-
- return (source_tree, output_path)
-
-def ConvertVariablesToShellSyntax(input_string):
- return re.sub(r'\$\((.*?)\)', '${\\1}', input_string)
-
-class XCObject(object):
- """The abstract base of all class types used in Xcode project files.
-
- Class variables:
- _schema: A dictionary defining the properties of this class. The keys to
- _schema are string property keys as used in project files. Values
- are a list of four or five elements:
- [ is_list, property_type, is_strong, is_required, default ]
- is_list: True if the property described is a list, as opposed
- to a single element.
- property_type: The type to use as the value of the property,
- or if is_list is True, the type to use for each
- element of the value's list. property_type must
- be an XCObject subclass, or one of the built-in
- types str, int, or dict.
- is_strong: If property_type is an XCObject subclass, is_strong
- is True to assert that this class "owns," or serves
- as parent, to the property value (or, if is_list is
- True, values). is_strong must be False if
- property_type is not an XCObject subclass.
- is_required: True if the property is required for the class.
- Note that is_required being True does not preclude
- an empty string ("", in the case of property_type
- str) or list ([], in the case of is_list True) from
- being set for the property.
- default: Optional. If is_requried is True, default may be set
- to provide a default value for objects that do not supply
- their own value. If is_required is True and default
- is not provided, users of the class must supply their own
- value for the property.
- Note that although the values of the array are expressed in
- boolean terms, subclasses provide values as integers to conserve
- horizontal space.
- _should_print_single_line: False in XCObject. Subclasses whose objects
- should be written to the project file in the
- alternate single-line format, such as
- PBXFileReference and PBXBuildFile, should
- set this to True.
- _encode_transforms: Used by _EncodeString to encode unprintable characters.
- The index into this list is the ordinal of the
- character to transform; each value is a string
- used to represent the character in the output. XCObject
- provides an _encode_transforms list suitable for most
- XCObject subclasses.
- _alternate_encode_transforms: Provided for subclasses that wish to use
- the alternate encoding rules. Xcode seems
- to use these rules when printing objects in
- single-line format. Subclasses that desire
- this behavior should set _encode_transforms
- to _alternate_encode_transforms.
- _hashables: A list of XCObject subclasses that can be hashed by ComputeIDs
- to construct this object's ID. Most classes that need custom
- hashing behavior should do it by overriding Hashables,
- but in some cases an object's parent may wish to push a
- hashable value into its child, and it can do so by appending
- to _hashables.
- Attributes:
- id: The object's identifier, a 24-character uppercase hexadecimal string.
- Usually, objects being created should not set id until the entire
- project file structure is built. At that point, UpdateIDs() should
- be called on the root object to assign deterministic values for id to
- each object in the tree.
- parent: The object's parent. This is set by a parent XCObject when a child
- object is added to it.
- _properties: The object's property dictionary. An object's properties are
- described by its class' _schema variable.
- """
-
- _schema = {}
- _should_print_single_line = False
-
- # See _EncodeString.
- _encode_transforms = []
- i = 0
- while i < ord(' '):
- _encode_transforms.append('\\U%04x' % i)
- i = i + 1
- _encode_transforms[7] = '\\a'
- _encode_transforms[8] = '\\b'
- _encode_transforms[9] = '\\t'
- _encode_transforms[10] = '\\n'
- _encode_transforms[11] = '\\v'
- _encode_transforms[12] = '\\f'
- _encode_transforms[13] = '\\n'
-
- _alternate_encode_transforms = list(_encode_transforms)
- _alternate_encode_transforms[9] = chr(9)
- _alternate_encode_transforms[10] = chr(10)
- _alternate_encode_transforms[11] = chr(11)
-
- def __init__(self, properties=None, id=None, parent=None):
- self.id = id
- self.parent = parent
- self._properties = {}
- self._hashables = []
- self._SetDefaultsFromSchema()
- self.UpdateProperties(properties)
-
- def __repr__(self):
- try:
- name = self.Name()
- except NotImplementedError:
- return '<%s at 0x%x>' % (self.__class__.__name__, id(self))
- return '<%s %r at 0x%x>' % (self.__class__.__name__, name, id(self))
-
- def Copy(self):
- """Make a copy of this object.
-
- The new object will have its own copy of lists and dicts. Any XCObject
- objects owned by this object (marked "strong") will be copied in the
- new object, even those found in lists. If this object has any weak
- references to other XCObjects, the same references are added to the new
- object without making a copy.
- """
-
- that = self.__class__(id=self.id, parent=self.parent)
- for key, value in self._properties.iteritems():
- is_strong = self._schema[key][2]
-
- if isinstance(value, XCObject):
- if is_strong:
- new_value = value.Copy()
- new_value.parent = that
- that._properties[key] = new_value
- else:
- that._properties[key] = value
- elif isinstance(value, str) or isinstance(value, unicode) or \
- isinstance(value, int):
- that._properties[key] = value
- elif isinstance(value, list):
- if is_strong:
- # If is_strong is True, each element is an XCObject, so it's safe to
- # call Copy.
- that._properties[key] = []
- for item in value:
- new_item = item.Copy()
- new_item.parent = that
- that._properties[key].append(new_item)
- else:
- that._properties[key] = value[:]
- elif isinstance(value, dict):
- # dicts are never strong.
- if is_strong:
- raise TypeError('Strong dict for key ' + key + ' in ' + \
- self.__class__.__name__)
- else:
- that._properties[key] = value.copy()
- else:
- raise TypeError('Unexpected type ' + value.__class__.__name__ + \
- ' for key ' + key + ' in ' + self.__class__.__name__)
-
- return that
-
- def Name(self):
- """Return the name corresponding to an object.
-
- Not all objects necessarily need to be nameable, and not all that do have
- a "name" property. Override as needed.
- """
-
- # If the schema indicates that "name" is required, try to access the
- # property even if it doesn't exist. This will result in a KeyError
- # being raised for the property that should be present, which seems more
- # appropriate than NotImplementedError in this case.
- if 'name' in self._properties or \
- ('name' in self._schema and self._schema['name'][3]):
- return self._properties['name']
-
- raise NotImplementedError(self.__class__.__name__ + ' must implement Name')
-
- def Comment(self):
- """Return a comment string for the object.
-
- Most objects just use their name as the comment, but PBXProject uses
- different values.
-
- The returned comment is not escaped and does not have any comment marker
- strings applied to it.
- """
-
- return self.Name()
-
- def Hashables(self):
- hashables = [self.__class__.__name__]
-
- name = self.Name()
- if name != None:
- hashables.append(name)
-
- hashables.extend(self._hashables)
-
- return hashables
-
- def HashablesForChild(self):
- return None
-
- def ComputeIDs(self, recursive=True, overwrite=True, seed_hash=None):
- """Set "id" properties deterministically.
-
- An object's "id" property is set based on a hash of its class type and
- name, as well as the class type and name of all ancestor objects. As
- such, it is only advisable to call ComputeIDs once an entire project file
- tree is built.
-
- If recursive is True, recurse into all descendant objects and update their
- hashes.
-
- If overwrite is True, any existing value set in the "id" property will be
- replaced.
- """
-
- def _HashUpdate(hash, data):
- """Update hash with data's length and contents.
-
- If the hash were updated only with the value of data, it would be
- possible for clowns to induce collisions by manipulating the names of
- their objects. By adding the length, it's exceedingly less likely that
- ID collisions will be encountered, intentionally or not.
- """
-
- hash.update(struct.pack('>i', len(data)))
- hash.update(data)
-
- if seed_hash is None:
- seed_hash = _new_sha1()
-
- hash = seed_hash.copy()
-
- hashables = self.Hashables()
- assert len(hashables) > 0
- for hashable in hashables:
- _HashUpdate(hash, hashable)
-
- if recursive:
- hashables_for_child = self.HashablesForChild()
- if hashables_for_child is None:
- child_hash = hash
- else:
- assert len(hashables_for_child) > 0
- child_hash = seed_hash.copy()
- for hashable in hashables_for_child:
- _HashUpdate(child_hash, hashable)
-
- for child in self.Children():
- child.ComputeIDs(recursive, overwrite, child_hash)
-
- if overwrite or self.id is None:
- # Xcode IDs are only 96 bits (24 hex characters), but a SHA-1 digest is
- # is 160 bits. Instead of throwing out 64 bits of the digest, xor them
- # into the portion that gets used.
- assert hash.digest_size % 4 == 0
- digest_int_count = hash.digest_size / 4
- digest_ints = struct.unpack('>' + 'I' * digest_int_count, hash.digest())
- id_ints = [0, 0, 0]
- for index in xrange(0, digest_int_count):
- id_ints[index % 3] ^= digest_ints[index]
- self.id = '%08X%08X%08X' % tuple(id_ints)
-
- def EnsureNoIDCollisions(self):
- """Verifies that no two objects have the same ID. Checks all descendants.
- """
-
- ids = {}
- descendants = self.Descendants()
- for descendant in descendants:
- if descendant.id in ids:
- other = ids[descendant.id]
- raise KeyError(
- 'Duplicate ID %s, objects "%s" and "%s" in "%s"' % \
- (descendant.id, str(descendant._properties),
- str(other._properties), self._properties['rootObject'].Name()))
- ids[descendant.id] = descendant
-
- def Children(self):
- """Returns a list of all of this object's owned (strong) children."""
-
- children = []
- for property, attributes in self._schema.iteritems():
- (is_list, property_type, is_strong) = attributes[0:3]
- if is_strong and property in self._properties:
- if not is_list:
- children.append(self._properties[property])
- else:
- children.extend(self._properties[property])
- return children
-
- def Descendants(self):
- """Returns a list of all of this object's descendants, including this
- object.
- """
-
- children = self.Children()
- descendants = [self]
- for child in children:
- descendants.extend(child.Descendants())
- return descendants
-
- def PBXProjectAncestor(self):
- # The base case for recursion is defined at PBXProject.PBXProjectAncestor.
- if self.parent:
- return self.parent.PBXProjectAncestor()
- return None
-
- def _EncodeComment(self, comment):
- """Encodes a comment to be placed in the project file output, mimicing
- Xcode behavior.
- """
-
- # This mimics Xcode behavior by wrapping the comment in "/*" and "*/". If
- # the string already contains a "*/", it is turned into "(*)/". This keeps
- # the file writer from outputting something that would be treated as the
- # end of a comment in the middle of something intended to be entirely a
- # comment.
-
- return '/* ' + comment.replace('*/', '(*)/') + ' */'
-
- def _EncodeTransform(self, match):
- # This function works closely with _EncodeString. It will only be called
- # by re.sub with match.group(0) containing a character matched by the
- # the _escaped expression.
- char = match.group(0)
-
- # Backslashes (\) and quotation marks (") are always replaced with a
- # backslash-escaped version of the same. Everything else gets its
- # replacement from the class' _encode_transforms array.
- if char == '\\':
- return '\\\\'
- if char == '"':
- return '\\"'
- return self._encode_transforms[ord(char)]
-
- def _EncodeString(self, value):
- """Encodes a string to be placed in the project file output, mimicing
- Xcode behavior.
- """
-
- # Use quotation marks when any character outside of the range A-Z, a-z, 0-9,
- # $ (dollar sign), . (period), and _ (underscore) is present. Also use
- # quotation marks to represent empty strings.
- #
- # Escape " (double-quote) and \ (backslash) by preceding them with a
- # backslash.
- #
- # Some characters below the printable ASCII range are encoded specially:
- # 7 ^G BEL is encoded as "\a"
- # 8 ^H BS is encoded as "\b"
- # 11 ^K VT is encoded as "\v"
- # 12 ^L NP is encoded as "\f"
- # 127 ^? DEL is passed through as-is without escaping
- # - In PBXFileReference and PBXBuildFile objects:
- # 9 ^I HT is passed through as-is without escaping
- # 10 ^J NL is passed through as-is without escaping
- # 13 ^M CR is passed through as-is without escaping
- # - In other objects:
- # 9 ^I HT is encoded as "\t"
- # 10 ^J NL is encoded as "\n"
- # 13 ^M CR is encoded as "\n" rendering it indistinguishable from
- # 10 ^J NL
- # All other characters within the ASCII control character range (0 through
- # 31 inclusive) are encoded as "\U001f" referring to the Unicode code point
- # in hexadecimal. For example, character 14 (^N SO) is encoded as "\U000e".
- # Characters above the ASCII range are passed through to the output encoded
- # as UTF-8 without any escaping. These mappings are contained in the
- # class' _encode_transforms list.
-
- if _unquoted.search(value) and not _quoted.search(value):
- return value
-
- return '"' + _escaped.sub(self._EncodeTransform, value) + '"'
-
- def _XCPrint(self, file, tabs, line):
- file.write('\t' * tabs + line)
-
- def _XCPrintableValue(self, tabs, value, flatten_list=False):
- """Returns a representation of value that may be printed in a project file,
- mimicing Xcode's behavior.
-
- _XCPrintableValue can handle str and int values, XCObjects (which are
- made printable by returning their id property), and list and dict objects
- composed of any of the above types. When printing a list or dict, and
- _should_print_single_line is False, the tabs parameter is used to determine
- how much to indent the lines corresponding to the items in the list or
- dict.
-
- If flatten_list is True, single-element lists will be transformed into
- strings.
- """
-
- printable = ''
- comment = None
-
- if self._should_print_single_line:
- sep = ' '
- element_tabs = ''
- end_tabs = ''
- else:
- sep = '\n'
- element_tabs = '\t' * (tabs + 1)
- end_tabs = '\t' * tabs
-
- if isinstance(value, XCObject):
- printable += value.id
- comment = value.Comment()
- elif isinstance(value, str):
- printable += self._EncodeString(value)
- elif isinstance(value, unicode):
- printable += self._EncodeString(value.encode('utf-8'))
- elif isinstance(value, int):
- printable += str(value)
- elif isinstance(value, list):
- if flatten_list and len(value) <= 1:
- if len(value) == 0:
- printable += self._EncodeString('')
- else:
- printable += self._EncodeString(value[0])
- else:
- printable = '(' + sep
- for item in value:
- printable += element_tabs + \
- self._XCPrintableValue(tabs + 1, item, flatten_list) + \
- ',' + sep
- printable += end_tabs + ')'
- elif isinstance(value, dict):
- printable = '{' + sep
- for item_key, item_value in sorted(value.iteritems()):
- printable += element_tabs + \
- self._XCPrintableValue(tabs + 1, item_key, flatten_list) + ' = ' + \
- self._XCPrintableValue(tabs + 1, item_value, flatten_list) + ';' + \
- sep
- printable += end_tabs + '}'
- else:
- raise TypeError("Can't make " + value.__class__.__name__ + ' printable')
-
- if comment != None:
- printable += ' ' + self._EncodeComment(comment)
-
- return printable
-
- def _XCKVPrint(self, file, tabs, key, value):
- """Prints a key and value, members of an XCObject's _properties dictionary,
- to file.
-
- tabs is an int identifying the indentation level. If the class'
- _should_print_single_line variable is True, tabs is ignored and the
- key-value pair will be followed by a space insead of a newline.
- """
-
- if self._should_print_single_line:
- printable = ''
- after_kv = ' '
- else:
- printable = '\t' * tabs
- after_kv = '\n'
-
- # Xcode usually prints remoteGlobalIDString values in PBXContainerItemProxy
- # objects without comments. Sometimes it prints them with comments, but
- # the majority of the time, it doesn't. To avoid unnecessary changes to
- # the project file after Xcode opens it, don't write comments for
- # remoteGlobalIDString. This is a sucky hack and it would certainly be
- # cleaner to extend the schema to indicate whether or not a comment should
- # be printed, but since this is the only case where the problem occurs and
- # Xcode itself can't seem to make up its mind, the hack will suffice.
- #
- # Also see PBXContainerItemProxy._schema['remoteGlobalIDString'].
- if key == 'remoteGlobalIDString' and isinstance(self,
- PBXContainerItemProxy):
- value_to_print = value.id
- else:
- value_to_print = value
-
- # PBXBuildFile's settings property is represented in the output as a dict,
- # but a hack here has it represented as a string. Arrange to strip off the
- # quotes so that it shows up in the output as expected.
- if key == 'settings' and isinstance(self, PBXBuildFile):
- strip_value_quotes = True
- else:
- strip_value_quotes = False
-
- # In another one-off, let's set flatten_list on buildSettings properties
- # of XCBuildConfiguration objects, because that's how Xcode treats them.
- if key == 'buildSettings' and isinstance(self, XCBuildConfiguration):
- flatten_list = True
- else:
- flatten_list = False
-
- try:
- printable_key = self._XCPrintableValue(tabs, key, flatten_list)
- printable_value = self._XCPrintableValue(tabs, value_to_print,
- flatten_list)
- if strip_value_quotes and len(printable_value) > 1 and \
- printable_value[0] == '"' and printable_value[-1] == '"':
- printable_value = printable_value[1:-1]
- printable += printable_key + ' = ' + printable_value + ';' + after_kv
- except TypeError, e:
- gyp.common.ExceptionAppend(e,
- 'while printing key "%s"' % key)
- raise
-
- self._XCPrint(file, 0, printable)
-
- def Print(self, file=sys.stdout):
- """Prints a reprentation of this object to file, adhering to Xcode output
- formatting.
- """
-
- self.VerifyHasRequiredProperties()
-
- if self._should_print_single_line:
- # When printing an object in a single line, Xcode doesn't put any space
- # between the beginning of a dictionary (or presumably a list) and the
- # first contained item, so you wind up with snippets like
- # ...CDEF = {isa = PBXFileReference; fileRef = 0123...
- # If it were me, I would have put a space in there after the opening
- # curly, but I guess this is just another one of those inconsistencies
- # between how Xcode prints PBXFileReference and PBXBuildFile objects as
- # compared to other objects. Mimic Xcode's behavior here by using an
- # empty string for sep.
- sep = ''
- end_tabs = 0
- else:
- sep = '\n'
- end_tabs = 2
-
- # Start the object. For example, '\t\tPBXProject = {\n'.
- self._XCPrint(file, 2, self._XCPrintableValue(2, self) + ' = {' + sep)
-
- # "isa" isn't in the _properties dictionary, it's an intrinsic property
- # of the class which the object belongs to. Xcode always outputs "isa"
- # as the first element of an object dictionary.
- self._XCKVPrint(file, 3, 'isa', self.__class__.__name__)
-
- # The remaining elements of an object dictionary are sorted alphabetically.
- for property, value in sorted(self._properties.iteritems()):
- self._XCKVPrint(file, 3, property, value)
-
- # End the object.
- self._XCPrint(file, end_tabs, '};\n')
-
- def UpdateProperties(self, properties, do_copy=False):
- """Merge the supplied properties into the _properties dictionary.
-
- The input properties must adhere to the class schema or a KeyError or
- TypeError exception will be raised. If adding an object of an XCObject
- subclass and the schema indicates a strong relationship, the object's
- parent will be set to this object.
-
- If do_copy is True, then lists, dicts, strong-owned XCObjects, and
- strong-owned XCObjects in lists will be copied instead of having their
- references added.
- """
-
- if properties is None:
- return
-
- for property, value in properties.iteritems():
- # Make sure the property is in the schema.
- if not property in self._schema:
- raise KeyError(property + ' not in ' + self.__class__.__name__)
-
- # Make sure the property conforms to the schema.
- (is_list, property_type, is_strong) = self._schema[property][0:3]
- if is_list:
- if value.__class__ != list:
- raise TypeError(
- property + ' of ' + self.__class__.__name__ + \
- ' must be list, not ' + value.__class__.__name__)
- for item in value:
- if not isinstance(item, property_type) and \
- not (item.__class__ == unicode and property_type == str):
- # Accept unicode where str is specified. str is treated as
- # UTF-8-encoded.
- raise TypeError(
- 'item of ' + property + ' of ' + self.__class__.__name__ + \
- ' must be ' + property_type.__name__ + ', not ' + \
- item.__class__.__name__)
- elif not isinstance(value, property_type) and \
- not (value.__class__ == unicode and property_type == str):
- # Accept unicode where str is specified. str is treated as
- # UTF-8-encoded.
- raise TypeError(
- property + ' of ' + self.__class__.__name__ + ' must be ' + \
- property_type.__name__ + ', not ' + value.__class__.__name__)
-
- # Checks passed, perform the assignment.
- if do_copy:
- if isinstance(value, XCObject):
- if is_strong:
- self._properties[property] = value.Copy()
- else:
- self._properties[property] = value
- elif isinstance(value, str) or isinstance(value, unicode) or \
- isinstance(value, int):
- self._properties[property] = value
- elif isinstance(value, list):
- if is_strong:
- # If is_strong is True, each element is an XCObject, so it's safe
- # to call Copy.
- self._properties[property] = []
- for item in value:
- self._properties[property].append(item.Copy())
- else:
- self._properties[property] = value[:]
- elif isinstance(value, dict):
- self._properties[property] = value.copy()
- else:
- raise TypeError("Don't know how to copy a " + \
- value.__class__.__name__ + ' object for ' + \
- property + ' in ' + self.__class__.__name__)
- else:
- self._properties[property] = value
-
- # Set up the child's back-reference to this object. Don't use |value|
- # any more because it may not be right if do_copy is true.
- if is_strong:
- if not is_list:
- self._properties[property].parent = self
- else:
- for item in self._properties[property]:
- item.parent = self
-
- def HasProperty(self, key):
- return key in self._properties
-
- def GetProperty(self, key):
- return self._properties[key]
-
- def SetProperty(self, key, value):
- self.UpdateProperties({key: value})
-
- def DelProperty(self, key):
- if key in self._properties:
- del self._properties[key]
-
- def AppendProperty(self, key, value):
- # TODO(mark): Support ExtendProperty too (and make this call that)?
-
- # Schema validation.
- if not key in self._schema:
- raise KeyError(key + ' not in ' + self.__class__.__name__)
-
- (is_list, property_type, is_strong) = self._schema[key][0:3]
- if not is_list:
- raise TypeError(key + ' of ' + self.__class__.__name__ + ' must be list')
- if not isinstance(value, property_type):
- raise TypeError('item of ' + key + ' of ' + self.__class__.__name__ + \
- ' must be ' + property_type.__name__ + ', not ' + \
- value.__class__.__name__)
-
- # If the property doesn't exist yet, create a new empty list to receive the
- # item.
- if not key in self._properties:
- self._properties[key] = []
-
- # Set up the ownership link.
- if is_strong:
- value.parent = self
-
- # Store the item.
- self._properties[key].append(value)
-
- def VerifyHasRequiredProperties(self):
- """Ensure that all properties identified as required by the schema are
- set.
- """
-
- # TODO(mark): A stronger verification mechanism is needed. Some
- # subclasses need to perform validation beyond what the schema can enforce.
- for property, attributes in self._schema.iteritems():
- (is_list, property_type, is_strong, is_required) = attributes[0:4]
- if is_required and not property in self._properties:
- raise KeyError(self.__class__.__name__ + ' requires ' + property)
-
- def _SetDefaultsFromSchema(self):
- """Assign object default values according to the schema. This will not
- overwrite properties that have already been set."""
-
- defaults = {}
- for property, attributes in self._schema.iteritems():
- (is_list, property_type, is_strong, is_required) = attributes[0:4]
- if is_required and len(attributes) >= 5 and \
- not property in self._properties:
- default = attributes[4]
-
- defaults[property] = default
-
- if len(defaults) > 0:
- # Use do_copy=True so that each new object gets its own copy of strong
- # objects, lists, and dicts.
- self.UpdateProperties(defaults, do_copy=True)
-
-
-class XCHierarchicalElement(XCObject):
- """Abstract base for PBXGroup and PBXFileReference. Not represented in a
- project file."""
-
- # TODO(mark): Do name and path belong here? Probably so.
- # If path is set and name is not, name may have a default value. Name will
- # be set to the basename of path, if the basename of path is different from
- # the full value of path. If path is already just a leaf name, name will
- # not be set.
- _schema = XCObject._schema.copy()
- _schema.update({
- 'comments': [0, str, 0, 0],
- 'fileEncoding': [0, str, 0, 0],
- 'includeInIndex': [0, int, 0, 0],
- 'indentWidth': [0, int, 0, 0],
- 'lineEnding': [0, int, 0, 0],
- 'sourceTree': [0, str, 0, 1, '<group>'],
- 'tabWidth': [0, int, 0, 0],
- 'usesTabs': [0, int, 0, 0],
- 'wrapsLines': [0, int, 0, 0],
- })
-
- def __init__(self, properties=None, id=None, parent=None):
- # super
- XCObject.__init__(self, properties, id, parent)
- if 'path' in self._properties and not 'name' in self._properties:
- path = self._properties['path']
- name = posixpath.basename(path)
- if name != '' and path != name:
- self.SetProperty('name', name)
-
- if 'path' in self._properties and \
- (not 'sourceTree' in self._properties or \
- self._properties['sourceTree'] == '<group>'):
- # If the pathname begins with an Xcode variable like "$(SDKROOT)/", take
- # the variable out and make the path be relative to that variable by
- # assigning the variable name as the sourceTree.
- (source_tree, path) = SourceTreeAndPathFromPath(self._properties['path'])
- if source_tree != None:
- self._properties['sourceTree'] = source_tree
- if path != None:
- self._properties['path'] = path
- if source_tree != None and path is None and \
- not 'name' in self._properties:
- # The path was of the form "$(SDKROOT)" with no path following it.
- # This object is now relative to that variable, so it has no path
- # attribute of its own. It does, however, keep a name.
- del self._properties['path']
- self._properties['name'] = source_tree
-
- def Name(self):
- if 'name' in self._properties:
- return self._properties['name']
- elif 'path' in self._properties:
- return self._properties['path']
- else:
- # This happens in the case of the root PBXGroup.
- return None
-
- def Hashables(self):
- """Custom hashables for XCHierarchicalElements.
-
- XCHierarchicalElements are special. Generally, their hashes shouldn't
- change if the paths don't change. The normal XCObject implementation of
- Hashables adds a hashable for each object, which means that if
- the hierarchical structure changes (possibly due to changes caused when
- TakeOverOnlyChild runs and encounters slight changes in the hierarchy),
- the hashes will change. For example, if a project file initially contains
- a/b/f1 and a/b becomes collapsed into a/b, f1 will have a single parent
- a/b. If someone later adds a/f2 to the project file, a/b can no longer be
- collapsed, and f1 winds up with parent b and grandparent a. That would
- be sufficient to change f1's hash.
-
- To counteract this problem, hashables for all XCHierarchicalElements except
- for the main group (which has neither a name nor a path) are taken to be
- just the set of path components. Because hashables are inherited from
- parents, this provides assurance that a/b/f1 has the same set of hashables
- whether its parent is b or a/b.
-
- The main group is a special case. As it is permitted to have no name or
- path, it is permitted to use the standard XCObject hash mechanism. This
- is not considered a problem because there can be only one main group.
- """
-
- if self == self.PBXProjectAncestor()._properties['mainGroup']:
- # super
- return XCObject.Hashables(self)
-
- hashables = []
-
- # Put the name in first, ensuring that if TakeOverOnlyChild collapses
- # children into a top-level group like "Source", the name always goes
- # into the list of hashables without interfering with path components.
- if 'name' in self._properties:
- # Make it less likely for people to manipulate hashes by following the
- # pattern of always pushing an object type value onto the list first.
- hashables.append(self.__class__.__name__ + '.name')
- hashables.append(self._properties['name'])
-
- # NOTE: This still has the problem that if an absolute path is encountered,
- # including paths with a sourceTree, they'll still inherit their parents'
- # hashables, even though the paths aren't relative to their parents. This
- # is not expected to be much of a problem in practice.
- path = self.PathFromSourceTreeAndPath()
- if path != None:
- components = path.split(posixpath.sep)
- for component in components:
- hashables.append(self.__class__.__name__ + '.path')
- hashables.append(component)
-
- hashables.extend(self._hashables)
-
- return hashables
-
- def Compare(self, other):
- # Allow comparison of these types. PBXGroup has the highest sort rank;
- # PBXVariantGroup is treated as equal to PBXFileReference.
- valid_class_types = {
- PBXFileReference: 'file',
- PBXGroup: 'group',
- PBXVariantGroup: 'file',
- }
- self_type = valid_class_types[self.__class__]
- other_type = valid_class_types[other.__class__]
-
- if self_type == other_type:
- # If the two objects are of the same sort rank, compare their names.
- return cmp(self.Name(), other.Name())
-
- # Otherwise, sort groups before everything else.
- if self_type == 'group':
- return -1
- return 1
-
- def CompareRootGroup(self, other):
- # This function should be used only to compare direct children of the
- # containing PBXProject's mainGroup. These groups should appear in the
- # listed order.
- # TODO(mark): "Build" is used by gyp.generator.xcode, perhaps the
- # generator should have a way of influencing this list rather than having
- # to hardcode for the generator here.
- order = ['Source', 'Intermediates', 'Projects', 'Frameworks', 'Products',
- 'Build']
-
- # If the groups aren't in the listed order, do a name comparison.
- # Otherwise, groups in the listed order should come before those that
- # aren't.
- self_name = self.Name()
- other_name = other.Name()
- self_in = isinstance(self, PBXGroup) and self_name in order
- other_in = isinstance(self, PBXGroup) and other_name in order
- if not self_in and not other_in:
- return self.Compare(other)
- if self_name in order and not other_name in order:
- return -1
- if other_name in order and not self_name in order:
- return 1
-
- # If both groups are in the listed order, go by the defined order.
- self_index = order.index(self_name)
- other_index = order.index(other_name)
- if self_index < other_index:
- return -1
- if self_index > other_index:
- return 1
- return 0
-
- def PathFromSourceTreeAndPath(self):
- # Turn the object's sourceTree and path properties into a single flat
- # string of a form comparable to the path parameter. If there's a
- # sourceTree property other than "<group>", wrap it in $(...) for the
- # comparison.
- components = []
- if self._properties['sourceTree'] != '<group>':
- components.append('$(' + self._properties['sourceTree'] + ')')
- if 'path' in self._properties:
- components.append(self._properties['path'])
-
- if len(components) > 0:
- return posixpath.join(*components)
-
- return None
-
- def FullPath(self):
- # Returns a full path to self relative to the project file, or relative
- # to some other source tree. Start with self, and walk up the chain of
- # parents prepending their paths, if any, until no more parents are
- # available (project-relative path) or until a path relative to some
- # source tree is found.
- xche = self
- path = None
- while isinstance(xche, XCHierarchicalElement) and \
- (path is None or \
- (not path.startswith('/') and not path.startswith('$'))):
- this_path = xche.PathFromSourceTreeAndPath()
- if this_path != None and path != None:
- path = posixpath.join(this_path, path)
- elif this_path != None:
- path = this_path
- xche = xche.parent
-
- return path
-
-
-class PBXGroup(XCHierarchicalElement):
- """
- Attributes:
- _children_by_path: Maps pathnames of children of this PBXGroup to the
- actual child XCHierarchicalElement objects.
- _variant_children_by_name_and_path: Maps (name, path) tuples of
- PBXVariantGroup children to the actual child PBXVariantGroup objects.
- """
-
- _schema = XCHierarchicalElement._schema.copy()
- _schema.update({
- 'children': [1, XCHierarchicalElement, 1, 1, []],
- 'name': [0, str, 0, 0],
- 'path': [0, str, 0, 0],
- })
-
- def __init__(self, properties=None, id=None, parent=None):
- # super
- XCHierarchicalElement.__init__(self, properties, id, parent)
- self._children_by_path = {}
- self._variant_children_by_name_and_path = {}
- for child in self._properties.get('children', []):
- self._AddChildToDicts(child)
-
- def Hashables(self):
- # super
- hashables = XCHierarchicalElement.Hashables(self)
-
- # It is not sufficient to just rely on name and parent to build a unique
- # hashable : a node could have two child PBXGroup sharing a common name.
- # To add entropy the hashable is enhanced with the names of all its
- # children.
- for child in self._properties.get('children', []):
- child_name = child.Name()
- if child_name != None:
- hashables.append(child_name)
-
- return hashables
-
- def HashablesForChild(self):
- # To avoid a circular reference the hashables used to compute a child id do
- # not include the child names.
- return XCHierarchicalElement.Hashables(self)
-
- def _AddChildToDicts(self, child):
- # Sets up this PBXGroup object's dicts to reference the child properly.
- child_path = child.PathFromSourceTreeAndPath()
- if child_path:
- if child_path in self._children_by_path:
- raise ValueError('Found multiple children with path ' + child_path)
- self._children_by_path[child_path] = child
-
- if isinstance(child, PBXVariantGroup):
- child_name = child._properties.get('name', None)
- key = (child_name, child_path)
- if key in self._variant_children_by_name_and_path:
- raise ValueError('Found multiple PBXVariantGroup children with ' + \
- 'name ' + str(child_name) + ' and path ' + \
- str(child_path))
- self._variant_children_by_name_and_path[key] = child
-
- def AppendChild(self, child):
- # Callers should use this instead of calling
- # AppendProperty('children', child) directly because this function
- # maintains the group's dicts.
- self.AppendProperty('children', child)
- self._AddChildToDicts(child)
-
- def GetChildByName(self, name):
- # This is not currently optimized with a dict as GetChildByPath is because
- # it has few callers. Most callers probably want GetChildByPath. This
- # function is only useful to get children that have names but no paths,
- # which is rare. The children of the main group ("Source", "Products",
- # etc.) is pretty much the only case where this likely to come up.
- #
- # TODO(mark): Maybe this should raise an error if more than one child is
- # present with the same name.
- if not 'children' in self._properties:
- return None
-
- for child in self._properties['children']:
- if child.Name() == name:
- return child
-
- return None
-
- def GetChildByPath(self, path):
- if not path:
- return None
-
- if path in self._children_by_path:
- return self._children_by_path[path]
-
- return None
-
- def GetChildByRemoteObject(self, remote_object):
- # This method is a little bit esoteric. Given a remote_object, which
- # should be a PBXFileReference in another project file, this method will
- # return this group's PBXReferenceProxy object serving as a local proxy
- # for the remote PBXFileReference.
- #
- # This function might benefit from a dict optimization as GetChildByPath
- # for some workloads, but profiling shows that it's not currently a
- # problem.
- if not 'children' in self._properties:
- return None
-
- for child in self._properties['children']:
- if not isinstance(child, PBXReferenceProxy):
- continue
-
- container_proxy = child._properties['remoteRef']
- if container_proxy._properties['remoteGlobalIDString'] == remote_object:
- return child
-
- return None
-
- def AddOrGetFileByPath(self, path, hierarchical):
- """Returns an existing or new file reference corresponding to path.
-
- If hierarchical is True, this method will create or use the necessary
- hierarchical group structure corresponding to path. Otherwise, it will
- look in and create an item in the current group only.
-
- If an existing matching reference is found, it is returned, otherwise, a
- new one will be created, added to the correct group, and returned.
-
- If path identifies a directory by virtue of carrying a trailing slash,
- this method returns a PBXFileReference of "folder" type. If path
- identifies a variant, by virtue of it identifying a file inside a directory
- with an ".lproj" extension, this method returns a PBXVariantGroup
- containing the variant named by path, and possibly other variants. For
- all other paths, a "normal" PBXFileReference will be returned.
- """
-
- # Adding or getting a directory? Directories end with a trailing slash.
- is_dir = False
- if path.endswith('/'):
- is_dir = True
- path = posixpath.normpath(path)
- if is_dir:
- path = path + '/'
-
- # Adding or getting a variant? Variants are files inside directories
- # with an ".lproj" extension. Xcode uses variants for localization. For
- # a variant path/to/Language.lproj/MainMenu.nib, put a variant group named
- # MainMenu.nib inside path/to, and give it a variant named Language. In
- # this example, grandparent would be set to path/to and parent_root would
- # be set to Language.
- variant_name = None
- parent = posixpath.dirname(path)
- grandparent = posixpath.dirname(parent)
- parent_basename = posixpath.basename(parent)
- (parent_root, parent_ext) = posixpath.splitext(parent_basename)
- if parent_ext == '.lproj':
- variant_name = parent_root
- if grandparent == '':
- grandparent = None
-
- # Putting a directory inside a variant group is not currently supported.
- assert not is_dir or variant_name is None
-
- path_split = path.split(posixpath.sep)
- if len(path_split) == 1 or \
- ((is_dir or variant_name != None) and len(path_split) == 2) or \
- not hierarchical:
- # The PBXFileReference or PBXVariantGroup will be added to or gotten from
- # this PBXGroup, no recursion necessary.
- if variant_name is None:
- # Add or get a PBXFileReference.
- file_ref = self.GetChildByPath(path)
- if file_ref != None:
- assert file_ref.__class__ == PBXFileReference
- else:
- file_ref = PBXFileReference({'path': path})
- self.AppendChild(file_ref)
- else:
- # Add or get a PBXVariantGroup. The variant group name is the same
- # as the basename (MainMenu.nib in the example above). grandparent
- # specifies the path to the variant group itself, and path_split[-2:]
- # is the path of the specific variant relative to its group.
- variant_group_name = posixpath.basename(path)
- variant_group_ref = self.AddOrGetVariantGroupByNameAndPath(
- variant_group_name, grandparent)
- variant_path = posixpath.sep.join(path_split[-2:])
- variant_ref = variant_group_ref.GetChildByPath(variant_path)
- if variant_ref != None:
- assert variant_ref.__class__ == PBXFileReference
- else:
- variant_ref = PBXFileReference({'name': variant_name,
- 'path': variant_path})
- variant_group_ref.AppendChild(variant_ref)
- # The caller is interested in the variant group, not the specific
- # variant file.
- file_ref = variant_group_ref
- return file_ref
- else:
- # Hierarchical recursion. Add or get a PBXGroup corresponding to the
- # outermost path component, and then recurse into it, chopping off that
- # path component.
- next_dir = path_split[0]
- group_ref = self.GetChildByPath(next_dir)
- if group_ref != None:
- assert group_ref.__class__ == PBXGroup
- else:
- group_ref = PBXGroup({'path': next_dir})
- self.AppendChild(group_ref)
- return group_ref.AddOrGetFileByPath(posixpath.sep.join(path_split[1:]),
- hierarchical)
-
- def AddOrGetVariantGroupByNameAndPath(self, name, path):
- """Returns an existing or new PBXVariantGroup for name and path.
-
- If a PBXVariantGroup identified by the name and path arguments is already
- present as a child of this object, it is returned. Otherwise, a new
- PBXVariantGroup with the correct properties is created, added as a child,
- and returned.
-
- This method will generally be called by AddOrGetFileByPath, which knows
- when to create a variant group based on the structure of the pathnames
- passed to it.
- """
-
- key = (name, path)
- if key in self._variant_children_by_name_and_path:
- variant_group_ref = self._variant_children_by_name_and_path[key]
- assert variant_group_ref.__class__ == PBXVariantGroup
- return variant_group_ref
-
- variant_group_properties = {'name': name}
- if path != None:
- variant_group_properties['path'] = path
- variant_group_ref = PBXVariantGroup(variant_group_properties)
- self.AppendChild(variant_group_ref)
-
- return variant_group_ref
-
- def TakeOverOnlyChild(self, recurse=False):
- """If this PBXGroup has only one child and it's also a PBXGroup, take
- it over by making all of its children this object's children.
-
- This function will continue to take over only children when those children
- are groups. If there are three PBXGroups representing a, b, and c, with
- c inside b and b inside a, and a and b have no other children, this will
- result in a taking over both b and c, forming a PBXGroup for a/b/c.
-
- If recurse is True, this function will recurse into children and ask them
- to collapse themselves by taking over only children as well. Assuming
- an example hierarchy with files at a/b/c/d1, a/b/c/d2, and a/b/c/d3/e/f
- (d1, d2, and f are files, the rest are groups), recursion will result in
- a group for a/b/c containing a group for d3/e.
- """
-
- # At this stage, check that child class types are PBXGroup exactly,
- # instead of using isinstance. The only subclass of PBXGroup,
- # PBXVariantGroup, should not participate in reparenting in the same way:
- # reparenting by merging different object types would be wrong.
- while len(self._properties['children']) == 1 and \
- self._properties['children'][0].__class__ == PBXGroup:
- # Loop to take over the innermost only-child group possible.
-
- child = self._properties['children'][0]
-
- # Assume the child's properties, including its children. Save a copy
- # of this object's old properties, because they'll still be needed.
- # This object retains its existing id and parent attributes.
- old_properties = self._properties
- self._properties = child._properties
- self._children_by_path = child._children_by_path
-
- if not 'sourceTree' in self._properties or \
- self._properties['sourceTree'] == '<group>':
- # The child was relative to its parent. Fix up the path. Note that
- # children with a sourceTree other than "<group>" are not relative to
- # their parents, so no path fix-up is needed in that case.
- if 'path' in old_properties:
- if 'path' in self._properties:
- # Both the original parent and child have paths set.
- self._properties['path'] = posixpath.join(old_properties['path'],
- self._properties['path'])
- else:
- # Only the original parent has a path, use it.
- self._properties['path'] = old_properties['path']
- if 'sourceTree' in old_properties:
- # The original parent had a sourceTree set, use it.
- self._properties['sourceTree'] = old_properties['sourceTree']
-
- # If the original parent had a name set, keep using it. If the original
- # parent didn't have a name but the child did, let the child's name
- # live on. If the name attribute seems unnecessary now, get rid of it.
- if 'name' in old_properties and old_properties['name'] != None and \
- old_properties['name'] != self.Name():
- self._properties['name'] = old_properties['name']
- if 'name' in self._properties and 'path' in self._properties and \
- self._properties['name'] == self._properties['path']:
- del self._properties['name']
-
- # Notify all children of their new parent.
- for child in self._properties['children']:
- child.parent = self
-
- # If asked to recurse, recurse.
- if recurse:
- for child in self._properties['children']:
- if child.__class__ == PBXGroup:
- child.TakeOverOnlyChild(recurse)
-
- def SortGroup(self):
- self._properties['children'] = \
- sorted(self._properties['children'], cmp=lambda x,y: x.Compare(y))
-
- # Recurse.
- for child in self._properties['children']:
- if isinstance(child, PBXGroup):
- child.SortGroup()
-
-
-class XCFileLikeElement(XCHierarchicalElement):
- # Abstract base for objects that can be used as the fileRef property of
- # PBXBuildFile.
-
- def PathHashables(self):
- # A PBXBuildFile that refers to this object will call this method to
- # obtain additional hashables specific to this XCFileLikeElement. Don't
- # just use this object's hashables, they're not specific and unique enough
- # on their own (without access to the parent hashables.) Instead, provide
- # hashables that identify this object by path by getting its hashables as
- # well as the hashables of ancestor XCHierarchicalElement objects.
-
- hashables = []
- xche = self
- while xche != None and isinstance(xche, XCHierarchicalElement):
- xche_hashables = xche.Hashables()
- for index in xrange(0, len(xche_hashables)):
- hashables.insert(index, xche_hashables[index])
- xche = xche.parent
- return hashables
-
-
-class XCContainerPortal(XCObject):
- # Abstract base for objects that can be used as the containerPortal property
- # of PBXContainerItemProxy.
- pass
-
-
-class XCRemoteObject(XCObject):
- # Abstract base for objects that can be used as the remoteGlobalIDString
- # property of PBXContainerItemProxy.
- pass
-
-
-class PBXFileReference(XCFileLikeElement, XCContainerPortal, XCRemoteObject):
- _schema = XCFileLikeElement._schema.copy()
- _schema.update({
- 'explicitFileType': [0, str, 0, 0],
- 'lastKnownFileType': [0, str, 0, 0],
- 'name': [0, str, 0, 0],
- 'path': [0, str, 0, 1],
- })
-
- # Weird output rules for PBXFileReference.
- _should_print_single_line = True
- # super
- _encode_transforms = XCFileLikeElement._alternate_encode_transforms
-
- def __init__(self, properties=None, id=None, parent=None):
- # super
- XCFileLikeElement.__init__(self, properties, id, parent)
- if 'path' in self._properties and self._properties['path'].endswith('/'):
- self._properties['path'] = self._properties['path'][:-1]
- is_dir = True
- else:
- is_dir = False
-
- if 'path' in self._properties and \
- not 'lastKnownFileType' in self._properties and \
- not 'explicitFileType' in self._properties:
- # TODO(mark): This is the replacement for a replacement for a quick hack.
- # It is no longer incredibly sucky, but this list needs to be extended.
- extension_map = {
- 'a': 'archive.ar',
- 'app': 'wrapper.application',
- 'bdic': 'file',
- 'bundle': 'wrapper.cfbundle',
- 'c': 'sourcecode.c.c',
- 'cc': 'sourcecode.cpp.cpp',
- 'cpp': 'sourcecode.cpp.cpp',
- 'css': 'text.css',
- 'cxx': 'sourcecode.cpp.cpp',
- 'dart': 'sourcecode',
- 'dylib': 'compiled.mach-o.dylib',
- 'framework': 'wrapper.framework',
- 'gyp': 'sourcecode',
- 'gypi': 'sourcecode',
- 'h': 'sourcecode.c.h',
- 'hxx': 'sourcecode.cpp.h',
- 'icns': 'image.icns',
- 'java': 'sourcecode.java',
- 'js': 'sourcecode.javascript',
- 'kext': 'wrapper.kext',
- 'm': 'sourcecode.c.objc',
- 'mm': 'sourcecode.cpp.objcpp',
- 'nib': 'wrapper.nib',
- 'o': 'compiled.mach-o.objfile',
- 'pdf': 'image.pdf',
- 'pl': 'text.script.perl',
- 'plist': 'text.plist.xml',
- 'pm': 'text.script.perl',
- 'png': 'image.png',
- 'py': 'text.script.python',
- 'r': 'sourcecode.rez',
- 'rez': 'sourcecode.rez',
- 's': 'sourcecode.asm',
- 'storyboard': 'file.storyboard',
- 'strings': 'text.plist.strings',
- 'swift': 'sourcecode.swift',
- 'ttf': 'file',
- 'xcassets': 'folder.assetcatalog',
- 'xcconfig': 'text.xcconfig',
- 'xcdatamodel': 'wrapper.xcdatamodel',
- 'xcdatamodeld':'wrapper.xcdatamodeld',
- 'xib': 'file.xib',
- 'y': 'sourcecode.yacc',
- }
-
- prop_map = {
- 'dart': 'explicitFileType',
- 'gyp': 'explicitFileType',
- 'gypi': 'explicitFileType',
- }
-
- if is_dir:
- file_type = 'folder'
- prop_name = 'lastKnownFileType'
- else:
- basename = posixpath.basename(self._properties['path'])
- (root, ext) = posixpath.splitext(basename)
- # Check the map using a lowercase extension.
- # TODO(mark): Maybe it should try with the original case first and fall
- # back to lowercase, in case there are any instances where case
- # matters. There currently aren't.
- if ext != '':
- ext = ext[1:].lower()
-
- # TODO(mark): "text" is the default value, but "file" is appropriate
- # for unrecognized files not containing text. Xcode seems to choose
- # based on content.
- file_type = extension_map.get(ext, 'text')
- prop_name = prop_map.get(ext, 'lastKnownFileType')
-
- self._properties[prop_name] = file_type
-
-
-class PBXVariantGroup(PBXGroup, XCFileLikeElement):
- """PBXVariantGroup is used by Xcode to represent localizations."""
- # No additions to the schema relative to PBXGroup.
- pass
-
-
-# PBXReferenceProxy is also an XCFileLikeElement subclass. It is defined below
-# because it uses PBXContainerItemProxy, defined below.
-
-
-class XCBuildConfiguration(XCObject):
- _schema = XCObject._schema.copy()
- _schema.update({
- 'baseConfigurationReference': [0, PBXFileReference, 0, 0],
- 'buildSettings': [0, dict, 0, 1, {}],
- 'name': [0, str, 0, 1],
- })
-
- def HasBuildSetting(self, key):
- return key in self._properties['buildSettings']
-
- def GetBuildSetting(self, key):
- return self._properties['buildSettings'][key]
-
- def SetBuildSetting(self, key, value):
- # TODO(mark): If a list, copy?
- self._properties['buildSettings'][key] = value
-
- def AppendBuildSetting(self, key, value):
- if not key in self._properties['buildSettings']:
- self._properties['buildSettings'][key] = []
- self._properties['buildSettings'][key].append(value)
-
- def DelBuildSetting(self, key):
- if key in self._properties['buildSettings']:
- del self._properties['buildSettings'][key]
-
- def SetBaseConfiguration(self, value):
- self._properties['baseConfigurationReference'] = value
-
-class XCConfigurationList(XCObject):
- # _configs is the default list of configurations.
- _configs = [ XCBuildConfiguration({'name': 'Debug'}),
- XCBuildConfiguration({'name': 'Release'}) ]
-
- _schema = XCObject._schema.copy()
- _schema.update({
- 'buildConfigurations': [1, XCBuildConfiguration, 1, 1, _configs],
- 'defaultConfigurationIsVisible': [0, int, 0, 1, 1],
- 'defaultConfigurationName': [0, str, 0, 1, 'Release'],
- })
-
- def Name(self):
- return 'Build configuration list for ' + \
- self.parent.__class__.__name__ + ' "' + self.parent.Name() + '"'
-
- def ConfigurationNamed(self, name):
- """Convenience accessor to obtain an XCBuildConfiguration by name."""
- for configuration in self._properties['buildConfigurations']:
- if configuration._properties['name'] == name:
- return configuration
-
- raise KeyError(name)
-
- def DefaultConfiguration(self):
- """Convenience accessor to obtain the default XCBuildConfiguration."""
- return self.ConfigurationNamed(self._properties['defaultConfigurationName'])
-
- def HasBuildSetting(self, key):
- """Determines the state of a build setting in all XCBuildConfiguration
- child objects.
-
- If all child objects have key in their build settings, and the value is the
- same in all child objects, returns 1.
-
- If no child objects have the key in their build settings, returns 0.
-
- If some, but not all, child objects have the key in their build settings,
- or if any children have different values for the key, returns -1.
- """
-
- has = None
- value = None
- for configuration in self._properties['buildConfigurations']:
- configuration_has = configuration.HasBuildSetting(key)
- if has is None:
- has = configuration_has
- elif has != configuration_has:
- return -1
-
- if configuration_has:
- configuration_value = configuration.GetBuildSetting(key)
- if value is None:
- value = configuration_value
- elif value != configuration_value:
- return -1
-
- if not has:
- return 0
-
- return 1
-
- def GetBuildSetting(self, key):
- """Gets the build setting for key.
-
- All child XCConfiguration objects must have the same value set for the
- setting, or a ValueError will be raised.
- """
-
- # TODO(mark): This is wrong for build settings that are lists. The list
- # contents should be compared (and a list copy returned?)
-
- value = None
- for configuration in self._properties['buildConfigurations']:
- configuration_value = configuration.GetBuildSetting(key)
- if value is None:
- value = configuration_value
- else:
- if value != configuration_value:
- raise ValueError('Variant values for ' + key)
-
- return value
-
- def SetBuildSetting(self, key, value):
- """Sets the build setting for key to value in all child
- XCBuildConfiguration objects.
- """
-
- for configuration in self._properties['buildConfigurations']:
- configuration.SetBuildSetting(key, value)
-
- def AppendBuildSetting(self, key, value):
- """Appends value to the build setting for key, which is treated as a list,
- in all child XCBuildConfiguration objects.
- """
-
- for configuration in self._properties['buildConfigurations']:
- configuration.AppendBuildSetting(key, value)
-
- def DelBuildSetting(self, key):
- """Deletes the build setting key from all child XCBuildConfiguration
- objects.
- """
-
- for configuration in self._properties['buildConfigurations']:
- configuration.DelBuildSetting(key)
-
- def SetBaseConfiguration(self, value):
- """Sets the build configuration in all child XCBuildConfiguration objects.
- """
-
- for configuration in self._properties['buildConfigurations']:
- configuration.SetBaseConfiguration(value)
-
-
-class PBXBuildFile(XCObject):
- _schema = XCObject._schema.copy()
- _schema.update({
- 'fileRef': [0, XCFileLikeElement, 0, 1],
- 'settings': [0, str, 0, 0], # hack, it's a dict
- })
-
- # Weird output rules for PBXBuildFile.
- _should_print_single_line = True
- _encode_transforms = XCObject._alternate_encode_transforms
-
- def Name(self):
- # Example: "main.cc in Sources"
- return self._properties['fileRef'].Name() + ' in ' + self.parent.Name()
-
- def Hashables(self):
- # super
- hashables = XCObject.Hashables(self)
-
- # It is not sufficient to just rely on Name() to get the
- # XCFileLikeElement's name, because that is not a complete pathname.
- # PathHashables returns hashables unique enough that no two
- # PBXBuildFiles should wind up with the same set of hashables, unless
- # someone adds the same file multiple times to the same target. That
- # would be considered invalid anyway.
- hashables.extend(self._properties['fileRef'].PathHashables())
-
- return hashables
-
-
-class XCBuildPhase(XCObject):
- """Abstract base for build phase classes. Not represented in a project
- file.
-
- Attributes:
- _files_by_path: A dict mapping each path of a child in the files list by
- path (keys) to the corresponding PBXBuildFile children (values).
- _files_by_xcfilelikeelement: A dict mapping each XCFileLikeElement (keys)
- to the corresponding PBXBuildFile children (values).
- """
-
- # TODO(mark): Some build phase types, like PBXShellScriptBuildPhase, don't
- # actually have a "files" list. XCBuildPhase should not have "files" but
- # another abstract subclass of it should provide this, and concrete build
- # phase types that do have "files" lists should be derived from that new
- # abstract subclass. XCBuildPhase should only provide buildActionMask and
- # runOnlyForDeploymentPostprocessing, and not files or the various
- # file-related methods and attributes.
-
- _schema = XCObject._schema.copy()
- _schema.update({
- 'buildActionMask': [0, int, 0, 1, 0x7fffffff],
- 'files': [1, PBXBuildFile, 1, 1, []],
- 'runOnlyForDeploymentPostprocessing': [0, int, 0, 1, 0],
- })
-
- def __init__(self, properties=None, id=None, parent=None):
- # super
- XCObject.__init__(self, properties, id, parent)
-
- self._files_by_path = {}
- self._files_by_xcfilelikeelement = {}
- for pbxbuildfile in self._properties.get('files', []):
- self._AddBuildFileToDicts(pbxbuildfile)
-
- def FileGroup(self, path):
- # Subclasses must override this by returning a two-element tuple. The
- # first item in the tuple should be the PBXGroup to which "path" should be
- # added, either as a child or deeper descendant. The second item should
- # be a boolean indicating whether files should be added into hierarchical
- # groups or one single flat group.
- raise NotImplementedError(
- self.__class__.__name__ + ' must implement FileGroup')
-
- def _AddPathToDict(self, pbxbuildfile, path):
- """Adds path to the dict tracking paths belonging to this build phase.
-
- If the path is already a member of this build phase, raises an exception.
- """
-
- if path in self._files_by_path:
- raise ValueError('Found multiple build files with path ' + path)
- self._files_by_path[path] = pbxbuildfile
-
- def _AddBuildFileToDicts(self, pbxbuildfile, path=None):
- """Maintains the _files_by_path and _files_by_xcfilelikeelement dicts.
-
- If path is specified, then it is the path that is being added to the
- phase, and pbxbuildfile must contain either a PBXFileReference directly
- referencing that path, or it must contain a PBXVariantGroup that itself
- contains a PBXFileReference referencing the path.
-
- If path is not specified, either the PBXFileReference's path or the paths
- of all children of the PBXVariantGroup are taken as being added to the
- phase.
-
- If the path is already present in the phase, raises an exception.
-
- If the PBXFileReference or PBXVariantGroup referenced by pbxbuildfile
- are already present in the phase, referenced by a different PBXBuildFile
- object, raises an exception. This does not raise an exception when
- a PBXFileReference or PBXVariantGroup reappear and are referenced by the
- same PBXBuildFile that has already introduced them, because in the case
- of PBXVariantGroup objects, they may correspond to multiple paths that are
- not all added simultaneously. When this situation occurs, the path needs
- to be added to _files_by_path, but nothing needs to change in
- _files_by_xcfilelikeelement, and the caller should have avoided adding
- the PBXBuildFile if it is already present in the list of children.
- """
-
- xcfilelikeelement = pbxbuildfile._properties['fileRef']
-
- paths = []
- if path != None:
- # It's best when the caller provides the path.
- if isinstance(xcfilelikeelement, PBXVariantGroup):
- paths.append(path)
- else:
- # If the caller didn't provide a path, there can be either multiple
- # paths (PBXVariantGroup) or one.
- if isinstance(xcfilelikeelement, PBXVariantGroup):
- for variant in xcfilelikeelement._properties['children']:
- paths.append(variant.FullPath())
- else:
- paths.append(xcfilelikeelement.FullPath())
-
- # Add the paths first, because if something's going to raise, the
- # messages provided by _AddPathToDict are more useful owing to its
- # having access to a real pathname and not just an object's Name().
- for a_path in paths:
- self._AddPathToDict(pbxbuildfile, a_path)
-
- # If another PBXBuildFile references this XCFileLikeElement, there's a
- # problem.
- if xcfilelikeelement in self._files_by_xcfilelikeelement and \
- self._files_by_xcfilelikeelement[xcfilelikeelement] != pbxbuildfile:
- raise ValueError('Found multiple build files for ' + \
- xcfilelikeelement.Name())
- self._files_by_xcfilelikeelement[xcfilelikeelement] = pbxbuildfile
-
- def AppendBuildFile(self, pbxbuildfile, path=None):
- # Callers should use this instead of calling
- # AppendProperty('files', pbxbuildfile) directly because this function
- # maintains the object's dicts. Better yet, callers can just call AddFile
- # with a pathname and not worry about building their own PBXBuildFile
- # objects.
- self.AppendProperty('files', pbxbuildfile)
- self._AddBuildFileToDicts(pbxbuildfile, path)
-
- def AddFile(self, path, settings=None):
- (file_group, hierarchical) = self.FileGroup(path)
- file_ref = file_group.AddOrGetFileByPath(path, hierarchical)
-
- if file_ref in self._files_by_xcfilelikeelement and \
- isinstance(file_ref, PBXVariantGroup):
- # There's already a PBXBuildFile in this phase corresponding to the
- # PBXVariantGroup. path just provides a new variant that belongs to
- # the group. Add the path to the dict.
- pbxbuildfile = self._files_by_xcfilelikeelement[file_ref]
- self._AddBuildFileToDicts(pbxbuildfile, path)
- else:
- # Add a new PBXBuildFile to get file_ref into the phase.
- if settings is None:
- pbxbuildfile = PBXBuildFile({'fileRef': file_ref})
- else:
- pbxbuildfile = PBXBuildFile({'fileRef': file_ref, 'settings': settings})
- self.AppendBuildFile(pbxbuildfile, path)
-
-
-class PBXHeadersBuildPhase(XCBuildPhase):
- # No additions to the schema relative to XCBuildPhase.
-
- def Name(self):
- return 'Headers'
-
- def FileGroup(self, path):
- return self.PBXProjectAncestor().RootGroupForPath(path)
-
-
-class PBXResourcesBuildPhase(XCBuildPhase):
- # No additions to the schema relative to XCBuildPhase.
-
- def Name(self):
- return 'Resources'
-
- def FileGroup(self, path):
- return self.PBXProjectAncestor().RootGroupForPath(path)
-
-
-class PBXSourcesBuildPhase(XCBuildPhase):
- # No additions to the schema relative to XCBuildPhase.
-
- def Name(self):
- return 'Sources'
-
- def FileGroup(self, path):
- return self.PBXProjectAncestor().RootGroupForPath(path)
-
-
-class PBXFrameworksBuildPhase(XCBuildPhase):
- # No additions to the schema relative to XCBuildPhase.
-
- def Name(self):
- return 'Frameworks'
-
- def FileGroup(self, path):
- (root, ext) = posixpath.splitext(path)
- if ext != '':
- ext = ext[1:].lower()
- if ext == 'o':
- # .o files are added to Xcode Frameworks phases, but conceptually aren't
- # frameworks, they're more like sources or intermediates. Redirect them
- # to show up in one of those other groups.
- return self.PBXProjectAncestor().RootGroupForPath(path)
- else:
- return (self.PBXProjectAncestor().FrameworksGroup(), False)
-
-
-class PBXShellScriptBuildPhase(XCBuildPhase):
- _schema = XCBuildPhase._schema.copy()
- _schema.update({
- 'inputPaths': [1, str, 0, 1, []],
- 'name': [0, str, 0, 0],
- 'outputPaths': [1, str, 0, 1, []],
- 'shellPath': [0, str, 0, 1, '/bin/sh'],
- 'shellScript': [0, str, 0, 1],
- 'showEnvVarsInLog': [0, int, 0, 0],
- })
-
- def Name(self):
- if 'name' in self._properties:
- return self._properties['name']
-
- return 'ShellScript'
-
-
-class PBXCopyFilesBuildPhase(XCBuildPhase):
- _schema = XCBuildPhase._schema.copy()
- _schema.update({
- 'dstPath': [0, str, 0, 1],
- 'dstSubfolderSpec': [0, int, 0, 1],
- 'name': [0, str, 0, 0],
- })
-
- # path_tree_re matches "$(DIR)/path" or just "$(DIR)". Match group 1 is
- # "DIR", match group 3 is "path" or None.
- path_tree_re = re.compile('^\\$\\((.*)\\)(/(.*)|)$')
-
- # path_tree_to_subfolder maps names of Xcode variables to the associated
- # dstSubfolderSpec property value used in a PBXCopyFilesBuildPhase object.
- path_tree_to_subfolder = {
- 'BUILT_FRAMEWORKS_DIR': 10, # Frameworks Directory
- 'BUILT_PRODUCTS_DIR': 16, # Products Directory
- # Other types that can be chosen via the Xcode UI.
- # TODO(mark): Map Xcode variable names to these.
- # : 1, # Wrapper
- # : 6, # Executables: 6
- # : 7, # Resources
- # : 15, # Java Resources
- # : 11, # Shared Frameworks
- # : 12, # Shared Support
- # : 13, # PlugIns
- }
-
- def Name(self):
- if 'name' in self._properties:
- return self._properties['name']
-
- return 'CopyFiles'
-
- def FileGroup(self, path):
- return self.PBXProjectAncestor().RootGroupForPath(path)
-
- def SetDestination(self, path):
- """Set the dstSubfolderSpec and dstPath properties from path.
-
- path may be specified in the same notation used for XCHierarchicalElements,
- specifically, "$(DIR)/path".
- """
-
- path_tree_match = self.path_tree_re.search(path)
- if path_tree_match:
- # Everything else needs to be relative to an Xcode variable.
- path_tree = path_tree_match.group(1)
- relative_path = path_tree_match.group(3)
-
- if path_tree in self.path_tree_to_subfolder:
- subfolder = self.path_tree_to_subfolder[path_tree]
- if relative_path is None:
- relative_path = ''
- else:
- # The path starts with an unrecognized Xcode variable
- # name like $(SRCROOT). Xcode will still handle this
- # as an "absolute path" that starts with the variable.
- subfolder = 0
- relative_path = path
- elif path.startswith('/'):
- # Special case. Absolute paths are in dstSubfolderSpec 0.
- subfolder = 0
- relative_path = path[1:]
- else:
- raise ValueError('Can\'t use path %s in a %s' % \
- (path, self.__class__.__name__))
-
- self._properties['dstPath'] = relative_path
- self._properties['dstSubfolderSpec'] = subfolder
-
-
-class PBXBuildRule(XCObject):
- _schema = XCObject._schema.copy()
- _schema.update({
- 'compilerSpec': [0, str, 0, 1],
- 'filePatterns': [0, str, 0, 0],
- 'fileType': [0, str, 0, 1],
- 'isEditable': [0, int, 0, 1, 1],
- 'outputFiles': [1, str, 0, 1, []],
- 'script': [0, str, 0, 0],
- })
-
- def Name(self):
- # Not very inspired, but it's what Xcode uses.
- return self.__class__.__name__
-
- def Hashables(self):
- # super
- hashables = XCObject.Hashables(self)
-
- # Use the hashables of the weak objects that this object refers to.
- hashables.append(self._properties['fileType'])
- if 'filePatterns' in self._properties:
- hashables.append(self._properties['filePatterns'])
- return hashables
-
-
-class PBXContainerItemProxy(XCObject):
- # When referencing an item in this project file, containerPortal is the
- # PBXProject root object of this project file. When referencing an item in
- # another project file, containerPortal is a PBXFileReference identifying
- # the other project file.
- #
- # When serving as a proxy to an XCTarget (in this project file or another),
- # proxyType is 1. When serving as a proxy to a PBXFileReference (in another
- # project file), proxyType is 2. Type 2 is used for references to the
- # producs of the other project file's targets.
- #
- # Xcode is weird about remoteGlobalIDString. Usually, it's printed without
- # a comment, indicating that it's tracked internally simply as a string, but
- # sometimes it's printed with a comment (usually when the object is initially
- # created), indicating that it's tracked as a project file object at least
- # sometimes. This module always tracks it as an object, but contains a hack
- # to prevent it from printing the comment in the project file output. See
- # _XCKVPrint.
- _schema = XCObject._schema.copy()
- _schema.update({
- 'containerPortal': [0, XCContainerPortal, 0, 1],
- 'proxyType': [0, int, 0, 1],
- 'remoteGlobalIDString': [0, XCRemoteObject, 0, 1],
- 'remoteInfo': [0, str, 0, 1],
- })
-
- def __repr__(self):
- props = self._properties
- name = '%s.gyp:%s' % (props['containerPortal'].Name(), props['remoteInfo'])
- return '<%s %r at 0x%x>' % (self.__class__.__name__, name, id(self))
-
- def Name(self):
- # Admittedly not the best name, but it's what Xcode uses.
- return self.__class__.__name__
-
- def Hashables(self):
- # super
- hashables = XCObject.Hashables(self)
-
- # Use the hashables of the weak objects that this object refers to.
- hashables.extend(self._properties['containerPortal'].Hashables())
- hashables.extend(self._properties['remoteGlobalIDString'].Hashables())
- return hashables
-
-
-class PBXTargetDependency(XCObject):
- # The "target" property accepts an XCTarget object, and obviously not
- # NoneType. But XCTarget is defined below, so it can't be put into the
- # schema yet. The definition of PBXTargetDependency can't be moved below
- # XCTarget because XCTarget's own schema references PBXTargetDependency.
- # Python doesn't deal well with this circular relationship, and doesn't have
- # a real way to do forward declarations. To work around, the type of
- # the "target" property is reset below, after XCTarget is defined.
- #
- # At least one of "name" and "target" is required.
- _schema = XCObject._schema.copy()
- _schema.update({
- 'name': [0, str, 0, 0],
- 'target': [0, None.__class__, 0, 0],
- 'targetProxy': [0, PBXContainerItemProxy, 1, 1],
- })
-
- def __repr__(self):
- name = self._properties.get('name') or self._properties['target'].Name()
- return '<%s %r at 0x%x>' % (self.__class__.__name__, name, id(self))
-
- def Name(self):
- # Admittedly not the best name, but it's what Xcode uses.
- return self.__class__.__name__
-
- def Hashables(self):
- # super
- hashables = XCObject.Hashables(self)
-
- # Use the hashables of the weak objects that this object refers to.
- hashables.extend(self._properties['targetProxy'].Hashables())
- return hashables
-
-
-class PBXReferenceProxy(XCFileLikeElement):
- _schema = XCFileLikeElement._schema.copy()
- _schema.update({
- 'fileType': [0, str, 0, 1],
- 'path': [0, str, 0, 1],
- 'remoteRef': [0, PBXContainerItemProxy, 1, 1],
- })
-
-
-class XCTarget(XCRemoteObject):
- # An XCTarget is really just an XCObject, the XCRemoteObject thing is just
- # to allow PBXProject to be used in the remoteGlobalIDString property of
- # PBXContainerItemProxy.
- #
- # Setting a "name" property at instantiation may also affect "productName",
- # which may in turn affect the "PRODUCT_NAME" build setting in children of
- # "buildConfigurationList". See __init__ below.
- _schema = XCRemoteObject._schema.copy()
- _schema.update({
- 'buildConfigurationList': [0, XCConfigurationList, 1, 1,
- XCConfigurationList()],
- 'buildPhases': [1, XCBuildPhase, 1, 1, []],
- 'dependencies': [1, PBXTargetDependency, 1, 1, []],
- 'name': [0, str, 0, 1],
- 'productName': [0, str, 0, 1],
- })
-
- def __init__(self, properties=None, id=None, parent=None,
- force_outdir=None, force_prefix=None, force_extension=None):
- # super
- XCRemoteObject.__init__(self, properties, id, parent)
-
- # Set up additional defaults not expressed in the schema. If a "name"
- # property was supplied, set "productName" if it is not present. Also set
- # the "PRODUCT_NAME" build setting in each configuration, but only if
- # the setting is not present in any build configuration.
- if 'name' in self._properties:
- if not 'productName' in self._properties:
- self.SetProperty('productName', self._properties['name'])
-
- if 'productName' in self._properties:
- if 'buildConfigurationList' in self._properties:
- configs = self._properties['buildConfigurationList']
- if configs.HasBuildSetting('PRODUCT_NAME') == 0:
- configs.SetBuildSetting('PRODUCT_NAME',
- self._properties['productName'])
-
- def AddDependency(self, other):
- pbxproject = self.PBXProjectAncestor()
- other_pbxproject = other.PBXProjectAncestor()
- if pbxproject == other_pbxproject:
- # Add a dependency to another target in the same project file.
- container = PBXContainerItemProxy({'containerPortal': pbxproject,
- 'proxyType': 1,
- 'remoteGlobalIDString': other,
- 'remoteInfo': other.Name()})
- dependency = PBXTargetDependency({'target': other,
- 'targetProxy': container})
- self.AppendProperty('dependencies', dependency)
- else:
- # Add a dependency to a target in a different project file.
- other_project_ref = \
- pbxproject.AddOrGetProjectReference(other_pbxproject)[1]
- container = PBXContainerItemProxy({
- 'containerPortal': other_project_ref,
- 'proxyType': 1,
- 'remoteGlobalIDString': other,
- 'remoteInfo': other.Name(),
- })
- dependency = PBXTargetDependency({'name': other.Name(),
- 'targetProxy': container})
- self.AppendProperty('dependencies', dependency)
-
- # Proxy all of these through to the build configuration list.
-
- def ConfigurationNamed(self, name):
- return self._properties['buildConfigurationList'].ConfigurationNamed(name)
-
- def DefaultConfiguration(self):
- return self._properties['buildConfigurationList'].DefaultConfiguration()
-
- def HasBuildSetting(self, key):
- return self._properties['buildConfigurationList'].HasBuildSetting(key)
-
- def GetBuildSetting(self, key):
- return self._properties['buildConfigurationList'].GetBuildSetting(key)
-
- def SetBuildSetting(self, key, value):
- return self._properties['buildConfigurationList'].SetBuildSetting(key, \
- value)
-
- def AppendBuildSetting(self, key, value):
- return self._properties['buildConfigurationList'].AppendBuildSetting(key, \
- value)
-
- def DelBuildSetting(self, key):
- return self._properties['buildConfigurationList'].DelBuildSetting(key)
-
-
-# Redefine the type of the "target" property. See PBXTargetDependency._schema
-# above.
-PBXTargetDependency._schema['target'][1] = XCTarget
-
-
-class PBXNativeTarget(XCTarget):
- # buildPhases is overridden in the schema to be able to set defaults.
- #
- # NOTE: Contrary to most objects, it is advisable to set parent when
- # constructing PBXNativeTarget. A parent of an XCTarget must be a PBXProject
- # object. A parent reference is required for a PBXNativeTarget during
- # construction to be able to set up the target defaults for productReference,
- # because a PBXBuildFile object must be created for the target and it must
- # be added to the PBXProject's mainGroup hierarchy.
- _schema = XCTarget._schema.copy()
- _schema.update({
- 'buildPhases': [1, XCBuildPhase, 1, 1,
- [PBXSourcesBuildPhase(), PBXFrameworksBuildPhase()]],
- 'buildRules': [1, PBXBuildRule, 1, 1, []],
- 'productReference': [0, PBXFileReference, 0, 1],
- 'productType': [0, str, 0, 1],
- })
-
- # Mapping from Xcode product-types to settings. The settings are:
- # filetype : used for explicitFileType in the project file
- # prefix : the prefix for the file name
- # suffix : the suffix for the file name
- _product_filetypes = {
- 'com.apple.product-type.application': ['wrapper.application',
- '', '.app'],
- 'com.apple.product-type.application.watchapp': ['wrapper.application',
- '', '.app'],
- 'com.apple.product-type.watchkit-extension': ['wrapper.app-extension',
- '', '.appex'],
- 'com.apple.product-type.app-extension': ['wrapper.app-extension',
- '', '.appex'],
- 'com.apple.product-type.bundle': ['wrapper.cfbundle',
- '', '.bundle'],
- 'com.apple.product-type.framework': ['wrapper.framework',
- '', '.framework'],
- 'com.apple.product-type.library.dynamic': ['compiled.mach-o.dylib',
- 'lib', '.dylib'],
- 'com.apple.product-type.library.static': ['archive.ar',
- 'lib', '.a'],
- 'com.apple.product-type.tool': ['compiled.mach-o.executable',
- '', ''],
- 'com.apple.product-type.bundle.unit-test': ['wrapper.cfbundle',
- '', '.xctest'],
- 'com.googlecode.gyp.xcode.bundle': ['compiled.mach-o.dylib',
- '', '.so'],
- 'com.apple.product-type.kernel-extension': ['wrapper.kext',
- '', '.kext'],
- }
-
- def __init__(self, properties=None, id=None, parent=None,
- force_outdir=None, force_prefix=None, force_extension=None):
- # super
- XCTarget.__init__(self, properties, id, parent)
-
- if 'productName' in self._properties and \
- 'productType' in self._properties and \
- not 'productReference' in self._properties and \
- self._properties['productType'] in self._product_filetypes:
- products_group = None
- pbxproject = self.PBXProjectAncestor()
- if pbxproject != None:
- products_group = pbxproject.ProductsGroup()
-
- if products_group != None:
- (filetype, prefix, suffix) = \
- self._product_filetypes[self._properties['productType']]
- # Xcode does not have a distinct type for loadable modules that are
- # pure BSD targets (not in a bundle wrapper). GYP allows such modules
- # to be specified by setting a target type to loadable_module without
- # having mac_bundle set. These are mapped to the pseudo-product type
- # com.googlecode.gyp.xcode.bundle.
- #
- # By picking up this special type and converting it to a dynamic
- # library (com.apple.product-type.library.dynamic) with fix-ups,
- # single-file loadable modules can be produced.
- #
- # MACH_O_TYPE is changed to mh_bundle to produce the proper file type
- # (as opposed to mh_dylib). In order for linking to succeed,
- # DYLIB_CURRENT_VERSION and DYLIB_COMPATIBILITY_VERSION must be
- # cleared. They are meaningless for type mh_bundle.
- #
- # Finally, the .so extension is forcibly applied over the default
- # (.dylib), unless another forced extension is already selected.
- # .dylib is plainly wrong, and .bundle is used by loadable_modules in
- # bundle wrappers (com.apple.product-type.bundle). .so seems an odd
- # choice because it's used as the extension on many other systems that
- # don't distinguish between linkable shared libraries and non-linkable
- # loadable modules, but there's precedent: Python loadable modules on
- # Mac OS X use an .so extension.
- if self._properties['productType'] == 'com.googlecode.gyp.xcode.bundle':
- self._properties['productType'] = \
- 'com.apple.product-type.library.dynamic'
- self.SetBuildSetting('MACH_O_TYPE', 'mh_bundle')
- self.SetBuildSetting('DYLIB_CURRENT_VERSION', '')
- self.SetBuildSetting('DYLIB_COMPATIBILITY_VERSION', '')
- if force_extension is None:
- force_extension = suffix[1:]
-
- if self._properties['productType'] == \
- 'com.apple.product-type-bundle.unit.test':
- if force_extension is None:
- force_extension = suffix[1:]
-
- if force_extension is not None:
- # If it's a wrapper (bundle), set WRAPPER_EXTENSION.
- # Extension override.
- suffix = '.' + force_extension
- if filetype.startswith('wrapper.'):
- self.SetBuildSetting('WRAPPER_EXTENSION', force_extension)
- else:
- self.SetBuildSetting('EXECUTABLE_EXTENSION', force_extension)
-
- if filetype.startswith('compiled.mach-o.executable'):
- product_name = self._properties['productName']
- product_name += suffix
- suffix = ''
- self.SetProperty('productName', product_name)
- self.SetBuildSetting('PRODUCT_NAME', product_name)
-
- # Xcode handles most prefixes based on the target type, however there
- # are exceptions. If a "BSD Dynamic Library" target is added in the
- # Xcode UI, Xcode sets EXECUTABLE_PREFIX. This check duplicates that
- # behavior.
- if force_prefix is not None:
- prefix = force_prefix
- if filetype.startswith('wrapper.'):
- self.SetBuildSetting('WRAPPER_PREFIX', prefix)
- else:
- self.SetBuildSetting('EXECUTABLE_PREFIX', prefix)
-
- if force_outdir is not None:
- self.SetBuildSetting('TARGET_BUILD_DIR', force_outdir)
-
- # TODO(tvl): Remove the below hack.
- # http://code.google.com/p/gyp/issues/detail?id=122
-
- # Some targets include the prefix in the target_name. These targets
- # really should just add a product_name setting that doesn't include
- # the prefix. For example:
- # target_name = 'libevent', product_name = 'event'
- # This check cleans up for them.
- product_name = self._properties['productName']
- prefix_len = len(prefix)
- if prefix_len and (product_name[:prefix_len] == prefix):
- product_name = product_name[prefix_len:]
- self.SetProperty('productName', product_name)
- self.SetBuildSetting('PRODUCT_NAME', product_name)
-
- ref_props = {
- 'explicitFileType': filetype,
- 'includeInIndex': 0,
- 'path': prefix + product_name + suffix,
- 'sourceTree': 'BUILT_PRODUCTS_DIR',
- }
- file_ref = PBXFileReference(ref_props)
- products_group.AppendChild(file_ref)
- self.SetProperty('productReference', file_ref)
-
- def GetBuildPhaseByType(self, type):
- if not 'buildPhases' in self._properties:
- return None
-
- the_phase = None
- for phase in self._properties['buildPhases']:
- if isinstance(phase, type):
- # Some phases may be present in multiples in a well-formed project file,
- # but phases like PBXSourcesBuildPhase may only be present singly, and
- # this function is intended as an aid to GetBuildPhaseByType. Loop
- # over the entire list of phases and assert if more than one of the
- # desired type is found.
- assert the_phase is None
- the_phase = phase
-
- return the_phase
-
- def HeadersPhase(self):
- headers_phase = self.GetBuildPhaseByType(PBXHeadersBuildPhase)
- if headers_phase is None:
- headers_phase = PBXHeadersBuildPhase()
-
- # The headers phase should come before the resources, sources, and
- # frameworks phases, if any.
- insert_at = len(self._properties['buildPhases'])
- for index in xrange(0, len(self._properties['buildPhases'])):
- phase = self._properties['buildPhases'][index]
- if isinstance(phase, PBXResourcesBuildPhase) or \
- isinstance(phase, PBXSourcesBuildPhase) or \
- isinstance(phase, PBXFrameworksBuildPhase):
- insert_at = index
- break
-
- self._properties['buildPhases'].insert(insert_at, headers_phase)
- headers_phase.parent = self
-
- return headers_phase
-
- def ResourcesPhase(self):
- resources_phase = self.GetBuildPhaseByType(PBXResourcesBuildPhase)
- if resources_phase is None:
- resources_phase = PBXResourcesBuildPhase()
-
- # The resources phase should come before the sources and frameworks
- # phases, if any.
- insert_at = len(self._properties['buildPhases'])
- for index in xrange(0, len(self._properties['buildPhases'])):
- phase = self._properties['buildPhases'][index]
- if isinstance(phase, PBXSourcesBuildPhase) or \
- isinstance(phase, PBXFrameworksBuildPhase):
- insert_at = index
- break
-
- self._properties['buildPhases'].insert(insert_at, resources_phase)
- resources_phase.parent = self
-
- return resources_phase
-
- def SourcesPhase(self):
- sources_phase = self.GetBuildPhaseByType(PBXSourcesBuildPhase)
- if sources_phase is None:
- sources_phase = PBXSourcesBuildPhase()
- self.AppendProperty('buildPhases', sources_phase)
-
- return sources_phase
-
- def FrameworksPhase(self):
- frameworks_phase = self.GetBuildPhaseByType(PBXFrameworksBuildPhase)
- if frameworks_phase is None:
- frameworks_phase = PBXFrameworksBuildPhase()
- self.AppendProperty('buildPhases', frameworks_phase)
-
- return frameworks_phase
-
- def AddDependency(self, other):
- # super
- XCTarget.AddDependency(self, other)
-
- static_library_type = 'com.apple.product-type.library.static'
- shared_library_type = 'com.apple.product-type.library.dynamic'
- framework_type = 'com.apple.product-type.framework'
- if isinstance(other, PBXNativeTarget) and \
- 'productType' in self._properties and \
- self._properties['productType'] != static_library_type and \
- 'productType' in other._properties and \
- (other._properties['productType'] == static_library_type or \
- ((other._properties['productType'] == shared_library_type or \
- other._properties['productType'] == framework_type) and \
- ((not other.HasBuildSetting('MACH_O_TYPE')) or
- other.GetBuildSetting('MACH_O_TYPE') != 'mh_bundle'))):
-
- file_ref = other.GetProperty('productReference')
-
- pbxproject = self.PBXProjectAncestor()
- other_pbxproject = other.PBXProjectAncestor()
- if pbxproject != other_pbxproject:
- other_project_product_group = \
- pbxproject.AddOrGetProjectReference(other_pbxproject)[0]
- file_ref = other_project_product_group.GetChildByRemoteObject(file_ref)
-
- self.FrameworksPhase().AppendProperty('files',
- PBXBuildFile({'fileRef': file_ref}))
-
-
-class PBXAggregateTarget(XCTarget):
- pass
-
-
-class PBXProject(XCContainerPortal):
- # A PBXProject is really just an XCObject, the XCContainerPortal thing is
- # just to allow PBXProject to be used in the containerPortal property of
- # PBXContainerItemProxy.
- """
-
- Attributes:
- path: "sample.xcodeproj". TODO(mark) Document me!
- _other_pbxprojects: A dictionary, keyed by other PBXProject objects. Each
- value is a reference to the dict in the
- projectReferences list associated with the keyed
- PBXProject.
- """
-
- _schema = XCContainerPortal._schema.copy()
- _schema.update({
- 'attributes': [0, dict, 0, 0],
- 'buildConfigurationList': [0, XCConfigurationList, 1, 1,
- XCConfigurationList()],
- 'compatibilityVersion': [0, str, 0, 1, 'Xcode 3.2'],
- 'hasScannedForEncodings': [0, int, 0, 1, 1],
- 'mainGroup': [0, PBXGroup, 1, 1, PBXGroup()],
- 'projectDirPath': [0, str, 0, 1, ''],
- 'projectReferences': [1, dict, 0, 0],
- 'projectRoot': [0, str, 0, 1, ''],
- 'targets': [1, XCTarget, 1, 1, []],
- })
-
- def __init__(self, properties=None, id=None, parent=None, path=None):
- self.path = path
- self._other_pbxprojects = {}
- # super
- return XCContainerPortal.__init__(self, properties, id, parent)
-
- def Name(self):
- name = self.path
- if name[-10:] == '.xcodeproj':
- name = name[:-10]
- return posixpath.basename(name)
-
- def Path(self):
- return self.path
-
- def Comment(self):
- return 'Project object'
-
- def Children(self):
- # super
- children = XCContainerPortal.Children(self)
-
- # Add children that the schema doesn't know about. Maybe there's a more
- # elegant way around this, but this is the only case where we need to own
- # objects in a dictionary (that is itself in a list), and three lines for
- # a one-off isn't that big a deal.
- if 'projectReferences' in self._properties:
- for reference in self._properties['projectReferences']:
- children.append(reference['ProductGroup'])
-
- return children
-
- def PBXProjectAncestor(self):
- return self
-
- def _GroupByName(self, name):
- if not 'mainGroup' in self._properties:
- self.SetProperty('mainGroup', PBXGroup())
-
- main_group = self._properties['mainGroup']
- group = main_group.GetChildByName(name)
- if group is None:
- group = PBXGroup({'name': name})
- main_group.AppendChild(group)
-
- return group
-
- # SourceGroup and ProductsGroup are created by default in Xcode's own
- # templates.
- def SourceGroup(self):
- return self._GroupByName('Source')
-
- def ProductsGroup(self):
- return self._GroupByName('Products')
-
- # IntermediatesGroup is used to collect source-like files that are generated
- # by rules or script phases and are placed in intermediate directories such
- # as DerivedSources.
- def IntermediatesGroup(self):
- return self._GroupByName('Intermediates')
-
- # FrameworksGroup and ProjectsGroup are top-level groups used to collect
- # frameworks and projects.
- def FrameworksGroup(self):
- return self._GroupByName('Frameworks')
-
- def ProjectsGroup(self):
- return self._GroupByName('Projects')
-
- def RootGroupForPath(self, path):
- """Returns a PBXGroup child of this object to which path should be added.
-
- This method is intended to choose between SourceGroup and
- IntermediatesGroup on the basis of whether path is present in a source
- directory or an intermediates directory. For the purposes of this
- determination, any path located within a derived file directory such as
- PROJECT_DERIVED_FILE_DIR is treated as being in an intermediates
- directory.
-
- The returned value is a two-element tuple. The first element is the
- PBXGroup, and the second element specifies whether that group should be
- organized hierarchically (True) or as a single flat list (False).
- """
-
- # TODO(mark): make this a class variable and bind to self on call?
- # Also, this list is nowhere near exhaustive.
- # INTERMEDIATE_DIR and SHARED_INTERMEDIATE_DIR are used by
- # gyp.generator.xcode. There should probably be some way for that module
- # to push the names in, rather than having to hard-code them here.
- source_tree_groups = {
- 'DERIVED_FILE_DIR': (self.IntermediatesGroup, True),
- 'INTERMEDIATE_DIR': (self.IntermediatesGroup, True),
- 'PROJECT_DERIVED_FILE_DIR': (self.IntermediatesGroup, True),
- 'SHARED_INTERMEDIATE_DIR': (self.IntermediatesGroup, True),
- }
-
- (source_tree, path) = SourceTreeAndPathFromPath(path)
- if source_tree != None and source_tree in source_tree_groups:
- (group_func, hierarchical) = source_tree_groups[source_tree]
- group = group_func()
- return (group, hierarchical)
-
- # TODO(mark): make additional choices based on file extension.
-
- return (self.SourceGroup(), True)
-
- def AddOrGetFileInRootGroup(self, path):
- """Returns a PBXFileReference corresponding to path in the correct group
- according to RootGroupForPath's heuristics.
-
- If an existing PBXFileReference for path exists, it will be returned.
- Otherwise, one will be created and returned.
- """
-
- (group, hierarchical) = self.RootGroupForPath(path)
- return group.AddOrGetFileByPath(path, hierarchical)
-
- def RootGroupsTakeOverOnlyChildren(self, recurse=False):
- """Calls TakeOverOnlyChild for all groups in the main group."""
-
- for group in self._properties['mainGroup']._properties['children']:
- if isinstance(group, PBXGroup):
- group.TakeOverOnlyChild(recurse)
-
- def SortGroups(self):
- # Sort the children of the mainGroup (like "Source" and "Products")
- # according to their defined order.
- self._properties['mainGroup']._properties['children'] = \
- sorted(self._properties['mainGroup']._properties['children'],
- cmp=lambda x,y: x.CompareRootGroup(y))
-
- # Sort everything else by putting group before files, and going
- # alphabetically by name within sections of groups and files. SortGroup
- # is recursive.
- for group in self._properties['mainGroup']._properties['children']:
- if not isinstance(group, PBXGroup):
- continue
-
- if group.Name() == 'Products':
- # The Products group is a special case. Instead of sorting
- # alphabetically, sort things in the order of the targets that
- # produce the products. To do this, just build up a new list of
- # products based on the targets.
- products = []
- for target in self._properties['targets']:
- if not isinstance(target, PBXNativeTarget):
- continue
- product = target._properties['productReference']
- # Make sure that the product is already in the products group.
- assert product in group._properties['children']
- products.append(product)
-
- # Make sure that this process doesn't miss anything that was already
- # in the products group.
- assert len(products) == len(group._properties['children'])
- group._properties['children'] = products
- else:
- group.SortGroup()
-
- def AddOrGetProjectReference(self, other_pbxproject):
- """Add a reference to another project file (via PBXProject object) to this
- one.
-
- Returns [ProductGroup, ProjectRef]. ProductGroup is a PBXGroup object in
- this project file that contains a PBXReferenceProxy object for each
- product of each PBXNativeTarget in the other project file. ProjectRef is
- a PBXFileReference to the other project file.
-
- If this project file already references the other project file, the
- existing ProductGroup and ProjectRef are returned. The ProductGroup will
- still be updated if necessary.
- """
-
- if not 'projectReferences' in self._properties:
- self._properties['projectReferences'] = []
-
- product_group = None
- project_ref = None
-
- if not other_pbxproject in self._other_pbxprojects:
- # This project file isn't yet linked to the other one. Establish the
- # link.
- product_group = PBXGroup({'name': 'Products'})
-
- # ProductGroup is strong.
- product_group.parent = self
-
- # There's nothing unique about this PBXGroup, and if left alone, it will
- # wind up with the same set of hashables as all other PBXGroup objects
- # owned by the projectReferences list. Add the hashables of the
- # remote PBXProject that it's related to.
- product_group._hashables.extend(other_pbxproject.Hashables())
-
- # The other project reports its path as relative to the same directory
- # that this project's path is relative to. The other project's path
- # is not necessarily already relative to this project. Figure out the
- # pathname that this project needs to use to refer to the other one.
- this_path = posixpath.dirname(self.Path())
- projectDirPath = self.GetProperty('projectDirPath')
- if projectDirPath:
- if posixpath.isabs(projectDirPath[0]):
- this_path = projectDirPath
- else:
- this_path = posixpath.join(this_path, projectDirPath)
- other_path = gyp.common.RelativePath(other_pbxproject.Path(), this_path)
-
- # ProjectRef is weak (it's owned by the mainGroup hierarchy).
- project_ref = PBXFileReference({
- 'lastKnownFileType': 'wrapper.pb-project',
- 'path': other_path,
- 'sourceTree': 'SOURCE_ROOT',
- })
- self.ProjectsGroup().AppendChild(project_ref)
-
- ref_dict = {'ProductGroup': product_group, 'ProjectRef': project_ref}
- self._other_pbxprojects[other_pbxproject] = ref_dict
- self.AppendProperty('projectReferences', ref_dict)
-
- # Xcode seems to sort this list case-insensitively
- self._properties['projectReferences'] = \
- sorted(self._properties['projectReferences'], cmp=lambda x,y:
- cmp(x['ProjectRef'].Name().lower(),
- y['ProjectRef'].Name().lower()))
- else:
- # The link already exists. Pull out the relevnt data.
- project_ref_dict = self._other_pbxprojects[other_pbxproject]
- product_group = project_ref_dict['ProductGroup']
- project_ref = project_ref_dict['ProjectRef']
-
- self._SetUpProductReferences(other_pbxproject, product_group, project_ref)
-
- inherit_unique_symroot = self._AllSymrootsUnique(other_pbxproject, False)
- targets = other_pbxproject.GetProperty('targets')
- if all(self._AllSymrootsUnique(t, inherit_unique_symroot) for t in targets):
- dir_path = project_ref._properties['path']
- product_group._hashables.extend(dir_path)
-
- return [product_group, project_ref]
-
- def _AllSymrootsUnique(self, target, inherit_unique_symroot):
- # Returns True if all configurations have a unique 'SYMROOT' attribute.
- # The value of inherit_unique_symroot decides, if a configuration is assumed
- # to inherit a unique 'SYMROOT' attribute from its parent, if it doesn't
- # define an explicit value for 'SYMROOT'.
- symroots = self._DefinedSymroots(target)
- for s in self._DefinedSymroots(target):
- if (s is not None and not self._IsUniqueSymrootForTarget(s) or
- s is None and not inherit_unique_symroot):
- return False
- return True if symroots else inherit_unique_symroot
-
- def _DefinedSymroots(self, target):
- # Returns all values for the 'SYMROOT' attribute defined in all
- # configurations for this target. If any configuration doesn't define the
- # 'SYMROOT' attribute, None is added to the returned set. If all
- # configurations don't define the 'SYMROOT' attribute, an empty set is
- # returned.
- config_list = target.GetProperty('buildConfigurationList')
- symroots = set()
- for config in config_list.GetProperty('buildConfigurations'):
- setting = config.GetProperty('buildSettings')
- if 'SYMROOT' in setting:
- symroots.add(setting['SYMROOT'])
- else:
- symroots.add(None)
- if len(symroots) == 1 and None in symroots:
- return set()
- return symroots
-
- def _IsUniqueSymrootForTarget(self, symroot):
- # This method returns True if all configurations in target contain a
- # 'SYMROOT' attribute that is unique for the given target. A value is
- # unique, if the Xcode macro '$SRCROOT' appears in it in any form.
- uniquifier = ['$SRCROOT', '$(SRCROOT)']
- if any(x in symroot for x in uniquifier):
- return True
- return False
-
- def _SetUpProductReferences(self, other_pbxproject, product_group,
- project_ref):
- # TODO(mark): This only adds references to products in other_pbxproject
- # when they don't exist in this pbxproject. Perhaps it should also
- # remove references from this pbxproject that are no longer present in
- # other_pbxproject. Perhaps it should update various properties if they
- # change.
- for target in other_pbxproject._properties['targets']:
- if not isinstance(target, PBXNativeTarget):
- continue
-
- other_fileref = target._properties['productReference']
- if product_group.GetChildByRemoteObject(other_fileref) is None:
- # Xcode sets remoteInfo to the name of the target and not the name
- # of its product, despite this proxy being a reference to the product.
- container_item = PBXContainerItemProxy({
- 'containerPortal': project_ref,
- 'proxyType': 2,
- 'remoteGlobalIDString': other_fileref,
- 'remoteInfo': target.Name()
- })
- # TODO(mark): Does sourceTree get copied straight over from the other
- # project? Can the other project ever have lastKnownFileType here
- # instead of explicitFileType? (Use it if so?) Can path ever be
- # unset? (I don't think so.) Can other_fileref have name set, and
- # does it impact the PBXReferenceProxy if so? These are the questions
- # that perhaps will be answered one day.
- reference_proxy = PBXReferenceProxy({
- 'fileType': other_fileref._properties['explicitFileType'],
- 'path': other_fileref._properties['path'],
- 'sourceTree': other_fileref._properties['sourceTree'],
- 'remoteRef': container_item,
- })
-
- product_group.AppendChild(reference_proxy)
-
- def SortRemoteProductReferences(self):
- # For each remote project file, sort the associated ProductGroup in the
- # same order that the targets are sorted in the remote project file. This
- # is the sort order used by Xcode.
-
- def CompareProducts(x, y, remote_products):
- # x and y are PBXReferenceProxy objects. Go through their associated
- # PBXContainerItem to get the remote PBXFileReference, which will be
- # present in the remote_products list.
- x_remote = x._properties['remoteRef']._properties['remoteGlobalIDString']
- y_remote = y._properties['remoteRef']._properties['remoteGlobalIDString']
- x_index = remote_products.index(x_remote)
- y_index = remote_products.index(y_remote)
-
- # Use the order of each remote PBXFileReference in remote_products to
- # determine the sort order.
- return cmp(x_index, y_index)
-
- for other_pbxproject, ref_dict in self._other_pbxprojects.iteritems():
- # Build up a list of products in the remote project file, ordered the
- # same as the targets that produce them.
- remote_products = []
- for target in other_pbxproject._properties['targets']:
- if not isinstance(target, PBXNativeTarget):
- continue
- remote_products.append(target._properties['productReference'])
-
- # Sort the PBXReferenceProxy children according to the list of remote
- # products.
- product_group = ref_dict['ProductGroup']
- product_group._properties['children'] = sorted(
- product_group._properties['children'],
- cmp=lambda x, y, rp=remote_products: CompareProducts(x, y, rp))
-
-
-class XCProjectFile(XCObject):
- _schema = XCObject._schema.copy()
- _schema.update({
- 'archiveVersion': [0, int, 0, 1, 1],
- 'classes': [0, dict, 0, 1, {}],
- 'objectVersion': [0, int, 0, 1, 46],
- 'rootObject': [0, PBXProject, 1, 1],
- })
-
- def ComputeIDs(self, recursive=True, overwrite=True, hash=None):
- # Although XCProjectFile is implemented here as an XCObject, it's not a
- # proper object in the Xcode sense, and it certainly doesn't have its own
- # ID. Pass through an attempt to update IDs to the real root object.
- if recursive:
- self._properties['rootObject'].ComputeIDs(recursive, overwrite, hash)
-
- def Print(self, file=sys.stdout):
- self.VerifyHasRequiredProperties()
-
- # Add the special "objects" property, which will be caught and handled
- # separately during printing. This structure allows a fairly standard
- # loop do the normal printing.
- self._properties['objects'] = {}
- self._XCPrint(file, 0, '// !$*UTF8*$!\n')
- if self._should_print_single_line:
- self._XCPrint(file, 0, '{ ')
- else:
- self._XCPrint(file, 0, '{\n')
- for property, value in sorted(self._properties.iteritems(),
- cmp=lambda x, y: cmp(x, y)):
- if property == 'objects':
- self._PrintObjects(file)
- else:
- self._XCKVPrint(file, 1, property, value)
- self._XCPrint(file, 0, '}\n')
- del self._properties['objects']
-
- def _PrintObjects(self, file):
- if self._should_print_single_line:
- self._XCPrint(file, 0, 'objects = {')
- else:
- self._XCPrint(file, 1, 'objects = {\n')
-
- objects_by_class = {}
- for object in self.Descendants():
- if object == self:
- continue
- class_name = object.__class__.__name__
- if not class_name in objects_by_class:
- objects_by_class[class_name] = []
- objects_by_class[class_name].append(object)
-
- for class_name in sorted(objects_by_class):
- self._XCPrint(file, 0, '\n')
- self._XCPrint(file, 0, '/* Begin ' + class_name + ' section */\n')
- for object in sorted(objects_by_class[class_name],
- cmp=lambda x, y: cmp(x.id, y.id)):
- object.Print(file)
- self._XCPrint(file, 0, '/* End ' + class_name + ' section */\n')
-
- if self._should_print_single_line:
- self._XCPrint(file, 0, '}; ')
- else:
- self._XCPrint(file, 1, '};\n')
diff --git a/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py b/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py
deleted file mode 100644
index 5de8481..0000000
--- a/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Applies a fix to CR LF TAB handling in xml.dom.
-
-Fixes this: http://code.google.com/p/chromium/issues/detail?id=76293
-Working around this: http://bugs.python.org/issue5752
-TODO(bradnelson): Consider dropping this when we drop XP support.
-"""
-
-
-import xml.dom.minidom
-
-
-def _Replacement_write_data(writer, data, is_attrib=False):
- """Writes datachars to writer."""
- data = data.replace("&", "&amp;").replace("<", "&lt;")
- data = data.replace("\"", "&quot;").replace(">", "&gt;")
- if is_attrib:
- data = data.replace(
- "\r", "&#xD;").replace(
- "\n", "&#xA;").replace(
- "\t", "&#x9;")
- writer.write(data)
-
-
-def _Replacement_writexml(self, writer, indent="", addindent="", newl=""):
- # indent = current indentation
- # addindent = indentation to add to higher levels
- # newl = newline string
- writer.write(indent+"<" + self.tagName)
-
- attrs = self._get_attributes()
- a_names = attrs.keys()
- a_names.sort()
-
- for a_name in a_names:
- writer.write(" %s=\"" % a_name)
- _Replacement_write_data(writer, attrs[a_name].value, is_attrib=True)
- writer.write("\"")
- if self.childNodes:
- writer.write(">%s" % newl)
- for node in self.childNodes:
- node.writexml(writer, indent + addindent, addindent, newl)
- writer.write("%s</%s>%s" % (indent, self.tagName, newl))
- else:
- writer.write("/>%s" % newl)
-
-
-class XmlFix(object):
- """Object to manage temporary patching of xml.dom.minidom."""
-
- def __init__(self):
- # Preserve current xml.dom.minidom functions.
- self.write_data = xml.dom.minidom._write_data
- self.writexml = xml.dom.minidom.Element.writexml
- # Inject replacement versions of a function and a method.
- xml.dom.minidom._write_data = _Replacement_write_data
- xml.dom.minidom.Element.writexml = _Replacement_writexml
-
- def Cleanup(self):
- if self.write_data:
- xml.dom.minidom._write_data = self.write_data
- xml.dom.minidom.Element.writexml = self.writexml
- self.write_data = None
-
- def __del__(self):
- self.Cleanup()
diff --git a/node_modules/node-gyp/gyp/samples/samples b/node_modules/node-gyp/gyp/samples/samples
deleted file mode 100755
index 804b618..0000000
--- a/node_modules/node-gyp/gyp/samples/samples
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os.path
-import shutil
-import sys
-
-
-gyps = [
- 'app/app.gyp',
- 'base/base.gyp',
- 'build/temp_gyp/googleurl.gyp',
- 'build/all.gyp',
- 'build/common.gypi',
- 'build/external_code.gypi',
- 'chrome/test/security_tests/security_tests.gyp',
- 'chrome/third_party/hunspell/hunspell.gyp',
- 'chrome/chrome.gyp',
- 'media/media.gyp',
- 'net/net.gyp',
- 'printing/printing.gyp',
- 'sdch/sdch.gyp',
- 'skia/skia.gyp',
- 'testing/gmock.gyp',
- 'testing/gtest.gyp',
- 'third_party/bzip2/bzip2.gyp',
- 'third_party/icu38/icu38.gyp',
- 'third_party/libevent/libevent.gyp',
- 'third_party/libjpeg/libjpeg.gyp',
- 'third_party/libpng/libpng.gyp',
- 'third_party/libxml/libxml.gyp',
- 'third_party/libxslt/libxslt.gyp',
- 'third_party/lzma_sdk/lzma_sdk.gyp',
- 'third_party/modp_b64/modp_b64.gyp',
- 'third_party/npapi/npapi.gyp',
- 'third_party/sqlite/sqlite.gyp',
- 'third_party/zlib/zlib.gyp',
- 'v8/tools/gyp/v8.gyp',
- 'webkit/activex_shim/activex_shim.gyp',
- 'webkit/activex_shim_dll/activex_shim_dll.gyp',
- 'webkit/build/action_csspropertynames.py',
- 'webkit/build/action_cssvaluekeywords.py',
- 'webkit/build/action_jsconfig.py',
- 'webkit/build/action_makenames.py',
- 'webkit/build/action_maketokenizer.py',
- 'webkit/build/action_useragentstylesheets.py',
- 'webkit/build/rule_binding.py',
- 'webkit/build/rule_bison.py',
- 'webkit/build/rule_gperf.py',
- 'webkit/tools/test_shell/test_shell.gyp',
- 'webkit/webkit.gyp',
-]
-
-
-def Main(argv):
- if len(argv) != 3 or argv[1] not in ['push', 'pull']:
- print 'Usage: %s push/pull PATH_TO_CHROME' % argv[0]
- return 1
-
- path_to_chrome = argv[2]
-
- for g in gyps:
- chrome_file = os.path.join(path_to_chrome, g)
- local_file = os.path.join(os.path.dirname(argv[0]), os.path.split(g)[1])
- if argv[1] == 'push':
- print 'Copying %s to %s' % (local_file, chrome_file)
- shutil.copyfile(local_file, chrome_file)
- elif argv[1] == 'pull':
- print 'Copying %s to %s' % (chrome_file, local_file)
- shutil.copyfile(chrome_file, local_file)
- else:
- assert False
-
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(Main(sys.argv))
diff --git a/node_modules/node-gyp/gyp/samples/samples.bat b/node_modules/node-gyp/gyp/samples/samples.bat
deleted file mode 100644
index 778d9c9..0000000
--- a/node_modules/node-gyp/gyp/samples/samples.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@rem Copyright (c) 2009 Google Inc. All rights reserved.
-@rem Use of this source code is governed by a BSD-style license that can be
-@rem found in the LICENSE file.
-
-@python %~dp0/samples %*
diff --git a/node_modules/node-gyp/gyp/setup.py b/node_modules/node-gyp/gyp/setup.py
deleted file mode 100755
index 75a4255..0000000
--- a/node_modules/node-gyp/gyp/setup.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2009 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from setuptools import setup
-
-setup(
- name='gyp',
- version='0.1',
- description='Generate Your Projects',
- author='Chromium Authors',
- author_email='chromium-dev@googlegroups.com',
- url='http://code.google.com/p/gyp',
- package_dir = {'': 'pylib'},
- packages=['gyp', 'gyp.generator'],
- entry_points = {'console_scripts': ['gyp=gyp:script_main'] }
-)
diff --git a/node_modules/node-gyp/gyp/tools/README b/node_modules/node-gyp/gyp/tools/README
deleted file mode 100644
index 712e4ef..0000000
--- a/node_modules/node-gyp/gyp/tools/README
+++ /dev/null
@@ -1,15 +0,0 @@
-pretty_vcproj:
- Usage: pretty_vcproj.py "c:\path\to\vcproj.vcproj" [key1=value1] [key2=value2]
-
- They key/value pair are used to resolve vsprops name.
-
- For example, if I want to diff the base.vcproj project:
-
- pretty_vcproj.py z:\dev\src-chrome\src\base\build\base.vcproj "$(SolutionDir)=z:\dev\src-chrome\src\chrome\\" "$(CHROMIUM_BUILD)=" "$(CHROME_BUILD_TYPE)=" > orignal.txt
- pretty_vcproj.py z:\dev\src-chrome\src\base\base_gyp.vcproj "$(SolutionDir)=z:\dev\src-chrome\src\chrome\\" "$(CHROMIUM_BUILD)=" "$(CHROME_BUILD_TYPE)=" > gyp.txt
-
- And you can use your favorite diff tool to see the changes.
-
- Note: In the case of base.vcproj, the original vcproj is one level up the generated one.
- I suggest you do a search and replace for '"..\' and replace it with '"' in original.txt
- before you perform the diff. \ No newline at end of file
diff --git a/node_modules/node-gyp/gyp/tools/Xcode/README b/node_modules/node-gyp/gyp/tools/Xcode/README
deleted file mode 100644
index 2492a2c..0000000
--- a/node_modules/node-gyp/gyp/tools/Xcode/README
+++ /dev/null
@@ -1,5 +0,0 @@
-Specifications contains syntax formatters for Xcode 3. These do not appear to be supported yet on Xcode 4. To use these with Xcode 3 please install both the gyp.pbfilespec and gyp.xclangspec files in
-
-~/Library/Application Support/Developer/Shared/Xcode/Specifications/
-
-and restart Xcode. \ No newline at end of file
diff --git a/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.pbfilespec b/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.pbfilespec
deleted file mode 100644
index 85e2e26..0000000
--- a/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.pbfilespec
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- gyp.pbfilespec
- GYP source file spec for Xcode 3
-
- There is not much documentation available regarding the format
- of .pbfilespec files. As a starting point, see for instance the
- outdated documentation at:
- http://maxao.free.fr/xcode-plugin-interface/specifications.html
- and the files in:
- /Developer/Library/PrivateFrameworks/XcodeEdit.framework/Versions/A/Resources/
-
- Place this file in directory:
- ~/Library/Application Support/Developer/Shared/Xcode/Specifications/
-*/
-
-(
- {
- Identifier = sourcecode.gyp;
- BasedOn = sourcecode;
- Name = "GYP Files";
- Extensions = ("gyp", "gypi");
- MIMETypes = ("text/gyp");
- Language = "xcode.lang.gyp";
- IsTextFile = YES;
- IsSourceFile = YES;
- }
-)
diff --git a/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec b/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
deleted file mode 100644
index 3b3506d..0000000
--- a/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- Copyright (c) 2011 Google Inc. All rights reserved.
- Use of this source code is governed by a BSD-style license that can be
- found in the LICENSE file.
-
- gyp.xclangspec
- GYP language specification for Xcode 3
-
- There is not much documentation available regarding the format
- of .xclangspec files. As a starting point, see for instance the
- outdated documentation at:
- http://maxao.free.fr/xcode-plugin-interface/specifications.html
- and the files in:
- /Developer/Library/PrivateFrameworks/XcodeEdit.framework/Versions/A/Resources/
-
- Place this file in directory:
- ~/Library/Application Support/Developer/Shared/Xcode/Specifications/
-*/
-
-(
-
- {
- Identifier = "xcode.lang.gyp.keyword";
- Syntax = {
- Words = (
- "and",
- "or",
- "<!",
- "<",
- );
- Type = "xcode.syntax.keyword";
- };
- },
-
- {
- Identifier = "xcode.lang.gyp.target.declarator";
- Syntax = {
- Words = (
- "'target_name'",
- );
- Type = "xcode.syntax.identifier.type";
- };
- },
-
- {
- Identifier = "xcode.lang.gyp.string.singlequote";
- Syntax = {
- IncludeRules = (
- "xcode.lang.string",
- "xcode.lang.gyp.keyword",
- "xcode.lang.number",
- );
- Start = "'";
- End = "'";
- };
- },
-
- {
- Identifier = "xcode.lang.gyp.comma";
- Syntax = {
- Words = ( ",", );
-
- };
- },
-
- {
- Identifier = "xcode.lang.gyp";
- Description = "GYP Coloring";
- BasedOn = "xcode.lang.simpleColoring";
- IncludeInMenu = YES;
- Name = "GYP";
- Syntax = {
- Tokenizer = "xcode.lang.gyp.lexer.toplevel";
- IncludeRules = (
- "xcode.lang.gyp.dictionary",
- );
- Type = "xcode.syntax.plain";
- };
- },
-
- // The following rule returns tokens to the other rules
- {
- Identifier = "xcode.lang.gyp.lexer";
- Syntax = {
- IncludeRules = (
- "xcode.lang.gyp.comment",
- "xcode.lang.string",
- 'xcode.lang.gyp.targetname.declarator',
- "xcode.lang.gyp.string.singlequote",
- "xcode.lang.number",
- "xcode.lang.gyp.comma",
- );
- };
- },
-
- {
- Identifier = "xcode.lang.gyp.lexer.toplevel";
- Syntax = {
- IncludeRules = (
- "xcode.lang.gyp.comment",
- );
- };
- },
-
- {
- Identifier = "xcode.lang.gyp.assignment";
- Syntax = {
- Tokenizer = "xcode.lang.gyp.lexer";
- Rules = (
- "xcode.lang.gyp.assignment.lhs",
- ":",
- "xcode.lang.gyp.assignment.rhs",
- );
- };
-
- },
-
- {
- Identifier = "xcode.lang.gyp.target.declaration";
- Syntax = {
- Tokenizer = "xcode.lang.gyp.lexer";
- Rules = (
- "xcode.lang.gyp.target.declarator",
- ":",
- "xcode.lang.gyp.target.name",
- );
- };
- },
-
- {
- Identifier = "xcode.lang.gyp.target.name";
- Syntax = {
- Tokenizer = "xcode.lang.gyp.lexer";
- Rules = (
- "xcode.lang.gyp.string.singlequote",
- );
- Type = "xcode.syntax.definition.function";
- };
- },
-
- {
- Identifier = "xcode.lang.gyp.assignment.lhs";
- Syntax = {
- Tokenizer = "xcode.lang.gyp.lexer";
- Rules = (
- "xcode.lang.gyp.string.singlequote",
- );
- Type = "xcode.syntax.identifier.type";
- };
- },
-
- {
- Identifier = "xcode.lang.gyp.assignment.rhs";
- Syntax = {
- Tokenizer = "xcode.lang.gyp.lexer";
- Rules = (
- "xcode.lang.gyp.string.singlequote?",
- "xcode.lang.gyp.array?",
- "xcode.lang.gyp.dictionary?",
- "xcode.lang.number?",
- );
- };
- },
-
- {
- Identifier = "xcode.lang.gyp.dictionary";
- Syntax = {
- Tokenizer = "xcode.lang.gyp.lexer";
- Start = "{";
- End = "}";
- Foldable = YES;
- Recursive = YES;
- IncludeRules = (
- "xcode.lang.gyp.target.declaration",
- "xcode.lang.gyp.assignment",
- );
- };
- },
-
- {
- Identifier = "xcode.lang.gyp.array";
- Syntax = {
- Tokenizer = "xcode.lang.gyp.lexer";
- Start = "[";
- End = "]";
- Foldable = YES;
- Recursive = YES;
- IncludeRules = (
- "xcode.lang.gyp.array",
- "xcode.lang.gyp.dictionary",
- "xcode.lang.gyp.string.singlequote",
- );
- };
- },
-
- {
- Identifier = "xcode.lang.gyp.todo.mark";
- Syntax = {
- StartChars = "T";
- Match = (
- "^\(TODO\(.*\):[ \t]+.*\)$", // include "TODO: " in the markers list
- );
- // This is the order of captures. All of the match strings above need the same order.
- CaptureTypes = (
- "xcode.syntax.mark"
- );
- Type = "xcode.syntax.comment";
- };
- },
-
- {
- Identifier = "xcode.lang.gyp.comment";
- BasedOn = "xcode.lang.comment"; // for text macros
- Syntax = {
- Start = "#";
- End = "\n";
- IncludeRules = (
- "xcode.lang.url",
- "xcode.lang.url.mail",
- "xcode.lang.comment.mark",
- "xcode.lang.gyp.todo.mark",
- );
- Type = "xcode.syntax.comment";
- };
- },
-)
diff --git a/node_modules/node-gyp/gyp/tools/emacs/README b/node_modules/node-gyp/gyp/tools/emacs/README
deleted file mode 100644
index eeef39f..0000000
--- a/node_modules/node-gyp/gyp/tools/emacs/README
+++ /dev/null
@@ -1,12 +0,0 @@
-How to install gyp-mode for emacs:
-
-Add the following to your ~/.emacs (replace ... with the path to your gyp
-checkout).
-
-(setq load-path (cons ".../tools/emacs" load-path))
-(require 'gyp)
-
-Restart emacs (or eval-region the added lines) and you should be all set.
-
-Please note that ert is required for running the tests, which is included in
-Emacs 24, or available separately from https://github.com/ohler/ert
diff --git a/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el b/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el
deleted file mode 100644
index 11b8497..0000000
--- a/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el
+++ /dev/null
@@ -1,63 +0,0 @@
-;;; gyp-tests.el - unit tests for gyp-mode.
-
-;; Copyright (c) 2012 Google Inc. All rights reserved.
-;; Use of this source code is governed by a BSD-style license that can be
-;; found in the LICENSE file.
-
-;; The recommended way to run these tests is to run them from the command-line,
-;; with the run-unit-tests.sh script.
-
-(require 'cl)
-(require 'ert)
-(require 'gyp)
-
-(defconst samples (directory-files "testdata" t ".gyp$")
- "List of golden samples to check")
-
-(defun fontify (filename)
- (with-temp-buffer
- (insert-file-contents-literally filename)
- (gyp-mode)
- (font-lock-fontify-buffer)
- (buffer-string)))
-
-(defun read-golden-sample (filename)
- (with-temp-buffer
- (insert-file-contents-literally (concat filename ".fontified"))
- (read (current-buffer))))
-
-(defun equivalent-face (face)
- "For the purposes of face comparison, we're not interested in the
- differences between certain faces. For example, the difference between
- font-lock-comment-delimiter and font-lock-comment-face."
- (case face
- ((font-lock-comment-delimiter-face) font-lock-comment-face)
- (t face)))
-
-(defun text-face-properties (s)
- "Extract the text properties from s"
- (let ((result (list t)))
- (dotimes (i (length s))
- (setq result (cons (equivalent-face (get-text-property i 'face s))
- result)))
- (nreverse result)))
-
-(ert-deftest test-golden-samples ()
- "Check that fontification produces the same results as the golden samples"
- (dolist (sample samples)
- (let ((golden (read-golden-sample sample))
- (fontified (fontify sample)))
- (should (equal golden fontified))
- (should (equal (text-face-properties golden)
- (text-face-properties fontified))))))
-
-(defun create-golden-sample (filename)
- "Create a golden sample by fontifying filename and writing out the printable
- representation of the fontified buffer (with text properties) to the
- FILENAME.fontified"
- (with-temp-file (concat filename ".fontified")
- (print (fontify filename) (current-buffer))))
-
-(defun create-golden-samples ()
- "Recreate the golden samples"
- (dolist (sample samples) (create-golden-sample sample)))
diff --git a/node_modules/node-gyp/gyp/tools/emacs/gyp.el b/node_modules/node-gyp/gyp/tools/emacs/gyp.el
deleted file mode 100644
index b98b155..0000000
--- a/node_modules/node-gyp/gyp/tools/emacs/gyp.el
+++ /dev/null
@@ -1,275 +0,0 @@
-;;; gyp.el - font-lock-mode support for gyp files.
-
-;; Copyright (c) 2012 Google Inc. All rights reserved.
-;; Use of this source code is governed by a BSD-style license that can be
-;; found in the LICENSE file.
-
-;; Put this somewhere in your load-path and
-;; (require 'gyp)
-
-(require 'python)
-(require 'cl)
-
-(when (string-match "python-mode.el" (symbol-file 'python-mode 'defun))
- (error (concat "python-mode must be loaded from python.el (bundled with "
- "recent emacsen), not from the older and less maintained "
- "python-mode.el")))
-
-(defadvice python-indent-calculate-levels (after gyp-outdent-closing-parens
- activate)
- "De-indent closing parens, braces, and brackets in gyp-mode."
- (when (and (eq major-mode 'gyp-mode)
- (string-match "^ *[])}][],)}]* *$"
- (buffer-substring-no-properties
- (line-beginning-position) (line-end-position))))
- (setf (first python-indent-levels)
- (- (first python-indent-levels) python-continuation-offset))))
-
-(defadvice python-indent-guess-indent-offset (around
- gyp-indent-guess-indent-offset
- activate)
- "Guess correct indent offset in gyp-mode."
- (or (and (not (eq major-mode 'gyp-mode))
- ad-do-it)
- (save-excursion
- (save-restriction
- (widen)
- (goto-char (point-min))
- ;; Find first line ending with an opening brace that is not a comment.
- (or (and (re-search-forward "\\(^[[{]$\\|^.*[^#].*[[{]$\\)")
- (forward-line)
- (/= (current-indentation) 0)
- (set (make-local-variable 'python-indent-offset)
- (current-indentation))
- (set (make-local-variable 'python-continuation-offset)
- (current-indentation)))
- (message "Can't guess gyp indent offset, using default: %s"
- python-continuation-offset))))))
-
-(define-derived-mode gyp-mode python-mode "Gyp"
- "Major mode for editing .gyp files. See http://code.google.com/p/gyp/"
- ;; gyp-parse-history is a stack of (POSITION . PARSE-STATE) tuples,
- ;; with greater positions at the top of the stack. PARSE-STATE
- ;; is a list of section symbols (see gyp-section-name and gyp-parse-to)
- ;; with most nested section symbol at the front of the list.
- (set (make-local-variable 'gyp-parse-history) '((1 . (list))))
- (gyp-add-font-lock-keywords))
-
-(defun gyp-set-indentation ()
- "Hook function to configure python indentation to suit gyp mode."
- (set (make-local-variable 'python-indent-offset) 2)
- (set (make-local-variable 'python-continuation-offset) 2)
- (set (make-local-variable 'python-indent-guess-indent-offset) t)
- (python-indent-guess-indent-offset))
-
-(add-hook 'gyp-mode-hook 'gyp-set-indentation)
-
-(add-to-list 'auto-mode-alist '("\\.gyp\\'" . gyp-mode))
-(add-to-list 'auto-mode-alist '("\\.gypi\\'" . gyp-mode))
-(add-to-list 'auto-mode-alist '("/\\.gclient\\'" . gyp-mode))
-
-;;; Font-lock support
-
-(defconst gyp-dependencies-regexp
- (regexp-opt (list "dependencies" "export_dependent_settings"))
- "Regular expression to introduce 'dependencies' section")
-
-(defconst gyp-sources-regexp
- (regexp-opt (list "action" "files" "include_dirs" "includes" "inputs"
- "libraries" "outputs" "sources"))
- "Regular expression to introduce 'sources' sections")
-
-(defconst gyp-conditions-regexp
- (regexp-opt (list "conditions" "target_conditions"))
- "Regular expression to introduce conditions sections")
-
-(defconst gyp-variables-regexp
- "^variables"
- "Regular expression to introduce variables sections")
-
-(defconst gyp-defines-regexp
- "^defines"
- "Regular expression to introduce 'defines' sections")
-
-(defconst gyp-targets-regexp
- "^targets"
- "Regular expression to introduce 'targets' sections")
-
-(defun gyp-section-name (section)
- "Map the sections we are interested in from SECTION to symbol.
-
- SECTION is a string from the buffer that introduces a section. The result is
- a symbol representing the kind of section.
-
- This allows us to treat (for the purposes of font-lock) several different
- section names as the same kind of section. For example, a 'sources section
- can be introduced by the 'sources', 'inputs', 'outputs' keyword.
-
- 'other is the default section kind when a more specific match is not made."
- (cond ((string-match-p gyp-dependencies-regexp section) 'dependencies)
- ((string-match-p gyp-sources-regexp section) 'sources)
- ((string-match-p gyp-variables-regexp section) 'variables)
- ((string-match-p gyp-conditions-regexp section) 'conditions)
- ((string-match-p gyp-targets-regexp section) 'targets)
- ((string-match-p gyp-defines-regexp section) 'defines)
- (t 'other)))
-
-(defun gyp-invalidate-parse-states-after (target-point)
- "Erase any parse information after target-point."
- (while (> (caar gyp-parse-history) target-point)
- (setq gyp-parse-history (cdr gyp-parse-history))))
-
-(defun gyp-parse-point ()
- "The point of the last parse state added by gyp-parse-to."
- (caar gyp-parse-history))
-
-(defun gyp-parse-sections ()
- "A list of section symbols holding at the last parse state point."
- (cdar gyp-parse-history))
-
-(defun gyp-inside-dictionary-p ()
- "Predicate returning true if the parser is inside a dictionary."
- (not (eq (cadar gyp-parse-history) 'list)))
-
-(defun gyp-add-parse-history (point sections)
- "Add parse state SECTIONS to the parse history at POINT so that parsing can be
- resumed instantly."
- (while (>= (caar gyp-parse-history) point)
- (setq gyp-parse-history (cdr gyp-parse-history)))
- (setq gyp-parse-history (cons (cons point sections) gyp-parse-history)))
-
-(defun gyp-parse-to (target-point)
- "Parses from (point) to TARGET-POINT adding the parse state information to
- gyp-parse-state-history. Parsing stops if TARGET-POINT is reached or if a
- string literal has been parsed. Returns nil if no further parsing can be
- done, otherwise returns the position of the start of a parsed string, leaving
- the point at the end of the string."
- (let ((parsing t)
- string-start)
- (while parsing
- (setq string-start nil)
- ;; Parse up to a character that starts a sexp, or if the nesting
- ;; level decreases.
- (let ((state (parse-partial-sexp (gyp-parse-point)
- target-point
- -1
- t))
- (sections (gyp-parse-sections)))
- (if (= (nth 0 state) -1)
- (setq sections (cdr sections)) ; pop out a level
- (cond ((looking-at-p "['\"]") ; a string
- (setq string-start (point))
- (goto-char (scan-sexps (point) 1))
- (if (gyp-inside-dictionary-p)
- ;; Look for sections inside a dictionary
- (let ((section (gyp-section-name
- (buffer-substring-no-properties
- (+ 1 string-start)
- (- (point) 1)))))
- (setq sections (cons section (cdr sections)))))
- ;; Stop after the string so it can be fontified.
- (setq target-point (point)))
- ((looking-at-p "{")
- ;; Inside a dictionary. Increase nesting.
- (forward-char 1)
- (setq sections (cons 'unknown sections)))
- ((looking-at-p "\\[")
- ;; Inside a list. Increase nesting
- (forward-char 1)
- (setq sections (cons 'list sections)))
- ((not (eobp))
- ;; other
- (forward-char 1))))
- (gyp-add-parse-history (point) sections)
- (setq parsing (< (point) target-point))))
- string-start))
-
-(defun gyp-section-at-point ()
- "Transform the last parse state, which is a list of nested sections and return
- the section symbol that should be used to determine font-lock information for
- the string. Can return nil indicating the string should not have any attached
- section."
- (let ((sections (gyp-parse-sections)))
- (cond
- ((eq (car sections) 'conditions)
- ;; conditions can occur in a variables section, but we still want to
- ;; highlight it as a keyword.
- nil)
- ((and (eq (car sections) 'list)
- (eq (cadr sections) 'list))
- ;; conditions and sources can have items in [[ ]]
- (caddr sections))
- (t (cadr sections)))))
-
-(defun gyp-section-match (limit)
- "Parse from (point) to LIMIT returning by means of match data what was
- matched. The group of the match indicates what style font-lock should apply.
- See also `gyp-add-font-lock-keywords'."
- (gyp-invalidate-parse-states-after (point))
- (let ((group nil)
- (string-start t))
- (while (and (< (point) limit)
- (not group)
- string-start)
- (setq string-start (gyp-parse-to limit))
- (if string-start
- (setq group (case (gyp-section-at-point)
- ('dependencies 1)
- ('variables 2)
- ('conditions 2)
- ('sources 3)
- ('defines 4)
- (nil nil)))))
- (if group
- (progn
- ;; Set the match data to indicate to the font-lock mechanism the
- ;; highlighting to be performed.
- (set-match-data (append (list string-start (point))
- (make-list (* (1- group) 2) nil)
- (list (1+ string-start) (1- (point)))))
- t))))
-
-;;; Please see http://code.google.com/p/gyp/wiki/GypLanguageSpecification for
-;;; canonical list of keywords.
-(defun gyp-add-font-lock-keywords ()
- "Add gyp-mode keywords to font-lock mechanism."
- ;; TODO(jknotten): Move all the keyword highlighting into gyp-section-match
- ;; so that we can do the font-locking in a single font-lock pass.
- (font-lock-add-keywords
- nil
- (list
- ;; Top-level keywords
- (list (concat "['\"]\\("
- (regexp-opt (list "action" "action_name" "actions" "cflags"
- "cflags_cc" "conditions" "configurations"
- "copies" "defines" "dependencies" "destination"
- "direct_dependent_settings"
- "export_dependent_settings" "extension" "files"
- "include_dirs" "includes" "inputs" "ldflags" "libraries"
- "link_settings" "mac_bundle" "message"
- "msvs_external_rule" "outputs" "product_name"
- "process_outputs_as_sources" "rules" "rule_name"
- "sources" "suppress_wildcard"
- "target_conditions" "target_defaults"
- "target_defines" "target_name" "toolsets"
- "targets" "type" "variables" "xcode_settings"))
- "[!/+=]?\\)") 1 'font-lock-keyword-face t)
- ;; Type of target
- (list (concat "['\"]\\("
- (regexp-opt (list "loadable_module" "static_library"
- "shared_library" "executable" "none"))
- "\\)") 1 'font-lock-type-face t)
- (list "\\(?:target\\|action\\)_name['\"]\\s-*:\\s-*['\"]\\([^ '\"]*\\)" 1
- 'font-lock-function-name-face t)
- (list 'gyp-section-match
- (list 1 'font-lock-function-name-face t t) ; dependencies
- (list 2 'font-lock-variable-name-face t t) ; variables, conditions
- (list 3 'font-lock-constant-face t t) ; sources
- (list 4 'font-lock-preprocessor-face t t)) ; preprocessor
- ;; Variable expansion
- (list "<@?(\\([^\n )]+\\))" 1 'font-lock-variable-name-face t)
- ;; Command expansion
- (list "<!@?(\\([^\n )]+\\))" 1 'font-lock-variable-name-face t)
- )))
-
-(provide 'gyp)
diff --git a/node_modules/node-gyp/gyp/tools/emacs/run-unit-tests.sh b/node_modules/node-gyp/gyp/tools/emacs/run-unit-tests.sh
deleted file mode 100755
index 6e62b9b..0000000
--- a/node_modules/node-gyp/gyp/tools/emacs/run-unit-tests.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-emacs --no-site-file --no-init-file --batch \
- --load ert.el --load gyp.el --load gyp-tests.el \
- -f ert-run-tests-batch-and-exit
diff --git a/node_modules/node-gyp/gyp/tools/emacs/testdata/media.gyp b/node_modules/node-gyp/gyp/tools/emacs/testdata/media.gyp
deleted file mode 100644
index 29300fe..0000000
--- a/node_modules/node-gyp/gyp/tools/emacs/testdata/media.gyp
+++ /dev/null
@@ -1,1105 +0,0 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'variables': {
- 'chromium_code': 1,
- # Override to dynamically link the PulseAudio library.
- 'use_pulseaudio%': 0,
- # Override to dynamically link the cras (ChromeOS audio) library.
- 'use_cras%': 0,
- },
- 'targets': [
- {
- 'target_name': 'media',
- 'type': '<(component)',
- 'dependencies': [
- 'yuv_convert',
- '../base/base.gyp:base',
- '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
- '../build/temp_gyp/googleurl.gyp:googleurl',
- '../crypto/crypto.gyp:crypto',
- '../third_party/openmax/openmax.gyp:il',
- '../ui/ui.gyp:ui',
- ],
- 'defines': [
- 'MEDIA_IMPLEMENTATION',
- ],
- 'include_dirs': [
- '..',
- ],
- 'sources': [
- 'audio/android/audio_manager_android.cc',
- 'audio/android/audio_manager_android.h',
- 'audio/android/audio_track_output_android.cc',
- 'audio/android/audio_track_output_android.h',
- 'audio/android/opensles_input.cc',
- 'audio/android/opensles_input.h',
- 'audio/android/opensles_output.cc',
- 'audio/android/opensles_output.h',
- 'audio/async_socket_io_handler.h',
- 'audio/async_socket_io_handler_posix.cc',
- 'audio/async_socket_io_handler_win.cc',
- 'audio/audio_buffers_state.cc',
- 'audio/audio_buffers_state.h',
- 'audio/audio_io.h',
- 'audio/audio_input_controller.cc',
- 'audio/audio_input_controller.h',
- 'audio/audio_input_stream_impl.cc',
- 'audio/audio_input_stream_impl.h',
- 'audio/audio_device_name.cc',
- 'audio/audio_device_name.h',
- 'audio/audio_manager.cc',
- 'audio/audio_manager.h',
- 'audio/audio_manager_base.cc',
- 'audio/audio_manager_base.h',
- 'audio/audio_output_controller.cc',
- 'audio/audio_output_controller.h',
- 'audio/audio_output_dispatcher.cc',
- 'audio/audio_output_dispatcher.h',
- 'audio/audio_output_dispatcher_impl.cc',
- 'audio/audio_output_dispatcher_impl.h',
- 'audio/audio_output_mixer.cc',
- 'audio/audio_output_mixer.h',
- 'audio/audio_output_proxy.cc',
- 'audio/audio_output_proxy.h',
- 'audio/audio_parameters.cc',
- 'audio/audio_parameters.h',
- 'audio/audio_util.cc',
- 'audio/audio_util.h',
- 'audio/cross_process_notification.cc',
- 'audio/cross_process_notification.h',
- 'audio/cross_process_notification_win.cc',
- 'audio/cross_process_notification_posix.cc',
- 'audio/fake_audio_input_stream.cc',
- 'audio/fake_audio_input_stream.h',
- 'audio/fake_audio_output_stream.cc',
- 'audio/fake_audio_output_stream.h',
- 'audio/linux/audio_manager_linux.cc',
- 'audio/linux/audio_manager_linux.h',
- 'audio/linux/alsa_input.cc',
- 'audio/linux/alsa_input.h',
- 'audio/linux/alsa_output.cc',
- 'audio/linux/alsa_output.h',
- 'audio/linux/alsa_util.cc',
- 'audio/linux/alsa_util.h',
- 'audio/linux/alsa_wrapper.cc',
- 'audio/linux/alsa_wrapper.h',
- 'audio/linux/cras_output.cc',
- 'audio/linux/cras_output.h',
- 'audio/openbsd/audio_manager_openbsd.cc',
- 'audio/openbsd/audio_manager_openbsd.h',
- 'audio/mac/audio_input_mac.cc',
- 'audio/mac/audio_input_mac.h',
- 'audio/mac/audio_low_latency_input_mac.cc',
- 'audio/mac/audio_low_latency_input_mac.h',
- 'audio/mac/audio_low_latency_output_mac.cc',
- 'audio/mac/audio_low_latency_output_mac.h',
- 'audio/mac/audio_manager_mac.cc',
- 'audio/mac/audio_manager_mac.h',
- 'audio/mac/audio_output_mac.cc',
- 'audio/mac/audio_output_mac.h',
- 'audio/null_audio_sink.cc',
- 'audio/null_audio_sink.h',
- 'audio/pulse/pulse_output.cc',
- 'audio/pulse/pulse_output.h',
- 'audio/sample_rates.cc',
- 'audio/sample_rates.h',
- 'audio/simple_sources.cc',
- 'audio/simple_sources.h',
- 'audio/win/audio_low_latency_input_win.cc',
- 'audio/win/audio_low_latency_input_win.h',
- 'audio/win/audio_low_latency_output_win.cc',
- 'audio/win/audio_low_latency_output_win.h',
- 'audio/win/audio_manager_win.cc',
- 'audio/win/audio_manager_win.h',
- 'audio/win/avrt_wrapper_win.cc',
- 'audio/win/avrt_wrapper_win.h',
- 'audio/win/device_enumeration_win.cc',
- 'audio/win/device_enumeration_win.h',
- 'audio/win/wavein_input_win.cc',
- 'audio/win/wavein_input_win.h',
- 'audio/win/waveout_output_win.cc',
- 'audio/win/waveout_output_win.h',
- 'base/android/media_jni_registrar.cc',
- 'base/android/media_jni_registrar.h',
- 'base/audio_decoder.cc',
- 'base/audio_decoder.h',
- 'base/audio_decoder_config.cc',
- 'base/audio_decoder_config.h',
- 'base/audio_renderer.h',
- 'base/audio_renderer_mixer.cc',
- 'base/audio_renderer_mixer.h',
- 'base/audio_renderer_mixer_input.cc',
- 'base/audio_renderer_mixer_input.h',
- 'base/bitstream_buffer.h',
- 'base/buffers.cc',
- 'base/buffers.h',
- 'base/byte_queue.cc',
- 'base/byte_queue.h',
- 'base/channel_layout.cc',
- 'base/channel_layout.h',
- 'base/clock.cc',
- 'base/clock.h',
- 'base/composite_filter.cc',
- 'base/composite_filter.h',
- 'base/data_buffer.cc',
- 'base/data_buffer.h',
- 'base/data_source.cc',
- 'base/data_source.h',
- 'base/decoder_buffer.cc',
- 'base/decoder_buffer.h',
- 'base/decrypt_config.cc',
- 'base/decrypt_config.h',
- 'base/decryptor.h',
- 'base/decryptor_client.h',
- 'base/demuxer.cc',
- 'base/demuxer.h',
- 'base/demuxer_stream.cc',
- 'base/demuxer_stream.h',
- 'base/djb2.cc',
- 'base/djb2.h',
- 'base/filter_collection.cc',
- 'base/filter_collection.h',
- 'base/filter_host.h',
- 'base/filters.cc',
- 'base/filters.h',
- 'base/h264_bitstream_converter.cc',
- 'base/h264_bitstream_converter.h',
- 'base/media.h',
- 'base/media_android.cc',
- 'base/media_export.h',
- 'base/media_log.cc',
- 'base/media_log.h',
- 'base/media_log_event.h',
- 'base/media_posix.cc',
- 'base/media_switches.cc',
- 'base/media_switches.h',
- 'base/media_win.cc',
- 'base/message_loop_factory.cc',
- 'base/message_loop_factory.h',
- 'base/pipeline.cc',
- 'base/pipeline.h',
- 'base/pipeline_status.cc',
- 'base/pipeline_status.h',
- 'base/ranges.cc',
- 'base/ranges.h',
- 'base/seekable_buffer.cc',
- 'base/seekable_buffer.h',
- 'base/state_matrix.cc',
- 'base/state_matrix.h',
- 'base/stream_parser.cc',
- 'base/stream_parser.h',
- 'base/stream_parser_buffer.cc',
- 'base/stream_parser_buffer.h',
- 'base/video_decoder.cc',
- 'base/video_decoder.h',
- 'base/video_decoder_config.cc',
- 'base/video_decoder_config.h',
- 'base/video_frame.cc',
- 'base/video_frame.h',
- 'base/video_renderer.h',
- 'base/video_util.cc',
- 'base/video_util.h',
- 'crypto/aes_decryptor.cc',
- 'crypto/aes_decryptor.h',
- 'ffmpeg/ffmpeg_common.cc',
- 'ffmpeg/ffmpeg_common.h',
- 'ffmpeg/file_protocol.cc',
- 'ffmpeg/file_protocol.h',
- 'filters/audio_file_reader.cc',
- 'filters/audio_file_reader.h',
- 'filters/audio_renderer_algorithm.cc',
- 'filters/audio_renderer_algorithm.h',
- 'filters/audio_renderer_impl.cc',
- 'filters/audio_renderer_impl.h',
- 'filters/bitstream_converter.cc',
- 'filters/bitstream_converter.h',
- 'filters/chunk_demuxer.cc',
- 'filters/chunk_demuxer.h',
- 'filters/chunk_demuxer_client.h',
- 'filters/dummy_demuxer.cc',
- 'filters/dummy_demuxer.h',
- 'filters/ffmpeg_audio_decoder.cc',
- 'filters/ffmpeg_audio_decoder.h',
- 'filters/ffmpeg_demuxer.cc',
- 'filters/ffmpeg_demuxer.h',
- 'filters/ffmpeg_h264_bitstream_converter.cc',
- 'filters/ffmpeg_h264_bitstream_converter.h',
- 'filters/ffmpeg_glue.cc',
- 'filters/ffmpeg_glue.h',
- 'filters/ffmpeg_video_decoder.cc',
- 'filters/ffmpeg_video_decoder.h',
- 'filters/file_data_source.cc',
- 'filters/file_data_source.h',
- 'filters/gpu_video_decoder.cc',
- 'filters/gpu_video_decoder.h',
- 'filters/in_memory_url_protocol.cc',
- 'filters/in_memory_url_protocol.h',
- 'filters/source_buffer_stream.cc',
- 'filters/source_buffer_stream.h',
- 'filters/video_frame_generator.cc',
- 'filters/video_frame_generator.h',
- 'filters/video_renderer_base.cc',
- 'filters/video_renderer_base.h',
- 'video/capture/fake_video_capture_device.cc',
- 'video/capture/fake_video_capture_device.h',
- 'video/capture/linux/video_capture_device_linux.cc',
- 'video/capture/linux/video_capture_device_linux.h',
- 'video/capture/mac/video_capture_device_mac.h',
- 'video/capture/mac/video_capture_device_mac.mm',
- 'video/capture/mac/video_capture_device_qtkit_mac.h',
- 'video/capture/mac/video_capture_device_qtkit_mac.mm',
- 'video/capture/video_capture.h',
- 'video/capture/video_capture_device.h',
- 'video/capture/video_capture_device_dummy.cc',
- 'video/capture/video_capture_device_dummy.h',
- 'video/capture/video_capture_proxy.cc',
- 'video/capture/video_capture_proxy.h',
- 'video/capture/video_capture_types.h',
- 'video/capture/win/filter_base_win.cc',
- 'video/capture/win/filter_base_win.h',
- 'video/capture/win/pin_base_win.cc',
- 'video/capture/win/pin_base_win.h',
- 'video/capture/win/sink_filter_observer_win.h',
- 'video/capture/win/sink_filter_win.cc',
- 'video/capture/win/sink_filter_win.h',
- 'video/capture/win/sink_input_pin_win.cc',
- 'video/capture/win/sink_input_pin_win.h',
- 'video/capture/win/video_capture_device_win.cc',
- 'video/capture/win/video_capture_device_win.h',
- 'video/picture.cc',
- 'video/picture.h',
- 'video/video_decode_accelerator.cc',
- 'video/video_decode_accelerator.h',
- 'webm/webm_constants.h',
- 'webm/webm_cluster_parser.cc',
- 'webm/webm_cluster_parser.h',
- 'webm/webm_content_encodings.cc',
- 'webm/webm_content_encodings.h',
- 'webm/webm_content_encodings_client.cc',
- 'webm/webm_content_encodings_client.h',
- 'webm/webm_info_parser.cc',
- 'webm/webm_info_parser.h',
- 'webm/webm_parser.cc',
- 'webm/webm_parser.h',
- 'webm/webm_stream_parser.cc',
- 'webm/webm_stream_parser.h',
- 'webm/webm_tracks_parser.cc',
- 'webm/webm_tracks_parser.h',
- ],
- 'direct_dependent_settings': {
- 'include_dirs': [
- '..',
- ],
- },
- 'conditions': [
- # Android doesn't use ffmpeg, so make the dependency conditional
- # and exclude the sources which depend on ffmpeg.
- ['OS != "android"', {
- 'dependencies': [
- '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
- ],
- }],
- ['OS == "android"', {
- 'sources!': [
- 'base/media_posix.cc',
- 'ffmpeg/ffmpeg_common.cc',
- 'ffmpeg/ffmpeg_common.h',
- 'ffmpeg/file_protocol.cc',
- 'ffmpeg/file_protocol.h',
- 'filters/audio_file_reader.cc',
- 'filters/audio_file_reader.h',
- 'filters/bitstream_converter.cc',
- 'filters/bitstream_converter.h',
- 'filters/chunk_demuxer.cc',
- 'filters/chunk_demuxer.h',
- 'filters/chunk_demuxer_client.h',
- 'filters/ffmpeg_audio_decoder.cc',
- 'filters/ffmpeg_audio_decoder.h',
- 'filters/ffmpeg_demuxer.cc',
- 'filters/ffmpeg_demuxer.h',
- 'filters/ffmpeg_h264_bitstream_converter.cc',
- 'filters/ffmpeg_h264_bitstream_converter.h',
- 'filters/ffmpeg_glue.cc',
- 'filters/ffmpeg_glue.h',
- 'filters/ffmpeg_video_decoder.cc',
- 'filters/ffmpeg_video_decoder.h',
- 'filters/gpu_video_decoder.cc',
- 'filters/gpu_video_decoder.h',
- 'webm/webm_cluster_parser.cc',
- 'webm/webm_cluster_parser.h',
- 'webm/webm_stream_parser.cc',
- 'webm/webm_stream_parser.h',
- ],
- }],
- # The below 'android' condition were added temporarily and should be
- # removed in downstream, because there is no Java environment setup in
- # upstream yet.
- ['OS == "android"', {
- 'sources!':[
- 'audio/android/audio_track_output_android.cc',
- ],
- 'sources':[
- 'audio/android/audio_track_output_stub_android.cc',
- ],
- 'link_settings': {
- 'libraries': [
- '-lOpenSLES',
- ],
- },
- }],
- ['OS=="linux" or OS=="freebsd" or OS=="solaris"', {
- 'link_settings': {
- 'libraries': [
- '-lasound',
- ],
- },
- }],
- ['OS=="openbsd"', {
- 'sources/': [ ['exclude', '/alsa_' ],
- ['exclude', '/audio_manager_linux' ] ],
- 'link_settings': {
- 'libraries': [
- ],
- },
- }],
- ['OS!="openbsd"', {
- 'sources!': [
- 'audio/openbsd/audio_manager_openbsd.cc',
- 'audio/openbsd/audio_manager_openbsd.h',
- ],
- }],
- ['OS=="linux"', {
- 'variables': {
- 'conditions': [
- ['sysroot!=""', {
- 'pkg-config': '../build/linux/pkg-config-wrapper "<(sysroot)" "<(target_arch)"',
- }, {
- 'pkg-config': 'pkg-config'
- }],
- ],
- },
- 'conditions': [
- ['use_cras == 1', {
- 'cflags': [
- '<!@(<(pkg-config) --cflags libcras)',
- ],
- 'link_settings': {
- 'libraries': [
- '<!@(<(pkg-config) --libs libcras)',
- ],
- },
- 'defines': [
- 'USE_CRAS',
- ],
- }, { # else: use_cras == 0
- 'sources!': [
- 'audio/linux/cras_output.cc',
- 'audio/linux/cras_output.h',
- ],
- }],
- ],
- }],
- ['os_posix == 1', {
- 'conditions': [
- ['use_pulseaudio == 1', {
- 'cflags': [
- '<!@(pkg-config --cflags libpulse)',
- ],
- 'link_settings': {
- 'libraries': [
- '<!@(pkg-config --libs-only-l libpulse)',
- ],
- },
- 'defines': [
- 'USE_PULSEAUDIO',
- ],
- }, { # else: use_pulseaudio == 0
- 'sources!': [
- 'audio/pulse/pulse_output.cc',
- 'audio/pulse/pulse_output.h',
- ],
- }],
- ],
- }],
- ['os_posix == 1 and OS != "android"', {
- # Video capture isn't supported in Android yet.
- 'sources!': [
- 'video/capture/video_capture_device_dummy.cc',
- 'video/capture/video_capture_device_dummy.h',
- ],
- }],
- ['OS=="mac"', {
- 'link_settings': {
- 'libraries': [
- '$(SDKROOT)/System/Library/Frameworks/AudioUnit.framework',
- '$(SDKROOT)/System/Library/Frameworks/AudioToolbox.framework',
- '$(SDKROOT)/System/Library/Frameworks/CoreAudio.framework',
- '$(SDKROOT)/System/Library/Frameworks/CoreVideo.framework',
- '$(SDKROOT)/System/Library/Frameworks/QTKit.framework',
- ],
- },
- }],
- ['OS=="win"', {
- 'sources!': [
- 'audio/pulse/pulse_output.cc',
- 'audio/pulse/pulse_output.h',
- 'video/capture/video_capture_device_dummy.cc',
- 'video/capture/video_capture_device_dummy.h',
- ],
- }],
- ['proprietary_codecs==1 or branding=="Chrome"', {
- 'sources': [
- 'mp4/avc.cc',
- 'mp4/avc.h',
- 'mp4/box_definitions.cc',
- 'mp4/box_definitions.h',
- 'mp4/box_reader.cc',
- 'mp4/box_reader.h',
- 'mp4/cenc.cc',
- 'mp4/cenc.h',
- 'mp4/mp4_stream_parser.cc',
- 'mp4/mp4_stream_parser.h',
- 'mp4/offset_byte_queue.cc',
- 'mp4/offset_byte_queue.h',
- 'mp4/track_run_iterator.cc',
- 'mp4/track_run_iterator.h',
- ],
- }],
- ],
- },
- {
- 'target_name': 'yuv_convert',
- 'type': 'static_library',
- 'include_dirs': [
- '..',
- ],
- 'conditions': [
- ['order_profiling != 0', {
- 'target_conditions' : [
- ['_toolset=="target"', {
- 'cflags!': [ '-finstrument-functions' ],
- }],
- ],
- }],
- [ 'target_arch == "ia32" or target_arch == "x64"', {
- 'dependencies': [
- 'yuv_convert_simd_x86',
- ],
- }],
- [ 'target_arch == "arm"', {
- 'dependencies': [
- 'yuv_convert_simd_arm',
- ],
- }],
- ],
- 'sources': [
- 'base/yuv_convert.cc',
- 'base/yuv_convert.h',
- ],
- },
- {
- 'target_name': 'yuv_convert_simd_x86',
- 'type': 'static_library',
- 'include_dirs': [
- '..',
- ],
- 'sources': [
- 'base/simd/convert_rgb_to_yuv_c.cc',
- 'base/simd/convert_rgb_to_yuv_sse2.cc',
- 'base/simd/convert_rgb_to_yuv_ssse3.asm',
- 'base/simd/convert_rgb_to_yuv_ssse3.cc',
- 'base/simd/convert_rgb_to_yuv_ssse3.inc',
- 'base/simd/convert_yuv_to_rgb_c.cc',
- 'base/simd/convert_yuv_to_rgb_x86.cc',
- 'base/simd/convert_yuv_to_rgb_mmx.asm',
- 'base/simd/convert_yuv_to_rgb_mmx.inc',
- 'base/simd/convert_yuv_to_rgb_sse.asm',
- 'base/simd/filter_yuv.h',
- 'base/simd/filter_yuv_c.cc',
- 'base/simd/filter_yuv_mmx.cc',
- 'base/simd/filter_yuv_sse2.cc',
- 'base/simd/linear_scale_yuv_to_rgb_mmx.asm',
- 'base/simd/linear_scale_yuv_to_rgb_mmx.inc',
- 'base/simd/linear_scale_yuv_to_rgb_sse.asm',
- 'base/simd/scale_yuv_to_rgb_mmx.asm',
- 'base/simd/scale_yuv_to_rgb_mmx.inc',
- 'base/simd/scale_yuv_to_rgb_sse.asm',
- 'base/simd/yuv_to_rgb_table.cc',
- 'base/simd/yuv_to_rgb_table.h',
- ],
- 'conditions': [
- ['order_profiling != 0', {
- 'target_conditions' : [
- ['_toolset=="target"', {
- 'cflags!': [ '-finstrument-functions' ],
- }],
- ],
- }],
- [ 'target_arch == "x64"', {
- # Source files optimized for X64 systems.
- 'sources': [
- 'base/simd/linear_scale_yuv_to_rgb_mmx_x64.asm',
- 'base/simd/scale_yuv_to_rgb_sse2_x64.asm',
- ],
- }],
- [ 'os_posix == 1 and OS != "mac" and OS != "android"', {
- 'cflags': [
- '-msse2',
- ],
- }],
- [ 'OS == "mac"', {
- 'configurations': {
- 'Debug': {
- 'xcode_settings': {
- # gcc on the mac builds horribly unoptimized sse code in debug
- # mode. Since this is rarely going to be debugged, run with full
- # optimizations in Debug as well as Release.
- 'GCC_OPTIMIZATION_LEVEL': '3', # -O3
- },
- },
- },
- }],
- [ 'OS=="win"', {
- 'variables': {
- 'yasm_flags': [
- '-DWIN32',
- '-DMSVC',
- '-DCHROMIUM',
- '-Isimd',
- ],
- },
- }],
- [ 'OS=="mac"', {
- 'variables': {
- 'yasm_flags': [
- '-DPREFIX',
- '-DMACHO',
- '-DCHROMIUM',
- '-Isimd',
- ],
- },
- }],
- [ 'os_posix==1 and OS!="mac"', {
- 'variables': {
- 'conditions': [
- [ 'target_arch=="ia32"', {
- 'yasm_flags': [
- '-DX86_32',
- '-DELF',
- '-DCHROMIUM',
- '-Isimd',
- ],
- }, {
- 'yasm_flags': [
- '-DARCH_X86_64',
- '-DELF',
- '-DPIC',
- '-DCHROMIUM',
- '-Isimd',
- ],
- }],
- ],
- },
- }],
- ],
- 'variables': {
- 'yasm_output_path': '<(SHARED_INTERMEDIATE_DIR)/media',
- },
- 'msvs_2010_disable_uldi_when_referenced': 1,
- 'includes': [
- '../third_party/yasm/yasm_compile.gypi',
- ],
- },
- {
- 'target_name': 'yuv_convert_simd_arm',
- 'type': 'static_library',
- 'include_dirs': [
- '..',
- ],
- 'sources': [
- 'base/simd/convert_rgb_to_yuv_c.cc',
- 'base/simd/convert_rgb_to_yuv.h',
- 'base/simd/convert_yuv_to_rgb_c.cc',
- 'base/simd/convert_yuv_to_rgb.h',
- 'base/simd/filter_yuv.h',
- 'base/simd/filter_yuv_c.cc',
- 'base/simd/yuv_to_rgb_table.cc',
- 'base/simd/yuv_to_rgb_table.h',
- ],
- },
- {
- 'target_name': 'media_unittests',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'media_test_support',
- 'yuv_convert',
- '../base/base.gyp:base',
- '../base/base.gyp:base_i18n',
- '../base/base.gyp:test_support_base',
- '../testing/gmock.gyp:gmock',
- '../testing/gtest.gyp:gtest',
- '../ui/ui.gyp:ui',
- ],
- 'sources': [
- 'audio/async_socket_io_handler_unittest.cc',
- 'audio/audio_input_controller_unittest.cc',
- 'audio/audio_input_device_unittest.cc',
- 'audio/audio_input_unittest.cc',
- 'audio/audio_input_volume_unittest.cc',
- 'audio/audio_low_latency_input_output_unittest.cc',
- 'audio/audio_output_controller_unittest.cc',
- 'audio/audio_output_proxy_unittest.cc',
- 'audio/audio_parameters_unittest.cc',
- 'audio/audio_util_unittest.cc',
- 'audio/cross_process_notification_unittest.cc',
- 'audio/linux/alsa_output_unittest.cc',
- 'audio/mac/audio_low_latency_input_mac_unittest.cc',
- 'audio/mac/audio_output_mac_unittest.cc',
- 'audio/simple_sources_unittest.cc',
- 'audio/win/audio_low_latency_input_win_unittest.cc',
- 'audio/win/audio_low_latency_output_win_unittest.cc',
- 'audio/win/audio_output_win_unittest.cc',
- 'base/audio_renderer_mixer_unittest.cc',
- 'base/audio_renderer_mixer_input_unittest.cc',
- 'base/buffers_unittest.cc',
- 'base/clock_unittest.cc',
- 'base/composite_filter_unittest.cc',
- 'base/data_buffer_unittest.cc',
- 'base/decoder_buffer_unittest.cc',
- 'base/djb2_unittest.cc',
- 'base/fake_audio_render_callback.cc',
- 'base/fake_audio_render_callback.h',
- 'base/filter_collection_unittest.cc',
- 'base/h264_bitstream_converter_unittest.cc',
- 'base/pipeline_unittest.cc',
- 'base/ranges_unittest.cc',
- 'base/run_all_unittests.cc',
- 'base/seekable_buffer_unittest.cc',
- 'base/state_matrix_unittest.cc',
- 'base/test_data_util.cc',
- 'base/test_data_util.h',
- 'base/video_frame_unittest.cc',
- 'base/video_util_unittest.cc',
- 'base/yuv_convert_unittest.cc',
- 'crypto/aes_decryptor_unittest.cc',
- 'ffmpeg/ffmpeg_common_unittest.cc',
- 'filters/audio_renderer_algorithm_unittest.cc',
- 'filters/audio_renderer_impl_unittest.cc',
- 'filters/bitstream_converter_unittest.cc',
- 'filters/chunk_demuxer_unittest.cc',
- 'filters/ffmpeg_audio_decoder_unittest.cc',
- 'filters/ffmpeg_decoder_unittest.h',
- 'filters/ffmpeg_demuxer_unittest.cc',
- 'filters/ffmpeg_glue_unittest.cc',
- 'filters/ffmpeg_h264_bitstream_converter_unittest.cc',
- 'filters/ffmpeg_video_decoder_unittest.cc',
- 'filters/file_data_source_unittest.cc',
- 'filters/pipeline_integration_test.cc',
- 'filters/pipeline_integration_test_base.cc',
- 'filters/source_buffer_stream_unittest.cc',
- 'filters/video_renderer_base_unittest.cc',
- 'video/capture/video_capture_device_unittest.cc',
- 'webm/cluster_builder.cc',
- 'webm/cluster_builder.h',
- 'webm/webm_cluster_parser_unittest.cc',
- 'webm/webm_content_encodings_client_unittest.cc',
- 'webm/webm_parser_unittest.cc',
- ],
- 'conditions': [
- ['os_posix==1 and OS!="mac"', {
- 'conditions': [
- ['linux_use_tcmalloc==1', {
- 'dependencies': [
- '../base/allocator/allocator.gyp:allocator',
- ],
- }],
- ],
- }],
- ['OS != "android"', {
- 'dependencies': [
- '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
- ],
- }],
- ['OS == "android"', {
- 'sources!': [
- 'audio/audio_input_volume_unittest.cc',
- 'base/test_data_util.cc',
- 'base/test_data_util.h',
- 'ffmpeg/ffmpeg_common_unittest.cc',
- 'filters/ffmpeg_audio_decoder_unittest.cc',
- 'filters/bitstream_converter_unittest.cc',
- 'filters/chunk_demuxer_unittest.cc',
- 'filters/ffmpeg_demuxer_unittest.cc',
- 'filters/ffmpeg_glue_unittest.cc',
- 'filters/ffmpeg_h264_bitstream_converter_unittest.cc',
- 'filters/ffmpeg_video_decoder_unittest.cc',
- 'filters/pipeline_integration_test.cc',
- 'filters/pipeline_integration_test_base.cc',
- 'mp4/mp4_stream_parser_unittest.cc',
- 'webm/webm_cluster_parser_unittest.cc',
- ],
- }],
- ['OS == "linux"', {
- 'conditions': [
- ['use_cras == 1', {
- 'sources': [
- 'audio/linux/cras_output_unittest.cc',
- ],
- 'defines': [
- 'USE_CRAS',
- ],
- }],
- ],
- }],
- [ 'target_arch=="ia32" or target_arch=="x64"', {
- 'sources': [
- 'base/simd/convert_rgb_to_yuv_unittest.cc',
- ],
- }],
- ['proprietary_codecs==1 or branding=="Chrome"', {
- 'sources': [
- 'mp4/avc_unittest.cc',
- 'mp4/box_reader_unittest.cc',
- 'mp4/mp4_stream_parser_unittest.cc',
- 'mp4/offset_byte_queue_unittest.cc',
- ],
- }],
- ],
- },
- {
- 'target_name': 'media_test_support',
- 'type': 'static_library',
- 'dependencies': [
- 'media',
- '../base/base.gyp:base',
- '../testing/gmock.gyp:gmock',
- '../testing/gtest.gyp:gtest',
- ],
- 'sources': [
- 'audio/test_audio_input_controller_factory.cc',
- 'audio/test_audio_input_controller_factory.h',
- 'base/mock_callback.cc',
- 'base/mock_callback.h',
- 'base/mock_data_source_host.cc',
- 'base/mock_data_source_host.h',
- 'base/mock_demuxer_host.cc',
- 'base/mock_demuxer_host.h',
- 'base/mock_filter_host.cc',
- 'base/mock_filter_host.h',
- 'base/mock_filters.cc',
- 'base/mock_filters.h',
- ],
- },
- {
- 'target_name': 'scaler_bench',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'yuv_convert',
- '../base/base.gyp:base',
- '../skia/skia.gyp:skia',
- ],
- 'sources': [
- 'tools/scaler_bench/scaler_bench.cc',
- ],
- },
- {
- 'target_name': 'qt_faststart',
- 'type': 'executable',
- 'sources': [
- 'tools/qt_faststart/qt_faststart.c'
- ],
- },
- {
- 'target_name': 'seek_tester',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- '../base/base.gyp:base',
- ],
- 'sources': [
- 'tools/seek_tester/seek_tester.cc',
- ],
- },
- ],
- 'conditions': [
- ['OS=="win"', {
- 'targets': [
- {
- 'target_name': 'player_wtl',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'yuv_convert',
- '../base/base.gyp:base',
- '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
- '../ui/ui.gyp:ui',
- ],
- 'include_dirs': [
- '<(DEPTH)/third_party/wtl/include',
- ],
- 'sources': [
- 'tools/player_wtl/list.h',
- 'tools/player_wtl/mainfrm.h',
- 'tools/player_wtl/movie.cc',
- 'tools/player_wtl/movie.h',
- 'tools/player_wtl/player_wtl.cc',
- 'tools/player_wtl/player_wtl.rc',
- 'tools/player_wtl/props.h',
- 'tools/player_wtl/seek.h',
- 'tools/player_wtl/resource.h',
- 'tools/player_wtl/view.h',
- ],
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'SubSystem': '2', # Set /SUBSYSTEM:WINDOWS
- },
- },
- 'defines': [
- '_CRT_SECURE_NO_WARNINGS=1',
- ],
- },
- ],
- }],
- ['OS == "win" or toolkit_uses_gtk == 1', {
- 'targets': [
- {
- 'target_name': 'shader_bench',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'yuv_convert',
- '../base/base.gyp:base',
- '../ui/gl/gl.gyp:gl',
- ],
- 'sources': [
- 'tools/shader_bench/shader_bench.cc',
- 'tools/shader_bench/cpu_color_painter.cc',
- 'tools/shader_bench/cpu_color_painter.h',
- 'tools/shader_bench/gpu_color_painter.cc',
- 'tools/shader_bench/gpu_color_painter.h',
- 'tools/shader_bench/gpu_painter.cc',
- 'tools/shader_bench/gpu_painter.h',
- 'tools/shader_bench/painter.cc',
- 'tools/shader_bench/painter.h',
- 'tools/shader_bench/window.cc',
- 'tools/shader_bench/window.h',
- ],
- 'conditions': [
- ['toolkit_uses_gtk == 1', {
- 'dependencies': [
- '../build/linux/system.gyp:gtk',
- ],
- 'sources': [
- 'tools/shader_bench/window_linux.cc',
- ],
- }],
- ['OS=="win"', {
- 'dependencies': [
- '../third_party/angle/src/build_angle.gyp:libEGL',
- '../third_party/angle/src/build_angle.gyp:libGLESv2',
- ],
- 'sources': [
- 'tools/shader_bench/window_win.cc',
- ],
- }],
- ],
- },
- ],
- }],
- ['OS == "linux" and target_arch != "arm"', {
- 'targets': [
- {
- 'target_name': 'tile_render_bench',
- 'type': 'executable',
- 'dependencies': [
- '../base/base.gyp:base',
- '../ui/gl/gl.gyp:gl',
- ],
- 'libraries': [
- '-lGL',
- '-ldl',
- ],
- 'sources': [
- 'tools/tile_render_bench/tile_render_bench.cc',
- ],
- },
- ],
- }],
- ['os_posix == 1 and OS != "mac" and OS != "android"', {
- 'targets': [
- {
- 'target_name': 'player_x11',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'yuv_convert',
- '../base/base.gyp:base',
- '../ui/gl/gl.gyp:gl',
- ],
- 'link_settings': {
- 'libraries': [
- '-ldl',
- '-lX11',
- '-lXrender',
- '-lXext',
- ],
- },
- 'sources': [
- 'tools/player_x11/data_source_logger.cc',
- 'tools/player_x11/data_source_logger.h',
- 'tools/player_x11/gl_video_renderer.cc',
- 'tools/player_x11/gl_video_renderer.h',
- 'tools/player_x11/player_x11.cc',
- 'tools/player_x11/x11_video_renderer.cc',
- 'tools/player_x11/x11_video_renderer.h',
- ],
- },
- ],
- }],
- ['OS == "android"', {
- 'targets': [
- {
- 'target_name': 'player_android',
- 'type': 'static_library',
- 'sources': [
- 'base/android/media_player_bridge.cc',
- 'base/android/media_player_bridge.h',
- ],
- 'dependencies': [
- '../base/base.gyp:base',
- ],
- 'include_dirs': [
- '<(SHARED_INTERMEDIATE_DIR)/media',
- ],
- 'actions': [
- {
- 'action_name': 'generate-jni-headers',
- 'inputs': [
- '../base/android/jni_generator/jni_generator.py',
- 'base/android/java/src/org/chromium/media/MediaPlayerListener.java',
- ],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/media/jni/media_player_listener_jni.h',
- ],
- 'action': [
- 'python',
- '<(DEPTH)/base/android/jni_generator/jni_generator.py',
- '-o',
- '<@(_inputs)',
- '<@(_outputs)',
- ],
- },
- ],
- },
- {
- 'target_name': 'media_java',
- 'type': 'none',
- 'dependencies': [ '../base/base.gyp:base_java' ],
- 'variables': {
- 'package_name': 'media',
- 'java_in_dir': 'base/android/java',
- },
- 'includes': [ '../build/java.gypi' ],
- },
-
- ],
- }, { # OS != "android"'
- # Android does not use ffmpeg, so disable the targets which require it.
- 'targets': [
- {
- 'target_name': 'ffmpeg_unittests',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'media_test_support',
- '../base/base.gyp:base',
- '../base/base.gyp:base_i18n',
- '../base/base.gyp:test_support_base',
- '../base/base.gyp:test_support_perf',
- '../testing/gtest.gyp:gtest',
- '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
- ],
- 'sources': [
- 'ffmpeg/ffmpeg_unittest.cc',
- ],
- 'conditions': [
- ['toolkit_uses_gtk == 1', {
- 'dependencies': [
- # Needed for the following #include chain:
- # base/run_all_unittests.cc
- # ../base/test_suite.h
- # gtk/gtk.h
- '../build/linux/system.gyp:gtk',
- ],
- 'conditions': [
- ['linux_use_tcmalloc==1', {
- 'dependencies': [
- '../base/allocator/allocator.gyp:allocator',
- ],
- }],
- ],
- }],
- ],
- },
- {
- 'target_name': 'ffmpeg_regression_tests',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'media_test_support',
- '../base/base.gyp:test_support_base',
- '../testing/gmock.gyp:gmock',
- '../testing/gtest.gyp:gtest',
- '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
- ],
- 'sources': [
- 'base/test_data_util.cc',
- 'base/run_all_unittests.cc',
- 'ffmpeg/ffmpeg_regression_tests.cc',
- 'filters/pipeline_integration_test_base.cc',
- ],
- 'conditions': [
- ['os_posix==1 and OS!="mac"', {
- 'conditions': [
- ['linux_use_tcmalloc==1', {
- 'dependencies': [
- '../base/allocator/allocator.gyp:allocator',
- ],
- }],
- ],
- }],
- ],
- },
- {
- 'target_name': 'ffmpeg_tests',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- '../base/base.gyp:base',
- '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
- ],
- 'sources': [
- 'test/ffmpeg_tests/ffmpeg_tests.cc',
- ],
- },
- {
- 'target_name': 'media_bench',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- '../base/base.gyp:base',
- '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
- ],
- 'sources': [
- 'tools/media_bench/media_bench.cc',
- ],
- },
- ],
- }]
- ],
-}
diff --git a/node_modules/node-gyp/gyp/tools/emacs/testdata/media.gyp.fontified b/node_modules/node-gyp/gyp/tools/emacs/testdata/media.gyp.fontified
deleted file mode 100644
index 962b7b2..0000000
--- a/node_modules/node-gyp/gyp/tools/emacs/testdata/media.gyp.fontified
+++ /dev/null
@@ -1,1107 +0,0 @@
-
-#("# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'variables': {
- 'chromium_code': 1,
- # Override to dynamically link the PulseAudio library.
- 'use_pulseaudio%': 0,
- # Override to dynamically link the cras (ChromeOS audio) library.
- 'use_cras%': 0,
- },
- 'targets': [
- {
- 'target_name': 'media',
- 'type': '<(component)',
- 'dependencies': [
- 'yuv_convert',
- '../base/base.gyp:base',
- '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
- '../build/temp_gyp/googleurl.gyp:googleurl',
- '../crypto/crypto.gyp:crypto',
- '../third_party/openmax/openmax.gyp:il',
- '../ui/ui.gyp:ui',
- ],
- 'defines': [
- 'MEDIA_IMPLEMENTATION',
- ],
- 'include_dirs': [
- '..',
- ],
- 'sources': [
- 'audio/android/audio_manager_android.cc',
- 'audio/android/audio_manager_android.h',
- 'audio/android/audio_track_output_android.cc',
- 'audio/android/audio_track_output_android.h',
- 'audio/android/opensles_input.cc',
- 'audio/android/opensles_input.h',
- 'audio/android/opensles_output.cc',
- 'audio/android/opensles_output.h',
- 'audio/async_socket_io_handler.h',
- 'audio/async_socket_io_handler_posix.cc',
- 'audio/async_socket_io_handler_win.cc',
- 'audio/audio_buffers_state.cc',
- 'audio/audio_buffers_state.h',
- 'audio/audio_io.h',
- 'audio/audio_input_controller.cc',
- 'audio/audio_input_controller.h',
- 'audio/audio_input_stream_impl.cc',
- 'audio/audio_input_stream_impl.h',
- 'audio/audio_device_name.cc',
- 'audio/audio_device_name.h',
- 'audio/audio_manager.cc',
- 'audio/audio_manager.h',
- 'audio/audio_manager_base.cc',
- 'audio/audio_manager_base.h',
- 'audio/audio_output_controller.cc',
- 'audio/audio_output_controller.h',
- 'audio/audio_output_dispatcher.cc',
- 'audio/audio_output_dispatcher.h',
- 'audio/audio_output_dispatcher_impl.cc',
- 'audio/audio_output_dispatcher_impl.h',
- 'audio/audio_output_mixer.cc',
- 'audio/audio_output_mixer.h',
- 'audio/audio_output_proxy.cc',
- 'audio/audio_output_proxy.h',
- 'audio/audio_parameters.cc',
- 'audio/audio_parameters.h',
- 'audio/audio_util.cc',
- 'audio/audio_util.h',
- 'audio/cross_process_notification.cc',
- 'audio/cross_process_notification.h',
- 'audio/cross_process_notification_win.cc',
- 'audio/cross_process_notification_posix.cc',
- 'audio/fake_audio_input_stream.cc',
- 'audio/fake_audio_input_stream.h',
- 'audio/fake_audio_output_stream.cc',
- 'audio/fake_audio_output_stream.h',
- 'audio/linux/audio_manager_linux.cc',
- 'audio/linux/audio_manager_linux.h',
- 'audio/linux/alsa_input.cc',
- 'audio/linux/alsa_input.h',
- 'audio/linux/alsa_output.cc',
- 'audio/linux/alsa_output.h',
- 'audio/linux/alsa_util.cc',
- 'audio/linux/alsa_util.h',
- 'audio/linux/alsa_wrapper.cc',
- 'audio/linux/alsa_wrapper.h',
- 'audio/linux/cras_output.cc',
- 'audio/linux/cras_output.h',
- 'audio/openbsd/audio_manager_openbsd.cc',
- 'audio/openbsd/audio_manager_openbsd.h',
- 'audio/mac/audio_input_mac.cc',
- 'audio/mac/audio_input_mac.h',
- 'audio/mac/audio_low_latency_input_mac.cc',
- 'audio/mac/audio_low_latency_input_mac.h',
- 'audio/mac/audio_low_latency_output_mac.cc',
- 'audio/mac/audio_low_latency_output_mac.h',
- 'audio/mac/audio_manager_mac.cc',
- 'audio/mac/audio_manager_mac.h',
- 'audio/mac/audio_output_mac.cc',
- 'audio/mac/audio_output_mac.h',
- 'audio/null_audio_sink.cc',
- 'audio/null_audio_sink.h',
- 'audio/pulse/pulse_output.cc',
- 'audio/pulse/pulse_output.h',
- 'audio/sample_rates.cc',
- 'audio/sample_rates.h',
- 'audio/simple_sources.cc',
- 'audio/simple_sources.h',
- 'audio/win/audio_low_latency_input_win.cc',
- 'audio/win/audio_low_latency_input_win.h',
- 'audio/win/audio_low_latency_output_win.cc',
- 'audio/win/audio_low_latency_output_win.h',
- 'audio/win/audio_manager_win.cc',
- 'audio/win/audio_manager_win.h',
- 'audio/win/avrt_wrapper_win.cc',
- 'audio/win/avrt_wrapper_win.h',
- 'audio/win/device_enumeration_win.cc',
- 'audio/win/device_enumeration_win.h',
- 'audio/win/wavein_input_win.cc',
- 'audio/win/wavein_input_win.h',
- 'audio/win/waveout_output_win.cc',
- 'audio/win/waveout_output_win.h',
- 'base/android/media_jni_registrar.cc',
- 'base/android/media_jni_registrar.h',
- 'base/audio_decoder.cc',
- 'base/audio_decoder.h',
- 'base/audio_decoder_config.cc',
- 'base/audio_decoder_config.h',
- 'base/audio_renderer.h',
- 'base/audio_renderer_mixer.cc',
- 'base/audio_renderer_mixer.h',
- 'base/audio_renderer_mixer_input.cc',
- 'base/audio_renderer_mixer_input.h',
- 'base/bitstream_buffer.h',
- 'base/buffers.cc',
- 'base/buffers.h',
- 'base/byte_queue.cc',
- 'base/byte_queue.h',
- 'base/channel_layout.cc',
- 'base/channel_layout.h',
- 'base/clock.cc',
- 'base/clock.h',
- 'base/composite_filter.cc',
- 'base/composite_filter.h',
- 'base/data_buffer.cc',
- 'base/data_buffer.h',
- 'base/data_source.cc',
- 'base/data_source.h',
- 'base/decoder_buffer.cc',
- 'base/decoder_buffer.h',
- 'base/decrypt_config.cc',
- 'base/decrypt_config.h',
- 'base/decryptor.h',
- 'base/decryptor_client.h',
- 'base/demuxer.cc',
- 'base/demuxer.h',
- 'base/demuxer_stream.cc',
- 'base/demuxer_stream.h',
- 'base/djb2.cc',
- 'base/djb2.h',
- 'base/filter_collection.cc',
- 'base/filter_collection.h',
- 'base/filter_host.h',
- 'base/filters.cc',
- 'base/filters.h',
- 'base/h264_bitstream_converter.cc',
- 'base/h264_bitstream_converter.h',
- 'base/media.h',
- 'base/media_android.cc',
- 'base/media_export.h',
- 'base/media_log.cc',
- 'base/media_log.h',
- 'base/media_log_event.h',
- 'base/media_posix.cc',
- 'base/media_switches.cc',
- 'base/media_switches.h',
- 'base/media_win.cc',
- 'base/message_loop_factory.cc',
- 'base/message_loop_factory.h',
- 'base/pipeline.cc',
- 'base/pipeline.h',
- 'base/pipeline_status.cc',
- 'base/pipeline_status.h',
- 'base/ranges.cc',
- 'base/ranges.h',
- 'base/seekable_buffer.cc',
- 'base/seekable_buffer.h',
- 'base/state_matrix.cc',
- 'base/state_matrix.h',
- 'base/stream_parser.cc',
- 'base/stream_parser.h',
- 'base/stream_parser_buffer.cc',
- 'base/stream_parser_buffer.h',
- 'base/video_decoder.cc',
- 'base/video_decoder.h',
- 'base/video_decoder_config.cc',
- 'base/video_decoder_config.h',
- 'base/video_frame.cc',
- 'base/video_frame.h',
- 'base/video_renderer.h',
- 'base/video_util.cc',
- 'base/video_util.h',
- 'crypto/aes_decryptor.cc',
- 'crypto/aes_decryptor.h',
- 'ffmpeg/ffmpeg_common.cc',
- 'ffmpeg/ffmpeg_common.h',
- 'ffmpeg/file_protocol.cc',
- 'ffmpeg/file_protocol.h',
- 'filters/audio_file_reader.cc',
- 'filters/audio_file_reader.h',
- 'filters/audio_renderer_algorithm.cc',
- 'filters/audio_renderer_algorithm.h',
- 'filters/audio_renderer_impl.cc',
- 'filters/audio_renderer_impl.h',
- 'filters/bitstream_converter.cc',
- 'filters/bitstream_converter.h',
- 'filters/chunk_demuxer.cc',
- 'filters/chunk_demuxer.h',
- 'filters/chunk_demuxer_client.h',
- 'filters/dummy_demuxer.cc',
- 'filters/dummy_demuxer.h',
- 'filters/ffmpeg_audio_decoder.cc',
- 'filters/ffmpeg_audio_decoder.h',
- 'filters/ffmpeg_demuxer.cc',
- 'filters/ffmpeg_demuxer.h',
- 'filters/ffmpeg_h264_bitstream_converter.cc',
- 'filters/ffmpeg_h264_bitstream_converter.h',
- 'filters/ffmpeg_glue.cc',
- 'filters/ffmpeg_glue.h',
- 'filters/ffmpeg_video_decoder.cc',
- 'filters/ffmpeg_video_decoder.h',
- 'filters/file_data_source.cc',
- 'filters/file_data_source.h',
- 'filters/gpu_video_decoder.cc',
- 'filters/gpu_video_decoder.h',
- 'filters/in_memory_url_protocol.cc',
- 'filters/in_memory_url_protocol.h',
- 'filters/source_buffer_stream.cc',
- 'filters/source_buffer_stream.h',
- 'filters/video_frame_generator.cc',
- 'filters/video_frame_generator.h',
- 'filters/video_renderer_base.cc',
- 'filters/video_renderer_base.h',
- 'video/capture/fake_video_capture_device.cc',
- 'video/capture/fake_video_capture_device.h',
- 'video/capture/linux/video_capture_device_linux.cc',
- 'video/capture/linux/video_capture_device_linux.h',
- 'video/capture/mac/video_capture_device_mac.h',
- 'video/capture/mac/video_capture_device_mac.mm',
- 'video/capture/mac/video_capture_device_qtkit_mac.h',
- 'video/capture/mac/video_capture_device_qtkit_mac.mm',
- 'video/capture/video_capture.h',
- 'video/capture/video_capture_device.h',
- 'video/capture/video_capture_device_dummy.cc',
- 'video/capture/video_capture_device_dummy.h',
- 'video/capture/video_capture_proxy.cc',
- 'video/capture/video_capture_proxy.h',
- 'video/capture/video_capture_types.h',
- 'video/capture/win/filter_base_win.cc',
- 'video/capture/win/filter_base_win.h',
- 'video/capture/win/pin_base_win.cc',
- 'video/capture/win/pin_base_win.h',
- 'video/capture/win/sink_filter_observer_win.h',
- 'video/capture/win/sink_filter_win.cc',
- 'video/capture/win/sink_filter_win.h',
- 'video/capture/win/sink_input_pin_win.cc',
- 'video/capture/win/sink_input_pin_win.h',
- 'video/capture/win/video_capture_device_win.cc',
- 'video/capture/win/video_capture_device_win.h',
- 'video/picture.cc',
- 'video/picture.h',
- 'video/video_decode_accelerator.cc',
- 'video/video_decode_accelerator.h',
- 'webm/webm_constants.h',
- 'webm/webm_cluster_parser.cc',
- 'webm/webm_cluster_parser.h',
- 'webm/webm_content_encodings.cc',
- 'webm/webm_content_encodings.h',
- 'webm/webm_content_encodings_client.cc',
- 'webm/webm_content_encodings_client.h',
- 'webm/webm_info_parser.cc',
- 'webm/webm_info_parser.h',
- 'webm/webm_parser.cc',
- 'webm/webm_parser.h',
- 'webm/webm_stream_parser.cc',
- 'webm/webm_stream_parser.h',
- 'webm/webm_tracks_parser.cc',
- 'webm/webm_tracks_parser.h',
- ],
- 'direct_dependent_settings': {
- 'include_dirs': [
- '..',
- ],
- },
- 'conditions': [
- # Android doesn't use ffmpeg, so make the dependency conditional
- # and exclude the sources which depend on ffmpeg.
- ['OS != \"android\"', {
- 'dependencies': [
- '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
- ],
- }],
- ['OS == \"android\"', {
- 'sources!': [
- 'base/media_posix.cc',
- 'ffmpeg/ffmpeg_common.cc',
- 'ffmpeg/ffmpeg_common.h',
- 'ffmpeg/file_protocol.cc',
- 'ffmpeg/file_protocol.h',
- 'filters/audio_file_reader.cc',
- 'filters/audio_file_reader.h',
- 'filters/bitstream_converter.cc',
- 'filters/bitstream_converter.h',
- 'filters/chunk_demuxer.cc',
- 'filters/chunk_demuxer.h',
- 'filters/chunk_demuxer_client.h',
- 'filters/ffmpeg_audio_decoder.cc',
- 'filters/ffmpeg_audio_decoder.h',
- 'filters/ffmpeg_demuxer.cc',
- 'filters/ffmpeg_demuxer.h',
- 'filters/ffmpeg_h264_bitstream_converter.cc',
- 'filters/ffmpeg_h264_bitstream_converter.h',
- 'filters/ffmpeg_glue.cc',
- 'filters/ffmpeg_glue.h',
- 'filters/ffmpeg_video_decoder.cc',
- 'filters/ffmpeg_video_decoder.h',
- 'filters/gpu_video_decoder.cc',
- 'filters/gpu_video_decoder.h',
- 'webm/webm_cluster_parser.cc',
- 'webm/webm_cluster_parser.h',
- 'webm/webm_stream_parser.cc',
- 'webm/webm_stream_parser.h',
- ],
- }],
- # The below 'android' condition were added temporarily and should be
- # removed in downstream, because there is no Java environment setup in
- # upstream yet.
- ['OS == \"android\"', {
- 'sources!':[
- 'audio/android/audio_track_output_android.cc',
- ],
- 'sources':[
- 'audio/android/audio_track_output_stub_android.cc',
- ],
- 'link_settings': {
- 'libraries': [
- '-lOpenSLES',
- ],
- },
- }],
- ['OS==\"linux\" or OS==\"freebsd\" or OS==\"solaris\"', {
- 'link_settings': {
- 'libraries': [
- '-lasound',
- ],
- },
- }],
- ['OS==\"openbsd\"', {
- 'sources/': [ ['exclude', '/alsa_' ],
- ['exclude', '/audio_manager_linux' ] ],
- 'link_settings': {
- 'libraries': [
- ],
- },
- }],
- ['OS!=\"openbsd\"', {
- 'sources!': [
- 'audio/openbsd/audio_manager_openbsd.cc',
- 'audio/openbsd/audio_manager_openbsd.h',
- ],
- }],
- ['OS==\"linux\"', {
- 'variables': {
- 'conditions': [
- ['sysroot!=\"\"', {
- 'pkg-config': '../build/linux/pkg-config-wrapper \"<(sysroot)\" \"<(target_arch)\"',
- }, {
- 'pkg-config': 'pkg-config'
- }],
- ],
- },
- 'conditions': [
- ['use_cras == 1', {
- 'cflags': [
- '<!@(<(pkg-config) --cflags libcras)',
- ],
- 'link_settings': {
- 'libraries': [
- '<!@(<(pkg-config) --libs libcras)',
- ],
- },
- 'defines': [
- 'USE_CRAS',
- ],
- }, { # else: use_cras == 0
- 'sources!': [
- 'audio/linux/cras_output.cc',
- 'audio/linux/cras_output.h',
- ],
- }],
- ],
- }],
- ['os_posix == 1', {
- 'conditions': [
- ['use_pulseaudio == 1', {
- 'cflags': [
- '<!@(pkg-config --cflags libpulse)',
- ],
- 'link_settings': {
- 'libraries': [
- '<!@(pkg-config --libs-only-l libpulse)',
- ],
- },
- 'defines': [
- 'USE_PULSEAUDIO',
- ],
- }, { # else: use_pulseaudio == 0
- 'sources!': [
- 'audio/pulse/pulse_output.cc',
- 'audio/pulse/pulse_output.h',
- ],
- }],
- ],
- }],
- ['os_posix == 1 and OS != \"android\"', {
- # Video capture isn't supported in Android yet.
- 'sources!': [
- 'video/capture/video_capture_device_dummy.cc',
- 'video/capture/video_capture_device_dummy.h',
- ],
- }],
- ['OS==\"mac\"', {
- 'link_settings': {
- 'libraries': [
- '$(SDKROOT)/System/Library/Frameworks/AudioUnit.framework',
- '$(SDKROOT)/System/Library/Frameworks/AudioToolbox.framework',
- '$(SDKROOT)/System/Library/Frameworks/CoreAudio.framework',
- '$(SDKROOT)/System/Library/Frameworks/CoreVideo.framework',
- '$(SDKROOT)/System/Library/Frameworks/QTKit.framework',
- ],
- },
- }],
- ['OS==\"win\"', {
- 'sources!': [
- 'audio/pulse/pulse_output.cc',
- 'audio/pulse/pulse_output.h',
- 'video/capture/video_capture_device_dummy.cc',
- 'video/capture/video_capture_device_dummy.h',
- ],
- }],
- ['proprietary_codecs==1 or branding==\"Chrome\"', {
- 'sources': [
- 'mp4/avc.cc',
- 'mp4/avc.h',
- 'mp4/box_definitions.cc',
- 'mp4/box_definitions.h',
- 'mp4/box_reader.cc',
- 'mp4/box_reader.h',
- 'mp4/cenc.cc',
- 'mp4/cenc.h',
- 'mp4/mp4_stream_parser.cc',
- 'mp4/mp4_stream_parser.h',
- 'mp4/offset_byte_queue.cc',
- 'mp4/offset_byte_queue.h',
- 'mp4/track_run_iterator.cc',
- 'mp4/track_run_iterator.h',
- ],
- }],
- ],
- },
- {
- 'target_name': 'yuv_convert',
- 'type': 'static_library',
- 'include_dirs': [
- '..',
- ],
- 'conditions': [
- ['order_profiling != 0', {
- 'target_conditions' : [
- ['_toolset==\"target\"', {
- 'cflags!': [ '-finstrument-functions' ],
- }],
- ],
- }],
- [ 'target_arch == \"ia32\" or target_arch == \"x64\"', {
- 'dependencies': [
- 'yuv_convert_simd_x86',
- ],
- }],
- [ 'target_arch == \"arm\"', {
- 'dependencies': [
- 'yuv_convert_simd_arm',
- ],
- }],
- ],
- 'sources': [
- 'base/yuv_convert.cc',
- 'base/yuv_convert.h',
- ],
- },
- {
- 'target_name': 'yuv_convert_simd_x86',
- 'type': 'static_library',
- 'include_dirs': [
- '..',
- ],
- 'sources': [
- 'base/simd/convert_rgb_to_yuv_c.cc',
- 'base/simd/convert_rgb_to_yuv_sse2.cc',
- 'base/simd/convert_rgb_to_yuv_ssse3.asm',
- 'base/simd/convert_rgb_to_yuv_ssse3.cc',
- 'base/simd/convert_rgb_to_yuv_ssse3.inc',
- 'base/simd/convert_yuv_to_rgb_c.cc',
- 'base/simd/convert_yuv_to_rgb_x86.cc',
- 'base/simd/convert_yuv_to_rgb_mmx.asm',
- 'base/simd/convert_yuv_to_rgb_mmx.inc',
- 'base/simd/convert_yuv_to_rgb_sse.asm',
- 'base/simd/filter_yuv.h',
- 'base/simd/filter_yuv_c.cc',
- 'base/simd/filter_yuv_mmx.cc',
- 'base/simd/filter_yuv_sse2.cc',
- 'base/simd/linear_scale_yuv_to_rgb_mmx.asm',
- 'base/simd/linear_scale_yuv_to_rgb_mmx.inc',
- 'base/simd/linear_scale_yuv_to_rgb_sse.asm',
- 'base/simd/scale_yuv_to_rgb_mmx.asm',
- 'base/simd/scale_yuv_to_rgb_mmx.inc',
- 'base/simd/scale_yuv_to_rgb_sse.asm',
- 'base/simd/yuv_to_rgb_table.cc',
- 'base/simd/yuv_to_rgb_table.h',
- ],
- 'conditions': [
- ['order_profiling != 0', {
- 'target_conditions' : [
- ['_toolset==\"target\"', {
- 'cflags!': [ '-finstrument-functions' ],
- }],
- ],
- }],
- [ 'target_arch == \"x64\"', {
- # Source files optimized for X64 systems.
- 'sources': [
- 'base/simd/linear_scale_yuv_to_rgb_mmx_x64.asm',
- 'base/simd/scale_yuv_to_rgb_sse2_x64.asm',
- ],
- }],
- [ 'os_posix == 1 and OS != \"mac\" and OS != \"android\"', {
- 'cflags': [
- '-msse2',
- ],
- }],
- [ 'OS == \"mac\"', {
- 'configurations': {
- 'Debug': {
- 'xcode_settings': {
- # gcc on the mac builds horribly unoptimized sse code in debug
- # mode. Since this is rarely going to be debugged, run with full
- # optimizations in Debug as well as Release.
- 'GCC_OPTIMIZATION_LEVEL': '3', # -O3
- },
- },
- },
- }],
- [ 'OS==\"win\"', {
- 'variables': {
- 'yasm_flags': [
- '-DWIN32',
- '-DMSVC',
- '-DCHROMIUM',
- '-Isimd',
- ],
- },
- }],
- [ 'OS==\"mac\"', {
- 'variables': {
- 'yasm_flags': [
- '-DPREFIX',
- '-DMACHO',
- '-DCHROMIUM',
- '-Isimd',
- ],
- },
- }],
- [ 'os_posix==1 and OS!=\"mac\"', {
- 'variables': {
- 'conditions': [
- [ 'target_arch==\"ia32\"', {
- 'yasm_flags': [
- '-DX86_32',
- '-DELF',
- '-DCHROMIUM',
- '-Isimd',
- ],
- }, {
- 'yasm_flags': [
- '-DARCH_X86_64',
- '-DELF',
- '-DPIC',
- '-DCHROMIUM',
- '-Isimd',
- ],
- }],
- ],
- },
- }],
- ],
- 'variables': {
- 'yasm_output_path': '<(SHARED_INTERMEDIATE_DIR)/media',
- },
- 'msvs_2010_disable_uldi_when_referenced': 1,
- 'includes': [
- '../third_party/yasm/yasm_compile.gypi',
- ],
- },
- {
- 'target_name': 'yuv_convert_simd_arm',
- 'type': 'static_library',
- 'include_dirs': [
- '..',
- ],
- 'sources': [
- 'base/simd/convert_rgb_to_yuv_c.cc',
- 'base/simd/convert_rgb_to_yuv.h',
- 'base/simd/convert_yuv_to_rgb_c.cc',
- 'base/simd/convert_yuv_to_rgb.h',
- 'base/simd/filter_yuv.h',
- 'base/simd/filter_yuv_c.cc',
- 'base/simd/yuv_to_rgb_table.cc',
- 'base/simd/yuv_to_rgb_table.h',
- ],
- },
- {
- 'target_name': 'media_unittests',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'media_test_support',
- 'yuv_convert',
- '../base/base.gyp:base',
- '../base/base.gyp:base_i18n',
- '../base/base.gyp:test_support_base',
- '../testing/gmock.gyp:gmock',
- '../testing/gtest.gyp:gtest',
- '../ui/ui.gyp:ui',
- ],
- 'sources': [
- 'audio/async_socket_io_handler_unittest.cc',
- 'audio/audio_input_controller_unittest.cc',
- 'audio/audio_input_device_unittest.cc',
- 'audio/audio_input_unittest.cc',
- 'audio/audio_input_volume_unittest.cc',
- 'audio/audio_low_latency_input_output_unittest.cc',
- 'audio/audio_output_controller_unittest.cc',
- 'audio/audio_output_proxy_unittest.cc',
- 'audio/audio_parameters_unittest.cc',
- 'audio/audio_util_unittest.cc',
- 'audio/cross_process_notification_unittest.cc',
- 'audio/linux/alsa_output_unittest.cc',
- 'audio/mac/audio_low_latency_input_mac_unittest.cc',
- 'audio/mac/audio_output_mac_unittest.cc',
- 'audio/simple_sources_unittest.cc',
- 'audio/win/audio_low_latency_input_win_unittest.cc',
- 'audio/win/audio_low_latency_output_win_unittest.cc',
- 'audio/win/audio_output_win_unittest.cc',
- 'base/audio_renderer_mixer_unittest.cc',
- 'base/audio_renderer_mixer_input_unittest.cc',
- 'base/buffers_unittest.cc',
- 'base/clock_unittest.cc',
- 'base/composite_filter_unittest.cc',
- 'base/data_buffer_unittest.cc',
- 'base/decoder_buffer_unittest.cc',
- 'base/djb2_unittest.cc',
- 'base/fake_audio_render_callback.cc',
- 'base/fake_audio_render_callback.h',
- 'base/filter_collection_unittest.cc',
- 'base/h264_bitstream_converter_unittest.cc',
- 'base/pipeline_unittest.cc',
- 'base/ranges_unittest.cc',
- 'base/run_all_unittests.cc',
- 'base/seekable_buffer_unittest.cc',
- 'base/state_matrix_unittest.cc',
- 'base/test_data_util.cc',
- 'base/test_data_util.h',
- 'base/video_frame_unittest.cc',
- 'base/video_util_unittest.cc',
- 'base/yuv_convert_unittest.cc',
- 'crypto/aes_decryptor_unittest.cc',
- 'ffmpeg/ffmpeg_common_unittest.cc',
- 'filters/audio_renderer_algorithm_unittest.cc',
- 'filters/audio_renderer_impl_unittest.cc',
- 'filters/bitstream_converter_unittest.cc',
- 'filters/chunk_demuxer_unittest.cc',
- 'filters/ffmpeg_audio_decoder_unittest.cc',
- 'filters/ffmpeg_decoder_unittest.h',
- 'filters/ffmpeg_demuxer_unittest.cc',
- 'filters/ffmpeg_glue_unittest.cc',
- 'filters/ffmpeg_h264_bitstream_converter_unittest.cc',
- 'filters/ffmpeg_video_decoder_unittest.cc',
- 'filters/file_data_source_unittest.cc',
- 'filters/pipeline_integration_test.cc',
- 'filters/pipeline_integration_test_base.cc',
- 'filters/source_buffer_stream_unittest.cc',
- 'filters/video_renderer_base_unittest.cc',
- 'video/capture/video_capture_device_unittest.cc',
- 'webm/cluster_builder.cc',
- 'webm/cluster_builder.h',
- 'webm/webm_cluster_parser_unittest.cc',
- 'webm/webm_content_encodings_client_unittest.cc',
- 'webm/webm_parser_unittest.cc',
- ],
- 'conditions': [
- ['os_posix==1 and OS!=\"mac\"', {
- 'conditions': [
- ['linux_use_tcmalloc==1', {
- 'dependencies': [
- '../base/allocator/allocator.gyp:allocator',
- ],
- }],
- ],
- }],
- ['OS != \"android\"', {
- 'dependencies': [
- '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
- ],
- }],
- ['OS == \"android\"', {
- 'sources!': [
- 'audio/audio_input_volume_unittest.cc',
- 'base/test_data_util.cc',
- 'base/test_data_util.h',
- 'ffmpeg/ffmpeg_common_unittest.cc',
- 'filters/ffmpeg_audio_decoder_unittest.cc',
- 'filters/bitstream_converter_unittest.cc',
- 'filters/chunk_demuxer_unittest.cc',
- 'filters/ffmpeg_demuxer_unittest.cc',
- 'filters/ffmpeg_glue_unittest.cc',
- 'filters/ffmpeg_h264_bitstream_converter_unittest.cc',
- 'filters/ffmpeg_video_decoder_unittest.cc',
- 'filters/pipeline_integration_test.cc',
- 'filters/pipeline_integration_test_base.cc',
- 'mp4/mp4_stream_parser_unittest.cc',
- 'webm/webm_cluster_parser_unittest.cc',
- ],
- }],
- ['OS == \"linux\"', {
- 'conditions': [
- ['use_cras == 1', {
- 'sources': [
- 'audio/linux/cras_output_unittest.cc',
- ],
- 'defines': [
- 'USE_CRAS',
- ],
- }],
- ],
- }],
- [ 'target_arch==\"ia32\" or target_arch==\"x64\"', {
- 'sources': [
- 'base/simd/convert_rgb_to_yuv_unittest.cc',
- ],
- }],
- ['proprietary_codecs==1 or branding==\"Chrome\"', {
- 'sources': [
- 'mp4/avc_unittest.cc',
- 'mp4/box_reader_unittest.cc',
- 'mp4/mp4_stream_parser_unittest.cc',
- 'mp4/offset_byte_queue_unittest.cc',
- ],
- }],
- ],
- },
- {
- 'target_name': 'media_test_support',
- 'type': 'static_library',
- 'dependencies': [
- 'media',
- '../base/base.gyp:base',
- '../testing/gmock.gyp:gmock',
- '../testing/gtest.gyp:gtest',
- ],
- 'sources': [
- 'audio/test_audio_input_controller_factory.cc',
- 'audio/test_audio_input_controller_factory.h',
- 'base/mock_callback.cc',
- 'base/mock_callback.h',
- 'base/mock_data_source_host.cc',
- 'base/mock_data_source_host.h',
- 'base/mock_demuxer_host.cc',
- 'base/mock_demuxer_host.h',
- 'base/mock_filter_host.cc',
- 'base/mock_filter_host.h',
- 'base/mock_filters.cc',
- 'base/mock_filters.h',
- ],
- },
- {
- 'target_name': 'scaler_bench',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'yuv_convert',
- '../base/base.gyp:base',
- '../skia/skia.gyp:skia',
- ],
- 'sources': [
- 'tools/scaler_bench/scaler_bench.cc',
- ],
- },
- {
- 'target_name': 'qt_faststart',
- 'type': 'executable',
- 'sources': [
- 'tools/qt_faststart/qt_faststart.c'
- ],
- },
- {
- 'target_name': 'seek_tester',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- '../base/base.gyp:base',
- ],
- 'sources': [
- 'tools/seek_tester/seek_tester.cc',
- ],
- },
- ],
- 'conditions': [
- ['OS==\"win\"', {
- 'targets': [
- {
- 'target_name': 'player_wtl',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'yuv_convert',
- '../base/base.gyp:base',
- '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
- '../ui/ui.gyp:ui',
- ],
- 'include_dirs': [
- '<(DEPTH)/third_party/wtl/include',
- ],
- 'sources': [
- 'tools/player_wtl/list.h',
- 'tools/player_wtl/mainfrm.h',
- 'tools/player_wtl/movie.cc',
- 'tools/player_wtl/movie.h',
- 'tools/player_wtl/player_wtl.cc',
- 'tools/player_wtl/player_wtl.rc',
- 'tools/player_wtl/props.h',
- 'tools/player_wtl/seek.h',
- 'tools/player_wtl/resource.h',
- 'tools/player_wtl/view.h',
- ],
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'SubSystem': '2', # Set /SUBSYSTEM:WINDOWS
- },
- },
- 'defines': [
- '_CRT_SECURE_NO_WARNINGS=1',
- ],
- },
- ],
- }],
- ['OS == \"win\" or toolkit_uses_gtk == 1', {
- 'targets': [
- {
- 'target_name': 'shader_bench',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'yuv_convert',
- '../base/base.gyp:base',
- '../ui/gl/gl.gyp:gl',
- ],
- 'sources': [
- 'tools/shader_bench/shader_bench.cc',
- 'tools/shader_bench/cpu_color_painter.cc',
- 'tools/shader_bench/cpu_color_painter.h',
- 'tools/shader_bench/gpu_color_painter.cc',
- 'tools/shader_bench/gpu_color_painter.h',
- 'tools/shader_bench/gpu_painter.cc',
- 'tools/shader_bench/gpu_painter.h',
- 'tools/shader_bench/painter.cc',
- 'tools/shader_bench/painter.h',
- 'tools/shader_bench/window.cc',
- 'tools/shader_bench/window.h',
- ],
- 'conditions': [
- ['toolkit_uses_gtk == 1', {
- 'dependencies': [
- '../build/linux/system.gyp:gtk',
- ],
- 'sources': [
- 'tools/shader_bench/window_linux.cc',
- ],
- }],
- ['OS==\"win\"', {
- 'dependencies': [
- '../third_party/angle/src/build_angle.gyp:libEGL',
- '../third_party/angle/src/build_angle.gyp:libGLESv2',
- ],
- 'sources': [
- 'tools/shader_bench/window_win.cc',
- ],
- }],
- ],
- },
- ],
- }],
- ['OS == \"linux\" and target_arch != \"arm\"', {
- 'targets': [
- {
- 'target_name': 'tile_render_bench',
- 'type': 'executable',
- 'dependencies': [
- '../base/base.gyp:base',
- '../ui/gl/gl.gyp:gl',
- ],
- 'libraries': [
- '-lGL',
- '-ldl',
- ],
- 'sources': [
- 'tools/tile_render_bench/tile_render_bench.cc',
- ],
- },
- ],
- }],
- ['os_posix == 1 and OS != \"mac\" and OS != \"android\"', {
- 'targets': [
- {
- 'target_name': 'player_x11',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'yuv_convert',
- '../base/base.gyp:base',
- '../ui/gl/gl.gyp:gl',
- ],
- 'link_settings': {
- 'libraries': [
- '-ldl',
- '-lX11',
- '-lXrender',
- '-lXext',
- ],
- },
- 'sources': [
- 'tools/player_x11/data_source_logger.cc',
- 'tools/player_x11/data_source_logger.h',
- 'tools/player_x11/gl_video_renderer.cc',
- 'tools/player_x11/gl_video_renderer.h',
- 'tools/player_x11/player_x11.cc',
- 'tools/player_x11/x11_video_renderer.cc',
- 'tools/player_x11/x11_video_renderer.h',
- ],
- },
- ],
- }],
- ['OS == \"android\"', {
- 'targets': [
- {
- 'target_name': 'player_android',
- 'type': 'static_library',
- 'sources': [
- 'base/android/media_player_bridge.cc',
- 'base/android/media_player_bridge.h',
- ],
- 'dependencies': [
- '../base/base.gyp:base',
- ],
- 'include_dirs': [
- '<(SHARED_INTERMEDIATE_DIR)/media',
- ],
- 'actions': [
- {
- 'action_name': 'generate-jni-headers',
- 'inputs': [
- '../base/android/jni_generator/jni_generator.py',
- 'base/android/java/src/org/chromium/media/MediaPlayerListener.java',
- ],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/media/jni/media_player_listener_jni.h',
- ],
- 'action': [
- 'python',
- '<(DEPTH)/base/android/jni_generator/jni_generator.py',
- '-o',
- '<@(_inputs)',
- '<@(_outputs)',
- ],
- },
- ],
- },
- {
- 'target_name': 'media_java',
- 'type': 'none',
- 'dependencies': [ '../base/base.gyp:base_java' ],
- 'variables': {
- 'package_name': 'media',
- 'java_in_dir': 'base/android/java',
- },
- 'includes': [ '../build/java.gypi' ],
- },
-
- ],
- }, { # OS != \"android\"'
- # Android does not use ffmpeg, so disable the targets which require it.
- 'targets': [
- {
- 'target_name': 'ffmpeg_unittests',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'media_test_support',
- '../base/base.gyp:base',
- '../base/base.gyp:base_i18n',
- '../base/base.gyp:test_support_base',
- '../base/base.gyp:test_support_perf',
- '../testing/gtest.gyp:gtest',
- '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
- ],
- 'sources': [
- 'ffmpeg/ffmpeg_unittest.cc',
- ],
- 'conditions': [
- ['toolkit_uses_gtk == 1', {
- 'dependencies': [
- # Needed for the following #include chain:
- # base/run_all_unittests.cc
- # ../base/test_suite.h
- # gtk/gtk.h
- '../build/linux/system.gyp:gtk',
- ],
- 'conditions': [
- ['linux_use_tcmalloc==1', {
- 'dependencies': [
- '../base/allocator/allocator.gyp:allocator',
- ],
- }],
- ],
- }],
- ],
- },
- {
- 'target_name': 'ffmpeg_regression_tests',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- 'media_test_support',
- '../base/base.gyp:test_support_base',
- '../testing/gmock.gyp:gmock',
- '../testing/gtest.gyp:gtest',
- '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
- ],
- 'sources': [
- 'base/test_data_util.cc',
- 'base/run_all_unittests.cc',
- 'ffmpeg/ffmpeg_regression_tests.cc',
- 'filters/pipeline_integration_test_base.cc',
- ],
- 'conditions': [
- ['os_posix==1 and OS!=\"mac\"', {
- 'conditions': [
- ['linux_use_tcmalloc==1', {
- 'dependencies': [
- '../base/allocator/allocator.gyp:allocator',
- ],
- }],
- ],
- }],
- ],
- },
- {
- 'target_name': 'ffmpeg_tests',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- '../base/base.gyp:base',
- '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
- ],
- 'sources': [
- 'test/ffmpeg_tests/ffmpeg_tests.cc',
- ],
- },
- {
- 'target_name': 'media_bench',
- 'type': 'executable',
- 'dependencies': [
- 'media',
- '../base/base.gyp:base',
- '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
- ],
- 'sources': [
- 'tools/media_bench/media_bench.cc',
- ],
- },
- ],
- }]
- ],
-}
-" 0 64 (face font-lock-comment-face) 64 137 (face font-lock-comment-face) 137 166 (face font-lock-comment-face) 166 171 nil 171 172 (face font-lock-string-face) 172 181 (face font-lock-keyword-face) 181 182 (face font-lock-string-face) 182 190 nil 190 191 (face font-lock-string-face) 191 204 (face font-lock-variable-name-face) 204 205 (face font-lock-string-face) 205 214 nil 214 269 (face font-lock-comment-face) 269 273 nil 273 274 (face font-lock-string-face) 274 289 (face font-lock-variable-name-face) 289 290 (face font-lock-string-face) 290 299 nil 299 365 (face font-lock-comment-face) 365 369 nil 369 370 (face font-lock-string-face) 370 379 (face font-lock-variable-name-face) 379 380 (face font-lock-string-face) 380 392 nil 392 393 (face font-lock-string-face) 393 400 (face font-lock-keyword-face) 400 401 (face font-lock-string-face) 401 417 nil 417 418 (face font-lock-string-face) 418 429 (face font-lock-keyword-face) 429 430 (face font-lock-string-face) 430 432 nil 432 433 (face font-lock-string-face) 433 438 (face font-lock-function-name-face) 438 439 (face font-lock-string-face) 439 447 nil 447 448 (face font-lock-string-face) 448 452 (face font-lock-keyword-face) 452 453 (face font-lock-string-face) 453 455 nil 455 458 (face font-lock-string-face) 458 467 (face font-lock-variable-name-face) 467 469 (face font-lock-string-face) 469 477 nil 477 478 (face font-lock-string-face) 478 490 (face font-lock-keyword-face) 490 491 (face font-lock-string-face) 491 503 nil 503 504 (face font-lock-string-face) 504 515 (face font-lock-function-name-face) 515 516 (face font-lock-string-face) 516 526 nil 526 527 (face font-lock-string-face) 527 548 (face font-lock-function-name-face) 548 549 (face font-lock-string-face) 549 559 nil 559 560 (face font-lock-string-face) 560 643 (face font-lock-function-name-face) 643 644 (face font-lock-string-face) 644 654 nil 654 655 (face font-lock-string-face) 655 696 (face font-lock-function-name-face) 696 697 (face font-lock-string-face) 697 707 nil 707 708 (face font-lock-string-face) 708 735 (face font-lock-function-name-face) 735 736 (face font-lock-string-face) 736 746 nil 746 747 (face font-lock-string-face) 747 784 (face font-lock-function-name-face) 784 785 (face font-lock-string-face) 785 795 nil 795 796 (face font-lock-string-face) 796 811 (face font-lock-function-name-face) 811 812 (face font-lock-string-face) 812 829 nil 829 830 (face font-lock-string-face) 830 837 (face font-lock-keyword-face) 837 838 (face font-lock-string-face) 838 850 nil 850 851 (face font-lock-string-face) 851 871 (face font-lock-preprocessor-face) 871 872 (face font-lock-string-face) 872 889 nil 889 890 (face font-lock-string-face) 890 902 (face font-lock-keyword-face) 902 903 (face font-lock-string-face) 903 915 nil 915 916 (face font-lock-string-face) 916 918 (face font-lock-constant-face) 918 919 (face font-lock-string-face) 919 936 nil 936 937 (face font-lock-string-face) 937 944 (face font-lock-keyword-face) 944 945 (face font-lock-string-face) 945 957 nil 957 958 (face font-lock-string-face) 958 996 (face font-lock-constant-face) 996 997 (face font-lock-string-face) 997 1007 nil 1007 1008 (face font-lock-string-face) 1008 1045 (face font-lock-constant-face) 1045 1046 (face font-lock-string-face) 1046 1056 nil 1056 1057 (face font-lock-string-face) 1057 1100 (face font-lock-constant-face) 1100 1101 (face font-lock-string-face) 1101 1111 nil 1111 1112 (face font-lock-string-face) 1112 1154 (face font-lock-constant-face) 1154 1155 (face font-lock-string-face) 1155 1165 nil 1165 1166 (face font-lock-string-face) 1166 1197 (face font-lock-constant-face) 1197 1198 (face font-lock-string-face) 1198 1208 nil 1208 1209 (face font-lock-string-face) 1209 1239 (face font-lock-constant-face) 1239 1240 (face font-lock-string-face) 1240 1250 nil 1250 1251 (face font-lock-string-face) 1251 1283 (face font-lock-constant-face) 1283 1284 (face font-lock-string-face) 1284 1294 nil 1294 1295 (face font-lock-string-face) 1295 1326 (face font-lock-constant-face) 1326 1327 (face font-lock-string-face) 1327 1337 nil 1337 1338 (face font-lock-string-face) 1338 1369 (face font-lock-constant-face) 1369 1370 (face font-lock-string-face) 1370 1380 nil 1380 1381 (face font-lock-string-face) 1381 1419 (face font-lock-constant-face) 1419 1420 (face font-lock-string-face) 1420 1430 nil 1430 1431 (face font-lock-string-face) 1431 1467 (face font-lock-constant-face) 1467 1468 (face font-lock-string-face) 1468 1478 nil 1478 1479 (face font-lock-string-face) 1479 1507 (face font-lock-constant-face) 1507 1508 (face font-lock-string-face) 1508 1518 nil 1518 1519 (face font-lock-string-face) 1519 1546 (face font-lock-constant-face) 1546 1547 (face font-lock-string-face) 1547 1557 nil 1557 1558 (face font-lock-string-face) 1558 1574 (face font-lock-constant-face) 1574 1575 (face font-lock-string-face) 1575 1585 nil 1585 1586 (face font-lock-string-face) 1586 1617 (face font-lock-constant-face) 1617 1618 (face font-lock-string-face) 1618 1628 nil 1628 1629 (face font-lock-string-face) 1629 1659 (face font-lock-constant-face) 1659 1660 (face font-lock-string-face) 1660 1670 nil 1670 1671 (face font-lock-string-face) 1671 1703 (face font-lock-constant-face) 1703 1704 (face font-lock-string-face) 1704 1714 nil 1714 1715 (face font-lock-string-face) 1715 1746 (face font-lock-constant-face) 1746 1747 (face font-lock-string-face) 1747 1757 nil 1757 1758 (face font-lock-string-face) 1758 1784 (face font-lock-constant-face) 1784 1785 (face font-lock-string-face) 1785 1795 nil 1795 1796 (face font-lock-string-face) 1796 1821 (face font-lock-constant-face) 1821 1822 (face font-lock-string-face) 1822 1832 nil 1832 1833 (face font-lock-string-face) 1833 1855 (face font-lock-constant-face) 1855 1856 (face font-lock-string-face) 1856 1866 nil 1866 1867 (face font-lock-string-face) 1867 1888 (face font-lock-constant-face) 1888 1889 (face font-lock-string-face) 1889 1899 nil 1899 1900 (face font-lock-string-face) 1900 1927 (face font-lock-constant-face) 1927 1928 (face font-lock-string-face) 1928 1938 nil 1938 1939 (face font-lock-string-face) 1939 1965 (face font-lock-constant-face) 1965 1966 (face font-lock-string-face) 1966 1976 nil 1976 1977 (face font-lock-string-face) 1977 2009 (face font-lock-constant-face) 2009 2010 (face font-lock-string-face) 2010 2020 nil 2020 2021 (face font-lock-string-face) 2021 2052 (face font-lock-constant-face) 2052 2053 (face font-lock-string-face) 2053 2063 nil 2063 2064 (face font-lock-string-face) 2064 2096 (face font-lock-constant-face) 2096 2097 (face font-lock-string-face) 2097 2107 nil 2107 2108 (face font-lock-string-face) 2108 2139 (face font-lock-constant-face) 2139 2140 (face font-lock-string-face) 2140 2150 nil 2150 2151 (face font-lock-string-face) 2151 2188 (face font-lock-constant-face) 2188 2189 (face font-lock-string-face) 2189 2199 nil 2199 2200 (face font-lock-string-face) 2200 2236 (face font-lock-constant-face) 2236 2237 (face font-lock-string-face) 2237 2247 nil 2247 2248 (face font-lock-string-face) 2248 2275 (face font-lock-constant-face) 2275 2276 (face font-lock-string-face) 2276 2286 nil 2286 2287 (face font-lock-string-face) 2287 2313 (face font-lock-constant-face) 2313 2314 (face font-lock-string-face) 2314 2324 nil 2324 2325 (face font-lock-string-face) 2325 2352 (face font-lock-constant-face) 2352 2353 (face font-lock-string-face) 2353 2363 nil 2363 2364 (face font-lock-string-face) 2364 2390 (face font-lock-constant-face) 2390 2391 (face font-lock-string-face) 2391 2401 nil 2401 2402 (face font-lock-string-face) 2402 2427 (face font-lock-constant-face) 2427 2428 (face font-lock-string-face) 2428 2438 nil 2438 2439 (face font-lock-string-face) 2439 2463 (face font-lock-constant-face) 2463 2464 (face font-lock-string-face) 2464 2474 nil 2474 2475 (face font-lock-string-face) 2475 2494 (face font-lock-constant-face) 2494 2495 (face font-lock-string-face) 2495 2505 nil 2505 2506 (face font-lock-string-face) 2506 2524 (face font-lock-constant-face) 2524 2525 (face font-lock-string-face) 2525 2535 nil 2535 2536 (face font-lock-string-face) 2536 2571 (face font-lock-constant-face) 2571 2572 (face font-lock-string-face) 2572 2582 nil 2582 2583 (face font-lock-string-face) 2583 2617 (face font-lock-constant-face) 2617 2618 (face font-lock-string-face) 2618 2628 nil 2628 2629 (face font-lock-string-face) 2629 2668 (face font-lock-constant-face) 2668 2669 (face font-lock-string-face) 2669 2679 nil 2679 2680 (face font-lock-string-face) 2680 2721 (face font-lock-constant-face) 2721 2722 (face font-lock-string-face) 2722 2732 nil 2732 2733 (face font-lock-string-face) 2733 2765 (face font-lock-constant-face) 2765 2766 (face font-lock-string-face) 2766 2776 nil 2776 2777 (face font-lock-string-face) 2777 2808 (face font-lock-constant-face) 2808 2809 (face font-lock-string-face) 2809 2819 nil 2819 2820 (face font-lock-string-face) 2820 2853 (face font-lock-constant-face) 2853 2854 (face font-lock-string-face) 2854 2864 nil 2864 2865 (face font-lock-string-face) 2865 2897 (face font-lock-constant-face) 2897 2898 (face font-lock-string-face) 2898 2908 nil 2908 2909 (face font-lock-string-face) 2909 2943 (face font-lock-constant-face) 2943 2944 (face font-lock-string-face) 2944 2954 nil 2954 2955 (face font-lock-string-face) 2955 2988 (face font-lock-constant-face) 2988 2989 (face font-lock-string-face) 2989 2999 nil 2999 3000 (face font-lock-string-face) 3000 3025 (face font-lock-constant-face) 3025 3026 (face font-lock-string-face) 3026 3036 nil 3036 3037 (face font-lock-string-face) 3037 3061 (face font-lock-constant-face) 3061 3062 (face font-lock-string-face) 3062 3072 nil 3072 3073 (face font-lock-string-face) 3073 3099 (face font-lock-constant-face) 3099 3100 (face font-lock-string-face) 3100 3110 nil 3110 3111 (face font-lock-string-face) 3111 3136 (face font-lock-constant-face) 3136 3137 (face font-lock-string-face) 3137 3147 nil 3147 3148 (face font-lock-string-face) 3148 3172 (face font-lock-constant-face) 3172 3173 (face font-lock-string-face) 3173 3183 nil 3183 3184 (face font-lock-string-face) 3184 3207 (face font-lock-constant-face) 3207 3208 (face font-lock-string-face) 3208 3218 nil 3218 3219 (face font-lock-string-face) 3219 3246 (face font-lock-constant-face) 3246 3247 (face font-lock-string-face) 3247 3257 nil 3257 3258 (face font-lock-string-face) 3258 3284 (face font-lock-constant-face) 3284 3285 (face font-lock-string-face) 3285 3295 nil 3295 3296 (face font-lock-string-face) 3296 3322 (face font-lock-constant-face) 3322 3323 (face font-lock-string-face) 3323 3333 nil 3333 3334 (face font-lock-string-face) 3334 3359 (face font-lock-constant-face) 3359 3360 (face font-lock-string-face) 3360 3370 nil 3370 3371 (face font-lock-string-face) 3371 3409 (face font-lock-constant-face) 3409 3410 (face font-lock-string-face) 3410 3420 nil 3420 3421 (face font-lock-string-face) 3421 3458 (face font-lock-constant-face) 3458 3459 (face font-lock-string-face) 3459 3469 nil 3469 3470 (face font-lock-string-face) 3470 3498 (face font-lock-constant-face) 3498 3499 (face font-lock-string-face) 3499 3509 nil 3509 3510 (face font-lock-string-face) 3510 3537 (face font-lock-constant-face) 3537 3538 (face font-lock-string-face) 3538 3548 nil 3548 3549 (face font-lock-string-face) 3549 3589 (face font-lock-constant-face) 3589 3590 (face font-lock-string-face) 3590 3600 nil 3600 3601 (face font-lock-string-face) 3601 3640 (face font-lock-constant-face) 3640 3641 (face font-lock-string-face) 3641 3651 nil 3651 3652 (face font-lock-string-face) 3652 3693 (face font-lock-constant-face) 3693 3694 (face font-lock-string-face) 3694 3704 nil 3704 3705 (face font-lock-string-face) 3705 3745 (face font-lock-constant-face) 3745 3746 (face font-lock-string-face) 3746 3756 nil 3756 3757 (face font-lock-string-face) 3757 3787 (face font-lock-constant-face) 3787 3788 (face font-lock-string-face) 3788 3798 nil 3798 3799 (face font-lock-string-face) 3799 3828 (face font-lock-constant-face) 3828 3829 (face font-lock-string-face) 3829 3839 nil 3839 3840 (face font-lock-string-face) 3840 3869 (face font-lock-constant-face) 3869 3870 (face font-lock-string-face) 3870 3880 nil 3880 3881 (face font-lock-string-face) 3881 3909 (face font-lock-constant-face) 3909 3910 (face font-lock-string-face) 3910 3920 nil 3920 3921 (face font-lock-string-face) 3921 3945 (face font-lock-constant-face) 3945 3946 (face font-lock-string-face) 3946 3956 nil 3956 3957 (face font-lock-string-face) 3957 3980 (face font-lock-constant-face) 3980 3981 (face font-lock-string-face) 3981 3991 nil 3991 3992 (face font-lock-string-face) 3992 4019 (face font-lock-constant-face) 4019 4020 (face font-lock-string-face) 4020 4030 nil 4030 4031 (face font-lock-string-face) 4031 4057 (face font-lock-constant-face) 4057 4058 (face font-lock-string-face) 4058 4068 nil 4068 4069 (face font-lock-string-face) 4069 4090 (face font-lock-constant-face) 4090 4091 (face font-lock-string-face) 4091 4101 nil 4101 4102 (face font-lock-string-face) 4102 4122 (face font-lock-constant-face) 4122 4123 (face font-lock-string-face) 4123 4133 nil 4133 4134 (face font-lock-string-face) 4134 4157 (face font-lock-constant-face) 4157 4158 (face font-lock-string-face) 4158 4168 nil 4168 4169 (face font-lock-string-face) 4169 4191 (face font-lock-constant-face) 4191 4192 (face font-lock-string-face) 4192 4202 nil 4202 4203 (face font-lock-string-face) 4203 4243 (face font-lock-constant-face) 4243 4244 (face font-lock-string-face) 4244 4254 nil 4254 4255 (face font-lock-string-face) 4255 4294 (face font-lock-constant-face) 4294 4295 (face font-lock-string-face) 4295 4305 nil 4305 4306 (face font-lock-string-face) 4306 4347 (face font-lock-constant-face) 4347 4348 (face font-lock-string-face) 4348 4358 nil 4358 4359 (face font-lock-string-face) 4359 4399 (face font-lock-constant-face) 4399 4400 (face font-lock-string-face) 4400 4410 nil 4410 4411 (face font-lock-string-face) 4411 4441 (face font-lock-constant-face) 4441 4442 (face font-lock-string-face) 4442 4452 nil 4452 4453 (face font-lock-string-face) 4453 4482 (face font-lock-constant-face) 4482 4483 (face font-lock-string-face) 4483 4493 nil 4493 4494 (face font-lock-string-face) 4494 4523 (face font-lock-constant-face) 4523 4524 (face font-lock-string-face) 4524 4534 nil 4534 4535 (face font-lock-string-face) 4535 4563 (face font-lock-constant-face) 4563 4564 (face font-lock-string-face) 4564 4574 nil 4574 4575 (face font-lock-string-face) 4575 4610 (face font-lock-constant-face) 4610 4611 (face font-lock-string-face) 4611 4621 nil 4621 4622 (face font-lock-string-face) 4622 4656 (face font-lock-constant-face) 4656 4657 (face font-lock-string-face) 4657 4667 nil 4667 4668 (face font-lock-string-face) 4668 4697 (face font-lock-constant-face) 4697 4698 (face font-lock-string-face) 4698 4708 nil 4708 4709 (face font-lock-string-face) 4709 4737 (face font-lock-constant-face) 4737 4738 (face font-lock-string-face) 4738 4748 nil 4748 4749 (face font-lock-string-face) 4749 4780 (face font-lock-constant-face) 4780 4781 (face font-lock-string-face) 4781 4791 nil 4791 4792 (face font-lock-string-face) 4792 4822 (face font-lock-constant-face) 4822 4823 (face font-lock-string-face) 4823 4833 nil 4833 4834 (face font-lock-string-face) 4834 4869 (face font-lock-constant-face) 4869 4870 (face font-lock-string-face) 4870 4880 nil 4880 4881 (face font-lock-string-face) 4881 4915 (face font-lock-constant-face) 4915 4916 (face font-lock-string-face) 4916 4926 nil 4926 4927 (face font-lock-string-face) 4927 4948 (face font-lock-constant-face) 4948 4949 (face font-lock-string-face) 4949 4959 nil 4959 4960 (face font-lock-string-face) 4960 4980 (face font-lock-constant-face) 4980 4981 (face font-lock-string-face) 4981 4991 nil 4991 4992 (face font-lock-string-face) 4992 5020 (face font-lock-constant-face) 5020 5021 (face font-lock-string-face) 5021 5031 nil 5031 5032 (face font-lock-string-face) 5032 5059 (face font-lock-constant-face) 5059 5060 (face font-lock-string-face) 5060 5070 nil 5070 5071 (face font-lock-string-face) 5071 5092 (face font-lock-constant-face) 5092 5093 (face font-lock-string-face) 5093 5103 nil 5103 5104 (face font-lock-string-face) 5104 5132 (face font-lock-constant-face) 5132 5133 (face font-lock-string-face) 5133 5143 nil 5143 5144 (face font-lock-string-face) 5144 5171 (face font-lock-constant-face) 5171 5172 (face font-lock-string-face) 5172 5182 nil 5182 5183 (face font-lock-string-face) 5183 5217 (face font-lock-constant-face) 5217 5218 (face font-lock-string-face) 5218 5228 nil 5228 5229 (face font-lock-string-face) 5229 5262 (face font-lock-constant-face) 5262 5263 (face font-lock-string-face) 5263 5273 nil 5273 5274 (face font-lock-string-face) 5274 5297 (face font-lock-constant-face) 5297 5298 (face font-lock-string-face) 5298 5308 nil 5308 5309 (face font-lock-string-face) 5309 5324 (face font-lock-constant-face) 5324 5325 (face font-lock-string-face) 5325 5335 nil 5335 5336 (face font-lock-string-face) 5336 5350 (face font-lock-constant-face) 5350 5351 (face font-lock-string-face) 5351 5361 nil 5361 5362 (face font-lock-string-face) 5362 5380 (face font-lock-constant-face) 5380 5381 (face font-lock-string-face) 5381 5391 nil 5391 5392 (face font-lock-string-face) 5392 5409 (face font-lock-constant-face) 5409 5410 (face font-lock-string-face) 5410 5420 nil 5420 5421 (face font-lock-string-face) 5421 5443 (face font-lock-constant-face) 5443 5444 (face font-lock-string-face) 5444 5454 nil 5454 5455 (face font-lock-string-face) 5455 5476 (face font-lock-constant-face) 5476 5477 (face font-lock-string-face) 5477 5487 nil 5487 5488 (face font-lock-string-face) 5488 5501 (face font-lock-constant-face) 5501 5502 (face font-lock-string-face) 5502 5512 nil 5512 5513 (face font-lock-string-face) 5513 5525 (face font-lock-constant-face) 5525 5526 (face font-lock-string-face) 5526 5536 nil 5536 5537 (face font-lock-string-face) 5537 5561 (face font-lock-constant-face) 5561 5562 (face font-lock-string-face) 5562 5572 nil 5572 5573 (face font-lock-string-face) 5573 5596 (face font-lock-constant-face) 5596 5597 (face font-lock-string-face) 5597 5607 nil 5607 5608 (face font-lock-string-face) 5608 5627 (face font-lock-constant-face) 5627 5628 (face font-lock-string-face) 5628 5638 nil 5638 5639 (face font-lock-string-face) 5639 5657 (face font-lock-constant-face) 5657 5658 (face font-lock-string-face) 5658 5668 nil 5668 5669 (face font-lock-string-face) 5669 5688 (face font-lock-constant-face) 5688 5689 (face font-lock-string-face) 5689 5699 nil 5699 5700 (face font-lock-string-face) 5700 5718 (face font-lock-constant-face) 5718 5719 (face font-lock-string-face) 5719 5729 nil 5729 5730 (face font-lock-string-face) 5730 5752 (face font-lock-constant-face) 5752 5753 (face font-lock-string-face) 5753 5763 nil 5763 5764 (face font-lock-string-face) 5764 5785 (face font-lock-constant-face) 5785 5786 (face font-lock-string-face) 5786 5796 nil 5796 5797 (face font-lock-string-face) 5797 5819 (face font-lock-constant-face) 5819 5820 (face font-lock-string-face) 5820 5830 nil 5830 5831 (face font-lock-string-face) 5831 5852 (face font-lock-constant-face) 5852 5853 (face font-lock-string-face) 5853 5863 nil 5863 5864 (face font-lock-string-face) 5864 5880 (face font-lock-constant-face) 5880 5881 (face font-lock-string-face) 5881 5891 nil 5891 5892 (face font-lock-string-face) 5892 5915 (face font-lock-constant-face) 5915 5916 (face font-lock-string-face) 5916 5926 nil 5926 5927 (face font-lock-string-face) 5927 5942 (face font-lock-constant-face) 5942 5943 (face font-lock-string-face) 5943 5953 nil 5953 5954 (face font-lock-string-face) 5954 5968 (face font-lock-constant-face) 5968 5969 (face font-lock-string-face) 5969 5979 nil 5979 5980 (face font-lock-string-face) 5980 6002 (face font-lock-constant-face) 6002 6003 (face font-lock-string-face) 6003 6013 nil 6013 6014 (face font-lock-string-face) 6014 6035 (face font-lock-constant-face) 6035 6036 (face font-lock-string-face) 6036 6046 nil 6046 6047 (face font-lock-string-face) 6047 6059 (face font-lock-constant-face) 6059 6060 (face font-lock-string-face) 6060 6070 nil 6070 6071 (face font-lock-string-face) 6071 6082 (face font-lock-constant-face) 6082 6083 (face font-lock-string-face) 6083 6093 nil 6093 6094 (face font-lock-string-face) 6094 6119 (face font-lock-constant-face) 6119 6120 (face font-lock-string-face) 6120 6130 nil 6130 6131 (face font-lock-string-face) 6131 6155 (face font-lock-constant-face) 6155 6156 (face font-lock-string-face) 6156 6166 nil 6166 6167 (face font-lock-string-face) 6167 6185 (face font-lock-constant-face) 6185 6186 (face font-lock-string-face) 6186 6196 nil 6196 6197 (face font-lock-string-face) 6197 6212 (face font-lock-constant-face) 6212 6213 (face font-lock-string-face) 6213 6223 nil 6223 6224 (face font-lock-string-face) 6224 6238 (face font-lock-constant-face) 6238 6239 (face font-lock-string-face) 6239 6249 nil 6249 6250 (face font-lock-string-face) 6250 6282 (face font-lock-constant-face) 6282 6283 (face font-lock-string-face) 6283 6293 nil 6293 6294 (face font-lock-string-face) 6294 6325 (face font-lock-constant-face) 6325 6326 (face font-lock-string-face) 6326 6336 nil 6336 6337 (face font-lock-string-face) 6337 6349 (face font-lock-constant-face) 6349 6350 (face font-lock-string-face) 6350 6360 nil 6360 6361 (face font-lock-string-face) 6361 6382 (face font-lock-constant-face) 6382 6383 (face font-lock-string-face) 6383 6393 nil 6393 6394 (face font-lock-string-face) 6394 6413 (face font-lock-constant-face) 6413 6414 (face font-lock-string-face) 6414 6424 nil 6424 6425 (face font-lock-string-face) 6425 6442 (face font-lock-constant-face) 6442 6443 (face font-lock-string-face) 6443 6453 nil 6453 6454 (face font-lock-string-face) 6454 6470 (face font-lock-constant-face) 6470 6471 (face font-lock-string-face) 6471 6481 nil 6481 6482 (face font-lock-string-face) 6482 6504 (face font-lock-constant-face) 6504 6505 (face font-lock-string-face) 6505 6515 nil 6515 6516 (face font-lock-string-face) 6516 6535 (face font-lock-constant-face) 6535 6536 (face font-lock-string-face) 6536 6546 nil 6546 6547 (face font-lock-string-face) 6547 6569 (face font-lock-constant-face) 6569 6570 (face font-lock-string-face) 6570 6580 nil 6580 6581 (face font-lock-string-face) 6581 6602 (face font-lock-constant-face) 6602 6603 (face font-lock-string-face) 6603 6613 nil 6613 6614 (face font-lock-string-face) 6614 6631 (face font-lock-constant-face) 6631 6632 (face font-lock-string-face) 6632 6642 nil 6642 6643 (face font-lock-string-face) 6643 6671 (face font-lock-constant-face) 6671 6672 (face font-lock-string-face) 6672 6682 nil 6682 6683 (face font-lock-string-face) 6683 6710 (face font-lock-constant-face) 6710 6711 (face font-lock-string-face) 6711 6721 nil 6721 6722 (face font-lock-string-face) 6722 6738 (face font-lock-constant-face) 6738 6739 (face font-lock-string-face) 6739 6749 nil 6749 6750 (face font-lock-string-face) 6750 6765 (face font-lock-constant-face) 6765 6766 (face font-lock-string-face) 6766 6776 nil 6776 6777 (face font-lock-string-face) 6777 6800 (face font-lock-constant-face) 6800 6801 (face font-lock-string-face) 6801 6811 nil 6811 6812 (face font-lock-string-face) 6812 6834 (face font-lock-constant-face) 6834 6835 (face font-lock-string-face) 6835 6845 nil 6845 6846 (face font-lock-string-face) 6846 6860 (face font-lock-constant-face) 6860 6861 (face font-lock-string-face) 6861 6871 nil 6871 6872 (face font-lock-string-face) 6872 6885 (face font-lock-constant-face) 6885 6886 (face font-lock-string-face) 6886 6896 nil 6896 6897 (face font-lock-string-face) 6897 6920 (face font-lock-constant-face) 6920 6921 (face font-lock-string-face) 6921 6931 nil 6931 6932 (face font-lock-string-face) 6932 6954 (face font-lock-constant-face) 6954 6955 (face font-lock-string-face) 6955 6965 nil 6965 6966 (face font-lock-string-face) 6966 6986 (face font-lock-constant-face) 6986 6987 (face font-lock-string-face) 6987 6997 nil 6997 6998 (face font-lock-string-face) 6998 7017 (face font-lock-constant-face) 7017 7018 (face font-lock-string-face) 7018 7028 nil 7028 7029 (face font-lock-string-face) 7029 7050 (face font-lock-constant-face) 7050 7051 (face font-lock-string-face) 7051 7061 nil 7061 7062 (face font-lock-string-face) 7062 7082 (face font-lock-constant-face) 7082 7083 (face font-lock-string-face) 7083 7093 nil 7093 7094 (face font-lock-string-face) 7094 7122 (face font-lock-constant-face) 7122 7123 (face font-lock-string-face) 7123 7133 nil 7133 7134 (face font-lock-string-face) 7134 7161 (face font-lock-constant-face) 7161 7162 (face font-lock-string-face) 7162 7172 nil 7172 7173 (face font-lock-string-face) 7173 7194 (face font-lock-constant-face) 7194 7195 (face font-lock-string-face) 7195 7205 nil 7205 7206 (face font-lock-string-face) 7206 7226 (face font-lock-constant-face) 7226 7227 (face font-lock-string-face) 7227 7237 nil 7237 7238 (face font-lock-string-face) 7238 7266 (face font-lock-constant-face) 7266 7267 (face font-lock-string-face) 7267 7277 nil 7277 7278 (face font-lock-string-face) 7278 7305 (face font-lock-constant-face) 7305 7306 (face font-lock-string-face) 7306 7316 nil 7316 7317 (face font-lock-string-face) 7317 7336 (face font-lock-constant-face) 7336 7337 (face font-lock-string-face) 7337 7347 nil 7347 7348 (face font-lock-string-face) 7348 7366 (face font-lock-constant-face) 7366 7367 (face font-lock-string-face) 7367 7377 nil 7377 7378 (face font-lock-string-face) 7378 7399 (face font-lock-constant-face) 7399 7400 (face font-lock-string-face) 7400 7410 nil 7410 7411 (face font-lock-string-face) 7411 7429 (face font-lock-constant-face) 7429 7430 (face font-lock-string-face) 7430 7440 nil 7440 7441 (face font-lock-string-face) 7441 7458 (face font-lock-constant-face) 7458 7459 (face font-lock-string-face) 7459 7469 nil 7469 7470 (face font-lock-string-face) 7470 7493 (face font-lock-constant-face) 7493 7494 (face font-lock-string-face) 7494 7504 nil 7504 7505 (face font-lock-string-face) 7505 7527 (face font-lock-constant-face) 7527 7528 (face font-lock-string-face) 7528 7538 nil 7538 7539 (face font-lock-string-face) 7539 7562 (face font-lock-constant-face) 7562 7563 (face font-lock-string-face) 7563 7573 nil 7573 7574 (face font-lock-string-face) 7574 7596 (face font-lock-constant-face) 7596 7597 (face font-lock-string-face) 7597 7607 nil 7607 7608 (face font-lock-string-face) 7608 7631 (face font-lock-constant-face) 7631 7632 (face font-lock-string-face) 7632 7642 nil 7642 7643 (face font-lock-string-face) 7643 7665 (face font-lock-constant-face) 7665 7666 (face font-lock-string-face) 7666 7676 nil 7676 7677 (face font-lock-string-face) 7677 7705 (face font-lock-constant-face) 7705 7706 (face font-lock-string-face) 7706 7716 nil 7716 7717 (face font-lock-string-face) 7717 7744 (face font-lock-constant-face) 7744 7745 (face font-lock-string-face) 7745 7755 nil 7755 7756 (face font-lock-string-face) 7756 7791 (face font-lock-constant-face) 7791 7792 (face font-lock-string-face) 7792 7802 nil 7802 7803 (face font-lock-string-face) 7803 7837 (face font-lock-constant-face) 7837 7838 (face font-lock-string-face) 7838 7848 nil 7848 7849 (face font-lock-string-face) 7849 7879 (face font-lock-constant-face) 7879 7880 (face font-lock-string-face) 7880 7890 nil 7890 7891 (face font-lock-string-face) 7891 7920 (face font-lock-constant-face) 7920 7921 (face font-lock-string-face) 7921 7931 nil 7931 7932 (face font-lock-string-face) 7932 7962 (face font-lock-constant-face) 7962 7963 (face font-lock-string-face) 7963 7973 nil 7973 7974 (face font-lock-string-face) 7974 8003 (face font-lock-constant-face) 8003 8004 (face font-lock-string-face) 8004 8014 nil 8014 8015 (face font-lock-string-face) 8015 8039 (face font-lock-constant-face) 8039 8040 (face font-lock-string-face) 8040 8050 nil 8050 8051 (face font-lock-string-face) 8051 8074 (face font-lock-constant-face) 8074 8075 (face font-lock-string-face) 8075 8085 nil 8085 8086 (face font-lock-string-face) 8086 8116 (face font-lock-constant-face) 8116 8117 (face font-lock-string-face) 8117 8127 nil 8127 8128 (face font-lock-string-face) 8128 8152 (face font-lock-constant-face) 8152 8153 (face font-lock-string-face) 8153 8163 nil 8163 8164 (face font-lock-string-face) 8164 8187 (face font-lock-constant-face) 8187 8188 (face font-lock-string-face) 8188 8198 nil 8198 8199 (face font-lock-string-face) 8199 8230 (face font-lock-constant-face) 8230 8231 (face font-lock-string-face) 8231 8241 nil 8241 8242 (face font-lock-string-face) 8242 8272 (face font-lock-constant-face) 8272 8273 (face font-lock-string-face) 8273 8283 nil 8283 8284 (face font-lock-string-face) 8284 8309 (face font-lock-constant-face) 8309 8310 (face font-lock-string-face) 8310 8320 nil 8320 8321 (face font-lock-string-face) 8321 8345 (face font-lock-constant-face) 8345 8346 (face font-lock-string-face) 8346 8356 nil 8356 8357 (face font-lock-string-face) 8357 8399 (face font-lock-constant-face) 8399 8400 (face font-lock-string-face) 8400 8410 nil 8410 8411 (face font-lock-string-face) 8411 8452 (face font-lock-constant-face) 8452 8453 (face font-lock-string-face) 8453 8463 nil 8463 8464 (face font-lock-string-face) 8464 8486 (face font-lock-constant-face) 8486 8487 (face font-lock-string-face) 8487 8497 nil 8497 8498 (face font-lock-string-face) 8498 8519 (face font-lock-constant-face) 8519 8520 (face font-lock-string-face) 8520 8530 nil 8530 8531 (face font-lock-string-face) 8531 8562 (face font-lock-constant-face) 8562 8563 (face font-lock-string-face) 8563 8573 nil 8573 8574 (face font-lock-string-face) 8574 8604 (face font-lock-constant-face) 8604 8605 (face font-lock-string-face) 8605 8615 nil 8615 8616 (face font-lock-string-face) 8616 8643 (face font-lock-constant-face) 8643 8644 (face font-lock-string-face) 8644 8654 nil 8654 8655 (face font-lock-string-face) 8655 8681 (face font-lock-constant-face) 8681 8682 (face font-lock-string-face) 8682 8692 nil 8692 8693 (face font-lock-string-face) 8693 8721 (face font-lock-constant-face) 8721 8722 (face font-lock-string-face) 8722 8732 nil 8732 8733 (face font-lock-string-face) 8733 8760 (face font-lock-constant-face) 8760 8761 (face font-lock-string-face) 8761 8771 nil 8771 8772 (face font-lock-string-face) 8772 8805 (face font-lock-constant-face) 8805 8806 (face font-lock-string-face) 8806 8816 nil 8816 8817 (face font-lock-string-face) 8817 8849 (face font-lock-constant-face) 8849 8850 (face font-lock-string-face) 8850 8860 nil 8860 8861 (face font-lock-string-face) 8861 8892 (face font-lock-constant-face) 8892 8893 (face font-lock-string-face) 8893 8903 nil 8903 8904 (face font-lock-string-face) 8904 8934 (face font-lock-constant-face) 8934 8935 (face font-lock-string-face) 8935 8945 nil 8945 8946 (face font-lock-string-face) 8946 8978 (face font-lock-constant-face) 8978 8979 (face font-lock-string-face) 8979 8989 nil 8989 8990 (face font-lock-string-face) 8990 9021 (face font-lock-constant-face) 9021 9022 (face font-lock-string-face) 9022 9032 nil 9032 9033 (face font-lock-string-face) 9033 9063 (face font-lock-constant-face) 9063 9064 (face font-lock-string-face) 9064 9074 nil 9074 9075 (face font-lock-string-face) 9075 9104 (face font-lock-constant-face) 9104 9105 (face font-lock-string-face) 9105 9115 nil 9115 9116 (face font-lock-string-face) 9116 9158 (face font-lock-constant-face) 9158 9159 (face font-lock-string-face) 9159 9169 nil 9169 9170 (face font-lock-string-face) 9170 9211 (face font-lock-constant-face) 9211 9212 (face font-lock-string-face) 9212 9222 nil 9222 9223 (face font-lock-string-face) 9223 9272 (face font-lock-constant-face) 9272 9273 (face font-lock-string-face) 9273 9283 nil 9283 9284 (face font-lock-string-face) 9284 9332 (face font-lock-constant-face) 9332 9333 (face font-lock-string-face) 9333 9343 nil 9343 9344 (face font-lock-string-face) 9344 9388 (face font-lock-constant-face) 9388 9389 (face font-lock-string-face) 9389 9399 nil 9399 9400 (face font-lock-string-face) 9400 9445 (face font-lock-constant-face) 9445 9446 (face font-lock-string-face) 9446 9456 nil 9456 9457 (face font-lock-string-face) 9457 9507 (face font-lock-constant-face) 9507 9508 (face font-lock-string-face) 9508 9518 nil 9518 9519 (face font-lock-string-face) 9519 9570 (face font-lock-constant-face) 9570 9571 (face font-lock-string-face) 9571 9581 nil 9581 9582 (face font-lock-string-face) 9582 9611 (face font-lock-constant-face) 9611 9612 (face font-lock-string-face) 9612 9622 nil 9622 9623 (face font-lock-string-face) 9623 9659 (face font-lock-constant-face) 9659 9660 (face font-lock-string-face) 9660 9670 nil 9670 9671 (face font-lock-string-face) 9671 9714 (face font-lock-constant-face) 9714 9715 (face font-lock-string-face) 9715 9725 nil 9725 9726 (face font-lock-string-face) 9726 9768 (face font-lock-constant-face) 9768 9769 (face font-lock-string-face) 9769 9779 nil 9779 9780 (face font-lock-string-face) 9780 9816 (face font-lock-constant-face) 9816 9817 (face font-lock-string-face) 9817 9827 nil 9827 9828 (face font-lock-string-face) 9828 9863 (face font-lock-constant-face) 9863 9864 (face font-lock-string-face) 9864 9874 nil 9874 9875 (face font-lock-string-face) 9875 9910 (face font-lock-constant-face) 9910 9911 (face font-lock-string-face) 9911 9921 nil 9921 9922 (face font-lock-string-face) 9922 9958 (face font-lock-constant-face) 9958 9959 (face font-lock-string-face) 9959 9969 nil 9969 9970 (face font-lock-string-face) 9970 10005 (face font-lock-constant-face) 10005 10006 (face font-lock-string-face) 10006 10016 nil 10016 10017 (face font-lock-string-face) 10017 10050 (face font-lock-constant-face) 10050 10051 (face font-lock-string-face) 10051 10061 nil 10061 10062 (face font-lock-string-face) 10062 10094 (face font-lock-constant-face) 10094 10095 (face font-lock-string-face) 10095 10105 nil 10105 10106 (face font-lock-string-face) 10106 10150 (face font-lock-constant-face) 10150 10151 (face font-lock-string-face) 10151 10161 nil 10161 10162 (face font-lock-string-face) 10162 10198 (face font-lock-constant-face) 10198 10199 (face font-lock-string-face) 10199 10209 nil 10209 10210 (face font-lock-string-face) 10210 10245 (face font-lock-constant-face) 10245 10246 (face font-lock-string-face) 10246 10256 nil 10256 10257 (face font-lock-string-face) 10257 10296 (face font-lock-constant-face) 10296 10297 (face font-lock-string-face) 10297 10307 nil 10307 10308 (face font-lock-string-face) 10308 10346 (face font-lock-constant-face) 10346 10347 (face font-lock-string-face) 10347 10357 nil 10357 10358 (face font-lock-string-face) 10358 10403 (face font-lock-constant-face) 10403 10404 (face font-lock-string-face) 10404 10414 nil 10414 10415 (face font-lock-string-face) 10415 10459 (face font-lock-constant-face) 10459 10460 (face font-lock-string-face) 10460 10470 nil 10470 10471 (face font-lock-string-face) 10471 10487 (face font-lock-constant-face) 10487 10488 (face font-lock-string-face) 10488 10498 nil 10498 10499 (face font-lock-string-face) 10499 10514 (face font-lock-constant-face) 10514 10515 (face font-lock-string-face) 10515 10525 nil 10525 10526 (face font-lock-string-face) 10526 10559 (face font-lock-constant-face) 10559 10560 (face font-lock-string-face) 10560 10570 nil 10570 10571 (face font-lock-string-face) 10571 10603 (face font-lock-constant-face) 10603 10604 (face font-lock-string-face) 10604 10614 nil 10614 10615 (face font-lock-string-face) 10615 10636 (face font-lock-constant-face) 10636 10637 (face font-lock-string-face) 10637 10647 nil 10647 10648 (face font-lock-string-face) 10648 10675 (face font-lock-constant-face) 10675 10676 (face font-lock-string-face) 10676 10686 nil 10686 10687 (face font-lock-string-face) 10687 10713 (face font-lock-constant-face) 10713 10714 (face font-lock-string-face) 10714 10724 nil 10724 10725 (face font-lock-string-face) 10725 10755 (face font-lock-constant-face) 10755 10756 (face font-lock-string-face) 10756 10766 nil 10766 10767 (face font-lock-string-face) 10767 10796 (face font-lock-constant-face) 10796 10797 (face font-lock-string-face) 10797 10807 nil 10807 10808 (face font-lock-string-face) 10808 10845 (face font-lock-constant-face) 10845 10846 (face font-lock-string-face) 10846 10856 nil 10856 10857 (face font-lock-string-face) 10857 10893 (face font-lock-constant-face) 10893 10894 (face font-lock-string-face) 10894 10904 nil 10904 10905 (face font-lock-string-face) 10905 10929 (face font-lock-constant-face) 10929 10930 (face font-lock-string-face) 10930 10940 nil 10940 10941 (face font-lock-string-face) 10941 10964 (face font-lock-constant-face) 10964 10965 (face font-lock-string-face) 10965 10975 nil 10975 10976 (face font-lock-string-face) 10976 10995 (face font-lock-constant-face) 10995 10996 (face font-lock-string-face) 10996 11006 nil 11006 11007 (face font-lock-string-face) 11007 11025 (face font-lock-constant-face) 11025 11026 (face font-lock-string-face) 11026 11036 nil 11036 11037 (face font-lock-string-face) 11037 11063 (face font-lock-constant-face) 11063 11064 (face font-lock-string-face) 11064 11074 nil 11074 11075 (face font-lock-string-face) 11075 11100 (face font-lock-constant-face) 11100 11101 (face font-lock-string-face) 11101 11111 nil 11111 11112 (face font-lock-string-face) 11112 11138 (face font-lock-constant-face) 11138 11139 (face font-lock-string-face) 11139 11149 nil 11149 11150 (face font-lock-string-face) 11150 11175 (face font-lock-constant-face) 11175 11176 (face font-lock-string-face) 11176 11193 nil 11193 11194 (face font-lock-string-face) 11194 11219 (face font-lock-keyword-face) 11219 11220 (face font-lock-string-face) 11220 11232 nil 11232 11233 (face font-lock-string-face) 11233 11245 (face font-lock-keyword-face) 11245 11246 (face font-lock-string-face) 11246 11260 nil 11260 11261 (face font-lock-string-face) 11261 11263 (face font-lock-constant-face) 11263 11264 (face font-lock-string-face) 11264 11292 nil 11292 11293 (face font-lock-string-face) 11293 11303 (face font-lock-keyword-face) 11303 11304 (face font-lock-string-face) 11304 11316 nil 11316 11381 (face font-lock-comment-face) 11381 11389 nil 11389 11439 (face font-lock-comment-face) 11439 11448 nil 11448 11449 (face font-lock-string-face) 11449 11464 (face font-lock-variable-name-face) 11464 11465 (face font-lock-string-face) 11465 11479 nil 11479 11480 (face font-lock-string-face) 11480 11492 (face font-lock-keyword-face) 11492 11493 (face font-lock-string-face) 11493 11509 nil 11509 11510 (face font-lock-string-face) 11510 11549 (face font-lock-function-name-face) 11549 11550 (face font-lock-string-face) 11550 11586 nil 11586 11587 (face font-lock-string-face) 11587 11602 (face font-lock-variable-name-face) 11602 11603 (face font-lock-string-face) 11603 11617 nil 11617 11618 (face font-lock-string-face) 11618 11626 (face font-lock-keyword-face) 11626 11627 (face font-lock-string-face) 11627 11643 nil 11643 11644 (face font-lock-string-face) 11644 11663 (face font-lock-constant-face) 11663 11664 (face font-lock-string-face) 11664 11678 nil 11678 11679 (face font-lock-string-face) 11679 11702 (face font-lock-constant-face) 11702 11703 (face font-lock-string-face) 11703 11717 nil 11717 11718 (face font-lock-string-face) 11718 11740 (face font-lock-constant-face) 11740 11741 (face font-lock-string-face) 11741 11755 nil 11755 11756 (face font-lock-string-face) 11756 11779 (face font-lock-constant-face) 11779 11780 (face font-lock-string-face) 11780 11794 nil 11794 11795 (face font-lock-string-face) 11795 11817 (face font-lock-constant-face) 11817 11818 (face font-lock-string-face) 11818 11832 nil 11832 11833 (face font-lock-string-face) 11833 11861 (face font-lock-constant-face) 11861 11862 (face font-lock-string-face) 11862 11876 nil 11876 11877 (face font-lock-string-face) 11877 11904 (face font-lock-constant-face) 11904 11905 (face font-lock-string-face) 11905 11919 nil 11919 11920 (face font-lock-string-face) 11920 11950 (face font-lock-constant-face) 11950 11951 (face font-lock-string-face) 11951 11965 nil 11965 11966 (face font-lock-string-face) 11966 11995 (face font-lock-constant-face) 11995 11996 (face font-lock-string-face) 11996 12010 nil 12010 12011 (face font-lock-string-face) 12011 12035 (face font-lock-constant-face) 12035 12036 (face font-lock-string-face) 12036 12050 nil 12050 12051 (face font-lock-string-face) 12051 12074 (face font-lock-constant-face) 12074 12075 (face font-lock-string-face) 12075 12089 nil 12089 12090 (face font-lock-string-face) 12090 12120 (face font-lock-constant-face) 12120 12121 (face font-lock-string-face) 12121 12135 nil 12135 12136 (face font-lock-string-face) 12136 12167 (face font-lock-constant-face) 12167 12168 (face font-lock-string-face) 12168 12182 nil 12182 12183 (face font-lock-string-face) 12183 12213 (face font-lock-constant-face) 12213 12214 (face font-lock-string-face) 12214 12228 nil 12228 12229 (face font-lock-string-face) 12229 12254 (face font-lock-constant-face) 12254 12255 (face font-lock-string-face) 12255 12269 nil 12269 12270 (face font-lock-string-face) 12270 12294 (face font-lock-constant-face) 12294 12295 (face font-lock-string-face) 12295 12309 nil 12309 12310 (face font-lock-string-face) 12310 12352 (face font-lock-constant-face) 12352 12353 (face font-lock-string-face) 12353 12367 nil 12367 12368 (face font-lock-string-face) 12368 12409 (face font-lock-constant-face) 12409 12410 (face font-lock-string-face) 12410 12424 nil 12424 12425 (face font-lock-string-face) 12425 12447 (face font-lock-constant-face) 12447 12448 (face font-lock-string-face) 12448 12462 nil 12462 12463 (face font-lock-string-face) 12463 12484 (face font-lock-constant-face) 12484 12485 (face font-lock-string-face) 12485 12499 nil 12499 12500 (face font-lock-string-face) 12500 12531 (face font-lock-constant-face) 12531 12532 (face font-lock-string-face) 12532 12546 nil 12546 12547 (face font-lock-string-face) 12547 12577 (face font-lock-constant-face) 12577 12578 (face font-lock-string-face) 12578 12592 nil 12592 12593 (face font-lock-string-face) 12593 12621 (face font-lock-constant-face) 12621 12622 (face font-lock-string-face) 12622 12636 nil 12636 12637 (face font-lock-string-face) 12637 12664 (face font-lock-constant-face) 12664 12665 (face font-lock-string-face) 12665 12679 nil 12679 12680 (face font-lock-string-face) 12680 12707 (face font-lock-constant-face) 12707 12708 (face font-lock-string-face) 12708 12722 nil 12722 12723 (face font-lock-string-face) 12723 12749 (face font-lock-constant-face) 12749 12750 (face font-lock-string-face) 12750 12764 nil 12764 12765 (face font-lock-string-face) 12765 12791 (face font-lock-constant-face) 12791 12792 (face font-lock-string-face) 12792 12806 nil 12806 12807 (face font-lock-string-face) 12807 12832 (face font-lock-constant-face) 12832 12833 (face font-lock-string-face) 12833 12868 nil 12868 12937 (face font-lock-comment-face) 12937 12945 nil 12945 13016 (face font-lock-comment-face) 13016 13024 nil 13024 13040 (face font-lock-comment-face) 13040 13049 nil 13049 13050 (face font-lock-string-face) 13050 13065 (face font-lock-variable-name-face) 13065 13066 (face font-lock-string-face) 13066 13080 nil 13080 13081 (face font-lock-string-face) 13081 13089 (face font-lock-keyword-face) 13089 13090 (face font-lock-string-face) 13090 13105 nil 13105 13106 (face font-lock-string-face) 13106 13149 (face font-lock-constant-face) 13149 13150 (face font-lock-string-face) 13150 13175 nil 13175 13176 (face font-lock-string-face) 13176 13183 (face font-lock-keyword-face) 13183 13184 (face font-lock-string-face) 13184 13199 nil 13199 13200 (face font-lock-string-face) 13200 13248 (face font-lock-constant-face) 13248 13249 (face font-lock-string-face) 13249 13274 nil 13274 13275 (face font-lock-string-face) 13275 13288 (face font-lock-keyword-face) 13288 13289 (face font-lock-string-face) 13289 13305 nil 13305 13306 (face font-lock-string-face) 13306 13315 (face font-lock-keyword-face) 13315 13316 (face font-lock-string-face) 13316 13334 nil 13334 13335 (face font-lock-string-face) 13335 13345 (face font-lock-constant-face) 13345 13346 (face font-lock-string-face) 13346 13397 nil 13397 13398 (face font-lock-string-face) 13398 13443 (face font-lock-variable-name-face) 13443 13444 (face font-lock-string-face) 13444 13458 nil 13458 13459 (face font-lock-string-face) 13459 13472 (face font-lock-keyword-face) 13472 13473 (face font-lock-string-face) 13473 13489 nil 13489 13490 (face font-lock-string-face) 13490 13499 (face font-lock-keyword-face) 13499 13500 (face font-lock-string-face) 13500 13518 nil 13518 13519 (face font-lock-string-face) 13519 13527 (face font-lock-constant-face) 13527 13528 (face font-lock-string-face) 13528 13579 nil 13579 13580 (face font-lock-string-face) 13580 13593 (face font-lock-variable-name-face) 13593 13594 (face font-lock-string-face) 13594 13608 nil 13608 13609 (face font-lock-string-face) 13609 13617 (face font-lock-keyword-face) 13617 13618 (face font-lock-string-face) 13618 13623 nil 13623 13624 (face font-lock-string-face) 13624 13631 (face font-lock-constant-face) 13631 13632 (face font-lock-string-face) 13632 13634 nil 13634 13635 (face font-lock-string-face) 13635 13641 (face font-lock-constant-face) 13641 13642 (face font-lock-string-face) 13642 13671 nil 13671 13672 (face font-lock-string-face) 13672 13679 (face font-lock-constant-face) 13679 13680 (face font-lock-string-face) 13680 13682 nil 13682 13683 (face font-lock-string-face) 13683 13703 (face font-lock-constant-face) 13703 13704 (face font-lock-string-face) 13704 13720 nil 13720 13721 (face font-lock-string-face) 13721 13734 (face font-lock-keyword-face) 13734 13735 (face font-lock-string-face) 13735 13751 nil 13751 13752 (face font-lock-string-face) 13752 13761 (face font-lock-keyword-face) 13761 13762 (face font-lock-string-face) 13762 13815 nil 13815 13816 (face font-lock-string-face) 13816 13829 (face font-lock-variable-name-face) 13829 13830 (face font-lock-string-face) 13830 13844 nil 13844 13845 (face font-lock-string-face) 13845 13853 (face font-lock-keyword-face) 13853 13854 (face font-lock-string-face) 13854 13870 nil 13870 13871 (face font-lock-string-face) 13871 13909 (face font-lock-constant-face) 13909 13910 (face font-lock-string-face) 13910 13924 nil 13924 13925 (face font-lock-string-face) 13925 13962 (face font-lock-constant-face) 13962 13963 (face font-lock-string-face) 13963 13999 nil 13999 14000 (face font-lock-string-face) 14000 14011 (face font-lock-variable-name-face) 14011 14012 (face font-lock-string-face) 14012 14026 nil 14026 14027 (face font-lock-string-face) 14027 14036 (face font-lock-keyword-face) 14036 14037 (face font-lock-string-face) 14037 14053 nil 14053 14054 (face font-lock-string-face) 14054 14064 (face font-lock-keyword-face) 14064 14065 (face font-lock-string-face) 14065 14084 nil 14084 14085 (face font-lock-string-face) 14085 14096 (face font-lock-variable-name-face) 14096 14097 (face font-lock-string-face) 14097 14117 nil 14117 14129 (face font-lock-string-face) 14129 14131 nil 14131 14169 (face font-lock-string-face) 14169 14176 (face font-lock-variable-name-face) 14176 14182 (face font-lock-string-face) 14182 14193 (face font-lock-variable-name-face) 14193 14196 (face font-lock-string-face) 14196 14233 nil 14233 14245 (face font-lock-string-face) 14245 14247 nil 14247 14259 (face font-lock-string-face) 14259 14316 nil 14316 14317 (face font-lock-string-face) 14317 14327 (face font-lock-keyword-face) 14327 14328 (face font-lock-string-face) 14328 14345 nil 14345 14346 (face font-lock-string-face) 14346 14359 (face font-lock-variable-name-face) 14359 14360 (face font-lock-string-face) 14360 14378 nil 14378 14379 (face font-lock-string-face) 14379 14385 (face font-lock-keyword-face) 14385 14386 (face font-lock-string-face) 14386 14406 nil 14406 14411 (face font-lock-string-face) 14411 14413 (face font-lock-variable-name-face) 14413 14423 (face font-lock-variable-name-face) 14423 14443 (face font-lock-string-face) 14443 14476 nil 14476 14477 (face font-lock-string-face) 14477 14490 (face font-lock-keyword-face) 14490 14491 (face font-lock-string-face) 14491 14511 nil 14511 14512 (face font-lock-string-face) 14512 14521 (face font-lock-keyword-face) 14521 14522 (face font-lock-string-face) 14522 14544 nil 14544 14545 (face font-lock-string-face) 14545 14549 (face font-lock-constant-face) 14549 14551 (face font-lock-variable-name-face) 14551 14561 (face font-lock-variable-name-face) 14561 14578 (face font-lock-constant-face) 14578 14579 (face font-lock-string-face) 14579 14631 nil 14631 14632 (face font-lock-string-face) 14632 14639 (face font-lock-keyword-face) 14639 14640 (face font-lock-string-face) 14640 14660 nil 14660 14661 (face font-lock-string-face) 14661 14669 (face font-lock-preprocessor-face) 14669 14670 (face font-lock-string-face) 14670 14707 nil 14707 14729 (face font-lock-comment-face) 14729 14743 nil 14743 14744 (face font-lock-string-face) 14744 14752 (face font-lock-keyword-face) 14752 14753 (face font-lock-string-face) 14753 14773 nil 14773 14774 (face font-lock-string-face) 14774 14800 (face font-lock-constant-face) 14800 14801 (face font-lock-string-face) 14801 14819 nil 14819 14820 (face font-lock-string-face) 14820 14845 (face font-lock-constant-face) 14845 14846 (face font-lock-string-face) 14846 14915 nil 14915 14916 (face font-lock-string-face) 14916 14929 (face font-lock-variable-name-face) 14929 14930 (face font-lock-string-face) 14930 14944 nil 14944 14945 (face font-lock-string-face) 14945 14955 (face font-lock-keyword-face) 14955 14956 (face font-lock-string-face) 14956 14973 nil 14973 14974 (face font-lock-string-face) 14974 14993 (face font-lock-variable-name-face) 14993 14994 (face font-lock-string-face) 14994 15012 nil 15012 15013 (face font-lock-string-face) 15013 15019 (face font-lock-keyword-face) 15019 15020 (face font-lock-string-face) 15020 15040 nil 15040 15075 (face font-lock-string-face) 15075 15108 nil 15108 15109 (face font-lock-string-face) 15109 15122 (face font-lock-keyword-face) 15122 15123 (face font-lock-string-face) 15123 15143 nil 15143 15144 (face font-lock-string-face) 15144 15153 (face font-lock-keyword-face) 15153 15154 (face font-lock-string-face) 15154 15176 nil 15176 15177 (face font-lock-string-face) 15177 15215 (face font-lock-constant-face) 15215 15216 (face font-lock-string-face) 15216 15268 nil 15268 15269 (face font-lock-string-face) 15269 15276 (face font-lock-keyword-face) 15276 15277 (face font-lock-string-face) 15277 15297 nil 15297 15298 (face font-lock-string-face) 15298 15312 (face font-lock-preprocessor-face) 15312 15313 (face font-lock-string-face) 15313 15350 nil 15350 15378 (face font-lock-comment-face) 15378 15392 nil 15392 15393 (face font-lock-string-face) 15393 15401 (face font-lock-keyword-face) 15401 15402 (face font-lock-string-face) 15402 15422 nil 15422 15423 (face font-lock-string-face) 15423 15450 (face font-lock-constant-face) 15450 15451 (face font-lock-string-face) 15451 15469 nil 15469 15470 (face font-lock-string-face) 15470 15496 (face font-lock-constant-face) 15496 15497 (face font-lock-string-face) 15497 15566 nil 15566 15567 (face font-lock-string-face) 15567 15600 (face font-lock-variable-name-face) 15600 15601 (face font-lock-string-face) 15601 15615 nil 15615 15663 (face font-lock-comment-face) 15663 15673 nil 15673 15674 (face font-lock-string-face) 15674 15682 (face font-lock-keyword-face) 15682 15683 (face font-lock-string-face) 15683 15699 nil 15699 15700 (face font-lock-string-face) 15700 15743 (face font-lock-constant-face) 15743 15744 (face font-lock-string-face) 15744 15758 nil 15758 15759 (face font-lock-string-face) 15759 15801 (face font-lock-constant-face) 15801 15802 (face font-lock-string-face) 15802 15838 nil 15838 15839 (face font-lock-string-face) 15839 15848 (face font-lock-variable-name-face) 15848 15849 (face font-lock-string-face) 15849 15863 nil 15863 15864 (face font-lock-string-face) 15864 15877 (face font-lock-keyword-face) 15877 15878 (face font-lock-string-face) 15878 15894 nil 15894 15895 (face font-lock-string-face) 15895 15904 (face font-lock-keyword-face) 15904 15905 (face font-lock-string-face) 15905 15923 nil 15923 15924 (face font-lock-string-face) 15924 15980 (face font-lock-constant-face) 15980 15981 (face font-lock-string-face) 15981 15997 nil 15997 15998 (face font-lock-string-face) 15998 16057 (face font-lock-constant-face) 16057 16058 (face font-lock-string-face) 16058 16074 nil 16074 16075 (face font-lock-string-face) 16075 16131 (face font-lock-constant-face) 16131 16132 (face font-lock-string-face) 16132 16148 nil 16148 16149 (face font-lock-string-face) 16149 16205 (face font-lock-constant-face) 16205 16206 (face font-lock-string-face) 16206 16222 nil 16222 16223 (face font-lock-string-face) 16223 16275 (face font-lock-constant-face) 16275 16276 (face font-lock-string-face) 16276 16327 nil 16327 16328 (face font-lock-string-face) 16328 16337 (face font-lock-variable-name-face) 16337 16338 (face font-lock-string-face) 16338 16352 nil 16352 16353 (face font-lock-string-face) 16353 16361 (face font-lock-keyword-face) 16361 16362 (face font-lock-string-face) 16362 16378 nil 16378 16379 (face font-lock-string-face) 16379 16406 (face font-lock-constant-face) 16406 16407 (face font-lock-string-face) 16407 16421 nil 16421 16422 (face font-lock-string-face) 16422 16448 (face font-lock-constant-face) 16448 16449 (face font-lock-string-face) 16449 16463 nil 16463 16464 (face font-lock-string-face) 16464 16507 (face font-lock-constant-face) 16507 16508 (face font-lock-string-face) 16508 16522 nil 16522 16523 (face font-lock-string-face) 16523 16565 (face font-lock-constant-face) 16565 16566 (face font-lock-string-face) 16566 16602 nil 16602 16603 (face font-lock-string-face) 16603 16646 (face font-lock-variable-name-face) 16646 16647 (face font-lock-string-face) 16647 16661 nil 16661 16662 (face font-lock-string-face) 16662 16669 (face font-lock-keyword-face) 16669 16670 (face font-lock-string-face) 16670 16686 nil 16686 16687 (face font-lock-string-face) 16687 16697 (face font-lock-constant-face) 16697 16698 (face font-lock-string-face) 16698 16712 nil 16712 16713 (face font-lock-string-face) 16713 16722 (face font-lock-constant-face) 16722 16723 (face font-lock-string-face) 16723 16737 nil 16737 16738 (face font-lock-string-face) 16738 16760 (face font-lock-constant-face) 16760 16761 (face font-lock-string-face) 16761 16775 nil 16775 16776 (face font-lock-string-face) 16776 16797 (face font-lock-constant-face) 16797 16798 (face font-lock-string-face) 16798 16812 nil 16812 16813 (face font-lock-string-face) 16813 16830 (face font-lock-constant-face) 16830 16831 (face font-lock-string-face) 16831 16845 nil 16845 16846 (face font-lock-string-face) 16846 16862 (face font-lock-constant-face) 16862 16863 (face font-lock-string-face) 16863 16877 nil 16877 16878 (face font-lock-string-face) 16878 16889 (face font-lock-constant-face) 16889 16890 (face font-lock-string-face) 16890 16904 nil 16904 16905 (face font-lock-string-face) 16905 16915 (face font-lock-constant-face) 16915 16916 (face font-lock-string-face) 16916 16930 nil 16930 16931 (face font-lock-string-face) 16931 16955 (face font-lock-constant-face) 16955 16956 (face font-lock-string-face) 16956 16970 nil 16970 16971 (face font-lock-string-face) 16971 16994 (face font-lock-constant-face) 16994 16995 (face font-lock-string-face) 16995 17009 nil 17009 17010 (face font-lock-string-face) 17010 17034 (face font-lock-constant-face) 17034 17035 (face font-lock-string-face) 17035 17049 nil 17049 17050 (face font-lock-string-face) 17050 17073 (face font-lock-constant-face) 17073 17074 (face font-lock-string-face) 17074 17088 nil 17088 17089 (face font-lock-string-face) 17089 17114 (face font-lock-constant-face) 17114 17115 (face font-lock-string-face) 17115 17129 nil 17129 17130 (face font-lock-string-face) 17130 17154 (face font-lock-constant-face) 17154 17155 (face font-lock-string-face) 17155 17210 nil 17210 17211 (face font-lock-string-face) 17211 17222 (face font-lock-keyword-face) 17222 17223 (face font-lock-string-face) 17223 17225 nil 17225 17226 (face font-lock-string-face) 17226 17237 (face font-lock-function-name-face) 17237 17238 (face font-lock-string-face) 17238 17246 nil 17246 17247 (face font-lock-string-face) 17247 17251 (face font-lock-keyword-face) 17251 17252 (face font-lock-string-face) 17252 17254 nil 17254 17255 (face font-lock-string-face) 17255 17269 (face font-lock-type-face) 17269 17270 (face font-lock-string-face) 17270 17278 nil 17278 17279 (face font-lock-string-face) 17279 17291 (face font-lock-keyword-face) 17291 17292 (face font-lock-string-face) 17292 17304 nil 17304 17305 (face font-lock-string-face) 17305 17307 (face font-lock-constant-face) 17307 17308 (face font-lock-string-face) 17308 17325 nil 17325 17326 (face font-lock-string-face) 17326 17336 (face font-lock-keyword-face) 17336 17337 (face font-lock-string-face) 17337 17350 nil 17350 17351 (face font-lock-string-face) 17351 17371 (face font-lock-variable-name-face) 17371 17372 (face font-lock-string-face) 17372 17386 nil 17386 17387 (face font-lock-string-face) 17387 17404 (face font-lock-keyword-face) 17404 17405 (face font-lock-string-face) 17405 17423 nil 17423 17424 (face font-lock-string-face) 17424 17442 (face font-lock-variable-name-face) 17442 17443 (face font-lock-string-face) 17443 17461 nil 17461 17462 (face font-lock-string-face) 17462 17469 (face font-lock-keyword-face) 17469 17470 (face font-lock-string-face) 17470 17474 nil 17474 17498 (face font-lock-string-face) 17498 17553 nil 17553 17554 (face font-lock-string-face) 17554 17599 (face font-lock-variable-name-face) 17599 17600 (face font-lock-string-face) 17600 17614 nil 17614 17615 (face font-lock-string-face) 17615 17627 (face font-lock-keyword-face) 17627 17628 (face font-lock-string-face) 17628 17644 nil 17644 17645 (face font-lock-string-face) 17645 17665 (face font-lock-function-name-face) 17665 17666 (face font-lock-string-face) 17666 17703 nil 17703 17704 (face font-lock-string-face) 17704 17724 (face font-lock-variable-name-face) 17724 17725 (face font-lock-string-face) 17725 17739 nil 17739 17740 (face font-lock-string-face) 17740 17752 (face font-lock-keyword-face) 17752 17753 (face font-lock-string-face) 17753 17769 nil 17769 17770 (face font-lock-string-face) 17770 17790 (face font-lock-function-name-face) 17790 17791 (face font-lock-string-face) 17791 17833 nil 17833 17834 (face font-lock-string-face) 17834 17841 (face font-lock-keyword-face) 17841 17842 (face font-lock-string-face) 17842 17854 nil 17854 17855 (face font-lock-string-face) 17855 17874 (face font-lock-constant-face) 17874 17875 (face font-lock-string-face) 17875 17885 nil 17885 17886 (face font-lock-string-face) 17886 17904 (face font-lock-constant-face) 17904 17905 (face font-lock-string-face) 17905 17935 nil 17935 17936 (face font-lock-string-face) 17936 17947 (face font-lock-keyword-face) 17947 17948 (face font-lock-string-face) 17948 17950 nil 17950 17951 (face font-lock-string-face) 17951 17971 (face font-lock-function-name-face) 17971 17972 (face font-lock-string-face) 17972 17980 nil 17980 17981 (face font-lock-string-face) 17981 17985 (face font-lock-keyword-face) 17985 17986 (face font-lock-string-face) 17986 17988 nil 17988 17989 (face font-lock-string-face) 17989 18003 (face font-lock-type-face) 18003 18004 (face font-lock-string-face) 18004 18012 nil 18012 18013 (face font-lock-string-face) 18013 18025 (face font-lock-keyword-face) 18025 18026 (face font-lock-string-face) 18026 18038 nil 18038 18039 (face font-lock-string-face) 18039 18041 (face font-lock-constant-face) 18041 18042 (face font-lock-string-face) 18042 18059 nil 18059 18060 (face font-lock-string-face) 18060 18067 (face font-lock-keyword-face) 18067 18068 (face font-lock-string-face) 18068 18080 nil 18080 18081 (face font-lock-string-face) 18081 18114 (face font-lock-constant-face) 18114 18115 (face font-lock-string-face) 18115 18125 nil 18125 18126 (face font-lock-string-face) 18126 18162 (face font-lock-constant-face) 18162 18163 (face font-lock-string-face) 18163 18173 nil 18173 18174 (face font-lock-string-face) 18174 18212 (face font-lock-constant-face) 18212 18213 (face font-lock-string-face) 18213 18223 nil 18223 18224 (face font-lock-string-face) 18224 18261 (face font-lock-constant-face) 18261 18262 (face font-lock-string-face) 18262 18272 nil 18272 18273 (face font-lock-string-face) 18273 18311 (face font-lock-constant-face) 18311 18312 (face font-lock-string-face) 18312 18322 nil 18322 18323 (face font-lock-string-face) 18323 18356 (face font-lock-constant-face) 18356 18357 (face font-lock-string-face) 18357 18367 nil 18367 18368 (face font-lock-string-face) 18368 18403 (face font-lock-constant-face) 18403 18404 (face font-lock-string-face) 18404 18414 nil 18414 18415 (face font-lock-string-face) 18415 18451 (face font-lock-constant-face) 18451 18452 (face font-lock-string-face) 18452 18462 nil 18462 18463 (face font-lock-string-face) 18463 18499 (face font-lock-constant-face) 18499 18500 (face font-lock-string-face) 18500 18510 nil 18510 18511 (face font-lock-string-face) 18511 18547 (face font-lock-constant-face) 18547 18548 (face font-lock-string-face) 18548 18558 nil 18558 18559 (face font-lock-string-face) 18559 18581 (face font-lock-constant-face) 18581 18582 (face font-lock-string-face) 18582 18592 nil 18592 18593 (face font-lock-string-face) 18593 18618 (face font-lock-constant-face) 18618 18619 (face font-lock-string-face) 18619 18629 nil 18629 18630 (face font-lock-string-face) 18630 18657 (face font-lock-constant-face) 18657 18658 (face font-lock-string-face) 18658 18668 nil 18668 18669 (face font-lock-string-face) 18669 18697 (face font-lock-constant-face) 18697 18698 (face font-lock-string-face) 18698 18708 nil 18708 18709 (face font-lock-string-face) 18709 18750 (face font-lock-constant-face) 18750 18751 (face font-lock-string-face) 18751 18761 nil 18761 18762 (face font-lock-string-face) 18762 18803 (face font-lock-constant-face) 18803 18804 (face font-lock-string-face) 18804 18814 nil 18814 18815 (face font-lock-string-face) 18815 18856 (face font-lock-constant-face) 18856 18857 (face font-lock-string-face) 18857 18867 nil 18867 18868 (face font-lock-string-face) 18868 18902 (face font-lock-constant-face) 18902 18903 (face font-lock-string-face) 18903 18913 nil 18913 18914 (face font-lock-string-face) 18914 18948 (face font-lock-constant-face) 18948 18949 (face font-lock-string-face) 18949 18959 nil 18959 18960 (face font-lock-string-face) 18960 18994 (face font-lock-constant-face) 18994 18995 (face font-lock-string-face) 18995 19005 nil 19005 19006 (face font-lock-string-face) 19006 19035 (face font-lock-constant-face) 19035 19036 (face font-lock-string-face) 19036 19046 nil 19046 19047 (face font-lock-string-face) 19047 19075 (face font-lock-constant-face) 19075 19076 (face font-lock-string-face) 19076 19093 nil 19093 19094 (face font-lock-string-face) 19094 19104 (face font-lock-keyword-face) 19104 19105 (face font-lock-string-face) 19105 19118 nil 19118 19119 (face font-lock-string-face) 19119 19139 (face font-lock-variable-name-face) 19139 19140 (face font-lock-string-face) 19140 19154 nil 19154 19155 (face font-lock-string-face) 19155 19172 (face font-lock-keyword-face) 19172 19173 (face font-lock-string-face) 19173 19191 nil 19191 19192 (face font-lock-string-face) 19192 19210 (face font-lock-variable-name-face) 19210 19211 (face font-lock-string-face) 19211 19229 nil 19229 19230 (face font-lock-string-face) 19230 19237 (face font-lock-keyword-face) 19237 19238 (face font-lock-string-face) 19238 19242 nil 19242 19266 (face font-lock-string-face) 19266 19321 nil 19321 19322 (face font-lock-string-face) 19322 19342 (face font-lock-variable-name-face) 19342 19343 (face font-lock-string-face) 19343 19357 nil 19357 19399 (face font-lock-comment-face) 19399 19409 nil 19409 19410 (face font-lock-string-face) 19410 19417 (face font-lock-keyword-face) 19417 19418 (face font-lock-string-face) 19418 19434 nil 19434 19435 (face font-lock-string-face) 19435 19480 (face font-lock-constant-face) 19480 19481 (face font-lock-string-face) 19481 19495 nil 19495 19496 (face font-lock-string-face) 19496 19535 (face font-lock-constant-face) 19535 19536 (face font-lock-string-face) 19536 19573 nil 19573 19574 (face font-lock-string-face) 19574 19623 (face font-lock-variable-name-face) 19623 19624 (face font-lock-string-face) 19624 19638 nil 19638 19639 (face font-lock-string-face) 19639 19645 (face font-lock-keyword-face) 19645 19646 (face font-lock-string-face) 19646 19662 nil 19662 19670 (face font-lock-string-face) 19670 19707 nil 19707 19708 (face font-lock-string-face) 19708 19719 (face font-lock-variable-name-face) 19719 19720 (face font-lock-string-face) 19720 19734 nil 19734 19735 (face font-lock-string-face) 19735 19749 (face font-lock-keyword-face) 19749 19750 (face font-lock-string-face) 19750 19766 nil 19766 19773 (face font-lock-string-face) 19773 19791 nil 19791 19792 (face font-lock-string-face) 19792 19806 (face font-lock-keyword-face) 19806 19807 (face font-lock-string-face) 19807 19827 nil 19827 19890 (face font-lock-comment-face) 19890 19906 nil 19906 19971 (face font-lock-comment-face) 19971 19987 nil 19987 20032 (face font-lock-comment-face) 20032 20048 nil 20048 20072 (face font-lock-string-face) 20072 20074 nil 20074 20077 (face font-lock-string-face) 20077 20080 nil 20080 20086 (face font-lock-comment-face) 20086 20155 nil 20155 20156 (face font-lock-string-face) 20156 20165 (face font-lock-variable-name-face) 20165 20166 (face font-lock-string-face) 20166 20180 nil 20180 20181 (face font-lock-string-face) 20181 20190 (face font-lock-keyword-face) 20190 20191 (face font-lock-string-face) 20191 20207 nil 20207 20208 (face font-lock-string-face) 20208 20218 (face font-lock-variable-name-face) 20218 20219 (face font-lock-string-face) 20219 20237 nil 20237 20246 (face font-lock-string-face) 20246 20262 nil 20262 20270 (face font-lock-string-face) 20270 20286 nil 20286 20298 (face font-lock-string-face) 20298 20314 nil 20314 20322 (face font-lock-string-face) 20322 20374 nil 20374 20375 (face font-lock-string-face) 20375 20384 (face font-lock-variable-name-face) 20384 20385 (face font-lock-string-face) 20385 20399 nil 20399 20400 (face font-lock-string-face) 20400 20409 (face font-lock-keyword-face) 20409 20410 (face font-lock-string-face) 20410 20426 nil 20426 20427 (face font-lock-string-face) 20427 20437 (face font-lock-variable-name-face) 20437 20438 (face font-lock-string-face) 20438 20456 nil 20456 20466 (face font-lock-string-face) 20466 20482 nil 20482 20491 (face font-lock-string-face) 20491 20507 nil 20507 20519 (face font-lock-string-face) 20519 20535 nil 20535 20543 (face font-lock-string-face) 20543 20595 nil 20595 20596 (face font-lock-string-face) 20596 20621 (face font-lock-variable-name-face) 20621 20622 (face font-lock-string-face) 20622 20636 nil 20636 20637 (face font-lock-string-face) 20637 20646 (face font-lock-keyword-face) 20646 20647 (face font-lock-string-face) 20647 20663 nil 20663 20664 (face font-lock-string-face) 20664 20674 (face font-lock-keyword-face) 20674 20675 (face font-lock-string-face) 20675 20695 nil 20695 20696 (face font-lock-string-face) 20696 20715 (face font-lock-variable-name-face) 20715 20716 (face font-lock-string-face) 20716 20736 nil 20736 20748 (face font-lock-string-face) 20748 20770 nil 20770 20780 (face font-lock-string-face) 20780 20800 nil 20800 20807 (face font-lock-string-face) 20807 20827 nil 20827 20839 (face font-lock-string-face) 20839 20859 nil 20859 20867 (face font-lock-string-face) 20867 20923 nil 20923 20935 (face font-lock-string-face) 20935 20957 nil 20957 20972 (face font-lock-string-face) 20972 20992 nil 20992 20999 (face font-lock-string-face) 20999 21019 nil 21019 21026 (face font-lock-string-face) 21026 21046 nil 21046 21058 (face font-lock-string-face) 21058 21078 nil 21078 21086 (face font-lock-string-face) 21086 21180 nil 21180 21181 (face font-lock-string-face) 21181 21190 (face font-lock-keyword-face) 21190 21191 (face font-lock-string-face) 21191 21203 nil 21203 21204 (face font-lock-string-face) 21204 21220 (face font-lock-variable-name-face) 21220 21221 (face font-lock-string-face) 21221 21223 nil 21223 21224 (face font-lock-string-face) 21224 21256 (face font-lock-variable-name-face) 21256 21257 (face font-lock-string-face) 21257 21274 nil 21274 21314 (face font-lock-string-face) 21314 21325 nil 21325 21326 (face font-lock-string-face) 21326 21334 (face font-lock-keyword-face) 21334 21335 (face font-lock-string-face) 21335 21347 nil 21347 21348 (face font-lock-string-face) 21348 21385 (face font-lock-constant-face) 21385 21386 (face font-lock-string-face) 21386 21416 nil 21416 21417 (face font-lock-string-face) 21417 21428 (face font-lock-keyword-face) 21428 21429 (face font-lock-string-face) 21429 21431 nil 21431 21432 (face font-lock-string-face) 21432 21452 (face font-lock-function-name-face) 21452 21453 (face font-lock-string-face) 21453 21461 nil 21461 21462 (face font-lock-string-face) 21462 21466 (face font-lock-keyword-face) 21466 21467 (face font-lock-string-face) 21467 21469 nil 21469 21470 (face font-lock-string-face) 21470 21484 (face font-lock-type-face) 21484 21485 (face font-lock-string-face) 21485 21493 nil 21493 21494 (face font-lock-string-face) 21494 21506 (face font-lock-keyword-face) 21506 21507 (face font-lock-string-face) 21507 21519 nil 21519 21520 (face font-lock-string-face) 21520 21522 (face font-lock-constant-face) 21522 21523 (face font-lock-string-face) 21523 21540 nil 21540 21541 (face font-lock-string-face) 21541 21548 (face font-lock-keyword-face) 21548 21549 (face font-lock-string-face) 21549 21561 nil 21561 21562 (face font-lock-string-face) 21562 21595 (face font-lock-constant-face) 21595 21596 (face font-lock-string-face) 21596 21606 nil 21606 21607 (face font-lock-string-face) 21607 21637 (face font-lock-constant-face) 21637 21638 (face font-lock-string-face) 21638 21648 nil 21648 21649 (face font-lock-string-face) 21649 21682 (face font-lock-constant-face) 21682 21683 (face font-lock-string-face) 21683 21693 nil 21693 21694 (face font-lock-string-face) 21694 21724 (face font-lock-constant-face) 21724 21725 (face font-lock-string-face) 21725 21735 nil 21735 21736 (face font-lock-string-face) 21736 21758 (face font-lock-constant-face) 21758 21759 (face font-lock-string-face) 21759 21769 nil 21769 21770 (face font-lock-string-face) 21770 21795 (face font-lock-constant-face) 21795 21796 (face font-lock-string-face) 21796 21806 nil 21806 21807 (face font-lock-string-face) 21807 21836 (face font-lock-constant-face) 21836 21837 (face font-lock-string-face) 21837 21847 nil 21847 21848 (face font-lock-string-face) 21848 21876 (face font-lock-constant-face) 21876 21877 (face font-lock-string-face) 21877 21907 nil 21907 21908 (face font-lock-string-face) 21908 21919 (face font-lock-keyword-face) 21919 21920 (face font-lock-string-face) 21920 21922 nil 21922 21923 (face font-lock-string-face) 21923 21938 (face font-lock-function-name-face) 21938 21939 (face font-lock-string-face) 21939 21947 nil 21947 21948 (face font-lock-string-face) 21948 21952 (face font-lock-keyword-face) 21952 21953 (face font-lock-string-face) 21953 21955 nil 21955 21956 (face font-lock-string-face) 21956 21966 (face font-lock-type-face) 21966 21967 (face font-lock-string-face) 21967 21975 nil 21975 21976 (face font-lock-string-face) 21976 21988 (face font-lock-keyword-face) 21988 21989 (face font-lock-string-face) 21989 22001 nil 22001 22002 (face font-lock-string-face) 22002 22007 (face font-lock-function-name-face) 22007 22008 (face font-lock-string-face) 22008 22018 nil 22018 22019 (face font-lock-string-face) 22019 22037 (face font-lock-function-name-face) 22037 22038 (face font-lock-string-face) 22038 22048 nil 22048 22049 (face font-lock-string-face) 22049 22060 (face font-lock-function-name-face) 22060 22061 (face font-lock-string-face) 22061 22071 nil 22071 22072 (face font-lock-string-face) 22072 22093 (face font-lock-function-name-face) 22093 22094 (face font-lock-string-face) 22094 22104 nil 22104 22105 (face font-lock-string-face) 22105 22131 (face font-lock-function-name-face) 22131 22132 (face font-lock-string-face) 22132 22142 nil 22142 22143 (face font-lock-string-face) 22143 22177 (face font-lock-function-name-face) 22177 22178 (face font-lock-string-face) 22178 22188 nil 22188 22189 (face font-lock-string-face) 22189 22215 (face font-lock-function-name-face) 22215 22216 (face font-lock-string-face) 22216 22226 nil 22226 22227 (face font-lock-string-face) 22227 22253 (face font-lock-function-name-face) 22253 22254 (face font-lock-string-face) 22254 22264 nil 22264 22265 (face font-lock-string-face) 22265 22280 (face font-lock-function-name-face) 22280 22281 (face font-lock-string-face) 22281 22298 nil 22298 22299 (face font-lock-string-face) 22299 22306 (face font-lock-keyword-face) 22306 22307 (face font-lock-string-face) 22307 22319 nil 22319 22320 (face font-lock-string-face) 22320 22361 (face font-lock-constant-face) 22361 22362 (face font-lock-string-face) 22362 22372 nil 22372 22373 (face font-lock-string-face) 22373 22413 (face font-lock-constant-face) 22413 22414 (face font-lock-string-face) 22414 22424 nil 22424 22425 (face font-lock-string-face) 22425 22461 (face font-lock-constant-face) 22461 22462 (face font-lock-string-face) 22462 22472 nil 22472 22473 (face font-lock-string-face) 22473 22502 (face font-lock-constant-face) 22502 22503 (face font-lock-string-face) 22503 22513 nil 22513 22514 (face font-lock-string-face) 22514 22550 (face font-lock-constant-face) 22550 22551 (face font-lock-string-face) 22551 22561 nil 22561 22562 (face font-lock-string-face) 22562 22610 (face font-lock-constant-face) 22610 22611 (face font-lock-string-face) 22611 22621 nil 22621 22622 (face font-lock-string-face) 22622 22663 (face font-lock-constant-face) 22663 22664 (face font-lock-string-face) 22664 22674 nil 22674 22675 (face font-lock-string-face) 22675 22711 (face font-lock-constant-face) 22711 22712 (face font-lock-string-face) 22712 22722 nil 22722 22723 (face font-lock-string-face) 22723 22757 (face font-lock-constant-face) 22757 22758 (face font-lock-string-face) 22758 22768 nil 22768 22769 (face font-lock-string-face) 22769 22797 (face font-lock-constant-face) 22797 22798 (face font-lock-string-face) 22798 22808 nil 22808 22809 (face font-lock-string-face) 22809 22853 (face font-lock-constant-face) 22853 22854 (face font-lock-string-face) 22854 22864 nil 22864 22865 (face font-lock-string-face) 22865 22900 (face font-lock-constant-face) 22900 22901 (face font-lock-string-face) 22901 22911 nil 22911 22912 (face font-lock-string-face) 22912 22961 (face font-lock-constant-face) 22961 22962 (face font-lock-string-face) 22962 22972 nil 22972 22973 (face font-lock-string-face) 22973 23011 (face font-lock-constant-face) 23011 23012 (face font-lock-string-face) 23012 23022 nil 23022 23023 (face font-lock-string-face) 23023 23055 (face font-lock-constant-face) 23055 23056 (face font-lock-string-face) 23056 23066 nil 23066 23067 (face font-lock-string-face) 23067 23116 (face font-lock-constant-face) 23116 23117 (face font-lock-string-face) 23117 23127 nil 23127 23128 (face font-lock-string-face) 23128 23178 (face font-lock-constant-face) 23178 23179 (face font-lock-string-face) 23179 23189 nil 23189 23190 (face font-lock-string-face) 23190 23228 (face font-lock-constant-face) 23228 23229 (face font-lock-string-face) 23229 23239 nil 23239 23240 (face font-lock-string-face) 23240 23277 (face font-lock-constant-face) 23277 23278 (face font-lock-string-face) 23278 23288 nil 23288 23289 (face font-lock-string-face) 23289 23332 (face font-lock-constant-face) 23332 23333 (face font-lock-string-face) 23333 23343 nil 23343 23344 (face font-lock-string-face) 23344 23368 (face font-lock-constant-face) 23368 23369 (face font-lock-string-face) 23369 23379 nil 23379 23380 (face font-lock-string-face) 23380 23402 (face font-lock-constant-face) 23402 23403 (face font-lock-string-face) 23403 23413 nil 23413 23414 (face font-lock-string-face) 23414 23447 (face font-lock-constant-face) 23447 23448 (face font-lock-string-face) 23448 23458 nil 23458 23459 (face font-lock-string-face) 23459 23487 (face font-lock-constant-face) 23487 23488 (face font-lock-string-face) 23488 23498 nil 23498 23499 (face font-lock-string-face) 23499 23530 (face font-lock-constant-face) 23530 23531 (face font-lock-string-face) 23531 23541 nil 23541 23542 (face font-lock-string-face) 23542 23563 (face font-lock-constant-face) 23563 23564 (face font-lock-string-face) 23564 23574 nil 23574 23575 (face font-lock-string-face) 23575 23609 (face font-lock-constant-face) 23609 23610 (face font-lock-string-face) 23610 23620 nil 23620 23621 (face font-lock-string-face) 23621 23654 (face font-lock-constant-face) 23654 23655 (face font-lock-string-face) 23655 23665 nil 23665 23666 (face font-lock-string-face) 23666 23700 (face font-lock-constant-face) 23700 23701 (face font-lock-string-face) 23701 23711 nil 23711 23712 (face font-lock-string-face) 23712 23753 (face font-lock-constant-face) 23753 23754 (face font-lock-string-face) 23754 23764 nil 23764 23765 (face font-lock-string-face) 23765 23790 (face font-lock-constant-face) 23790 23791 (face font-lock-string-face) 23791 23801 nil 23801 23802 (face font-lock-string-face) 23802 23825 (face font-lock-constant-face) 23825 23826 (face font-lock-string-face) 23826 23836 nil 23836 23837 (face font-lock-string-face) 23837 23862 (face font-lock-constant-face) 23862 23863 (face font-lock-string-face) 23863 23873 nil 23873 23874 (face font-lock-string-face) 23874 23906 (face font-lock-constant-face) 23906 23907 (face font-lock-string-face) 23907 23917 nil 23917 23918 (face font-lock-string-face) 23918 23947 (face font-lock-constant-face) 23947 23948 (face font-lock-string-face) 23948 23958 nil 23958 23959 (face font-lock-string-face) 23959 23981 (face font-lock-constant-face) 23981 23982 (face font-lock-string-face) 23982 23992 nil 23992 23993 (face font-lock-string-face) 23993 24014 (face font-lock-constant-face) 24014 24015 (face font-lock-string-face) 24015 24025 nil 24025 24026 (face font-lock-string-face) 24026 24054 (face font-lock-constant-face) 24054 24055 (face font-lock-string-face) 24055 24065 nil 24065 24066 (face font-lock-string-face) 24066 24093 (face font-lock-constant-face) 24093 24094 (face font-lock-string-face) 24094 24104 nil 24104 24105 (face font-lock-string-face) 24105 24133 (face font-lock-constant-face) 24133 24134 (face font-lock-string-face) 24134 24144 nil 24144 24145 (face font-lock-string-face) 24145 24177 (face font-lock-constant-face) 24177 24178 (face font-lock-string-face) 24178 24188 nil 24188 24189 (face font-lock-string-face) 24189 24221 (face font-lock-constant-face) 24221 24222 (face font-lock-string-face) 24222 24232 nil 24232 24233 (face font-lock-string-face) 24233 24277 (face font-lock-constant-face) 24277 24278 (face font-lock-string-face) 24278 24288 nil 24288 24289 (face font-lock-string-face) 24289 24328 (face font-lock-constant-face) 24328 24329 (face font-lock-string-face) 24329 24339 nil 24339 24340 (face font-lock-string-face) 24340 24379 (face font-lock-constant-face) 24379 24380 (face font-lock-string-face) 24380 24390 nil 24390 24391 (face font-lock-string-face) 24391 24424 (face font-lock-constant-face) 24424 24425 (face font-lock-string-face) 24425 24435 nil 24435 24436 (face font-lock-string-face) 24436 24476 (face font-lock-constant-face) 24476 24477 (face font-lock-string-face) 24477 24487 nil 24487 24488 (face font-lock-string-face) 24488 24521 (face font-lock-constant-face) 24521 24522 (face font-lock-string-face) 24522 24532 nil 24532 24533 (face font-lock-string-face) 24533 24567 (face font-lock-constant-face) 24567 24568 (face font-lock-string-face) 24568 24578 nil 24578 24579 (face font-lock-string-face) 24579 24610 (face font-lock-constant-face) 24610 24611 (face font-lock-string-face) 24611 24621 nil 24621 24622 (face font-lock-string-face) 24622 24673 (face font-lock-constant-face) 24673 24674 (face font-lock-string-face) 24674 24684 nil 24684 24685 (face font-lock-string-face) 24685 24725 (face font-lock-constant-face) 24725 24726 (face font-lock-string-face) 24726 24736 nil 24736 24737 (face font-lock-string-face) 24737 24773 (face font-lock-constant-face) 24773 24774 (face font-lock-string-face) 24774 24784 nil 24784 24785 (face font-lock-string-face) 24785 24821 (face font-lock-constant-face) 24821 24822 (face font-lock-string-face) 24822 24832 nil 24832 24833 (face font-lock-string-face) 24833 24874 (face font-lock-constant-face) 24874 24875 (face font-lock-string-face) 24875 24885 nil 24885 24886 (face font-lock-string-face) 24886 24926 (face font-lock-constant-face) 24926 24927 (face font-lock-string-face) 24927 24937 nil 24937 24938 (face font-lock-string-face) 24938 24977 (face font-lock-constant-face) 24977 24978 (face font-lock-string-face) 24978 24988 nil 24988 24989 (face font-lock-string-face) 24989 25035 (face font-lock-constant-face) 25035 25036 (face font-lock-string-face) 25036 25046 nil 25046 25047 (face font-lock-string-face) 25047 25070 (face font-lock-constant-face) 25070 25071 (face font-lock-string-face) 25071 25081 nil 25081 25082 (face font-lock-string-face) 25082 25104 (face font-lock-constant-face) 25104 25105 (face font-lock-string-face) 25105 25115 nil 25115 25116 (face font-lock-string-face) 25116 25152 (face font-lock-constant-face) 25152 25153 (face font-lock-string-face) 25153 25163 nil 25163 25164 (face font-lock-string-face) 25164 25210 (face font-lock-constant-face) 25210 25211 (face font-lock-string-face) 25211 25221 nil 25221 25222 (face font-lock-string-face) 25222 25250 (face font-lock-constant-face) 25250 25251 (face font-lock-string-face) 25251 25268 nil 25268 25269 (face font-lock-string-face) 25269 25279 (face font-lock-keyword-face) 25279 25280 (face font-lock-string-face) 25280 25293 nil 25293 25294 (face font-lock-string-face) 25294 25319 (face font-lock-variable-name-face) 25319 25320 (face font-lock-string-face) 25320 25334 nil 25334 25335 (face font-lock-string-face) 25335 25345 (face font-lock-keyword-face) 25345 25346 (face font-lock-string-face) 25346 25363 nil 25363 25364 (face font-lock-string-face) 25364 25385 (face font-lock-variable-name-face) 25385 25386 (face font-lock-string-face) 25386 25404 nil 25404 25405 (face font-lock-string-face) 25405 25417 (face font-lock-keyword-face) 25417 25418 (face font-lock-string-face) 25418 25438 nil 25438 25439 (face font-lock-string-face) 25439 25480 (face font-lock-function-name-face) 25480 25481 (face font-lock-string-face) 25481 25550 nil 25550 25551 (face font-lock-string-face) 25551 25566 (face font-lock-variable-name-face) 25566 25567 (face font-lock-string-face) 25567 25581 nil 25581 25582 (face font-lock-string-face) 25582 25594 (face font-lock-keyword-face) 25594 25595 (face font-lock-string-face) 25595 25611 nil 25611 25612 (face font-lock-string-face) 25612 25651 (face font-lock-function-name-face) 25651 25652 (face font-lock-string-face) 25652 25688 nil 25688 25689 (face font-lock-string-face) 25689 25704 (face font-lock-variable-name-face) 25704 25705 (face font-lock-string-face) 25705 25719 nil 25719 25720 (face font-lock-string-face) 25720 25728 (face font-lock-keyword-face) 25728 25729 (face font-lock-string-face) 25729 25745 nil 25745 25746 (face font-lock-string-face) 25746 25782 (face font-lock-constant-face) 25782 25783 (face font-lock-string-face) 25783 25797 nil 25797 25798 (face font-lock-string-face) 25798 25820 (face font-lock-constant-face) 25820 25821 (face font-lock-string-face) 25821 25835 nil 25835 25836 (face font-lock-string-face) 25836 25857 (face font-lock-constant-face) 25857 25858 (face font-lock-string-face) 25858 25872 nil 25872 25873 (face font-lock-string-face) 25873 25905 (face font-lock-constant-face) 25905 25906 (face font-lock-string-face) 25906 25920 nil 25920 25921 (face font-lock-string-face) 25921 25961 (face font-lock-constant-face) 25961 25962 (face font-lock-string-face) 25962 25976 nil 25976 25977 (face font-lock-string-face) 25977 26016 (face font-lock-constant-face) 26016 26017 (face font-lock-string-face) 26017 26031 nil 26031 26032 (face font-lock-string-face) 26032 26065 (face font-lock-constant-face) 26065 26066 (face font-lock-string-face) 26066 26080 nil 26080 26081 (face font-lock-string-face) 26081 26115 (face font-lock-constant-face) 26115 26116 (face font-lock-string-face) 26116 26130 nil 26130 26131 (face font-lock-string-face) 26131 26162 (face font-lock-constant-face) 26162 26163 (face font-lock-string-face) 26163 26177 nil 26177 26178 (face font-lock-string-face) 26178 26229 (face font-lock-constant-face) 26229 26230 (face font-lock-string-face) 26230 26244 nil 26244 26245 (face font-lock-string-face) 26245 26285 (face font-lock-constant-face) 26285 26286 (face font-lock-string-face) 26286 26300 nil 26300 26301 (face font-lock-string-face) 26301 26337 (face font-lock-constant-face) 26337 26338 (face font-lock-string-face) 26338 26352 nil 26352 26353 (face font-lock-string-face) 26353 26394 (face font-lock-constant-face) 26394 26395 (face font-lock-string-face) 26395 26409 nil 26409 26410 (face font-lock-string-face) 26410 26443 (face font-lock-constant-face) 26443 26444 (face font-lock-string-face) 26444 26458 nil 26458 26459 (face font-lock-string-face) 26459 26495 (face font-lock-constant-face) 26495 26496 (face font-lock-string-face) 26496 26532 nil 26532 26533 (face font-lock-string-face) 26533 26546 (face font-lock-variable-name-face) 26546 26547 (face font-lock-string-face) 26547 26561 nil 26561 26562 (face font-lock-string-face) 26562 26572 (face font-lock-keyword-face) 26572 26573 (face font-lock-string-face) 26573 26590 nil 26590 26591 (face font-lock-string-face) 26591 26604 (face font-lock-variable-name-face) 26604 26605 (face font-lock-string-face) 26605 26623 nil 26623 26624 (face font-lock-string-face) 26624 26631 (face font-lock-keyword-face) 26631 26632 (face font-lock-string-face) 26632 26652 nil 26652 26653 (face font-lock-string-face) 26653 26688 (face font-lock-constant-face) 26688 26689 (face font-lock-string-face) 26689 26722 nil 26722 26723 (face font-lock-string-face) 26723 26730 (face font-lock-keyword-face) 26730 26731 (face font-lock-string-face) 26731 26751 nil 26751 26752 (face font-lock-string-face) 26752 26760 (face font-lock-preprocessor-face) 26760 26761 (face font-lock-string-face) 26761 26831 nil 26831 26832 (face font-lock-string-face) 26832 26873 (face font-lock-variable-name-face) 26873 26874 (face font-lock-string-face) 26874 26888 nil 26888 26889 (face font-lock-string-face) 26889 26896 (face font-lock-keyword-face) 26896 26897 (face font-lock-string-face) 26897 26913 nil 26913 26914 (face font-lock-string-face) 26914 26954 (face font-lock-constant-face) 26954 26955 (face font-lock-string-face) 26955 26991 nil 26991 26992 (face font-lock-string-face) 26992 27035 (face font-lock-variable-name-face) 27035 27036 (face font-lock-string-face) 27036 27050 nil 27050 27051 (face font-lock-string-face) 27051 27058 (face font-lock-keyword-face) 27058 27059 (face font-lock-string-face) 27059 27075 nil 27075 27076 (face font-lock-string-face) 27076 27095 (face font-lock-constant-face) 27095 27096 (face font-lock-string-face) 27096 27110 nil 27110 27111 (face font-lock-string-face) 27111 27137 (face font-lock-constant-face) 27137 27138 (face font-lock-string-face) 27138 27152 nil 27152 27153 (face font-lock-string-face) 27153 27186 (face font-lock-constant-face) 27186 27187 (face font-lock-string-face) 27187 27201 nil 27201 27202 (face font-lock-string-face) 27202 27235 (face font-lock-constant-face) 27235 27236 (face font-lock-string-face) 27236 27291 nil 27291 27292 (face font-lock-string-face) 27292 27303 (face font-lock-keyword-face) 27303 27304 (face font-lock-string-face) 27304 27306 nil 27306 27307 (face font-lock-string-face) 27307 27325 (face font-lock-function-name-face) 27325 27326 (face font-lock-string-face) 27326 27334 nil 27334 27335 (face font-lock-string-face) 27335 27339 (face font-lock-keyword-face) 27339 27340 (face font-lock-string-face) 27340 27342 nil 27342 27343 (face font-lock-string-face) 27343 27357 (face font-lock-type-face) 27357 27358 (face font-lock-string-face) 27358 27366 nil 27366 27367 (face font-lock-string-face) 27367 27379 (face font-lock-keyword-face) 27379 27380 (face font-lock-string-face) 27380 27392 nil 27392 27393 (face font-lock-string-face) 27393 27398 (face font-lock-function-name-face) 27398 27399 (face font-lock-string-face) 27399 27409 nil 27409 27410 (face font-lock-string-face) 27410 27431 (face font-lock-function-name-face) 27431 27432 (face font-lock-string-face) 27432 27442 nil 27442 27443 (face font-lock-string-face) 27443 27469 (face font-lock-function-name-face) 27469 27470 (face font-lock-string-face) 27470 27480 nil 27480 27481 (face font-lock-string-face) 27481 27507 (face font-lock-function-name-face) 27507 27508 (face font-lock-string-face) 27508 27525 nil 27525 27526 (face font-lock-string-face) 27526 27533 (face font-lock-keyword-face) 27533 27534 (face font-lock-string-face) 27534 27546 nil 27546 27547 (face font-lock-string-face) 27547 27591 (face font-lock-constant-face) 27591 27592 (face font-lock-string-face) 27592 27602 nil 27602 27603 (face font-lock-string-face) 27603 27646 (face font-lock-constant-face) 27646 27647 (face font-lock-string-face) 27647 27657 nil 27657 27658 (face font-lock-string-face) 27658 27679 (face font-lock-constant-face) 27679 27680 (face font-lock-string-face) 27680 27690 nil 27690 27691 (face font-lock-string-face) 27691 27711 (face font-lock-constant-face) 27711 27712 (face font-lock-string-face) 27712 27722 nil 27722 27723 (face font-lock-string-face) 27723 27752 (face font-lock-constant-face) 27752 27753 (face font-lock-string-face) 27753 27763 nil 27763 27764 (face font-lock-string-face) 27764 27792 (face font-lock-constant-face) 27792 27793 (face font-lock-string-face) 27793 27803 nil 27803 27804 (face font-lock-string-face) 27804 27829 (face font-lock-constant-face) 27829 27830 (face font-lock-string-face) 27830 27840 nil 27840 27841 (face font-lock-string-face) 27841 27865 (face font-lock-constant-face) 27865 27866 (face font-lock-string-face) 27866 27876 nil 27876 27877 (face font-lock-string-face) 27877 27901 (face font-lock-constant-face) 27901 27902 (face font-lock-string-face) 27902 27912 nil 27912 27913 (face font-lock-string-face) 27913 27936 (face font-lock-constant-face) 27936 27937 (face font-lock-string-face) 27937 27947 nil 27947 27948 (face font-lock-string-face) 27948 27968 (face font-lock-constant-face) 27968 27969 (face font-lock-string-face) 27969 27979 nil 27979 27980 (face font-lock-string-face) 27980 27999 (face font-lock-constant-face) 27999 28000 (face font-lock-string-face) 28000 28030 nil 28030 28031 (face font-lock-string-face) 28031 28042 (face font-lock-keyword-face) 28042 28043 (face font-lock-string-face) 28043 28045 nil 28045 28046 (face font-lock-string-face) 28046 28058 (face font-lock-function-name-face) 28058 28059 (face font-lock-string-face) 28059 28067 nil 28067 28068 (face font-lock-string-face) 28068 28072 (face font-lock-keyword-face) 28072 28073 (face font-lock-string-face) 28073 28075 nil 28075 28076 (face font-lock-string-face) 28076 28086 (face font-lock-type-face) 28086 28087 (face font-lock-string-face) 28087 28095 nil 28095 28096 (face font-lock-string-face) 28096 28108 (face font-lock-keyword-face) 28108 28109 (face font-lock-string-face) 28109 28121 nil 28121 28122 (face font-lock-string-face) 28122 28127 (face font-lock-function-name-face) 28127 28128 (face font-lock-string-face) 28128 28138 nil 28138 28139 (face font-lock-string-face) 28139 28150 (face font-lock-function-name-face) 28150 28151 (face font-lock-string-face) 28151 28161 nil 28161 28162 (face font-lock-string-face) 28162 28183 (face font-lock-function-name-face) 28183 28184 (face font-lock-string-face) 28184 28194 nil 28194 28195 (face font-lock-string-face) 28195 28216 (face font-lock-function-name-face) 28216 28217 (face font-lock-string-face) 28217 28234 nil 28234 28235 (face font-lock-string-face) 28235 28242 (face font-lock-keyword-face) 28242 28243 (face font-lock-string-face) 28243 28255 nil 28255 28256 (face font-lock-string-face) 28256 28290 (face font-lock-constant-face) 28290 28291 (face font-lock-string-face) 28291 28321 nil 28321 28322 (face font-lock-string-face) 28322 28333 (face font-lock-keyword-face) 28333 28334 (face font-lock-string-face) 28334 28336 nil 28336 28337 (face font-lock-string-face) 28337 28349 (face font-lock-function-name-face) 28349 28350 (face font-lock-string-face) 28350 28358 nil 28358 28359 (face font-lock-string-face) 28359 28363 (face font-lock-keyword-face) 28363 28364 (face font-lock-string-face) 28364 28366 nil 28366 28367 (face font-lock-string-face) 28367 28377 (face font-lock-type-face) 28377 28378 (face font-lock-string-face) 28378 28386 nil 28386 28387 (face font-lock-string-face) 28387 28394 (face font-lock-keyword-face) 28394 28395 (face font-lock-string-face) 28395 28407 nil 28407 28408 (face font-lock-string-face) 28408 28441 (face font-lock-constant-face) 28441 28442 (face font-lock-string-face) 28442 28471 nil 28471 28472 (face font-lock-string-face) 28472 28483 (face font-lock-keyword-face) 28483 28484 (face font-lock-string-face) 28484 28486 nil 28486 28487 (face font-lock-string-face) 28487 28498 (face font-lock-function-name-face) 28498 28499 (face font-lock-string-face) 28499 28507 nil 28507 28508 (face font-lock-string-face) 28508 28512 (face font-lock-keyword-face) 28512 28513 (face font-lock-string-face) 28513 28515 nil 28515 28516 (face font-lock-string-face) 28516 28526 (face font-lock-type-face) 28526 28527 (face font-lock-string-face) 28527 28535 nil 28535 28536 (face font-lock-string-face) 28536 28548 (face font-lock-keyword-face) 28548 28549 (face font-lock-string-face) 28549 28561 nil 28561 28562 (face font-lock-string-face) 28562 28567 (face font-lock-function-name-face) 28567 28568 (face font-lock-string-face) 28568 28578 nil 28578 28579 (face font-lock-string-face) 28579 28600 (face font-lock-function-name-face) 28600 28601 (face font-lock-string-face) 28601 28618 nil 28618 28619 (face font-lock-string-face) 28619 28626 (face font-lock-keyword-face) 28626 28627 (face font-lock-string-face) 28627 28639 nil 28639 28640 (face font-lock-string-face) 28640 28672 (face font-lock-constant-face) 28672 28673 (face font-lock-string-face) 28673 28698 nil 28698 28699 (face font-lock-string-face) 28699 28709 (face font-lock-keyword-face) 28709 28710 (face font-lock-string-face) 28710 28719 nil 28719 28720 (face font-lock-string-face) 28720 28729 (face font-lock-variable-name-face) 28729 28730 (face font-lock-string-face) 28730 28740 nil 28740 28741 (face font-lock-string-face) 28741 28748 (face font-lock-keyword-face) 28748 28749 (face font-lock-string-face) 28749 28773 nil 28773 28774 (face font-lock-string-face) 28774 28785 (face font-lock-keyword-face) 28785 28786 (face font-lock-string-face) 28786 28788 nil 28788 28789 (face font-lock-string-face) 28789 28799 (face font-lock-function-name-face) 28799 28800 (face font-lock-string-face) 28800 28812 nil 28812 28813 (face font-lock-string-face) 28813 28817 (face font-lock-keyword-face) 28817 28818 (face font-lock-string-face) 28818 28820 nil 28820 28821 (face font-lock-string-face) 28821 28831 (face font-lock-type-face) 28831 28832 (face font-lock-string-face) 28832 28844 nil 28844 28845 (face font-lock-string-face) 28845 28857 (face font-lock-keyword-face) 28857 28858 (face font-lock-string-face) 28858 28874 nil 28874 28875 (face font-lock-string-face) 28875 28880 (face font-lock-function-name-face) 28880 28881 (face font-lock-string-face) 28881 28895 nil 28895 28896 (face font-lock-string-face) 28896 28907 (face font-lock-function-name-face) 28907 28908 (face font-lock-string-face) 28908 28922 nil 28922 28923 (face font-lock-string-face) 28923 28944 (face font-lock-function-name-face) 28944 28945 (face font-lock-string-face) 28945 28959 nil 28959 28960 (face font-lock-string-face) 28960 29043 (face font-lock-function-name-face) 29043 29044 (face font-lock-string-face) 29044 29058 nil 29058 29059 (face font-lock-string-face) 29059 29074 (face font-lock-function-name-face) 29074 29075 (face font-lock-string-face) 29075 29100 nil 29100 29101 (face font-lock-string-face) 29101 29113 (face font-lock-keyword-face) 29113 29114 (face font-lock-string-face) 29114 29130 nil 29130 29131 (face font-lock-string-face) 29131 29133 (face font-lock-constant-face) 29133 29138 (face font-lock-variable-name-face) 29138 29163 (face font-lock-constant-face) 29163 29164 (face font-lock-string-face) 29164 29189 nil 29189 29190 (face font-lock-string-face) 29190 29197 (face font-lock-keyword-face) 29197 29198 (face font-lock-string-face) 29198 29214 nil 29214 29215 (face font-lock-string-face) 29215 29238 (face font-lock-constant-face) 29238 29239 (face font-lock-string-face) 29239 29253 nil 29253 29254 (face font-lock-string-face) 29254 29280 (face font-lock-constant-face) 29280 29281 (face font-lock-string-face) 29281 29295 nil 29295 29296 (face font-lock-string-face) 29296 29321 (face font-lock-constant-face) 29321 29322 (face font-lock-string-face) 29322 29336 nil 29336 29337 (face font-lock-string-face) 29337 29361 (face font-lock-constant-face) 29361 29362 (face font-lock-string-face) 29362 29376 nil 29376 29377 (face font-lock-string-face) 29377 29407 (face font-lock-constant-face) 29407 29408 (face font-lock-string-face) 29408 29422 nil 29422 29423 (face font-lock-string-face) 29423 29453 (face font-lock-constant-face) 29453 29454 (face font-lock-string-face) 29454 29468 nil 29468 29469 (face font-lock-string-face) 29469 29493 (face font-lock-constant-face) 29493 29494 (face font-lock-string-face) 29494 29508 nil 29508 29509 (face font-lock-string-face) 29509 29532 (face font-lock-constant-face) 29532 29533 (face font-lock-string-face) 29533 29547 nil 29547 29548 (face font-lock-string-face) 29548 29575 (face font-lock-constant-face) 29575 29576 (face font-lock-string-face) 29576 29590 nil 29590 29591 (face font-lock-string-face) 29591 29614 (face font-lock-constant-face) 29614 29615 (face font-lock-string-face) 29615 29640 nil 29640 29655 (face font-lock-string-face) 29655 29671 nil 29671 29685 (face font-lock-string-face) 29685 29703 nil 29703 29714 (face font-lock-string-face) 29714 29716 nil 29716 29719 (face font-lock-string-face) 29719 29729 nil 29729 29754 (face font-lock-comment-face) 29754 29792 nil 29792 29793 (face font-lock-string-face) 29793 29800 (face font-lock-keyword-face) 29800 29801 (face font-lock-string-face) 29801 29817 nil 29817 29818 (face font-lock-string-face) 29818 29843 (face font-lock-preprocessor-face) 29843 29844 (face font-lock-string-face) 29844 29892 nil 29892 29893 (face font-lock-string-face) 29893 29929 (face font-lock-variable-name-face) 29929 29930 (face font-lock-string-face) 29930 29940 nil 29940 29941 (face font-lock-string-face) 29941 29948 (face font-lock-keyword-face) 29948 29949 (face font-lock-string-face) 29949 29973 nil 29973 29974 (face font-lock-string-face) 29974 29985 (face font-lock-keyword-face) 29985 29986 (face font-lock-string-face) 29986 29988 nil 29988 29989 (face font-lock-string-face) 29989 30001 (face font-lock-function-name-face) 30001 30002 (face font-lock-string-face) 30002 30014 nil 30014 30015 (face font-lock-string-face) 30015 30019 (face font-lock-keyword-face) 30019 30020 (face font-lock-string-face) 30020 30022 nil 30022 30023 (face font-lock-string-face) 30023 30033 (face font-lock-type-face) 30033 30034 (face font-lock-string-face) 30034 30046 nil 30046 30047 (face font-lock-string-face) 30047 30059 (face font-lock-keyword-face) 30059 30060 (face font-lock-string-face) 30060 30076 nil 30076 30077 (face font-lock-string-face) 30077 30082 (face font-lock-function-name-face) 30082 30083 (face font-lock-string-face) 30083 30097 nil 30097 30098 (face font-lock-string-face) 30098 30109 (face font-lock-function-name-face) 30109 30110 (face font-lock-string-face) 30110 30124 nil 30124 30125 (face font-lock-string-face) 30125 30146 (face font-lock-function-name-face) 30146 30147 (face font-lock-string-face) 30147 30161 nil 30161 30162 (face font-lock-string-face) 30162 30180 (face font-lock-function-name-face) 30180 30181 (face font-lock-string-face) 30181 30206 nil 30206 30207 (face font-lock-string-face) 30207 30214 (face font-lock-keyword-face) 30214 30215 (face font-lock-string-face) 30215 30231 nil 30231 30232 (face font-lock-string-face) 30232 30266 (face font-lock-constant-face) 30266 30267 (face font-lock-string-face) 30267 30281 nil 30281 30282 (face font-lock-string-face) 30282 30321 (face font-lock-constant-face) 30321 30322 (face font-lock-string-face) 30322 30336 nil 30336 30337 (face font-lock-string-face) 30337 30375 (face font-lock-constant-face) 30375 30376 (face font-lock-string-face) 30376 30390 nil 30390 30391 (face font-lock-string-face) 30391 30430 (face font-lock-constant-face) 30430 30431 (face font-lock-string-face) 30431 30445 nil 30445 30446 (face font-lock-string-face) 30446 30484 (face font-lock-constant-face) 30484 30485 (face font-lock-string-face) 30485 30499 nil 30499 30500 (face font-lock-string-face) 30500 30533 (face font-lock-constant-face) 30533 30534 (face font-lock-string-face) 30534 30548 nil 30548 30549 (face font-lock-string-face) 30549 30581 (face font-lock-constant-face) 30581 30582 (face font-lock-string-face) 30582 30596 nil 30596 30597 (face font-lock-string-face) 30597 30626 (face font-lock-constant-face) 30626 30627 (face font-lock-string-face) 30627 30641 nil 30641 30642 (face font-lock-string-face) 30642 30670 (face font-lock-constant-face) 30670 30671 (face font-lock-string-face) 30671 30685 nil 30685 30686 (face font-lock-string-face) 30686 30714 (face font-lock-constant-face) 30714 30715 (face font-lock-string-face) 30715 30729 nil 30729 30730 (face font-lock-string-face) 30730 30757 (face font-lock-constant-face) 30757 30758 (face font-lock-string-face) 30758 30783 nil 30783 30784 (face font-lock-string-face) 30784 30794 (face font-lock-keyword-face) 30794 30795 (face font-lock-string-face) 30795 30812 nil 30812 30813 (face font-lock-string-face) 30813 30834 (face font-lock-variable-name-face) 30834 30835 (face font-lock-string-face) 30835 30853 nil 30853 30854 (face font-lock-string-face) 30854 30866 (face font-lock-keyword-face) 30866 30867 (face font-lock-string-face) 30867 30887 nil 30887 30888 (face font-lock-string-face) 30888 30917 (face font-lock-function-name-face) 30917 30918 (face font-lock-string-face) 30918 30951 nil 30951 30952 (face font-lock-string-face) 30952 30959 (face font-lock-keyword-face) 30959 30960 (face font-lock-string-face) 30960 30980 nil 30980 30981 (face font-lock-string-face) 30981 31015 (face font-lock-constant-face) 31015 31016 (face font-lock-string-face) 31016 31064 nil 31064 31065 (face font-lock-string-face) 31065 31074 (face font-lock-variable-name-face) 31074 31075 (face font-lock-string-face) 31075 31093 nil 31093 31094 (face font-lock-string-face) 31094 31106 (face font-lock-keyword-face) 31106 31107 (face font-lock-string-face) 31107 31127 nil 31127 31128 (face font-lock-string-face) 31128 31175 (face font-lock-function-name-face) 31175 31176 (face font-lock-string-face) 31176 31194 nil 31194 31195 (face font-lock-string-face) 31195 31245 (face font-lock-function-name-face) 31245 31246 (face font-lock-string-face) 31246 31279 nil 31279 31280 (face font-lock-string-face) 31280 31287 (face font-lock-keyword-face) 31287 31288 (face font-lock-string-face) 31288 31308 nil 31308 31309 (face font-lock-string-face) 31309 31341 (face font-lock-constant-face) 31341 31342 (face font-lock-string-face) 31342 31423 nil 31423 31424 (face font-lock-string-face) 31424 31462 (face font-lock-variable-name-face) 31462 31463 (face font-lock-string-face) 31463 31473 nil 31473 31474 (face font-lock-string-face) 31474 31481 (face font-lock-keyword-face) 31481 31482 (face font-lock-string-face) 31482 31506 nil 31506 31507 (face font-lock-string-face) 31507 31518 (face font-lock-keyword-face) 31518 31519 (face font-lock-string-face) 31519 31521 nil 31521 31522 (face font-lock-string-face) 31522 31539 (face font-lock-function-name-face) 31539 31540 (face font-lock-string-face) 31540 31552 nil 31552 31553 (face font-lock-string-face) 31553 31557 (face font-lock-keyword-face) 31557 31558 (face font-lock-string-face) 31558 31560 nil 31560 31561 (face font-lock-string-face) 31561 31571 (face font-lock-type-face) 31571 31572 (face font-lock-string-face) 31572 31584 nil 31584 31585 (face font-lock-string-face) 31585 31597 (face font-lock-keyword-face) 31597 31598 (face font-lock-string-face) 31598 31614 nil 31614 31615 (face font-lock-string-face) 31615 31636 (face font-lock-function-name-face) 31636 31637 (face font-lock-string-face) 31637 31651 nil 31651 31652 (face font-lock-string-face) 31652 31670 (face font-lock-function-name-face) 31670 31671 (face font-lock-string-face) 31671 31696 nil 31696 31697 (face font-lock-string-face) 31697 31706 (face font-lock-keyword-face) 31706 31707 (face font-lock-string-face) 31707 31723 nil 31723 31724 (face font-lock-string-face) 31724 31728 (face font-lock-constant-face) 31728 31729 (face font-lock-string-face) 31729 31743 nil 31743 31744 (face font-lock-string-face) 31744 31748 (face font-lock-constant-face) 31748 31749 (face font-lock-string-face) 31749 31774 nil 31774 31775 (face font-lock-string-face) 31775 31782 (face font-lock-keyword-face) 31782 31783 (face font-lock-string-face) 31783 31799 nil 31799 31800 (face font-lock-string-face) 31800 31844 (face font-lock-constant-face) 31844 31845 (face font-lock-string-face) 31845 31893 nil 31893 31894 (face font-lock-string-face) 31894 31943 (face font-lock-variable-name-face) 31943 31944 (face font-lock-string-face) 31944 31954 nil 31954 31955 (face font-lock-string-face) 31955 31962 (face font-lock-keyword-face) 31962 31963 (face font-lock-string-face) 31963 31987 nil 31987 31988 (face font-lock-string-face) 31988 31999 (face font-lock-keyword-face) 31999 32000 (face font-lock-string-face) 32000 32002 nil 32002 32003 (face font-lock-string-face) 32003 32013 (face font-lock-function-name-face) 32013 32014 (face font-lock-string-face) 32014 32026 nil 32026 32027 (face font-lock-string-face) 32027 32031 (face font-lock-keyword-face) 32031 32032 (face font-lock-string-face) 32032 32034 nil 32034 32035 (face font-lock-string-face) 32035 32045 (face font-lock-type-face) 32045 32046 (face font-lock-string-face) 32046 32058 nil 32058 32059 (face font-lock-string-face) 32059 32071 (face font-lock-keyword-face) 32071 32072 (face font-lock-string-face) 32072 32088 nil 32088 32089 (face font-lock-string-face) 32089 32094 (face font-lock-function-name-face) 32094 32095 (face font-lock-string-face) 32095 32109 nil 32109 32110 (face font-lock-string-face) 32110 32121 (face font-lock-function-name-face) 32121 32122 (face font-lock-string-face) 32122 32136 nil 32136 32137 (face font-lock-string-face) 32137 32158 (face font-lock-function-name-face) 32158 32159 (face font-lock-string-face) 32159 32173 nil 32173 32174 (face font-lock-string-face) 32174 32192 (face font-lock-function-name-face) 32192 32193 (face font-lock-string-face) 32193 32218 nil 32218 32219 (face font-lock-string-face) 32219 32232 (face font-lock-keyword-face) 32232 32233 (face font-lock-string-face) 32233 32249 nil 32249 32250 (face font-lock-string-face) 32250 32259 (face font-lock-keyword-face) 32259 32260 (face font-lock-string-face) 32260 32278 nil 32278 32279 (face font-lock-string-face) 32279 32283 (face font-lock-constant-face) 32283 32284 (face font-lock-string-face) 32284 32300 nil 32300 32301 (face font-lock-string-face) 32301 32306 (face font-lock-constant-face) 32306 32307 (face font-lock-string-face) 32307 32323 nil 32323 32324 (face font-lock-string-face) 32324 32333 (face font-lock-constant-face) 32333 32334 (face font-lock-string-face) 32334 32350 nil 32350 32351 (face font-lock-string-face) 32351 32357 (face font-lock-constant-face) 32357 32358 (face font-lock-string-face) 32358 32398 nil 32398 32399 (face font-lock-string-face) 32399 32406 (face font-lock-keyword-face) 32406 32407 (face font-lock-string-face) 32407 32423 nil 32423 32424 (face font-lock-string-face) 32424 32462 (face font-lock-constant-face) 32462 32463 (face font-lock-string-face) 32463 32477 nil 32477 32478 (face font-lock-string-face) 32478 32515 (face font-lock-constant-face) 32515 32516 (face font-lock-string-face) 32516 32530 nil 32530 32531 (face font-lock-string-face) 32531 32568 (face font-lock-constant-face) 32568 32569 (face font-lock-string-face) 32569 32583 nil 32583 32584 (face font-lock-string-face) 32584 32620 (face font-lock-constant-face) 32620 32621 (face font-lock-string-face) 32621 32635 nil 32635 32636 (face font-lock-string-face) 32636 32666 (face font-lock-constant-face) 32666 32667 (face font-lock-string-face) 32667 32681 nil 32681 32682 (face font-lock-string-face) 32682 32720 (face font-lock-constant-face) 32720 32721 (face font-lock-string-face) 32721 32735 nil 32735 32736 (face font-lock-string-face) 32736 32773 (face font-lock-constant-face) 32773 32774 (face font-lock-string-face) 32774 32822 nil 32822 32823 (face font-lock-string-face) 32823 32838 (face font-lock-variable-name-face) 32838 32839 (face font-lock-string-face) 32839 32849 nil 32849 32850 (face font-lock-string-face) 32850 32857 (face font-lock-keyword-face) 32857 32858 (face font-lock-string-face) 32858 32882 nil 32882 32883 (face font-lock-string-face) 32883 32894 (face font-lock-keyword-face) 32894 32895 (face font-lock-string-face) 32895 32897 nil 32897 32898 (face font-lock-string-face) 32898 32912 (face font-lock-function-name-face) 32912 32913 (face font-lock-string-face) 32913 32925 nil 32925 32926 (face font-lock-string-face) 32926 32930 (face font-lock-keyword-face) 32930 32931 (face font-lock-string-face) 32931 32933 nil 32933 32934 (face font-lock-string-face) 32934 32948 (face font-lock-type-face) 32948 32949 (face font-lock-string-face) 32949 32961 nil 32961 32962 (face font-lock-string-face) 32962 32969 (face font-lock-keyword-face) 32969 32970 (face font-lock-string-face) 32970 32986 nil 32986 32987 (face font-lock-string-face) 32987 33022 (face font-lock-constant-face) 33022 33023 (face font-lock-string-face) 33023 33037 nil 33037 33038 (face font-lock-string-face) 33038 33072 (face font-lock-constant-face) 33072 33073 (face font-lock-string-face) 33073 33098 nil 33098 33099 (face font-lock-string-face) 33099 33111 (face font-lock-keyword-face) 33111 33112 (face font-lock-string-face) 33112 33128 nil 33128 33129 (face font-lock-string-face) 33129 33150 (face font-lock-function-name-face) 33150 33151 (face font-lock-string-face) 33151 33176 nil 33176 33177 (face font-lock-string-face) 33177 33189 (face font-lock-keyword-face) 33189 33190 (face font-lock-string-face) 33190 33206 nil 33206 33207 (face font-lock-string-face) 33207 33209 (face font-lock-constant-face) 33209 33232 (face font-lock-variable-name-face) 33232 33239 (face font-lock-constant-face) 33239 33240 (face font-lock-string-face) 33240 33265 nil 33265 33266 (face font-lock-string-face) 33266 33273 (face font-lock-keyword-face) 33273 33274 (face font-lock-string-face) 33274 33306 nil 33306 33307 (face font-lock-string-face) 33307 33318 (face font-lock-keyword-face) 33318 33319 (face font-lock-string-face) 33319 33321 nil 33321 33322 (face font-lock-string-face) 33322 33342 (face font-lock-function-name-face) 33342 33343 (face font-lock-string-face) 33343 33359 nil 33359 33360 (face font-lock-string-face) 33360 33366 (face font-lock-keyword-face) 33366 33367 (face font-lock-string-face) 33367 33387 nil 33387 33388 (face font-lock-string-face) 33388 33434 (face font-lock-constant-face) 33434 33435 (face font-lock-string-face) 33435 33453 nil 33453 33454 (face font-lock-string-face) 33454 33519 (face font-lock-constant-face) 33519 33520 (face font-lock-string-face) 33520 33553 nil 33553 33554 (face font-lock-string-face) 33554 33561 (face font-lock-keyword-face) 33561 33562 (face font-lock-string-face) 33562 33582 nil 33582 33583 (face font-lock-string-face) 33583 33585 (face font-lock-constant-face) 33585 33608 (face font-lock-variable-name-face) 33608 33647 (face font-lock-constant-face) 33647 33648 (face font-lock-string-face) 33648 33681 nil 33681 33682 (face font-lock-string-face) 33682 33688 (face font-lock-keyword-face) 33688 33689 (face font-lock-string-face) 33689 33709 nil 33709 33710 (face font-lock-string-face) 33710 33716 (face font-lock-constant-face) 33716 33717 (face font-lock-string-face) 33717 33735 nil 33735 33736 (face font-lock-string-face) 33736 33738 (face font-lock-constant-face) 33738 33743 (face font-lock-variable-name-face) 33743 33788 (face font-lock-constant-face) 33788 33789 (face font-lock-string-face) 33789 33807 nil 33807 33808 (face font-lock-string-face) 33808 33810 (face font-lock-constant-face) 33810 33811 (face font-lock-string-face) 33811 33829 nil 33829 33830 (face font-lock-string-face) 33830 33833 (face font-lock-constant-face) 33833 33840 (face font-lock-variable-name-face) 33840 33841 (face font-lock-constant-face) 33841 33842 (face font-lock-string-face) 33842 33860 nil 33860 33861 (face font-lock-string-face) 33861 33864 (face font-lock-constant-face) 33864 33872 (face font-lock-variable-name-face) 33872 33873 (face font-lock-constant-face) 33873 33874 (face font-lock-string-face) 33874 33952 nil 33952 33953 (face font-lock-string-face) 33953 33964 (face font-lock-keyword-face) 33964 33965 (face font-lock-string-face) 33965 33967 nil 33967 33968 (face font-lock-string-face) 33968 33978 (face font-lock-function-name-face) 33978 33979 (face font-lock-string-face) 33979 33991 nil 33991 33992 (face font-lock-string-face) 33992 33996 (face font-lock-keyword-face) 33996 33997 (face font-lock-string-face) 33997 33999 nil 33999 34000 (face font-lock-string-face) 34000 34004 (face font-lock-type-face) 34004 34005 (face font-lock-string-face) 34005 34017 nil 34017 34018 (face font-lock-string-face) 34018 34030 (face font-lock-keyword-face) 34030 34031 (face font-lock-string-face) 34031 34035 nil 34035 34036 (face font-lock-string-face) 34036 34062 (face font-lock-function-name-face) 34062 34063 (face font-lock-string-face) 34063 34077 nil 34077 34078 (face font-lock-string-face) 34078 34087 (face font-lock-keyword-face) 34087 34088 (face font-lock-string-face) 34088 34104 nil 34104 34105 (face font-lock-string-face) 34105 34117 (face font-lock-variable-name-face) 34117 34118 (face font-lock-string-face) 34118 34120 nil 34120 34121 (face font-lock-string-face) 34121 34126 (face font-lock-variable-name-face) 34126 34127 (face font-lock-string-face) 34127 34141 nil 34141 34142 (face font-lock-string-face) 34142 34153 (face font-lock-variable-name-face) 34153 34154 (face font-lock-string-face) 34154 34156 nil 34156 34157 (face font-lock-string-face) 34157 34174 (face font-lock-variable-name-face) 34174 34175 (face font-lock-string-face) 34175 34200 nil 34200 34201 (face font-lock-string-face) 34201 34209 (face font-lock-keyword-face) 34209 34210 (face font-lock-string-face) 34210 34214 nil 34214 34215 (face font-lock-string-face) 34215 34233 (face font-lock-constant-face) 34233 34234 (face font-lock-string-face) 34234 34268 nil 34268 34287 (face font-lock-comment-face) 34287 34293 nil 34293 34365 (face font-lock-comment-face) 34365 34371 nil 34371 34372 (face font-lock-string-face) 34372 34379 (face font-lock-keyword-face) 34379 34380 (face font-lock-string-face) 34380 34404 nil 34404 34405 (face font-lock-string-face) 34405 34416 (face font-lock-keyword-face) 34416 34417 (face font-lock-string-face) 34417 34419 nil 34419 34420 (face font-lock-string-face) 34420 34436 (face font-lock-function-name-face) 34436 34437 (face font-lock-string-face) 34437 34449 nil 34449 34450 (face font-lock-string-face) 34450 34454 (face font-lock-keyword-face) 34454 34455 (face font-lock-string-face) 34455 34457 nil 34457 34458 (face font-lock-string-face) 34458 34468 (face font-lock-type-face) 34468 34469 (face font-lock-string-face) 34469 34481 nil 34481 34482 (face font-lock-string-face) 34482 34494 (face font-lock-keyword-face) 34494 34495 (face font-lock-string-face) 34495 34511 nil 34511 34512 (face font-lock-string-face) 34512 34517 (face font-lock-function-name-face) 34517 34518 (face font-lock-string-face) 34518 34532 nil 34532 34533 (face font-lock-string-face) 34533 34551 (face font-lock-function-name-face) 34551 34552 (face font-lock-string-face) 34552 34566 nil 34566 34567 (face font-lock-string-face) 34567 34588 (face font-lock-function-name-face) 34588 34589 (face font-lock-string-face) 34589 34603 nil 34603 34604 (face font-lock-string-face) 34604 34630 (face font-lock-function-name-face) 34630 34631 (face font-lock-string-face) 34631 34645 nil 34645 34646 (face font-lock-string-face) 34646 34680 (face font-lock-function-name-face) 34680 34681 (face font-lock-string-face) 34681 34695 nil 34695 34696 (face font-lock-string-face) 34696 34730 (face font-lock-function-name-face) 34730 34731 (face font-lock-string-face) 34731 34745 nil 34745 34746 (face font-lock-string-face) 34746 34772 (face font-lock-function-name-face) 34772 34773 (face font-lock-string-face) 34773 34787 nil 34787 34788 (face font-lock-string-face) 34788 34827 (face font-lock-function-name-face) 34827 34828 (face font-lock-string-face) 34828 34853 nil 34853 34854 (face font-lock-string-face) 34854 34861 (face font-lock-keyword-face) 34861 34862 (face font-lock-string-face) 34862 34878 nil 34878 34879 (face font-lock-string-face) 34879 34904 (face font-lock-constant-face) 34904 34905 (face font-lock-string-face) 34905 34930 nil 34930 34931 (face font-lock-string-face) 34931 34941 (face font-lock-keyword-face) 34941 34942 (face font-lock-string-face) 34942 34959 nil 34959 34960 (face font-lock-string-face) 34960 34981 (face font-lock-variable-name-face) 34981 34982 (face font-lock-string-face) 34982 35000 nil 35000 35001 (face font-lock-string-face) 35001 35013 (face font-lock-keyword-face) 35013 35014 (face font-lock-string-face) 35014 35034 nil 35034 35077 (face font-lock-comment-face) 35077 35093 nil 35093 35123 (face font-lock-comment-face) 35123 35139 nil 35139 35164 (face font-lock-comment-face) 35164 35180 nil 35180 35194 (face font-lock-comment-face) 35194 35210 nil 35210 35211 (face font-lock-string-face) 35211 35240 (face font-lock-function-name-face) 35240 35241 (face font-lock-string-face) 35241 35274 nil 35274 35275 (face font-lock-string-face) 35275 35285 (face font-lock-keyword-face) 35285 35286 (face font-lock-string-face) 35286 35307 nil 35307 35308 (face font-lock-string-face) 35308 35329 (face font-lock-variable-name-face) 35329 35330 (face font-lock-string-face) 35330 35352 nil 35352 35353 (face font-lock-string-face) 35353 35365 (face font-lock-keyword-face) 35365 35366 (face font-lock-string-face) 35366 35390 nil 35390 35391 (face font-lock-string-face) 35391 35432 (face font-lock-function-name-face) 35432 35433 (face font-lock-string-face) 35433 35553 nil 35553 35554 (face font-lock-string-face) 35554 35565 (face font-lock-keyword-face) 35565 35566 (face font-lock-string-face) 35566 35568 nil 35568 35569 (face font-lock-string-face) 35569 35592 (face font-lock-function-name-face) 35592 35593 (face font-lock-string-face) 35593 35605 nil 35605 35606 (face font-lock-string-face) 35606 35610 (face font-lock-keyword-face) 35610 35611 (face font-lock-string-face) 35611 35613 nil 35613 35614 (face font-lock-string-face) 35614 35624 (face font-lock-type-face) 35624 35625 (face font-lock-string-face) 35625 35637 nil 35637 35638 (face font-lock-string-face) 35638 35650 (face font-lock-keyword-face) 35650 35651 (face font-lock-string-face) 35651 35667 nil 35667 35668 (face font-lock-string-face) 35668 35673 (face font-lock-function-name-face) 35673 35674 (face font-lock-string-face) 35674 35688 nil 35688 35689 (face font-lock-string-face) 35689 35707 (face font-lock-function-name-face) 35707 35708 (face font-lock-string-face) 35708 35722 nil 35722 35723 (face font-lock-string-face) 35723 35757 (face font-lock-function-name-face) 35757 35758 (face font-lock-string-face) 35758 35772 nil 35772 35773 (face font-lock-string-face) 35773 35799 (face font-lock-function-name-face) 35799 35800 (face font-lock-string-face) 35800 35814 nil 35814 35815 (face font-lock-string-face) 35815 35841 (face font-lock-function-name-face) 35841 35842 (face font-lock-string-face) 35842 35856 nil 35856 35857 (face font-lock-string-face) 35857 35896 (face font-lock-function-name-face) 35896 35897 (face font-lock-string-face) 35897 35922 nil 35922 35923 (face font-lock-string-face) 35923 35930 (face font-lock-keyword-face) 35930 35931 (face font-lock-string-face) 35931 35947 nil 35947 35948 (face font-lock-string-face) 35948 35970 (face font-lock-constant-face) 35970 35971 (face font-lock-string-face) 35971 35985 nil 35985 35986 (face font-lock-string-face) 35986 36011 (face font-lock-constant-face) 36011 36012 (face font-lock-string-face) 36012 36026 nil 36026 36027 (face font-lock-string-face) 36027 36060 (face font-lock-constant-face) 36060 36061 (face font-lock-string-face) 36061 36075 nil 36075 36076 (face font-lock-string-face) 36076 36117 (face font-lock-constant-face) 36117 36118 (face font-lock-string-face) 36118 36143 nil 36143 36144 (face font-lock-string-face) 36144 36154 (face font-lock-keyword-face) 36154 36155 (face font-lock-string-face) 36155 36172 nil 36172 36173 (face font-lock-string-face) 36173 36198 (face font-lock-variable-name-face) 36198 36199 (face font-lock-string-face) 36199 36217 nil 36217 36218 (face font-lock-string-face) 36218 36228 (face font-lock-keyword-face) 36228 36229 (face font-lock-string-face) 36229 36250 nil 36250 36251 (face font-lock-string-face) 36251 36272 (face font-lock-variable-name-face) 36272 36273 (face font-lock-string-face) 36273 36295 nil 36295 36296 (face font-lock-string-face) 36296 36308 (face font-lock-keyword-face) 36308 36309 (face font-lock-string-face) 36309 36333 nil 36333 36334 (face font-lock-string-face) 36334 36375 (face font-lock-function-name-face) 36375 36376 (face font-lock-string-face) 36376 36496 nil 36496 36497 (face font-lock-string-face) 36497 36508 (face font-lock-keyword-face) 36508 36509 (face font-lock-string-face) 36509 36511 nil 36511 36512 (face font-lock-string-face) 36512 36524 (face font-lock-function-name-face) 36524 36525 (face font-lock-string-face) 36525 36537 nil 36537 36538 (face font-lock-string-face) 36538 36542 (face font-lock-keyword-face) 36542 36543 (face font-lock-string-face) 36543 36545 nil 36545 36546 (face font-lock-string-face) 36546 36556 (face font-lock-type-face) 36556 36557 (face font-lock-string-face) 36557 36569 nil 36569 36570 (face font-lock-string-face) 36570 36582 (face font-lock-keyword-face) 36582 36583 (face font-lock-string-face) 36583 36599 nil 36599 36600 (face font-lock-string-face) 36600 36605 (face font-lock-function-name-face) 36605 36606 (face font-lock-string-face) 36606 36620 nil 36620 36621 (face font-lock-string-face) 36621 36642 (face font-lock-function-name-face) 36642 36643 (face font-lock-string-face) 36643 36657 nil 36657 36658 (face font-lock-string-face) 36658 36697 (face font-lock-function-name-face) 36697 36698 (face font-lock-string-face) 36698 36723 nil 36723 36724 (face font-lock-string-face) 36724 36731 (face font-lock-keyword-face) 36731 36732 (face font-lock-string-face) 36732 36748 nil 36748 36749 (face font-lock-string-face) 36749 36782 (face font-lock-constant-face) 36782 36783 (face font-lock-string-face) 36783 36829 nil 36829 36830 (face font-lock-string-face) 36830 36841 (face font-lock-keyword-face) 36841 36842 (face font-lock-string-face) 36842 36844 nil 36844 36845 (face font-lock-string-face) 36845 36856 (face font-lock-function-name-face) 36856 36857 (face font-lock-string-face) 36857 36869 nil 36869 36870 (face font-lock-string-face) 36870 36874 (face font-lock-keyword-face) 36874 36875 (face font-lock-string-face) 36875 36877 nil 36877 36878 (face font-lock-string-face) 36878 36888 (face font-lock-type-face) 36888 36889 (face font-lock-string-face) 36889 36901 nil 36901 36902 (face font-lock-string-face) 36902 36914 (face font-lock-keyword-face) 36914 36915 (face font-lock-string-face) 36915 36931 nil 36931 36932 (face font-lock-string-face) 36932 36937 (face font-lock-function-name-face) 36937 36938 (face font-lock-string-face) 36938 36952 nil 36952 36953 (face font-lock-string-face) 36953 36974 (face font-lock-function-name-face) 36974 36975 (face font-lock-string-face) 36975 36989 nil 36989 36990 (face font-lock-string-face) 36990 37029 (face font-lock-function-name-face) 37029 37030 (face font-lock-string-face) 37030 37055 nil 37055 37056 (face font-lock-string-face) 37056 37063 (face font-lock-keyword-face) 37063 37064 (face font-lock-string-face) 37064 37080 nil 37080 37081 (face font-lock-string-face) 37081 37113 (face font-lock-constant-face) 37113 37114 (face font-lock-string-face) 37114 37163 nil)
diff --git a/node_modules/node-gyp/gyp/tools/graphviz.py b/node_modules/node-gyp/gyp/tools/graphviz.py
deleted file mode 100755
index 326ae22..0000000
--- a/node_modules/node-gyp/gyp/tools/graphviz.py
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Using the JSON dumped by the dump-dependency-json generator,
-generate input suitable for graphviz to render a dependency graph of
-targets."""
-
-import collections
-import json
-import sys
-
-
-def ParseTarget(target):
- target, _, suffix = target.partition('#')
- filename, _, target = target.partition(':')
- return filename, target, suffix
-
-
-def LoadEdges(filename, targets):
- """Load the edges map from the dump file, and filter it to only
- show targets in |targets| and their depedendents."""
-
- file = open('dump.json')
- edges = json.load(file)
- file.close()
-
- # Copy out only the edges we're interested in from the full edge list.
- target_edges = {}
- to_visit = targets[:]
- while to_visit:
- src = to_visit.pop()
- if src in target_edges:
- continue
- target_edges[src] = edges[src]
- to_visit.extend(edges[src])
-
- return target_edges
-
-
-def WriteGraph(edges):
- """Print a graphviz graph to stdout.
- |edges| is a map of target to a list of other targets it depends on."""
-
- # Bucket targets by file.
- files = collections.defaultdict(list)
- for src, dst in edges.items():
- build_file, target_name, toolset = ParseTarget(src)
- files[build_file].append(src)
-
- print 'digraph D {'
- print ' fontsize=8' # Used by subgraphs.
- print ' node [fontsize=8]'
-
- # Output nodes by file. We must first write out each node within
- # its file grouping before writing out any edges that may refer
- # to those nodes.
- for filename, targets in files.items():
- if len(targets) == 1:
- # If there's only one node for this file, simplify
- # the display by making it a box without an internal node.
- target = targets[0]
- build_file, target_name, toolset = ParseTarget(target)
- print ' "%s" [shape=box, label="%s\\n%s"]' % (target, filename,
- target_name)
- else:
- # Group multiple nodes together in a subgraph.
- print ' subgraph "cluster_%s" {' % filename
- print ' label = "%s"' % filename
- for target in targets:
- build_file, target_name, toolset = ParseTarget(target)
- print ' "%s" [label="%s"]' % (target, target_name)
- print ' }'
-
- # Now that we've placed all the nodes within subgraphs, output all
- # the edges between nodes.
- for src, dsts in edges.items():
- for dst in dsts:
- print ' "%s" -> "%s"' % (src, dst)
-
- print '}'
-
-
-def main():
- if len(sys.argv) < 2:
- print >>sys.stderr, __doc__
- print >>sys.stderr
- print >>sys.stderr, 'usage: %s target1 target2...' % (sys.argv[0])
- return 1
-
- edges = LoadEdges('dump.json', sys.argv[1:])
-
- WriteGraph(edges)
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/node_modules/node-gyp/gyp/tools/pretty_gyp.py b/node_modules/node-gyp/gyp/tools/pretty_gyp.py
deleted file mode 100755
index c51d358..0000000
--- a/node_modules/node-gyp/gyp/tools/pretty_gyp.py
+++ /dev/null
@@ -1,155 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Pretty-prints the contents of a GYP file."""
-
-import sys
-import re
-
-
-# Regex to remove comments when we're counting braces.
-COMMENT_RE = re.compile(r'\s*#.*')
-
-# Regex to remove quoted strings when we're counting braces.
-# It takes into account quoted quotes, and makes sure that the quotes match.
-# NOTE: It does not handle quotes that span more than one line, or
-# cases where an escaped quote is preceeded by an escaped backslash.
-QUOTE_RE_STR = r'(?P<q>[\'"])(.*?)(?<![^\\][\\])(?P=q)'
-QUOTE_RE = re.compile(QUOTE_RE_STR)
-
-
-def comment_replace(matchobj):
- return matchobj.group(1) + matchobj.group(2) + '#' * len(matchobj.group(3))
-
-
-def mask_comments(input):
- """Mask the quoted strings so we skip braces inside quoted strings."""
- search_re = re.compile(r'(.*?)(#)(.*)')
- return [search_re.sub(comment_replace, line) for line in input]
-
-
-def quote_replace(matchobj):
- return "%s%s%s%s" % (matchobj.group(1),
- matchobj.group(2),
- 'x'*len(matchobj.group(3)),
- matchobj.group(2))
-
-
-def mask_quotes(input):
- """Mask the quoted strings so we skip braces inside quoted strings."""
- search_re = re.compile(r'(.*?)' + QUOTE_RE_STR)
- return [search_re.sub(quote_replace, line) for line in input]
-
-
-def do_split(input, masked_input, search_re):
- output = []
- mask_output = []
- for (line, masked_line) in zip(input, masked_input):
- m = search_re.match(masked_line)
- while m:
- split = len(m.group(1))
- line = line[:split] + r'\n' + line[split:]
- masked_line = masked_line[:split] + r'\n' + masked_line[split:]
- m = search_re.match(masked_line)
- output.extend(line.split(r'\n'))
- mask_output.extend(masked_line.split(r'\n'))
- return (output, mask_output)
-
-
-def split_double_braces(input):
- """Masks out the quotes and comments, and then splits appropriate
- lines (lines that matche the double_*_brace re's above) before
- indenting them below.
-
- These are used to split lines which have multiple braces on them, so
- that the indentation looks prettier when all laid out (e.g. closing
- braces make a nice diagonal line).
- """
- double_open_brace_re = re.compile(r'(.*?[\[\{\(,])(\s*)([\[\{\(])')
- double_close_brace_re = re.compile(r'(.*?[\]\}\)],?)(\s*)([\]\}\)])')
-
- masked_input = mask_quotes(input)
- masked_input = mask_comments(masked_input)
-
- (output, mask_output) = do_split(input, masked_input, double_open_brace_re)
- (output, mask_output) = do_split(output, mask_output, double_close_brace_re)
-
- return output
-
-
-def count_braces(line):
- """keeps track of the number of braces on a given line and returns the result.
-
- It starts at zero and subtracts for closed braces, and adds for open braces.
- """
- open_braces = ['[', '(', '{']
- close_braces = [']', ')', '}']
- closing_prefix_re = re.compile(r'(.*?[^\s\]\}\)]+.*?)([\]\}\)],?)\s*$')
- cnt = 0
- stripline = COMMENT_RE.sub(r'', line)
- stripline = QUOTE_RE.sub(r"''", stripline)
- for char in stripline:
- for brace in open_braces:
- if char == brace:
- cnt += 1
- for brace in close_braces:
- if char == brace:
- cnt -= 1
-
- after = False
- if cnt > 0:
- after = True
-
- # This catches the special case of a closing brace having something
- # other than just whitespace ahead of it -- we don't want to
- # unindent that until after this line is printed so it stays with
- # the previous indentation level.
- if cnt < 0 and closing_prefix_re.match(stripline):
- after = True
- return (cnt, after)
-
-
-def prettyprint_input(lines):
- """Does the main work of indenting the input based on the brace counts."""
- indent = 0
- basic_offset = 2
- last_line = ""
- for line in lines:
- if COMMENT_RE.match(line):
- print line
- else:
- line = line.strip('\r\n\t ') # Otherwise doesn't strip \r on Unix.
- if len(line) > 0:
- (brace_diff, after) = count_braces(line)
- if brace_diff != 0:
- if after:
- print " " * (basic_offset * indent) + line
- indent += brace_diff
- else:
- indent += brace_diff
- print " " * (basic_offset * indent) + line
- else:
- print " " * (basic_offset * indent) + line
- else:
- print ""
- last_line = line
-
-
-def main():
- if len(sys.argv) > 1:
- data = open(sys.argv[1]).read().splitlines()
- else:
- data = sys.stdin.read().splitlines()
- # Split up the double braces.
- lines = split_double_braces(data)
-
- # Indent and print the output.
- prettyprint_input(lines)
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/node_modules/node-gyp/gyp/tools/pretty_sln.py b/node_modules/node-gyp/gyp/tools/pretty_sln.py
deleted file mode 100755
index ca8cf4a..0000000
--- a/node_modules/node-gyp/gyp/tools/pretty_sln.py
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Prints the information in a sln file in a diffable way.
-
- It first outputs each projects in alphabetical order with their
- dependencies.
-
- Then it outputs a possible build order.
-"""
-
-__author__ = 'nsylvain (Nicolas Sylvain)'
-
-import os
-import re
-import sys
-import pretty_vcproj
-
-def BuildProject(project, built, projects, deps):
- # if all dependencies are done, we can build it, otherwise we try to build the
- # dependency.
- # This is not infinite-recursion proof.
- for dep in deps[project]:
- if dep not in built:
- BuildProject(dep, built, projects, deps)
- print project
- built.append(project)
-
-def ParseSolution(solution_file):
- # All projects, their clsid and paths.
- projects = dict()
-
- # A list of dependencies associated with a project.
- dependencies = dict()
-
- # Regular expressions that matches the SLN format.
- # The first line of a project definition.
- begin_project = re.compile(r'^Project\("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942'
- r'}"\) = "(.*)", "(.*)", "(.*)"$')
- # The last line of a project definition.
- end_project = re.compile('^EndProject$')
- # The first line of a dependency list.
- begin_dep = re.compile(
- r'ProjectSection\(ProjectDependencies\) = postProject$')
- # The last line of a dependency list.
- end_dep = re.compile('EndProjectSection$')
- # A line describing a dependency.
- dep_line = re.compile(' *({.*}) = ({.*})$')
-
- in_deps = False
- solution = open(solution_file)
- for line in solution:
- results = begin_project.search(line)
- if results:
- # Hack to remove icu because the diff is too different.
- if results.group(1).find('icu') != -1:
- continue
- # We remove "_gyp" from the names because it helps to diff them.
- current_project = results.group(1).replace('_gyp', '')
- projects[current_project] = [results.group(2).replace('_gyp', ''),
- results.group(3),
- results.group(2)]
- dependencies[current_project] = []
- continue
-
- results = end_project.search(line)
- if results:
- current_project = None
- continue
-
- results = begin_dep.search(line)
- if results:
- in_deps = True
- continue
-
- results = end_dep.search(line)
- if results:
- in_deps = False
- continue
-
- results = dep_line.search(line)
- if results and in_deps and current_project:
- dependencies[current_project].append(results.group(1))
- continue
-
- # Change all dependencies clsid to name instead.
- for project in dependencies:
- # For each dependencies in this project
- new_dep_array = []
- for dep in dependencies[project]:
- # Look for the project name matching this cldis
- for project_info in projects:
- if projects[project_info][1] == dep:
- new_dep_array.append(project_info)
- dependencies[project] = sorted(new_dep_array)
-
- return (projects, dependencies)
-
-def PrintDependencies(projects, deps):
- print "---------------------------------------"
- print "Dependencies for all projects"
- print "---------------------------------------"
- print "-- --"
-
- for (project, dep_list) in sorted(deps.items()):
- print "Project : %s" % project
- print "Path : %s" % projects[project][0]
- if dep_list:
- for dep in dep_list:
- print " - %s" % dep
- print ""
-
- print "-- --"
-
-def PrintBuildOrder(projects, deps):
- print "---------------------------------------"
- print "Build order "
- print "---------------------------------------"
- print "-- --"
-
- built = []
- for (project, _) in sorted(deps.items()):
- if project not in built:
- BuildProject(project, built, projects, deps)
-
- print "-- --"
-
-def PrintVCProj(projects):
-
- for project in projects:
- print "-------------------------------------"
- print "-------------------------------------"
- print project
- print project
- print project
- print "-------------------------------------"
- print "-------------------------------------"
-
- project_path = os.path.abspath(os.path.join(os.path.dirname(sys.argv[1]),
- projects[project][2]))
-
- pretty = pretty_vcproj
- argv = [ '',
- project_path,
- '$(SolutionDir)=%s\\' % os.path.dirname(sys.argv[1]),
- ]
- argv.extend(sys.argv[3:])
- pretty.main(argv)
-
-def main():
- # check if we have exactly 1 parameter.
- if len(sys.argv) < 2:
- print 'Usage: %s "c:\\path\\to\\project.sln"' % sys.argv[0]
- return 1
-
- (projects, deps) = ParseSolution(sys.argv[1])
- PrintDependencies(projects, deps)
- PrintBuildOrder(projects, deps)
-
- if '--recursive' in sys.argv:
- PrintVCProj(projects)
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/node_modules/node-gyp/gyp/tools/pretty_vcproj.py b/node_modules/node-gyp/gyp/tools/pretty_vcproj.py
deleted file mode 100755
index 6099bd7..0000000
--- a/node_modules/node-gyp/gyp/tools/pretty_vcproj.py
+++ /dev/null
@@ -1,329 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Make the format of a vcproj really pretty.
-
- This script normalize and sort an xml. It also fetches all the properties
- inside linked vsprops and include them explicitly in the vcproj.
-
- It outputs the resulting xml to stdout.
-"""
-
-__author__ = 'nsylvain (Nicolas Sylvain)'
-
-import os
-import sys
-
-from xml.dom.minidom import parse
-from xml.dom.minidom import Node
-
-REPLACEMENTS = dict()
-ARGUMENTS = None
-
-
-class CmpTuple(object):
- """Compare function between 2 tuple."""
- def __call__(self, x, y):
- return cmp(x[0], y[0])
-
-
-class CmpNode(object):
- """Compare function between 2 xml nodes."""
-
- def __call__(self, x, y):
- def get_string(node):
- node_string = "node"
- node_string += node.nodeName
- if node.nodeValue:
- node_string += node.nodeValue
-
- if node.attributes:
- # We first sort by name, if present.
- node_string += node.getAttribute("Name")
-
- all_nodes = []
- for (name, value) in node.attributes.items():
- all_nodes.append((name, value))
-
- all_nodes.sort(CmpTuple())
- for (name, value) in all_nodes:
- node_string += name
- node_string += value
-
- return node_string
-
- return cmp(get_string(x), get_string(y))
-
-
-def PrettyPrintNode(node, indent=0):
- if node.nodeType == Node.TEXT_NODE:
- if node.data.strip():
- print '%s%s' % (' '*indent, node.data.strip())
- return
-
- if node.childNodes:
- node.normalize()
- # Get the number of attributes
- attr_count = 0
- if node.attributes:
- attr_count = node.attributes.length
-
- # Print the main tag
- if attr_count == 0:
- print '%s<%s>' % (' '*indent, node.nodeName)
- else:
- print '%s<%s' % (' '*indent, node.nodeName)
-
- all_attributes = []
- for (name, value) in node.attributes.items():
- all_attributes.append((name, value))
- all_attributes.sort(CmpTuple())
- for (name, value) in all_attributes:
- print '%s %s="%s"' % (' '*indent, name, value)
- print '%s>' % (' '*indent)
- if node.nodeValue:
- print '%s %s' % (' '*indent, node.nodeValue)
-
- for sub_node in node.childNodes:
- PrettyPrintNode(sub_node, indent=indent+2)
- print '%s</%s>' % (' '*indent, node.nodeName)
-
-
-def FlattenFilter(node):
- """Returns a list of all the node and sub nodes."""
- node_list = []
-
- if (node.attributes and
- node.getAttribute('Name') == '_excluded_files'):
- # We don't add the "_excluded_files" filter.
- return []
-
- for current in node.childNodes:
- if current.nodeName == 'Filter':
- node_list.extend(FlattenFilter(current))
- else:
- node_list.append(current)
-
- return node_list
-
-
-def FixFilenames(filenames, current_directory):
- new_list = []
- for filename in filenames:
- if filename:
- for key in REPLACEMENTS:
- filename = filename.replace(key, REPLACEMENTS[key])
- os.chdir(current_directory)
- filename = filename.strip('"\' ')
- if filename.startswith('$'):
- new_list.append(filename)
- else:
- new_list.append(os.path.abspath(filename))
- return new_list
-
-
-def AbsoluteNode(node):
- """Makes all the properties we know about in this node absolute."""
- if node.attributes:
- for (name, value) in node.attributes.items():
- if name in ['InheritedPropertySheets', 'RelativePath',
- 'AdditionalIncludeDirectories',
- 'IntermediateDirectory', 'OutputDirectory',
- 'AdditionalLibraryDirectories']:
- # We want to fix up these paths
- path_list = value.split(';')
- new_list = FixFilenames(path_list, os.path.dirname(ARGUMENTS[1]))
- node.setAttribute(name, ';'.join(new_list))
- if not value:
- node.removeAttribute(name)
-
-
-def CleanupVcproj(node):
- """For each sub node, we call recursively this function."""
- for sub_node in node.childNodes:
- AbsoluteNode(sub_node)
- CleanupVcproj(sub_node)
-
- # Normalize the node, and remove all extranous whitespaces.
- for sub_node in node.childNodes:
- if sub_node.nodeType == Node.TEXT_NODE:
- sub_node.data = sub_node.data.replace("\r", "")
- sub_node.data = sub_node.data.replace("\n", "")
- sub_node.data = sub_node.data.rstrip()
-
- # Fix all the semicolon separated attributes to be sorted, and we also
- # remove the dups.
- if node.attributes:
- for (name, value) in node.attributes.items():
- sorted_list = sorted(value.split(';'))
- unique_list = []
- for i in sorted_list:
- if not unique_list.count(i):
- unique_list.append(i)
- node.setAttribute(name, ';'.join(unique_list))
- if not value:
- node.removeAttribute(name)
-
- if node.childNodes:
- node.normalize()
-
- # For each node, take a copy, and remove it from the list.
- node_array = []
- while node.childNodes and node.childNodes[0]:
- # Take a copy of the node and remove it from the list.
- current = node.childNodes[0]
- node.removeChild(current)
-
- # If the child is a filter, we want to append all its children
- # to this same list.
- if current.nodeName == 'Filter':
- node_array.extend(FlattenFilter(current))
- else:
- node_array.append(current)
-
-
- # Sort the list.
- node_array.sort(CmpNode())
-
- # Insert the nodes in the correct order.
- for new_node in node_array:
- # But don't append empty tool node.
- if new_node.nodeName == 'Tool':
- if new_node.attributes and new_node.attributes.length == 1:
- # This one was empty.
- continue
- if new_node.nodeName == 'UserMacro':
- continue
- node.appendChild(new_node)
-
-
-def GetConfiguationNodes(vcproj):
- #TODO(nsylvain): Find a better way to navigate the xml.
- nodes = []
- for node in vcproj.childNodes:
- if node.nodeName == "Configurations":
- for sub_node in node.childNodes:
- if sub_node.nodeName == "Configuration":
- nodes.append(sub_node)
-
- return nodes
-
-
-def GetChildrenVsprops(filename):
- dom = parse(filename)
- if dom.documentElement.attributes:
- vsprops = dom.documentElement.getAttribute('InheritedPropertySheets')
- return FixFilenames(vsprops.split(';'), os.path.dirname(filename))
- return []
-
-def SeekToNode(node1, child2):
- # A text node does not have properties.
- if child2.nodeType == Node.TEXT_NODE:
- return None
-
- # Get the name of the current node.
- current_name = child2.getAttribute("Name")
- if not current_name:
- # There is no name. We don't know how to merge.
- return None
-
- # Look through all the nodes to find a match.
- for sub_node in node1.childNodes:
- if sub_node.nodeName == child2.nodeName:
- name = sub_node.getAttribute("Name")
- if name == current_name:
- return sub_node
-
- # No match. We give up.
- return None
-
-
-def MergeAttributes(node1, node2):
- # No attributes to merge?
- if not node2.attributes:
- return
-
- for (name, value2) in node2.attributes.items():
- # Don't merge the 'Name' attribute.
- if name == 'Name':
- continue
- value1 = node1.getAttribute(name)
- if value1:
- # The attribute exist in the main node. If it's equal, we leave it
- # untouched, otherwise we concatenate it.
- if value1 != value2:
- node1.setAttribute(name, ';'.join([value1, value2]))
- else:
- # The attribute does nto exist in the main node. We append this one.
- node1.setAttribute(name, value2)
-
- # If the attribute was a property sheet attributes, we remove it, since
- # they are useless.
- if name == 'InheritedPropertySheets':
- node1.removeAttribute(name)
-
-
-def MergeProperties(node1, node2):
- MergeAttributes(node1, node2)
- for child2 in node2.childNodes:
- child1 = SeekToNode(node1, child2)
- if child1:
- MergeProperties(child1, child2)
- else:
- node1.appendChild(child2.cloneNode(True))
-
-
-def main(argv):
- """Main function of this vcproj prettifier."""
- global ARGUMENTS
- ARGUMENTS = argv
-
- # check if we have exactly 1 parameter.
- if len(argv) < 2:
- print ('Usage: %s "c:\\path\\to\\vcproj.vcproj" [key1=value1] '
- '[key2=value2]' % argv[0])
- return 1
-
- # Parse the keys
- for i in range(2, len(argv)):
- (key, value) = argv[i].split('=')
- REPLACEMENTS[key] = value
-
- # Open the vcproj and parse the xml.
- dom = parse(argv[1])
-
- # First thing we need to do is find the Configuration Node and merge them
- # with the vsprops they include.
- for configuration_node in GetConfiguationNodes(dom.documentElement):
- # Get the property sheets associated with this configuration.
- vsprops = configuration_node.getAttribute('InheritedPropertySheets')
-
- # Fix the filenames to be absolute.
- vsprops_list = FixFilenames(vsprops.strip().split(';'),
- os.path.dirname(argv[1]))
-
- # Extend the list of vsprops with all vsprops contained in the current
- # vsprops.
- for current_vsprops in vsprops_list:
- vsprops_list.extend(GetChildrenVsprops(current_vsprops))
-
- # Now that we have all the vsprops, we need to merge them.
- for current_vsprops in vsprops_list:
- MergeProperties(configuration_node,
- parse(current_vsprops).documentElement)
-
- # Now that everything is merged, we need to cleanup the xml.
- CleanupVcproj(dom.documentElement)
-
- # Finally, we use the prett xml function to print the vcproj back to the
- # user.
- #print dom.toprettyxml(newl="\n")
- PrettyPrintNode(dom.documentElement)
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv))
diff --git a/node_modules/node-gyp/lib/Find-VS2017.cs b/node_modules/node-gyp/lib/Find-VS2017.cs
deleted file mode 100644
index 6e7429b..0000000
--- a/node_modules/node-gyp/lib/Find-VS2017.cs
+++ /dev/null
@@ -1,273 +0,0 @@
-// Copyright 2017 - Refael Ackermann
-// Distributed under MIT style license
-// See accompanying file LICENSE at https://github.com/node4good/windows-autoconf
-
-// Usage:
-// powershell -ExecutionPolicy Unrestricted -Version "2.0" -Command "&{Add-Type -Path Find-VS2017.cs; [VisualStudioConfiguration.Main]::Query()}"
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-
-namespace VisualStudioConfiguration
-{
- [Flags]
- public enum InstanceState : uint
- {
- None = 0,
- Local = 1,
- Registered = 2,
- NoRebootRequired = 4,
- NoErrors = 8,
- Complete = 4294967295,
- }
-
- [Guid("6380BCFF-41D3-4B2E-8B2E-BF8A6810C848")]
- [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface IEnumSetupInstances
- {
-
- void Next([MarshalAs(UnmanagedType.U4), In] int celt,
- [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Interface), Out] ISetupInstance[] rgelt,
- [MarshalAs(UnmanagedType.U4)] out int pceltFetched);
-
- void Skip([MarshalAs(UnmanagedType.U4), In] int celt);
-
- void Reset();
-
- [return: MarshalAs(UnmanagedType.Interface)]
- IEnumSetupInstances Clone();
- }
-
- [Guid("42843719-DB4C-46C2-8E7C-64F1816EFD5B")]
- [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface ISetupConfiguration
- {
- }
-
- [Guid("26AAB78C-4A60-49D6-AF3B-3C35BC93365D")]
- [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface ISetupConfiguration2 : ISetupConfiguration
- {
-
- [return: MarshalAs(UnmanagedType.Interface)]
- IEnumSetupInstances EnumInstances();
-
- [return: MarshalAs(UnmanagedType.Interface)]
- ISetupInstance GetInstanceForCurrentProcess();
-
- [return: MarshalAs(UnmanagedType.Interface)]
- ISetupInstance GetInstanceForPath([MarshalAs(UnmanagedType.LPWStr), In] string path);
-
- [return: MarshalAs(UnmanagedType.Interface)]
- IEnumSetupInstances EnumAllInstances();
- }
-
- [Guid("B41463C3-8866-43B5-BC33-2B0676F7F42E")]
- [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface ISetupInstance
- {
- }
-
- [Guid("89143C9A-05AF-49B0-B717-72E218A2185C")]
- [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface ISetupInstance2 : ISetupInstance
- {
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetInstanceId();
-
- [return: MarshalAs(UnmanagedType.Struct)]
- System.Runtime.InteropServices.ComTypes.FILETIME GetInstallDate();
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetInstallationName();
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetInstallationPath();
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetInstallationVersion();
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetDisplayName([MarshalAs(UnmanagedType.U4), In] int lcid);
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetDescription([MarshalAs(UnmanagedType.U4), In] int lcid);
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string ResolvePath([MarshalAs(UnmanagedType.LPWStr), In] string pwszRelativePath);
-
- [return: MarshalAs(UnmanagedType.U4)]
- InstanceState GetState();
-
- [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_UNKNOWN)]
- ISetupPackageReference[] GetPackages();
-
- ISetupPackageReference GetProduct();
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetProductPath();
-
- [return: MarshalAs(UnmanagedType.VariantBool)]
- bool IsLaunchable();
-
- [return: MarshalAs(UnmanagedType.VariantBool)]
- bool IsComplete();
-
- [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_UNKNOWN)]
- ISetupPropertyStore GetProperties();
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetEnginePath();
- }
-
- [Guid("DA8D8A16-B2B6-4487-A2F1-594CCCCD6BF5")]
- [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface ISetupPackageReference
- {
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetId();
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetVersion();
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetChip();
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetLanguage();
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetBranch();
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetType();
-
- [return: MarshalAs(UnmanagedType.BStr)]
- string GetUniqueId();
-
- [return: MarshalAs(UnmanagedType.VariantBool)]
- bool GetIsExtension();
- }
-
- [Guid("c601c175-a3be-44bc-91f6-4568d230fc83")]
- [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
- [ComImport]
- public interface ISetupPropertyStore
- {
-
- [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)]
- string[] GetNames();
-
- object GetValue([MarshalAs(UnmanagedType.LPWStr), In] string pwszName);
- }
-
- [Guid("42843719-DB4C-46C2-8E7C-64F1816EFD5B")]
- [CoClass(typeof(SetupConfigurationClass))]
- [ComImport]
- public interface SetupConfiguration : ISetupConfiguration2, ISetupConfiguration
- {
- }
-
- [Guid("177F0C4A-1CD3-4DE7-A32C-71DBBB9FA36D")]
- [ClassInterface(ClassInterfaceType.None)]
- [ComImport]
- public class SetupConfigurationClass
- {
- }
-
- public static class Main
- {
- public static void Query()
- {
- ISetupConfiguration query = new SetupConfiguration();
- ISetupConfiguration2 query2 = (ISetupConfiguration2)query;
- IEnumSetupInstances e = query2.EnumAllInstances();
-
- int pceltFetched;
- ISetupInstance2[] rgelt = new ISetupInstance2[1];
- StringBuilder log = new StringBuilder();
- while (true)
- {
- e.Next(1, rgelt, out pceltFetched);
- if (pceltFetched <= 0)
- {
- Console.WriteLine(String.Format("{{\"log\":\"{0}\"}}", log.ToString()));
- return;
- }
- if (CheckInstance(rgelt[0], ref log))
- return;
- }
- }
-
- private static bool CheckInstance(ISetupInstance2 setupInstance2, ref StringBuilder log)
- {
- // Visual Studio Community 2017 component directory:
- // https://www.visualstudio.com/en-us/productinfo/vs2017-install-product-Community.workloads
-
- string path = setupInstance2.GetInstallationPath().Replace("\\", "\\\\");
- log.Append(String.Format("Found installation at: {0}\\n", path));
-
- bool hasMSBuild = false;
- bool hasVCTools = false;
- uint Win10SDKVer = 0;
- bool hasWin8SDK = false;
-
- foreach (ISetupPackageReference package in setupInstance2.GetPackages())
- {
- const string Win10SDKPrefix = "Microsoft.VisualStudio.Component.Windows10SDK.";
-
- string id = package.GetId();
- if (id == "Microsoft.VisualStudio.VC.MSBuild.Base")
- hasMSBuild = true;
- else if (id == "Microsoft.VisualStudio.Component.VC.Tools.x86.x64")
- hasVCTools = true;
- else if (id.StartsWith(Win10SDKPrefix)) {
- string[] parts = id.Substring(Win10SDKPrefix.Length).Split('.');
- if (parts.Length > 1 && parts[1] != "Desktop")
- continue;
- uint foundSdkVer;
- if (UInt32.TryParse(parts[0], out foundSdkVer))
- Win10SDKVer = Math.Max(Win10SDKVer, foundSdkVer);
- } else if (id == "Microsoft.VisualStudio.Component.Windows81SDK")
- hasWin8SDK = true;
- else
- continue;
-
- log.Append(String.Format(" - Found {0}\\n", id));
- }
-
- if (!hasMSBuild)
- log.Append(" - Missing Visual Studio C++ core features (Microsoft.VisualStudio.VC.MSBuild.Base)\\n");
- if (!hasVCTools)
- log.Append(" - Missing VC++ 2017 v141 toolset (x86,x64) (Microsoft.VisualStudio.Component.VC.Tools.x86.x64)\\n");
- if ((Win10SDKVer == 0) && (!hasWin8SDK))
- log.Append(" - Missing a Windows SDK (Microsoft.VisualStudio.Component.Windows10SDK.* or Microsoft.VisualStudio.Component.Windows81SDK)\\n");
-
- if (hasMSBuild && hasVCTools)
- {
- if (Win10SDKVer > 0)
- {
- log.Append(" - Using this installation with Windows 10 SDK"/*\\n*/);
- Console.WriteLine(String.Format("{{\"log\":\"{0}\",\"path\":\"{1}\",\"sdk\":\"10.0.{2}.0\"}}", log.ToString(), path, Win10SDKVer));
- return true;
- }
- else if (hasWin8SDK)
- {
- log.Append(" - Using this installation with Windows 8.1 SDK"/*\\n*/);
- Console.WriteLine(String.Format("{{\"log\":\"{0}\",\"path\":\"{1}\",\"sdk\":\"8.1\"}}", log.ToString(), path));
- return true;
- }
- }
-
- log.Append(" - Some required components are missing, not using this installation\\n");
- return false;
- }
- }
-}
diff --git a/node_modules/node-gyp/lib/build.js b/node_modules/node-gyp/lib/build.js
deleted file mode 100644
index 2f8e14c..0000000
--- a/node_modules/node-gyp/lib/build.js
+++ /dev/null
@@ -1,270 +0,0 @@
-
-module.exports = exports = build
-
-/**
- * Module dependencies.
- */
-
-var fs = require('graceful-fs')
- , rm = require('rimraf')
- , path = require('path')
- , glob = require('glob')
- , log = require('npmlog')
- , which = require('which')
- , exec = require('child_process').exec
- , processRelease = require('./process-release')
- , win = process.platform === 'win32'
-
-exports.usage = 'Invokes `' + (win ? 'msbuild' : 'make') + '` and builds the module'
-
-function build (gyp, argv, callback) {
- var platformMake = 'make'
- if (process.platform === 'aix') {
- platformMake = 'gmake'
- } else if (process.platform.indexOf('bsd') !== -1) {
- platformMake = 'gmake'
- } else if (win && argv.length > 0) {
- argv = argv.map(function(target) {
- return '/t:' + target
- })
- }
-
- var release = processRelease(argv, gyp, process.version, process.release)
- , makeCommand = gyp.opts.make || process.env.MAKE || platformMake
- , command = win ? 'msbuild' : makeCommand
- , buildDir = path.resolve('build')
- , configPath = path.resolve(buildDir, 'config.gypi')
- , jobs = gyp.opts.jobs || process.env.JOBS
- , buildType
- , config
- , arch
- , nodeDir
-
- loadConfigGypi()
-
- /**
- * Load the "config.gypi" file that was generated during "configure".
- */
-
- function loadConfigGypi () {
- fs.readFile(configPath, 'utf8', function (err, data) {
- if (err) {
- if (err.code == 'ENOENT') {
- callback(new Error('You must run `node-gyp configure` first!'))
- } else {
- callback(err)
- }
- return
- }
- config = JSON.parse(data.replace(/\#.+\n/, ''))
-
- // get the 'arch', 'buildType', and 'nodeDir' vars from the config
- buildType = config.target_defaults.default_configuration
- arch = config.variables.target_arch
- nodeDir = config.variables.nodedir
-
- if ('debug' in gyp.opts) {
- buildType = gyp.opts.debug ? 'Debug' : 'Release'
- }
- if (!buildType) {
- buildType = 'Release'
- }
-
- log.verbose('build type', buildType)
- log.verbose('architecture', arch)
- log.verbose('node dev dir', nodeDir)
-
- if (win) {
- findSolutionFile()
- } else {
- doWhich()
- }
- })
- }
-
- /**
- * On Windows, find the first build/*.sln file.
- */
-
- function findSolutionFile () {
- glob('build/*.sln', function (err, files) {
- if (err) return callback(err)
- if (files.length === 0) {
- return callback(new Error('Could not find *.sln file. Did you run "configure"?'))
- }
- guessedSolution = files[0]
- log.verbose('found first Solution file', guessedSolution)
- doWhich()
- })
- }
-
- /**
- * Uses node-which to locate the msbuild / make executable.
- */
-
- function doWhich () {
- // First make sure we have the build command in the PATH
- which(command, function (err, execPath) {
- if (err) {
- if (win && /not found/.test(err.message)) {
- // On windows and no 'msbuild' found. Let's guess where it is
- findMsbuild()
- } else {
- // Some other error or 'make' not found on Unix, report that to the user
- callback(err)
- }
- return
- }
- log.verbose('`which` succeeded for `' + command + '`', execPath)
- doBuild()
- })
- }
-
- /**
- * Search for the location of "msbuild.exe" file on Windows.
- */
-
- function findMsbuild () {
- if (config.variables.msbuild_path) {
- command = config.variables.msbuild_path
- log.verbose('using MSBuild:', command)
- doBuild()
- return
- }
-
- log.verbose('could not find "msbuild.exe" in PATH - finding location in registry')
- var notfoundErr = 'Can\'t find "msbuild.exe". Do you have Microsoft Visual Studio C++ 2008+ installed?'
- var cmd = 'reg query "HKLM\\Software\\Microsoft\\MSBuild\\ToolsVersions" /s'
- if (process.arch !== 'ia32')
- cmd += ' /reg:32'
- exec(cmd, function (err, stdout, stderr) {
- if (err) {
- return callback(new Error(err.message + '\n' + notfoundErr))
- }
- var reVers = /ToolsVersions\\([^\\]+)$/i
- , rePath = /\r\n[ \t]+MSBuildToolsPath[ \t]+REG_SZ[ \t]+([^\r]+)/i
- , msbuilds = []
- , r
- , msbuildPath
- stdout.split('\r\n\r\n').forEach(function(l) {
- if (!l) return
- l = l.trim()
- if (r = reVers.exec(l.substring(0, l.indexOf('\r\n')))) {
- var ver = parseFloat(r[1], 10)
- if (ver >= 3.5) {
- if (r = rePath.exec(l)) {
- msbuilds.push({
- version: ver,
- path: r[1]
- })
- }
- }
- }
- })
- msbuilds.sort(function (x, y) {
- return (x.version < y.version ? -1 : 1)
- })
- ;(function verifyMsbuild () {
- if (!msbuilds.length) return callback(new Error(notfoundErr))
- msbuildPath = path.resolve(msbuilds.pop().path, 'msbuild.exe')
- fs.stat(msbuildPath, function (err, stat) {
- if (err) {
- if (err.code == 'ENOENT') {
- if (msbuilds.length) {
- return verifyMsbuild()
- } else {
- callback(new Error(notfoundErr))
- }
- } else {
- callback(err)
- }
- return
- }
- command = msbuildPath
- doBuild()
- })
- })()
- })
- }
-
-
- /**
- * Actually spawn the process and compile the module.
- */
-
- function doBuild () {
-
- // Enable Verbose build
- var verbose = log.levels[log.level] <= log.levels.verbose
- if (!win && verbose) {
- argv.push('V=1')
- }
- if (win && !verbose) {
- argv.push('/clp:Verbosity=minimal')
- }
-
- if (win) {
- // Turn off the Microsoft logo on Windows
- argv.push('/nologo')
- }
-
- // Specify the build type, Release by default
- if (win) {
- var archLower = arch.toLowerCase()
- var p = archLower === 'x64' ? 'x64' :
- (archLower === 'arm' ? 'ARM' : 'Win32')
- argv.push('/p:Configuration=' + buildType + ';Platform=' + p)
- if (jobs) {
- var j = parseInt(jobs, 10)
- if (!isNaN(j) && j > 0) {
- argv.push('/m:' + j)
- } else if (jobs.toUpperCase() === 'MAX') {
- argv.push('/m:' + require('os').cpus().length)
- }
- }
- } else {
- argv.push('BUILDTYPE=' + buildType)
- // Invoke the Makefile in the 'build' dir.
- argv.push('-C')
- argv.push('build')
- if (jobs) {
- var j = parseInt(jobs, 10)
- if (!isNaN(j) && j > 0) {
- argv.push('--jobs')
- argv.push(j)
- } else if (jobs.toUpperCase() === 'MAX') {
- argv.push('--jobs')
- argv.push(require('os').cpus().length)
- }
- }
- }
-
- if (win) {
- // did the user specify their own .sln file?
- var hasSln = argv.some(function (arg) {
- return path.extname(arg) == '.sln'
- })
- if (!hasSln) {
- argv.unshift(gyp.opts.solution || guessedSolution)
- }
- }
-
- var proc = gyp.spawn(command, argv)
- proc.on('exit', onExit)
- }
-
- /**
- * Invoked after the make/msbuild command exits.
- */
-
- function onExit (code, signal) {
- if (code !== 0) {
- return callback(new Error('`' + command + '` failed with exit code: ' + code))
- }
- if (signal) {
- return callback(new Error('`' + command + '` got signal: ' + signal))
- }
- callback()
- }
-
-}
diff --git a/node_modules/node-gyp/lib/clean.js b/node_modules/node-gyp/lib/clean.js
deleted file mode 100644
index e69164d..0000000
--- a/node_modules/node-gyp/lib/clean.js
+++ /dev/null
@@ -1,22 +0,0 @@
-
-module.exports = exports = clean
-
-exports.usage = 'Removes any generated build files and the "out" dir'
-
-/**
- * Module dependencies.
- */
-
-var rm = require('rimraf')
-var log = require('npmlog')
-
-
-function clean (gyp, argv, callback) {
-
- // Remove the 'build' dir
- var buildDir = 'build'
-
- log.verbose('clean', 'removing "%s" directory', buildDir)
- rm(buildDir, callback)
-
-}
diff --git a/node_modules/node-gyp/lib/configure.js b/node_modules/node-gyp/lib/configure.js
deleted file mode 100644
index 35e6787..0000000
--- a/node_modules/node-gyp/lib/configure.js
+++ /dev/null
@@ -1,524 +0,0 @@
-module.exports = exports = configure
-module.exports.test = {
- PythonFinder: PythonFinder,
- findAccessibleSync: findAccessibleSync,
- findPython: findPython,
-}
-
-/**
- * Module dependencies.
- */
-
-var fs = require('graceful-fs')
- , path = require('path')
- , log = require('npmlog')
- , osenv = require('osenv')
- , which = require('which')
- , semver = require('semver')
- , mkdirp = require('mkdirp')
- , cp = require('child_process')
- , extend = require('util')._extend
- , processRelease = require('./process-release')
- , win = process.platform === 'win32'
- , findNodeDirectory = require('./find-node-directory')
- , msgFormat = require('util').format
-if (win)
- var findVS2017 = require('./find-vs2017')
-
-exports.usage = 'Generates ' + (win ? 'MSVC project files' : 'a Makefile') + ' for the current module'
-
-function configure (gyp, argv, callback) {
-
- var python = gyp.opts.python || process.env.PYTHON || 'python2'
- , buildDir = path.resolve('build')
- , configNames = [ 'config.gypi', 'common.gypi' ]
- , configs = []
- , nodeDir
- , release = processRelease(argv, gyp, process.version, process.release)
-
- findPython(python, function (err, found) {
- if (err) {
- callback(err)
- } else {
- python = found
- getNodeDir()
- }
- })
-
- function getNodeDir () {
-
- // 'python' should be set by now
- process.env.PYTHON = python
-
- if (gyp.opts.nodedir) {
- // --nodedir was specified. use that for the dev files
- nodeDir = gyp.opts.nodedir.replace(/^~/, osenv.home())
-
- log.verbose('get node dir', 'compiling against specified --nodedir dev files: %s', nodeDir)
- createBuildDir()
-
- } else {
- // if no --nodedir specified, ensure node dependencies are installed
- if ('v' + release.version !== process.version) {
- // if --target was given, then determine a target version to compile for
- log.verbose('get node dir', 'compiling against --target node version: %s', release.version)
- } else {
- // if no --target was specified then use the current host node version
- log.verbose('get node dir', 'no --target version specified, falling back to host node version: %s', release.version)
- }
-
- if (!release.semver) {
- // could not parse the version string with semver
- return callback(new Error('Invalid version number: ' + release.version))
- }
-
- // If the tarball option is set, always remove and reinstall the headers
- // into devdir. Otherwise only install if they're not already there.
- gyp.opts.ensure = gyp.opts.tarball ? false : true
-
- gyp.commands.install([ release.version ], function (err, version) {
- if (err) return callback(err)
- log.verbose('get node dir', 'target node version installed:', release.versionDir)
- nodeDir = path.resolve(gyp.devDir, release.versionDir)
- createBuildDir()
- })
- }
- }
-
- function createBuildDir () {
- log.verbose('build dir', 'attempting to create "build" dir: %s', buildDir)
- mkdirp(buildDir, function (err, isNew) {
- if (err) return callback(err)
- log.verbose('build dir', '"build" dir needed to be created?', isNew)
- if (win && (!gyp.opts.msvs_version || gyp.opts.msvs_version === '2017')) {
- findVS2017(function (err, vsSetup) {
- if (err) {
- log.verbose('Not using VS2017:', err.message)
- createConfigFile()
- } else {
- createConfigFile(null, vsSetup)
- }
- })
- } else {
- createConfigFile()
- }
- })
- }
-
- function createConfigFile (err, vsSetup) {
- if (err) return callback(err)
-
- var configFilename = 'config.gypi'
- var configPath = path.resolve(buildDir, configFilename)
-
- log.verbose('build/' + configFilename, 'creating config file')
-
- var config = process.config || {}
- , defaults = config.target_defaults
- , variables = config.variables
-
- // default "config.variables"
- if (!variables) variables = config.variables = {}
-
- // default "config.defaults"
- if (!defaults) defaults = config.target_defaults = {}
-
- // don't inherit the "defaults" from node's `process.config` object.
- // doing so could cause problems in cases where the `node` executable was
- // compiled on a different machine (with different lib/include paths) than
- // the machine where the addon is being built to
- defaults.cflags = []
- defaults.defines = []
- defaults.include_dirs = []
- defaults.libraries = []
-
- // set the default_configuration prop
- if ('debug' in gyp.opts) {
- defaults.default_configuration = gyp.opts.debug ? 'Debug' : 'Release'
- }
- if (!defaults.default_configuration) {
- defaults.default_configuration = 'Release'
- }
-
- // set the target_arch variable
- variables.target_arch = gyp.opts.arch || process.arch || 'ia32'
-
- // set the node development directory
- variables.nodedir = nodeDir
-
- // disable -T "thin" static archives by default
- variables.standalone_static_library = gyp.opts.thin ? 0 : 1
-
- if (vsSetup) {
- // GYP doesn't (yet) have support for VS2017, so we force it to VS2015
- // to avoid pulling a floating patch that has not landed upstream.
- // Ref: https://chromium-review.googlesource.com/#/c/433540/
- gyp.opts.msvs_version = '2015'
- process.env['GYP_MSVS_VERSION'] = 2015
- process.env['GYP_MSVS_OVERRIDE_PATH'] = vsSetup.path
- defaults['msbuild_toolset'] = 'v141'
- defaults['msvs_windows_target_platform_version'] = vsSetup.sdk
- variables['msbuild_path'] = path.join(vsSetup.path, 'MSBuild', '15.0',
- 'Bin', 'MSBuild.exe')
- }
-
- // loop through the rest of the opts and add the unknown ones as variables.
- // this allows for module-specific configure flags like:
- //
- // $ node-gyp configure --shared-libxml2
- Object.keys(gyp.opts).forEach(function (opt) {
- if (opt === 'argv') return
- if (opt in gyp.configDefs) return
- variables[opt.replace(/-/g, '_')] = gyp.opts[opt]
- })
-
- // ensures that any boolean values from `process.config` get stringified
- function boolsToString (k, v) {
- if (typeof v === 'boolean')
- return String(v)
- return v
- }
-
- log.silly('build/' + configFilename, config)
-
- // now write out the config.gypi file to the build/ dir
- var prefix = '# Do not edit. File was generated by node-gyp\'s "configure" step'
- , json = JSON.stringify(config, boolsToString, 2)
- log.verbose('build/' + configFilename, 'writing out config file: %s', configPath)
- configs.push(configPath)
- fs.writeFile(configPath, [prefix, json, ''].join('\n'), findConfigs)
- }
-
- function findConfigs (err) {
- if (err) return callback(err)
- var name = configNames.shift()
- if (!name) return runGyp()
- var fullPath = path.resolve(name)
- log.verbose(name, 'checking for gypi file: %s', fullPath)
- fs.stat(fullPath, function (err, stat) {
- if (err) {
- if (err.code == 'ENOENT') {
- findConfigs() // check next gypi filename
- } else {
- callback(err)
- }
- } else {
- log.verbose(name, 'found gypi file')
- configs.push(fullPath)
- findConfigs()
- }
- })
- }
-
- function runGyp (err) {
- if (err) return callback(err)
-
- if (!~argv.indexOf('-f') && !~argv.indexOf('--format')) {
- if (win) {
- log.verbose('gyp', 'gyp format was not specified; forcing "msvs"')
- // force the 'make' target for non-Windows
- argv.push('-f', 'msvs')
- } else {
- log.verbose('gyp', 'gyp format was not specified; forcing "make"')
- // force the 'make' target for non-Windows
- argv.push('-f', 'make')
- }
- }
-
- function hasMsvsVersion () {
- return argv.some(function (arg) {
- return arg.indexOf('msvs_version') === 0
- })
- }
-
- if (win && !hasMsvsVersion()) {
- if ('msvs_version' in gyp.opts) {
- argv.push('-G', 'msvs_version=' + gyp.opts.msvs_version)
- } else {
- argv.push('-G', 'msvs_version=auto')
- }
- }
-
- // include all the ".gypi" files that were found
- configs.forEach(function (config) {
- argv.push('-I', config)
- })
-
- // For AIX and z/OS we need to set up the path to the exports file
- // which contains the symbols needed for linking.
- var node_exp_file = undefined
- if (process.platform === 'aix' || process.platform === 'os390') {
- var ext = process.platform === 'aix' ? 'exp' : 'x'
- var node_root_dir = findNodeDirectory()
- var candidates = undefined
- if (process.platform === 'aix') {
- candidates = ['include/node/node',
- 'out/Release/node',
- 'out/Debug/node',
- 'node'
- ].map(function(file) {
- return file + '.' + ext
- })
- } else {
- candidates = ['out/Release/obj.target/libnode',
- 'out/Debug/obj.target/libnode',
- 'lib/libnode'
- ].map(function(file) {
- return file + '.' + ext
- })
- }
- var logprefix = 'find exports file'
- node_exp_file = findAccessibleSync(logprefix, node_root_dir, candidates)
- if (node_exp_file !== undefined) {
- log.verbose(logprefix, 'Found exports file: %s', node_exp_file)
- } else {
- var msg = msgFormat('Could not find node.%s file in %s', ext, node_root_dir)
- log.error(logprefix, 'Could not find exports file')
- return callback(new Error(msg))
- }
- }
-
- // this logic ported from the old `gyp_addon` python file
- var gyp_script = path.resolve(__dirname, '..', 'gyp', 'gyp_main.py')
- var addon_gypi = path.resolve(__dirname, '..', 'addon.gypi')
- var common_gypi = path.resolve(nodeDir, 'include/node/common.gypi')
- fs.stat(common_gypi, function (err, stat) {
- if (err)
- common_gypi = path.resolve(nodeDir, 'common.gypi')
-
- var output_dir = 'build'
- if (win) {
- // Windows expects an absolute path
- output_dir = buildDir
- }
- var nodeGypDir = path.resolve(__dirname, '..')
- var nodeLibFile = path.join(nodeDir,
- !gyp.opts.nodedir ? '<(target_arch)' : '$(Configuration)',
- release.name + '.lib')
-
- argv.push('-I', addon_gypi)
- argv.push('-I', common_gypi)
- argv.push('-Dlibrary=shared_library')
- argv.push('-Dvisibility=default')
- argv.push('-Dnode_root_dir=' + nodeDir)
- if (process.platform === 'aix' || process.platform === 'os390') {
- argv.push('-Dnode_exp_file=' + node_exp_file)
- }
- argv.push('-Dnode_gyp_dir=' + nodeGypDir)
- argv.push('-Dnode_lib_file=' + nodeLibFile)
- argv.push('-Dmodule_root_dir=' + process.cwd())
- argv.push('-Dnode_engine=' +
- (gyp.opts.node_engine || process.jsEngine || 'v8'))
- argv.push('--depth=.')
- argv.push('--no-parallel')
-
- // tell gyp to write the Makefile/Solution files into output_dir
- argv.push('--generator-output', output_dir)
-
- // tell make to write its output into the same dir
- argv.push('-Goutput_dir=.')
-
- // enforce use of the "binding.gyp" file
- argv.unshift('binding.gyp')
-
- // execute `gyp` from the current target nodedir
- argv.unshift(gyp_script)
-
- // make sure python uses files that came with this particular node package
- var pypath = [path.join(__dirname, '..', 'gyp', 'pylib')]
- if (process.env.PYTHONPATH) {
- pypath.push(process.env.PYTHONPATH)
- }
- process.env.PYTHONPATH = pypath.join(win ? ';' : ':')
-
- var cp = gyp.spawn(python, argv)
- cp.on('exit', onCpExit)
- })
- }
-
- /**
- * Called when the `gyp` child process exits.
- */
-
- function onCpExit (code, signal) {
- if (code !== 0) {
- callback(new Error('`gyp` failed with exit code: ' + code))
- } else {
- // we're done
- callback()
- }
- }
-
-}
-
-/**
- * Returns the first file or directory from an array of candidates that is
- * readable by the current user, or undefined if none of the candidates are
- * readable.
- */
-function findAccessibleSync (logprefix, dir, candidates) {
- for (var next = 0; next < candidates.length; next++) {
- var candidate = path.resolve(dir, candidates[next])
- try {
- var fd = fs.openSync(candidate, 'r')
- } catch (e) {
- // this candidate was not found or not readable, do nothing
- log.silly(logprefix, 'Could not open %s: %s', candidate, e.message)
- continue
- }
- fs.closeSync(fd)
- log.silly(logprefix, 'Found readable %s', candidate)
- return candidate
- }
-
- return undefined
-}
-
-function PythonFinder(python, callback) {
- this.callback = callback
- this.python = python
-}
-
-PythonFinder.prototype = {
- checkPythonLauncherDepth: 0,
- env: process.env,
- execFile: cp.execFile,
- log: log,
- resolve: path.win32 && path.win32.resolve || path.resolve,
- stat: fs.stat,
- which: which,
- win: win,
-
- checkPython: function checkPython () {
- this.log.verbose('check python',
- 'checking for Python executable "%s" in the PATH',
- this.python)
- this.which(this.python, function (err, execPath) {
- if (err) {
- this.log.verbose('`which` failed', this.python, err)
- if (this.python === 'python2') {
- this.python = 'python'
- return this.checkPython()
- }
- if (this.win) {
- this.checkPythonLauncher()
- } else {
- this.failNoPython()
- }
- } else {
- this.log.verbose('`which` succeeded', this.python, execPath)
- // Found the `python` executable, and from now on we use it explicitly.
- // This solves #667 and #750 (`execFile` won't run batch files
- // (*.cmd, and *.bat))
- this.python = execPath
- this.checkPythonVersion()
- }
- }.bind(this))
- },
-
- // Distributions of Python on Windows by default install with the "py.exe"
- // Python launcher which is more likely to exist than the Python executable
- // being in the $PATH.
- // Because the Python launcher supports all versions of Python, we have to
- // explicitly request a Python 2 version. This is done by supplying "-2" as
- // the first command line argument. Since "py.exe -2" would be an invalid
- // executable for "execFile", we have to use the launcher to figure out
- // where the actual "python.exe" executable is located.
- checkPythonLauncher: function checkPythonLauncher () {
- this.checkPythonLauncherDepth += 1
-
- this.log.verbose(
- 'could not find "' + this.python + '". checking python launcher')
- var env = extend({}, this.env)
- env.TERM = 'dumb'
-
- var launcherArgs = ['-2', '-c', 'import sys; print sys.executable']
- this.execFile('py.exe', launcherArgs, { env: env }, function (err, stdout) {
- if (err) {
- this.guessPython()
- } else {
- this.python = stdout.trim()
- this.log.verbose('check python launcher',
- 'python executable found: %j',
- this.python)
- this.checkPythonVersion()
- }
- this.checkPythonLauncherDepth -= 1
- }.bind(this))
- },
-
- checkPythonVersion: function checkPythonVersion () {
- var args = ['-c', 'import sys; print "%s.%s.%s" % sys.version_info[:3];']
- var env = extend({}, this.env)
- env.TERM = 'dumb'
-
- this.execFile(this.python, args, { env: env }, function (err, stdout) {
- if (err) {
- return this.callback(err)
- }
- this.log.verbose('check python version',
- '`%s -c "' + args[1] + '"` returned: %j',
- this.python, stdout)
- var version = stdout.trim()
- var range = semver.Range('>=2.5.0 <3.0.0')
- var valid = false
- try {
- valid = range.test(version)
- } catch (e) {
- this.log.silly('range.test() error', e)
- }
- if (valid) {
- this.callback(null, this.python)
- } else if (this.win && this.checkPythonLauncherDepth === 0) {
- this.checkPythonLauncher()
- } else {
- this.failPythonVersion(version)
- }
- }.bind(this))
- },
-
- failNoPython: function failNoPython () {
- var errmsg =
- 'Can\'t find Python executable "' + this.python +
- '", you can set the PYTHON env variable.'
- this.callback(new Error(errmsg))
- },
-
- failPythonVersion: function failPythonVersion (badVersion) {
- var errmsg =
- 'Python executable "' + this.python +
- '" is v' + badVersion + ', which is not supported by gyp.\n' +
- 'You can pass the --python switch to point to ' +
- 'Python >= v2.5.0 & < 3.0.0.'
- this.callback(new Error(errmsg))
- },
-
- // Called on Windows when "python" isn't available in the current $PATH.
- // We are going to check if "%SystemDrive%\python27\python.exe" exists.
- guessPython: function guessPython () {
- this.log.verbose('could not find "' + this.python + '". guessing location')
- var rootDir = this.env.SystemDrive || 'C:\\'
- if (rootDir[rootDir.length - 1] !== '\\') {
- rootDir += '\\'
- }
- var pythonPath = this.resolve(rootDir, 'Python27', 'python.exe')
- this.log.verbose('ensuring that file exists:', pythonPath)
- this.stat(pythonPath, function (err, stat) {
- if (err) {
- if (err.code == 'ENOENT') {
- this.failNoPython()
- } else {
- this.callback(err)
- }
- return
- }
- this.python = pythonPath
- this.checkPythonVersion()
- }.bind(this))
- },
-}
-
-function findPython (python, callback) {
- var finder = new PythonFinder(python, callback)
- finder.checkPython()
-}
diff --git a/node_modules/node-gyp/lib/find-node-directory.js b/node_modules/node-gyp/lib/find-node-directory.js
deleted file mode 100644
index 3aee8a1..0000000
--- a/node_modules/node-gyp/lib/find-node-directory.js
+++ /dev/null
@@ -1,61 +0,0 @@
-var path = require('path')
- , log = require('npmlog')
-
-function findNodeDirectory(scriptLocation, processObj) {
- // set dirname and process if not passed in
- // this facilitates regression tests
- if (scriptLocation === undefined) {
- scriptLocation = __dirname
- }
- if (processObj === undefined) {
- processObj = process
- }
-
- // Have a look to see what is above us, to try and work out where we are
- npm_parent_directory = path.join(scriptLocation, '../../../..')
- log.verbose('node-gyp root', 'npm_parent_directory is '
- + path.basename(npm_parent_directory))
- node_root_dir = ""
-
- log.verbose('node-gyp root', 'Finding node root directory')
- if (path.basename(npm_parent_directory) === 'deps') {
- // We are in a build directory where this script lives in
- // deps/npm/node_modules/node-gyp/lib
- node_root_dir = path.join(npm_parent_directory, '..')
- log.verbose('node-gyp root', 'in build directory, root = '
- + node_root_dir)
- } else if (path.basename(npm_parent_directory) === 'node_modules') {
- // We are in a node install directory where this script lives in
- // lib/node_modules/npm/node_modules/node-gyp/lib or
- // node_modules/npm/node_modules/node-gyp/lib depending on the
- // platform
- if (processObj.platform === 'win32') {
- node_root_dir = path.join(npm_parent_directory, '..')
- } else {
- node_root_dir = path.join(npm_parent_directory, '../..')
- }
- log.verbose('node-gyp root', 'in install directory, root = '
- + node_root_dir)
- } else {
- // We don't know where we are, try working it out from the location
- // of the node binary
- var node_dir = path.dirname(processObj.execPath)
- var directory_up = path.basename(node_dir)
- if (directory_up === 'bin') {
- node_root_dir = path.join(node_dir, '..')
- } else if (directory_up === 'Release' || directory_up === 'Debug') {
- // If we are a recently built node, and the directory structure
- // is that of a repository. If we are on Windows then we only need
- // to go one level up, everything else, two
- if (processObj.platform === 'win32') {
- node_root_dir = path.join(node_dir, '..')
- } else {
- node_root_dir = path.join(node_dir, '../..')
- }
- }
- // Else return the default blank, "".
- }
- return node_root_dir
-}
-
-module.exports = findNodeDirectory
diff --git a/node_modules/node-gyp/lib/find-vs2017.js b/node_modules/node-gyp/lib/find-vs2017.js
deleted file mode 100644
index ad46cea..0000000
--- a/node_modules/node-gyp/lib/find-vs2017.js
+++ /dev/null
@@ -1,46 +0,0 @@
-var log = require('npmlog')
- , execFile = require('child_process').execFile
- , path = require('path')
-
-function findVS2017(callback) {
- var ps = path.join(process.env.SystemRoot, 'System32', 'WindowsPowerShell',
- 'v1.0', 'powershell.exe')
- var csFile = path.join(__dirname, 'Find-VS2017.cs')
- var psArgs = ['-ExecutionPolicy', 'Unrestricted', '-NoProfile',
- '-Command', '&{Add-Type -Path \'' + csFile + '\';' +
- '[VisualStudioConfiguration.Main]::Query()}']
-
- log.silly('find vs2017', 'Running', ps, psArgs)
- var child = execFile(ps, psArgs, { encoding: 'utf8' },
- function (err, stdout, stderr) {
- log.silly('find vs2017', 'PS err:', err)
- log.silly('find vs2017', 'PS stdout:', stdout)
- log.silly('find vs2017', 'PS stderr:', stderr)
-
- if (err)
- return callback(new Error('Could not use PowerShell to find VS2017'))
-
- var vsSetup
- try {
- vsSetup = JSON.parse(stdout)
- } catch (e) {
- log.silly('find vs2017', e)
- return callback(new Error('Could not use PowerShell to find VS2017'))
- }
- log.silly('find vs2017', 'vsSetup:', vsSetup)
-
- if (vsSetup && vsSetup.log)
- log.verbose('find vs2017', vsSetup.log.trimRight())
-
- if (!vsSetup || !vsSetup.path || !vsSetup.sdk) {
- return callback(new Error('No usable installation of VS2017 found'))
- }
-
- log.verbose('find vs2017', 'using installation:', vsSetup.path)
- callback(null, { "path": vsSetup.path, "sdk": vsSetup.sdk })
- })
-
- child.stdin.end()
-}
-
-module.exports = findVS2017
diff --git a/node_modules/node-gyp/lib/install.js b/node_modules/node-gyp/lib/install.js
deleted file mode 100644
index cb84972..0000000
--- a/node_modules/node-gyp/lib/install.js
+++ /dev/null
@@ -1,475 +0,0 @@
-module.exports = exports = function (gyp, argv, callback) {
- return install(fs, gyp, argv, callback)
-}
-
-module.exports.test = {
- download: download,
- install: install,
- readCAFile: readCAFile,
-}
-
-exports.usage = 'Install node development files for the specified node version.'
-
-/**
- * Module dependencies.
- */
-
-var fs = require('graceful-fs')
- , osenv = require('osenv')
- , tar = require('tar')
- , rm = require('rimraf')
- , path = require('path')
- , crypto = require('crypto')
- , zlib = require('zlib')
- , log = require('npmlog')
- , semver = require('semver')
- , fstream = require('fstream')
- , request = require('request')
- , mkdir = require('mkdirp')
- , processRelease = require('./process-release')
- , win = process.platform == 'win32'
-
-function install (fs, gyp, argv, callback) {
-
- var release = processRelease(argv, gyp, process.version, process.release)
-
- // ensure no double-callbacks happen
- function cb (err) {
- if (cb.done) return
- cb.done = true
- if (err) {
- log.warn('install', 'got an error, rolling back install')
- // roll-back the install if anything went wrong
- gyp.commands.remove([ release.versionDir ], function (err2) {
- callback(err)
- })
- } else {
- callback(null, release.version)
- }
- }
-
- // Determine which node dev files version we are installing
- log.verbose('install', 'input version string %j', release.version)
-
- if (!release.semver) {
- // could not parse the version string with semver
- return callback(new Error('Invalid version number: ' + release.version))
- }
-
- if (semver.lt(release.version, '0.8.0')) {
- return callback(new Error('Minimum target version is `0.8.0` or greater. Got: ' + release.version))
- }
-
- // 0.x.y-pre versions are not published yet and cannot be installed. Bail.
- if (release.semver.prerelease[0] === 'pre') {
- log.verbose('detected "pre" node version', release.version)
- if (gyp.opts.nodedir) {
- log.verbose('--nodedir flag was passed; skipping install', gyp.opts.nodedir)
- callback()
- } else {
- callback(new Error('"pre" versions of node cannot be installed, use the --nodedir flag instead'))
- }
- return
- }
-
- // flatten version into String
- log.verbose('install', 'installing version: %s', release.versionDir)
-
- // the directory where the dev files will be installed
- var devDir = path.resolve(gyp.devDir, release.versionDir)
-
- // If '--ensure' was passed, then don't *always* install the version;
- // check if it is already installed, and only install when needed
- if (gyp.opts.ensure) {
- log.verbose('install', '--ensure was passed, so won\'t reinstall if already installed')
- fs.stat(devDir, function (err, stat) {
- if (err) {
- if (err.code == 'ENOENT') {
- log.verbose('install', 'version not already installed, continuing with install', release.version)
- go()
- } else if (err.code == 'EACCES') {
- eaccesFallback(err)
- } else {
- cb(err)
- }
- return
- }
- log.verbose('install', 'version is already installed, need to check "installVersion"')
- var installVersionFile = path.resolve(devDir, 'installVersion')
- fs.readFile(installVersionFile, 'ascii', function (err, ver) {
- if (err && err.code != 'ENOENT') {
- return cb(err)
- }
- var installVersion = parseInt(ver, 10) || 0
- log.verbose('got "installVersion"', installVersion)
- log.verbose('needs "installVersion"', gyp.package.installVersion)
- if (installVersion < gyp.package.installVersion) {
- log.verbose('install', 'version is no good; reinstalling')
- go()
- } else {
- log.verbose('install', 'version is good')
- cb()
- }
- })
- })
- } else {
- go()
- }
-
- function getContentSha(res, callback) {
- var shasum = crypto.createHash('sha256')
- res.on('data', function (chunk) {
- shasum.update(chunk)
- }).on('end', function () {
- callback(null, shasum.digest('hex'))
- })
- }
-
- function go () {
-
- log.verbose('ensuring nodedir is created', devDir)
-
- // first create the dir for the node dev files
- mkdir(devDir, function (err, created) {
- if (err) {
- if (err.code == 'EACCES') {
- eaccesFallback(err)
- } else {
- cb(err)
- }
- return
- }
-
- if (created) {
- log.verbose('created nodedir', created)
- }
-
- // now download the node tarball
- var tarPath = gyp.opts.tarball
- var badDownload = false
- , extractCount = 0
- , gunzip = zlib.createGunzip()
- , extracter = tar.Extract({ path: devDir, strip: 1, filter: isValid })
-
- var contentShasums = {}
- var expectShasums = {}
-
- // checks if a file to be extracted from the tarball is valid.
- // only .h header files and the gyp files get extracted
- function isValid () {
- var name = this.path.substring(devDir.length + 1)
- var isValid = valid(name)
- if (name === '' && this.type === 'Directory') {
- // the first directory entry is ok
- return true
- }
- if (isValid) {
- log.verbose('extracted file from tarball', name)
- extractCount++
- } else {
- // invalid
- log.silly('ignoring from tarball', name)
- }
- return isValid
- }
-
- gunzip.on('error', cb)
- extracter.on('error', cb)
- extracter.on('end', afterTarball)
-
- // download the tarball, gunzip and extract!
-
- if (tarPath) {
- var input = fs.createReadStream(tarPath)
- input.pipe(gunzip).pipe(extracter)
- return
- }
-
- try {
- var req = download(gyp, process.env, release.tarballUrl)
- } catch (e) {
- return cb(e)
- }
-
- // something went wrong downloading the tarball?
- req.on('error', function (err) {
- if (err.code === 'ENOTFOUND') {
- return cb(new Error('This is most likely not a problem with node-gyp or the package itself and\n' +
- 'is related to network connectivity. In most cases you are behind a proxy or have bad \n' +
- 'network settings.'))
- }
- badDownload = true
- cb(err)
- })
-
- req.on('close', function () {
- if (extractCount === 0) {
- cb(new Error('Connection closed while downloading tarball file'))
- }
- })
-
- req.on('response', function (res) {
- if (res.statusCode !== 200) {
- badDownload = true
- cb(new Error(res.statusCode + ' response downloading ' + release.tarballUrl))
- return
- }
- // content checksum
- getContentSha(res, function (_, checksum) {
- var filename = path.basename(release.tarballUrl).trim()
- contentShasums[filename] = checksum
- log.verbose('content checksum', filename, checksum)
- })
-
- // start unzipping and untaring
- req.pipe(gunzip).pipe(extracter)
- })
-
- // invoked after the tarball has finished being extracted
- function afterTarball () {
- if (badDownload) return
- if (extractCount === 0) {
- return cb(new Error('There was a fatal problem while downloading/extracting the tarball'))
- }
- log.verbose('tarball', 'done parsing tarball')
- var async = 0
-
- if (win) {
- // need to download node.lib
- async++
- downloadNodeLib(deref)
- }
-
- // write the "installVersion" file
- async++
- var installVersionPath = path.resolve(devDir, 'installVersion')
- fs.writeFile(installVersionPath, gyp.package.installVersion + '\n', deref)
-
- // Only download SHASUMS.txt if not using tarPath override
- if (!tarPath) {
- // download SHASUMS.txt
- async++
- downloadShasums(deref)
- }
-
- if (async === 0) {
- // no async tasks required
- cb()
- }
-
- function deref (err) {
- if (err) return cb(err)
-
- async--
- if (!async) {
- log.verbose('download contents checksum', JSON.stringify(contentShasums))
- // check content shasums
- for (var k in contentShasums) {
- log.verbose('validating download checksum for ' + k, '(%s == %s)', contentShasums[k], expectShasums[k])
- if (contentShasums[k] !== expectShasums[k]) {
- cb(new Error(k + ' local checksum ' + contentShasums[k] + ' not match remote ' + expectShasums[k]))
- return
- }
- }
- cb()
- }
- }
- }
-
- function downloadShasums(done) {
- log.verbose('check download content checksum, need to download `SHASUMS256.txt`...')
- var shasumsPath = path.resolve(devDir, 'SHASUMS256.txt')
-
- log.verbose('checksum url', release.shasumsUrl)
- try {
- var req = download(gyp, process.env, release.shasumsUrl)
- } catch (e) {
- return cb(e)
- }
-
- req.on('error', done)
- req.on('response', function (res) {
- if (res.statusCode !== 200) {
- done(new Error(res.statusCode + ' status code downloading checksum'))
- return
- }
-
- var chunks = []
- res.on('data', function (chunk) {
- chunks.push(chunk)
- })
- res.on('end', function () {
- var lines = Buffer.concat(chunks).toString().trim().split('\n')
- lines.forEach(function (line) {
- var items = line.trim().split(/\s+/)
- if (items.length !== 2) return
-
- // 0035d18e2dcf9aad669b1c7c07319e17abfe3762 ./node-v0.11.4.tar.gz
- var name = items[1].replace(/^\.\//, '')
- expectShasums[name] = items[0]
- })
-
- log.verbose('checksum data', JSON.stringify(expectShasums))
- done()
- })
- })
- }
-
- function downloadNodeLib (done) {
- log.verbose('on Windows; need to download `' + release.name + '.lib`...')
- var dir32 = path.resolve(devDir, 'ia32')
- , dir64 = path.resolve(devDir, 'x64')
- , libPath32 = path.resolve(dir32, release.name + '.lib')
- , libPath64 = path.resolve(dir64, release.name + '.lib')
-
- log.verbose('32-bit ' + release.name + '.lib dir', dir32)
- log.verbose('64-bit ' + release.name + '.lib dir', dir64)
- log.verbose('`' + release.name + '.lib` 32-bit url', release.libUrl32)
- log.verbose('`' + release.name + '.lib` 64-bit url', release.libUrl64)
-
- var async = 2
- mkdir(dir32, function (err) {
- if (err) return done(err)
- log.verbose('streaming 32-bit ' + release.name + '.lib to:', libPath32)
-
- try {
- var req = download(gyp, process.env, release.libUrl32, cb)
- } catch (e) {
- return cb(e)
- }
-
- req.on('error', done)
- req.on('response', function (res) {
- if (res.statusCode !== 200) {
- done(new Error(res.statusCode + ' status code downloading 32-bit ' + release.name + '.lib'))
- return
- }
-
- getContentSha(res, function (_, checksum) {
- contentShasums[release.libPath32] = checksum
- log.verbose('content checksum', release.libPath32, checksum)
- })
-
- var ws = fs.createWriteStream(libPath32)
- ws.on('error', cb)
- req.pipe(ws)
- })
- req.on('end', function () {
- --async || done()
- })
- })
- mkdir(dir64, function (err) {
- if (err) return done(err)
- log.verbose('streaming 64-bit ' + release.name + '.lib to:', libPath64)
-
- try {
- var req = download(gyp, process.env, release.libUrl64, cb)
- } catch (e) {
- return cb(e)
- }
-
- req.on('error', done)
- req.on('response', function (res) {
- if (res.statusCode !== 200) {
- done(new Error(res.statusCode + ' status code downloading 64-bit ' + release.name + '.lib'))
- return
- }
-
- getContentSha(res, function (_, checksum) {
- contentShasums[release.libPath64] = checksum
- log.verbose('content checksum', release.libPath64, checksum)
- })
-
- var ws = fs.createWriteStream(libPath64)
- ws.on('error', cb)
- req.pipe(ws)
- })
- req.on('end', function () {
- --async || done()
- })
- })
- } // downloadNodeLib()
-
- }) // mkdir()
-
- } // go()
-
- /**
- * Checks if a given filename is "valid" for this installation.
- */
-
- function valid (file) {
- // header files
- var extname = path.extname(file);
- return extname === '.h' || extname === '.gypi';
- }
-
- /**
- * The EACCES fallback is a workaround for npm's `sudo` behavior, where
- * it drops the permissions before invoking any child processes (like
- * node-gyp). So what happens is the "nobody" user doesn't have
- * permission to create the dev dir. As a fallback, make the tmpdir() be
- * the dev dir for this installation. This is not ideal, but at least
- * the compilation will succeed...
- */
-
- function eaccesFallback (err) {
- var noretry = '--node_gyp_internal_noretry'
- if (-1 !== argv.indexOf(noretry)) return cb(err)
- var tmpdir = osenv.tmpdir()
- gyp.devDir = path.resolve(tmpdir, '.node-gyp')
- log.warn('EACCES', 'user "%s" does not have permission to access the dev dir "%s"', osenv.user(), devDir)
- log.warn('EACCES', 'attempting to reinstall using temporary dev dir "%s"', gyp.devDir)
- if (process.cwd() == tmpdir) {
- log.verbose('tmpdir == cwd', 'automatically will remove dev files after to save disk space')
- gyp.todo.push({ name: 'remove', args: argv })
- }
- gyp.commands.install([noretry].concat(argv), cb)
- }
-
-}
-
-function download (gyp, env, url) {
- log.http('GET', url)
-
- var requestOpts = {
- uri: url
- , headers: {
- 'User-Agent': 'node-gyp v' + gyp.version + ' (node ' + process.version + ')'
- }
- }
-
- var cafile = gyp.opts.cafile
- if (cafile) {
- requestOpts.ca = readCAFile(cafile)
- }
-
- // basic support for a proxy server
- var proxyUrl = gyp.opts.proxy
- || env.http_proxy
- || env.HTTP_PROXY
- || env.npm_config_proxy
- if (proxyUrl) {
- if (/^https?:\/\//i.test(proxyUrl)) {
- log.verbose('download', 'using proxy url: "%s"', proxyUrl)
- requestOpts.proxy = proxyUrl
- } else {
- log.warn('download', 'ignoring invalid "proxy" config setting: "%s"', proxyUrl)
- }
- }
-
- var req = request(requestOpts)
- req.on('response', function (res) {
- log.http(res.statusCode, url)
- })
-
- return req
-}
-
-function readCAFile (filename) {
- // The CA file can contain multiple certificates so split on certificate
- // boundaries. [\S\s]*? is used to match everything including newlines.
- var ca = fs.readFileSync(filename, 'utf8')
- var re = /(-----BEGIN CERTIFICATE-----[\S\s]*?-----END CERTIFICATE-----)/g
- return ca.match(re)
-}
diff --git a/node_modules/node-gyp/lib/list.js b/node_modules/node-gyp/lib/list.js
deleted file mode 100644
index 9d680a5..0000000
--- a/node_modules/node-gyp/lib/list.js
+++ /dev/null
@@ -1,33 +0,0 @@
-
-module.exports = exports = list
-
-exports.usage = 'Prints a listing of the currently installed node development files'
-
-/**
- * Module dependencies.
- */
-
-var fs = require('graceful-fs')
- , path = require('path')
- , log = require('npmlog')
-
-function list (gyp, args, callback) {
-
- var devDir = gyp.devDir
- log.verbose('list', 'using node-gyp dir:', devDir)
-
- // readdir() the node-gyp dir
- fs.readdir(devDir, onreaddir)
-
- function onreaddir (err, versions) {
- if (err && err.code != 'ENOENT') {
- return callback(err)
- }
- if (Array.isArray(versions)) {
- versions = versions.filter(function (v) { return v != 'current' })
- } else {
- versions = []
- }
- callback(null, versions)
- }
-}
diff --git a/node_modules/node-gyp/lib/node-gyp.js b/node_modules/node-gyp/lib/node-gyp.js
deleted file mode 100644
index a841161..0000000
--- a/node_modules/node-gyp/lib/node-gyp.js
+++ /dev/null
@@ -1,216 +0,0 @@
-
-/**
- * Module exports.
- */
-
-module.exports = exports = gyp
-
-/**
- * Module dependencies.
- */
-
-var fs = require('graceful-fs')
- , path = require('path')
- , nopt = require('nopt')
- , log = require('npmlog')
- , child_process = require('child_process')
- , EE = require('events').EventEmitter
- , inherits = require('util').inherits
- , commands = [
- // Module build commands
- 'build'
- , 'clean'
- , 'configure'
- , 'rebuild'
- // Development Header File management commands
- , 'install'
- , 'list'
- , 'remove'
- ]
- , aliases = {
- 'ls': 'list'
- , 'rm': 'remove'
- }
-
-// differentiate node-gyp's logs from npm's
-log.heading = 'gyp'
-
-/**
- * The `gyp` function.
- */
-
-function gyp () {
- return new Gyp()
-}
-
-function Gyp () {
- var self = this
-
- this.devDir = ''
- this.commands = {}
-
- commands.forEach(function (command) {
- self.commands[command] = function (argv, callback) {
- log.verbose('command', command, argv)
- return require('./' + command)(self, argv, callback)
- }
- })
-}
-inherits(Gyp, EE)
-exports.Gyp = Gyp
-var proto = Gyp.prototype
-
-/**
- * Export the contents of the package.json.
- */
-
-proto.package = require('../package')
-
-/**
- * nopt configuration definitions
- */
-
-proto.configDefs = {
- help: Boolean // everywhere
- , arch: String // 'configure'
- , cafile: String // 'install'
- , debug: Boolean // 'build'
- , directory: String // bin
- , make: String // 'build'
- , msvs_version: String // 'configure'
- , ensure: Boolean // 'install'
- , solution: String // 'build' (windows only)
- , proxy: String // 'install'
- , devdir: String // everywhere
- , nodedir: String // 'configure'
- , loglevel: String // everywhere
- , python: String // 'configure'
- , 'dist-url': String // 'install'
- , 'tarball': String // 'install'
- , jobs: String // 'build'
- , thin: String // 'configure'
-}
-
-/**
- * nopt shorthands
- */
-
-proto.shorthands = {
- release: '--no-debug'
- , C: '--directory'
- , debug: '--debug'
- , j: '--jobs'
- , silly: '--loglevel=silly'
- , verbose: '--loglevel=verbose'
- , silent: '--loglevel=silent'
-}
-
-/**
- * expose the command aliases for the bin file to use.
- */
-
-proto.aliases = aliases
-
-/**
- * Parses the given argv array and sets the 'opts',
- * 'argv' and 'command' properties.
- */
-
-proto.parseArgv = function parseOpts (argv) {
- this.opts = nopt(this.configDefs, this.shorthands, argv)
- this.argv = this.opts.argv.remain.slice()
-
- var commands = this.todo = []
-
- // create a copy of the argv array with aliases mapped
- argv = this.argv.map(function (arg) {
- // is this an alias?
- if (arg in this.aliases) {
- arg = this.aliases[arg]
- }
- return arg
- }, this)
-
- // process the mapped args into "command" objects ("name" and "args" props)
- argv.slice().forEach(function (arg) {
- if (arg in this.commands) {
- var args = argv.splice(0, argv.indexOf(arg))
- argv.shift()
- if (commands.length > 0) {
- commands[commands.length - 1].args = args
- }
- commands.push({ name: arg, args: [] })
- }
- }, this)
- if (commands.length > 0) {
- commands[commands.length - 1].args = argv.splice(0)
- }
-
- // support for inheriting config env variables from npm
- var npm_config_prefix = 'npm_config_'
- Object.keys(process.env).forEach(function (name) {
- if (name.indexOf(npm_config_prefix) !== 0) return
- var val = process.env[name]
- if (name === npm_config_prefix + 'loglevel') {
- log.level = val
- } else {
- // add the user-defined options to the config
- name = name.substring(npm_config_prefix.length)
- // gyp@741b7f1 enters an infinite loop when it encounters
- // zero-length options so ensure those don't get through.
- if (name) this.opts[name] = val
- }
- }, this)
-
- if (this.opts.loglevel) {
- log.level = this.opts.loglevel
- }
- log.resume()
-}
-
-/**
- * Spawns a child process and emits a 'spawn' event.
- */
-
-proto.spawn = function spawn (command, args, opts) {
- if (!opts) opts = {}
- if (!opts.silent && !opts.stdio) {
- opts.stdio = [ 0, 1, 2 ]
- }
- var cp = child_process.spawn(command, args, opts)
- log.info('spawn', command)
- log.info('spawn args', args)
- return cp
-}
-
-/**
- * Returns the usage instructions for node-gyp.
- */
-
-proto.usage = function usage () {
- var str = [
- ''
- , ' Usage: node-gyp <command> [options]'
- , ''
- , ' where <command> is one of:'
- , commands.map(function (c) {
- return ' - ' + c + ' - ' + require('./' + c).usage
- }).join('\n')
- , ''
- , 'node-gyp@' + this.version + ' ' + path.resolve(__dirname, '..')
- , 'node@' + process.versions.node
- ].join('\n')
- return str
-}
-
-/**
- * Version number getter.
- */
-
-Object.defineProperty(proto, 'version', {
- get: function () {
- return this.package.version
- }
- , enumerable: true
-})
-
diff --git a/node_modules/node-gyp/lib/process-release.js b/node_modules/node-gyp/lib/process-release.js
deleted file mode 100644
index 0d177f1..0000000
--- a/node_modules/node-gyp/lib/process-release.js
+++ /dev/null
@@ -1,155 +0,0 @@
-var semver = require('semver')
- , url = require('url')
- , path = require('path')
- , log = require('npmlog')
-
- // versions where -headers.tar.gz started shipping
- , headersTarballRange = '>= 3.0.0 || ~0.12.10 || ~0.10.42'
- , bitsre = /\/win-(x86|x64)\//
- , bitsreV3 = /\/win-(x86|ia32|x64)\// // io.js v3.x.x shipped with "ia32" but should
- // have been "x86"
-
-// Captures all the logic required to determine download URLs, local directory and
-// file names. Inputs come from command-line switches (--target, --dist-url),
-// `process.version` and `process.release` where it exists.
-function processRelease (argv, gyp, defaultVersion, defaultRelease) {
- var version = (semver.valid(argv[0]) && argv[0]) || gyp.opts.target || defaultVersion
- , versionSemver = semver.parse(version)
- , overrideDistUrl = gyp.opts['dist-url'] || gyp.opts.disturl
- , isDefaultVersion
- , isIojs
- , name
- , distBaseUrl
- , baseUrl
- , libUrl32
- , libUrl64
- , tarballUrl
- , canGetHeaders
-
- if (!versionSemver) {
- // not a valid semver string, nothing we can do
- return { version: version }
- }
- // flatten version into String
- version = versionSemver.version
-
- // defaultVersion should come from process.version so ought to be valid semver
- isDefaultVersion = version === semver.parse(defaultVersion).version
-
- // can't use process.release if we're using --target=x.y.z
- if (!isDefaultVersion)
- defaultRelease = null
-
- if (defaultRelease) {
- // v3 onward, has process.release
- name = defaultRelease.name.replace(/io\.js/, 'iojs') // remove the '.' for directory naming purposes
- isIojs = name === 'iojs'
- } else {
- // old node or alternative --target=
- // semver.satisfies() doesn't like prerelease tags so test major directly
- isIojs = versionSemver.major >= 1 && versionSemver.major < 4
- name = isIojs ? 'iojs' : 'node'
- }
-
- // check for the nvm.sh standard mirror env variables
- if (!overrideDistUrl) {
- if (isIojs) {
- if (process.env.IOJS_ORG_MIRROR) {
- overrideDistUrl = process.env.IOJS_ORG_MIRROR
- } else if (process.env.NVM_IOJS_ORG_MIRROR) {// remove on next semver-major
- overrideDistUrl = process.env.NVM_IOJS_ORG_MIRROR
- log.warn('download',
- 'NVM_IOJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, ' +
- 'please use IOJS_ORG_MIRROR')
- }
- } else {
- if (process.env.NODEJS_ORG_MIRROR) {
- overrideDistUrl = process.env.NODEJS_ORG_MIRROR
- } else if (process.env.NVM_NODEJS_ORG_MIRROR) {// remove on next semver-major
- overrideDistUrl = process.env.NVM_NODEJS_ORG_MIRROR
- log.warn('download',
- 'NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, ' +
- 'please use NODEJS_ORG_MIRROR')
- }
- }
- }
-
- if (overrideDistUrl)
- log.verbose('download', 'using dist-url', overrideDistUrl)
-
- if (overrideDistUrl)
- distBaseUrl = overrideDistUrl.replace(/\/+$/, '')
- else
- distBaseUrl = isIojs ? 'https://iojs.org/download/release' : 'https://nodejs.org/dist'
- distBaseUrl += '/v' + version + '/'
-
- // new style, based on process.release so we have a lot of the data we need
- if (defaultRelease && defaultRelease.headersUrl && !overrideDistUrl) {
- baseUrl = url.resolve(defaultRelease.headersUrl, './')
- libUrl32 = resolveLibUrl(name, defaultRelease.libUrl || baseUrl || distBaseUrl, 'x86', versionSemver.major)
- libUrl64 = resolveLibUrl(name, defaultRelease.libUrl || baseUrl || distBaseUrl, 'x64', versionSemver.major)
-
- return {
- version: version,
- semver: versionSemver,
- name: name,
- baseUrl: baseUrl,
- tarballUrl: defaultRelease.headersUrl,
- shasumsUrl: url.resolve(baseUrl, 'SHASUMS256.txt'),
- versionDir: (name !== 'node' ? name + '-' : '') + version,
- libUrl32: libUrl32,
- libUrl64: libUrl64,
- libPath32: normalizePath(path.relative(url.parse(baseUrl).path, url.parse(libUrl32).path)),
- libPath64: normalizePath(path.relative(url.parse(baseUrl).path, url.parse(libUrl64).path))
- }
- }
-
- // older versions without process.release are captured here and we have to make
- // a lot of assumptions, additionally if you --target=x.y.z then we can't use the
- // current process.release
-
- baseUrl = distBaseUrl
- libUrl32 = resolveLibUrl(name, baseUrl, 'x86', versionSemver.major)
- libUrl64 = resolveLibUrl(name, baseUrl, 'x64', versionSemver.major)
- // making the bold assumption that anything with a version number >3.0.0 will
- // have a *-headers.tar.gz file in its dist location, even some frankenstein
- // custom version
- canGetHeaders = semver.satisfies(versionSemver, headersTarballRange)
- tarballUrl = url.resolve(baseUrl, name + '-v' + version + (canGetHeaders ? '-headers' : '') + '.tar.gz')
-
- return {
- version: version,
- semver: versionSemver,
- name: name,
- baseUrl: baseUrl,
- tarballUrl: tarballUrl,
- shasumsUrl: url.resolve(baseUrl, 'SHASUMS256.txt'),
- versionDir: (name !== 'node' ? name + '-' : '') + version,
- libUrl32: libUrl32,
- libUrl64: libUrl64,
- libPath32: normalizePath(path.relative(url.parse(baseUrl).path, url.parse(libUrl32).path)),
- libPath64: normalizePath(path.relative(url.parse(baseUrl).path, url.parse(libUrl64).path))
- }
-}
-
-function normalizePath (p) {
- return path.normalize(p).replace(/\\/g, '/')
-}
-
-function resolveLibUrl (name, defaultUrl, arch, versionMajor) {
- var base = url.resolve(defaultUrl, './')
- , hasLibUrl = bitsre.test(defaultUrl) || (versionMajor === 3 && bitsreV3.test(defaultUrl))
-
- if (!hasLibUrl) {
- // let's assume it's a baseUrl then
- if (versionMajor >= 1)
- return url.resolve(base, 'win-' + arch +'/' + name + '.lib')
- // prior to io.js@1.0.0 32-bit node.lib lives in /, 64-bit lives in /x64/
- return url.resolve(base, (arch === 'x64' ? 'x64/' : '') + name + '.lib')
- }
-
- // else we have a proper url to a .lib, just make sure it's the right arch
- return defaultUrl.replace(versionMajor === 3 ? bitsreV3 : bitsre, '/win-' + arch + '/')
-}
-
-module.exports = processRelease
diff --git a/node_modules/node-gyp/lib/rebuild.js b/node_modules/node-gyp/lib/rebuild.js
deleted file mode 100644
index 4c6f472..0000000
--- a/node_modules/node-gyp/lib/rebuild.js
+++ /dev/null
@@ -1,14 +0,0 @@
-
-module.exports = exports = rebuild
-
-exports.usage = 'Runs "clean", "configure" and "build" all at once'
-
-function rebuild (gyp, argv, callback) {
-
- gyp.todo.push(
- { name: 'clean', args: [] }
- , { name: 'configure', args: argv }
- , { name: 'build', args: [] }
- )
- process.nextTick(callback)
-}
diff --git a/node_modules/node-gyp/lib/remove.js b/node_modules/node-gyp/lib/remove.js
deleted file mode 100644
index eb80981..0000000
--- a/node_modules/node-gyp/lib/remove.js
+++ /dev/null
@@ -1,52 +0,0 @@
-
-module.exports = exports = remove
-
-exports.usage = 'Removes the node development files for the specified version'
-
-/**
- * Module dependencies.
- */
-
-var fs = require('fs')
- , rm = require('rimraf')
- , path = require('path')
- , log = require('npmlog')
- , semver = require('semver')
-
-function remove (gyp, argv, callback) {
-
- var devDir = gyp.devDir
- log.verbose('remove', 'using node-gyp dir:', devDir)
-
- // get the user-specified version to remove
- var version = argv[0] || gyp.opts.target
- log.verbose('remove', 'removing target version:', version)
-
- if (!version) {
- return callback(new Error('You must specify a version number to remove. Ex: "' + process.version + '"'))
- }
-
- var versionSemver = semver.parse(version)
- if (versionSemver) {
- // flatten the version Array into a String
- version = versionSemver.version
- }
-
- var versionPath = path.resolve(gyp.devDir, version)
- log.verbose('remove', 'removing development files for version:', version)
-
- // first check if its even installed
- fs.stat(versionPath, function (err, stat) {
- if (err) {
- if (err.code == 'ENOENT') {
- callback(null, 'version was already uninstalled: ' + version)
- } else {
- callback(err)
- }
- return
- }
- // Go ahead and delete the dir
- rm(versionPath, callback)
- })
-
-}
diff --git a/node_modules/node-gyp/node_modules/.bin/rimraf b/node_modules/node-gyp/node_modules/.bin/rimraf
deleted file mode 120000
index 4cd49a4..0000000
--- a/node_modules/node-gyp/node_modules/.bin/rimraf
+++ /dev/null
@@ -1 +0,0 @@
-../rimraf/bin.js \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/.bin/semver b/node_modules/node-gyp/node_modules/.bin/semver
deleted file mode 120000
index 317eb29..0000000
--- a/node_modules/node-gyp/node_modules/.bin/semver
+++ /dev/null
@@ -1 +0,0 @@
-../semver/bin/semver \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/rimraf/LICENSE b/node_modules/node-gyp/node_modules/rimraf/LICENSE
deleted file mode 100644
index 19129e3..0000000
--- a/node_modules/node-gyp/node_modules/rimraf/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/node-gyp/node_modules/rimraf/README.md b/node_modules/node-gyp/node_modules/rimraf/README.md
deleted file mode 100644
index 423b8cf..0000000
--- a/node_modules/node-gyp/node_modules/rimraf/README.md
+++ /dev/null
@@ -1,101 +0,0 @@
-[![Build Status](https://travis-ci.org/isaacs/rimraf.svg?branch=master)](https://travis-ci.org/isaacs/rimraf) [![Dependency Status](https://david-dm.org/isaacs/rimraf.svg)](https://david-dm.org/isaacs/rimraf) [![devDependency Status](https://david-dm.org/isaacs/rimraf/dev-status.svg)](https://david-dm.org/isaacs/rimraf#info=devDependencies)
-
-The [UNIX command](http://en.wikipedia.org/wiki/Rm_(Unix)) `rm -rf` for node.
-
-Install with `npm install rimraf`, or just drop rimraf.js somewhere.
-
-## API
-
-`rimraf(f, [opts], callback)`
-
-The first parameter will be interpreted as a globbing pattern for files. If you
-want to disable globbing you can do so with `opts.disableGlob` (defaults to
-`false`). This might be handy, for instance, if you have filenames that contain
-globbing wildcard characters.
-
-The callback will be called with an error if there is one. Certain
-errors are handled for you:
-
-* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of
- `opts.maxBusyTries` times before giving up, adding 100ms of wait
- between each attempt. The default `maxBusyTries` is 3.
-* `ENOENT` - If the file doesn't exist, rimraf will return
- successfully, since your desired outcome is already the case.
-* `EMFILE` - Since `readdir` requires opening a file descriptor, it's
- possible to hit `EMFILE` if too many file descriptors are in use.
- In the sync case, there's nothing to be done for this. But in the
- async case, rimraf will gradually back off with timeouts up to
- `opts.emfileWait` ms, which defaults to 1000.
-
-## options
-
-* unlink, chmod, stat, lstat, rmdir, readdir,
- unlinkSync, chmodSync, statSync, lstatSync, rmdirSync, readdirSync
-
- In order to use a custom file system library, you can override
- specific fs functions on the options object.
-
- If any of these functions are present on the options object, then
- the supplied function will be used instead of the default fs
- method.
-
- Sync methods are only relevant for `rimraf.sync()`, of course.
-
- For example:
-
- ```javascript
- var myCustomFS = require('some-custom-fs')
-
- rimraf('some-thing', myCustomFS, callback)
- ```
-
-* maxBusyTries
-
- If an `EBUSY`, `ENOTEMPTY`, or `EPERM` error code is encountered
- on Windows systems, then rimraf will retry with a linear backoff
- wait of 100ms longer on each try. The default maxBusyTries is 3.
-
- Only relevant for async usage.
-
-* emfileWait
-
- If an `EMFILE` error is encountered, then rimraf will retry
- repeatedly with a linear backoff of 1ms longer on each try, until
- the timeout counter hits this max. The default limit is 1000.
-
- If you repeatedly encounter `EMFILE` errors, then consider using
- [graceful-fs](http://npm.im/graceful-fs) in your program.
-
- Only relevant for async usage.
-
-* glob
-
- Set to `false` to disable [glob](http://npm.im/glob) pattern
- matching.
-
- Set to an object to pass options to the glob module. The default
- glob options are `{ nosort: true, silent: true }`.
-
- Glob version 6 is used in this module.
-
- Relevant for both sync and async usage.
-
-* disableGlob
-
- Set to any non-falsey value to disable globbing entirely.
- (Equivalent to setting `glob: false`.)
-
-## rimraf.sync
-
-It can remove stuff synchronously, too. But that's not so good. Use
-the async API. It's better.
-
-## CLI
-
-If installed with `npm install rimraf -g` it can be used as a global
-command `rimraf <path> [<path> ...]` which is useful for cross platform support.
-
-## mkdirp
-
-If you need to create a directory recursively, check out
-[mkdirp](https://github.com/substack/node-mkdirp).
diff --git a/node_modules/node-gyp/node_modules/rimraf/bin.js b/node_modules/node-gyp/node_modules/rimraf/bin.js
deleted file mode 100755
index 0d1e17b..0000000
--- a/node_modules/node-gyp/node_modules/rimraf/bin.js
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env node
-
-var rimraf = require('./')
-
-var help = false
-var dashdash = false
-var noglob = false
-var args = process.argv.slice(2).filter(function(arg) {
- if (dashdash)
- return !!arg
- else if (arg === '--')
- dashdash = true
- else if (arg === '--no-glob' || arg === '-G')
- noglob = true
- else if (arg === '--glob' || arg === '-g')
- noglob = false
- else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/))
- help = true
- else
- return !!arg
-})
-
-if (help || args.length === 0) {
- // If they didn't ask for help, then this is not a "success"
- var log = help ? console.log : console.error
- log('Usage: rimraf <path> [<path> ...]')
- log('')
- log(' Deletes all files and folders at "path" recursively.')
- log('')
- log('Options:')
- log('')
- log(' -h, --help Display this usage info')
- log(' -G, --no-glob Do not expand glob patterns in arguments')
- log(' -g, --glob Expand glob patterns in arguments (default)')
- process.exit(help ? 0 : 1)
-} else
- go(0)
-
-function go (n) {
- if (n >= args.length)
- return
- var options = {}
- if (noglob)
- options = { glob: false }
- rimraf(args[n], options, function (er) {
- if (er)
- throw er
- go(n+1)
- })
-}
diff --git a/node_modules/node-gyp/node_modules/rimraf/package.json b/node_modules/node-gyp/node_modules/rimraf/package.json
deleted file mode 100644
index d265f95..0000000
--- a/node_modules/node-gyp/node_modules/rimraf/package.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
- "_from": "rimraf@2",
- "_id": "rimraf@2.7.1",
- "_inBundle": false,
- "_integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "_location": "/node-gyp/rimraf",
- "_phantomChildren": {},
- "_requested": {
- "type": "range",
- "registry": true,
- "raw": "rimraf@2",
- "name": "rimraf",
- "escapedName": "rimraf",
- "rawSpec": "2",
- "saveSpec": null,
- "fetchSpec": "2"
- },
- "_requiredBy": [
- "/node-gyp"
- ],
- "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "_shasum": "35797f13a7fdadc566142c29d4f07ccad483e3ec",
- "_spec": "rimraf@2",
- "_where": "/home/pruss/Dev/3-minute-website/node_modules/node-gyp",
- "author": {
- "name": "Isaac Z. Schlueter",
- "email": "i@izs.me",
- "url": "http://blog.izs.me/"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "bugs": {
- "url": "https://github.com/isaacs/rimraf/issues"
- },
- "bundleDependencies": false,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "deprecated": false,
- "description": "A deep deletion module for node (like `rm -rf`)",
- "devDependencies": {
- "mkdirp": "^0.5.1",
- "tap": "^12.1.1"
- },
- "files": [
- "LICENSE",
- "README.md",
- "bin.js",
- "rimraf.js"
- ],
- "homepage": "https://github.com/isaacs/rimraf#readme",
- "license": "ISC",
- "main": "rimraf.js",
- "name": "rimraf",
- "repository": {
- "type": "git",
- "url": "git://github.com/isaacs/rimraf.git"
- },
- "scripts": {
- "postpublish": "git push origin --all; git push origin --tags",
- "postversion": "npm publish",
- "preversion": "npm test",
- "test": "tap test/*.js"
- },
- "version": "2.7.1"
-}
diff --git a/node_modules/node-gyp/node_modules/rimraf/rimraf.js b/node_modules/node-gyp/node_modules/rimraf/rimraf.js
deleted file mode 100644
index a90ad02..0000000
--- a/node_modules/node-gyp/node_modules/rimraf/rimraf.js
+++ /dev/null
@@ -1,372 +0,0 @@
-module.exports = rimraf
-rimraf.sync = rimrafSync
-
-var assert = require("assert")
-var path = require("path")
-var fs = require("fs")
-var glob = undefined
-try {
- glob = require("glob")
-} catch (_err) {
- // treat glob as optional.
-}
-var _0666 = parseInt('666', 8)
-
-var defaultGlobOpts = {
- nosort: true,
- silent: true
-}
-
-// for EMFILE handling
-var timeout = 0
-
-var isWindows = (process.platform === "win32")
-
-function defaults (options) {
- var methods = [
- 'unlink',
- 'chmod',
- 'stat',
- 'lstat',
- 'rmdir',
- 'readdir'
- ]
- methods.forEach(function(m) {
- options[m] = options[m] || fs[m]
- m = m + 'Sync'
- options[m] = options[m] || fs[m]
- })
-
- options.maxBusyTries = options.maxBusyTries || 3
- options.emfileWait = options.emfileWait || 1000
- if (options.glob === false) {
- options.disableGlob = true
- }
- if (options.disableGlob !== true && glob === undefined) {
- throw Error('glob dependency not found, set `options.disableGlob = true` if intentional')
- }
- options.disableGlob = options.disableGlob || false
- options.glob = options.glob || defaultGlobOpts
-}
-
-function rimraf (p, options, cb) {
- if (typeof options === 'function') {
- cb = options
- options = {}
- }
-
- assert(p, 'rimraf: missing path')
- assert.equal(typeof p, 'string', 'rimraf: path should be a string')
- assert.equal(typeof cb, 'function', 'rimraf: callback function required')
- assert(options, 'rimraf: invalid options argument provided')
- assert.equal(typeof options, 'object', 'rimraf: options should be object')
-
- defaults(options)
-
- var busyTries = 0
- var errState = null
- var n = 0
-
- if (options.disableGlob || !glob.hasMagic(p))
- return afterGlob(null, [p])
-
- options.lstat(p, function (er, stat) {
- if (!er)
- return afterGlob(null, [p])
-
- glob(p, options.glob, afterGlob)
- })
-
- function next (er) {
- errState = errState || er
- if (--n === 0)
- cb(errState)
- }
-
- function afterGlob (er, results) {
- if (er)
- return cb(er)
-
- n = results.length
- if (n === 0)
- return cb()
-
- results.forEach(function (p) {
- rimraf_(p, options, function CB (er) {
- if (er) {
- if ((er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") &&
- busyTries < options.maxBusyTries) {
- busyTries ++
- var time = busyTries * 100
- // try again, with the same exact callback as this one.
- return setTimeout(function () {
- rimraf_(p, options, CB)
- }, time)
- }
-
- // this one won't happen if graceful-fs is used.
- if (er.code === "EMFILE" && timeout < options.emfileWait) {
- return setTimeout(function () {
- rimraf_(p, options, CB)
- }, timeout ++)
- }
-
- // already gone
- if (er.code === "ENOENT") er = null
- }
-
- timeout = 0
- next(er)
- })
- })
- }
-}
-
-// Two possible strategies.
-// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
-// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
-//
-// Both result in an extra syscall when you guess wrong. However, there
-// are likely far more normal files in the world than directories. This
-// is based on the assumption that a the average number of files per
-// directory is >= 1.
-//
-// If anyone ever complains about this, then I guess the strategy could
-// be made configurable somehow. But until then, YAGNI.
-function rimraf_ (p, options, cb) {
- assert(p)
- assert(options)
- assert(typeof cb === 'function')
-
- // sunos lets the root user unlink directories, which is... weird.
- // so we have to lstat here and make sure it's not a dir.
- options.lstat(p, function (er, st) {
- if (er && er.code === "ENOENT")
- return cb(null)
-
- // Windows can EPERM on stat. Life is suffering.
- if (er && er.code === "EPERM" && isWindows)
- fixWinEPERM(p, options, er, cb)
-
- if (st && st.isDirectory())
- return rmdir(p, options, er, cb)
-
- options.unlink(p, function (er) {
- if (er) {
- if (er.code === "ENOENT")
- return cb(null)
- if (er.code === "EPERM")
- return (isWindows)
- ? fixWinEPERM(p, options, er, cb)
- : rmdir(p, options, er, cb)
- if (er.code === "EISDIR")
- return rmdir(p, options, er, cb)
- }
- return cb(er)
- })
- })
-}
-
-function fixWinEPERM (p, options, er, cb) {
- assert(p)
- assert(options)
- assert(typeof cb === 'function')
- if (er)
- assert(er instanceof Error)
-
- options.chmod(p, _0666, function (er2) {
- if (er2)
- cb(er2.code === "ENOENT" ? null : er)
- else
- options.stat(p, function(er3, stats) {
- if (er3)
- cb(er3.code === "ENOENT" ? null : er)
- else if (stats.isDirectory())
- rmdir(p, options, er, cb)
- else
- options.unlink(p, cb)
- })
- })
-}
-
-function fixWinEPERMSync (p, options, er) {
- assert(p)
- assert(options)
- if (er)
- assert(er instanceof Error)
-
- try {
- options.chmodSync(p, _0666)
- } catch (er2) {
- if (er2.code === "ENOENT")
- return
- else
- throw er
- }
-
- try {
- var stats = options.statSync(p)
- } catch (er3) {
- if (er3.code === "ENOENT")
- return
- else
- throw er
- }
-
- if (stats.isDirectory())
- rmdirSync(p, options, er)
- else
- options.unlinkSync(p)
-}
-
-function rmdir (p, options, originalEr, cb) {
- assert(p)
- assert(options)
- if (originalEr)
- assert(originalEr instanceof Error)
- assert(typeof cb === 'function')
-
- // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
- // if we guessed wrong, and it's not a directory, then
- // raise the original error.
- options.rmdir(p, function (er) {
- if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM"))
- rmkids(p, options, cb)
- else if (er && er.code === "ENOTDIR")
- cb(originalEr)
- else
- cb(er)
- })
-}
-
-function rmkids(p, options, cb) {
- assert(p)
- assert(options)
- assert(typeof cb === 'function')
-
- options.readdir(p, function (er, files) {
- if (er)
- return cb(er)
- var n = files.length
- if (n === 0)
- return options.rmdir(p, cb)
- var errState
- files.forEach(function (f) {
- rimraf(path.join(p, f), options, function (er) {
- if (errState)
- return
- if (er)
- return cb(errState = er)
- if (--n === 0)
- options.rmdir(p, cb)
- })
- })
- })
-}
-
-// this looks simpler, and is strictly *faster*, but will
-// tie up the JavaScript thread and fail on excessively
-// deep directory trees.
-function rimrafSync (p, options) {
- options = options || {}
- defaults(options)
-
- assert(p, 'rimraf: missing path')
- assert.equal(typeof p, 'string', 'rimraf: path should be a string')
- assert(options, 'rimraf: missing options')
- assert.equal(typeof options, 'object', 'rimraf: options should be object')
-
- var results
-
- if (options.disableGlob || !glob.hasMagic(p)) {
- results = [p]
- } else {
- try {
- options.lstatSync(p)
- results = [p]
- } catch (er) {
- results = glob.sync(p, options.glob)
- }
- }
-
- if (!results.length)
- return
-
- for (var i = 0; i < results.length; i++) {
- var p = results[i]
-
- try {
- var st = options.lstatSync(p)
- } catch (er) {
- if (er.code === "ENOENT")
- return
-
- // Windows can EPERM on stat. Life is suffering.
- if (er.code === "EPERM" && isWindows)
- fixWinEPERMSync(p, options, er)
- }
-
- try {
- // sunos lets the root user unlink directories, which is... weird.
- if (st && st.isDirectory())
- rmdirSync(p, options, null)
- else
- options.unlinkSync(p)
- } catch (er) {
- if (er.code === "ENOENT")
- return
- if (er.code === "EPERM")
- return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
- if (er.code !== "EISDIR")
- throw er
-
- rmdirSync(p, options, er)
- }
- }
-}
-
-function rmdirSync (p, options, originalEr) {
- assert(p)
- assert(options)
- if (originalEr)
- assert(originalEr instanceof Error)
-
- try {
- options.rmdirSync(p)
- } catch (er) {
- if (er.code === "ENOENT")
- return
- if (er.code === "ENOTDIR")
- throw originalEr
- if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")
- rmkidsSync(p, options)
- }
-}
-
-function rmkidsSync (p, options) {
- assert(p)
- assert(options)
- options.readdirSync(p).forEach(function (f) {
- rimrafSync(path.join(p, f), options)
- })
-
- // We only end up here once we got ENOTEMPTY at least once, and
- // at this point, we are guaranteed to have removed all the kids.
- // So, we know that it won't be ENOENT or ENOTDIR or anything else.
- // try really hard to delete stuff on windows, because it has a
- // PROFOUNDLY annoying habit of not closing handles promptly when
- // files are deleted, resulting in spurious ENOTEMPTY errors.
- var retries = isWindows ? 100 : 1
- var i = 0
- do {
- var threw = true
- try {
- var ret = options.rmdirSync(p, options)
- threw = false
- return ret
- } finally {
- if (++i < retries && threw)
- continue
- }
- } while (true)
-}
diff --git a/node_modules/node-gyp/node_modules/semver/LICENSE b/node_modules/node-gyp/node_modules/semver/LICENSE
deleted file mode 100644
index 19129e3..0000000
--- a/node_modules/node-gyp/node_modules/semver/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/node-gyp/node_modules/semver/README.md b/node_modules/node-gyp/node_modules/semver/README.md
deleted file mode 100644
index cbd9565..0000000
--- a/node_modules/node-gyp/node_modules/semver/README.md
+++ /dev/null
@@ -1,350 +0,0 @@
-semver(1) -- The semantic versioner for npm
-===========================================
-
-## Usage
-
- $ npm install semver
- $ node
- var semver = require('semver')
-
- semver.valid('1.2.3') // '1.2.3'
- semver.valid('a.b.c') // null
- 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
-
- SemVer 5.1.0
-
- A JavaScript implementation of the http://semver.org/ specification
- Copyright Isaac Z. Schlueter
-
- Usage: semver [options] <version> [<version> [...]]
- Prints valid versions sorted by SemVer precedence
-
- Options:
- -r --range <range>
- Print versions that match the specified range.
-
- -i --increment [<level>]
- Increment a version by the specified level. Level can
- be one of: major, minor, patch, premajor, preminor,
- prepatch, or prerelease. Default level is 'patch'.
- Only one version may be specified.
-
- --preid <identifier>
- Identifier to be used to prefix premajor, preminor,
- prepatch or prerelease version increments.
-
- -l --loose
- Interpret versions and ranges loosely
-
- Program exits successfully if any valid version satisfies
- all supplied ranges, and prints all satisfying versions.
-
- If no satisfying versions are found, then exits failure.
-
- Versions are printed in ascending order, so supplying
- multiple versions to the utility will just sort them.
-
-## Versions
-
-A "version" is described by the `v2.0.0` specification found at
-<http://semver.org/>.
-
-A leading `"="` or `"v"` character is stripped off and ignored.
-
-## Ranges
-
-A `version range` is a set of `comparators` which specify versions
-that satisfy the range.
-
-A `comparator` is composed of an `operator` and a `version`. The set
-of primitive `operators` is:
-
-* `<` Less than
-* `<=` Less than or equal to
-* `>` Greater than
-* `>=` Greater than or equal to
-* `=` Equal. If no operator is specified, then equality is assumed,
- so this operator is optional, but MAY be included.
-
-For example, the comparator `>=1.2.7` would match the versions
-`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6`
-or `1.1.0`.
-
-Comparators can be joined by whitespace to form a `comparator set`,
-which is satisfied by the **intersection** of all of the comparators
-it includes.
-
-A range is composed of one or more comparator sets, joined by `||`. A
-version matches a range if and only if every comparator in at least
-one of the `||`-separated comparator sets is satisfied by the version.
-
-For example, the range `>=1.2.7 <1.3.0` would match the versions
-`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`,
-or `1.1.0`.
-
-The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`,
-`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`.
-
-### Prerelease Tags
-
-If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then
-it will only be allowed to satisfy comparator sets if at least one
-comparator with the same `[major, minor, patch]` tuple also has a
-prerelease tag.
-
-For example, the range `>1.2.3-alpha.3` would be allowed to match the
-version `1.2.3-alpha.7`, but it would *not* be satisfied by
-`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater
-than" `1.2.3-alpha.3` according to the SemVer sort rules. The version
-range only accepts prerelease tags on the `1.2.3` version. The
-version `3.4.5` *would* satisfy the range, because it does not have a
-prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`.
-
-The purpose for this behavior is twofold. First, prerelease versions
-frequently are updated very quickly, and contain many breaking changes
-that are (by the author's design) not yet fit for public consumption.
-Therefore, by default, they are excluded from range matching
-semantics.
-
-Second, a user who has opted into using a prerelease version has
-clearly indicated the intent to use *that specific* set of
-alpha/beta/rc versions. By including a prerelease tag in the range,
-the user is indicating that they are aware of the risk. However, it
-is still not appropriate to assume that they have opted into taking a
-similar risk on the *next* set of prerelease versions.
-
-#### Prerelease Identifiers
-
-The method `.inc` takes an additional `identifier` string argument that
-will append the value of the string as a prerelease identifier:
-
-```javascript
-> semver.inc('1.2.3', 'prerelease', 'beta')
-'1.2.4-beta.0'
-```
-
-command-line example:
-
-```shell
-$ semver 1.2.3 -i prerelease --preid beta
-1.2.4-beta.0
-```
-
-Which then can be used to increment further:
-
-```shell
-$ semver 1.2.4-beta.0 -i prerelease
-1.2.4-beta.1
-```
-
-### Advanced Range Syntax
-
-Advanced range syntax desugars to primitive comparators in
-deterministic ways.
-
-Advanced ranges may be combined in the same way as primitive
-comparators using white space or `||`.
-
-#### Hyphen Ranges `X.Y.Z - A.B.C`
-
-Specifies an inclusive set.
-
-* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
-
-If a partial version is provided as the first version in the inclusive
-range, then the missing pieces are replaced with zeroes.
-
-* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4`
-
-If a partial version is provided as the second version in the
-inclusive range, then all versions that start with the supplied parts
-of the tuple are accepted, but nothing that would be greater than the
-provided tuple parts.
-
-* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0`
-* `1.2.3 - 2` := `>=1.2.3 <3.0.0`
-
-#### X-Ranges `1.2.x` `1.X` `1.2.*` `*`
-
-Any of `X`, `x`, or `*` may be used to "stand in" for one of the
-numeric values in the `[major, minor, patch]` tuple.
-
-* `*` := `>=0.0.0` (Any version satisfies)
-* `1.x` := `>=1.0.0 <2.0.0` (Matching major version)
-* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions)
-
-A partial version range is treated as an X-Range, so the special
-character is in fact optional.
-
-* `""` (empty string) := `*` := `>=0.0.0`
-* `1` := `1.x.x` := `>=1.0.0 <2.0.0`
-* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0`
-
-#### Tilde Ranges `~1.2.3` `~1.2` `~1`
-
-Allows patch-level changes if a minor version is specified on the
-comparator. Allows minor-level changes if not.
-
-* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0`
-* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`)
-* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`)
-* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0`
-* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`)
-* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`)
-* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in
- the `1.2.3` version will be allowed, if they are greater than or
- equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but
- `1.2.4-beta.2` would not, because it is a prerelease of a
- different `[major, minor, patch]` tuple.
-
-#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4`
-
-Allows changes that do not modify the left-most non-zero digit in the
-`[major, minor, patch]` tuple. In other words, this allows patch and
-minor updates for versions `1.0.0` and above, patch updates for
-versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`.
-
-Many authors treat a `0.x` version as if the `x` were the major
-"breaking-change" indicator.
-
-Caret ranges are ideal when an author may make breaking changes
-between `0.2.4` and `0.3.0` releases, which is a common practice.
-However, it presumes that there will *not* be breaking changes between
-`0.2.4` and `0.2.5`. It allows for changes that are presumed to be
-additive (but non-breaking), according to commonly observed practices.
-
-* `^1.2.3` := `>=1.2.3 <2.0.0`
-* `^0.2.3` := `>=0.2.3 <0.3.0`
-* `^0.0.3` := `>=0.0.3 <0.0.4`
-* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in
- the `1.2.3` version will be allowed, if they are greater than or
- equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but
- `1.2.4-beta.2` would not, because it is a prerelease of a
- different `[major, minor, patch]` tuple.
-* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the
- `0.0.3` version *only* will be allowed, if they are greater than or
- equal to `beta`. So, `0.0.3-pr.2` would be allowed.
-
-When parsing caret ranges, a missing `patch` value desugars to the
-number `0`, but will allow flexibility within that value, even if the
-major and minor versions are both `0`.
-
-* `^1.2.x` := `>=1.2.0 <2.0.0`
-* `^0.0.x` := `>=0.0.0 <0.1.0`
-* `^0.0` := `>=0.0.0 <0.1.0`
-
-A missing `minor` and `patch` values will desugar to zero, but also
-allow flexibility within those values, even if the major version is
-zero.
-
-* `^1.x` := `>=1.0.0 <2.0.0`
-* `^0.x` := `>=0.0.0 <1.0.0`
-
-### Range Grammar
-
-Putting all this together, here is a Backus-Naur grammar for ranges,
-for the benefit of parser authors:
-
-```bnf
-range-set ::= range ( logical-or range ) *
-logical-or ::= ( ' ' ) * '||' ( ' ' ) *
-range ::= hyphen | simple ( ' ' simple ) * | ''
-hyphen ::= partial ' - ' partial
-simple ::= primitive | partial | tilde | caret
-primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial
-partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
-xr ::= 'x' | 'X' | '*' | nr
-nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *
-tilde ::= '~' partial
-caret ::= '^' partial
-qualifier ::= ( '-' pre )? ( '+' build )?
-pre ::= parts
-build ::= parts
-parts ::= part ( '.' part ) *
-part ::= nr | [-0-9A-Za-z]+
-```
-
-## Functions
-
-All methods and classes take a final `loose` boolean argument that, if
-true, will be more forgiving about not-quite-valid semver strings.
-The resulting output will always be 100% strict, of course.
-
-Strict-mode Comparators and Ranges will be strict about the SemVer
-strings that they parse.
-
-* `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`, `premajor`, `minor`, `preminor`, `patch`,
- `prepatch`, or `prerelease`), or null if it's not valid
- * `premajor` in one call will bump the version up to the next major
- version and down to a prerelease of that major version.
- `preminor`, and `prepatch` work the same way.
- * If called from a non-prerelease version, the `prerelease` will work the
- same as `prepatch`. It increments the patch version, then makes a
- prerelease. If the input version is already a prerelease it simply
- increments it.
-* `prerelease(v)`: Returns an array of prerelease components, or null
- if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]`
-* `major(v)`: Return the major version number.
-* `minor(v)`: Return the minor version number.
-* `patch(v)`: Return the patch version number.
-
-### 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()`.
-* `diff(v1, v2)`: Returns difference between two versions by the release type
- (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
- or null if the versions are the same.
-
-
-### 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.
-* `minSatisfying(versions, range)`: Return the lowest version in the list
- that satisfies the range, or `null` if none of them do.
-* `gtr(version, range)`: Return `true` if version is greater than all the
- versions possible in the range.
-* `ltr(version, range)`: Return `true` if version is less than all the
- versions possible in the range.
-* `outside(version, range, hilo)`: Return true if the version is outside
- the bounds of the range in either the high or low direction. The
- `hilo` argument must be either the string `'>'` or `'<'`. (This is
- the function called by `gtr` and `ltr`.)
-
-Note that, since ranges may be non-contiguous, a version might not be
-greater than a range, less than a range, *or* satisfy a range! For
-example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`
-until `2.0.0`, so the version `1.2.10` would not be greater than the
-range (because `2.0.1` satisfies, which is higher), nor less than the
-range (since `1.2.8` satisfies, which is lower), and it also does not
-satisfy the range.
-
-If you want to know if a version satisfies or does not satisfy a
-range, use the `satisfies(version, range)` function.
diff --git a/node_modules/node-gyp/node_modules/semver/bin/semver b/node_modules/node-gyp/node_modules/semver/bin/semver
deleted file mode 100755
index c5f2e85..0000000
--- a/node_modules/node-gyp/node_modules/semver/bin/semver
+++ /dev/null
@@ -1,133 +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 = []
- , inc = null
- , version = require("../package.json").version
- , loose = false
- , identifier = undefined
- , semver = require("../semver")
- , reverse = false
-
-main()
-
-function main () {
- if (!argv.length) return help()
- while (argv.length) {
- var a = argv.shift()
- var i = a.indexOf('=')
- if (i !== -1) {
- a = a.slice(0, i)
- argv.unshift(a.slice(i + 1))
- }
- switch (a) {
- case "-rv": case "-rev": case "--rev": case "--reverse":
- reverse = true
- break
- case "-l": case "--loose":
- loose = true
- break
- case "-v": case "--version":
- versions.push(argv.shift())
- break
- case "-i": case "--inc": case "--increment":
- switch (argv[0]) {
- case "major": case "minor": case "patch": case "prerelease":
- case "premajor": case "preminor": case "prepatch":
- inc = argv.shift()
- break
- default:
- inc = "patch"
- break
- }
- break
- case "--preid":
- identifier = 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(function (v) {
- return semver.valid(v, loose)
- })
- if (!versions.length) return fail()
- if (inc && (versions.length !== 1 || range.length))
- return failInc()
-
- for (var i = 0, l = range.length; i < l ; i ++) {
- versions = versions.filter(function (v) {
- return semver.satisfies(v, range[i], loose)
- })
- if (!versions.length) return fail()
- }
- return success(versions)
-}
-
-function failInc () {
- console.error("--inc can only be used on a single version with no range")
- fail()
-}
-
-function fail () { process.exit(1) }
-
-function success () {
- var compare = reverse ? "rcompare" : "compare"
- versions.sort(function (a, b) {
- return semver[compare](a, b, loose)
- }).map(function (v) {
- return semver.clean(v, loose)
- }).map(function (v) {
- return inc ? semver.inc(v, inc, loose, identifier) : v
- }).forEach(function (v,i,_) { console.log(v) })
-}
-
-function help () {
- console.log(["SemVer " + version
- ,""
- ,"A JavaScript implementation of the http://semver.org/ specification"
- ,"Copyright Isaac Z. Schlueter"
- ,""
- ,"Usage: semver [options] <version> [<version> [...]]"
- ,"Prints valid versions sorted by SemVer precedence"
- ,""
- ,"Options:"
- ,"-r --range <range>"
- ," Print versions that match the specified range."
- ,""
- ,"-i --increment [<level>]"
- ," Increment a version by the specified level. Level can"
- ," be one of: major, minor, patch, premajor, preminor,"
- ," prepatch, or prerelease. Default level is 'patch'."
- ," Only one version may be specified."
- ,""
- ,"--preid <identifier>"
- ," Identifier to be used to prefix premajor, preminor,"
- ," prepatch or prerelease version increments."
- ,""
- ,"-l --loose"
- ," Interpret versions and ranges loosely"
- ,""
- ,"Program exits successfully if any valid version satisfies"
- ,"all supplied ranges, and prints all satisfying versions."
- ,""
- ,"If no satisfying versions are found, 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/node_modules/node-gyp/node_modules/semver/package.json b/node_modules/node-gyp/node_modules/semver/package.json
deleted file mode 100644
index bb00992..0000000
--- a/node_modules/node-gyp/node_modules/semver/package.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "_from": "semver@~5.3.0",
- "_id": "semver@5.3.0",
- "_inBundle": false,
- "_integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
- "_location": "/node-gyp/semver",
- "_phantomChildren": {},
- "_requested": {
- "type": "range",
- "registry": true,
- "raw": "semver@~5.3.0",
- "name": "semver",
- "escapedName": "semver",
- "rawSpec": "~5.3.0",
- "saveSpec": null,
- "fetchSpec": "~5.3.0"
- },
- "_requiredBy": [
- "/node-gyp"
- ],
- "_resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
- "_shasum": "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f",
- "_spec": "semver@~5.3.0",
- "_where": "/home/pruss/Dev/3-minute-website/node_modules/node-gyp",
- "bin": {
- "semver": "bin/semver"
- },
- "bugs": {
- "url": "https://github.com/npm/node-semver/issues"
- },
- "bundleDependencies": false,
- "deprecated": false,
- "description": "The semantic version parser used by npm.",
- "devDependencies": {
- "tap": "^2.0.0"
- },
- "files": [
- "bin",
- "range.bnf",
- "semver.js"
- ],
- "homepage": "https://github.com/npm/node-semver#readme",
- "license": "ISC",
- "main": "semver.js",
- "name": "semver",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/npm/node-semver.git"
- },
- "scripts": {
- "test": "tap test/*.js"
- },
- "version": "5.3.0"
-}
diff --git a/node_modules/node-gyp/node_modules/semver/range.bnf b/node_modules/node-gyp/node_modules/semver/range.bnf
deleted file mode 100644
index 25ebd5c..0000000
--- a/node_modules/node-gyp/node_modules/semver/range.bnf
+++ /dev/null
@@ -1,16 +0,0 @@
-range-set ::= range ( logical-or range ) *
-logical-or ::= ( ' ' ) * '||' ( ' ' ) *
-range ::= hyphen | simple ( ' ' simple ) * | ''
-hyphen ::= partial ' - ' partial
-simple ::= primitive | partial | tilde | caret
-primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial
-partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
-xr ::= 'x' | 'X' | '*' | nr
-nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *
-tilde ::= '~' partial
-caret ::= '^' partial
-qualifier ::= ( '-' pre )? ( '+' build )?
-pre ::= parts
-build ::= parts
-parts ::= part ( '.' part ) *
-part ::= nr | [-0-9A-Za-z]+
diff --git a/node_modules/node-gyp/node_modules/semver/semver.js b/node_modules/node-gyp/node_modules/semver/semver.js
deleted file mode 100644
index 5f1a3c5..0000000
--- a/node_modules/node-gyp/node_modules/semver/semver.js
+++ /dev/null
@@ -1,1203 +0,0 @@
-exports = module.exports = SemVer;
-
-// The debug function is excluded entirely from the minified version.
-/* nomin */ var debug;
-/* nomin */ if (typeof process === 'object' &&
- /* nomin */ process.env &&
- /* nomin */ process.env.NODE_DEBUG &&
- /* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG))
- /* nomin */ debug = function() {
- /* nomin */ var args = Array.prototype.slice.call(arguments, 0);
- /* nomin */ args.unshift('SEMVER');
- /* nomin */ console.log.apply(console, args);
- /* nomin */ };
-/* nomin */ else
- /* nomin */ debug = function() {};
-
-// Note: this is the semver.org version of the spec that it implements
-// Not necessarily the package version of this code.
-exports.SEMVER_SPEC_VERSION = '2.0.0';
-
-var MAX_LENGTH = 256;
-var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
-
-// The actual regexps go on exports.re
-var re = exports.re = [];
-var src = exports.src = [];
-var R = 0;
-
-// The following Regular Expressions can be used for tokenizing,
-// validating, and parsing SemVer version strings.
-
-// ## Numeric Identifier
-// A single `0`, or a non-zero digit followed by zero or more digits.
-
-var NUMERICIDENTIFIER = R++;
-src[NUMERICIDENTIFIER] = '0|[1-9]\\d*';
-var NUMERICIDENTIFIERLOOSE = R++;
-src[NUMERICIDENTIFIERLOOSE] = '[0-9]+';
-
-
-// ## Non-numeric Identifier
-// Zero or more digits, followed by a letter or hyphen, and then zero or
-// more letters, digits, or hyphens.
-
-var NONNUMERICIDENTIFIER = R++;
-src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*';
-
-
-// ## Main Version
-// Three dot-separated numeric identifiers.
-
-var MAINVERSION = R++;
-src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
- '(' + src[NUMERICIDENTIFIER] + ')\\.' +
- '(' + src[NUMERICIDENTIFIER] + ')';
-
-var MAINVERSIONLOOSE = R++;
-src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
- '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
- '(' + src[NUMERICIDENTIFIERLOOSE] + ')';
-
-// ## Pre-release Version Identifier
-// A numeric identifier, or a non-numeric identifier.
-
-var PRERELEASEIDENTIFIER = R++;
-src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
- '|' + src[NONNUMERICIDENTIFIER] + ')';
-
-var PRERELEASEIDENTIFIERLOOSE = R++;
-src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
- '|' + src[NONNUMERICIDENTIFIER] + ')';
-
-
-// ## Pre-release Version
-// Hyphen, followed by one or more dot-separated pre-release version
-// identifiers.
-
-var PRERELEASE = R++;
-src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
- '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))';
-
-var PRERELEASELOOSE = R++;
-src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
- '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))';
-
-// ## Build Metadata Identifier
-// Any combination of digits, letters, or hyphens.
-
-var BUILDIDENTIFIER = R++;
-src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+';
-
-// ## Build Metadata
-// Plus sign, followed by one or more period-separated build metadata
-// identifiers.
-
-var BUILD = R++;
-src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
- '(?:\\.' + src[BUILDIDENTIFIER] + ')*))';
-
-
-// ## Full Version String
-// A main version, followed optionally by a pre-release version and
-// build metadata.
-
-// Note that the only major, minor, patch, and pre-release sections of
-// the version string are capturing groups. The build metadata is not a
-// capturing group, because it should not ever be used in version
-// comparison.
-
-var FULL = R++;
-var FULLPLAIN = 'v?' + src[MAINVERSION] +
- src[PRERELEASE] + '?' +
- src[BUILD] + '?';
-
-src[FULL] = '^' + FULLPLAIN + '$';
-
-// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
-// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
-// common in the npm registry.
-var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
- src[PRERELEASELOOSE] + '?' +
- src[BUILD] + '?';
-
-var LOOSE = R++;
-src[LOOSE] = '^' + LOOSEPLAIN + '$';
-
-var GTLT = R++;
-src[GTLT] = '((?:<|>)?=?)';
-
-// Something like "2.*" or "1.2.x".
-// Note that "x.x" is a valid xRange identifer, meaning "any version"
-// Only the first item is strictly required.
-var XRANGEIDENTIFIERLOOSE = R++;
-src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*';
-var XRANGEIDENTIFIER = R++;
-src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*';
-
-var XRANGEPLAIN = R++;
-src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
- '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
- '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
- '(?:' + src[PRERELEASE] + ')?' +
- src[BUILD] + '?' +
- ')?)?';
-
-var XRANGEPLAINLOOSE = R++;
-src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
- '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
- '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
- '(?:' + src[PRERELEASELOOSE] + ')?' +
- src[BUILD] + '?' +
- ')?)?';
-
-var XRANGE = R++;
-src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$';
-var XRANGELOOSE = R++;
-src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$';
-
-// Tilde ranges.
-// Meaning is "reasonably at or greater than"
-var LONETILDE = R++;
-src[LONETILDE] = '(?:~>?)';
-
-var TILDETRIM = R++;
-src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+';
-re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g');
-var tildeTrimReplace = '$1~';
-
-var TILDE = R++;
-src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$';
-var TILDELOOSE = R++;
-src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$';
-
-// Caret ranges.
-// Meaning is "at least and backwards compatible with"
-var LONECARET = R++;
-src[LONECARET] = '(?:\\^)';
-
-var CARETTRIM = R++;
-src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+';
-re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g');
-var caretTrimReplace = '$1^';
-
-var CARET = R++;
-src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$';
-var CARETLOOSE = R++;
-src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$';
-
-// A simple gt/lt/eq thing, or just "" to indicate "any version"
-var COMPARATORLOOSE = R++;
-src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$';
-var COMPARATOR = R++;
-src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$';
-
-
-// An expression to strip any whitespace between the gtlt and the thing
-// it modifies, so that `> 1.2.3` ==> `>1.2.3`
-var COMPARATORTRIM = R++;
-src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
- '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')';
-
-// this one has to use the /g flag
-re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g');
-var comparatorTrimReplace = '$1$2$3';
-
-
-// Something like `1.2.3 - 1.2.4`
-// Note that these all use the loose form, because they'll be
-// checked against either the strict or loose comparator form
-// later.
-var HYPHENRANGE = R++;
-src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
- '\\s+-\\s+' +
- '(' + src[XRANGEPLAIN] + ')' +
- '\\s*$';
-
-var HYPHENRANGELOOSE = R++;
-src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
- '\\s+-\\s+' +
- '(' + src[XRANGEPLAINLOOSE] + ')' +
- '\\s*$';
-
-// Star ranges basically just allow anything at all.
-var STAR = R++;
-src[STAR] = '(<|>)?=?\\s*\\*';
-
-// Compile to actual regexp objects.
-// All are flag-free, unless they were created above with a flag.
-for (var i = 0; i < R; i++) {
- debug(i, src[i]);
- if (!re[i])
- re[i] = new RegExp(src[i]);
-}
-
-exports.parse = parse;
-function parse(version, loose) {
- if (version instanceof SemVer)
- return version;
-
- if (typeof version !== 'string')
- return null;
-
- if (version.length > MAX_LENGTH)
- return null;
-
- var r = loose ? re[LOOSE] : re[FULL];
- if (!r.test(version))
- return null;
-
- try {
- return new SemVer(version, loose);
- } catch (er) {
- return null;
- }
-}
-
-exports.valid = valid;
-function valid(version, loose) {
- var v = parse(version, loose);
- return v ? v.version : null;
-}
-
-
-exports.clean = clean;
-function clean(version, loose) {
- var s = parse(version.trim().replace(/^[=v]+/, ''), loose);
- return s ? s.version : null;
-}
-
-exports.SemVer = SemVer;
-
-function SemVer(version, loose) {
- if (version instanceof SemVer) {
- if (version.loose === loose)
- return version;
- else
- version = version.version;
- } else if (typeof version !== 'string') {
- throw new TypeError('Invalid Version: ' + version);
- }
-
- if (version.length > MAX_LENGTH)
- throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
-
- if (!(this instanceof SemVer))
- return new SemVer(version, loose);
-
- debug('SemVer', version, loose);
- this.loose = loose;
- var m = version.trim().match(loose ? re[LOOSE] : re[FULL]);
-
- if (!m)
- throw new TypeError('Invalid Version: ' + version);
-
- this.raw = version;
-
- // these are actually numbers
- this.major = +m[1];
- this.minor = +m[2];
- this.patch = +m[3];
-
- if (this.major > MAX_SAFE_INTEGER || this.major < 0)
- throw new TypeError('Invalid major version')
-
- if (this.minor > MAX_SAFE_INTEGER || this.minor < 0)
- throw new TypeError('Invalid minor version')
-
- if (this.patch > MAX_SAFE_INTEGER || this.patch < 0)
- throw new TypeError('Invalid patch version')
-
- // numberify any prerelease numeric ids
- if (!m[4])
- this.prerelease = [];
- else
- this.prerelease = m[4].split('.').map(function(id) {
- if (/^[0-9]+$/.test(id)) {
- var num = +id;
- if (num >= 0 && num < MAX_SAFE_INTEGER)
- return num;
- }
- return id;
- });
-
- this.build = m[5] ? m[5].split('.') : [];
- this.format();
-}
-
-SemVer.prototype.format = function() {
- this.version = this.major + '.' + this.minor + '.' + this.patch;
- if (this.prerelease.length)
- this.version += '-' + this.prerelease.join('.');
- return this.version;
-};
-
-SemVer.prototype.toString = function() {
- return this.version;
-};
-
-SemVer.prototype.compare = function(other) {
- debug('SemVer.compare', this.version, this.loose, other);
- if (!(other instanceof SemVer))
- other = new SemVer(other, this.loose);
-
- return this.compareMain(other) || this.comparePre(other);
-};
-
-SemVer.prototype.compareMain = function(other) {
- if (!(other instanceof SemVer))
- other = new SemVer(other, this.loose);
-
- return compareIdentifiers(this.major, other.major) ||
- compareIdentifiers(this.minor, other.minor) ||
- compareIdentifiers(this.patch, other.patch);
-};
-
-SemVer.prototype.comparePre = function(other) {
- if (!(other instanceof SemVer))
- other = new SemVer(other, this.loose);
-
- // NOT having a prerelease is > having one
- if (this.prerelease.length && !other.prerelease.length)
- return -1;
- else if (!this.prerelease.length && other.prerelease.length)
- return 1;
- else if (!this.prerelease.length && !other.prerelease.length)
- return 0;
-
- var i = 0;
- do {
- var a = this.prerelease[i];
- var b = other.prerelease[i];
- debug('prerelease compare', i, a, b);
- if (a === undefined && b === undefined)
- return 0;
- else if (b === undefined)
- return 1;
- else if (a === undefined)
- return -1;
- else if (a === b)
- continue;
- else
- return compareIdentifiers(a, b);
- } while (++i);
-};
-
-// preminor will bump the version up to the next minor release, and immediately
-// down to pre-release. premajor and prepatch work the same way.
-SemVer.prototype.inc = function(release, identifier) {
- switch (release) {
- case 'premajor':
- this.prerelease.length = 0;
- this.patch = 0;
- this.minor = 0;
- this.major++;
- this.inc('pre', identifier);
- break;
- case 'preminor':
- this.prerelease.length = 0;
- this.patch = 0;
- this.minor++;
- this.inc('pre', identifier);
- break;
- case 'prepatch':
- // If this is already a prerelease, it will bump to the next version
- // drop any prereleases that might already exist, since they are not
- // relevant at this point.
- this.prerelease.length = 0;
- this.inc('patch', identifier);
- this.inc('pre', identifier);
- break;
- // If the input is a non-prerelease version, this acts the same as
- // prepatch.
- case 'prerelease':
- if (this.prerelease.length === 0)
- this.inc('patch', identifier);
- this.inc('pre', identifier);
- break;
-
- case 'major':
- // If this is a pre-major version, bump up to the same major version.
- // Otherwise increment major.
- // 1.0.0-5 bumps to 1.0.0
- // 1.1.0 bumps to 2.0.0
- if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0)
- this.major++;
- this.minor = 0;
- this.patch = 0;
- this.prerelease = [];
- break;
- case 'minor':
- // If this is a pre-minor version, bump up to the same minor version.
- // Otherwise increment minor.
- // 1.2.0-5 bumps to 1.2.0
- // 1.2.1 bumps to 1.3.0
- if (this.patch !== 0 || this.prerelease.length === 0)
- this.minor++;
- this.patch = 0;
- this.prerelease = [];
- break;
- case 'patch':
- // If this is not a pre-release version, it will increment the patch.
- // If it is a pre-release it will bump up to the same patch version.
- // 1.2.0-5 patches to 1.2.0
- // 1.2.0 patches to 1.2.1
- if (this.prerelease.length === 0)
- this.patch++;
- this.prerelease = [];
- break;
- // This probably shouldn't be used publicly.
- // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
- case 'pre':
- if (this.prerelease.length === 0)
- this.prerelease = [0];
- else {
- var i = this.prerelease.length;
- while (--i >= 0) {
- if (typeof this.prerelease[i] === 'number') {
- this.prerelease[i]++;
- i = -2;
- }
- }
- if (i === -1) // didn't increment anything
- this.prerelease.push(0);
- }
- if (identifier) {
- // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
- // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
- if (this.prerelease[0] === identifier) {
- if (isNaN(this.prerelease[1]))
- this.prerelease = [identifier, 0];
- } else
- this.prerelease = [identifier, 0];
- }
- break;
-
- default:
- throw new Error('invalid increment argument: ' + release);
- }
- this.format();
- this.raw = this.version;
- return this;
-};
-
-exports.inc = inc;
-function inc(version, release, loose, identifier) {
- if (typeof(loose) === 'string') {
- identifier = loose;
- loose = undefined;
- }
-
- try {
- return new SemVer(version, loose).inc(release, identifier).version;
- } catch (er) {
- return null;
- }
-}
-
-exports.diff = diff;
-function diff(version1, version2) {
- if (eq(version1, version2)) {
- return null;
- } else {
- var v1 = parse(version1);
- var v2 = parse(version2);
- if (v1.prerelease.length || v2.prerelease.length) {
- for (var key in v1) {
- if (key === 'major' || key === 'minor' || key === 'patch') {
- if (v1[key] !== v2[key]) {
- return 'pre'+key;
- }
- }
- }
- return 'prerelease';
- }
- for (var key in v1) {
- if (key === 'major' || key === 'minor' || key === 'patch') {
- if (v1[key] !== v2[key]) {
- return key;
- }
- }
- }
- }
-}
-
-exports.compareIdentifiers = compareIdentifiers;
-
-var numeric = /^[0-9]+$/;
-function compareIdentifiers(a, b) {
- var anum = numeric.test(a);
- var bnum = numeric.test(b);
-
- if (anum && bnum) {
- a = +a;
- b = +b;
- }
-
- return (anum && !bnum) ? -1 :
- (bnum && !anum) ? 1 :
- a < b ? -1 :
- a > b ? 1 :
- 0;
-}
-
-exports.rcompareIdentifiers = rcompareIdentifiers;
-function rcompareIdentifiers(a, b) {
- return compareIdentifiers(b, a);
-}
-
-exports.major = major;
-function major(a, loose) {
- return new SemVer(a, loose).major;
-}
-
-exports.minor = minor;
-function minor(a, loose) {
- return new SemVer(a, loose).minor;
-}
-
-exports.patch = patch;
-function patch(a, loose) {
- return new SemVer(a, loose).patch;
-}
-
-exports.compare = compare;
-function compare(a, b, loose) {
- return new SemVer(a, loose).compare(b);
-}
-
-exports.compareLoose = compareLoose;
-function compareLoose(a, b) {
- return compare(a, b, true);
-}
-
-exports.rcompare = rcompare;
-function rcompare(a, b, loose) {
- return compare(b, a, loose);
-}
-
-exports.sort = sort;
-function sort(list, loose) {
- return list.sort(function(a, b) {
- return exports.compare(a, b, loose);
- });
-}
-
-exports.rsort = rsort;
-function rsort(list, loose) {
- return list.sort(function(a, b) {
- return exports.rcompare(a, b, loose);
- });
-}
-
-exports.gt = gt;
-function gt(a, b, loose) {
- return compare(a, b, loose) > 0;
-}
-
-exports.lt = lt;
-function lt(a, b, loose) {
- return compare(a, b, loose) < 0;
-}
-
-exports.eq = eq;
-function eq(a, b, loose) {
- return compare(a, b, loose) === 0;
-}
-
-exports.neq = neq;
-function neq(a, b, loose) {
- return compare(a, b, loose) !== 0;
-}
-
-exports.gte = gte;
-function gte(a, b, loose) {
- return compare(a, b, loose) >= 0;
-}
-
-exports.lte = lte;
-function lte(a, b, loose) {
- return compare(a, b, loose) <= 0;
-}
-
-exports.cmp = cmp;
-function cmp(a, op, b, loose) {
- var ret;
- switch (op) {
- case '===':
- if (typeof a === 'object') a = a.version;
- if (typeof b === 'object') b = b.version;
- ret = a === b;
- break;
- case '!==':
- if (typeof a === 'object') a = a.version;
- if (typeof b === 'object') b = b.version;
- ret = a !== b;
- break;
- case '': case '=': case '==': ret = eq(a, b, loose); break;
- case '!=': ret = neq(a, b, loose); break;
- case '>': ret = gt(a, b, loose); break;
- case '>=': ret = gte(a, b, loose); break;
- case '<': ret = lt(a, b, loose); break;
- case '<=': ret = lte(a, b, loose); break;
- default: throw new TypeError('Invalid operator: ' + op);
- }
- return ret;
-}
-
-exports.Comparator = Comparator;
-function Comparator(comp, loose) {
- if (comp instanceof Comparator) {
- if (comp.loose === loose)
- return comp;
- else
- comp = comp.value;
- }
-
- if (!(this instanceof Comparator))
- return new Comparator(comp, loose);
-
- debug('comparator', comp, loose);
- this.loose = loose;
- this.parse(comp);
-
- if (this.semver === ANY)
- this.value = '';
- else
- this.value = this.operator + this.semver.version;
-
- debug('comp', this);
-}
-
-var ANY = {};
-Comparator.prototype.parse = function(comp) {
- var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
- var m = comp.match(r);
-
- if (!m)
- throw new TypeError('Invalid comparator: ' + comp);
-
- this.operator = m[1];
- if (this.operator === '=')
- this.operator = '';
-
- // if it literally is just '>' or '' then allow anything.
- if (!m[2])
- this.semver = ANY;
- else
- this.semver = new SemVer(m[2], this.loose);
-};
-
-Comparator.prototype.toString = function() {
- return this.value;
-};
-
-Comparator.prototype.test = function(version) {
- debug('Comparator.test', version, this.loose);
-
- if (this.semver === ANY)
- return true;
-
- if (typeof version === 'string')
- version = new SemVer(version, this.loose);
-
- return cmp(version, this.operator, this.semver, this.loose);
-};
-
-
-exports.Range = Range;
-function Range(range, loose) {
- if ((range instanceof Range) && range.loose === loose)
- return range;
-
- if (!(this instanceof Range))
- return new Range(range, loose);
-
- this.loose = loose;
-
- // First, split based on boolean or ||
- this.raw = range;
- this.set = range.split(/\s*\|\|\s*/).map(function(range) {
- return this.parseRange(range.trim());
- }, this).filter(function(c) {
- // throw out any that are not relevant for whatever reason
- return c.length;
- });
-
- if (!this.set.length) {
- throw new TypeError('Invalid SemVer Range: ' + range);
- }
-
- this.format();
-}
-
-Range.prototype.format = function() {
- this.range = this.set.map(function(comps) {
- return comps.join(' ').trim();
- }).join('||').trim();
- return this.range;
-};
-
-Range.prototype.toString = function() {
- return this.range;
-};
-
-Range.prototype.parseRange = function(range) {
- var loose = this.loose;
- range = range.trim();
- debug('range', range, loose);
- // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
- var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE];
- range = range.replace(hr, hyphenReplace);
- debug('hyphen replace', range);
- // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
- range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace);
- debug('comparator trim', range, re[COMPARATORTRIM]);
-
- // `~ 1.2.3` => `~1.2.3`
- range = range.replace(re[TILDETRIM], tildeTrimReplace);
-
- // `^ 1.2.3` => `^1.2.3`
- range = range.replace(re[CARETTRIM], caretTrimReplace);
-
- // normalize spaces
- range = range.split(/\s+/).join(' ');
-
- // At this point, the range is completely trimmed and
- // ready to be split into comparators.
-
- var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
- var set = range.split(' ').map(function(comp) {
- return parseComparator(comp, loose);
- }).join(' ').split(/\s+/);
- if (this.loose) {
- // in loose mode, throw out any that are not valid comparators
- set = set.filter(function(comp) {
- return !!comp.match(compRe);
- });
- }
- set = set.map(function(comp) {
- return new Comparator(comp, loose);
- });
-
- return set;
-};
-
-// Mostly just for testing and legacy API reasons
-exports.toComparators = toComparators;
-function toComparators(range, loose) {
- return new Range(range, loose).set.map(function(comp) {
- return comp.map(function(c) {
- return c.value;
- }).join(' ').trim().split(' ');
- });
-}
-
-// comprised of xranges, tildes, stars, and gtlt's at this point.
-// already replaced the hyphen ranges
-// turn into a set of JUST comparators.
-function parseComparator(comp, loose) {
- debug('comp', comp);
- comp = replaceCarets(comp, loose);
- debug('caret', comp);
- comp = replaceTildes(comp, loose);
- debug('tildes', comp);
- comp = replaceXRanges(comp, loose);
- debug('xrange', comp);
- comp = replaceStars(comp, loose);
- debug('stars', comp);
- return comp;
-}
-
-function isX(id) {
- return !id || id.toLowerCase() === 'x' || id === '*';
-}
-
-// ~, ~> --> * (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 replaceTildes(comp, loose) {
- return comp.trim().split(/\s+/).map(function(comp) {
- return replaceTilde(comp, loose);
- }).join(' ');
-}
-
-function replaceTilde(comp, loose) {
- var r = loose ? re[TILDELOOSE] : re[TILDE];
- return comp.replace(r, function(_, M, m, p, pr) {
- debug('tilde', comp, _, M, m, p, pr);
- var ret;
-
- if (isX(M))
- ret = '';
- else if (isX(m))
- ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
- else if (isX(p))
- // ~1.2 == >=1.2.0 <1.3.0
- ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
- else if (pr) {
- debug('replaceTilde pr', pr);
- if (pr.charAt(0) !== '-')
- pr = '-' + pr;
- ret = '>=' + M + '.' + m + '.' + p + pr +
- ' <' + M + '.' + (+m + 1) + '.0';
- } else
- // ~1.2.3 == >=1.2.3 <1.3.0
- ret = '>=' + M + '.' + m + '.' + p +
- ' <' + M + '.' + (+m + 1) + '.0';
-
- debug('tilde return', ret);
- return ret;
- });
-}
-
-// ^ --> * (any, kinda silly)
-// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
-// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
-// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
-// ^1.2.3 --> >=1.2.3 <2.0.0
-// ^1.2.0 --> >=1.2.0 <2.0.0
-function replaceCarets(comp, loose) {
- return comp.trim().split(/\s+/).map(function(comp) {
- return replaceCaret(comp, loose);
- }).join(' ');
-}
-
-function replaceCaret(comp, loose) {
- debug('caret', comp, loose);
- var r = loose ? re[CARETLOOSE] : re[CARET];
- return comp.replace(r, function(_, M, m, p, pr) {
- debug('caret', comp, _, M, m, p, pr);
- var ret;
-
- if (isX(M))
- ret = '';
- else if (isX(m))
- ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
- else if (isX(p)) {
- if (M === '0')
- ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
- else
- ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0';
- } else if (pr) {
- debug('replaceCaret pr', pr);
- if (pr.charAt(0) !== '-')
- pr = '-' + pr;
- if (M === '0') {
- if (m === '0')
- ret = '>=' + M + '.' + m + '.' + p + pr +
- ' <' + M + '.' + m + '.' + (+p + 1);
- else
- ret = '>=' + M + '.' + m + '.' + p + pr +
- ' <' + M + '.' + (+m + 1) + '.0';
- } else
- ret = '>=' + M + '.' + m + '.' + p + pr +
- ' <' + (+M + 1) + '.0.0';
- } else {
- debug('no pr');
- if (M === '0') {
- if (m === '0')
- ret = '>=' + M + '.' + m + '.' + p +
- ' <' + M + '.' + m + '.' + (+p + 1);
- else
- ret = '>=' + M + '.' + m + '.' + p +
- ' <' + M + '.' + (+m + 1) + '.0';
- } else
- ret = '>=' + M + '.' + m + '.' + p +
- ' <' + (+M + 1) + '.0.0';
- }
-
- debug('caret return', ret);
- return ret;
- });
-}
-
-function replaceXRanges(comp, loose) {
- debug('replaceXRanges', comp, loose);
- return comp.split(/\s+/).map(function(comp) {
- return replaceXRange(comp, loose);
- }).join(' ');
-}
-
-function replaceXRange(comp, loose) {
- comp = comp.trim();
- var r = loose ? re[XRANGELOOSE] : re[XRANGE];
- return comp.replace(r, function(ret, gtlt, M, m, p, pr) {
- debug('xRange', comp, ret, gtlt, M, m, p, pr);
- var xM = isX(M);
- var xm = xM || isX(m);
- var xp = xm || isX(p);
- var anyX = xp;
-
- if (gtlt === '=' && anyX)
- gtlt = '';
-
- if (xM) {
- if (gtlt === '>' || gtlt === '<') {
- // nothing is allowed
- ret = '<0.0.0';
- } else {
- // nothing is forbidden
- ret = '*';
- }
- } else if (gtlt && anyX) {
- // replace X with 0
- if (xm)
- m = 0;
- if (xp)
- p = 0;
-
- if (gtlt === '>') {
- // >1 => >=2.0.0
- // >1.2 => >=1.3.0
- // >1.2.3 => >= 1.2.4
- gtlt = '>=';
- if (xm) {
- M = +M + 1;
- m = 0;
- p = 0;
- } else if (xp) {
- m = +m + 1;
- p = 0;
- }
- } else if (gtlt === '<=') {
- // <=0.7.x is actually <0.8.0, since any 0.7.x should
- // pass. Similarly, <=7.x is actually <8.0.0, etc.
- gtlt = '<';
- if (xm)
- M = +M + 1;
- else
- m = +m + 1;
- }
-
- ret = gtlt + M + '.' + m + '.' + p;
- } else if (xm) {
- ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
- } else if (xp) {
- ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
- }
-
- debug('xRange return', ret);
-
- return ret;
- });
-}
-
-// Because * is AND-ed with everything else in the comparator,
-// and '' means "any version", just remove the *s entirely.
-function replaceStars(comp, loose) {
- debug('replaceStars', comp, loose);
- // Looseness is ignored here. star is always as loose as it gets!
- return comp.trim().replace(re[STAR], '');
-}
-
-// This function is passed to string.replace(re[HYPHENRANGE])
-// M, m, patch, prerelease, build
-// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
-// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
-// 1.2 - 3.4 => >=1.2.0 <3.5.0
-function hyphenReplace($0,
- from, fM, fm, fp, fpr, fb,
- to, tM, tm, tp, tpr, tb) {
-
- if (isX(fM))
- from = '';
- else if (isX(fm))
- from = '>=' + fM + '.0.0';
- else if (isX(fp))
- from = '>=' + fM + '.' + fm + '.0';
- else
- from = '>=' + from;
-
- if (isX(tM))
- to = '';
- else if (isX(tm))
- to = '<' + (+tM + 1) + '.0.0';
- else if (isX(tp))
- to = '<' + tM + '.' + (+tm + 1) + '.0';
- else if (tpr)
- to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr;
- else
- to = '<=' + to;
-
- return (from + ' ' + to).trim();
-}
-
-
-// if ANY of the sets match ALL of its comparators, then pass
-Range.prototype.test = function(version) {
- if (!version)
- return false;
-
- if (typeof version === 'string')
- version = new SemVer(version, this.loose);
-
- for (var i = 0; i < this.set.length; i++) {
- if (testSet(this.set[i], version))
- return true;
- }
- return false;
-};
-
-function testSet(set, version) {
- for (var i = 0; i < set.length; i++) {
- if (!set[i].test(version))
- return false;
- }
-
- if (version.prerelease.length) {
- // Find the set of versions that are allowed to have prereleases
- // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
- // That should allow `1.2.3-pr.2` to pass.
- // However, `1.2.4-alpha.notready` should NOT be allowed,
- // even though it's within the range set by the comparators.
- for (var i = 0; i < set.length; i++) {
- debug(set[i].semver);
- if (set[i].semver === ANY)
- continue;
-
- if (set[i].semver.prerelease.length > 0) {
- var allowed = set[i].semver;
- if (allowed.major === version.major &&
- allowed.minor === version.minor &&
- allowed.patch === version.patch)
- return true;
- }
- }
-
- // Version has a -pre, but it's not one of the ones we like.
- return false;
- }
-
- return true;
-}
-
-exports.satisfies = satisfies;
-function satisfies(version, range, loose) {
- try {
- range = new Range(range, loose);
- } catch (er) {
- return false;
- }
- return range.test(version);
-}
-
-exports.maxSatisfying = maxSatisfying;
-function maxSatisfying(versions, range, loose) {
- return versions.filter(function(version) {
- return satisfies(version, range, loose);
- }).sort(function(a, b) {
- return rcompare(a, b, loose);
- })[0] || null;
-}
-
-exports.minSatisfying = minSatisfying;
-function minSatisfying(versions, range, loose) {
- return versions.filter(function(version) {
- return satisfies(version, range, loose);
- }).sort(function(a, b) {
- return compare(a, b, loose);
- })[0] || null;
-}
-
-exports.validRange = validRange;
-function validRange(range, loose) {
- try {
- // Return '*' instead of '' so that truthiness works.
- // This will throw if it's invalid anyway
- return new Range(range, loose).range || '*';
- } catch (er) {
- return null;
- }
-}
-
-// Determine if version is less than all the versions possible in the range
-exports.ltr = ltr;
-function ltr(version, range, loose) {
- return outside(version, range, '<', loose);
-}
-
-// Determine if version is greater than all the versions possible in the range.
-exports.gtr = gtr;
-function gtr(version, range, loose) {
- return outside(version, range, '>', loose);
-}
-
-exports.outside = outside;
-function outside(version, range, hilo, loose) {
- version = new SemVer(version, loose);
- range = new Range(range, loose);
-
- var gtfn, ltefn, ltfn, comp, ecomp;
- switch (hilo) {
- case '>':
- gtfn = gt;
- ltefn = lte;
- ltfn = lt;
- comp = '>';
- ecomp = '>=';
- break;
- case '<':
- gtfn = lt;
- ltefn = gte;
- ltfn = gt;
- comp = '<';
- ecomp = '<=';
- break;
- default:
- throw new TypeError('Must provide a hilo val of "<" or ">"');
- }
-
- // If it satisifes the range it is not outside
- if (satisfies(version, range, loose)) {
- return false;
- }
-
- // From now on, variable terms are as if we're in "gtr" mode.
- // but note that everything is flipped for the "ltr" function.
-
- for (var i = 0; i < range.set.length; ++i) {
- var comparators = range.set[i];
-
- var high = null;
- var low = null;
-
- comparators.forEach(function(comparator) {
- if (comparator.semver === ANY) {
- comparator = new Comparator('>=0.0.0')
- }
- high = high || comparator;
- low = low || comparator;
- if (gtfn(comparator.semver, high.semver, loose)) {
- high = comparator;
- } else if (ltfn(comparator.semver, low.semver, loose)) {
- low = comparator;
- }
- });
-
- // If the edge version comparator has a operator then our version
- // isn't outside it
- if (high.operator === comp || high.operator === ecomp) {
- return false;
- }
-
- // If the lowest version comparator has an operator and our version
- // is less than it then it isn't higher than the range
- if ((!low.operator || low.operator === comp) &&
- ltefn(version, low.semver)) {
- return false;
- } else if (low.operator === ecomp && ltfn(version, low.semver)) {
- return false;
- }
- }
- return true;
-}
-
-exports.prerelease = prerelease;
-function prerelease(version, loose) {
- var parsed = parse(version, loose);
- return (parsed && parsed.prerelease.length) ? parsed.prerelease : null;
-}
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/0471d9cf-687f-4ae8-84a5-ce7468becd03.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/0471d9cf-687f-4ae8-84a5-ce7468becd03.json
deleted file mode 100644
index 2a57d9f..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/0471d9cf-687f-4ae8-84a5-ce7468becd03.json
+++ /dev/null
@@ -1 +0,0 @@
-{"/Users/isaacs/dev/js/tar/lib/pack.js":{"path":"/Users/isaacs/dev/js/tar/lib/pack.js","statementMap":{"0":{"start":{"line":4,"column":0},"end":{"line":4,"column":21}},"1":{"start":{"line":6,"column":18},"end":{"line":6,"column":46}},"2":{"start":{"line":7,"column":13},"end":{"line":7,"column":37}},"3":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"4":{"start":{"line":9,"column":15},"end":{"line":9,"column":34}},"5":{"start":{"line":10,"column":25},"end":{"line":10,"column":61}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":40}},"7":{"start":{"line":12,"column":10},"end":{"line":12,"column":25}},"8":{"start":{"line":14,"column":0},"end":{"line":14,"column":41}},"9":{"start":{"line":14,"column":13},"end":{"line":14,"column":14}},"10":{"start":{"line":14,"column":31},"end":{"line":14,"column":41}},"11":{"start":{"line":16,"column":0},"end":{"line":16,"column":22}},"12":{"start":{"line":20,"column":11},"end":{"line":20,"column":15}},"13":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"14":{"start":{"line":21,"column":29},"end":{"line":21,"column":51}},"15":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"16":{"start":{"line":23,"column":13},"end":{"line":23,"column":52}},"17":{"start":{"line":24,"column":7},"end":{"line":24,"column":32}},"18":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"19":{"start":{"line":28,"column":2},"end":{"line":28,"column":20}},"20":{"start":{"line":29,"column":2},"end":{"line":29,"column":20}},"21":{"start":{"line":30,"column":2},"end":{"line":30,"column":17}},"22":{"start":{"line":32,"column":2},"end":{"line":32,"column":25}},"23":{"start":{"line":33,"column":2},"end":{"line":33,"column":24}},"24":{"start":{"line":35,"column":2},"end":{"line":35,"column":21}},"25":{"start":{"line":36,"column":2},"end":{"line":43,"column":4}},"26":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"27":{"start":{"line":37,"column":35},"end":{"line":37,"column":41}},"28":{"start":{"line":38,"column":4},"end":{"line":38,"column":22}},"29":{"start":{"line":39,"column":4},"end":{"line":41,"column":6}},"30":{"start":{"line":40,"column":6},"end":{"line":40,"column":25}},"31":{"start":{"line":42,"column":4},"end":{"line":42,"column":15}},"32":{"start":{"line":46,"column":0},"end":{"line":57,"column":1}},"33":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"34":{"start":{"line":48,"column":23},"end":{"line":48,"column":29}},"35":{"start":{"line":49,"column":2},"end":{"line":49,"column":24}},"36":{"start":{"line":51,"column":11},"end":{"line":51,"column":15}},"37":{"start":{"line":52,"column":2},"end":{"line":56,"column":10}},"38":{"start":{"line":54,"column":6},"end":{"line":54,"column":24}},"39":{"start":{"line":59,"column":0},"end":{"line":69,"column":1}},"40":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"41":{"start":{"line":60,"column":40},"end":{"line":60,"column":68}},"42":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"43":{"start":{"line":62,"column":19},"end":{"line":62,"column":72}},"44":{"start":{"line":64,"column":2},"end":{"line":64,"column":17}},"45":{"start":{"line":65,"column":2},"end":{"line":65,"column":27}},"46":{"start":{"line":66,"column":2},"end":{"line":66,"column":17}},"47":{"start":{"line":67,"column":2},"end":{"line":67,"column":43}},"48":{"start":{"line":68,"column":2},"end":{"line":68,"column":25}},"49":{"start":{"line":71,"column":0},"end":{"line":75,"column":1}},"50":{"start":{"line":72,"column":2},"end":{"line":72,"column":21}},"51":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"52":{"start":{"line":73,"column":26},"end":{"line":73,"column":52}},"53":{"start":{"line":74,"column":2},"end":{"line":74,"column":20}},"54":{"start":{"line":77,"column":0},"end":{"line":82,"column":1}},"55":{"start":{"line":78,"column":2},"end":{"line":78,"column":22}},"56":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"57":{"start":{"line":79,"column":26},"end":{"line":79,"column":53}},"58":{"start":{"line":80,"column":2},"end":{"line":80,"column":21}},"59":{"start":{"line":81,"column":2},"end":{"line":81,"column":17}},"60":{"start":{"line":84,"column":0},"end":{"line":88,"column":1}},"61":{"start":{"line":85,"column":2},"end":{"line":85,"column":20}},"62":{"start":{"line":86,"column":2},"end":{"line":86,"column":24}},"63":{"start":{"line":87,"column":2},"end":{"line":87,"column":17}},"64":{"start":{"line":90,"column":0},"end":{"line":233,"column":1}},"65":{"start":{"line":91,"column":11},"end":{"line":91,"column":15}},"66":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"67":{"start":{"line":93,"column":4},"end":{"line":93,"column":10}},"68":{"start":{"line":96,"column":14},"end":{"line":96,"column":32}},"69":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"70":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"71":{"start":{"line":100,"column":6},"end":{"line":100,"column":22}},"72":{"start":{"line":102,"column":4},"end":{"line":102,"column":10}},"73":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"74":{"start":{"line":107,"column":4},"end":{"line":107,"column":29}},"75":{"start":{"line":108,"column":4},"end":{"line":111,"column":6}},"76":{"start":{"line":110,"column":6},"end":{"line":110,"column":19}},"77":{"start":{"line":112,"column":4},"end":{"line":112,"column":10}},"78":{"start":{"line":115,"column":2},"end":{"line":115,"column":23}},"79":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"80":{"start":{"line":119,"column":4},"end":{"line":119,"column":24}},"81":{"start":{"line":120,"column":4},"end":{"line":120,"column":24}},"82":{"start":{"line":121,"column":4},"end":{"line":121,"column":18}},"83":{"start":{"line":122,"column":4},"end":{"line":122,"column":20}},"84":{"start":{"line":123,"column":4},"end":{"line":123,"column":10}},"85":{"start":{"line":134,"column":13},"end":{"line":134,"column":53}},"86":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"87":{"start":{"line":137,"column":4},"end":{"line":137,"column":27}},"88":{"start":{"line":140,"column":15},"end":{"line":140,"column":17}},"89":{"start":{"line":142,"column":2},"end":{"line":144,"column":4}},"90":{"start":{"line":143,"column":4},"end":{"line":143,"column":30}},"91":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"92":{"start":{"line":146,"column":25},"end":{"line":146,"column":52}},"93":{"start":{"line":148,"column":2},"end":{"line":148,"column":53}},"94":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"95":{"start":{"line":152,"column":4},"end":{"line":152,"column":49}},"96":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"97":{"start":{"line":156,"column":4},"end":{"line":156,"column":29}},"98":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"99":{"start":{"line":161,"column":6},"end":{"line":161,"column":12}},"100":{"start":{"line":164,"column":6},"end":{"line":164,"column":24}},"101":{"start":{"line":165,"column":6},"end":{"line":165,"column":21}},"102":{"start":{"line":166,"column":6},"end":{"line":166,"column":11}},"103":{"start":{"line":169,"column":15},"end":{"line":169,"column":69}},"104":{"start":{"line":170,"column":6},"end":{"line":170,"column":54}},"105":{"start":{"line":171,"column":6},"end":{"line":171,"column":21}},"106":{"start":{"line":172,"column":6},"end":{"line":172,"column":11}},"107":{"start":{"line":175,"column":15},"end":{"line":175,"column":69}},"108":{"start":{"line":176,"column":6},"end":{"line":176,"column":74}},"109":{"start":{"line":177,"column":6},"end":{"line":177,"column":21}},"110":{"start":{"line":178,"column":6},"end":{"line":178,"column":11}},"111":{"start":{"line":187,"column":15},"end":{"line":187,"column":53}},"112":{"start":{"line":189,"column":2},"end":{"line":189,"column":20}},"113":{"start":{"line":195,"column":2},"end":{"line":197,"column":4}},"114":{"start":{"line":196,"column":4},"end":{"line":196,"column":22}},"115":{"start":{"line":199,"column":2},"end":{"line":205,"column":4}},"116":{"start":{"line":200,"column":4},"end":{"line":202,"column":5}},"117":{"start":{"line":201,"column":6},"end":{"line":201,"column":50}},"118":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"119":{"start":{"line":204,"column":33},"end":{"line":204,"column":44}},"120":{"start":{"line":206,"column":2},"end":{"line":206,"column":31}},"121":{"start":{"line":208,"column":14},"end":{"line":208,"column":19}},"122":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"123":{"start":{"line":210,"column":15},"end":{"line":210,"column":21}},"124":{"start":{"line":211,"column":4},"end":{"line":211,"column":16}},"125":{"start":{"line":215,"column":4},"end":{"line":215,"column":27}},"126":{"start":{"line":216,"column":4},"end":{"line":216,"column":26}},"127":{"start":{"line":217,"column":4},"end":{"line":217,"column":17}},"128":{"start":{"line":220,"column":2},"end":{"line":223,"column":4}},"129":{"start":{"line":222,"column":4},"end":{"line":222,"column":24}},"130":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"131":{"start":{"line":229,"column":4},"end":{"line":229,"column":21}},"132":{"start":{"line":232,"column":2},"end":{"line":232,"column":20}},"133":{"start":{"line":235,"column":0},"end":{"line":235,"column":39}},"134":{"start":{"line":236,"column":0},"end":{"line":236,"column":37}}},"fnMap":{"0":{"name":"Pack","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":13}},"loc":{"start":{"line":18,"column":22},"end":{"line":44,"column":1}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":36,"column":16},"end":{"line":36,"column":17}},"loc":{"start":{"line":36,"column":31},"end":{"line":43,"column":3}},"line":36},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":18},"end":{"line":39,"column":19}},"loc":{"start":{"line":39,"column":30},"end":{"line":41,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":46,"column":27},"end":{"line":46,"column":28}},"loc":{"start":{"line":46,"column":44},"end":{"line":57,"column":1}},"line":46},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":29},"end":{"line":55,"column":5}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":59,"column":21},"end":{"line":59,"column":22}},"loc":{"start":{"line":59,"column":39},"end":{"line":69,"column":1}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":71,"column":23},"end":{"line":71,"column":24}},"loc":{"start":{"line":71,"column":35},"end":{"line":75,"column":1}},"line":71},"7":{"name":"(anonymous_7)","decl":{"start":{"line":77,"column":24},"end":{"line":77,"column":25}},"loc":{"start":{"line":77,"column":36},"end":{"line":82,"column":1}},"line":77},"8":{"name":"(anonymous_8)","decl":{"start":{"line":84,"column":21},"end":{"line":84,"column":22}},"loc":{"start":{"line":84,"column":33},"end":{"line":88,"column":1}},"line":84},"9":{"name":"(anonymous_9)","decl":{"start":{"line":90,"column":26},"end":{"line":90,"column":27}},"loc":{"start":{"line":90,"column":38},"end":{"line":233,"column":1}},"line":90},"10":{"name":"(anonymous_10)","decl":{"start":{"line":108,"column":22},"end":{"line":108,"column":23}},"loc":{"start":{"line":108,"column":34},"end":{"line":111,"column":5}},"line":108},"11":{"name":"(anonymous_11)","decl":{"start":{"line":142,"column":41},"end":{"line":142,"column":42}},"loc":{"start":{"line":142,"column":54},"end":{"line":144,"column":3}},"line":142},"12":{"name":"(anonymous_12)","decl":{"start":{"line":195,"column":20},"end":{"line":195,"column":21}},"loc":{"start":{"line":195,"column":33},"end":{"line":197,"column":3}},"line":195},"13":{"name":"(anonymous_13)","decl":{"start":{"line":199,"column":22},"end":{"line":199,"column":23}},"loc":{"start":{"line":199,"column":34},"end":{"line":205,"column":3}},"line":199},"14":{"name":"(anonymous_14)","decl":{"start":{"line":200,"column":30},"end":{"line":200,"column":31}},"loc":{"start":{"line":200,"column":42},"end":{"line":202,"column":5}},"line":200},"15":{"name":"nextEntry","decl":{"start":{"line":209,"column":11},"end":{"line":209,"column":20}},"loc":{"start":{"line":209,"column":24},"end":{"line":218,"column":3}},"line":209},"16":{"name":"(anonymous_16)","decl":{"start":{"line":220,"column":21},"end":{"line":220,"column":22}},"loc":{"start":{"line":220,"column":35},"end":{"line":223,"column":3}},"line":220},"17":{"name":"(anonymous_17)","decl":{"start":{"line":235,"column":25},"end":{"line":235,"column":26}},"loc":{"start":{"line":235,"column":37},"end":{"line":235,"column":39}},"line":235},"18":{"name":"(anonymous_18)","decl":{"start":{"line":236,"column":23},"end":{"line":236,"column":24}},"loc":{"start":{"line":236,"column":35},"end":{"line":236,"column":37}},"line":236}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"type":"if","locations":[{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},{"start":{"line":21,"column":2},"end":{"line":21,"column":51}}],"line":21},"1":{"loc":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"type":"if","locations":[{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},{"start":{"line":23,"column":2},"end":{"line":24,"column":32}}],"line":23},"2":{"loc":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},{"start":{"line":37,"column":4},"end":{"line":37,"column":41}}],"line":37},"3":{"loc":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"type":"if","locations":[{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},{"start":{"line":48,"column":2},"end":{"line":48,"column":29}}],"line":48},"4":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},{"start":{"line":60,"column":2},"end":{"line":60,"column":68}}],"line":60},"5":{"loc":{"start":{"line":60,"column":6},"end":{"line":60,"column":38}},"type":"binary-expr","locations":[{"start":{"line":60,"column":6},"end":{"line":60,"column":18}},{"start":{"line":60,"column":22},"end":{"line":60,"column":38}}],"line":60},"6":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},{"start":{"line":62,"column":2},"end":{"line":62,"column":72}}],"line":62},"7":{"loc":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},{"start":{"line":73,"column":2},"end":{"line":73,"column":52}}],"line":73},"8":{"loc":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"type":"if","locations":[{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},{"start":{"line":79,"column":2},"end":{"line":79,"column":53}}],"line":79},"9":{"loc":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"type":"if","locations":[{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},{"start":{"line":92,"column":2},"end":{"line":94,"column":3}}],"line":92},"10":{"loc":{"start":{"line":92,"column":6},"end":{"line":92,"column":34}},"type":"binary-expr","locations":[{"start":{"line":92,"column":6},"end":{"line":92,"column":16}},{"start":{"line":92,"column":20},"end":{"line":92,"column":34}}],"line":92},"11":{"loc":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},{"start":{"line":98,"column":2},"end":{"line":103,"column":3}}],"line":98},"12":{"loc":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},{"start":{"line":99,"column":4},"end":{"line":101,"column":5}}],"line":99},"13":{"loc":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"type":"if","locations":[{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},{"start":{"line":105,"column":2},"end":{"line":113,"column":3}}],"line":105},"14":{"loc":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"type":"if","locations":[{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},{"start":{"line":117,"column":2},"end":{"line":124,"column":3}}],"line":117},"15":{"loc":{"start":{"line":134,"column":27},"end":{"line":134,"column":46}},"type":"binary-expr","locations":[{"start":{"line":134,"column":27},"end":{"line":134,"column":37}},{"start":{"line":134,"column":41},"end":{"line":134,"column":46}}],"line":134},"16":{"loc":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"type":"if","locations":[{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},{"start":{"line":135,"column":2},"end":{"line":138,"column":3}}],"line":135},"17":{"loc":{"start":{"line":135,"column":6},"end":{"line":135,"column":72}},"type":"binary-expr","locations":[{"start":{"line":135,"column":6},"end":{"line":135,"column":16}},{"start":{"line":135,"column":20},"end":{"line":135,"column":39}},{"start":{"line":135,"column":43},"end":{"line":135,"column":53}},{"start":{"line":135,"column":57},"end":{"line":135,"column":72}}],"line":135},"18":{"loc":{"start":{"line":142,"column":14},"end":{"line":142,"column":31}},"type":"binary-expr","locations":[{"start":{"line":142,"column":14},"end":{"line":142,"column":25}},{"start":{"line":142,"column":29},"end":{"line":142,"column":31}}],"line":142},"19":{"loc":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"type":"if","locations":[{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},{"start":{"line":146,"column":2},"end":{"line":146,"column":52}}],"line":146},"20":{"loc":{"start":{"line":148,"column":36},"end":{"line":148,"column":52}},"type":"binary-expr","locations":[{"start":{"line":148,"column":36},"end":{"line":148,"column":46}},{"start":{"line":148,"column":50},"end":{"line":148,"column":52}}],"line":148},"21":{"loc":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"type":"if","locations":[{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},{"start":{"line":151,"column":2},"end":{"line":153,"column":3}}],"line":151},"22":{"loc":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"type":"if","locations":[{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},{"start":{"line":155,"column":2},"end":{"line":156,"column":29}}],"line":155},"23":{"loc":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"type":"switch","locations":[{"start":{"line":160,"column":4},"end":{"line":161,"column":12}},{"start":{"line":163,"column":4},"end":{"line":166,"column":11}},{"start":{"line":168,"column":4},"end":{"line":172,"column":11}},{"start":{"line":174,"column":4},"end":{"line":178,"column":11}}],"line":158},"24":{"loc":{"start":{"line":170,"column":24},"end":{"line":170,"column":54}},"type":"binary-expr","locations":[{"start":{"line":170,"column":24},"end":{"line":170,"column":47}},{"start":{"line":170,"column":51},"end":{"line":170,"column":54}}],"line":170},"25":{"loc":{"start":{"line":176,"column":24},"end":{"line":176,"column":74}},"type":"binary-expr","locations":[{"start":{"line":176,"column":24},"end":{"line":176,"column":67}},{"start":{"line":176,"column":71},"end":{"line":176,"column":74}}],"line":176},"26":{"loc":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"type":"if","locations":[{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},{"start":{"line":204,"column":4},"end":{"line":204,"column":44}}],"line":204},"27":{"loc":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"type":"if","locations":[{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},{"start":{"line":210,"column":4},"end":{"line":210,"column":21}}],"line":210},"28":{"loc":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"type":"if","locations":[{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},{"start":{"line":227,"column":2},"end":{"line":230,"column":3}}],"line":227}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":512,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":1,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":0,"52":0,"53":0,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":0,"63":0,"64":1,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":1,"134":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0,0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0,0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"8beb16ccde52e484aa1dd87f5ece33d696c808ab","contentHash":"7bb2b7ebe1111c0deefbf9a61d17bf9d2dbe951adb585db96f9d89663ce5909d"},"/Users/isaacs/dev/js/tar/lib/entry-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":28}},"1":{"start":{"line":3,"column":10},"end":{"line":3,"column":30}},"2":{"start":{"line":4,"column":16},"end":{"line":4,"column":38}},"3":{"start":{"line":5,"column":12},"end":{"line":5,"column":33}},"4":{"start":{"line":6,"column":15},"end":{"line":6,"column":34}},"5":{"start":{"line":7,"column":18},"end":{"line":7,"column":41}},"6":{"start":{"line":9,"column":13},"end":{"line":9,"column":37}},"7":{"start":{"line":10,"column":10},"end":{"line":10,"column":12}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"9":{"start":{"line":15,"column":11},"end":{"line":15,"column":15}},"10":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"11":{"start":{"line":18,"column":4},"end":{"line":18,"column":33}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":20}},"13":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"14":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":35}},"16":{"start":{"line":28,"column":2},"end":{"line":30,"column":4}},"17":{"start":{"line":29,"column":4},"end":{"line":29,"column":22}},"18":{"start":{"line":32,"column":2},"end":{"line":34,"column":4}},"19":{"start":{"line":33,"column":4},"end":{"line":33,"column":20}},"20":{"start":{"line":36,"column":2},"end":{"line":39,"column":4}},"21":{"start":{"line":37,"column":4},"end":{"line":37,"column":18}},"22":{"start":{"line":38,"column":4},"end":{"line":38,"column":20}},"23":{"start":{"line":41,"column":2},"end":{"line":41,"column":18}},"24":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"25":{"start":{"line":43,"column":4},"end":{"line":43,"column":18}},"26":{"start":{"line":45,"column":2},"end":{"line":45,"column":25}},"27":{"start":{"line":46,"column":2},"end":{"line":46,"column":23}},"28":{"start":{"line":47,"column":2},"end":{"line":47,"column":22}},"29":{"start":{"line":49,"column":2},"end":{"line":49,"column":17}},"30":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"31":{"start":{"line":51,"column":2},"end":{"line":51,"column":18}},"32":{"start":{"line":53,"column":2},"end":{"line":55,"column":4}},"33":{"start":{"line":54,"column":4},"end":{"line":54,"column":17}},"34":{"start":{"line":58,"column":0},"end":{"line":65,"column":1}},"35":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"36":{"start":{"line":60,"column":19},"end":{"line":60,"column":74}},"37":{"start":{"line":61,"column":2},"end":{"line":61,"column":22}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":17}},"39":{"start":{"line":63,"column":2},"end":{"line":63,"column":43}},"40":{"start":{"line":64,"column":2},"end":{"line":64,"column":25}},"41":{"start":{"line":67,"column":0},"end":{"line":74,"column":1}},"42":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"43":{"start":{"line":69,"column":9},"end":{"line":69,"column":29}},"44":{"start":{"line":70,"column":2},"end":{"line":70,"column":24}},"45":{"start":{"line":71,"column":2},"end":{"line":71,"column":20}},"46":{"start":{"line":72,"column":2},"end":{"line":72,"column":17}},"47":{"start":{"line":73,"column":2},"end":{"line":73,"column":43}},"48":{"start":{"line":76,"column":0},"end":{"line":80,"column":1}},"49":{"start":{"line":78,"column":2},"end":{"line":78,"column":21}},"50":{"start":{"line":79,"column":2},"end":{"line":79,"column":20}},"51":{"start":{"line":82,"column":0},"end":{"line":87,"column":1}},"52":{"start":{"line":84,"column":2},"end":{"line":84,"column":22}},"53":{"start":{"line":85,"column":2},"end":{"line":85,"column":21}},"54":{"start":{"line":86,"column":2},"end":{"line":86,"column":17}},"55":{"start":{"line":89,"column":0},"end":{"line":98,"column":1}},"56":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"57":{"start":{"line":91,"column":20},"end":{"line":91,"column":69}},"58":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"59":{"start":{"line":95,"column":20},"end":{"line":95,"column":30}},"60":{"start":{"line":97,"column":2},"end":{"line":97,"column":31}},"61":{"start":{"line":100,"column":0},"end":{"line":126,"column":1}},"62":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"63":{"start":{"line":102,"column":23},"end":{"line":102,"column":29}},"64":{"start":{"line":103,"column":2},"end":{"line":103,"column":24}},"65":{"start":{"line":105,"column":20},"end":{"line":105,"column":48}},"66":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"67":{"start":{"line":108,"column":13},"end":{"line":108,"column":17}},"68":{"start":{"line":110,"column":4},"end":{"line":111,"column":44}},"69":{"start":{"line":113,"column":4},"end":{"line":120,"column":12}},"70":{"start":{"line":115,"column":8},"end":{"line":115,"column":26}},"71":{"start":{"line":118,"column":8},"end":{"line":118,"column":28}},"72":{"start":{"line":124,"column":2},"end":{"line":124,"column":32}},"73":{"start":{"line":125,"column":2},"end":{"line":125,"column":21}},"74":{"start":{"line":128,"column":0},"end":{"line":167,"column":1}},"75":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"76":{"start":{"line":131,"column":4},"end":{"line":131,"column":18}},"77":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"78":{"start":{"line":136,"column":4},"end":{"line":136,"column":10}},"79":{"start":{"line":139,"column":2},"end":{"line":139,"column":25}},"80":{"start":{"line":141,"column":12},"end":{"line":141,"column":24}},"81":{"start":{"line":142,"column":2},"end":{"line":159,"column":3}},"82":{"start":{"line":142,"column":15},"end":{"line":142,"column":16}},"83":{"start":{"line":145,"column":12},"end":{"line":145,"column":18}},"84":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"85":{"start":{"line":147,"column":19},"end":{"line":147,"column":37}},"86":{"start":{"line":148,"column":9},"end":{"line":148,"column":30}},"87":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"88":{"start":{"line":152,"column":6},"end":{"line":152,"column":30}},"89":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"90":{"start":{"line":154,"column":8},"end":{"line":154,"column":30}},"91":{"start":{"line":155,"column":8},"end":{"line":155,"column":39}},"92":{"start":{"line":157,"column":6},"end":{"line":157,"column":12}},"93":{"start":{"line":162,"column":2},"end":{"line":162,"column":25}},"94":{"start":{"line":163,"column":2},"end":{"line":163,"column":26}},"95":{"start":{"line":166,"column":2},"end":{"line":166,"column":20}},"96":{"start":{"line":169,"column":0},"end":{"line":169,"column":46}}},"fnMap":{"0":{"name":"EntryWriter","decl":{"start":{"line":14,"column":9},"end":{"line":14,"column":20}},"loc":{"start":{"line":14,"column":29},"end":{"line":56,"column":1}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":28,"column":24},"end":{"line":28,"column":25}},"loc":{"start":{"line":28,"column":37},"end":{"line":30,"column":3}},"line":28},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":25},"end":{"line":32,"column":26}},"loc":{"start":{"line":32,"column":37},"end":{"line":34,"column":3}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":23},"end":{"line":36,"column":24}},"loc":{"start":{"line":36,"column":35},"end":{"line":39,"column":3}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":28},"end":{"line":55,"column":3}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":58,"column":30},"end":{"line":58,"column":31}},"loc":{"start":{"line":58,"column":43},"end":{"line":65,"column":1}},"line":58},"6":{"name":"(anonymous_6)","decl":{"start":{"line":67,"column":28},"end":{"line":67,"column":29}},"loc":{"start":{"line":67,"column":41},"end":{"line":74,"column":1}},"line":67},"7":{"name":"(anonymous_7)","decl":{"start":{"line":76,"column":30},"end":{"line":76,"column":31}},"loc":{"start":{"line":76,"column":42},"end":{"line":80,"column":1}},"line":76},"8":{"name":"(anonymous_8)","decl":{"start":{"line":82,"column":31},"end":{"line":82,"column":32}},"loc":{"start":{"line":82,"column":43},"end":{"line":87,"column":1}},"line":82},"9":{"name":"(anonymous_9)","decl":{"start":{"line":89,"column":28},"end":{"line":89,"column":29}},"loc":{"start":{"line":89,"column":45},"end":{"line":98,"column":1}},"line":89},"10":{"name":"(anonymous_10)","decl":{"start":{"line":100,"column":32},"end":{"line":100,"column":33}},"loc":{"start":{"line":100,"column":44},"end":{"line":126,"column":1}},"line":100},"11":{"name":"(anonymous_11)","decl":{"start":{"line":114,"column":18},"end":{"line":114,"column":19}},"loc":{"start":{"line":114,"column":31},"end":{"line":116,"column":7}},"line":114},"12":{"name":"(anonymous_12)","decl":{"start":{"line":117,"column":19},"end":{"line":117,"column":20}},"loc":{"start":{"line":117,"column":33},"end":{"line":119,"column":7}},"line":117},"13":{"name":"(anonymous_13)","decl":{"start":{"line":128,"column":33},"end":{"line":128,"column":34}},"loc":{"start":{"line":128,"column":45},"end":{"line":167,"column":1}},"line":128},"14":{"name":"(anonymous_14)","decl":{"start":{"line":169,"column":32},"end":{"line":169,"column":33}},"loc":{"start":{"line":169,"column":44},"end":{"line":169,"column":46}},"line":169}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},{"start":{"line":17,"column":2},"end":{"line":19,"column":3}}],"line":17},"1":{"loc":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"type":"if","locations":[{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},{"start":{"line":42,"column":2},"end":{"line":44,"column":3}}],"line":42},"2":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},{"start":{"line":60,"column":2},"end":{"line":60,"column":74}}],"line":60},"3":{"loc":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"type":"if","locations":[{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},{"start":{"line":69,"column":2},"end":{"line":69,"column":29}}],"line":69},"4":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},{"start":{"line":91,"column":2},"end":{"line":91,"column":69}}],"line":91},"5":{"loc":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"type":"if","locations":[{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},{"start":{"line":95,"column":2},"end":{"line":95,"column":30}}],"line":95},"6":{"loc":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"type":"if","locations":[{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},{"start":{"line":102,"column":2},"end":{"line":102,"column":29}}],"line":102},"7":{"loc":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"type":"if","locations":[{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},{"start":{"line":107,"column":2},"end":{"line":121,"column":3}}],"line":107},"8":{"loc":{"start":{"line":107,"column":6},"end":{"line":107,"column":44}},"type":"binary-expr","locations":[{"start":{"line":107,"column":6},"end":{"line":107,"column":29}},{"start":{"line":107,"column":33},"end":{"line":107,"column":44}}],"line":107},"9":{"loc":{"start":{"line":110,"column":27},"end":{"line":111,"column":44}},"type":"binary-expr","locations":[{"start":{"line":110,"column":27},"end":{"line":110,"column":47}},{"start":{"line":111,"column":6},"end":{"line":111,"column":44}}],"line":110},"10":{"loc":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"type":"if","locations":[{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},{"start":{"line":130,"column":2},"end":{"line":132,"column":3}}],"line":130},"11":{"loc":{"start":{"line":130,"column":6},"end":{"line":130,"column":37}},"type":"binary-expr","locations":[{"start":{"line":130,"column":6},"end":{"line":130,"column":22}},{"start":{"line":130,"column":26},"end":{"line":130,"column":37}}],"line":130},"12":{"loc":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"type":"if","locations":[{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},{"start":{"line":134,"column":2},"end":{"line":137,"column":3}}],"line":134},"13":{"loc":{"start":{"line":134,"column":6},"end":{"line":134,"column":38}},"type":"binary-expr","locations":[{"start":{"line":134,"column":6},"end":{"line":134,"column":18}},{"start":{"line":134,"column":22},"end":{"line":134,"column":38}}],"line":134},"14":{"loc":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},{"start":{"line":147,"column":4},"end":{"line":148,"column":30}}],"line":147},"15":{"loc":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},{"start":{"line":150,"column":4},"end":{"line":158,"column":5}}],"line":150},"16":{"loc":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"type":"if","locations":[{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},{"start":{"line":153,"column":6},"end":{"line":156,"column":7}}],"line":153}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":1,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":1,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":1,"49":0,"50":0,"51":1,"52":0,"53":0,"54":0,"55":1,"56":0,"57":0,"58":0,"59":0,"60":0,"61":1,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":1,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3e169418508e031df78186ff63b5fa5aa2484ab8","contentHash":"84191ed4732b6763ae8701256051735aebbe5e95c932c15bef34da01b33ba1a0"},"/Users/isaacs/dev/js/tar/lib/entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry.js","statementMap":{"0":{"start":{"line":7,"column":0},"end":{"line":7,"column":22}},"1":{"start":{"line":9,"column":16},"end":{"line":9,"column":38}},"2":{"start":{"line":10,"column":10},"end":{"line":10,"column":27}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":33}},"4":{"start":{"line":12,"column":13},"end":{"line":12,"column":37}},"5":{"start":{"line":13,"column":15},"end":{"line":13,"column":34}},"6":{"start":{"line":14,"column":14},"end":{"line":14,"column":41}},"7":{"start":{"line":17,"column":2},"end":{"line":17,"column":19}},"8":{"start":{"line":18,"column":2},"end":{"line":18,"column":22}},"9":{"start":{"line":19,"column":2},"end":{"line":19,"column":22}},"10":{"start":{"line":21,"column":2},"end":{"line":21,"column":25}},"11":{"start":{"line":22,"column":2},"end":{"line":22,"column":22}},"12":{"start":{"line":23,"column":2},"end":{"line":23,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":22}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":21}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":21}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":21}},"17":{"start":{"line":28,"column":2},"end":{"line":28,"column":18}},"18":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"19":{"start":{"line":30,"column":2},"end":{"line":30,"column":20}},"20":{"start":{"line":32,"column":2},"end":{"line":32,"column":36}},"21":{"start":{"line":34,"column":2},"end":{"line":34,"column":17}},"22":{"start":{"line":35,"column":2},"end":{"line":35,"column":23}},"23":{"start":{"line":36,"column":2},"end":{"line":36,"column":33}},"24":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"25":{"start":{"line":41,"column":11},"end":{"line":41,"column":15}},"26":{"start":{"line":42,"column":2},"end":{"line":44,"column":4}},"27":{"start":{"line":43,"column":4},"end":{"line":43,"column":29}},"28":{"start":{"line":46,"column":2},"end":{"line":46,"column":18}},"29":{"start":{"line":49,"column":0},"end":{"line":49,"column":23}},"30":{"start":{"line":51,"column":0},"end":{"line":78,"column":1}},"31":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"32":{"start":{"line":52,"column":20},"end":{"line":52,"column":65}},"33":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"34":{"start":{"line":54,"column":4},"end":{"line":54,"column":40}},"35":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"36":{"start":{"line":60,"column":4},"end":{"line":60,"column":35}},"37":{"start":{"line":62,"column":2},"end":{"line":62,"column":29}},"38":{"start":{"line":65,"column":11},"end":{"line":65,"column":25}},"39":{"start":{"line":66,"column":2},"end":{"line":66,"column":21}},"40":{"start":{"line":67,"column":2},"end":{"line":67,"column":19}},"41":{"start":{"line":69,"column":2},"end":{"line":69,"column":14}},"42":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"43":{"start":{"line":73,"column":4},"end":{"line":73,"column":26}},"44":{"start":{"line":74,"column":4},"end":{"line":74,"column":16}},"45":{"start":{"line":77,"column":2},"end":{"line":77,"column":13}},"46":{"start":{"line":80,"column":0},"end":{"line":84,"column":1}},"47":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"48":{"start":{"line":81,"column":9},"end":{"line":81,"column":22}},"49":{"start":{"line":82,"column":2},"end":{"line":82,"column":21}},"50":{"start":{"line":83,"column":2},"end":{"line":83,"column":14}},"51":{"start":{"line":86,"column":0},"end":{"line":89,"column":1}},"52":{"start":{"line":87,"column":2},"end":{"line":87,"column":21}},"53":{"start":{"line":88,"column":2},"end":{"line":88,"column":20}},"54":{"start":{"line":91,"column":0},"end":{"line":97,"column":1}},"55":{"start":{"line":93,"column":2},"end":{"line":93,"column":21}},"56":{"start":{"line":94,"column":2},"end":{"line":94,"column":22}},"57":{"start":{"line":95,"column":2},"end":{"line":95,"column":14}},"58":{"start":{"line":96,"column":2},"end":{"line":96,"column":41}},"59":{"start":{"line":100,"column":0},"end":{"line":139,"column":1}},"60":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"61":{"start":{"line":103,"column":52},"end":{"line":103,"column":58}},"62":{"start":{"line":107,"column":2},"end":{"line":107,"column":22}},"63":{"start":{"line":110,"column":2},"end":{"line":113,"column":3}},"64":{"start":{"line":111,"column":16},"end":{"line":111,"column":43}},"65":{"start":{"line":112,"column":4},"end":{"line":112,"column":28}},"66":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"67":{"start":{"line":117,"column":4},"end":{"line":117,"column":57}},"68":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"69":{"start":{"line":119,"column":6},"end":{"line":119,"column":29}},"70":{"start":{"line":120,"column":6},"end":{"line":120,"column":24}},"71":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"72":{"start":{"line":123,"column":6},"end":{"line":123,"column":24}},"73":{"start":{"line":124,"column":6},"end":{"line":124,"column":22}},"74":{"start":{"line":130,"column":12},"end":{"line":130,"column":29}},"75":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"76":{"start":{"line":132,"column":4},"end":{"line":132,"column":36}},"77":{"start":{"line":133,"column":4},"end":{"line":133,"column":22}},"78":{"start":{"line":134,"column":4},"end":{"line":134,"column":25}},"79":{"start":{"line":135,"column":4},"end":{"line":135,"column":40}},"80":{"start":{"line":138,"column":2},"end":{"line":138,"column":23}},"81":{"start":{"line":141,"column":0},"end":{"line":211,"column":1}},"82":{"start":{"line":143,"column":15},"end":{"line":143,"column":27}},"83":{"start":{"line":144,"column":17},"end":{"line":144,"column":31}},"84":{"start":{"line":145,"column":15},"end":{"line":145,"column":27}},"85":{"start":{"line":146,"column":14},"end":{"line":146,"column":24}},"86":{"start":{"line":149,"column":15},"end":{"line":149,"column":25}},"87":{"start":{"line":150,"column":2},"end":{"line":154,"column":3}},"88":{"start":{"line":150,"column":15},"end":{"line":150,"column":16}},"89":{"start":{"line":151,"column":16},"end":{"line":151,"column":25}},"90":{"start":{"line":152,"column":14},"end":{"line":152,"column":27}},"91":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"92":{"start":{"line":153,"column":36},"end":{"line":153,"column":54}},"93":{"start":{"line":158,"column":3},"end":{"line":165,"column":3}},"94":{"start":{"line":159,"column":4},"end":{"line":161,"column":6}},"95":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"96":{"start":{"line":160,"column":39},"end":{"line":160,"column":54}},"97":{"start":{"line":165,"column":3},"end":{"line":173,"column":3}},"98":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"99":{"start":{"line":167,"column":6},"end":{"line":167,"column":40}},"100":{"start":{"line":173,"column":3},"end":{"line":177,"column":4}},"101":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"102":{"start":{"line":175,"column":6},"end":{"line":175,"column":42}},"103":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"104":{"start":{"line":184,"column":6},"end":{"line":184,"column":19}},"105":{"start":{"line":185,"column":6},"end":{"line":185,"column":11}},"106":{"start":{"line":188,"column":6},"end":{"line":188,"column":24}},"107":{"start":{"line":189,"column":6},"end":{"line":189,"column":11}},"108":{"start":{"line":192,"column":6},"end":{"line":192,"column":22}},"109":{"start":{"line":193,"column":6},"end":{"line":193,"column":11}},"110":{"start":{"line":202,"column":6},"end":{"line":202,"column":34}},"111":{"start":{"line":205,"column":2},"end":{"line":205,"column":18}},"112":{"start":{"line":206,"column":2},"end":{"line":206,"column":24}},"113":{"start":{"line":207,"column":2},"end":{"line":207,"column":24}},"114":{"start":{"line":210,"column":2},"end":{"line":210,"column":30}},"115":{"start":{"line":215,"column":0},"end":{"line":217,"column":1}},"116":{"start":{"line":216,"column":2},"end":{"line":216,"column":20}},"117":{"start":{"line":219,"column":0},"end":{"line":219,"column":35}},"118":{"start":{"line":220,"column":0},"end":{"line":220,"column":37}}},"fnMap":{"0":{"name":"Entry","decl":{"start":{"line":16,"column":9},"end":{"line":16,"column":14}},"loc":{"start":{"line":16,"column":42},"end":{"line":47,"column":1}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":42,"column":36},"end":{"line":42,"column":37}},"loc":{"start":{"line":42,"column":49},"end":{"line":44,"column":3}},"line":42},"2":{"name":"(anonymous_2)","decl":{"start":{"line":51,"column":24},"end":{"line":51,"column":25}},"loc":{"start":{"line":51,"column":37},"end":{"line":78,"column":1}},"line":51},"3":{"name":"(anonymous_3)","decl":{"start":{"line":80,"column":22},"end":{"line":80,"column":23}},"loc":{"start":{"line":80,"column":35},"end":{"line":84,"column":1}},"line":80},"4":{"name":"(anonymous_4)","decl":{"start":{"line":86,"column":24},"end":{"line":86,"column":25}},"loc":{"start":{"line":86,"column":36},"end":{"line":89,"column":1}},"line":86},"5":{"name":"(anonymous_5)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":1}},"line":91},"6":{"name":"(anonymous_6)","decl":{"start":{"line":100,"column":24},"end":{"line":100,"column":25}},"loc":{"start":{"line":100,"column":36},"end":{"line":139,"column":1}},"line":100},"7":{"name":"(anonymous_7)","decl":{"start":{"line":141,"column":28},"end":{"line":141,"column":29}},"loc":{"start":{"line":141,"column":40},"end":{"line":211,"column":1}},"line":141},"8":{"name":"(anonymous_8)","decl":{"start":{"line":158,"column":30},"end":{"line":158,"column":31}},"loc":{"start":{"line":158,"column":43},"end":{"line":162,"column":3}},"line":158},"9":{"name":"(anonymous_9)","decl":{"start":{"line":159,"column":27},"end":{"line":159,"column":28}},"loc":{"start":{"line":159,"column":40},"end":{"line":161,"column":5}},"line":159},"10":{"name":"(anonymous_10)","decl":{"start":{"line":165,"column":32},"end":{"line":165,"column":33}},"loc":{"start":{"line":165,"column":45},"end":{"line":169,"column":3}},"line":165},"11":{"name":"(anonymous_11)","decl":{"start":{"line":173,"column":39},"end":{"line":173,"column":40}},"loc":{"start":{"line":173,"column":52},"end":{"line":177,"column":3}},"line":173},"12":{"name":"(anonymous_12)","decl":{"start":{"line":215,"column":24},"end":{"line":215,"column":25}},"loc":{"start":{"line":215,"column":34},"end":{"line":217,"column":1}},"line":215}},"branchMap":{"0":{"loc":{"start":{"line":36,"column":19},"end":{"line":36,"column":33}},"type":"binary-expr","locations":[{"start":{"line":36,"column":19},"end":{"line":36,"column":27}},{"start":{"line":36,"column":31},"end":{"line":36,"column":33}}],"line":36},"1":{"loc":{"start":{"line":42,"column":14},"end":{"line":42,"column":26}},"type":"binary-expr","locations":[{"start":{"line":42,"column":14},"end":{"line":42,"column":20}},{"start":{"line":42,"column":24},"end":{"line":42,"column":26}}],"line":42},"2":{"loc":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"type":"if","locations":[{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},{"start":{"line":52,"column":2},"end":{"line":52,"column":65}}],"line":52},"3":{"loc":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"type":"if","locations":[{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},{"start":{"line":53,"column":2},"end":{"line":55,"column":3}}],"line":53},"4":{"loc":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},{"start":{"line":59,"column":2},"end":{"line":61,"column":3}}],"line":59},"5":{"loc":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"type":"if","locations":[{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},{"start":{"line":72,"column":2},"end":{"line":75,"column":3}}],"line":72},"6":{"loc":{"start":{"line":72,"column":6},"end":{"line":72,"column":28}},"type":"binary-expr","locations":[{"start":{"line":72,"column":6},"end":{"line":72,"column":18}},{"start":{"line":72,"column":22},"end":{"line":72,"column":28}}],"line":72},"7":{"loc":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"type":"if","locations":[{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},{"start":{"line":81,"column":2},"end":{"line":81,"column":22}}],"line":81},"8":{"loc":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"type":"if","locations":[{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},{"start":{"line":103,"column":2},"end":{"line":103,"column":58}}],"line":103},"9":{"loc":{"start":{"line":103,"column":6},"end":{"line":103,"column":50}},"type":"binary-expr","locations":[{"start":{"line":103,"column":6},"end":{"line":103,"column":18}},{"start":{"line":103,"column":22},"end":{"line":103,"column":35}},{"start":{"line":103,"column":39},"end":{"line":103,"column":50}}],"line":103},"10":{"loc":{"start":{"line":110,"column":9},"end":{"line":110,"column":54}},"type":"binary-expr","locations":[{"start":{"line":110,"column":9},"end":{"line":110,"column":37}},{"start":{"line":110,"column":41},"end":{"line":110,"column":54}}],"line":110},"11":{"loc":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"type":"if","locations":[{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},{"start":{"line":116,"column":2},"end":{"line":126,"column":3}}],"line":116},"12":{"loc":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"type":"if","locations":[{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},{"start":{"line":118,"column":4},"end":{"line":121,"column":5}}],"line":118},"13":{"loc":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},{"start":{"line":122,"column":4},"end":{"line":125,"column":5}}],"line":122},"14":{"loc":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"type":"if","locations":[{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},{"start":{"line":131,"column":2},"end":{"line":136,"column":3}}],"line":131},"15":{"loc":{"start":{"line":131,"column":6},"end":{"line":131,"column":45}},"type":"binary-expr","locations":[{"start":{"line":131,"column":6},"end":{"line":131,"column":26}},{"start":{"line":131,"column":30},"end":{"line":131,"column":45}}],"line":131},"16":{"loc":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"type":"if","locations":[{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},{"start":{"line":153,"column":4},"end":{"line":153,"column":54}}],"line":153},"17":{"loc":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"type":"if","locations":[{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},{"start":{"line":160,"column":6},"end":{"line":160,"column":54}}],"line":160},"18":{"loc":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"type":"if","locations":[{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},{"start":{"line":166,"column":4},"end":{"line":168,"column":5}}],"line":166},"19":{"loc":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"type":"if","locations":[{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},{"start":{"line":174,"column":4},"end":{"line":176,"column":5}}],"line":174},"20":{"loc":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"type":"switch","locations":[{"start":{"line":182,"column":4},"end":{"line":182,"column":19}},{"start":{"line":183,"column":4},"end":{"line":185,"column":11}},{"start":{"line":187,"column":4},"end":{"line":189,"column":11}},{"start":{"line":191,"column":4},"end":{"line":193,"column":11}},{"start":{"line":195,"column":4},"end":{"line":195,"column":16}},{"start":{"line":196,"column":4},"end":{"line":196,"column":24}},{"start":{"line":197,"column":4},"end":{"line":197,"column":27}},{"start":{"line":198,"column":4},"end":{"line":198,"column":23}},{"start":{"line":199,"column":4},"end":{"line":199,"column":21}},{"start":{"line":200,"column":4},"end":{"line":200,"column":16}},{"start":{"line":201,"column":4},"end":{"line":202,"column":34}}],"line":181}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":17,"8":17,"9":17,"10":17,"11":17,"12":17,"13":17,"14":17,"15":17,"16":17,"17":17,"18":17,"19":17,"20":17,"21":17,"22":17,"23":17,"24":17,"25":17,"26":17,"27":0,"28":17,"29":1,"30":1,"31":15,"32":0,"33":15,"34":0,"35":15,"36":14,"37":15,"38":15,"39":15,"40":15,"41":15,"42":15,"43":0,"44":0,"45":15,"46":1,"47":17,"48":0,"49":17,"50":17,"51":1,"52":0,"53":0,"54":1,"55":0,"56":0,"57":0,"58":0,"59":1,"60":32,"61":0,"62":32,"63":32,"64":15,"65":15,"66":32,"67":32,"68":32,"69":0,"70":0,"71":32,"72":17,"73":17,"74":32,"75":32,"76":0,"77":0,"78":0,"79":0,"80":32,"81":1,"82":17,"83":17,"84":17,"85":17,"86":17,"87":17,"88":17,"89":289,"90":289,"91":289,"92":242,"93":17,"94":34,"95":29,"96":29,"97":17,"98":34,"99":34,"100":17,"101":51,"102":25,"103":17,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":17,"111":17,"112":17,"113":17,"114":17,"115":1,"116":1,"117":1,"118":1},"f":{"0":17,"1":0,"2":15,"3":17,"4":0,"5":0,"6":32,"7":17,"8":34,"9":29,"10":34,"11":51,"12":1},"b":{"0":[17,11],"1":[17,17],"2":[0,15],"3":[0,15],"4":[14,1],"5":[0,15],"6":[15,15],"7":[0,17],"8":[0,32],"9":[32,32,32],"10":[47,15],"11":[32,0],"12":[0,32],"13":[17,15],"14":[0,32],"15":[32,0],"16":[242,47],"17":[29,0],"18":[34,0],"19":[25,26],"20":[0,0,0,0,1,2,2,2,2,2,17]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"2cc4f925db2a60e89bf0743124faec4e8996dfdb","contentHash":"245d5cb2b23d975dc5b9a0ed2553c93c587727d50a7961242f50cec333c04ba9"},"/Users/isaacs/dev/js/tar/lib/global-header-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/global-header-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":35}},"1":{"start":{"line":3,"column":27},"end":{"line":3,"column":65}},"2":{"start":{"line":4,"column":15},"end":{"line":4,"column":34}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":50}},"4":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"5":{"start":{"line":10,"column":4},"end":{"line":10,"column":40}},"6":{"start":{"line":12,"column":2},"end":{"line":12,"column":40}},"7":{"start":{"line":13,"column":2},"end":{"line":13,"column":23}}},"fnMap":{"0":{"name":"GlobalHeaderWriter","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":27}},"loc":{"start":{"line":8,"column":36},"end":{"line":14,"column":1}},"line":8}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"type":"if","locations":[{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},{"start":{"line":9,"column":2},"end":{"line":11,"column":3}}],"line":9}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3d0c8589f62a5c8ccec606d52d3abd98e5627d57","contentHash":"a2570ca840cf3e44d77e15af0aee52f7c145da39b76366006f3672b9708def3e"},"/Users/isaacs/dev/js/tar/lib/parse.js":{"path":"/Users/isaacs/dev/js/tar/lib/parse.js","statementMap":{"0":{"start":{"line":6,"column":0},"end":{"line":6,"column":37}},"1":{"start":{"line":8,"column":13},"end":{"line":8,"column":30}},"2":{"start":{"line":9,"column":13},"end":{"line":9,"column":26}},"3":{"start":{"line":10,"column":18},"end":{"line":10,"column":41}},"4":{"start":{"line":11,"column":10},"end":{"line":11,"column":30}},"5":{"start":{"line":12,"column":16},"end":{"line":12,"column":38}},"6":{"start":{"line":13,"column":12},"end":{"line":13,"column":33}},"7":{"start":{"line":14,"column":18},"end":{"line":14,"column":46}},"8":{"start":{"line":15,"column":21},"end":{"line":15,"column":52}},"9":{"start":{"line":16,"column":13},"end":{"line":16,"column":33}},"10":{"start":{"line":17,"column":15},"end":{"line":17,"column":34}},"11":{"start":{"line":18,"column":14},"end":{"line":18,"column":32}},"12":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"13":{"start":{"line":28,"column":11},"end":{"line":28,"column":15}},"14":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"15":{"start":{"line":29,"column":30},"end":{"line":29,"column":48}},"16":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"17":{"start":{"line":36,"column":2},"end":{"line":36,"column":20}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":20}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":35}},"20":{"start":{"line":39,"column":2},"end":{"line":39,"column":17}},"21":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"22":{"start":{"line":41,"column":2},"end":{"line":41,"column":20}},"23":{"start":{"line":43,"column":2},"end":{"line":45,"column":4}},"24":{"start":{"line":44,"column":4},"end":{"line":44,"column":23}},"25":{"start":{"line":47,"column":2},"end":{"line":49,"column":4}},"26":{"start":{"line":48,"column":4},"end":{"line":48,"column":18}},"27":{"start":{"line":51,"column":2},"end":{"line":53,"column":4}},"28":{"start":{"line":52,"column":4},"end":{"line":52,"column":19}},"29":{"start":{"line":55,"column":2},"end":{"line":57,"column":4}},"30":{"start":{"line":56,"column":4},"end":{"line":56,"column":20}},"31":{"start":{"line":63,"column":0},"end":{"line":67,"column":1}},"32":{"start":{"line":64,"column":11},"end":{"line":64,"column":15}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"34":{"start":{"line":65,"column":31},"end":{"line":65,"column":57}},"35":{"start":{"line":66,"column":2},"end":{"line":66,"column":16}},"36":{"start":{"line":72,"column":0},"end":{"line":83,"column":1}},"37":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"38":{"start":{"line":77,"column":4},"end":{"line":79,"column":5}},"39":{"start":{"line":77,"column":17},"end":{"line":77,"column":18}},"40":{"start":{"line":77,"column":24},"end":{"line":77,"column":32}},"41":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"42":{"start":{"line":78,"column":22},"end":{"line":78,"column":62}},"43":{"start":{"line":80,"column":4},"end":{"line":80,"column":10}},"44":{"start":{"line":82,"column":2},"end":{"line":82,"column":30}},"45":{"start":{"line":85,"column":0},"end":{"line":88,"column":1}},"46":{"start":{"line":86,"column":2},"end":{"line":86,"column":20}},"47":{"start":{"line":87,"column":2},"end":{"line":87,"column":28}},"48":{"start":{"line":94,"column":0},"end":{"line":94,"column":38}},"49":{"start":{"line":96,"column":0},"end":{"line":137,"column":1}},"50":{"start":{"line":97,"column":2},"end":{"line":97,"column":59}},"51":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"52":{"start":{"line":105,"column":16},"end":{"line":105,"column":27}},"53":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"54":{"start":{"line":106,"column":22},"end":{"line":106,"column":36}},"55":{"start":{"line":108,"column":6},"end":{"line":108,"column":34}},"56":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"57":{"start":{"line":109,"column":31},"end":{"line":109,"column":51}},"58":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"59":{"start":{"line":112,"column":6},"end":{"line":112,"column":17}},"60":{"start":{"line":113,"column":6},"end":{"line":113,"column":24}},"61":{"start":{"line":117,"column":15},"end":{"line":117,"column":19}},"62":{"start":{"line":118,"column":4},"end":{"line":120,"column":5}},"63":{"start":{"line":118,"column":17},"end":{"line":118,"column":18}},"64":{"start":{"line":119,"column":6},"end":{"line":119,"column":23}},"65":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"66":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"67":{"start":{"line":128,"column":8},"end":{"line":128,"column":26}},"68":{"start":{"line":129,"column":6},"end":{"line":129,"column":29}},"69":{"start":{"line":131,"column":6},"end":{"line":131,"column":30}},"70":{"start":{"line":132,"column":6},"end":{"line":132,"column":25}},"71":{"start":{"line":136,"column":2},"end":{"line":136,"column":22}},"72":{"start":{"line":140,"column":0},"end":{"line":285,"column":1}},"73":{"start":{"line":141,"column":15},"end":{"line":141,"column":31}},"74":{"start":{"line":142,"column":13},"end":{"line":142,"column":17}},"75":{"start":{"line":147,"column":13},"end":{"line":147,"column":18}},"76":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"77":{"start":{"line":150,"column":12},"end":{"line":150,"column":41}},"78":{"start":{"line":151,"column":4},"end":{"line":151,"column":21}},"79":{"start":{"line":152,"column":4},"end":{"line":152,"column":37}},"80":{"start":{"line":153,"column":4},"end":{"line":153,"column":37}},"81":{"start":{"line":154,"column":4},"end":{"line":154,"column":32}},"82":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"83":{"start":{"line":171,"column":6},"end":{"line":171,"column":23}},"84":{"start":{"line":172,"column":6},"end":{"line":172,"column":18}},"85":{"start":{"line":173,"column":6},"end":{"line":173,"column":11}},"86":{"start":{"line":177,"column":6},"end":{"line":177,"column":32}},"87":{"start":{"line":178,"column":6},"end":{"line":183,"column":7}},"88":{"start":{"line":179,"column":8},"end":{"line":179,"column":41}},"89":{"start":{"line":180,"column":8},"end":{"line":182,"column":10}},"90":{"start":{"line":181,"column":10},"end":{"line":181,"column":43}},"91":{"start":{"line":184,"column":6},"end":{"line":184,"column":33}},"92":{"start":{"line":185,"column":6},"end":{"line":185,"column":17}},"93":{"start":{"line":186,"column":6},"end":{"line":186,"column":11}},"94":{"start":{"line":191,"column":6},"end":{"line":191,"column":32}},"95":{"start":{"line":192,"column":6},"end":{"line":194,"column":7}},"96":{"start":{"line":193,"column":8},"end":{"line":193,"column":37}},"97":{"start":{"line":195,"column":6},"end":{"line":195,"column":27}},"98":{"start":{"line":196,"column":6},"end":{"line":196,"column":17}},"99":{"start":{"line":197,"column":6},"end":{"line":197,"column":11}},"100":{"start":{"line":201,"column":6},"end":{"line":201,"column":29}},"101":{"start":{"line":202,"column":6},"end":{"line":205,"column":7}},"102":{"start":{"line":203,"column":8},"end":{"line":203,"column":45}},"103":{"start":{"line":204,"column":8},"end":{"line":204,"column":44}},"104":{"start":{"line":206,"column":6},"end":{"line":206,"column":25}},"105":{"start":{"line":207,"column":6},"end":{"line":207,"column":17}},"106":{"start":{"line":208,"column":6},"end":{"line":208,"column":11}},"107":{"start":{"line":213,"column":6},"end":{"line":213,"column":29}},"108":{"start":{"line":214,"column":6},"end":{"line":217,"column":7}},"109":{"start":{"line":215,"column":8},"end":{"line":215,"column":45}},"110":{"start":{"line":216,"column":8},"end":{"line":216,"column":40}},"111":{"start":{"line":218,"column":6},"end":{"line":218,"column":21}},"112":{"start":{"line":219,"column":6},"end":{"line":219,"column":17}},"113":{"start":{"line":220,"column":6},"end":{"line":220,"column":11}},"114":{"start":{"line":226,"column":6},"end":{"line":226,"column":23}},"115":{"start":{"line":227,"column":6},"end":{"line":227,"column":25}},"116":{"start":{"line":228,"column":6},"end":{"line":228,"column":11}},"117":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"118":{"start":{"line":233,"column":4},"end":{"line":233,"column":28}},"119":{"start":{"line":235,"column":17},"end":{"line":235,"column":29}},"120":{"start":{"line":236,"column":19},"end":{"line":236,"column":33}},"121":{"start":{"line":240,"column":4},"end":{"line":240,"column":25}},"122":{"start":{"line":242,"column":2},"end":{"line":242,"column":49}},"123":{"start":{"line":243,"column":2},"end":{"line":243,"column":19}},"124":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"125":{"start":{"line":247,"column":4},"end":{"line":249,"column":6}},"126":{"start":{"line":248,"column":6},"end":{"line":248,"column":24}},"127":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"128":{"start":{"line":252,"column":13},"end":{"line":252,"column":35}},"129":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"130":{"start":{"line":255,"column":4},"end":{"line":255,"column":23}},"131":{"start":{"line":258,"column":2},"end":{"line":258,"column":21}},"132":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"133":{"start":{"line":261,"column":4},"end":{"line":261,"column":39}},"134":{"start":{"line":264,"column":11},"end":{"line":264,"column":15}},"135":{"start":{"line":266,"column":2},"end":{"line":268,"column":4}},"136":{"start":{"line":267,"column":4},"end":{"line":267,"column":14}},"137":{"start":{"line":270,"column":2},"end":{"line":272,"column":4}},"138":{"start":{"line":271,"column":4},"end":{"line":271,"column":15}},"139":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"140":{"start":{"line":275,"column":4},"end":{"line":275,"column":29}},"141":{"start":{"line":278,"column":2},"end":{"line":278,"column":22}},"142":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"143":{"start":{"line":282,"column":4},"end":{"line":282,"column":15}},"144":{"start":{"line":283,"column":4},"end":{"line":283,"column":22}}},"fnMap":{"0":{"name":"Parse","decl":{"start":{"line":27,"column":9},"end":{"line":27,"column":14}},"loc":{"start":{"line":27,"column":18},"end":{"line":58,"column":1}},"line":27},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":25},"end":{"line":43,"column":26}},"loc":{"start":{"line":43,"column":38},"end":{"line":45,"column":3}},"line":43},"2":{"name":"(anonymous_2)","decl":{"start":{"line":47,"column":24},"end":{"line":47,"column":25}},"loc":{"start":{"line":47,"column":37},"end":{"line":49,"column":3}},"line":47},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":23},"end":{"line":51,"column":24}},"loc":{"start":{"line":51,"column":35},"end":{"line":53,"column":3}},"line":51},"4":{"name":"(anonymous_4)","decl":{"start":{"line":55,"column":25},"end":{"line":55,"column":26}},"loc":{"start":{"line":55,"column":37},"end":{"line":57,"column":3}},"line":55},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":29},"end":{"line":63,"column":30}},"loc":{"start":{"line":63,"column":41},"end":{"line":67,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":72,"column":24},"end":{"line":72,"column":25}},"loc":{"start":{"line":72,"column":37},"end":{"line":83,"column":1}},"line":72},"7":{"name":"(anonymous_7)","decl":{"start":{"line":85,"column":22},"end":{"line":85,"column":23}},"loc":{"start":{"line":85,"column":35},"end":{"line":88,"column":1}},"line":85},"8":{"name":"(anonymous_8)","decl":{"start":{"line":94,"column":24},"end":{"line":94,"column":25}},"loc":{"start":{"line":94,"column":36},"end":{"line":94,"column":38}},"line":94},"9":{"name":"(anonymous_9)","decl":{"start":{"line":96,"column":27},"end":{"line":96,"column":28}},"loc":{"start":{"line":96,"column":40},"end":{"line":137,"column":1}},"line":96},"10":{"name":"(anonymous_10)","decl":{"start":{"line":140,"column":30},"end":{"line":140,"column":31}},"loc":{"start":{"line":140,"column":43},"end":{"line":285,"column":1}},"line":140},"11":{"name":"(anonymous_11)","decl":{"start":{"line":178,"column":14},"end":{"line":178,"column":15}},"loc":{"start":{"line":178,"column":26},"end":{"line":183,"column":7}},"line":178},"12":{"name":"(anonymous_12)","decl":{"start":{"line":180,"column":42},"end":{"line":180,"column":43}},"loc":{"start":{"line":180,"column":55},"end":{"line":182,"column":9}},"line":180},"13":{"name":"(anonymous_13)","decl":{"start":{"line":192,"column":14},"end":{"line":192,"column":15}},"loc":{"start":{"line":192,"column":26},"end":{"line":194,"column":7}},"line":192},"14":{"name":"(anonymous_14)","decl":{"start":{"line":202,"column":14},"end":{"line":202,"column":15}},"loc":{"start":{"line":202,"column":26},"end":{"line":205,"column":7}},"line":202},"15":{"name":"(anonymous_15)","decl":{"start":{"line":214,"column":14},"end":{"line":214,"column":15}},"loc":{"start":{"line":214,"column":26},"end":{"line":217,"column":7}},"line":214},"16":{"name":"(anonymous_16)","decl":{"start":{"line":247,"column":21},"end":{"line":247,"column":22}},"loc":{"start":{"line":247,"column":34},"end":{"line":249,"column":5}},"line":247},"17":{"name":"(anonymous_17)","decl":{"start":{"line":266,"column":20},"end":{"line":266,"column":21}},"loc":{"start":{"line":266,"column":32},"end":{"line":268,"column":3}},"line":266},"18":{"name":"(anonymous_18)","decl":{"start":{"line":270,"column":21},"end":{"line":270,"column":22}},"loc":{"start":{"line":270,"column":33},"end":{"line":272,"column":3}},"line":270}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},{"start":{"line":29,"column":2},"end":{"line":29,"column":48}}],"line":29},"1":{"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"type":"if","locations":[{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},{"start":{"line":65,"column":2},"end":{"line":65,"column":57}}],"line":65},"2":{"loc":{"start":{"line":65,"column":6},"end":{"line":65,"column":29}},"type":"binary-expr","locations":[{"start":{"line":65,"column":6},"end":{"line":65,"column":16}},{"start":{"line":65,"column":20},"end":{"line":65,"column":29}}],"line":65},"3":{"loc":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},{"start":{"line":73,"column":2},"end":{"line":81,"column":3}}],"line":73},"4":{"loc":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"type":"if","locations":[{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},{"start":{"line":78,"column":6},"end":{"line":78,"column":62}}],"line":78},"5":{"loc":{"start":{"line":97,"column":9},"end":{"line":97,"column":30}},"type":"binary-expr","locations":[{"start":{"line":97,"column":9},"end":{"line":97,"column":10}},{"start":{"line":97,"column":14},"end":{"line":97,"column":30}}],"line":97},"6":{"loc":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"type":"if","locations":[{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},{"start":{"line":104,"column":2},"end":{"line":134,"column":3}}],"line":104},"7":{"loc":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"type":"if","locations":[{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},{"start":{"line":106,"column":4},"end":{"line":110,"column":5}}],"line":106},"8":{"loc":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"type":"if","locations":[{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},{"start":{"line":109,"column":6},"end":{"line":109,"column":51}}],"line":109},"9":{"loc":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},{"start":{"line":111,"column":4},"end":{"line":114,"column":5}}],"line":111},"10":{"loc":{"start":{"line":118,"column":20},"end":{"line":118,"column":35}},"type":"binary-expr","locations":[{"start":{"line":118,"column":20},"end":{"line":118,"column":27}},{"start":{"line":118,"column":31},"end":{"line":118,"column":35}}],"line":118},"11":{"loc":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"type":"if","locations":[{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},{"start":{"line":126,"column":4},"end":{"line":133,"column":5}}],"line":126},"12":{"loc":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"type":"if","locations":[{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},{"start":{"line":127,"column":6},"end":{"line":128,"column":26}}],"line":127},"13":{"loc":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"type":"if","locations":[{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},{"start":{"line":149,"column":2},"end":{"line":155,"column":3}}],"line":149},"14":{"loc":{"start":{"line":149,"column":6},"end":{"line":149,"column":48}},"type":"binary-expr","locations":[{"start":{"line":149,"column":6},"end":{"line":149,"column":26}},{"start":{"line":149,"column":30},"end":{"line":149,"column":48}}],"line":149},"15":{"loc":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"type":"switch","locations":[{"start":{"line":158,"column":4},"end":{"line":158,"column":16}},{"start":{"line":159,"column":4},"end":{"line":159,"column":19}},{"start":{"line":160,"column":4},"end":{"line":160,"column":16}},{"start":{"line":161,"column":4},"end":{"line":161,"column":24}},{"start":{"line":162,"column":4},"end":{"line":162,"column":27}},{"start":{"line":163,"column":4},"end":{"line":163,"column":23}},{"start":{"line":164,"column":4},"end":{"line":164,"column":21}},{"start":{"line":165,"column":4},"end":{"line":165,"column":16}},{"start":{"line":166,"column":4},"end":{"line":166,"column":26}},{"start":{"line":167,"column":4},"end":{"line":173,"column":11}},{"start":{"line":175,"column":4},"end":{"line":186,"column":11}},{"start":{"line":188,"column":4},"end":{"line":188,"column":26}},{"start":{"line":189,"column":4},"end":{"line":197,"column":11}},{"start":{"line":199,"column":4},"end":{"line":208,"column":11}},{"start":{"line":210,"column":4},"end":{"line":210,"column":31}},{"start":{"line":211,"column":4},"end":{"line":220,"column":11}},{"start":{"line":222,"column":4},"end":{"line":228,"column":11}}],"line":157},"16":{"loc":{"start":{"line":179,"column":23},"end":{"line":179,"column":41}},"type":"binary-expr","locations":[{"start":{"line":179,"column":23},"end":{"line":179,"column":35}},{"start":{"line":179,"column":39},"end":{"line":179,"column":41}}],"line":179},"17":{"loc":{"start":{"line":203,"column":25},"end":{"line":203,"column":45}},"type":"binary-expr","locations":[{"start":{"line":203,"column":25},"end":{"line":203,"column":39}},{"start":{"line":203,"column":43},"end":{"line":203,"column":45}}],"line":203},"18":{"loc":{"start":{"line":215,"column":25},"end":{"line":215,"column":45}},"type":"binary-expr","locations":[{"start":{"line":215,"column":25},"end":{"line":215,"column":39}},{"start":{"line":215,"column":43},"end":{"line":215,"column":45}}],"line":215},"19":{"loc":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"type":"if","locations":[{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},{"start":{"line":232,"column":2},"end":{"line":241,"column":3}}],"line":232},"20":{"loc":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"type":"if","locations":[{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},{"start":{"line":246,"column":2},"end":{"line":250,"column":3}}],"line":246},"21":{"loc":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"type":"if","locations":[{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},{"start":{"line":252,"column":2},"end":{"line":252,"column":35}}],"line":252},"22":{"loc":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"type":"if","locations":[{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},{"start":{"line":254,"column":2},"end":{"line":256,"column":3}}],"line":254},"23":{"loc":{"start":{"line":254,"column":6},"end":{"line":254,"column":58}},"type":"binary-expr","locations":[{"start":{"line":254,"column":6},"end":{"line":254,"column":27}},{"start":{"line":254,"column":31},"end":{"line":254,"column":58}}],"line":254},"24":{"loc":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"type":"if","locations":[{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},{"start":{"line":260,"column":2},"end":{"line":262,"column":3}}],"line":260},"25":{"loc":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"type":"if","locations":[{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},{"start":{"line":274,"column":2},"end":{"line":276,"column":3}}],"line":274},"26":{"loc":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"type":"if","locations":[{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},{"start":{"line":281,"column":2},"end":{"line":284,"column":3}}],"line":281}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":2,"14":2,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":0,"25":1,"26":36,"27":1,"28":1,"29":1,"30":0,"31":1,"32":1,"33":1,"34":0,"35":1,"36":1,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":36,"51":36,"52":17,"53":17,"54":15,"55":2,"56":2,"57":1,"58":17,"59":15,"60":15,"61":19,"62":19,"63":19,"64":1041,"65":19,"66":2,"67":1,"68":2,"69":17,"70":17,"71":36,"72":1,"73":17,"74":17,"75":17,"76":17,"77":0,"78":0,"79":0,"80":0,"81":0,"82":17,"83":10,"84":10,"85":10,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":4,"95":4,"96":4,"97":4,"98":4,"99":4,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":2,"108":2,"109":2,"110":2,"111":2,"112":2,"113":2,"114":0,"115":0,"116":0,"117":17,"118":7,"119":10,"120":10,"121":10,"122":17,"123":17,"124":17,"125":10,"126":8,"127":17,"128":7,"129":17,"130":0,"131":17,"132":17,"133":1,"134":17,"135":17,"136":0,"137":17,"138":0,"139":17,"140":0,"141":17,"142":17,"143":2,"144":2},"f":{"0":2,"1":0,"2":36,"3":1,"4":0,"5":1,"6":1,"7":1,"8":0,"9":36,"10":17,"11":0,"12":0,"13":4,"14":1,"15":2,"16":8,"17":0,"18":0},"b":{"0":[1,1],"1":[0,1],"2":[1,1],"3":[0,1],"4":[0,0],"5":[36,36],"6":[17,19],"7":[15,2],"8":[1,1],"9":[15,2],"10":[1060,1058],"11":[2,17],"12":[1,1],"13":[0,17],"14":[17,17],"15":[8,8,9,10,10,10,10,10,10,10,0,4,4,1,2,2,0],"16":[0,0],"17":[1,1],"18":[2,1],"19":[7,10],"20":[10,7],"21":[7,10],"22":[0,17],"23":[17,8],"24":[1,16],"25":[0,17],"26":[2,15]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"4a8f51a3a12b59eb69694618530032a813fbf8cb","contentHash":"d347e73abcd3109143efee20401d9f0bfc6d68a4a6323bd4559ada44c741786a"},"/Users/isaacs/dev/js/tar/lib/buffer-entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/buffer-entry.js","statementMap":{"0":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"1":{"start":{"line":10,"column":15},"end":{"line":10,"column":34}},"2":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"3":{"start":{"line":14,"column":2},"end":{"line":14,"column":30}},"4":{"start":{"line":15,"column":2},"end":{"line":15,"column":44}},"5":{"start":{"line":16,"column":2},"end":{"line":16,"column":18}},"6":{"start":{"line":17,"column":2},"end":{"line":17,"column":16}},"7":{"start":{"line":18,"column":2},"end":{"line":20,"column":4}},"8":{"start":{"line":19,"column":4},"end":{"line":19,"column":52}},"9":{"start":{"line":23,"column":0},"end":{"line":23,"column":28}},"10":{"start":{"line":26,"column":0},"end":{"line":30,"column":1}},"11":{"start":{"line":27,"column":2},"end":{"line":27,"column":36}},"12":{"start":{"line":28,"column":2},"end":{"line":28,"column":26}},"13":{"start":{"line":29,"column":2},"end":{"line":29,"column":37}}},"fnMap":{"0":{"name":"BufferEntry","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":20}},"loc":{"start":{"line":13,"column":24},"end":{"line":21,"column":1}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":17},"end":{"line":18,"column":18}},"loc":{"start":{"line":18,"column":29},"end":{"line":20,"column":3}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":26,"column":30},"end":{"line":26,"column":31}},"loc":{"start":{"line":26,"column":43},"end":{"line":30,"column":1}},"line":26}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":3,"4":3,"5":3,"6":3,"7":3,"8":3,"9":1,"10":1,"11":3,"12":3,"13":3},"f":{"0":3,"1":3,"2":3},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"d8ad66df900443c9c9d8aefe5fc126a55ba268ec","contentHash":"25e5b3c51e476fcffac7affa191a0ed0f54d64d3d3b760e887bd45ba08fffa65"},"/Users/isaacs/dev/js/tar/lib/extended-header.js":{"path":"/Users/isaacs/dev/js/tar/lib/extended-header.js","statementMap":{"0":{"start":{"line":9,"column":0},"end":{"line":9,"column":31}},"1":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"2":{"start":{"line":12,"column":15},"end":{"line":12,"column":34}},"3":{"start":{"line":13,"column":10},"end":{"line":13,"column":30}},"4":{"start":{"line":14,"column":14},"end":{"line":14,"column":25}},"5":{"start":{"line":15,"column":15},"end":{"line":17,"column":42}},"6":{"start":{"line":20,"column":2},"end":{"line":20,"column":30}},"7":{"start":{"line":21,"column":2},"end":{"line":21,"column":30}},"8":{"start":{"line":22,"column":2},"end":{"line":22,"column":18}},"9":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"10":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"11":{"start":{"line":25,"column":2},"end":{"line":25,"column":20}},"12":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"13":{"start":{"line":27,"column":2},"end":{"line":27,"column":19}},"14":{"start":{"line":28,"column":2},"end":{"line":28,"column":19}},"15":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"16":{"start":{"line":30,"column":2},"end":{"line":30,"column":16}},"17":{"start":{"line":33,"column":0},"end":{"line":33,"column":31}},"18":{"start":{"line":34,"column":0},"end":{"line":34,"column":39}},"19":{"start":{"line":36,"column":8},"end":{"line":36,"column":9}},"20":{"start":{"line":37,"column":13},"end":{"line":37,"column":39}},"21":{"start":{"line":38,"column":11},"end":{"line":38,"column":28}},"22":{"start":{"line":39,"column":11},"end":{"line":39,"column":28}},"23":{"start":{"line":40,"column":11},"end":{"line":40,"column":28}},"24":{"start":{"line":41,"column":11},"end":{"line":41,"column":28}},"25":{"start":{"line":43,"column":0},"end":{"line":45,"column":2}},"26":{"start":{"line":44,"column":2},"end":{"line":44,"column":31}},"27":{"start":{"line":47,"column":0},"end":{"line":47,"column":16}},"28":{"start":{"line":50,"column":9},"end":{"line":50,"column":26}},"29":{"start":{"line":51,"column":9},"end":{"line":51,"column":26}},"30":{"start":{"line":52,"column":12},"end":{"line":52,"column":29}},"31":{"start":{"line":53,"column":8},"end":{"line":53,"column":25}},"32":{"start":{"line":54,"column":8},"end":{"line":54,"column":25}},"33":{"start":{"line":55,"column":8},"end":{"line":55,"column":25}},"34":{"start":{"line":56,"column":8},"end":{"line":56,"column":25}},"35":{"start":{"line":57,"column":12},"end":{"line":57,"column":29}},"36":{"start":{"line":58,"column":9},"end":{"line":58,"column":26}},"37":{"start":{"line":59,"column":9},"end":{"line":59,"column":27}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"39":{"start":{"line":62,"column":27},"end":{"line":62,"column":33}},"40":{"start":{"line":64,"column":2},"end":{"line":130,"column":3}},"41":{"start":{"line":64,"column":16},"end":{"line":64,"column":17}},"42":{"start":{"line":64,"column":23},"end":{"line":64,"column":31}},"43":{"start":{"line":69,"column":12},"end":{"line":69,"column":16}},"44":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"45":{"start":{"line":72,"column":6},"end":{"line":72,"column":53}},"46":{"start":{"line":73,"column":6},"end":{"line":73,"column":12}},"47":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"48":{"start":{"line":77,"column":16},"end":{"line":77,"column":22}},"49":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"50":{"start":{"line":82,"column":10},"end":{"line":82,"column":27}},"51":{"start":{"line":84,"column":10},"end":{"line":84,"column":73}},"52":{"start":{"line":85,"column":10},"end":{"line":85,"column":34}},"53":{"start":{"line":86,"column":10},"end":{"line":86,"column":18}},"54":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"55":{"start":{"line":89,"column":10},"end":{"line":89,"column":68}},"56":{"start":{"line":90,"column":10},"end":{"line":90,"column":16}},"57":{"start":{"line":92,"column":8},"end":{"line":92,"column":29}},"58":{"start":{"line":93,"column":8},"end":{"line":93,"column":16}},"59":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"60":{"start":{"line":98,"column":10},"end":{"line":98,"column":27}},"61":{"start":{"line":99,"column":10},"end":{"line":99,"column":57}},"62":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"63":{"start":{"line":100,"column":35},"end":{"line":100,"column":66}},"64":{"start":{"line":101,"column":10},"end":{"line":101,"column":33}},"65":{"start":{"line":102,"column":10},"end":{"line":102,"column":18}},"66":{"start":{"line":104,"column":8},"end":{"line":104,"column":28}},"67":{"start":{"line":105,"column":8},"end":{"line":105,"column":16}},"68":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"69":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"70":{"start":{"line":112,"column":12},"end":{"line":112,"column":55}},"71":{"start":{"line":113,"column":12},"end":{"line":113,"column":18}},"72":{"start":{"line":115,"column":20},"end":{"line":115,"column":55}},"73":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"74":{"start":{"line":117,"column":12},"end":{"line":117,"column":33}},"75":{"start":{"line":119,"column":10},"end":{"line":119,"column":38}},"76":{"start":{"line":121,"column":10},"end":{"line":121,"column":33}},"77":{"start":{"line":122,"column":10},"end":{"line":122,"column":28}},"78":{"start":{"line":123,"column":10},"end":{"line":123,"column":25}},"79":{"start":{"line":124,"column":10},"end":{"line":124,"column":29}},"80":{"start":{"line":125,"column":10},"end":{"line":125,"column":18}},"81":{"start":{"line":127,"column":8},"end":{"line":127,"column":28}},"82":{"start":{"line":128,"column":8},"end":{"line":128,"column":16}},"83":{"start":{"line":134,"column":2},"end":{"line":136,"column":42}},"84":{"start":{"line":138,"column":2},"end":{"line":138,"column":15}},"85":{"start":{"line":139,"column":2},"end":{"line":139,"column":16}}},"fnMap":{"0":{"name":"ExtendedHeader","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":23}},"loc":{"start":{"line":19,"column":27},"end":{"line":31,"column":1}},"line":19},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":28},"end":{"line":43,"column":29}},"loc":{"start":{"line":43,"column":41},"end":{"line":45,"column":1}},"line":43},"2":{"name":"parse","decl":{"start":{"line":61,"column":9},"end":{"line":61,"column":14}},"loc":{"start":{"line":61,"column":19},"end":{"line":131,"column":1}},"line":61},"3":{"name":"error","decl":{"start":{"line":133,"column":9},"end":{"line":133,"column":14}},"loc":{"start":{"line":133,"column":25},"end":{"line":140,"column":1}},"line":133}},"branchMap":{"0":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},{"start":{"line":62,"column":2},"end":{"line":62,"column":33}}],"line":62},"1":{"loc":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},{"start":{"line":71,"column":4},"end":{"line":74,"column":5}}],"line":71},"2":{"loc":{"start":{"line":71,"column":8},"end":{"line":71,"column":54}},"type":"binary-expr","locations":[{"start":{"line":71,"column":8},"end":{"line":71,"column":23}},{"start":{"line":71,"column":27},"end":{"line":71,"column":54}}],"line":71},"3":{"loc":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"type":"switch","locations":[{"start":{"line":77,"column":6},"end":{"line":77,"column":22}},{"start":{"line":79,"column":6},"end":{"line":93,"column":16}},{"start":{"line":95,"column":6},"end":{"line":105,"column":16}},{"start":{"line":107,"column":6},"end":{"line":128,"column":16}}],"line":76},"4":{"loc":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},{"start":{"line":81,"column":8},"end":{"line":87,"column":9}}],"line":81},"5":{"loc":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},{"start":{"line":88,"column":8},"end":{"line":91,"column":9}}],"line":88},"6":{"loc":{"start":{"line":88,"column":12},"end":{"line":88,"column":28}},"type":"binary-expr","locations":[{"start":{"line":88,"column":12},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":28}}],"line":88},"7":{"loc":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"type":"if","locations":[{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},{"start":{"line":97,"column":8},"end":{"line":103,"column":9}}],"line":97},"8":{"loc":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"type":"if","locations":[{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},{"start":{"line":100,"column":10},"end":{"line":100,"column":66}}],"line":100},"9":{"loc":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},{"start":{"line":109,"column":8},"end":{"line":126,"column":9}}],"line":109},"10":{"loc":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"type":"if","locations":[{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},{"start":{"line":111,"column":10},"end":{"line":114,"column":11}}],"line":111},"11":{"loc":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"type":"if","locations":[{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},{"start":{"line":116,"column":10},"end":{"line":118,"column":11}}],"line":116}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":4,"7":4,"8":4,"9":4,"10":4,"11":4,"12":4,"13":4,"14":4,"15":4,"16":4,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":4,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":4,"39":0,"40":4,"41":4,"42":4,"43":969,"44":969,"45":0,"46":0,"47":969,"48":0,"49":80,"50":26,"51":26,"52":26,"53":26,"54":54,"55":0,"56":0,"57":54,"58":54,"59":275,"60":26,"61":26,"62":26,"63":12,"64":26,"65":26,"66":249,"67":249,"68":614,"69":26,"70":0,"71":0,"72":26,"73":26,"74":20,"75":26,"76":26,"77":26,"78":26,"79":26,"80":26,"81":588,"82":588,"83":0,"84":0,"85":0},"f":{"0":4,"1":4,"2":4,"3":0},"b":{"0":[0,4],"1":[0,969],"2":[969,889],"3":[0,80,275,614],"4":[26,54],"5":[0,54],"6":[54,54],"7":[26,249],"8":[12,14],"9":[26,588],"10":[0,26],"11":[20,6]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"77cb382c69a46833a08275dbc55bf34db0dcd796","contentHash":"78a790af1726a774425fb478f1423068fe64414b747d89b597baf45139e7ae3d"},"/Users/isaacs/dev/js/tar/lib/extract.js":{"path":"/Users/isaacs/dev/js/tar/lib/extract.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"1":{"start":{"line":5,"column":10},"end":{"line":5,"column":30}},"2":{"start":{"line":6,"column":14},"end":{"line":6,"column":32}},"3":{"start":{"line":7,"column":15},"end":{"line":7,"column":34}},"4":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"6":{"start":{"line":11,"column":34},"end":{"line":11,"column":58}},"7":{"start":{"line":12,"column":2},"end":{"line":12,"column":23}},"8":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"9":{"start":{"line":15,"column":4},"end":{"line":15,"column":25}},"10":{"start":{"line":19,"column":2},"end":{"line":19,"column":59}},"11":{"start":{"line":20,"column":2},"end":{"line":20,"column":25}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":26}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"15":{"start":{"line":25,"column":38},"end":{"line":25,"column":52}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":34}},"17":{"start":{"line":29,"column":2},"end":{"line":29,"column":14}},"18":{"start":{"line":30,"column":11},"end":{"line":30,"column":15}},"19":{"start":{"line":35,"column":2},"end":{"line":60,"column":4}},"20":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"21":{"start":{"line":39,"column":14},"end":{"line":39,"column":63}},"22":{"start":{"line":40,"column":6},"end":{"line":40,"column":39}},"23":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"24":{"start":{"line":42,"column":17},"end":{"line":42,"column":70}},"25":{"start":{"line":43,"column":8},"end":{"line":43,"column":50}},"26":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"27":{"start":{"line":47,"column":6},"end":{"line":48,"column":66}},"28":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"29":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"30":{"start":{"line":53,"column":21},"end":{"line":53,"column":41}},"31":{"start":{"line":54,"column":19},"end":{"line":54,"column":56}},"32":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"33":{"start":{"line":56,"column":8},"end":{"line":56,"column":65}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":54}},"35":{"start":{"line":62,"column":2},"end":{"line":65,"column":4}},"36":{"start":{"line":63,"column":4},"end":{"line":63,"column":36}},"37":{"start":{"line":64,"column":4},"end":{"line":64,"column":15}},"38":{"start":{"line":67,"column":2},"end":{"line":69,"column":4}},"39":{"start":{"line":68,"column":4},"end":{"line":68,"column":25}},"40":{"start":{"line":71,"column":2},"end":{"line":73,"column":4}},"41":{"start":{"line":72,"column":4},"end":{"line":72,"column":20}},"42":{"start":{"line":79,"column":2},"end":{"line":84,"column":4}},"43":{"start":{"line":81,"column":4},"end":{"line":81,"column":21}},"44":{"start":{"line":82,"column":4},"end":{"line":82,"column":18}},"45":{"start":{"line":83,"column":4},"end":{"line":83,"column":20}},"46":{"start":{"line":87,"column":0},"end":{"line":87,"column":28}},"47":{"start":{"line":89,"column":0},"end":{"line":94,"column":1}},"48":{"start":{"line":90,"column":11},"end":{"line":90,"column":15}},"49":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"50":{"start":{"line":91,"column":31},"end":{"line":91,"column":57}},"51":{"start":{"line":92,"column":2},"end":{"line":92,"column":15}}},"fnMap":{"0":{"name":"Extract","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":16}},"loc":{"start":{"line":10,"column":24},"end":{"line":85,"column":1}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":35,"column":17},"end":{"line":35,"column":18}},"loc":{"start":{"line":35,"column":34},"end":{"line":60,"column":3}},"line":35},"2":{"name":"(anonymous_2)","decl":{"start":{"line":62,"column":24},"end":{"line":62,"column":25}},"loc":{"start":{"line":62,"column":36},"end":{"line":65,"column":3}},"line":62},"3":{"name":"(anonymous_3)","decl":{"start":{"line":67,"column":24},"end":{"line":67,"column":25}},"loc":{"start":{"line":67,"column":38},"end":{"line":69,"column":3}},"line":67},"4":{"name":"(anonymous_4)","decl":{"start":{"line":71,"column":24},"end":{"line":71,"column":25}},"loc":{"start":{"line":71,"column":35},"end":{"line":73,"column":3}},"line":71},"5":{"name":"(anonymous_5)","decl":{"start":{"line":79,"column":24},"end":{"line":79,"column":25}},"loc":{"start":{"line":79,"column":36},"end":{"line":84,"column":3}},"line":79},"6":{"name":"(anonymous_6)","decl":{"start":{"line":89,"column":31},"end":{"line":89,"column":32}},"loc":{"start":{"line":89,"column":43},"end":{"line":94,"column":1}},"line":89}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},{"start":{"line":11,"column":2},"end":{"line":11,"column":58}}],"line":11},"1":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"2":{"loc":{"start":{"line":19,"column":14},"end":{"line":19,"column":59}},"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":23}},{"start":{"line":19,"column":27},"end":{"line":19,"column":59}}],"line":19},"3":{"loc":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"type":"if","locations":[{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},{"start":{"line":25,"column":2},"end":{"line":25,"column":52}}],"line":25},"4":{"loc":{"start":{"line":25,"column":6},"end":{"line":25,"column":36}},"type":"binary-expr","locations":[{"start":{"line":25,"column":6},"end":{"line":25,"column":17}},{"start":{"line":25,"column":21},"end":{"line":25,"column":36}}],"line":25},"5":{"loc":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},{"start":{"line":38,"column":4},"end":{"line":45,"column":5}}],"line":38},"6":{"loc":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"type":"if","locations":[{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},{"start":{"line":41,"column":6},"end":{"line":44,"column":7}}],"line":41},"7":{"loc":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},{"start":{"line":46,"column":4},"end":{"line":49,"column":5}}],"line":46},"8":{"loc":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},{"start":{"line":51,"column":4},"end":{"line":59,"column":5}}],"line":51},"9":{"loc":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"type":"binary-expr","locations":[{"start":{"line":52,"column":15},"end":{"line":52,"column":39}},{"start":{"line":52,"column":43},"end":{"line":52,"column":45}}],"line":52},"10":{"loc":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"type":"if","locations":[{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},{"start":{"line":55,"column":6},"end":{"line":57,"column":7}}],"line":55},"11":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},{"start":{"line":91,"column":2},"end":{"line":91,"column":57}}],"line":91},"12":{"loc":{"start":{"line":91,"column":6},"end":{"line":91,"column":29}},"type":"binary-expr","locations":[{"start":{"line":91,"column":6},"end":{"line":91,"column":16}},{"start":{"line":91,"column":20},"end":{"line":91,"column":29}}],"line":91}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":1,"47":1,"48":0,"49":0,"50":0,"51":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3fb9f60facc409fe944dc36bd2e14fc6153e403d","contentHash":"3d9485ca58c6c768b022a39d276296b53647ccf39986885459406e933921c962"}} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/12bca2bc-6a2b-4f45-abc7-8483922a524d.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/12bca2bc-6a2b-4f45-abc7-8483922a524d.json
deleted file mode 100644
index 099d5b1..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/12bca2bc-6a2b-4f45-abc7-8483922a524d.json
+++ /dev/null
@@ -1 +0,0 @@
-{"/Users/isaacs/dev/js/tar/lib/pack.js":{"path":"/Users/isaacs/dev/js/tar/lib/pack.js","statementMap":{"0":{"start":{"line":4,"column":0},"end":{"line":4,"column":21}},"1":{"start":{"line":6,"column":18},"end":{"line":6,"column":46}},"2":{"start":{"line":7,"column":13},"end":{"line":7,"column":37}},"3":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"4":{"start":{"line":9,"column":15},"end":{"line":9,"column":34}},"5":{"start":{"line":10,"column":25},"end":{"line":10,"column":61}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":40}},"7":{"start":{"line":12,"column":10},"end":{"line":12,"column":25}},"8":{"start":{"line":14,"column":0},"end":{"line":14,"column":41}},"9":{"start":{"line":14,"column":13},"end":{"line":14,"column":14}},"10":{"start":{"line":14,"column":31},"end":{"line":14,"column":41}},"11":{"start":{"line":16,"column":0},"end":{"line":16,"column":22}},"12":{"start":{"line":20,"column":11},"end":{"line":20,"column":15}},"13":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"14":{"start":{"line":21,"column":29},"end":{"line":21,"column":51}},"15":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"16":{"start":{"line":23,"column":13},"end":{"line":23,"column":52}},"17":{"start":{"line":24,"column":7},"end":{"line":24,"column":32}},"18":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"19":{"start":{"line":28,"column":2},"end":{"line":28,"column":20}},"20":{"start":{"line":29,"column":2},"end":{"line":29,"column":20}},"21":{"start":{"line":30,"column":2},"end":{"line":30,"column":17}},"22":{"start":{"line":32,"column":2},"end":{"line":32,"column":25}},"23":{"start":{"line":33,"column":2},"end":{"line":33,"column":24}},"24":{"start":{"line":35,"column":2},"end":{"line":35,"column":21}},"25":{"start":{"line":36,"column":2},"end":{"line":43,"column":4}},"26":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"27":{"start":{"line":37,"column":35},"end":{"line":37,"column":41}},"28":{"start":{"line":38,"column":4},"end":{"line":38,"column":22}},"29":{"start":{"line":39,"column":4},"end":{"line":41,"column":6}},"30":{"start":{"line":40,"column":6},"end":{"line":40,"column":25}},"31":{"start":{"line":42,"column":4},"end":{"line":42,"column":15}},"32":{"start":{"line":46,"column":0},"end":{"line":57,"column":1}},"33":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"34":{"start":{"line":48,"column":23},"end":{"line":48,"column":29}},"35":{"start":{"line":49,"column":2},"end":{"line":49,"column":24}},"36":{"start":{"line":51,"column":11},"end":{"line":51,"column":15}},"37":{"start":{"line":52,"column":2},"end":{"line":56,"column":10}},"38":{"start":{"line":54,"column":6},"end":{"line":54,"column":24}},"39":{"start":{"line":59,"column":0},"end":{"line":69,"column":1}},"40":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"41":{"start":{"line":60,"column":40},"end":{"line":60,"column":68}},"42":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"43":{"start":{"line":62,"column":19},"end":{"line":62,"column":72}},"44":{"start":{"line":64,"column":2},"end":{"line":64,"column":17}},"45":{"start":{"line":65,"column":2},"end":{"line":65,"column":27}},"46":{"start":{"line":66,"column":2},"end":{"line":66,"column":17}},"47":{"start":{"line":67,"column":2},"end":{"line":67,"column":43}},"48":{"start":{"line":68,"column":2},"end":{"line":68,"column":25}},"49":{"start":{"line":71,"column":0},"end":{"line":75,"column":1}},"50":{"start":{"line":72,"column":2},"end":{"line":72,"column":21}},"51":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"52":{"start":{"line":73,"column":26},"end":{"line":73,"column":52}},"53":{"start":{"line":74,"column":2},"end":{"line":74,"column":20}},"54":{"start":{"line":77,"column":0},"end":{"line":82,"column":1}},"55":{"start":{"line":78,"column":2},"end":{"line":78,"column":22}},"56":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"57":{"start":{"line":79,"column":26},"end":{"line":79,"column":53}},"58":{"start":{"line":80,"column":2},"end":{"line":80,"column":21}},"59":{"start":{"line":81,"column":2},"end":{"line":81,"column":17}},"60":{"start":{"line":84,"column":0},"end":{"line":88,"column":1}},"61":{"start":{"line":85,"column":2},"end":{"line":85,"column":20}},"62":{"start":{"line":86,"column":2},"end":{"line":86,"column":24}},"63":{"start":{"line":87,"column":2},"end":{"line":87,"column":17}},"64":{"start":{"line":90,"column":0},"end":{"line":233,"column":1}},"65":{"start":{"line":91,"column":11},"end":{"line":91,"column":15}},"66":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"67":{"start":{"line":93,"column":4},"end":{"line":93,"column":10}},"68":{"start":{"line":96,"column":14},"end":{"line":96,"column":32}},"69":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"70":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"71":{"start":{"line":100,"column":6},"end":{"line":100,"column":22}},"72":{"start":{"line":102,"column":4},"end":{"line":102,"column":10}},"73":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"74":{"start":{"line":107,"column":4},"end":{"line":107,"column":29}},"75":{"start":{"line":108,"column":4},"end":{"line":111,"column":6}},"76":{"start":{"line":110,"column":6},"end":{"line":110,"column":19}},"77":{"start":{"line":112,"column":4},"end":{"line":112,"column":10}},"78":{"start":{"line":115,"column":2},"end":{"line":115,"column":23}},"79":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"80":{"start":{"line":119,"column":4},"end":{"line":119,"column":24}},"81":{"start":{"line":120,"column":4},"end":{"line":120,"column":24}},"82":{"start":{"line":121,"column":4},"end":{"line":121,"column":18}},"83":{"start":{"line":122,"column":4},"end":{"line":122,"column":20}},"84":{"start":{"line":123,"column":4},"end":{"line":123,"column":10}},"85":{"start":{"line":134,"column":13},"end":{"line":134,"column":53}},"86":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"87":{"start":{"line":137,"column":4},"end":{"line":137,"column":27}},"88":{"start":{"line":140,"column":15},"end":{"line":140,"column":17}},"89":{"start":{"line":142,"column":2},"end":{"line":144,"column":4}},"90":{"start":{"line":143,"column":4},"end":{"line":143,"column":30}},"91":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"92":{"start":{"line":146,"column":25},"end":{"line":146,"column":52}},"93":{"start":{"line":148,"column":2},"end":{"line":148,"column":53}},"94":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"95":{"start":{"line":152,"column":4},"end":{"line":152,"column":49}},"96":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"97":{"start":{"line":156,"column":4},"end":{"line":156,"column":29}},"98":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"99":{"start":{"line":161,"column":6},"end":{"line":161,"column":12}},"100":{"start":{"line":164,"column":6},"end":{"line":164,"column":24}},"101":{"start":{"line":165,"column":6},"end":{"line":165,"column":21}},"102":{"start":{"line":166,"column":6},"end":{"line":166,"column":11}},"103":{"start":{"line":169,"column":15},"end":{"line":169,"column":69}},"104":{"start":{"line":170,"column":6},"end":{"line":170,"column":54}},"105":{"start":{"line":171,"column":6},"end":{"line":171,"column":21}},"106":{"start":{"line":172,"column":6},"end":{"line":172,"column":11}},"107":{"start":{"line":175,"column":15},"end":{"line":175,"column":69}},"108":{"start":{"line":176,"column":6},"end":{"line":176,"column":74}},"109":{"start":{"line":177,"column":6},"end":{"line":177,"column":21}},"110":{"start":{"line":178,"column":6},"end":{"line":178,"column":11}},"111":{"start":{"line":187,"column":15},"end":{"line":187,"column":53}},"112":{"start":{"line":189,"column":2},"end":{"line":189,"column":20}},"113":{"start":{"line":195,"column":2},"end":{"line":197,"column":4}},"114":{"start":{"line":196,"column":4},"end":{"line":196,"column":22}},"115":{"start":{"line":199,"column":2},"end":{"line":205,"column":4}},"116":{"start":{"line":200,"column":4},"end":{"line":202,"column":5}},"117":{"start":{"line":201,"column":6},"end":{"line":201,"column":50}},"118":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"119":{"start":{"line":204,"column":33},"end":{"line":204,"column":44}},"120":{"start":{"line":206,"column":2},"end":{"line":206,"column":31}},"121":{"start":{"line":208,"column":14},"end":{"line":208,"column":19}},"122":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"123":{"start":{"line":210,"column":15},"end":{"line":210,"column":21}},"124":{"start":{"line":211,"column":4},"end":{"line":211,"column":16}},"125":{"start":{"line":215,"column":4},"end":{"line":215,"column":27}},"126":{"start":{"line":216,"column":4},"end":{"line":216,"column":26}},"127":{"start":{"line":217,"column":4},"end":{"line":217,"column":17}},"128":{"start":{"line":220,"column":2},"end":{"line":223,"column":4}},"129":{"start":{"line":222,"column":4},"end":{"line":222,"column":24}},"130":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"131":{"start":{"line":229,"column":4},"end":{"line":229,"column":21}},"132":{"start":{"line":232,"column":2},"end":{"line":232,"column":20}},"133":{"start":{"line":235,"column":0},"end":{"line":235,"column":39}},"134":{"start":{"line":236,"column":0},"end":{"line":236,"column":37}}},"fnMap":{"0":{"name":"Pack","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":13}},"loc":{"start":{"line":18,"column":22},"end":{"line":44,"column":1}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":36,"column":16},"end":{"line":36,"column":17}},"loc":{"start":{"line":36,"column":31},"end":{"line":43,"column":3}},"line":36},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":18},"end":{"line":39,"column":19}},"loc":{"start":{"line":39,"column":30},"end":{"line":41,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":46,"column":27},"end":{"line":46,"column":28}},"loc":{"start":{"line":46,"column":44},"end":{"line":57,"column":1}},"line":46},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":29},"end":{"line":55,"column":5}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":59,"column":21},"end":{"line":59,"column":22}},"loc":{"start":{"line":59,"column":39},"end":{"line":69,"column":1}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":71,"column":23},"end":{"line":71,"column":24}},"loc":{"start":{"line":71,"column":35},"end":{"line":75,"column":1}},"line":71},"7":{"name":"(anonymous_7)","decl":{"start":{"line":77,"column":24},"end":{"line":77,"column":25}},"loc":{"start":{"line":77,"column":36},"end":{"line":82,"column":1}},"line":77},"8":{"name":"(anonymous_8)","decl":{"start":{"line":84,"column":21},"end":{"line":84,"column":22}},"loc":{"start":{"line":84,"column":33},"end":{"line":88,"column":1}},"line":84},"9":{"name":"(anonymous_9)","decl":{"start":{"line":90,"column":26},"end":{"line":90,"column":27}},"loc":{"start":{"line":90,"column":38},"end":{"line":233,"column":1}},"line":90},"10":{"name":"(anonymous_10)","decl":{"start":{"line":108,"column":22},"end":{"line":108,"column":23}},"loc":{"start":{"line":108,"column":34},"end":{"line":111,"column":5}},"line":108},"11":{"name":"(anonymous_11)","decl":{"start":{"line":142,"column":41},"end":{"line":142,"column":42}},"loc":{"start":{"line":142,"column":54},"end":{"line":144,"column":3}},"line":142},"12":{"name":"(anonymous_12)","decl":{"start":{"line":195,"column":20},"end":{"line":195,"column":21}},"loc":{"start":{"line":195,"column":33},"end":{"line":197,"column":3}},"line":195},"13":{"name":"(anonymous_13)","decl":{"start":{"line":199,"column":22},"end":{"line":199,"column":23}},"loc":{"start":{"line":199,"column":34},"end":{"line":205,"column":3}},"line":199},"14":{"name":"(anonymous_14)","decl":{"start":{"line":200,"column":30},"end":{"line":200,"column":31}},"loc":{"start":{"line":200,"column":42},"end":{"line":202,"column":5}},"line":200},"15":{"name":"nextEntry","decl":{"start":{"line":209,"column":11},"end":{"line":209,"column":20}},"loc":{"start":{"line":209,"column":24},"end":{"line":218,"column":3}},"line":209},"16":{"name":"(anonymous_16)","decl":{"start":{"line":220,"column":21},"end":{"line":220,"column":22}},"loc":{"start":{"line":220,"column":35},"end":{"line":223,"column":3}},"line":220},"17":{"name":"(anonymous_17)","decl":{"start":{"line":235,"column":25},"end":{"line":235,"column":26}},"loc":{"start":{"line":235,"column":37},"end":{"line":235,"column":39}},"line":235},"18":{"name":"(anonymous_18)","decl":{"start":{"line":236,"column":23},"end":{"line":236,"column":24}},"loc":{"start":{"line":236,"column":35},"end":{"line":236,"column":37}},"line":236}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"type":"if","locations":[{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},{"start":{"line":21,"column":2},"end":{"line":21,"column":51}}],"line":21},"1":{"loc":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"type":"if","locations":[{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},{"start":{"line":23,"column":2},"end":{"line":24,"column":32}}],"line":23},"2":{"loc":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},{"start":{"line":37,"column":4},"end":{"line":37,"column":41}}],"line":37},"3":{"loc":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"type":"if","locations":[{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},{"start":{"line":48,"column":2},"end":{"line":48,"column":29}}],"line":48},"4":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},{"start":{"line":60,"column":2},"end":{"line":60,"column":68}}],"line":60},"5":{"loc":{"start":{"line":60,"column":6},"end":{"line":60,"column":38}},"type":"binary-expr","locations":[{"start":{"line":60,"column":6},"end":{"line":60,"column":18}},{"start":{"line":60,"column":22},"end":{"line":60,"column":38}}],"line":60},"6":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},{"start":{"line":62,"column":2},"end":{"line":62,"column":72}}],"line":62},"7":{"loc":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},{"start":{"line":73,"column":2},"end":{"line":73,"column":52}}],"line":73},"8":{"loc":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"type":"if","locations":[{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},{"start":{"line":79,"column":2},"end":{"line":79,"column":53}}],"line":79},"9":{"loc":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"type":"if","locations":[{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},{"start":{"line":92,"column":2},"end":{"line":94,"column":3}}],"line":92},"10":{"loc":{"start":{"line":92,"column":6},"end":{"line":92,"column":34}},"type":"binary-expr","locations":[{"start":{"line":92,"column":6},"end":{"line":92,"column":16}},{"start":{"line":92,"column":20},"end":{"line":92,"column":34}}],"line":92},"11":{"loc":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},{"start":{"line":98,"column":2},"end":{"line":103,"column":3}}],"line":98},"12":{"loc":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},{"start":{"line":99,"column":4},"end":{"line":101,"column":5}}],"line":99},"13":{"loc":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"type":"if","locations":[{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},{"start":{"line":105,"column":2},"end":{"line":113,"column":3}}],"line":105},"14":{"loc":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"type":"if","locations":[{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},{"start":{"line":117,"column":2},"end":{"line":124,"column":3}}],"line":117},"15":{"loc":{"start":{"line":134,"column":27},"end":{"line":134,"column":46}},"type":"binary-expr","locations":[{"start":{"line":134,"column":27},"end":{"line":134,"column":37}},{"start":{"line":134,"column":41},"end":{"line":134,"column":46}}],"line":134},"16":{"loc":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"type":"if","locations":[{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},{"start":{"line":135,"column":2},"end":{"line":138,"column":3}}],"line":135},"17":{"loc":{"start":{"line":135,"column":6},"end":{"line":135,"column":72}},"type":"binary-expr","locations":[{"start":{"line":135,"column":6},"end":{"line":135,"column":16}},{"start":{"line":135,"column":20},"end":{"line":135,"column":39}},{"start":{"line":135,"column":43},"end":{"line":135,"column":53}},{"start":{"line":135,"column":57},"end":{"line":135,"column":72}}],"line":135},"18":{"loc":{"start":{"line":142,"column":14},"end":{"line":142,"column":31}},"type":"binary-expr","locations":[{"start":{"line":142,"column":14},"end":{"line":142,"column":25}},{"start":{"line":142,"column":29},"end":{"line":142,"column":31}}],"line":142},"19":{"loc":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"type":"if","locations":[{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},{"start":{"line":146,"column":2},"end":{"line":146,"column":52}}],"line":146},"20":{"loc":{"start":{"line":148,"column":36},"end":{"line":148,"column":52}},"type":"binary-expr","locations":[{"start":{"line":148,"column":36},"end":{"line":148,"column":46}},{"start":{"line":148,"column":50},"end":{"line":148,"column":52}}],"line":148},"21":{"loc":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"type":"if","locations":[{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},{"start":{"line":151,"column":2},"end":{"line":153,"column":3}}],"line":151},"22":{"loc":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"type":"if","locations":[{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},{"start":{"line":155,"column":2},"end":{"line":156,"column":29}}],"line":155},"23":{"loc":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"type":"switch","locations":[{"start":{"line":160,"column":4},"end":{"line":161,"column":12}},{"start":{"line":163,"column":4},"end":{"line":166,"column":11}},{"start":{"line":168,"column":4},"end":{"line":172,"column":11}},{"start":{"line":174,"column":4},"end":{"line":178,"column":11}}],"line":158},"24":{"loc":{"start":{"line":170,"column":24},"end":{"line":170,"column":54}},"type":"binary-expr","locations":[{"start":{"line":170,"column":24},"end":{"line":170,"column":47}},{"start":{"line":170,"column":51},"end":{"line":170,"column":54}}],"line":170},"25":{"loc":{"start":{"line":176,"column":24},"end":{"line":176,"column":74}},"type":"binary-expr","locations":[{"start":{"line":176,"column":24},"end":{"line":176,"column":67}},{"start":{"line":176,"column":71},"end":{"line":176,"column":74}}],"line":176},"26":{"loc":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"type":"if","locations":[{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},{"start":{"line":204,"column":4},"end":{"line":204,"column":44}}],"line":204},"27":{"loc":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"type":"if","locations":[{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},{"start":{"line":210,"column":4},"end":{"line":210,"column":21}}],"line":210},"28":{"loc":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"type":"if","locations":[{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},{"start":{"line":227,"column":2},"end":{"line":230,"column":3}}],"line":227}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":512,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":1,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":0,"52":0,"53":0,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":0,"63":0,"64":1,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":1,"134":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0,0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0,0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"8beb16ccde52e484aa1dd87f5ece33d696c808ab","contentHash":"7bb2b7ebe1111c0deefbf9a61d17bf9d2dbe951adb585db96f9d89663ce5909d"},"/Users/isaacs/dev/js/tar/lib/entry-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":28}},"1":{"start":{"line":3,"column":10},"end":{"line":3,"column":30}},"2":{"start":{"line":4,"column":16},"end":{"line":4,"column":38}},"3":{"start":{"line":5,"column":12},"end":{"line":5,"column":33}},"4":{"start":{"line":6,"column":15},"end":{"line":6,"column":34}},"5":{"start":{"line":7,"column":18},"end":{"line":7,"column":41}},"6":{"start":{"line":9,"column":13},"end":{"line":9,"column":37}},"7":{"start":{"line":10,"column":10},"end":{"line":10,"column":12}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"9":{"start":{"line":15,"column":11},"end":{"line":15,"column":15}},"10":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"11":{"start":{"line":18,"column":4},"end":{"line":18,"column":33}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":20}},"13":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"14":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":35}},"16":{"start":{"line":28,"column":2},"end":{"line":30,"column":4}},"17":{"start":{"line":29,"column":4},"end":{"line":29,"column":22}},"18":{"start":{"line":32,"column":2},"end":{"line":34,"column":4}},"19":{"start":{"line":33,"column":4},"end":{"line":33,"column":20}},"20":{"start":{"line":36,"column":2},"end":{"line":39,"column":4}},"21":{"start":{"line":37,"column":4},"end":{"line":37,"column":18}},"22":{"start":{"line":38,"column":4},"end":{"line":38,"column":20}},"23":{"start":{"line":41,"column":2},"end":{"line":41,"column":18}},"24":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"25":{"start":{"line":43,"column":4},"end":{"line":43,"column":18}},"26":{"start":{"line":45,"column":2},"end":{"line":45,"column":25}},"27":{"start":{"line":46,"column":2},"end":{"line":46,"column":23}},"28":{"start":{"line":47,"column":2},"end":{"line":47,"column":22}},"29":{"start":{"line":49,"column":2},"end":{"line":49,"column":17}},"30":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"31":{"start":{"line":51,"column":2},"end":{"line":51,"column":18}},"32":{"start":{"line":53,"column":2},"end":{"line":55,"column":4}},"33":{"start":{"line":54,"column":4},"end":{"line":54,"column":17}},"34":{"start":{"line":58,"column":0},"end":{"line":65,"column":1}},"35":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"36":{"start":{"line":60,"column":19},"end":{"line":60,"column":74}},"37":{"start":{"line":61,"column":2},"end":{"line":61,"column":22}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":17}},"39":{"start":{"line":63,"column":2},"end":{"line":63,"column":43}},"40":{"start":{"line":64,"column":2},"end":{"line":64,"column":25}},"41":{"start":{"line":67,"column":0},"end":{"line":74,"column":1}},"42":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"43":{"start":{"line":69,"column":9},"end":{"line":69,"column":29}},"44":{"start":{"line":70,"column":2},"end":{"line":70,"column":24}},"45":{"start":{"line":71,"column":2},"end":{"line":71,"column":20}},"46":{"start":{"line":72,"column":2},"end":{"line":72,"column":17}},"47":{"start":{"line":73,"column":2},"end":{"line":73,"column":43}},"48":{"start":{"line":76,"column":0},"end":{"line":80,"column":1}},"49":{"start":{"line":78,"column":2},"end":{"line":78,"column":21}},"50":{"start":{"line":79,"column":2},"end":{"line":79,"column":20}},"51":{"start":{"line":82,"column":0},"end":{"line":87,"column":1}},"52":{"start":{"line":84,"column":2},"end":{"line":84,"column":22}},"53":{"start":{"line":85,"column":2},"end":{"line":85,"column":21}},"54":{"start":{"line":86,"column":2},"end":{"line":86,"column":17}},"55":{"start":{"line":89,"column":0},"end":{"line":98,"column":1}},"56":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"57":{"start":{"line":91,"column":20},"end":{"line":91,"column":69}},"58":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"59":{"start":{"line":95,"column":20},"end":{"line":95,"column":30}},"60":{"start":{"line":97,"column":2},"end":{"line":97,"column":31}},"61":{"start":{"line":100,"column":0},"end":{"line":126,"column":1}},"62":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"63":{"start":{"line":102,"column":23},"end":{"line":102,"column":29}},"64":{"start":{"line":103,"column":2},"end":{"line":103,"column":24}},"65":{"start":{"line":105,"column":20},"end":{"line":105,"column":48}},"66":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"67":{"start":{"line":108,"column":13},"end":{"line":108,"column":17}},"68":{"start":{"line":110,"column":4},"end":{"line":111,"column":44}},"69":{"start":{"line":113,"column":4},"end":{"line":120,"column":12}},"70":{"start":{"line":115,"column":8},"end":{"line":115,"column":26}},"71":{"start":{"line":118,"column":8},"end":{"line":118,"column":28}},"72":{"start":{"line":124,"column":2},"end":{"line":124,"column":32}},"73":{"start":{"line":125,"column":2},"end":{"line":125,"column":21}},"74":{"start":{"line":128,"column":0},"end":{"line":167,"column":1}},"75":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"76":{"start":{"line":131,"column":4},"end":{"line":131,"column":18}},"77":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"78":{"start":{"line":136,"column":4},"end":{"line":136,"column":10}},"79":{"start":{"line":139,"column":2},"end":{"line":139,"column":25}},"80":{"start":{"line":141,"column":12},"end":{"line":141,"column":24}},"81":{"start":{"line":142,"column":2},"end":{"line":159,"column":3}},"82":{"start":{"line":142,"column":15},"end":{"line":142,"column":16}},"83":{"start":{"line":145,"column":12},"end":{"line":145,"column":18}},"84":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"85":{"start":{"line":147,"column":19},"end":{"line":147,"column":37}},"86":{"start":{"line":148,"column":9},"end":{"line":148,"column":30}},"87":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"88":{"start":{"line":152,"column":6},"end":{"line":152,"column":30}},"89":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"90":{"start":{"line":154,"column":8},"end":{"line":154,"column":30}},"91":{"start":{"line":155,"column":8},"end":{"line":155,"column":39}},"92":{"start":{"line":157,"column":6},"end":{"line":157,"column":12}},"93":{"start":{"line":162,"column":2},"end":{"line":162,"column":25}},"94":{"start":{"line":163,"column":2},"end":{"line":163,"column":26}},"95":{"start":{"line":166,"column":2},"end":{"line":166,"column":20}},"96":{"start":{"line":169,"column":0},"end":{"line":169,"column":46}}},"fnMap":{"0":{"name":"EntryWriter","decl":{"start":{"line":14,"column":9},"end":{"line":14,"column":20}},"loc":{"start":{"line":14,"column":29},"end":{"line":56,"column":1}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":28,"column":24},"end":{"line":28,"column":25}},"loc":{"start":{"line":28,"column":37},"end":{"line":30,"column":3}},"line":28},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":25},"end":{"line":32,"column":26}},"loc":{"start":{"line":32,"column":37},"end":{"line":34,"column":3}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":23},"end":{"line":36,"column":24}},"loc":{"start":{"line":36,"column":35},"end":{"line":39,"column":3}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":28},"end":{"line":55,"column":3}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":58,"column":30},"end":{"line":58,"column":31}},"loc":{"start":{"line":58,"column":43},"end":{"line":65,"column":1}},"line":58},"6":{"name":"(anonymous_6)","decl":{"start":{"line":67,"column":28},"end":{"line":67,"column":29}},"loc":{"start":{"line":67,"column":41},"end":{"line":74,"column":1}},"line":67},"7":{"name":"(anonymous_7)","decl":{"start":{"line":76,"column":30},"end":{"line":76,"column":31}},"loc":{"start":{"line":76,"column":42},"end":{"line":80,"column":1}},"line":76},"8":{"name":"(anonymous_8)","decl":{"start":{"line":82,"column":31},"end":{"line":82,"column":32}},"loc":{"start":{"line":82,"column":43},"end":{"line":87,"column":1}},"line":82},"9":{"name":"(anonymous_9)","decl":{"start":{"line":89,"column":28},"end":{"line":89,"column":29}},"loc":{"start":{"line":89,"column":45},"end":{"line":98,"column":1}},"line":89},"10":{"name":"(anonymous_10)","decl":{"start":{"line":100,"column":32},"end":{"line":100,"column":33}},"loc":{"start":{"line":100,"column":44},"end":{"line":126,"column":1}},"line":100},"11":{"name":"(anonymous_11)","decl":{"start":{"line":114,"column":18},"end":{"line":114,"column":19}},"loc":{"start":{"line":114,"column":31},"end":{"line":116,"column":7}},"line":114},"12":{"name":"(anonymous_12)","decl":{"start":{"line":117,"column":19},"end":{"line":117,"column":20}},"loc":{"start":{"line":117,"column":33},"end":{"line":119,"column":7}},"line":117},"13":{"name":"(anonymous_13)","decl":{"start":{"line":128,"column":33},"end":{"line":128,"column":34}},"loc":{"start":{"line":128,"column":45},"end":{"line":167,"column":1}},"line":128},"14":{"name":"(anonymous_14)","decl":{"start":{"line":169,"column":32},"end":{"line":169,"column":33}},"loc":{"start":{"line":169,"column":44},"end":{"line":169,"column":46}},"line":169}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},{"start":{"line":17,"column":2},"end":{"line":19,"column":3}}],"line":17},"1":{"loc":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"type":"if","locations":[{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},{"start":{"line":42,"column":2},"end":{"line":44,"column":3}}],"line":42},"2":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},{"start":{"line":60,"column":2},"end":{"line":60,"column":74}}],"line":60},"3":{"loc":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"type":"if","locations":[{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},{"start":{"line":69,"column":2},"end":{"line":69,"column":29}}],"line":69},"4":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},{"start":{"line":91,"column":2},"end":{"line":91,"column":69}}],"line":91},"5":{"loc":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"type":"if","locations":[{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},{"start":{"line":95,"column":2},"end":{"line":95,"column":30}}],"line":95},"6":{"loc":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"type":"if","locations":[{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},{"start":{"line":102,"column":2},"end":{"line":102,"column":29}}],"line":102},"7":{"loc":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"type":"if","locations":[{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},{"start":{"line":107,"column":2},"end":{"line":121,"column":3}}],"line":107},"8":{"loc":{"start":{"line":107,"column":6},"end":{"line":107,"column":44}},"type":"binary-expr","locations":[{"start":{"line":107,"column":6},"end":{"line":107,"column":29}},{"start":{"line":107,"column":33},"end":{"line":107,"column":44}}],"line":107},"9":{"loc":{"start":{"line":110,"column":27},"end":{"line":111,"column":44}},"type":"binary-expr","locations":[{"start":{"line":110,"column":27},"end":{"line":110,"column":47}},{"start":{"line":111,"column":6},"end":{"line":111,"column":44}}],"line":110},"10":{"loc":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"type":"if","locations":[{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},{"start":{"line":130,"column":2},"end":{"line":132,"column":3}}],"line":130},"11":{"loc":{"start":{"line":130,"column":6},"end":{"line":130,"column":37}},"type":"binary-expr","locations":[{"start":{"line":130,"column":6},"end":{"line":130,"column":22}},{"start":{"line":130,"column":26},"end":{"line":130,"column":37}}],"line":130},"12":{"loc":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"type":"if","locations":[{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},{"start":{"line":134,"column":2},"end":{"line":137,"column":3}}],"line":134},"13":{"loc":{"start":{"line":134,"column":6},"end":{"line":134,"column":38}},"type":"binary-expr","locations":[{"start":{"line":134,"column":6},"end":{"line":134,"column":18}},{"start":{"line":134,"column":22},"end":{"line":134,"column":38}}],"line":134},"14":{"loc":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},{"start":{"line":147,"column":4},"end":{"line":148,"column":30}}],"line":147},"15":{"loc":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},{"start":{"line":150,"column":4},"end":{"line":158,"column":5}}],"line":150},"16":{"loc":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"type":"if","locations":[{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},{"start":{"line":153,"column":6},"end":{"line":156,"column":7}}],"line":153}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":1,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":1,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":1,"49":0,"50":0,"51":1,"52":0,"53":0,"54":0,"55":1,"56":0,"57":0,"58":0,"59":0,"60":0,"61":1,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":1,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3e169418508e031df78186ff63b5fa5aa2484ab8","contentHash":"84191ed4732b6763ae8701256051735aebbe5e95c932c15bef34da01b33ba1a0"},"/Users/isaacs/dev/js/tar/lib/entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry.js","statementMap":{"0":{"start":{"line":7,"column":0},"end":{"line":7,"column":22}},"1":{"start":{"line":9,"column":16},"end":{"line":9,"column":38}},"2":{"start":{"line":10,"column":10},"end":{"line":10,"column":27}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":33}},"4":{"start":{"line":12,"column":13},"end":{"line":12,"column":37}},"5":{"start":{"line":13,"column":15},"end":{"line":13,"column":34}},"6":{"start":{"line":14,"column":14},"end":{"line":14,"column":41}},"7":{"start":{"line":17,"column":2},"end":{"line":17,"column":19}},"8":{"start":{"line":18,"column":2},"end":{"line":18,"column":22}},"9":{"start":{"line":19,"column":2},"end":{"line":19,"column":22}},"10":{"start":{"line":21,"column":2},"end":{"line":21,"column":25}},"11":{"start":{"line":22,"column":2},"end":{"line":22,"column":22}},"12":{"start":{"line":23,"column":2},"end":{"line":23,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":22}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":21}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":21}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":21}},"17":{"start":{"line":28,"column":2},"end":{"line":28,"column":18}},"18":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"19":{"start":{"line":30,"column":2},"end":{"line":30,"column":20}},"20":{"start":{"line":32,"column":2},"end":{"line":32,"column":36}},"21":{"start":{"line":34,"column":2},"end":{"line":34,"column":17}},"22":{"start":{"line":35,"column":2},"end":{"line":35,"column":23}},"23":{"start":{"line":36,"column":2},"end":{"line":36,"column":33}},"24":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"25":{"start":{"line":41,"column":11},"end":{"line":41,"column":15}},"26":{"start":{"line":42,"column":2},"end":{"line":44,"column":4}},"27":{"start":{"line":43,"column":4},"end":{"line":43,"column":29}},"28":{"start":{"line":46,"column":2},"end":{"line":46,"column":18}},"29":{"start":{"line":49,"column":0},"end":{"line":49,"column":23}},"30":{"start":{"line":51,"column":0},"end":{"line":78,"column":1}},"31":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"32":{"start":{"line":52,"column":20},"end":{"line":52,"column":65}},"33":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"34":{"start":{"line":54,"column":4},"end":{"line":54,"column":40}},"35":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"36":{"start":{"line":60,"column":4},"end":{"line":60,"column":35}},"37":{"start":{"line":62,"column":2},"end":{"line":62,"column":29}},"38":{"start":{"line":65,"column":11},"end":{"line":65,"column":25}},"39":{"start":{"line":66,"column":2},"end":{"line":66,"column":21}},"40":{"start":{"line":67,"column":2},"end":{"line":67,"column":19}},"41":{"start":{"line":69,"column":2},"end":{"line":69,"column":14}},"42":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"43":{"start":{"line":73,"column":4},"end":{"line":73,"column":26}},"44":{"start":{"line":74,"column":4},"end":{"line":74,"column":16}},"45":{"start":{"line":77,"column":2},"end":{"line":77,"column":13}},"46":{"start":{"line":80,"column":0},"end":{"line":84,"column":1}},"47":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"48":{"start":{"line":81,"column":9},"end":{"line":81,"column":22}},"49":{"start":{"line":82,"column":2},"end":{"line":82,"column":21}},"50":{"start":{"line":83,"column":2},"end":{"line":83,"column":14}},"51":{"start":{"line":86,"column":0},"end":{"line":89,"column":1}},"52":{"start":{"line":87,"column":2},"end":{"line":87,"column":21}},"53":{"start":{"line":88,"column":2},"end":{"line":88,"column":20}},"54":{"start":{"line":91,"column":0},"end":{"line":97,"column":1}},"55":{"start":{"line":93,"column":2},"end":{"line":93,"column":21}},"56":{"start":{"line":94,"column":2},"end":{"line":94,"column":22}},"57":{"start":{"line":95,"column":2},"end":{"line":95,"column":14}},"58":{"start":{"line":96,"column":2},"end":{"line":96,"column":41}},"59":{"start":{"line":100,"column":0},"end":{"line":139,"column":1}},"60":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"61":{"start":{"line":103,"column":52},"end":{"line":103,"column":58}},"62":{"start":{"line":107,"column":2},"end":{"line":107,"column":22}},"63":{"start":{"line":110,"column":2},"end":{"line":113,"column":3}},"64":{"start":{"line":111,"column":16},"end":{"line":111,"column":43}},"65":{"start":{"line":112,"column":4},"end":{"line":112,"column":28}},"66":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"67":{"start":{"line":117,"column":4},"end":{"line":117,"column":57}},"68":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"69":{"start":{"line":119,"column":6},"end":{"line":119,"column":29}},"70":{"start":{"line":120,"column":6},"end":{"line":120,"column":24}},"71":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"72":{"start":{"line":123,"column":6},"end":{"line":123,"column":24}},"73":{"start":{"line":124,"column":6},"end":{"line":124,"column":22}},"74":{"start":{"line":130,"column":12},"end":{"line":130,"column":29}},"75":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"76":{"start":{"line":132,"column":4},"end":{"line":132,"column":36}},"77":{"start":{"line":133,"column":4},"end":{"line":133,"column":22}},"78":{"start":{"line":134,"column":4},"end":{"line":134,"column":25}},"79":{"start":{"line":135,"column":4},"end":{"line":135,"column":40}},"80":{"start":{"line":138,"column":2},"end":{"line":138,"column":23}},"81":{"start":{"line":141,"column":0},"end":{"line":211,"column":1}},"82":{"start":{"line":143,"column":15},"end":{"line":143,"column":27}},"83":{"start":{"line":144,"column":17},"end":{"line":144,"column":31}},"84":{"start":{"line":145,"column":15},"end":{"line":145,"column":27}},"85":{"start":{"line":146,"column":14},"end":{"line":146,"column":24}},"86":{"start":{"line":149,"column":15},"end":{"line":149,"column":25}},"87":{"start":{"line":150,"column":2},"end":{"line":154,"column":3}},"88":{"start":{"line":150,"column":15},"end":{"line":150,"column":16}},"89":{"start":{"line":151,"column":16},"end":{"line":151,"column":25}},"90":{"start":{"line":152,"column":14},"end":{"line":152,"column":27}},"91":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"92":{"start":{"line":153,"column":36},"end":{"line":153,"column":54}},"93":{"start":{"line":158,"column":3},"end":{"line":165,"column":3}},"94":{"start":{"line":159,"column":4},"end":{"line":161,"column":6}},"95":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"96":{"start":{"line":160,"column":39},"end":{"line":160,"column":54}},"97":{"start":{"line":165,"column":3},"end":{"line":173,"column":3}},"98":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"99":{"start":{"line":167,"column":6},"end":{"line":167,"column":40}},"100":{"start":{"line":173,"column":3},"end":{"line":177,"column":4}},"101":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"102":{"start":{"line":175,"column":6},"end":{"line":175,"column":42}},"103":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"104":{"start":{"line":184,"column":6},"end":{"line":184,"column":19}},"105":{"start":{"line":185,"column":6},"end":{"line":185,"column":11}},"106":{"start":{"line":188,"column":6},"end":{"line":188,"column":24}},"107":{"start":{"line":189,"column":6},"end":{"line":189,"column":11}},"108":{"start":{"line":192,"column":6},"end":{"line":192,"column":22}},"109":{"start":{"line":193,"column":6},"end":{"line":193,"column":11}},"110":{"start":{"line":202,"column":6},"end":{"line":202,"column":34}},"111":{"start":{"line":205,"column":2},"end":{"line":205,"column":18}},"112":{"start":{"line":206,"column":2},"end":{"line":206,"column":24}},"113":{"start":{"line":207,"column":2},"end":{"line":207,"column":24}},"114":{"start":{"line":210,"column":2},"end":{"line":210,"column":30}},"115":{"start":{"line":215,"column":0},"end":{"line":217,"column":1}},"116":{"start":{"line":216,"column":2},"end":{"line":216,"column":20}},"117":{"start":{"line":219,"column":0},"end":{"line":219,"column":35}},"118":{"start":{"line":220,"column":0},"end":{"line":220,"column":37}}},"fnMap":{"0":{"name":"Entry","decl":{"start":{"line":16,"column":9},"end":{"line":16,"column":14}},"loc":{"start":{"line":16,"column":42},"end":{"line":47,"column":1}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":42,"column":36},"end":{"line":42,"column":37}},"loc":{"start":{"line":42,"column":49},"end":{"line":44,"column":3}},"line":42},"2":{"name":"(anonymous_2)","decl":{"start":{"line":51,"column":24},"end":{"line":51,"column":25}},"loc":{"start":{"line":51,"column":37},"end":{"line":78,"column":1}},"line":51},"3":{"name":"(anonymous_3)","decl":{"start":{"line":80,"column":22},"end":{"line":80,"column":23}},"loc":{"start":{"line":80,"column":35},"end":{"line":84,"column":1}},"line":80},"4":{"name":"(anonymous_4)","decl":{"start":{"line":86,"column":24},"end":{"line":86,"column":25}},"loc":{"start":{"line":86,"column":36},"end":{"line":89,"column":1}},"line":86},"5":{"name":"(anonymous_5)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":1}},"line":91},"6":{"name":"(anonymous_6)","decl":{"start":{"line":100,"column":24},"end":{"line":100,"column":25}},"loc":{"start":{"line":100,"column":36},"end":{"line":139,"column":1}},"line":100},"7":{"name":"(anonymous_7)","decl":{"start":{"line":141,"column":28},"end":{"line":141,"column":29}},"loc":{"start":{"line":141,"column":40},"end":{"line":211,"column":1}},"line":141},"8":{"name":"(anonymous_8)","decl":{"start":{"line":158,"column":30},"end":{"line":158,"column":31}},"loc":{"start":{"line":158,"column":43},"end":{"line":162,"column":3}},"line":158},"9":{"name":"(anonymous_9)","decl":{"start":{"line":159,"column":27},"end":{"line":159,"column":28}},"loc":{"start":{"line":159,"column":40},"end":{"line":161,"column":5}},"line":159},"10":{"name":"(anonymous_10)","decl":{"start":{"line":165,"column":32},"end":{"line":165,"column":33}},"loc":{"start":{"line":165,"column":45},"end":{"line":169,"column":3}},"line":165},"11":{"name":"(anonymous_11)","decl":{"start":{"line":173,"column":39},"end":{"line":173,"column":40}},"loc":{"start":{"line":173,"column":52},"end":{"line":177,"column":3}},"line":173},"12":{"name":"(anonymous_12)","decl":{"start":{"line":215,"column":24},"end":{"line":215,"column":25}},"loc":{"start":{"line":215,"column":34},"end":{"line":217,"column":1}},"line":215}},"branchMap":{"0":{"loc":{"start":{"line":36,"column":19},"end":{"line":36,"column":33}},"type":"binary-expr","locations":[{"start":{"line":36,"column":19},"end":{"line":36,"column":27}},{"start":{"line":36,"column":31},"end":{"line":36,"column":33}}],"line":36},"1":{"loc":{"start":{"line":42,"column":14},"end":{"line":42,"column":26}},"type":"binary-expr","locations":[{"start":{"line":42,"column":14},"end":{"line":42,"column":20}},{"start":{"line":42,"column":24},"end":{"line":42,"column":26}}],"line":42},"2":{"loc":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"type":"if","locations":[{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},{"start":{"line":52,"column":2},"end":{"line":52,"column":65}}],"line":52},"3":{"loc":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"type":"if","locations":[{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},{"start":{"line":53,"column":2},"end":{"line":55,"column":3}}],"line":53},"4":{"loc":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},{"start":{"line":59,"column":2},"end":{"line":61,"column":3}}],"line":59},"5":{"loc":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"type":"if","locations":[{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},{"start":{"line":72,"column":2},"end":{"line":75,"column":3}}],"line":72},"6":{"loc":{"start":{"line":72,"column":6},"end":{"line":72,"column":28}},"type":"binary-expr","locations":[{"start":{"line":72,"column":6},"end":{"line":72,"column":18}},{"start":{"line":72,"column":22},"end":{"line":72,"column":28}}],"line":72},"7":{"loc":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"type":"if","locations":[{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},{"start":{"line":81,"column":2},"end":{"line":81,"column":22}}],"line":81},"8":{"loc":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"type":"if","locations":[{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},{"start":{"line":103,"column":2},"end":{"line":103,"column":58}}],"line":103},"9":{"loc":{"start":{"line":103,"column":6},"end":{"line":103,"column":50}},"type":"binary-expr","locations":[{"start":{"line":103,"column":6},"end":{"line":103,"column":18}},{"start":{"line":103,"column":22},"end":{"line":103,"column":35}},{"start":{"line":103,"column":39},"end":{"line":103,"column":50}}],"line":103},"10":{"loc":{"start":{"line":110,"column":9},"end":{"line":110,"column":54}},"type":"binary-expr","locations":[{"start":{"line":110,"column":9},"end":{"line":110,"column":37}},{"start":{"line":110,"column":41},"end":{"line":110,"column":54}}],"line":110},"11":{"loc":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"type":"if","locations":[{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},{"start":{"line":116,"column":2},"end":{"line":126,"column":3}}],"line":116},"12":{"loc":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"type":"if","locations":[{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},{"start":{"line":118,"column":4},"end":{"line":121,"column":5}}],"line":118},"13":{"loc":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},{"start":{"line":122,"column":4},"end":{"line":125,"column":5}}],"line":122},"14":{"loc":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"type":"if","locations":[{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},{"start":{"line":131,"column":2},"end":{"line":136,"column":3}}],"line":131},"15":{"loc":{"start":{"line":131,"column":6},"end":{"line":131,"column":45}},"type":"binary-expr","locations":[{"start":{"line":131,"column":6},"end":{"line":131,"column":26}},{"start":{"line":131,"column":30},"end":{"line":131,"column":45}}],"line":131},"16":{"loc":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"type":"if","locations":[{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},{"start":{"line":153,"column":4},"end":{"line":153,"column":54}}],"line":153},"17":{"loc":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"type":"if","locations":[{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},{"start":{"line":160,"column":6},"end":{"line":160,"column":54}}],"line":160},"18":{"loc":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"type":"if","locations":[{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},{"start":{"line":166,"column":4},"end":{"line":168,"column":5}}],"line":166},"19":{"loc":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"type":"if","locations":[{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},{"start":{"line":174,"column":4},"end":{"line":176,"column":5}}],"line":174},"20":{"loc":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"type":"switch","locations":[{"start":{"line":182,"column":4},"end":{"line":182,"column":19}},{"start":{"line":183,"column":4},"end":{"line":185,"column":11}},{"start":{"line":187,"column":4},"end":{"line":189,"column":11}},{"start":{"line":191,"column":4},"end":{"line":193,"column":11}},{"start":{"line":195,"column":4},"end":{"line":195,"column":16}},{"start":{"line":196,"column":4},"end":{"line":196,"column":24}},{"start":{"line":197,"column":4},"end":{"line":197,"column":27}},{"start":{"line":198,"column":4},"end":{"line":198,"column":23}},{"start":{"line":199,"column":4},"end":{"line":199,"column":21}},{"start":{"line":200,"column":4},"end":{"line":200,"column":16}},{"start":{"line":201,"column":4},"end":{"line":202,"column":34}}],"line":181}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":7,"8":7,"9":7,"10":7,"11":7,"12":7,"13":7,"14":7,"15":7,"16":7,"17":7,"18":7,"19":7,"20":7,"21":7,"22":7,"23":7,"24":7,"25":7,"26":7,"27":0,"28":7,"29":1,"30":1,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":1,"47":7,"48":0,"49":7,"50":7,"51":1,"52":7,"53":7,"54":1,"55":18,"56":18,"57":18,"58":18,"59":1,"60":25,"61":18,"62":7,"63":7,"64":0,"65":0,"66":7,"67":7,"68":7,"69":0,"70":0,"71":7,"72":7,"73":7,"74":7,"75":7,"76":0,"77":0,"78":0,"79":0,"80":7,"81":1,"82":7,"83":7,"84":7,"85":7,"86":7,"87":7,"88":7,"89":119,"90":119,"91":119,"92":112,"93":7,"94":14,"95":0,"96":0,"97":7,"98":14,"99":14,"100":7,"101":21,"102":7,"103":7,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":7,"111":7,"112":7,"113":7,"114":7,"115":1,"116":0,"117":1,"118":1},"f":{"0":7,"1":0,"2":0,"3":7,"4":7,"5":18,"6":25,"7":7,"8":14,"9":0,"10":14,"11":21,"12":0},"b":{"0":[7,7],"1":[7,7],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,7],"8":[18,7],"9":[25,18,14],"10":[7,0],"11":[7,0],"12":[0,7],"13":[7,0],"14":[0,7],"15":[7,0],"16":[112,7],"17":[0,0],"18":[14,0],"19":[7,14],"20":[0,0,0,0,0,2,2,2,6,6,7]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"2cc4f925db2a60e89bf0743124faec4e8996dfdb","contentHash":"245d5cb2b23d975dc5b9a0ed2553c93c587727d50a7961242f50cec333c04ba9"},"/Users/isaacs/dev/js/tar/lib/global-header-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/global-header-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":35}},"1":{"start":{"line":3,"column":27},"end":{"line":3,"column":65}},"2":{"start":{"line":4,"column":15},"end":{"line":4,"column":34}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":50}},"4":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"5":{"start":{"line":10,"column":4},"end":{"line":10,"column":40}},"6":{"start":{"line":12,"column":2},"end":{"line":12,"column":40}},"7":{"start":{"line":13,"column":2},"end":{"line":13,"column":23}}},"fnMap":{"0":{"name":"GlobalHeaderWriter","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":27}},"loc":{"start":{"line":8,"column":36},"end":{"line":14,"column":1}},"line":8}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"type":"if","locations":[{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},{"start":{"line":9,"column":2},"end":{"line":11,"column":3}}],"line":9}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3d0c8589f62a5c8ccec606d52d3abd98e5627d57","contentHash":"a2570ca840cf3e44d77e15af0aee52f7c145da39b76366006f3672b9708def3e"},"/Users/isaacs/dev/js/tar/lib/parse.js":{"path":"/Users/isaacs/dev/js/tar/lib/parse.js","statementMap":{"0":{"start":{"line":6,"column":0},"end":{"line":6,"column":37}},"1":{"start":{"line":8,"column":13},"end":{"line":8,"column":30}},"2":{"start":{"line":9,"column":13},"end":{"line":9,"column":26}},"3":{"start":{"line":10,"column":18},"end":{"line":10,"column":41}},"4":{"start":{"line":11,"column":10},"end":{"line":11,"column":30}},"5":{"start":{"line":12,"column":16},"end":{"line":12,"column":38}},"6":{"start":{"line":13,"column":12},"end":{"line":13,"column":33}},"7":{"start":{"line":14,"column":18},"end":{"line":14,"column":46}},"8":{"start":{"line":15,"column":21},"end":{"line":15,"column":52}},"9":{"start":{"line":16,"column":13},"end":{"line":16,"column":33}},"10":{"start":{"line":17,"column":15},"end":{"line":17,"column":34}},"11":{"start":{"line":18,"column":14},"end":{"line":18,"column":32}},"12":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"13":{"start":{"line":28,"column":11},"end":{"line":28,"column":15}},"14":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"15":{"start":{"line":29,"column":30},"end":{"line":29,"column":48}},"16":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"17":{"start":{"line":36,"column":2},"end":{"line":36,"column":20}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":20}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":35}},"20":{"start":{"line":39,"column":2},"end":{"line":39,"column":17}},"21":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"22":{"start":{"line":41,"column":2},"end":{"line":41,"column":20}},"23":{"start":{"line":43,"column":2},"end":{"line":45,"column":4}},"24":{"start":{"line":44,"column":4},"end":{"line":44,"column":23}},"25":{"start":{"line":47,"column":2},"end":{"line":49,"column":4}},"26":{"start":{"line":48,"column":4},"end":{"line":48,"column":18}},"27":{"start":{"line":51,"column":2},"end":{"line":53,"column":4}},"28":{"start":{"line":52,"column":4},"end":{"line":52,"column":19}},"29":{"start":{"line":55,"column":2},"end":{"line":57,"column":4}},"30":{"start":{"line":56,"column":4},"end":{"line":56,"column":20}},"31":{"start":{"line":63,"column":0},"end":{"line":67,"column":1}},"32":{"start":{"line":64,"column":11},"end":{"line":64,"column":15}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"34":{"start":{"line":65,"column":31},"end":{"line":65,"column":57}},"35":{"start":{"line":66,"column":2},"end":{"line":66,"column":16}},"36":{"start":{"line":72,"column":0},"end":{"line":83,"column":1}},"37":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"38":{"start":{"line":77,"column":4},"end":{"line":79,"column":5}},"39":{"start":{"line":77,"column":17},"end":{"line":77,"column":18}},"40":{"start":{"line":77,"column":24},"end":{"line":77,"column":32}},"41":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"42":{"start":{"line":78,"column":22},"end":{"line":78,"column":62}},"43":{"start":{"line":80,"column":4},"end":{"line":80,"column":10}},"44":{"start":{"line":82,"column":2},"end":{"line":82,"column":30}},"45":{"start":{"line":85,"column":0},"end":{"line":88,"column":1}},"46":{"start":{"line":86,"column":2},"end":{"line":86,"column":20}},"47":{"start":{"line":87,"column":2},"end":{"line":87,"column":28}},"48":{"start":{"line":94,"column":0},"end":{"line":94,"column":38}},"49":{"start":{"line":96,"column":0},"end":{"line":137,"column":1}},"50":{"start":{"line":97,"column":2},"end":{"line":97,"column":59}},"51":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"52":{"start":{"line":105,"column":16},"end":{"line":105,"column":27}},"53":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"54":{"start":{"line":106,"column":22},"end":{"line":106,"column":36}},"55":{"start":{"line":108,"column":6},"end":{"line":108,"column":34}},"56":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"57":{"start":{"line":109,"column":31},"end":{"line":109,"column":51}},"58":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"59":{"start":{"line":112,"column":6},"end":{"line":112,"column":17}},"60":{"start":{"line":113,"column":6},"end":{"line":113,"column":24}},"61":{"start":{"line":117,"column":15},"end":{"line":117,"column":19}},"62":{"start":{"line":118,"column":4},"end":{"line":120,"column":5}},"63":{"start":{"line":118,"column":17},"end":{"line":118,"column":18}},"64":{"start":{"line":119,"column":6},"end":{"line":119,"column":23}},"65":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"66":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"67":{"start":{"line":128,"column":8},"end":{"line":128,"column":26}},"68":{"start":{"line":129,"column":6},"end":{"line":129,"column":29}},"69":{"start":{"line":131,"column":6},"end":{"line":131,"column":30}},"70":{"start":{"line":132,"column":6},"end":{"line":132,"column":25}},"71":{"start":{"line":136,"column":2},"end":{"line":136,"column":22}},"72":{"start":{"line":140,"column":0},"end":{"line":285,"column":1}},"73":{"start":{"line":141,"column":15},"end":{"line":141,"column":31}},"74":{"start":{"line":142,"column":13},"end":{"line":142,"column":17}},"75":{"start":{"line":147,"column":13},"end":{"line":147,"column":18}},"76":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"77":{"start":{"line":150,"column":12},"end":{"line":150,"column":41}},"78":{"start":{"line":151,"column":4},"end":{"line":151,"column":21}},"79":{"start":{"line":152,"column":4},"end":{"line":152,"column":37}},"80":{"start":{"line":153,"column":4},"end":{"line":153,"column":37}},"81":{"start":{"line":154,"column":4},"end":{"line":154,"column":32}},"82":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"83":{"start":{"line":171,"column":6},"end":{"line":171,"column":23}},"84":{"start":{"line":172,"column":6},"end":{"line":172,"column":18}},"85":{"start":{"line":173,"column":6},"end":{"line":173,"column":11}},"86":{"start":{"line":177,"column":6},"end":{"line":177,"column":32}},"87":{"start":{"line":178,"column":6},"end":{"line":183,"column":7}},"88":{"start":{"line":179,"column":8},"end":{"line":179,"column":41}},"89":{"start":{"line":180,"column":8},"end":{"line":182,"column":10}},"90":{"start":{"line":181,"column":10},"end":{"line":181,"column":43}},"91":{"start":{"line":184,"column":6},"end":{"line":184,"column":33}},"92":{"start":{"line":185,"column":6},"end":{"line":185,"column":17}},"93":{"start":{"line":186,"column":6},"end":{"line":186,"column":11}},"94":{"start":{"line":191,"column":6},"end":{"line":191,"column":32}},"95":{"start":{"line":192,"column":6},"end":{"line":194,"column":7}},"96":{"start":{"line":193,"column":8},"end":{"line":193,"column":37}},"97":{"start":{"line":195,"column":6},"end":{"line":195,"column":27}},"98":{"start":{"line":196,"column":6},"end":{"line":196,"column":17}},"99":{"start":{"line":197,"column":6},"end":{"line":197,"column":11}},"100":{"start":{"line":201,"column":6},"end":{"line":201,"column":29}},"101":{"start":{"line":202,"column":6},"end":{"line":205,"column":7}},"102":{"start":{"line":203,"column":8},"end":{"line":203,"column":45}},"103":{"start":{"line":204,"column":8},"end":{"line":204,"column":44}},"104":{"start":{"line":206,"column":6},"end":{"line":206,"column":25}},"105":{"start":{"line":207,"column":6},"end":{"line":207,"column":17}},"106":{"start":{"line":208,"column":6},"end":{"line":208,"column":11}},"107":{"start":{"line":213,"column":6},"end":{"line":213,"column":29}},"108":{"start":{"line":214,"column":6},"end":{"line":217,"column":7}},"109":{"start":{"line":215,"column":8},"end":{"line":215,"column":45}},"110":{"start":{"line":216,"column":8},"end":{"line":216,"column":40}},"111":{"start":{"line":218,"column":6},"end":{"line":218,"column":21}},"112":{"start":{"line":219,"column":6},"end":{"line":219,"column":17}},"113":{"start":{"line":220,"column":6},"end":{"line":220,"column":11}},"114":{"start":{"line":226,"column":6},"end":{"line":226,"column":23}},"115":{"start":{"line":227,"column":6},"end":{"line":227,"column":25}},"116":{"start":{"line":228,"column":6},"end":{"line":228,"column":11}},"117":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"118":{"start":{"line":233,"column":4},"end":{"line":233,"column":28}},"119":{"start":{"line":235,"column":17},"end":{"line":235,"column":29}},"120":{"start":{"line":236,"column":19},"end":{"line":236,"column":33}},"121":{"start":{"line":240,"column":4},"end":{"line":240,"column":25}},"122":{"start":{"line":242,"column":2},"end":{"line":242,"column":49}},"123":{"start":{"line":243,"column":2},"end":{"line":243,"column":19}},"124":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"125":{"start":{"line":247,"column":4},"end":{"line":249,"column":6}},"126":{"start":{"line":248,"column":6},"end":{"line":248,"column":24}},"127":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"128":{"start":{"line":252,"column":13},"end":{"line":252,"column":35}},"129":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"130":{"start":{"line":255,"column":4},"end":{"line":255,"column":23}},"131":{"start":{"line":258,"column":2},"end":{"line":258,"column":21}},"132":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"133":{"start":{"line":261,"column":4},"end":{"line":261,"column":39}},"134":{"start":{"line":264,"column":11},"end":{"line":264,"column":15}},"135":{"start":{"line":266,"column":2},"end":{"line":268,"column":4}},"136":{"start":{"line":267,"column":4},"end":{"line":267,"column":14}},"137":{"start":{"line":270,"column":2},"end":{"line":272,"column":4}},"138":{"start":{"line":271,"column":4},"end":{"line":271,"column":15}},"139":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"140":{"start":{"line":275,"column":4},"end":{"line":275,"column":29}},"141":{"start":{"line":278,"column":2},"end":{"line":278,"column":22}},"142":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"143":{"start":{"line":282,"column":4},"end":{"line":282,"column":15}},"144":{"start":{"line":283,"column":4},"end":{"line":283,"column":22}}},"fnMap":{"0":{"name":"Parse","decl":{"start":{"line":27,"column":9},"end":{"line":27,"column":14}},"loc":{"start":{"line":27,"column":18},"end":{"line":58,"column":1}},"line":27},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":25},"end":{"line":43,"column":26}},"loc":{"start":{"line":43,"column":38},"end":{"line":45,"column":3}},"line":43},"2":{"name":"(anonymous_2)","decl":{"start":{"line":47,"column":24},"end":{"line":47,"column":25}},"loc":{"start":{"line":47,"column":37},"end":{"line":49,"column":3}},"line":47},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":23},"end":{"line":51,"column":24}},"loc":{"start":{"line":51,"column":35},"end":{"line":53,"column":3}},"line":51},"4":{"name":"(anonymous_4)","decl":{"start":{"line":55,"column":25},"end":{"line":55,"column":26}},"loc":{"start":{"line":55,"column":37},"end":{"line":57,"column":3}},"line":55},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":29},"end":{"line":63,"column":30}},"loc":{"start":{"line":63,"column":41},"end":{"line":67,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":72,"column":24},"end":{"line":72,"column":25}},"loc":{"start":{"line":72,"column":37},"end":{"line":83,"column":1}},"line":72},"7":{"name":"(anonymous_7)","decl":{"start":{"line":85,"column":22},"end":{"line":85,"column":23}},"loc":{"start":{"line":85,"column":35},"end":{"line":88,"column":1}},"line":85},"8":{"name":"(anonymous_8)","decl":{"start":{"line":94,"column":24},"end":{"line":94,"column":25}},"loc":{"start":{"line":94,"column":36},"end":{"line":94,"column":38}},"line":94},"9":{"name":"(anonymous_9)","decl":{"start":{"line":96,"column":27},"end":{"line":96,"column":28}},"loc":{"start":{"line":96,"column":40},"end":{"line":137,"column":1}},"line":96},"10":{"name":"(anonymous_10)","decl":{"start":{"line":140,"column":30},"end":{"line":140,"column":31}},"loc":{"start":{"line":140,"column":43},"end":{"line":285,"column":1}},"line":140},"11":{"name":"(anonymous_11)","decl":{"start":{"line":178,"column":14},"end":{"line":178,"column":15}},"loc":{"start":{"line":178,"column":26},"end":{"line":183,"column":7}},"line":178},"12":{"name":"(anonymous_12)","decl":{"start":{"line":180,"column":42},"end":{"line":180,"column":43}},"loc":{"start":{"line":180,"column":55},"end":{"line":182,"column":9}},"line":180},"13":{"name":"(anonymous_13)","decl":{"start":{"line":192,"column":14},"end":{"line":192,"column":15}},"loc":{"start":{"line":192,"column":26},"end":{"line":194,"column":7}},"line":192},"14":{"name":"(anonymous_14)","decl":{"start":{"line":202,"column":14},"end":{"line":202,"column":15}},"loc":{"start":{"line":202,"column":26},"end":{"line":205,"column":7}},"line":202},"15":{"name":"(anonymous_15)","decl":{"start":{"line":214,"column":14},"end":{"line":214,"column":15}},"loc":{"start":{"line":214,"column":26},"end":{"line":217,"column":7}},"line":214},"16":{"name":"(anonymous_16)","decl":{"start":{"line":247,"column":21},"end":{"line":247,"column":22}},"loc":{"start":{"line":247,"column":34},"end":{"line":249,"column":5}},"line":247},"17":{"name":"(anonymous_17)","decl":{"start":{"line":266,"column":20},"end":{"line":266,"column":21}},"loc":{"start":{"line":266,"column":32},"end":{"line":268,"column":3}},"line":266},"18":{"name":"(anonymous_18)","decl":{"start":{"line":270,"column":21},"end":{"line":270,"column":22}},"loc":{"start":{"line":270,"column":33},"end":{"line":272,"column":3}},"line":270}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},{"start":{"line":29,"column":2},"end":{"line":29,"column":48}}],"line":29},"1":{"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"type":"if","locations":[{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},{"start":{"line":65,"column":2},"end":{"line":65,"column":57}}],"line":65},"2":{"loc":{"start":{"line":65,"column":6},"end":{"line":65,"column":29}},"type":"binary-expr","locations":[{"start":{"line":65,"column":6},"end":{"line":65,"column":16}},{"start":{"line":65,"column":20},"end":{"line":65,"column":29}}],"line":65},"3":{"loc":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},{"start":{"line":73,"column":2},"end":{"line":81,"column":3}}],"line":73},"4":{"loc":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"type":"if","locations":[{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},{"start":{"line":78,"column":6},"end":{"line":78,"column":62}}],"line":78},"5":{"loc":{"start":{"line":97,"column":9},"end":{"line":97,"column":30}},"type":"binary-expr","locations":[{"start":{"line":97,"column":9},"end":{"line":97,"column":10}},{"start":{"line":97,"column":14},"end":{"line":97,"column":30}}],"line":97},"6":{"loc":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"type":"if","locations":[{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},{"start":{"line":104,"column":2},"end":{"line":134,"column":3}}],"line":104},"7":{"loc":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"type":"if","locations":[{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},{"start":{"line":106,"column":4},"end":{"line":110,"column":5}}],"line":106},"8":{"loc":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"type":"if","locations":[{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},{"start":{"line":109,"column":6},"end":{"line":109,"column":51}}],"line":109},"9":{"loc":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},{"start":{"line":111,"column":4},"end":{"line":114,"column":5}}],"line":111},"10":{"loc":{"start":{"line":118,"column":20},"end":{"line":118,"column":35}},"type":"binary-expr","locations":[{"start":{"line":118,"column":20},"end":{"line":118,"column":27}},{"start":{"line":118,"column":31},"end":{"line":118,"column":35}}],"line":118},"11":{"loc":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"type":"if","locations":[{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},{"start":{"line":126,"column":4},"end":{"line":133,"column":5}}],"line":126},"12":{"loc":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"type":"if","locations":[{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},{"start":{"line":127,"column":6},"end":{"line":128,"column":26}}],"line":127},"13":{"loc":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"type":"if","locations":[{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},{"start":{"line":149,"column":2},"end":{"line":155,"column":3}}],"line":149},"14":{"loc":{"start":{"line":149,"column":6},"end":{"line":149,"column":48}},"type":"binary-expr","locations":[{"start":{"line":149,"column":6},"end":{"line":149,"column":26}},{"start":{"line":149,"column":30},"end":{"line":149,"column":48}}],"line":149},"15":{"loc":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"type":"switch","locations":[{"start":{"line":158,"column":4},"end":{"line":158,"column":16}},{"start":{"line":159,"column":4},"end":{"line":159,"column":19}},{"start":{"line":160,"column":4},"end":{"line":160,"column":16}},{"start":{"line":161,"column":4},"end":{"line":161,"column":24}},{"start":{"line":162,"column":4},"end":{"line":162,"column":27}},{"start":{"line":163,"column":4},"end":{"line":163,"column":23}},{"start":{"line":164,"column":4},"end":{"line":164,"column":21}},{"start":{"line":165,"column":4},"end":{"line":165,"column":16}},{"start":{"line":166,"column":4},"end":{"line":166,"column":26}},{"start":{"line":167,"column":4},"end":{"line":173,"column":11}},{"start":{"line":175,"column":4},"end":{"line":186,"column":11}},{"start":{"line":188,"column":4},"end":{"line":188,"column":26}},{"start":{"line":189,"column":4},"end":{"line":197,"column":11}},{"start":{"line":199,"column":4},"end":{"line":208,"column":11}},{"start":{"line":210,"column":4},"end":{"line":210,"column":31}},{"start":{"line":211,"column":4},"end":{"line":220,"column":11}},{"start":{"line":222,"column":4},"end":{"line":228,"column":11}}],"line":157},"16":{"loc":{"start":{"line":179,"column":23},"end":{"line":179,"column":41}},"type":"binary-expr","locations":[{"start":{"line":179,"column":23},"end":{"line":179,"column":35}},{"start":{"line":179,"column":39},"end":{"line":179,"column":41}}],"line":179},"17":{"loc":{"start":{"line":203,"column":25},"end":{"line":203,"column":45}},"type":"binary-expr","locations":[{"start":{"line":203,"column":25},"end":{"line":203,"column":39}},{"start":{"line":203,"column":43},"end":{"line":203,"column":45}}],"line":203},"18":{"loc":{"start":{"line":215,"column":25},"end":{"line":215,"column":45}},"type":"binary-expr","locations":[{"start":{"line":215,"column":25},"end":{"line":215,"column":39}},{"start":{"line":215,"column":43},"end":{"line":215,"column":45}}],"line":215},"19":{"loc":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"type":"if","locations":[{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},{"start":{"line":232,"column":2},"end":{"line":241,"column":3}}],"line":232},"20":{"loc":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"type":"if","locations":[{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},{"start":{"line":246,"column":2},"end":{"line":250,"column":3}}],"line":246},"21":{"loc":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"type":"if","locations":[{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},{"start":{"line":252,"column":2},"end":{"line":252,"column":35}}],"line":252},"22":{"loc":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"type":"if","locations":[{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},{"start":{"line":254,"column":2},"end":{"line":256,"column":3}}],"line":254},"23":{"loc":{"start":{"line":254,"column":6},"end":{"line":254,"column":58}},"type":"binary-expr","locations":[{"start":{"line":254,"column":6},"end":{"line":254,"column":27}},{"start":{"line":254,"column":31},"end":{"line":254,"column":58}}],"line":254},"24":{"loc":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"type":"if","locations":[{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},{"start":{"line":260,"column":2},"end":{"line":262,"column":3}}],"line":260},"25":{"loc":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"type":"if","locations":[{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},{"start":{"line":274,"column":2},"end":{"line":276,"column":3}}],"line":274},"26":{"loc":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"type":"if","locations":[{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},{"start":{"line":281,"column":2},"end":{"line":284,"column":3}}],"line":281}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":0,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":0,"25":1,"26":9,"27":1,"28":1,"29":1,"30":1,"31":1,"32":0,"33":0,"34":0,"35":0,"36":1,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":9,"51":9,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":9,"62":9,"63":9,"64":1031,"65":9,"66":2,"67":1,"68":2,"69":7,"70":7,"71":9,"72":1,"73":7,"74":7,"75":7,"76":7,"77":0,"78":0,"79":0,"80":0,"81":0,"82":7,"83":7,"84":7,"85":7,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":7,"118":0,"119":7,"120":7,"121":7,"122":7,"123":7,"124":7,"125":7,"126":0,"127":7,"128":0,"129":7,"130":0,"131":7,"132":7,"133":0,"134":7,"135":7,"136":7,"137":7,"138":18,"139":7,"140":0,"141":7,"142":7,"143":7,"144":7},"f":{"0":1,"1":0,"2":9,"3":1,"4":1,"5":0,"6":1,"7":1,"8":20,"9":9,"10":7,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":7,"18":18},"b":{"0":[0,1],"1":[0,0],"2":[0,0],"3":[0,1],"4":[0,0],"5":[9,9],"6":[0,9],"7":[0,0],"8":[0,0],"9":[0,0],"10":[1040,1038],"11":[2,7],"12":[1,1],"13":[0,7],"14":[7,7],"15":[1,1,1,3,3,3,7,7,7,7,0,0,0,0,0,0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,7],"20":[7,0],"21":[0,7],"22":[0,7],"23":[7,1],"24":[0,7],"25":[0,7],"26":[7,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"4a8f51a3a12b59eb69694618530032a813fbf8cb","contentHash":"d347e73abcd3109143efee20401d9f0bfc6d68a4a6323bd4559ada44c741786a"},"/Users/isaacs/dev/js/tar/lib/buffer-entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/buffer-entry.js","statementMap":{"0":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"1":{"start":{"line":10,"column":15},"end":{"line":10,"column":34}},"2":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"3":{"start":{"line":14,"column":2},"end":{"line":14,"column":30}},"4":{"start":{"line":15,"column":2},"end":{"line":15,"column":44}},"5":{"start":{"line":16,"column":2},"end":{"line":16,"column":18}},"6":{"start":{"line":17,"column":2},"end":{"line":17,"column":16}},"7":{"start":{"line":18,"column":2},"end":{"line":20,"column":4}},"8":{"start":{"line":19,"column":4},"end":{"line":19,"column":52}},"9":{"start":{"line":23,"column":0},"end":{"line":23,"column":28}},"10":{"start":{"line":26,"column":0},"end":{"line":30,"column":1}},"11":{"start":{"line":27,"column":2},"end":{"line":27,"column":36}},"12":{"start":{"line":28,"column":2},"end":{"line":28,"column":26}},"13":{"start":{"line":29,"column":2},"end":{"line":29,"column":37}}},"fnMap":{"0":{"name":"BufferEntry","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":20}},"loc":{"start":{"line":13,"column":24},"end":{"line":21,"column":1}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":17},"end":{"line":18,"column":18}},"loc":{"start":{"line":18,"column":29},"end":{"line":20,"column":3}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":26,"column":30},"end":{"line":26,"column":31}},"loc":{"start":{"line":26,"column":43},"end":{"line":30,"column":1}},"line":26}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":1,"10":1,"11":0,"12":0,"13":0},"f":{"0":0,"1":0,"2":0},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"d8ad66df900443c9c9d8aefe5fc126a55ba268ec","contentHash":"25e5b3c51e476fcffac7affa191a0ed0f54d64d3d3b760e887bd45ba08fffa65"},"/Users/isaacs/dev/js/tar/lib/extended-header.js":{"path":"/Users/isaacs/dev/js/tar/lib/extended-header.js","statementMap":{"0":{"start":{"line":9,"column":0},"end":{"line":9,"column":31}},"1":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"2":{"start":{"line":12,"column":15},"end":{"line":12,"column":34}},"3":{"start":{"line":13,"column":10},"end":{"line":13,"column":30}},"4":{"start":{"line":14,"column":14},"end":{"line":14,"column":25}},"5":{"start":{"line":15,"column":15},"end":{"line":17,"column":42}},"6":{"start":{"line":20,"column":2},"end":{"line":20,"column":30}},"7":{"start":{"line":21,"column":2},"end":{"line":21,"column":30}},"8":{"start":{"line":22,"column":2},"end":{"line":22,"column":18}},"9":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"10":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"11":{"start":{"line":25,"column":2},"end":{"line":25,"column":20}},"12":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"13":{"start":{"line":27,"column":2},"end":{"line":27,"column":19}},"14":{"start":{"line":28,"column":2},"end":{"line":28,"column":19}},"15":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"16":{"start":{"line":30,"column":2},"end":{"line":30,"column":16}},"17":{"start":{"line":33,"column":0},"end":{"line":33,"column":31}},"18":{"start":{"line":34,"column":0},"end":{"line":34,"column":39}},"19":{"start":{"line":36,"column":8},"end":{"line":36,"column":9}},"20":{"start":{"line":37,"column":13},"end":{"line":37,"column":39}},"21":{"start":{"line":38,"column":11},"end":{"line":38,"column":28}},"22":{"start":{"line":39,"column":11},"end":{"line":39,"column":28}},"23":{"start":{"line":40,"column":11},"end":{"line":40,"column":28}},"24":{"start":{"line":41,"column":11},"end":{"line":41,"column":28}},"25":{"start":{"line":43,"column":0},"end":{"line":45,"column":2}},"26":{"start":{"line":44,"column":2},"end":{"line":44,"column":31}},"27":{"start":{"line":47,"column":0},"end":{"line":47,"column":16}},"28":{"start":{"line":50,"column":9},"end":{"line":50,"column":26}},"29":{"start":{"line":51,"column":9},"end":{"line":51,"column":26}},"30":{"start":{"line":52,"column":12},"end":{"line":52,"column":29}},"31":{"start":{"line":53,"column":8},"end":{"line":53,"column":25}},"32":{"start":{"line":54,"column":8},"end":{"line":54,"column":25}},"33":{"start":{"line":55,"column":8},"end":{"line":55,"column":25}},"34":{"start":{"line":56,"column":8},"end":{"line":56,"column":25}},"35":{"start":{"line":57,"column":12},"end":{"line":57,"column":29}},"36":{"start":{"line":58,"column":9},"end":{"line":58,"column":26}},"37":{"start":{"line":59,"column":9},"end":{"line":59,"column":27}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"39":{"start":{"line":62,"column":27},"end":{"line":62,"column":33}},"40":{"start":{"line":64,"column":2},"end":{"line":130,"column":3}},"41":{"start":{"line":64,"column":16},"end":{"line":64,"column":17}},"42":{"start":{"line":64,"column":23},"end":{"line":64,"column":31}},"43":{"start":{"line":69,"column":12},"end":{"line":69,"column":16}},"44":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"45":{"start":{"line":72,"column":6},"end":{"line":72,"column":53}},"46":{"start":{"line":73,"column":6},"end":{"line":73,"column":12}},"47":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"48":{"start":{"line":77,"column":16},"end":{"line":77,"column":22}},"49":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"50":{"start":{"line":82,"column":10},"end":{"line":82,"column":27}},"51":{"start":{"line":84,"column":10},"end":{"line":84,"column":73}},"52":{"start":{"line":85,"column":10},"end":{"line":85,"column":34}},"53":{"start":{"line":86,"column":10},"end":{"line":86,"column":18}},"54":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"55":{"start":{"line":89,"column":10},"end":{"line":89,"column":68}},"56":{"start":{"line":90,"column":10},"end":{"line":90,"column":16}},"57":{"start":{"line":92,"column":8},"end":{"line":92,"column":29}},"58":{"start":{"line":93,"column":8},"end":{"line":93,"column":16}},"59":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"60":{"start":{"line":98,"column":10},"end":{"line":98,"column":27}},"61":{"start":{"line":99,"column":10},"end":{"line":99,"column":57}},"62":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"63":{"start":{"line":100,"column":35},"end":{"line":100,"column":66}},"64":{"start":{"line":101,"column":10},"end":{"line":101,"column":33}},"65":{"start":{"line":102,"column":10},"end":{"line":102,"column":18}},"66":{"start":{"line":104,"column":8},"end":{"line":104,"column":28}},"67":{"start":{"line":105,"column":8},"end":{"line":105,"column":16}},"68":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"69":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"70":{"start":{"line":112,"column":12},"end":{"line":112,"column":55}},"71":{"start":{"line":113,"column":12},"end":{"line":113,"column":18}},"72":{"start":{"line":115,"column":20},"end":{"line":115,"column":55}},"73":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"74":{"start":{"line":117,"column":12},"end":{"line":117,"column":33}},"75":{"start":{"line":119,"column":10},"end":{"line":119,"column":38}},"76":{"start":{"line":121,"column":10},"end":{"line":121,"column":33}},"77":{"start":{"line":122,"column":10},"end":{"line":122,"column":28}},"78":{"start":{"line":123,"column":10},"end":{"line":123,"column":25}},"79":{"start":{"line":124,"column":10},"end":{"line":124,"column":29}},"80":{"start":{"line":125,"column":10},"end":{"line":125,"column":18}},"81":{"start":{"line":127,"column":8},"end":{"line":127,"column":28}},"82":{"start":{"line":128,"column":8},"end":{"line":128,"column":16}},"83":{"start":{"line":134,"column":2},"end":{"line":136,"column":42}},"84":{"start":{"line":138,"column":2},"end":{"line":138,"column":15}},"85":{"start":{"line":139,"column":2},"end":{"line":139,"column":16}}},"fnMap":{"0":{"name":"ExtendedHeader","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":23}},"loc":{"start":{"line":19,"column":27},"end":{"line":31,"column":1}},"line":19},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":28},"end":{"line":43,"column":29}},"loc":{"start":{"line":43,"column":41},"end":{"line":45,"column":1}},"line":43},"2":{"name":"parse","decl":{"start":{"line":61,"column":9},"end":{"line":61,"column":14}},"loc":{"start":{"line":61,"column":19},"end":{"line":131,"column":1}},"line":61},"3":{"name":"error","decl":{"start":{"line":133,"column":9},"end":{"line":133,"column":14}},"loc":{"start":{"line":133,"column":25},"end":{"line":140,"column":1}},"line":133}},"branchMap":{"0":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},{"start":{"line":62,"column":2},"end":{"line":62,"column":33}}],"line":62},"1":{"loc":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},{"start":{"line":71,"column":4},"end":{"line":74,"column":5}}],"line":71},"2":{"loc":{"start":{"line":71,"column":8},"end":{"line":71,"column":54}},"type":"binary-expr","locations":[{"start":{"line":71,"column":8},"end":{"line":71,"column":23}},{"start":{"line":71,"column":27},"end":{"line":71,"column":54}}],"line":71},"3":{"loc":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"type":"switch","locations":[{"start":{"line":77,"column":6},"end":{"line":77,"column":22}},{"start":{"line":79,"column":6},"end":{"line":93,"column":16}},{"start":{"line":95,"column":6},"end":{"line":105,"column":16}},{"start":{"line":107,"column":6},"end":{"line":128,"column":16}}],"line":76},"4":{"loc":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},{"start":{"line":81,"column":8},"end":{"line":87,"column":9}}],"line":81},"5":{"loc":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},{"start":{"line":88,"column":8},"end":{"line":91,"column":9}}],"line":88},"6":{"loc":{"start":{"line":88,"column":12},"end":{"line":88,"column":28}},"type":"binary-expr","locations":[{"start":{"line":88,"column":12},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":28}}],"line":88},"7":{"loc":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"type":"if","locations":[{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},{"start":{"line":97,"column":8},"end":{"line":103,"column":9}}],"line":97},"8":{"loc":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"type":"if","locations":[{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},{"start":{"line":100,"column":10},"end":{"line":100,"column":66}}],"line":100},"9":{"loc":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},{"start":{"line":109,"column":8},"end":{"line":126,"column":9}}],"line":109},"10":{"loc":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"type":"if","locations":[{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},{"start":{"line":111,"column":10},"end":{"line":114,"column":11}}],"line":111},"11":{"loc":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"type":"if","locations":[{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},{"start":{"line":116,"column":10},"end":{"line":118,"column":11}}],"line":116}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":4,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0},"f":{"0":0,"1":4,"2":0,"3":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"77cb382c69a46833a08275dbc55bf34db0dcd796","contentHash":"78a790af1726a774425fb478f1423068fe64414b747d89b597baf45139e7ae3d"},"/Users/isaacs/dev/js/tar/lib/extract.js":{"path":"/Users/isaacs/dev/js/tar/lib/extract.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"1":{"start":{"line":5,"column":10},"end":{"line":5,"column":30}},"2":{"start":{"line":6,"column":14},"end":{"line":6,"column":32}},"3":{"start":{"line":7,"column":15},"end":{"line":7,"column":34}},"4":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"6":{"start":{"line":11,"column":34},"end":{"line":11,"column":58}},"7":{"start":{"line":12,"column":2},"end":{"line":12,"column":23}},"8":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"9":{"start":{"line":15,"column":4},"end":{"line":15,"column":25}},"10":{"start":{"line":19,"column":2},"end":{"line":19,"column":59}},"11":{"start":{"line":20,"column":2},"end":{"line":20,"column":25}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":26}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"15":{"start":{"line":25,"column":38},"end":{"line":25,"column":52}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":34}},"17":{"start":{"line":29,"column":2},"end":{"line":29,"column":14}},"18":{"start":{"line":30,"column":11},"end":{"line":30,"column":15}},"19":{"start":{"line":35,"column":2},"end":{"line":60,"column":4}},"20":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"21":{"start":{"line":39,"column":14},"end":{"line":39,"column":63}},"22":{"start":{"line":40,"column":6},"end":{"line":40,"column":39}},"23":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"24":{"start":{"line":42,"column":17},"end":{"line":42,"column":70}},"25":{"start":{"line":43,"column":8},"end":{"line":43,"column":50}},"26":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"27":{"start":{"line":47,"column":6},"end":{"line":48,"column":66}},"28":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"29":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"30":{"start":{"line":53,"column":21},"end":{"line":53,"column":41}},"31":{"start":{"line":54,"column":19},"end":{"line":54,"column":56}},"32":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"33":{"start":{"line":56,"column":8},"end":{"line":56,"column":65}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":54}},"35":{"start":{"line":62,"column":2},"end":{"line":65,"column":4}},"36":{"start":{"line":63,"column":4},"end":{"line":63,"column":36}},"37":{"start":{"line":64,"column":4},"end":{"line":64,"column":15}},"38":{"start":{"line":67,"column":2},"end":{"line":69,"column":4}},"39":{"start":{"line":68,"column":4},"end":{"line":68,"column":25}},"40":{"start":{"line":71,"column":2},"end":{"line":73,"column":4}},"41":{"start":{"line":72,"column":4},"end":{"line":72,"column":20}},"42":{"start":{"line":79,"column":2},"end":{"line":84,"column":4}},"43":{"start":{"line":81,"column":4},"end":{"line":81,"column":21}},"44":{"start":{"line":82,"column":4},"end":{"line":82,"column":18}},"45":{"start":{"line":83,"column":4},"end":{"line":83,"column":20}},"46":{"start":{"line":87,"column":0},"end":{"line":87,"column":28}},"47":{"start":{"line":89,"column":0},"end":{"line":94,"column":1}},"48":{"start":{"line":90,"column":11},"end":{"line":90,"column":15}},"49":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"50":{"start":{"line":91,"column":31},"end":{"line":91,"column":57}},"51":{"start":{"line":92,"column":2},"end":{"line":92,"column":15}}},"fnMap":{"0":{"name":"Extract","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":16}},"loc":{"start":{"line":10,"column":24},"end":{"line":85,"column":1}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":35,"column":17},"end":{"line":35,"column":18}},"loc":{"start":{"line":35,"column":34},"end":{"line":60,"column":3}},"line":35},"2":{"name":"(anonymous_2)","decl":{"start":{"line":62,"column":24},"end":{"line":62,"column":25}},"loc":{"start":{"line":62,"column":36},"end":{"line":65,"column":3}},"line":62},"3":{"name":"(anonymous_3)","decl":{"start":{"line":67,"column":24},"end":{"line":67,"column":25}},"loc":{"start":{"line":67,"column":38},"end":{"line":69,"column":3}},"line":67},"4":{"name":"(anonymous_4)","decl":{"start":{"line":71,"column":24},"end":{"line":71,"column":25}},"loc":{"start":{"line":71,"column":35},"end":{"line":73,"column":3}},"line":71},"5":{"name":"(anonymous_5)","decl":{"start":{"line":79,"column":24},"end":{"line":79,"column":25}},"loc":{"start":{"line":79,"column":36},"end":{"line":84,"column":3}},"line":79},"6":{"name":"(anonymous_6)","decl":{"start":{"line":89,"column":31},"end":{"line":89,"column":32}},"loc":{"start":{"line":89,"column":43},"end":{"line":94,"column":1}},"line":89}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},{"start":{"line":11,"column":2},"end":{"line":11,"column":58}}],"line":11},"1":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"2":{"loc":{"start":{"line":19,"column":14},"end":{"line":19,"column":59}},"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":23}},{"start":{"line":19,"column":27},"end":{"line":19,"column":59}}],"line":19},"3":{"loc":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"type":"if","locations":[{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},{"start":{"line":25,"column":2},"end":{"line":25,"column":52}}],"line":25},"4":{"loc":{"start":{"line":25,"column":6},"end":{"line":25,"column":36}},"type":"binary-expr","locations":[{"start":{"line":25,"column":6},"end":{"line":25,"column":17}},{"start":{"line":25,"column":21},"end":{"line":25,"column":36}}],"line":25},"5":{"loc":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},{"start":{"line":38,"column":4},"end":{"line":45,"column":5}}],"line":38},"6":{"loc":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"type":"if","locations":[{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},{"start":{"line":41,"column":6},"end":{"line":44,"column":7}}],"line":41},"7":{"loc":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},{"start":{"line":46,"column":4},"end":{"line":49,"column":5}}],"line":46},"8":{"loc":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},{"start":{"line":51,"column":4},"end":{"line":59,"column":5}}],"line":51},"9":{"loc":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"type":"binary-expr","locations":[{"start":{"line":52,"column":15},"end":{"line":52,"column":39}},{"start":{"line":52,"column":43},"end":{"line":52,"column":45}}],"line":52},"10":{"loc":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"type":"if","locations":[{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},{"start":{"line":55,"column":6},"end":{"line":57,"column":7}}],"line":55},"11":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},{"start":{"line":91,"column":2},"end":{"line":91,"column":57}}],"line":91},"12":{"loc":{"start":{"line":91,"column":6},"end":{"line":91,"column":29}},"type":"binary-expr","locations":[{"start":{"line":91,"column":6},"end":{"line":91,"column":16}},{"start":{"line":91,"column":20},"end":{"line":91,"column":29}}],"line":91}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":2,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":7,"21":0,"22":0,"23":0,"24":0,"25":0,"26":7,"27":0,"28":7,"29":2,"30":2,"31":2,"32":2,"33":1,"34":2,"35":1,"36":1,"37":1,"38":1,"39":0,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":0,"51":1},"f":{"0":2,"1":7,"2":1,"3":0,"4":1,"5":1,"6":1},"b":{"0":[1,1],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[0,7],"6":[0,0],"7":[0,7],"8":[2,5],"9":[2,0],"10":[1,1],"11":[0,1],"12":[1,1]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3fb9f60facc409fe944dc36bd2e14fc6153e403d","contentHash":"3d9485ca58c6c768b022a39d276296b53647ccf39986885459406e933921c962"}} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/37d58de4-deea-4808-bb77-d27685bd1501.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/37d58de4-deea-4808-bb77-d27685bd1501.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/37d58de4-deea-4808-bb77-d27685bd1501.json
+++ /dev/null
@@ -1 +0,0 @@
-{} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/5ad8066b-6b8c-4bc8-b807-c40bf80898b7.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/5ad8066b-6b8c-4bc8-b807-c40bf80898b7.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/5ad8066b-6b8c-4bc8-b807-c40bf80898b7.json
+++ /dev/null
@@ -1 +0,0 @@
-{} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/5cbf674c-7089-4b7d-b9de-2119be4dbb0b.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/5cbf674c-7089-4b7d-b9de-2119be4dbb0b.json
deleted file mode 100644
index 268ab6e..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/5cbf674c-7089-4b7d-b9de-2119be4dbb0b.json
+++ /dev/null
@@ -1 +0,0 @@
-{"/Users/isaacs/dev/js/tar/lib/pack.js":{"path":"/Users/isaacs/dev/js/tar/lib/pack.js","statementMap":{"0":{"start":{"line":4,"column":0},"end":{"line":4,"column":21}},"1":{"start":{"line":6,"column":18},"end":{"line":6,"column":46}},"2":{"start":{"line":7,"column":13},"end":{"line":7,"column":37}},"3":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"4":{"start":{"line":9,"column":15},"end":{"line":9,"column":34}},"5":{"start":{"line":10,"column":25},"end":{"line":10,"column":61}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":40}},"7":{"start":{"line":12,"column":10},"end":{"line":12,"column":25}},"8":{"start":{"line":14,"column":0},"end":{"line":14,"column":41}},"9":{"start":{"line":14,"column":13},"end":{"line":14,"column":14}},"10":{"start":{"line":14,"column":31},"end":{"line":14,"column":41}},"11":{"start":{"line":16,"column":0},"end":{"line":16,"column":22}},"12":{"start":{"line":20,"column":11},"end":{"line":20,"column":15}},"13":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"14":{"start":{"line":21,"column":29},"end":{"line":21,"column":51}},"15":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"16":{"start":{"line":23,"column":13},"end":{"line":23,"column":52}},"17":{"start":{"line":24,"column":7},"end":{"line":24,"column":32}},"18":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"19":{"start":{"line":28,"column":2},"end":{"line":28,"column":20}},"20":{"start":{"line":29,"column":2},"end":{"line":29,"column":20}},"21":{"start":{"line":30,"column":2},"end":{"line":30,"column":17}},"22":{"start":{"line":32,"column":2},"end":{"line":32,"column":25}},"23":{"start":{"line":33,"column":2},"end":{"line":33,"column":24}},"24":{"start":{"line":35,"column":2},"end":{"line":35,"column":21}},"25":{"start":{"line":36,"column":2},"end":{"line":43,"column":4}},"26":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"27":{"start":{"line":37,"column":35},"end":{"line":37,"column":41}},"28":{"start":{"line":38,"column":4},"end":{"line":38,"column":22}},"29":{"start":{"line":39,"column":4},"end":{"line":41,"column":6}},"30":{"start":{"line":40,"column":6},"end":{"line":40,"column":25}},"31":{"start":{"line":42,"column":4},"end":{"line":42,"column":15}},"32":{"start":{"line":46,"column":0},"end":{"line":57,"column":1}},"33":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"34":{"start":{"line":48,"column":23},"end":{"line":48,"column":29}},"35":{"start":{"line":49,"column":2},"end":{"line":49,"column":24}},"36":{"start":{"line":51,"column":11},"end":{"line":51,"column":15}},"37":{"start":{"line":52,"column":2},"end":{"line":56,"column":10}},"38":{"start":{"line":54,"column":6},"end":{"line":54,"column":24}},"39":{"start":{"line":59,"column":0},"end":{"line":69,"column":1}},"40":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"41":{"start":{"line":60,"column":40},"end":{"line":60,"column":68}},"42":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"43":{"start":{"line":62,"column":19},"end":{"line":62,"column":72}},"44":{"start":{"line":64,"column":2},"end":{"line":64,"column":17}},"45":{"start":{"line":65,"column":2},"end":{"line":65,"column":27}},"46":{"start":{"line":66,"column":2},"end":{"line":66,"column":17}},"47":{"start":{"line":67,"column":2},"end":{"line":67,"column":43}},"48":{"start":{"line":68,"column":2},"end":{"line":68,"column":25}},"49":{"start":{"line":71,"column":0},"end":{"line":75,"column":1}},"50":{"start":{"line":72,"column":2},"end":{"line":72,"column":21}},"51":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"52":{"start":{"line":73,"column":26},"end":{"line":73,"column":52}},"53":{"start":{"line":74,"column":2},"end":{"line":74,"column":20}},"54":{"start":{"line":77,"column":0},"end":{"line":82,"column":1}},"55":{"start":{"line":78,"column":2},"end":{"line":78,"column":22}},"56":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"57":{"start":{"line":79,"column":26},"end":{"line":79,"column":53}},"58":{"start":{"line":80,"column":2},"end":{"line":80,"column":21}},"59":{"start":{"line":81,"column":2},"end":{"line":81,"column":17}},"60":{"start":{"line":84,"column":0},"end":{"line":88,"column":1}},"61":{"start":{"line":85,"column":2},"end":{"line":85,"column":20}},"62":{"start":{"line":86,"column":2},"end":{"line":86,"column":24}},"63":{"start":{"line":87,"column":2},"end":{"line":87,"column":17}},"64":{"start":{"line":90,"column":0},"end":{"line":233,"column":1}},"65":{"start":{"line":91,"column":11},"end":{"line":91,"column":15}},"66":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"67":{"start":{"line":93,"column":4},"end":{"line":93,"column":10}},"68":{"start":{"line":96,"column":14},"end":{"line":96,"column":32}},"69":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"70":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"71":{"start":{"line":100,"column":6},"end":{"line":100,"column":22}},"72":{"start":{"line":102,"column":4},"end":{"line":102,"column":10}},"73":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"74":{"start":{"line":107,"column":4},"end":{"line":107,"column":29}},"75":{"start":{"line":108,"column":4},"end":{"line":111,"column":6}},"76":{"start":{"line":110,"column":6},"end":{"line":110,"column":19}},"77":{"start":{"line":112,"column":4},"end":{"line":112,"column":10}},"78":{"start":{"line":115,"column":2},"end":{"line":115,"column":23}},"79":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"80":{"start":{"line":119,"column":4},"end":{"line":119,"column":24}},"81":{"start":{"line":120,"column":4},"end":{"line":120,"column":24}},"82":{"start":{"line":121,"column":4},"end":{"line":121,"column":18}},"83":{"start":{"line":122,"column":4},"end":{"line":122,"column":20}},"84":{"start":{"line":123,"column":4},"end":{"line":123,"column":10}},"85":{"start":{"line":134,"column":13},"end":{"line":134,"column":53}},"86":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"87":{"start":{"line":137,"column":4},"end":{"line":137,"column":27}},"88":{"start":{"line":140,"column":15},"end":{"line":140,"column":17}},"89":{"start":{"line":142,"column":2},"end":{"line":144,"column":4}},"90":{"start":{"line":143,"column":4},"end":{"line":143,"column":30}},"91":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"92":{"start":{"line":146,"column":25},"end":{"line":146,"column":52}},"93":{"start":{"line":148,"column":2},"end":{"line":148,"column":53}},"94":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"95":{"start":{"line":152,"column":4},"end":{"line":152,"column":49}},"96":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"97":{"start":{"line":156,"column":4},"end":{"line":156,"column":29}},"98":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"99":{"start":{"line":161,"column":6},"end":{"line":161,"column":12}},"100":{"start":{"line":164,"column":6},"end":{"line":164,"column":24}},"101":{"start":{"line":165,"column":6},"end":{"line":165,"column":21}},"102":{"start":{"line":166,"column":6},"end":{"line":166,"column":11}},"103":{"start":{"line":169,"column":15},"end":{"line":169,"column":69}},"104":{"start":{"line":170,"column":6},"end":{"line":170,"column":54}},"105":{"start":{"line":171,"column":6},"end":{"line":171,"column":21}},"106":{"start":{"line":172,"column":6},"end":{"line":172,"column":11}},"107":{"start":{"line":175,"column":15},"end":{"line":175,"column":69}},"108":{"start":{"line":176,"column":6},"end":{"line":176,"column":74}},"109":{"start":{"line":177,"column":6},"end":{"line":177,"column":21}},"110":{"start":{"line":178,"column":6},"end":{"line":178,"column":11}},"111":{"start":{"line":187,"column":15},"end":{"line":187,"column":53}},"112":{"start":{"line":189,"column":2},"end":{"line":189,"column":20}},"113":{"start":{"line":195,"column":2},"end":{"line":197,"column":4}},"114":{"start":{"line":196,"column":4},"end":{"line":196,"column":22}},"115":{"start":{"line":199,"column":2},"end":{"line":205,"column":4}},"116":{"start":{"line":200,"column":4},"end":{"line":202,"column":5}},"117":{"start":{"line":201,"column":6},"end":{"line":201,"column":50}},"118":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"119":{"start":{"line":204,"column":33},"end":{"line":204,"column":44}},"120":{"start":{"line":206,"column":2},"end":{"line":206,"column":31}},"121":{"start":{"line":208,"column":14},"end":{"line":208,"column":19}},"122":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"123":{"start":{"line":210,"column":15},"end":{"line":210,"column":21}},"124":{"start":{"line":211,"column":4},"end":{"line":211,"column":16}},"125":{"start":{"line":215,"column":4},"end":{"line":215,"column":27}},"126":{"start":{"line":216,"column":4},"end":{"line":216,"column":26}},"127":{"start":{"line":217,"column":4},"end":{"line":217,"column":17}},"128":{"start":{"line":220,"column":2},"end":{"line":223,"column":4}},"129":{"start":{"line":222,"column":4},"end":{"line":222,"column":24}},"130":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"131":{"start":{"line":229,"column":4},"end":{"line":229,"column":21}},"132":{"start":{"line":232,"column":2},"end":{"line":232,"column":20}},"133":{"start":{"line":235,"column":0},"end":{"line":235,"column":39}},"134":{"start":{"line":236,"column":0},"end":{"line":236,"column":37}}},"fnMap":{"0":{"name":"Pack","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":13}},"loc":{"start":{"line":18,"column":22},"end":{"line":44,"column":1}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":36,"column":16},"end":{"line":36,"column":17}},"loc":{"start":{"line":36,"column":31},"end":{"line":43,"column":3}},"line":36},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":18},"end":{"line":39,"column":19}},"loc":{"start":{"line":39,"column":30},"end":{"line":41,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":46,"column":27},"end":{"line":46,"column":28}},"loc":{"start":{"line":46,"column":44},"end":{"line":57,"column":1}},"line":46},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":29},"end":{"line":55,"column":5}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":59,"column":21},"end":{"line":59,"column":22}},"loc":{"start":{"line":59,"column":39},"end":{"line":69,"column":1}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":71,"column":23},"end":{"line":71,"column":24}},"loc":{"start":{"line":71,"column":35},"end":{"line":75,"column":1}},"line":71},"7":{"name":"(anonymous_7)","decl":{"start":{"line":77,"column":24},"end":{"line":77,"column":25}},"loc":{"start":{"line":77,"column":36},"end":{"line":82,"column":1}},"line":77},"8":{"name":"(anonymous_8)","decl":{"start":{"line":84,"column":21},"end":{"line":84,"column":22}},"loc":{"start":{"line":84,"column":33},"end":{"line":88,"column":1}},"line":84},"9":{"name":"(anonymous_9)","decl":{"start":{"line":90,"column":26},"end":{"line":90,"column":27}},"loc":{"start":{"line":90,"column":38},"end":{"line":233,"column":1}},"line":90},"10":{"name":"(anonymous_10)","decl":{"start":{"line":108,"column":22},"end":{"line":108,"column":23}},"loc":{"start":{"line":108,"column":34},"end":{"line":111,"column":5}},"line":108},"11":{"name":"(anonymous_11)","decl":{"start":{"line":142,"column":41},"end":{"line":142,"column":42}},"loc":{"start":{"line":142,"column":54},"end":{"line":144,"column":3}},"line":142},"12":{"name":"(anonymous_12)","decl":{"start":{"line":195,"column":20},"end":{"line":195,"column":21}},"loc":{"start":{"line":195,"column":33},"end":{"line":197,"column":3}},"line":195},"13":{"name":"(anonymous_13)","decl":{"start":{"line":199,"column":22},"end":{"line":199,"column":23}},"loc":{"start":{"line":199,"column":34},"end":{"line":205,"column":3}},"line":199},"14":{"name":"(anonymous_14)","decl":{"start":{"line":200,"column":30},"end":{"line":200,"column":31}},"loc":{"start":{"line":200,"column":42},"end":{"line":202,"column":5}},"line":200},"15":{"name":"nextEntry","decl":{"start":{"line":209,"column":11},"end":{"line":209,"column":20}},"loc":{"start":{"line":209,"column":24},"end":{"line":218,"column":3}},"line":209},"16":{"name":"(anonymous_16)","decl":{"start":{"line":220,"column":21},"end":{"line":220,"column":22}},"loc":{"start":{"line":220,"column":35},"end":{"line":223,"column":3}},"line":220},"17":{"name":"(anonymous_17)","decl":{"start":{"line":235,"column":25},"end":{"line":235,"column":26}},"loc":{"start":{"line":235,"column":37},"end":{"line":235,"column":39}},"line":235},"18":{"name":"(anonymous_18)","decl":{"start":{"line":236,"column":23},"end":{"line":236,"column":24}},"loc":{"start":{"line":236,"column":35},"end":{"line":236,"column":37}},"line":236}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"type":"if","locations":[{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},{"start":{"line":21,"column":2},"end":{"line":21,"column":51}}],"line":21},"1":{"loc":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"type":"if","locations":[{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},{"start":{"line":23,"column":2},"end":{"line":24,"column":32}}],"line":23},"2":{"loc":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},{"start":{"line":37,"column":4},"end":{"line":37,"column":41}}],"line":37},"3":{"loc":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"type":"if","locations":[{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},{"start":{"line":48,"column":2},"end":{"line":48,"column":29}}],"line":48},"4":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},{"start":{"line":60,"column":2},"end":{"line":60,"column":68}}],"line":60},"5":{"loc":{"start":{"line":60,"column":6},"end":{"line":60,"column":38}},"type":"binary-expr","locations":[{"start":{"line":60,"column":6},"end":{"line":60,"column":18}},{"start":{"line":60,"column":22},"end":{"line":60,"column":38}}],"line":60},"6":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},{"start":{"line":62,"column":2},"end":{"line":62,"column":72}}],"line":62},"7":{"loc":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},{"start":{"line":73,"column":2},"end":{"line":73,"column":52}}],"line":73},"8":{"loc":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"type":"if","locations":[{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},{"start":{"line":79,"column":2},"end":{"line":79,"column":53}}],"line":79},"9":{"loc":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"type":"if","locations":[{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},{"start":{"line":92,"column":2},"end":{"line":94,"column":3}}],"line":92},"10":{"loc":{"start":{"line":92,"column":6},"end":{"line":92,"column":34}},"type":"binary-expr","locations":[{"start":{"line":92,"column":6},"end":{"line":92,"column":16}},{"start":{"line":92,"column":20},"end":{"line":92,"column":34}}],"line":92},"11":{"loc":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},{"start":{"line":98,"column":2},"end":{"line":103,"column":3}}],"line":98},"12":{"loc":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},{"start":{"line":99,"column":4},"end":{"line":101,"column":5}}],"line":99},"13":{"loc":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"type":"if","locations":[{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},{"start":{"line":105,"column":2},"end":{"line":113,"column":3}}],"line":105},"14":{"loc":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"type":"if","locations":[{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},{"start":{"line":117,"column":2},"end":{"line":124,"column":3}}],"line":117},"15":{"loc":{"start":{"line":134,"column":27},"end":{"line":134,"column":46}},"type":"binary-expr","locations":[{"start":{"line":134,"column":27},"end":{"line":134,"column":37}},{"start":{"line":134,"column":41},"end":{"line":134,"column":46}}],"line":134},"16":{"loc":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"type":"if","locations":[{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},{"start":{"line":135,"column":2},"end":{"line":138,"column":3}}],"line":135},"17":{"loc":{"start":{"line":135,"column":6},"end":{"line":135,"column":72}},"type":"binary-expr","locations":[{"start":{"line":135,"column":6},"end":{"line":135,"column":16}},{"start":{"line":135,"column":20},"end":{"line":135,"column":39}},{"start":{"line":135,"column":43},"end":{"line":135,"column":53}},{"start":{"line":135,"column":57},"end":{"line":135,"column":72}}],"line":135},"18":{"loc":{"start":{"line":142,"column":14},"end":{"line":142,"column":31}},"type":"binary-expr","locations":[{"start":{"line":142,"column":14},"end":{"line":142,"column":25}},{"start":{"line":142,"column":29},"end":{"line":142,"column":31}}],"line":142},"19":{"loc":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"type":"if","locations":[{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},{"start":{"line":146,"column":2},"end":{"line":146,"column":52}}],"line":146},"20":{"loc":{"start":{"line":148,"column":36},"end":{"line":148,"column":52}},"type":"binary-expr","locations":[{"start":{"line":148,"column":36},"end":{"line":148,"column":46}},{"start":{"line":148,"column":50},"end":{"line":148,"column":52}}],"line":148},"21":{"loc":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"type":"if","locations":[{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},{"start":{"line":151,"column":2},"end":{"line":153,"column":3}}],"line":151},"22":{"loc":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"type":"if","locations":[{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},{"start":{"line":155,"column":2},"end":{"line":156,"column":29}}],"line":155},"23":{"loc":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"type":"switch","locations":[{"start":{"line":160,"column":4},"end":{"line":161,"column":12}},{"start":{"line":163,"column":4},"end":{"line":166,"column":11}},{"start":{"line":168,"column":4},"end":{"line":172,"column":11}},{"start":{"line":174,"column":4},"end":{"line":178,"column":11}}],"line":158},"24":{"loc":{"start":{"line":170,"column":24},"end":{"line":170,"column":54}},"type":"binary-expr","locations":[{"start":{"line":170,"column":24},"end":{"line":170,"column":47}},{"start":{"line":170,"column":51},"end":{"line":170,"column":54}}],"line":170},"25":{"loc":{"start":{"line":176,"column":24},"end":{"line":176,"column":74}},"type":"binary-expr","locations":[{"start":{"line":176,"column":24},"end":{"line":176,"column":67}},{"start":{"line":176,"column":71},"end":{"line":176,"column":74}}],"line":176},"26":{"loc":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"type":"if","locations":[{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},{"start":{"line":204,"column":4},"end":{"line":204,"column":44}}],"line":204},"27":{"loc":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"type":"if","locations":[{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},{"start":{"line":210,"column":4},"end":{"line":210,"column":21}}],"line":210},"28":{"loc":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"type":"if","locations":[{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},{"start":{"line":227,"column":2},"end":{"line":230,"column":3}}],"line":227}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":512,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":1,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":0,"52":0,"53":0,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":0,"63":0,"64":1,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":1,"134":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0,0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0,0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"8beb16ccde52e484aa1dd87f5ece33d696c808ab","contentHash":"7bb2b7ebe1111c0deefbf9a61d17bf9d2dbe951adb585db96f9d89663ce5909d"},"/Users/isaacs/dev/js/tar/lib/entry-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":28}},"1":{"start":{"line":3,"column":10},"end":{"line":3,"column":30}},"2":{"start":{"line":4,"column":16},"end":{"line":4,"column":38}},"3":{"start":{"line":5,"column":12},"end":{"line":5,"column":33}},"4":{"start":{"line":6,"column":15},"end":{"line":6,"column":34}},"5":{"start":{"line":7,"column":18},"end":{"line":7,"column":41}},"6":{"start":{"line":9,"column":13},"end":{"line":9,"column":37}},"7":{"start":{"line":10,"column":10},"end":{"line":10,"column":12}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"9":{"start":{"line":15,"column":11},"end":{"line":15,"column":15}},"10":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"11":{"start":{"line":18,"column":4},"end":{"line":18,"column":33}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":20}},"13":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"14":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":35}},"16":{"start":{"line":28,"column":2},"end":{"line":30,"column":4}},"17":{"start":{"line":29,"column":4},"end":{"line":29,"column":22}},"18":{"start":{"line":32,"column":2},"end":{"line":34,"column":4}},"19":{"start":{"line":33,"column":4},"end":{"line":33,"column":20}},"20":{"start":{"line":36,"column":2},"end":{"line":39,"column":4}},"21":{"start":{"line":37,"column":4},"end":{"line":37,"column":18}},"22":{"start":{"line":38,"column":4},"end":{"line":38,"column":20}},"23":{"start":{"line":41,"column":2},"end":{"line":41,"column":18}},"24":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"25":{"start":{"line":43,"column":4},"end":{"line":43,"column":18}},"26":{"start":{"line":45,"column":2},"end":{"line":45,"column":25}},"27":{"start":{"line":46,"column":2},"end":{"line":46,"column":23}},"28":{"start":{"line":47,"column":2},"end":{"line":47,"column":22}},"29":{"start":{"line":49,"column":2},"end":{"line":49,"column":17}},"30":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"31":{"start":{"line":51,"column":2},"end":{"line":51,"column":18}},"32":{"start":{"line":53,"column":2},"end":{"line":55,"column":4}},"33":{"start":{"line":54,"column":4},"end":{"line":54,"column":17}},"34":{"start":{"line":58,"column":0},"end":{"line":65,"column":1}},"35":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"36":{"start":{"line":60,"column":19},"end":{"line":60,"column":74}},"37":{"start":{"line":61,"column":2},"end":{"line":61,"column":22}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":17}},"39":{"start":{"line":63,"column":2},"end":{"line":63,"column":43}},"40":{"start":{"line":64,"column":2},"end":{"line":64,"column":25}},"41":{"start":{"line":67,"column":0},"end":{"line":74,"column":1}},"42":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"43":{"start":{"line":69,"column":9},"end":{"line":69,"column":29}},"44":{"start":{"line":70,"column":2},"end":{"line":70,"column":24}},"45":{"start":{"line":71,"column":2},"end":{"line":71,"column":20}},"46":{"start":{"line":72,"column":2},"end":{"line":72,"column":17}},"47":{"start":{"line":73,"column":2},"end":{"line":73,"column":43}},"48":{"start":{"line":76,"column":0},"end":{"line":80,"column":1}},"49":{"start":{"line":78,"column":2},"end":{"line":78,"column":21}},"50":{"start":{"line":79,"column":2},"end":{"line":79,"column":20}},"51":{"start":{"line":82,"column":0},"end":{"line":87,"column":1}},"52":{"start":{"line":84,"column":2},"end":{"line":84,"column":22}},"53":{"start":{"line":85,"column":2},"end":{"line":85,"column":21}},"54":{"start":{"line":86,"column":2},"end":{"line":86,"column":17}},"55":{"start":{"line":89,"column":0},"end":{"line":98,"column":1}},"56":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"57":{"start":{"line":91,"column":20},"end":{"line":91,"column":69}},"58":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"59":{"start":{"line":95,"column":20},"end":{"line":95,"column":30}},"60":{"start":{"line":97,"column":2},"end":{"line":97,"column":31}},"61":{"start":{"line":100,"column":0},"end":{"line":126,"column":1}},"62":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"63":{"start":{"line":102,"column":23},"end":{"line":102,"column":29}},"64":{"start":{"line":103,"column":2},"end":{"line":103,"column":24}},"65":{"start":{"line":105,"column":20},"end":{"line":105,"column":48}},"66":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"67":{"start":{"line":108,"column":13},"end":{"line":108,"column":17}},"68":{"start":{"line":110,"column":4},"end":{"line":111,"column":44}},"69":{"start":{"line":113,"column":4},"end":{"line":120,"column":12}},"70":{"start":{"line":115,"column":8},"end":{"line":115,"column":26}},"71":{"start":{"line":118,"column":8},"end":{"line":118,"column":28}},"72":{"start":{"line":124,"column":2},"end":{"line":124,"column":32}},"73":{"start":{"line":125,"column":2},"end":{"line":125,"column":21}},"74":{"start":{"line":128,"column":0},"end":{"line":167,"column":1}},"75":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"76":{"start":{"line":131,"column":4},"end":{"line":131,"column":18}},"77":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"78":{"start":{"line":136,"column":4},"end":{"line":136,"column":10}},"79":{"start":{"line":139,"column":2},"end":{"line":139,"column":25}},"80":{"start":{"line":141,"column":12},"end":{"line":141,"column":24}},"81":{"start":{"line":142,"column":2},"end":{"line":159,"column":3}},"82":{"start":{"line":142,"column":15},"end":{"line":142,"column":16}},"83":{"start":{"line":145,"column":12},"end":{"line":145,"column":18}},"84":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"85":{"start":{"line":147,"column":19},"end":{"line":147,"column":37}},"86":{"start":{"line":148,"column":9},"end":{"line":148,"column":30}},"87":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"88":{"start":{"line":152,"column":6},"end":{"line":152,"column":30}},"89":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"90":{"start":{"line":154,"column":8},"end":{"line":154,"column":30}},"91":{"start":{"line":155,"column":8},"end":{"line":155,"column":39}},"92":{"start":{"line":157,"column":6},"end":{"line":157,"column":12}},"93":{"start":{"line":162,"column":2},"end":{"line":162,"column":25}},"94":{"start":{"line":163,"column":2},"end":{"line":163,"column":26}},"95":{"start":{"line":166,"column":2},"end":{"line":166,"column":20}},"96":{"start":{"line":169,"column":0},"end":{"line":169,"column":46}}},"fnMap":{"0":{"name":"EntryWriter","decl":{"start":{"line":14,"column":9},"end":{"line":14,"column":20}},"loc":{"start":{"line":14,"column":29},"end":{"line":56,"column":1}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":28,"column":24},"end":{"line":28,"column":25}},"loc":{"start":{"line":28,"column":37},"end":{"line":30,"column":3}},"line":28},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":25},"end":{"line":32,"column":26}},"loc":{"start":{"line":32,"column":37},"end":{"line":34,"column":3}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":23},"end":{"line":36,"column":24}},"loc":{"start":{"line":36,"column":35},"end":{"line":39,"column":3}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":28},"end":{"line":55,"column":3}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":58,"column":30},"end":{"line":58,"column":31}},"loc":{"start":{"line":58,"column":43},"end":{"line":65,"column":1}},"line":58},"6":{"name":"(anonymous_6)","decl":{"start":{"line":67,"column":28},"end":{"line":67,"column":29}},"loc":{"start":{"line":67,"column":41},"end":{"line":74,"column":1}},"line":67},"7":{"name":"(anonymous_7)","decl":{"start":{"line":76,"column":30},"end":{"line":76,"column":31}},"loc":{"start":{"line":76,"column":42},"end":{"line":80,"column":1}},"line":76},"8":{"name":"(anonymous_8)","decl":{"start":{"line":82,"column":31},"end":{"line":82,"column":32}},"loc":{"start":{"line":82,"column":43},"end":{"line":87,"column":1}},"line":82},"9":{"name":"(anonymous_9)","decl":{"start":{"line":89,"column":28},"end":{"line":89,"column":29}},"loc":{"start":{"line":89,"column":45},"end":{"line":98,"column":1}},"line":89},"10":{"name":"(anonymous_10)","decl":{"start":{"line":100,"column":32},"end":{"line":100,"column":33}},"loc":{"start":{"line":100,"column":44},"end":{"line":126,"column":1}},"line":100},"11":{"name":"(anonymous_11)","decl":{"start":{"line":114,"column":18},"end":{"line":114,"column":19}},"loc":{"start":{"line":114,"column":31},"end":{"line":116,"column":7}},"line":114},"12":{"name":"(anonymous_12)","decl":{"start":{"line":117,"column":19},"end":{"line":117,"column":20}},"loc":{"start":{"line":117,"column":33},"end":{"line":119,"column":7}},"line":117},"13":{"name":"(anonymous_13)","decl":{"start":{"line":128,"column":33},"end":{"line":128,"column":34}},"loc":{"start":{"line":128,"column":45},"end":{"line":167,"column":1}},"line":128},"14":{"name":"(anonymous_14)","decl":{"start":{"line":169,"column":32},"end":{"line":169,"column":33}},"loc":{"start":{"line":169,"column":44},"end":{"line":169,"column":46}},"line":169}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},{"start":{"line":17,"column":2},"end":{"line":19,"column":3}}],"line":17},"1":{"loc":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"type":"if","locations":[{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},{"start":{"line":42,"column":2},"end":{"line":44,"column":3}}],"line":42},"2":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},{"start":{"line":60,"column":2},"end":{"line":60,"column":74}}],"line":60},"3":{"loc":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"type":"if","locations":[{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},{"start":{"line":69,"column":2},"end":{"line":69,"column":29}}],"line":69},"4":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},{"start":{"line":91,"column":2},"end":{"line":91,"column":69}}],"line":91},"5":{"loc":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"type":"if","locations":[{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},{"start":{"line":95,"column":2},"end":{"line":95,"column":30}}],"line":95},"6":{"loc":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"type":"if","locations":[{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},{"start":{"line":102,"column":2},"end":{"line":102,"column":29}}],"line":102},"7":{"loc":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"type":"if","locations":[{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},{"start":{"line":107,"column":2},"end":{"line":121,"column":3}}],"line":107},"8":{"loc":{"start":{"line":107,"column":6},"end":{"line":107,"column":44}},"type":"binary-expr","locations":[{"start":{"line":107,"column":6},"end":{"line":107,"column":29}},{"start":{"line":107,"column":33},"end":{"line":107,"column":44}}],"line":107},"9":{"loc":{"start":{"line":110,"column":27},"end":{"line":111,"column":44}},"type":"binary-expr","locations":[{"start":{"line":110,"column":27},"end":{"line":110,"column":47}},{"start":{"line":111,"column":6},"end":{"line":111,"column":44}}],"line":110},"10":{"loc":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"type":"if","locations":[{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},{"start":{"line":130,"column":2},"end":{"line":132,"column":3}}],"line":130},"11":{"loc":{"start":{"line":130,"column":6},"end":{"line":130,"column":37}},"type":"binary-expr","locations":[{"start":{"line":130,"column":6},"end":{"line":130,"column":22}},{"start":{"line":130,"column":26},"end":{"line":130,"column":37}}],"line":130},"12":{"loc":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"type":"if","locations":[{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},{"start":{"line":134,"column":2},"end":{"line":137,"column":3}}],"line":134},"13":{"loc":{"start":{"line":134,"column":6},"end":{"line":134,"column":38}},"type":"binary-expr","locations":[{"start":{"line":134,"column":6},"end":{"line":134,"column":18}},{"start":{"line":134,"column":22},"end":{"line":134,"column":38}}],"line":134},"14":{"loc":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},{"start":{"line":147,"column":4},"end":{"line":148,"column":30}}],"line":147},"15":{"loc":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},{"start":{"line":150,"column":4},"end":{"line":158,"column":5}}],"line":150},"16":{"loc":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"type":"if","locations":[{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},{"start":{"line":153,"column":6},"end":{"line":156,"column":7}}],"line":153}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":1,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":1,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":1,"49":0,"50":0,"51":1,"52":0,"53":0,"54":0,"55":1,"56":0,"57":0,"58":0,"59":0,"60":0,"61":1,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":1,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3e169418508e031df78186ff63b5fa5aa2484ab8","contentHash":"84191ed4732b6763ae8701256051735aebbe5e95c932c15bef34da01b33ba1a0"},"/Users/isaacs/dev/js/tar/lib/entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry.js","statementMap":{"0":{"start":{"line":7,"column":0},"end":{"line":7,"column":22}},"1":{"start":{"line":9,"column":16},"end":{"line":9,"column":38}},"2":{"start":{"line":10,"column":10},"end":{"line":10,"column":27}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":33}},"4":{"start":{"line":12,"column":13},"end":{"line":12,"column":37}},"5":{"start":{"line":13,"column":15},"end":{"line":13,"column":34}},"6":{"start":{"line":14,"column":14},"end":{"line":14,"column":41}},"7":{"start":{"line":17,"column":2},"end":{"line":17,"column":19}},"8":{"start":{"line":18,"column":2},"end":{"line":18,"column":22}},"9":{"start":{"line":19,"column":2},"end":{"line":19,"column":22}},"10":{"start":{"line":21,"column":2},"end":{"line":21,"column":25}},"11":{"start":{"line":22,"column":2},"end":{"line":22,"column":22}},"12":{"start":{"line":23,"column":2},"end":{"line":23,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":22}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":21}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":21}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":21}},"17":{"start":{"line":28,"column":2},"end":{"line":28,"column":18}},"18":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"19":{"start":{"line":30,"column":2},"end":{"line":30,"column":20}},"20":{"start":{"line":32,"column":2},"end":{"line":32,"column":36}},"21":{"start":{"line":34,"column":2},"end":{"line":34,"column":17}},"22":{"start":{"line":35,"column":2},"end":{"line":35,"column":23}},"23":{"start":{"line":36,"column":2},"end":{"line":36,"column":33}},"24":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"25":{"start":{"line":41,"column":11},"end":{"line":41,"column":15}},"26":{"start":{"line":42,"column":2},"end":{"line":44,"column":4}},"27":{"start":{"line":43,"column":4},"end":{"line":43,"column":29}},"28":{"start":{"line":46,"column":2},"end":{"line":46,"column":18}},"29":{"start":{"line":49,"column":0},"end":{"line":49,"column":23}},"30":{"start":{"line":51,"column":0},"end":{"line":78,"column":1}},"31":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"32":{"start":{"line":52,"column":20},"end":{"line":52,"column":65}},"33":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"34":{"start":{"line":54,"column":4},"end":{"line":54,"column":40}},"35":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"36":{"start":{"line":60,"column":4},"end":{"line":60,"column":35}},"37":{"start":{"line":62,"column":2},"end":{"line":62,"column":29}},"38":{"start":{"line":65,"column":11},"end":{"line":65,"column":25}},"39":{"start":{"line":66,"column":2},"end":{"line":66,"column":21}},"40":{"start":{"line":67,"column":2},"end":{"line":67,"column":19}},"41":{"start":{"line":69,"column":2},"end":{"line":69,"column":14}},"42":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"43":{"start":{"line":73,"column":4},"end":{"line":73,"column":26}},"44":{"start":{"line":74,"column":4},"end":{"line":74,"column":16}},"45":{"start":{"line":77,"column":2},"end":{"line":77,"column":13}},"46":{"start":{"line":80,"column":0},"end":{"line":84,"column":1}},"47":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"48":{"start":{"line":81,"column":9},"end":{"line":81,"column":22}},"49":{"start":{"line":82,"column":2},"end":{"line":82,"column":21}},"50":{"start":{"line":83,"column":2},"end":{"line":83,"column":14}},"51":{"start":{"line":86,"column":0},"end":{"line":89,"column":1}},"52":{"start":{"line":87,"column":2},"end":{"line":87,"column":21}},"53":{"start":{"line":88,"column":2},"end":{"line":88,"column":20}},"54":{"start":{"line":91,"column":0},"end":{"line":97,"column":1}},"55":{"start":{"line":93,"column":2},"end":{"line":93,"column":21}},"56":{"start":{"line":94,"column":2},"end":{"line":94,"column":22}},"57":{"start":{"line":95,"column":2},"end":{"line":95,"column":14}},"58":{"start":{"line":96,"column":2},"end":{"line":96,"column":41}},"59":{"start":{"line":100,"column":0},"end":{"line":139,"column":1}},"60":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"61":{"start":{"line":103,"column":52},"end":{"line":103,"column":58}},"62":{"start":{"line":107,"column":2},"end":{"line":107,"column":22}},"63":{"start":{"line":110,"column":2},"end":{"line":113,"column":3}},"64":{"start":{"line":111,"column":16},"end":{"line":111,"column":43}},"65":{"start":{"line":112,"column":4},"end":{"line":112,"column":28}},"66":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"67":{"start":{"line":117,"column":4},"end":{"line":117,"column":57}},"68":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"69":{"start":{"line":119,"column":6},"end":{"line":119,"column":29}},"70":{"start":{"line":120,"column":6},"end":{"line":120,"column":24}},"71":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"72":{"start":{"line":123,"column":6},"end":{"line":123,"column":24}},"73":{"start":{"line":124,"column":6},"end":{"line":124,"column":22}},"74":{"start":{"line":130,"column":12},"end":{"line":130,"column":29}},"75":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"76":{"start":{"line":132,"column":4},"end":{"line":132,"column":36}},"77":{"start":{"line":133,"column":4},"end":{"line":133,"column":22}},"78":{"start":{"line":134,"column":4},"end":{"line":134,"column":25}},"79":{"start":{"line":135,"column":4},"end":{"line":135,"column":40}},"80":{"start":{"line":138,"column":2},"end":{"line":138,"column":23}},"81":{"start":{"line":141,"column":0},"end":{"line":211,"column":1}},"82":{"start":{"line":143,"column":15},"end":{"line":143,"column":27}},"83":{"start":{"line":144,"column":17},"end":{"line":144,"column":31}},"84":{"start":{"line":145,"column":15},"end":{"line":145,"column":27}},"85":{"start":{"line":146,"column":14},"end":{"line":146,"column":24}},"86":{"start":{"line":149,"column":15},"end":{"line":149,"column":25}},"87":{"start":{"line":150,"column":2},"end":{"line":154,"column":3}},"88":{"start":{"line":150,"column":15},"end":{"line":150,"column":16}},"89":{"start":{"line":151,"column":16},"end":{"line":151,"column":25}},"90":{"start":{"line":152,"column":14},"end":{"line":152,"column":27}},"91":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"92":{"start":{"line":153,"column":36},"end":{"line":153,"column":54}},"93":{"start":{"line":158,"column":3},"end":{"line":165,"column":3}},"94":{"start":{"line":159,"column":4},"end":{"line":161,"column":6}},"95":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"96":{"start":{"line":160,"column":39},"end":{"line":160,"column":54}},"97":{"start":{"line":165,"column":3},"end":{"line":173,"column":3}},"98":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"99":{"start":{"line":167,"column":6},"end":{"line":167,"column":40}},"100":{"start":{"line":173,"column":3},"end":{"line":177,"column":4}},"101":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"102":{"start":{"line":175,"column":6},"end":{"line":175,"column":42}},"103":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"104":{"start":{"line":184,"column":6},"end":{"line":184,"column":19}},"105":{"start":{"line":185,"column":6},"end":{"line":185,"column":11}},"106":{"start":{"line":188,"column":6},"end":{"line":188,"column":24}},"107":{"start":{"line":189,"column":6},"end":{"line":189,"column":11}},"108":{"start":{"line":192,"column":6},"end":{"line":192,"column":22}},"109":{"start":{"line":193,"column":6},"end":{"line":193,"column":11}},"110":{"start":{"line":202,"column":6},"end":{"line":202,"column":34}},"111":{"start":{"line":205,"column":2},"end":{"line":205,"column":18}},"112":{"start":{"line":206,"column":2},"end":{"line":206,"column":24}},"113":{"start":{"line":207,"column":2},"end":{"line":207,"column":24}},"114":{"start":{"line":210,"column":2},"end":{"line":210,"column":30}},"115":{"start":{"line":215,"column":0},"end":{"line":217,"column":1}},"116":{"start":{"line":216,"column":2},"end":{"line":216,"column":20}},"117":{"start":{"line":219,"column":0},"end":{"line":219,"column":35}},"118":{"start":{"line":220,"column":0},"end":{"line":220,"column":37}}},"fnMap":{"0":{"name":"Entry","decl":{"start":{"line":16,"column":9},"end":{"line":16,"column":14}},"loc":{"start":{"line":16,"column":42},"end":{"line":47,"column":1}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":42,"column":36},"end":{"line":42,"column":37}},"loc":{"start":{"line":42,"column":49},"end":{"line":44,"column":3}},"line":42},"2":{"name":"(anonymous_2)","decl":{"start":{"line":51,"column":24},"end":{"line":51,"column":25}},"loc":{"start":{"line":51,"column":37},"end":{"line":78,"column":1}},"line":51},"3":{"name":"(anonymous_3)","decl":{"start":{"line":80,"column":22},"end":{"line":80,"column":23}},"loc":{"start":{"line":80,"column":35},"end":{"line":84,"column":1}},"line":80},"4":{"name":"(anonymous_4)","decl":{"start":{"line":86,"column":24},"end":{"line":86,"column":25}},"loc":{"start":{"line":86,"column":36},"end":{"line":89,"column":1}},"line":86},"5":{"name":"(anonymous_5)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":1}},"line":91},"6":{"name":"(anonymous_6)","decl":{"start":{"line":100,"column":24},"end":{"line":100,"column":25}},"loc":{"start":{"line":100,"column":36},"end":{"line":139,"column":1}},"line":100},"7":{"name":"(anonymous_7)","decl":{"start":{"line":141,"column":28},"end":{"line":141,"column":29}},"loc":{"start":{"line":141,"column":40},"end":{"line":211,"column":1}},"line":141},"8":{"name":"(anonymous_8)","decl":{"start":{"line":158,"column":30},"end":{"line":158,"column":31}},"loc":{"start":{"line":158,"column":43},"end":{"line":162,"column":3}},"line":158},"9":{"name":"(anonymous_9)","decl":{"start":{"line":159,"column":27},"end":{"line":159,"column":28}},"loc":{"start":{"line":159,"column":40},"end":{"line":161,"column":5}},"line":159},"10":{"name":"(anonymous_10)","decl":{"start":{"line":165,"column":32},"end":{"line":165,"column":33}},"loc":{"start":{"line":165,"column":45},"end":{"line":169,"column":3}},"line":165},"11":{"name":"(anonymous_11)","decl":{"start":{"line":173,"column":39},"end":{"line":173,"column":40}},"loc":{"start":{"line":173,"column":52},"end":{"line":177,"column":3}},"line":173},"12":{"name":"(anonymous_12)","decl":{"start":{"line":215,"column":24},"end":{"line":215,"column":25}},"loc":{"start":{"line":215,"column":34},"end":{"line":217,"column":1}},"line":215}},"branchMap":{"0":{"loc":{"start":{"line":36,"column":19},"end":{"line":36,"column":33}},"type":"binary-expr","locations":[{"start":{"line":36,"column":19},"end":{"line":36,"column":27}},{"start":{"line":36,"column":31},"end":{"line":36,"column":33}}],"line":36},"1":{"loc":{"start":{"line":42,"column":14},"end":{"line":42,"column":26}},"type":"binary-expr","locations":[{"start":{"line":42,"column":14},"end":{"line":42,"column":20}},{"start":{"line":42,"column":24},"end":{"line":42,"column":26}}],"line":42},"2":{"loc":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"type":"if","locations":[{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},{"start":{"line":52,"column":2},"end":{"line":52,"column":65}}],"line":52},"3":{"loc":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"type":"if","locations":[{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},{"start":{"line":53,"column":2},"end":{"line":55,"column":3}}],"line":53},"4":{"loc":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},{"start":{"line":59,"column":2},"end":{"line":61,"column":3}}],"line":59},"5":{"loc":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"type":"if","locations":[{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},{"start":{"line":72,"column":2},"end":{"line":75,"column":3}}],"line":72},"6":{"loc":{"start":{"line":72,"column":6},"end":{"line":72,"column":28}},"type":"binary-expr","locations":[{"start":{"line":72,"column":6},"end":{"line":72,"column":18}},{"start":{"line":72,"column":22},"end":{"line":72,"column":28}}],"line":72},"7":{"loc":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"type":"if","locations":[{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},{"start":{"line":81,"column":2},"end":{"line":81,"column":22}}],"line":81},"8":{"loc":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"type":"if","locations":[{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},{"start":{"line":103,"column":2},"end":{"line":103,"column":58}}],"line":103},"9":{"loc":{"start":{"line":103,"column":6},"end":{"line":103,"column":50}},"type":"binary-expr","locations":[{"start":{"line":103,"column":6},"end":{"line":103,"column":18}},{"start":{"line":103,"column":22},"end":{"line":103,"column":35}},{"start":{"line":103,"column":39},"end":{"line":103,"column":50}}],"line":103},"10":{"loc":{"start":{"line":110,"column":9},"end":{"line":110,"column":54}},"type":"binary-expr","locations":[{"start":{"line":110,"column":9},"end":{"line":110,"column":37}},{"start":{"line":110,"column":41},"end":{"line":110,"column":54}}],"line":110},"11":{"loc":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"type":"if","locations":[{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},{"start":{"line":116,"column":2},"end":{"line":126,"column":3}}],"line":116},"12":{"loc":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"type":"if","locations":[{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},{"start":{"line":118,"column":4},"end":{"line":121,"column":5}}],"line":118},"13":{"loc":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},{"start":{"line":122,"column":4},"end":{"line":125,"column":5}}],"line":122},"14":{"loc":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"type":"if","locations":[{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},{"start":{"line":131,"column":2},"end":{"line":136,"column":3}}],"line":131},"15":{"loc":{"start":{"line":131,"column":6},"end":{"line":131,"column":45}},"type":"binary-expr","locations":[{"start":{"line":131,"column":6},"end":{"line":131,"column":26}},{"start":{"line":131,"column":30},"end":{"line":131,"column":45}}],"line":131},"16":{"loc":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"type":"if","locations":[{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},{"start":{"line":153,"column":4},"end":{"line":153,"column":54}}],"line":153},"17":{"loc":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"type":"if","locations":[{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},{"start":{"line":160,"column":6},"end":{"line":160,"column":54}}],"line":160},"18":{"loc":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"type":"if","locations":[{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},{"start":{"line":166,"column":4},"end":{"line":168,"column":5}}],"line":166},"19":{"loc":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"type":"if","locations":[{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},{"start":{"line":174,"column":4},"end":{"line":176,"column":5}}],"line":174},"20":{"loc":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"type":"switch","locations":[{"start":{"line":182,"column":4},"end":{"line":182,"column":19}},{"start":{"line":183,"column":4},"end":{"line":185,"column":11}},{"start":{"line":187,"column":4},"end":{"line":189,"column":11}},{"start":{"line":191,"column":4},"end":{"line":193,"column":11}},{"start":{"line":195,"column":4},"end":{"line":195,"column":16}},{"start":{"line":196,"column":4},"end":{"line":196,"column":24}},{"start":{"line":197,"column":4},"end":{"line":197,"column":27}},{"start":{"line":198,"column":4},"end":{"line":198,"column":23}},{"start":{"line":199,"column":4},"end":{"line":199,"column":21}},{"start":{"line":200,"column":4},"end":{"line":200,"column":16}},{"start":{"line":201,"column":4},"end":{"line":202,"column":34}}],"line":181}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":3,"8":3,"9":3,"10":3,"11":3,"12":3,"13":3,"14":3,"15":3,"16":3,"17":3,"18":3,"19":3,"20":3,"21":3,"22":3,"23":3,"24":3,"25":3,"26":3,"27":0,"28":3,"29":1,"30":1,"31":8,"32":0,"33":8,"34":0,"35":8,"36":2,"37":8,"38":8,"39":8,"40":8,"41":8,"42":8,"43":8,"44":8,"45":0,"46":1,"47":2,"48":0,"49":2,"50":2,"51":1,"52":3,"53":3,"54":1,"55":7,"56":7,"57":7,"58":7,"59":1,"60":17,"61":12,"62":5,"63":5,"64":8,"65":8,"66":5,"67":5,"68":5,"69":3,"70":3,"71":5,"72":2,"73":2,"74":5,"75":5,"76":0,"77":0,"78":0,"79":0,"80":5,"81":1,"82":3,"83":3,"84":3,"85":3,"86":3,"87":3,"88":3,"89":51,"90":51,"91":51,"92":48,"93":3,"94":6,"95":0,"96":0,"97":3,"98":6,"99":6,"100":3,"101":9,"102":3,"103":3,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":3,"111":3,"112":3,"113":3,"114":3,"115":1,"116":0,"117":1,"118":1},"f":{"0":3,"1":0,"2":8,"3":2,"4":3,"5":7,"6":17,"7":3,"8":6,"9":0,"10":6,"11":9,"12":0},"b":{"0":[3,3],"1":[3,3],"2":[0,8],"3":[0,8],"4":[2,6],"5":[8,0],"6":[8,0],"7":[0,2],"8":[12,5],"9":[17,7,7],"10":[13,8],"11":[5,0],"12":[3,2],"13":[2,3],"14":[0,5],"15":[5,0],"16":[48,3],"17":[0,0],"18":[6,0],"19":[3,6],"20":[0,0,0,0,0,0,0,0,0,0,3]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"2cc4f925db2a60e89bf0743124faec4e8996dfdb","contentHash":"245d5cb2b23d975dc5b9a0ed2553c93c587727d50a7961242f50cec333c04ba9"},"/Users/isaacs/dev/js/tar/lib/global-header-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/global-header-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":35}},"1":{"start":{"line":3,"column":27},"end":{"line":3,"column":65}},"2":{"start":{"line":4,"column":15},"end":{"line":4,"column":34}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":50}},"4":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"5":{"start":{"line":10,"column":4},"end":{"line":10,"column":40}},"6":{"start":{"line":12,"column":2},"end":{"line":12,"column":40}},"7":{"start":{"line":13,"column":2},"end":{"line":13,"column":23}}},"fnMap":{"0":{"name":"GlobalHeaderWriter","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":27}},"loc":{"start":{"line":8,"column":36},"end":{"line":14,"column":1}},"line":8}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"type":"if","locations":[{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},{"start":{"line":9,"column":2},"end":{"line":11,"column":3}}],"line":9}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3d0c8589f62a5c8ccec606d52d3abd98e5627d57","contentHash":"a2570ca840cf3e44d77e15af0aee52f7c145da39b76366006f3672b9708def3e"},"/Users/isaacs/dev/js/tar/lib/parse.js":{"path":"/Users/isaacs/dev/js/tar/lib/parse.js","statementMap":{"0":{"start":{"line":6,"column":0},"end":{"line":6,"column":37}},"1":{"start":{"line":8,"column":13},"end":{"line":8,"column":30}},"2":{"start":{"line":9,"column":13},"end":{"line":9,"column":26}},"3":{"start":{"line":10,"column":18},"end":{"line":10,"column":41}},"4":{"start":{"line":11,"column":10},"end":{"line":11,"column":30}},"5":{"start":{"line":12,"column":16},"end":{"line":12,"column":38}},"6":{"start":{"line":13,"column":12},"end":{"line":13,"column":33}},"7":{"start":{"line":14,"column":18},"end":{"line":14,"column":46}},"8":{"start":{"line":15,"column":21},"end":{"line":15,"column":52}},"9":{"start":{"line":16,"column":13},"end":{"line":16,"column":33}},"10":{"start":{"line":17,"column":15},"end":{"line":17,"column":34}},"11":{"start":{"line":18,"column":14},"end":{"line":18,"column":32}},"12":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"13":{"start":{"line":28,"column":11},"end":{"line":28,"column":15}},"14":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"15":{"start":{"line":29,"column":30},"end":{"line":29,"column":48}},"16":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"17":{"start":{"line":36,"column":2},"end":{"line":36,"column":20}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":20}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":35}},"20":{"start":{"line":39,"column":2},"end":{"line":39,"column":17}},"21":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"22":{"start":{"line":41,"column":2},"end":{"line":41,"column":20}},"23":{"start":{"line":43,"column":2},"end":{"line":45,"column":4}},"24":{"start":{"line":44,"column":4},"end":{"line":44,"column":23}},"25":{"start":{"line":47,"column":2},"end":{"line":49,"column":4}},"26":{"start":{"line":48,"column":4},"end":{"line":48,"column":18}},"27":{"start":{"line":51,"column":2},"end":{"line":53,"column":4}},"28":{"start":{"line":52,"column":4},"end":{"line":52,"column":19}},"29":{"start":{"line":55,"column":2},"end":{"line":57,"column":4}},"30":{"start":{"line":56,"column":4},"end":{"line":56,"column":20}},"31":{"start":{"line":63,"column":0},"end":{"line":67,"column":1}},"32":{"start":{"line":64,"column":11},"end":{"line":64,"column":15}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"34":{"start":{"line":65,"column":31},"end":{"line":65,"column":57}},"35":{"start":{"line":66,"column":2},"end":{"line":66,"column":16}},"36":{"start":{"line":72,"column":0},"end":{"line":83,"column":1}},"37":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"38":{"start":{"line":77,"column":4},"end":{"line":79,"column":5}},"39":{"start":{"line":77,"column":17},"end":{"line":77,"column":18}},"40":{"start":{"line":77,"column":24},"end":{"line":77,"column":32}},"41":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"42":{"start":{"line":78,"column":22},"end":{"line":78,"column":62}},"43":{"start":{"line":80,"column":4},"end":{"line":80,"column":10}},"44":{"start":{"line":82,"column":2},"end":{"line":82,"column":30}},"45":{"start":{"line":85,"column":0},"end":{"line":88,"column":1}},"46":{"start":{"line":86,"column":2},"end":{"line":86,"column":20}},"47":{"start":{"line":87,"column":2},"end":{"line":87,"column":28}},"48":{"start":{"line":94,"column":0},"end":{"line":94,"column":38}},"49":{"start":{"line":96,"column":0},"end":{"line":137,"column":1}},"50":{"start":{"line":97,"column":2},"end":{"line":97,"column":59}},"51":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"52":{"start":{"line":105,"column":16},"end":{"line":105,"column":27}},"53":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"54":{"start":{"line":106,"column":22},"end":{"line":106,"column":36}},"55":{"start":{"line":108,"column":6},"end":{"line":108,"column":34}},"56":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"57":{"start":{"line":109,"column":31},"end":{"line":109,"column":51}},"58":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"59":{"start":{"line":112,"column":6},"end":{"line":112,"column":17}},"60":{"start":{"line":113,"column":6},"end":{"line":113,"column":24}},"61":{"start":{"line":117,"column":15},"end":{"line":117,"column":19}},"62":{"start":{"line":118,"column":4},"end":{"line":120,"column":5}},"63":{"start":{"line":118,"column":17},"end":{"line":118,"column":18}},"64":{"start":{"line":119,"column":6},"end":{"line":119,"column":23}},"65":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"66":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"67":{"start":{"line":128,"column":8},"end":{"line":128,"column":26}},"68":{"start":{"line":129,"column":6},"end":{"line":129,"column":29}},"69":{"start":{"line":131,"column":6},"end":{"line":131,"column":30}},"70":{"start":{"line":132,"column":6},"end":{"line":132,"column":25}},"71":{"start":{"line":136,"column":2},"end":{"line":136,"column":22}},"72":{"start":{"line":140,"column":0},"end":{"line":285,"column":1}},"73":{"start":{"line":141,"column":15},"end":{"line":141,"column":31}},"74":{"start":{"line":142,"column":13},"end":{"line":142,"column":17}},"75":{"start":{"line":147,"column":13},"end":{"line":147,"column":18}},"76":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"77":{"start":{"line":150,"column":12},"end":{"line":150,"column":41}},"78":{"start":{"line":151,"column":4},"end":{"line":151,"column":21}},"79":{"start":{"line":152,"column":4},"end":{"line":152,"column":37}},"80":{"start":{"line":153,"column":4},"end":{"line":153,"column":37}},"81":{"start":{"line":154,"column":4},"end":{"line":154,"column":32}},"82":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"83":{"start":{"line":171,"column":6},"end":{"line":171,"column":23}},"84":{"start":{"line":172,"column":6},"end":{"line":172,"column":18}},"85":{"start":{"line":173,"column":6},"end":{"line":173,"column":11}},"86":{"start":{"line":177,"column":6},"end":{"line":177,"column":32}},"87":{"start":{"line":178,"column":6},"end":{"line":183,"column":7}},"88":{"start":{"line":179,"column":8},"end":{"line":179,"column":41}},"89":{"start":{"line":180,"column":8},"end":{"line":182,"column":10}},"90":{"start":{"line":181,"column":10},"end":{"line":181,"column":43}},"91":{"start":{"line":184,"column":6},"end":{"line":184,"column":33}},"92":{"start":{"line":185,"column":6},"end":{"line":185,"column":17}},"93":{"start":{"line":186,"column":6},"end":{"line":186,"column":11}},"94":{"start":{"line":191,"column":6},"end":{"line":191,"column":32}},"95":{"start":{"line":192,"column":6},"end":{"line":194,"column":7}},"96":{"start":{"line":193,"column":8},"end":{"line":193,"column":37}},"97":{"start":{"line":195,"column":6},"end":{"line":195,"column":27}},"98":{"start":{"line":196,"column":6},"end":{"line":196,"column":17}},"99":{"start":{"line":197,"column":6},"end":{"line":197,"column":11}},"100":{"start":{"line":201,"column":6},"end":{"line":201,"column":29}},"101":{"start":{"line":202,"column":6},"end":{"line":205,"column":7}},"102":{"start":{"line":203,"column":8},"end":{"line":203,"column":45}},"103":{"start":{"line":204,"column":8},"end":{"line":204,"column":44}},"104":{"start":{"line":206,"column":6},"end":{"line":206,"column":25}},"105":{"start":{"line":207,"column":6},"end":{"line":207,"column":17}},"106":{"start":{"line":208,"column":6},"end":{"line":208,"column":11}},"107":{"start":{"line":213,"column":6},"end":{"line":213,"column":29}},"108":{"start":{"line":214,"column":6},"end":{"line":217,"column":7}},"109":{"start":{"line":215,"column":8},"end":{"line":215,"column":45}},"110":{"start":{"line":216,"column":8},"end":{"line":216,"column":40}},"111":{"start":{"line":218,"column":6},"end":{"line":218,"column":21}},"112":{"start":{"line":219,"column":6},"end":{"line":219,"column":17}},"113":{"start":{"line":220,"column":6},"end":{"line":220,"column":11}},"114":{"start":{"line":226,"column":6},"end":{"line":226,"column":23}},"115":{"start":{"line":227,"column":6},"end":{"line":227,"column":25}},"116":{"start":{"line":228,"column":6},"end":{"line":228,"column":11}},"117":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"118":{"start":{"line":233,"column":4},"end":{"line":233,"column":28}},"119":{"start":{"line":235,"column":17},"end":{"line":235,"column":29}},"120":{"start":{"line":236,"column":19},"end":{"line":236,"column":33}},"121":{"start":{"line":240,"column":4},"end":{"line":240,"column":25}},"122":{"start":{"line":242,"column":2},"end":{"line":242,"column":49}},"123":{"start":{"line":243,"column":2},"end":{"line":243,"column":19}},"124":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"125":{"start":{"line":247,"column":4},"end":{"line":249,"column":6}},"126":{"start":{"line":248,"column":6},"end":{"line":248,"column":24}},"127":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"128":{"start":{"line":252,"column":13},"end":{"line":252,"column":35}},"129":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"130":{"start":{"line":255,"column":4},"end":{"line":255,"column":23}},"131":{"start":{"line":258,"column":2},"end":{"line":258,"column":21}},"132":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"133":{"start":{"line":261,"column":4},"end":{"line":261,"column":39}},"134":{"start":{"line":264,"column":11},"end":{"line":264,"column":15}},"135":{"start":{"line":266,"column":2},"end":{"line":268,"column":4}},"136":{"start":{"line":267,"column":4},"end":{"line":267,"column":14}},"137":{"start":{"line":270,"column":2},"end":{"line":272,"column":4}},"138":{"start":{"line":271,"column":4},"end":{"line":271,"column":15}},"139":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"140":{"start":{"line":275,"column":4},"end":{"line":275,"column":29}},"141":{"start":{"line":278,"column":2},"end":{"line":278,"column":22}},"142":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"143":{"start":{"line":282,"column":4},"end":{"line":282,"column":15}},"144":{"start":{"line":283,"column":4},"end":{"line":283,"column":22}}},"fnMap":{"0":{"name":"Parse","decl":{"start":{"line":27,"column":9},"end":{"line":27,"column":14}},"loc":{"start":{"line":27,"column":18},"end":{"line":58,"column":1}},"line":27},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":25},"end":{"line":43,"column":26}},"loc":{"start":{"line":43,"column":38},"end":{"line":45,"column":3}},"line":43},"2":{"name":"(anonymous_2)","decl":{"start":{"line":47,"column":24},"end":{"line":47,"column":25}},"loc":{"start":{"line":47,"column":37},"end":{"line":49,"column":3}},"line":47},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":23},"end":{"line":51,"column":24}},"loc":{"start":{"line":51,"column":35},"end":{"line":53,"column":3}},"line":51},"4":{"name":"(anonymous_4)","decl":{"start":{"line":55,"column":25},"end":{"line":55,"column":26}},"loc":{"start":{"line":55,"column":37},"end":{"line":57,"column":3}},"line":55},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":29},"end":{"line":63,"column":30}},"loc":{"start":{"line":63,"column":41},"end":{"line":67,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":72,"column":24},"end":{"line":72,"column":25}},"loc":{"start":{"line":72,"column":37},"end":{"line":83,"column":1}},"line":72},"7":{"name":"(anonymous_7)","decl":{"start":{"line":85,"column":22},"end":{"line":85,"column":23}},"loc":{"start":{"line":85,"column":35},"end":{"line":88,"column":1}},"line":85},"8":{"name":"(anonymous_8)","decl":{"start":{"line":94,"column":24},"end":{"line":94,"column":25}},"loc":{"start":{"line":94,"column":36},"end":{"line":94,"column":38}},"line":94},"9":{"name":"(anonymous_9)","decl":{"start":{"line":96,"column":27},"end":{"line":96,"column":28}},"loc":{"start":{"line":96,"column":40},"end":{"line":137,"column":1}},"line":96},"10":{"name":"(anonymous_10)","decl":{"start":{"line":140,"column":30},"end":{"line":140,"column":31}},"loc":{"start":{"line":140,"column":43},"end":{"line":285,"column":1}},"line":140},"11":{"name":"(anonymous_11)","decl":{"start":{"line":178,"column":14},"end":{"line":178,"column":15}},"loc":{"start":{"line":178,"column":26},"end":{"line":183,"column":7}},"line":178},"12":{"name":"(anonymous_12)","decl":{"start":{"line":180,"column":42},"end":{"line":180,"column":43}},"loc":{"start":{"line":180,"column":55},"end":{"line":182,"column":9}},"line":180},"13":{"name":"(anonymous_13)","decl":{"start":{"line":192,"column":14},"end":{"line":192,"column":15}},"loc":{"start":{"line":192,"column":26},"end":{"line":194,"column":7}},"line":192},"14":{"name":"(anonymous_14)","decl":{"start":{"line":202,"column":14},"end":{"line":202,"column":15}},"loc":{"start":{"line":202,"column":26},"end":{"line":205,"column":7}},"line":202},"15":{"name":"(anonymous_15)","decl":{"start":{"line":214,"column":14},"end":{"line":214,"column":15}},"loc":{"start":{"line":214,"column":26},"end":{"line":217,"column":7}},"line":214},"16":{"name":"(anonymous_16)","decl":{"start":{"line":247,"column":21},"end":{"line":247,"column":22}},"loc":{"start":{"line":247,"column":34},"end":{"line":249,"column":5}},"line":247},"17":{"name":"(anonymous_17)","decl":{"start":{"line":266,"column":20},"end":{"line":266,"column":21}},"loc":{"start":{"line":266,"column":32},"end":{"line":268,"column":3}},"line":266},"18":{"name":"(anonymous_18)","decl":{"start":{"line":270,"column":21},"end":{"line":270,"column":22}},"loc":{"start":{"line":270,"column":33},"end":{"line":272,"column":3}},"line":270}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},{"start":{"line":29,"column":2},"end":{"line":29,"column":48}}],"line":29},"1":{"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"type":"if","locations":[{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},{"start":{"line":65,"column":2},"end":{"line":65,"column":57}}],"line":65},"2":{"loc":{"start":{"line":65,"column":6},"end":{"line":65,"column":29}},"type":"binary-expr","locations":[{"start":{"line":65,"column":6},"end":{"line":65,"column":16}},{"start":{"line":65,"column":20},"end":{"line":65,"column":29}}],"line":65},"3":{"loc":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},{"start":{"line":73,"column":2},"end":{"line":81,"column":3}}],"line":73},"4":{"loc":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"type":"if","locations":[{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},{"start":{"line":78,"column":6},"end":{"line":78,"column":62}}],"line":78},"5":{"loc":{"start":{"line":97,"column":9},"end":{"line":97,"column":30}},"type":"binary-expr","locations":[{"start":{"line":97,"column":9},"end":{"line":97,"column":10}},{"start":{"line":97,"column":14},"end":{"line":97,"column":30}}],"line":97},"6":{"loc":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"type":"if","locations":[{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},{"start":{"line":104,"column":2},"end":{"line":134,"column":3}}],"line":104},"7":{"loc":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"type":"if","locations":[{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},{"start":{"line":106,"column":4},"end":{"line":110,"column":5}}],"line":106},"8":{"loc":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"type":"if","locations":[{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},{"start":{"line":109,"column":6},"end":{"line":109,"column":51}}],"line":109},"9":{"loc":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},{"start":{"line":111,"column":4},"end":{"line":114,"column":5}}],"line":111},"10":{"loc":{"start":{"line":118,"column":20},"end":{"line":118,"column":35}},"type":"binary-expr","locations":[{"start":{"line":118,"column":20},"end":{"line":118,"column":27}},{"start":{"line":118,"column":31},"end":{"line":118,"column":35}}],"line":118},"11":{"loc":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"type":"if","locations":[{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},{"start":{"line":126,"column":4},"end":{"line":133,"column":5}}],"line":126},"12":{"loc":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"type":"if","locations":[{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},{"start":{"line":127,"column":6},"end":{"line":128,"column":26}}],"line":127},"13":{"loc":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"type":"if","locations":[{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},{"start":{"line":149,"column":2},"end":{"line":155,"column":3}}],"line":149},"14":{"loc":{"start":{"line":149,"column":6},"end":{"line":149,"column":48}},"type":"binary-expr","locations":[{"start":{"line":149,"column":6},"end":{"line":149,"column":26}},{"start":{"line":149,"column":30},"end":{"line":149,"column":48}}],"line":149},"15":{"loc":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"type":"switch","locations":[{"start":{"line":158,"column":4},"end":{"line":158,"column":16}},{"start":{"line":159,"column":4},"end":{"line":159,"column":19}},{"start":{"line":160,"column":4},"end":{"line":160,"column":16}},{"start":{"line":161,"column":4},"end":{"line":161,"column":24}},{"start":{"line":162,"column":4},"end":{"line":162,"column":27}},{"start":{"line":163,"column":4},"end":{"line":163,"column":23}},{"start":{"line":164,"column":4},"end":{"line":164,"column":21}},{"start":{"line":165,"column":4},"end":{"line":165,"column":16}},{"start":{"line":166,"column":4},"end":{"line":166,"column":26}},{"start":{"line":167,"column":4},"end":{"line":173,"column":11}},{"start":{"line":175,"column":4},"end":{"line":186,"column":11}},{"start":{"line":188,"column":4},"end":{"line":188,"column":26}},{"start":{"line":189,"column":4},"end":{"line":197,"column":11}},{"start":{"line":199,"column":4},"end":{"line":208,"column":11}},{"start":{"line":210,"column":4},"end":{"line":210,"column":31}},{"start":{"line":211,"column":4},"end":{"line":220,"column":11}},{"start":{"line":222,"column":4},"end":{"line":228,"column":11}}],"line":157},"16":{"loc":{"start":{"line":179,"column":23},"end":{"line":179,"column":41}},"type":"binary-expr","locations":[{"start":{"line":179,"column":23},"end":{"line":179,"column":35}},{"start":{"line":179,"column":39},"end":{"line":179,"column":41}}],"line":179},"17":{"loc":{"start":{"line":203,"column":25},"end":{"line":203,"column":45}},"type":"binary-expr","locations":[{"start":{"line":203,"column":25},"end":{"line":203,"column":39}},{"start":{"line":203,"column":43},"end":{"line":203,"column":45}}],"line":203},"18":{"loc":{"start":{"line":215,"column":25},"end":{"line":215,"column":45}},"type":"binary-expr","locations":[{"start":{"line":215,"column":25},"end":{"line":215,"column":39}},{"start":{"line":215,"column":43},"end":{"line":215,"column":45}}],"line":215},"19":{"loc":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"type":"if","locations":[{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},{"start":{"line":232,"column":2},"end":{"line":241,"column":3}}],"line":232},"20":{"loc":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"type":"if","locations":[{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},{"start":{"line":246,"column":2},"end":{"line":250,"column":3}}],"line":246},"21":{"loc":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"type":"if","locations":[{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},{"start":{"line":252,"column":2},"end":{"line":252,"column":35}}],"line":252},"22":{"loc":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"type":"if","locations":[{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},{"start":{"line":254,"column":2},"end":{"line":256,"column":3}}],"line":254},"23":{"loc":{"start":{"line":254,"column":6},"end":{"line":254,"column":58}},"type":"binary-expr","locations":[{"start":{"line":254,"column":6},"end":{"line":254,"column":27}},{"start":{"line":254,"column":31},"end":{"line":254,"column":58}}],"line":254},"24":{"loc":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"type":"if","locations":[{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},{"start":{"line":260,"column":2},"end":{"line":262,"column":3}}],"line":260},"25":{"loc":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"type":"if","locations":[{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},{"start":{"line":274,"column":2},"end":{"line":276,"column":3}}],"line":274},"26":{"loc":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"type":"if","locations":[{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},{"start":{"line":281,"column":2},"end":{"line":284,"column":3}}],"line":281}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":0,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":0,"25":1,"26":11,"27":1,"28":0,"29":1,"30":1,"31":1,"32":0,"33":0,"34":0,"35":0,"36":1,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":1,"45":1,"46":0,"47":0,"48":1,"49":1,"50":11,"51":11,"52":8,"53":8,"54":8,"55":0,"56":0,"57":0,"58":8,"59":2,"60":2,"61":3,"62":3,"63":3,"64":3,"65":3,"66":0,"67":0,"68":0,"69":3,"70":3,"71":11,"72":1,"73":3,"74":3,"75":3,"76":3,"77":0,"78":0,"79":0,"80":0,"81":0,"82":3,"83":3,"84":3,"85":3,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":3,"118":0,"119":3,"120":3,"121":3,"122":3,"123":3,"124":3,"125":3,"126":8,"127":3,"128":0,"129":3,"130":0,"131":3,"132":3,"133":0,"134":3,"135":3,"136":3,"137":3,"138":7,"139":3,"140":0,"141":3,"142":3,"143":0,"144":0},"f":{"0":1,"1":0,"2":11,"3":0,"4":1,"5":0,"6":1,"7":0,"8":8,"9":11,"10":3,"11":0,"12":0,"13":0,"14":0,"15":0,"16":8,"17":3,"18":7},"b":{"0":[0,1],"1":[0,0],"2":[0,0],"3":[0,1],"4":[0,0],"5":[11,11],"6":[8,3],"7":[8,0],"8":[0,0],"9":[2,6],"10":[6,6],"11":[0,3],"12":[0,0],"13":[0,3],"14":[3,3],"15":[3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,3],"20":[3,0],"21":[0,3],"22":[0,3],"23":[3,3],"24":[0,3],"25":[0,3],"26":[0,3]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"4a8f51a3a12b59eb69694618530032a813fbf8cb","contentHash":"d347e73abcd3109143efee20401d9f0bfc6d68a4a6323bd4559ada44c741786a"},"/Users/isaacs/dev/js/tar/lib/buffer-entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/buffer-entry.js","statementMap":{"0":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"1":{"start":{"line":10,"column":15},"end":{"line":10,"column":34}},"2":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"3":{"start":{"line":14,"column":2},"end":{"line":14,"column":30}},"4":{"start":{"line":15,"column":2},"end":{"line":15,"column":44}},"5":{"start":{"line":16,"column":2},"end":{"line":16,"column":18}},"6":{"start":{"line":17,"column":2},"end":{"line":17,"column":16}},"7":{"start":{"line":18,"column":2},"end":{"line":20,"column":4}},"8":{"start":{"line":19,"column":4},"end":{"line":19,"column":52}},"9":{"start":{"line":23,"column":0},"end":{"line":23,"column":28}},"10":{"start":{"line":26,"column":0},"end":{"line":30,"column":1}},"11":{"start":{"line":27,"column":2},"end":{"line":27,"column":36}},"12":{"start":{"line":28,"column":2},"end":{"line":28,"column":26}},"13":{"start":{"line":29,"column":2},"end":{"line":29,"column":37}}},"fnMap":{"0":{"name":"BufferEntry","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":20}},"loc":{"start":{"line":13,"column":24},"end":{"line":21,"column":1}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":17},"end":{"line":18,"column":18}},"loc":{"start":{"line":18,"column":29},"end":{"line":20,"column":3}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":26,"column":30},"end":{"line":26,"column":31}},"loc":{"start":{"line":26,"column":43},"end":{"line":30,"column":1}},"line":26}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":1,"10":1,"11":0,"12":0,"13":0},"f":{"0":0,"1":0,"2":0},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"d8ad66df900443c9c9d8aefe5fc126a55ba268ec","contentHash":"25e5b3c51e476fcffac7affa191a0ed0f54d64d3d3b760e887bd45ba08fffa65"},"/Users/isaacs/dev/js/tar/lib/extended-header.js":{"path":"/Users/isaacs/dev/js/tar/lib/extended-header.js","statementMap":{"0":{"start":{"line":9,"column":0},"end":{"line":9,"column":31}},"1":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"2":{"start":{"line":12,"column":15},"end":{"line":12,"column":34}},"3":{"start":{"line":13,"column":10},"end":{"line":13,"column":30}},"4":{"start":{"line":14,"column":14},"end":{"line":14,"column":25}},"5":{"start":{"line":15,"column":15},"end":{"line":17,"column":42}},"6":{"start":{"line":20,"column":2},"end":{"line":20,"column":30}},"7":{"start":{"line":21,"column":2},"end":{"line":21,"column":30}},"8":{"start":{"line":22,"column":2},"end":{"line":22,"column":18}},"9":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"10":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"11":{"start":{"line":25,"column":2},"end":{"line":25,"column":20}},"12":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"13":{"start":{"line":27,"column":2},"end":{"line":27,"column":19}},"14":{"start":{"line":28,"column":2},"end":{"line":28,"column":19}},"15":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"16":{"start":{"line":30,"column":2},"end":{"line":30,"column":16}},"17":{"start":{"line":33,"column":0},"end":{"line":33,"column":31}},"18":{"start":{"line":34,"column":0},"end":{"line":34,"column":39}},"19":{"start":{"line":36,"column":8},"end":{"line":36,"column":9}},"20":{"start":{"line":37,"column":13},"end":{"line":37,"column":39}},"21":{"start":{"line":38,"column":11},"end":{"line":38,"column":28}},"22":{"start":{"line":39,"column":11},"end":{"line":39,"column":28}},"23":{"start":{"line":40,"column":11},"end":{"line":40,"column":28}},"24":{"start":{"line":41,"column":11},"end":{"line":41,"column":28}},"25":{"start":{"line":43,"column":0},"end":{"line":45,"column":2}},"26":{"start":{"line":44,"column":2},"end":{"line":44,"column":31}},"27":{"start":{"line":47,"column":0},"end":{"line":47,"column":16}},"28":{"start":{"line":50,"column":9},"end":{"line":50,"column":26}},"29":{"start":{"line":51,"column":9},"end":{"line":51,"column":26}},"30":{"start":{"line":52,"column":12},"end":{"line":52,"column":29}},"31":{"start":{"line":53,"column":8},"end":{"line":53,"column":25}},"32":{"start":{"line":54,"column":8},"end":{"line":54,"column":25}},"33":{"start":{"line":55,"column":8},"end":{"line":55,"column":25}},"34":{"start":{"line":56,"column":8},"end":{"line":56,"column":25}},"35":{"start":{"line":57,"column":12},"end":{"line":57,"column":29}},"36":{"start":{"line":58,"column":9},"end":{"line":58,"column":26}},"37":{"start":{"line":59,"column":9},"end":{"line":59,"column":27}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"39":{"start":{"line":62,"column":27},"end":{"line":62,"column":33}},"40":{"start":{"line":64,"column":2},"end":{"line":130,"column":3}},"41":{"start":{"line":64,"column":16},"end":{"line":64,"column":17}},"42":{"start":{"line":64,"column":23},"end":{"line":64,"column":31}},"43":{"start":{"line":69,"column":12},"end":{"line":69,"column":16}},"44":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"45":{"start":{"line":72,"column":6},"end":{"line":72,"column":53}},"46":{"start":{"line":73,"column":6},"end":{"line":73,"column":12}},"47":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"48":{"start":{"line":77,"column":16},"end":{"line":77,"column":22}},"49":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"50":{"start":{"line":82,"column":10},"end":{"line":82,"column":27}},"51":{"start":{"line":84,"column":10},"end":{"line":84,"column":73}},"52":{"start":{"line":85,"column":10},"end":{"line":85,"column":34}},"53":{"start":{"line":86,"column":10},"end":{"line":86,"column":18}},"54":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"55":{"start":{"line":89,"column":10},"end":{"line":89,"column":68}},"56":{"start":{"line":90,"column":10},"end":{"line":90,"column":16}},"57":{"start":{"line":92,"column":8},"end":{"line":92,"column":29}},"58":{"start":{"line":93,"column":8},"end":{"line":93,"column":16}},"59":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"60":{"start":{"line":98,"column":10},"end":{"line":98,"column":27}},"61":{"start":{"line":99,"column":10},"end":{"line":99,"column":57}},"62":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"63":{"start":{"line":100,"column":35},"end":{"line":100,"column":66}},"64":{"start":{"line":101,"column":10},"end":{"line":101,"column":33}},"65":{"start":{"line":102,"column":10},"end":{"line":102,"column":18}},"66":{"start":{"line":104,"column":8},"end":{"line":104,"column":28}},"67":{"start":{"line":105,"column":8},"end":{"line":105,"column":16}},"68":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"69":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"70":{"start":{"line":112,"column":12},"end":{"line":112,"column":55}},"71":{"start":{"line":113,"column":12},"end":{"line":113,"column":18}},"72":{"start":{"line":115,"column":20},"end":{"line":115,"column":55}},"73":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"74":{"start":{"line":117,"column":12},"end":{"line":117,"column":33}},"75":{"start":{"line":119,"column":10},"end":{"line":119,"column":38}},"76":{"start":{"line":121,"column":10},"end":{"line":121,"column":33}},"77":{"start":{"line":122,"column":10},"end":{"line":122,"column":28}},"78":{"start":{"line":123,"column":10},"end":{"line":123,"column":25}},"79":{"start":{"line":124,"column":10},"end":{"line":124,"column":29}},"80":{"start":{"line":125,"column":10},"end":{"line":125,"column":18}},"81":{"start":{"line":127,"column":8},"end":{"line":127,"column":28}},"82":{"start":{"line":128,"column":8},"end":{"line":128,"column":16}},"83":{"start":{"line":134,"column":2},"end":{"line":136,"column":42}},"84":{"start":{"line":138,"column":2},"end":{"line":138,"column":15}},"85":{"start":{"line":139,"column":2},"end":{"line":139,"column":16}}},"fnMap":{"0":{"name":"ExtendedHeader","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":23}},"loc":{"start":{"line":19,"column":27},"end":{"line":31,"column":1}},"line":19},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":28},"end":{"line":43,"column":29}},"loc":{"start":{"line":43,"column":41},"end":{"line":45,"column":1}},"line":43},"2":{"name":"parse","decl":{"start":{"line":61,"column":9},"end":{"line":61,"column":14}},"loc":{"start":{"line":61,"column":19},"end":{"line":131,"column":1}},"line":61},"3":{"name":"error","decl":{"start":{"line":133,"column":9},"end":{"line":133,"column":14}},"loc":{"start":{"line":133,"column":25},"end":{"line":140,"column":1}},"line":133}},"branchMap":{"0":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},{"start":{"line":62,"column":2},"end":{"line":62,"column":33}}],"line":62},"1":{"loc":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},{"start":{"line":71,"column":4},"end":{"line":74,"column":5}}],"line":71},"2":{"loc":{"start":{"line":71,"column":8},"end":{"line":71,"column":54}},"type":"binary-expr","locations":[{"start":{"line":71,"column":8},"end":{"line":71,"column":23}},{"start":{"line":71,"column":27},"end":{"line":71,"column":54}}],"line":71},"3":{"loc":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"type":"switch","locations":[{"start":{"line":77,"column":6},"end":{"line":77,"column":22}},{"start":{"line":79,"column":6},"end":{"line":93,"column":16}},{"start":{"line":95,"column":6},"end":{"line":105,"column":16}},{"start":{"line":107,"column":6},"end":{"line":128,"column":16}}],"line":76},"4":{"loc":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},{"start":{"line":81,"column":8},"end":{"line":87,"column":9}}],"line":81},"5":{"loc":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},{"start":{"line":88,"column":8},"end":{"line":91,"column":9}}],"line":88},"6":{"loc":{"start":{"line":88,"column":12},"end":{"line":88,"column":28}},"type":"binary-expr","locations":[{"start":{"line":88,"column":12},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":28}}],"line":88},"7":{"loc":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"type":"if","locations":[{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},{"start":{"line":97,"column":8},"end":{"line":103,"column":9}}],"line":97},"8":{"loc":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"type":"if","locations":[{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},{"start":{"line":100,"column":10},"end":{"line":100,"column":66}}],"line":100},"9":{"loc":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},{"start":{"line":109,"column":8},"end":{"line":126,"column":9}}],"line":109},"10":{"loc":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"type":"if","locations":[{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},{"start":{"line":111,"column":10},"end":{"line":114,"column":11}}],"line":111},"11":{"loc":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"type":"if","locations":[{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},{"start":{"line":116,"column":10},"end":{"line":118,"column":11}}],"line":116}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":4,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0},"f":{"0":0,"1":4,"2":0,"3":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"77cb382c69a46833a08275dbc55bf34db0dcd796","contentHash":"78a790af1726a774425fb478f1423068fe64414b747d89b597baf45139e7ae3d"},"/Users/isaacs/dev/js/tar/lib/extract.js":{"path":"/Users/isaacs/dev/js/tar/lib/extract.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"1":{"start":{"line":5,"column":10},"end":{"line":5,"column":30}},"2":{"start":{"line":6,"column":14},"end":{"line":6,"column":32}},"3":{"start":{"line":7,"column":15},"end":{"line":7,"column":34}},"4":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"6":{"start":{"line":11,"column":34},"end":{"line":11,"column":58}},"7":{"start":{"line":12,"column":2},"end":{"line":12,"column":23}},"8":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"9":{"start":{"line":15,"column":4},"end":{"line":15,"column":25}},"10":{"start":{"line":19,"column":2},"end":{"line":19,"column":59}},"11":{"start":{"line":20,"column":2},"end":{"line":20,"column":25}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":26}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"15":{"start":{"line":25,"column":38},"end":{"line":25,"column":52}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":34}},"17":{"start":{"line":29,"column":2},"end":{"line":29,"column":14}},"18":{"start":{"line":30,"column":11},"end":{"line":30,"column":15}},"19":{"start":{"line":35,"column":2},"end":{"line":60,"column":4}},"20":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"21":{"start":{"line":39,"column":14},"end":{"line":39,"column":63}},"22":{"start":{"line":40,"column":6},"end":{"line":40,"column":39}},"23":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"24":{"start":{"line":42,"column":17},"end":{"line":42,"column":70}},"25":{"start":{"line":43,"column":8},"end":{"line":43,"column":50}},"26":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"27":{"start":{"line":47,"column":6},"end":{"line":48,"column":66}},"28":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"29":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"30":{"start":{"line":53,"column":21},"end":{"line":53,"column":41}},"31":{"start":{"line":54,"column":19},"end":{"line":54,"column":56}},"32":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"33":{"start":{"line":56,"column":8},"end":{"line":56,"column":65}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":54}},"35":{"start":{"line":62,"column":2},"end":{"line":65,"column":4}},"36":{"start":{"line":63,"column":4},"end":{"line":63,"column":36}},"37":{"start":{"line":64,"column":4},"end":{"line":64,"column":15}},"38":{"start":{"line":67,"column":2},"end":{"line":69,"column":4}},"39":{"start":{"line":68,"column":4},"end":{"line":68,"column":25}},"40":{"start":{"line":71,"column":2},"end":{"line":73,"column":4}},"41":{"start":{"line":72,"column":4},"end":{"line":72,"column":20}},"42":{"start":{"line":79,"column":2},"end":{"line":84,"column":4}},"43":{"start":{"line":81,"column":4},"end":{"line":81,"column":21}},"44":{"start":{"line":82,"column":4},"end":{"line":82,"column":18}},"45":{"start":{"line":83,"column":4},"end":{"line":83,"column":20}},"46":{"start":{"line":87,"column":0},"end":{"line":87,"column":28}},"47":{"start":{"line":89,"column":0},"end":{"line":94,"column":1}},"48":{"start":{"line":90,"column":11},"end":{"line":90,"column":15}},"49":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"50":{"start":{"line":91,"column":31},"end":{"line":91,"column":57}},"51":{"start":{"line":92,"column":2},"end":{"line":92,"column":15}}},"fnMap":{"0":{"name":"Extract","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":16}},"loc":{"start":{"line":10,"column":24},"end":{"line":85,"column":1}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":35,"column":17},"end":{"line":35,"column":18}},"loc":{"start":{"line":35,"column":34},"end":{"line":60,"column":3}},"line":35},"2":{"name":"(anonymous_2)","decl":{"start":{"line":62,"column":24},"end":{"line":62,"column":25}},"loc":{"start":{"line":62,"column":36},"end":{"line":65,"column":3}},"line":62},"3":{"name":"(anonymous_3)","decl":{"start":{"line":67,"column":24},"end":{"line":67,"column":25}},"loc":{"start":{"line":67,"column":38},"end":{"line":69,"column":3}},"line":67},"4":{"name":"(anonymous_4)","decl":{"start":{"line":71,"column":24},"end":{"line":71,"column":25}},"loc":{"start":{"line":71,"column":35},"end":{"line":73,"column":3}},"line":71},"5":{"name":"(anonymous_5)","decl":{"start":{"line":79,"column":24},"end":{"line":79,"column":25}},"loc":{"start":{"line":79,"column":36},"end":{"line":84,"column":3}},"line":79},"6":{"name":"(anonymous_6)","decl":{"start":{"line":89,"column":31},"end":{"line":89,"column":32}},"loc":{"start":{"line":89,"column":43},"end":{"line":94,"column":1}},"line":89}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},{"start":{"line":11,"column":2},"end":{"line":11,"column":58}}],"line":11},"1":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"2":{"loc":{"start":{"line":19,"column":14},"end":{"line":19,"column":59}},"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":23}},{"start":{"line":19,"column":27},"end":{"line":19,"column":59}}],"line":19},"3":{"loc":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"type":"if","locations":[{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},{"start":{"line":25,"column":2},"end":{"line":25,"column":52}}],"line":25},"4":{"loc":{"start":{"line":25,"column":6},"end":{"line":25,"column":36}},"type":"binary-expr","locations":[{"start":{"line":25,"column":6},"end":{"line":25,"column":17}},{"start":{"line":25,"column":21},"end":{"line":25,"column":36}}],"line":25},"5":{"loc":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},{"start":{"line":38,"column":4},"end":{"line":45,"column":5}}],"line":38},"6":{"loc":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"type":"if","locations":[{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},{"start":{"line":41,"column":6},"end":{"line":44,"column":7}}],"line":41},"7":{"loc":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},{"start":{"line":46,"column":4},"end":{"line":49,"column":5}}],"line":46},"8":{"loc":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},{"start":{"line":51,"column":4},"end":{"line":59,"column":5}}],"line":51},"9":{"loc":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"type":"binary-expr","locations":[{"start":{"line":52,"column":15},"end":{"line":52,"column":39}},{"start":{"line":52,"column":43},"end":{"line":52,"column":45}}],"line":52},"10":{"loc":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"type":"if","locations":[{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},{"start":{"line":55,"column":6},"end":{"line":57,"column":7}}],"line":55},"11":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},{"start":{"line":91,"column":2},"end":{"line":91,"column":57}}],"line":91},"12":{"loc":{"start":{"line":91,"column":6},"end":{"line":91,"column":29}},"type":"binary-expr","locations":[{"start":{"line":91,"column":6},"end":{"line":91,"column":16}},{"start":{"line":91,"column":20},"end":{"line":91,"column":29}}],"line":91}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":2,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":3,"21":0,"22":0,"23":0,"24":0,"25":0,"26":3,"27":0,"28":3,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":1,"37":1,"38":1,"39":0,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":1,"47":1,"48":0,"49":0,"50":0,"51":0},"f":{"0":2,"1":3,"2":1,"3":0,"4":0,"5":0,"6":0},"b":{"0":[1,1],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[0,3],"6":[0,0],"7":[0,3],"8":[0,3],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3fb9f60facc409fe944dc36bd2e14fc6153e403d","contentHash":"3d9485ca58c6c768b022a39d276296b53647ccf39986885459406e933921c962"}} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/7853e29b-78ef-4ab4-b8fb-e1e176c0787b.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/7853e29b-78ef-4ab4-b8fb-e1e176c0787b.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/7853e29b-78ef-4ab4-b8fb-e1e176c0787b.json
+++ /dev/null
@@ -1 +0,0 @@
-{} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/9d414044-b18d-4f6d-b2e0-531a89bf6f4f.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/9d414044-b18d-4f6d-b2e0-531a89bf6f4f.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/9d414044-b18d-4f6d-b2e0-531a89bf6f4f.json
+++ /dev/null
@@ -1 +0,0 @@
-{} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/c3ffeb8c-8e79-4a2c-b678-e5a917fe721e.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/c3ffeb8c-8e79-4a2c-b678-e5a917fe721e.json
deleted file mode 100644
index 7f34c45..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/c3ffeb8c-8e79-4a2c-b678-e5a917fe721e.json
+++ /dev/null
@@ -1 +0,0 @@
-{"/Users/isaacs/dev/js/tar/lib/pack.js":{"path":"/Users/isaacs/dev/js/tar/lib/pack.js","statementMap":{"0":{"start":{"line":4,"column":0},"end":{"line":4,"column":21}},"1":{"start":{"line":6,"column":18},"end":{"line":6,"column":46}},"2":{"start":{"line":7,"column":13},"end":{"line":7,"column":37}},"3":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"4":{"start":{"line":9,"column":15},"end":{"line":9,"column":34}},"5":{"start":{"line":10,"column":25},"end":{"line":10,"column":61}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":40}},"7":{"start":{"line":12,"column":10},"end":{"line":12,"column":25}},"8":{"start":{"line":14,"column":0},"end":{"line":14,"column":41}},"9":{"start":{"line":14,"column":13},"end":{"line":14,"column":14}},"10":{"start":{"line":14,"column":31},"end":{"line":14,"column":41}},"11":{"start":{"line":16,"column":0},"end":{"line":16,"column":22}},"12":{"start":{"line":20,"column":11},"end":{"line":20,"column":15}},"13":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"14":{"start":{"line":21,"column":29},"end":{"line":21,"column":51}},"15":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"16":{"start":{"line":23,"column":13},"end":{"line":23,"column":52}},"17":{"start":{"line":24,"column":7},"end":{"line":24,"column":32}},"18":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"19":{"start":{"line":28,"column":2},"end":{"line":28,"column":20}},"20":{"start":{"line":29,"column":2},"end":{"line":29,"column":20}},"21":{"start":{"line":30,"column":2},"end":{"line":30,"column":17}},"22":{"start":{"line":32,"column":2},"end":{"line":32,"column":25}},"23":{"start":{"line":33,"column":2},"end":{"line":33,"column":24}},"24":{"start":{"line":35,"column":2},"end":{"line":35,"column":21}},"25":{"start":{"line":36,"column":2},"end":{"line":43,"column":4}},"26":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"27":{"start":{"line":37,"column":35},"end":{"line":37,"column":41}},"28":{"start":{"line":38,"column":4},"end":{"line":38,"column":22}},"29":{"start":{"line":39,"column":4},"end":{"line":41,"column":6}},"30":{"start":{"line":40,"column":6},"end":{"line":40,"column":25}},"31":{"start":{"line":42,"column":4},"end":{"line":42,"column":15}},"32":{"start":{"line":46,"column":0},"end":{"line":57,"column":1}},"33":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"34":{"start":{"line":48,"column":23},"end":{"line":48,"column":29}},"35":{"start":{"line":49,"column":2},"end":{"line":49,"column":24}},"36":{"start":{"line":51,"column":11},"end":{"line":51,"column":15}},"37":{"start":{"line":52,"column":2},"end":{"line":56,"column":10}},"38":{"start":{"line":54,"column":6},"end":{"line":54,"column":24}},"39":{"start":{"line":59,"column":0},"end":{"line":69,"column":1}},"40":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"41":{"start":{"line":60,"column":40},"end":{"line":60,"column":68}},"42":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"43":{"start":{"line":62,"column":19},"end":{"line":62,"column":72}},"44":{"start":{"line":64,"column":2},"end":{"line":64,"column":17}},"45":{"start":{"line":65,"column":2},"end":{"line":65,"column":27}},"46":{"start":{"line":66,"column":2},"end":{"line":66,"column":17}},"47":{"start":{"line":67,"column":2},"end":{"line":67,"column":43}},"48":{"start":{"line":68,"column":2},"end":{"line":68,"column":25}},"49":{"start":{"line":71,"column":0},"end":{"line":75,"column":1}},"50":{"start":{"line":72,"column":2},"end":{"line":72,"column":21}},"51":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"52":{"start":{"line":73,"column":26},"end":{"line":73,"column":52}},"53":{"start":{"line":74,"column":2},"end":{"line":74,"column":20}},"54":{"start":{"line":77,"column":0},"end":{"line":82,"column":1}},"55":{"start":{"line":78,"column":2},"end":{"line":78,"column":22}},"56":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"57":{"start":{"line":79,"column":26},"end":{"line":79,"column":53}},"58":{"start":{"line":80,"column":2},"end":{"line":80,"column":21}},"59":{"start":{"line":81,"column":2},"end":{"line":81,"column":17}},"60":{"start":{"line":84,"column":0},"end":{"line":88,"column":1}},"61":{"start":{"line":85,"column":2},"end":{"line":85,"column":20}},"62":{"start":{"line":86,"column":2},"end":{"line":86,"column":24}},"63":{"start":{"line":87,"column":2},"end":{"line":87,"column":17}},"64":{"start":{"line":90,"column":0},"end":{"line":233,"column":1}},"65":{"start":{"line":91,"column":11},"end":{"line":91,"column":15}},"66":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"67":{"start":{"line":93,"column":4},"end":{"line":93,"column":10}},"68":{"start":{"line":96,"column":14},"end":{"line":96,"column":32}},"69":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"70":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"71":{"start":{"line":100,"column":6},"end":{"line":100,"column":22}},"72":{"start":{"line":102,"column":4},"end":{"line":102,"column":10}},"73":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"74":{"start":{"line":107,"column":4},"end":{"line":107,"column":29}},"75":{"start":{"line":108,"column":4},"end":{"line":111,"column":6}},"76":{"start":{"line":110,"column":6},"end":{"line":110,"column":19}},"77":{"start":{"line":112,"column":4},"end":{"line":112,"column":10}},"78":{"start":{"line":115,"column":2},"end":{"line":115,"column":23}},"79":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"80":{"start":{"line":119,"column":4},"end":{"line":119,"column":24}},"81":{"start":{"line":120,"column":4},"end":{"line":120,"column":24}},"82":{"start":{"line":121,"column":4},"end":{"line":121,"column":18}},"83":{"start":{"line":122,"column":4},"end":{"line":122,"column":20}},"84":{"start":{"line":123,"column":4},"end":{"line":123,"column":10}},"85":{"start":{"line":134,"column":13},"end":{"line":134,"column":53}},"86":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"87":{"start":{"line":137,"column":4},"end":{"line":137,"column":27}},"88":{"start":{"line":140,"column":15},"end":{"line":140,"column":17}},"89":{"start":{"line":142,"column":2},"end":{"line":144,"column":4}},"90":{"start":{"line":143,"column":4},"end":{"line":143,"column":30}},"91":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"92":{"start":{"line":146,"column":25},"end":{"line":146,"column":52}},"93":{"start":{"line":148,"column":2},"end":{"line":148,"column":53}},"94":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"95":{"start":{"line":152,"column":4},"end":{"line":152,"column":49}},"96":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"97":{"start":{"line":156,"column":4},"end":{"line":156,"column":29}},"98":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"99":{"start":{"line":161,"column":6},"end":{"line":161,"column":12}},"100":{"start":{"line":164,"column":6},"end":{"line":164,"column":24}},"101":{"start":{"line":165,"column":6},"end":{"line":165,"column":21}},"102":{"start":{"line":166,"column":6},"end":{"line":166,"column":11}},"103":{"start":{"line":169,"column":15},"end":{"line":169,"column":69}},"104":{"start":{"line":170,"column":6},"end":{"line":170,"column":54}},"105":{"start":{"line":171,"column":6},"end":{"line":171,"column":21}},"106":{"start":{"line":172,"column":6},"end":{"line":172,"column":11}},"107":{"start":{"line":175,"column":15},"end":{"line":175,"column":69}},"108":{"start":{"line":176,"column":6},"end":{"line":176,"column":74}},"109":{"start":{"line":177,"column":6},"end":{"line":177,"column":21}},"110":{"start":{"line":178,"column":6},"end":{"line":178,"column":11}},"111":{"start":{"line":187,"column":15},"end":{"line":187,"column":53}},"112":{"start":{"line":189,"column":2},"end":{"line":189,"column":20}},"113":{"start":{"line":195,"column":2},"end":{"line":197,"column":4}},"114":{"start":{"line":196,"column":4},"end":{"line":196,"column":22}},"115":{"start":{"line":199,"column":2},"end":{"line":205,"column":4}},"116":{"start":{"line":200,"column":4},"end":{"line":202,"column":5}},"117":{"start":{"line":201,"column":6},"end":{"line":201,"column":50}},"118":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"119":{"start":{"line":204,"column":33},"end":{"line":204,"column":44}},"120":{"start":{"line":206,"column":2},"end":{"line":206,"column":31}},"121":{"start":{"line":208,"column":14},"end":{"line":208,"column":19}},"122":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"123":{"start":{"line":210,"column":15},"end":{"line":210,"column":21}},"124":{"start":{"line":211,"column":4},"end":{"line":211,"column":16}},"125":{"start":{"line":215,"column":4},"end":{"line":215,"column":27}},"126":{"start":{"line":216,"column":4},"end":{"line":216,"column":26}},"127":{"start":{"line":217,"column":4},"end":{"line":217,"column":17}},"128":{"start":{"line":220,"column":2},"end":{"line":223,"column":4}},"129":{"start":{"line":222,"column":4},"end":{"line":222,"column":24}},"130":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"131":{"start":{"line":229,"column":4},"end":{"line":229,"column":21}},"132":{"start":{"line":232,"column":2},"end":{"line":232,"column":20}},"133":{"start":{"line":235,"column":0},"end":{"line":235,"column":39}},"134":{"start":{"line":236,"column":0},"end":{"line":236,"column":37}}},"fnMap":{"0":{"name":"Pack","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":13}},"loc":{"start":{"line":18,"column":22},"end":{"line":44,"column":1}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":36,"column":16},"end":{"line":36,"column":17}},"loc":{"start":{"line":36,"column":31},"end":{"line":43,"column":3}},"line":36},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":18},"end":{"line":39,"column":19}},"loc":{"start":{"line":39,"column":30},"end":{"line":41,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":46,"column":27},"end":{"line":46,"column":28}},"loc":{"start":{"line":46,"column":44},"end":{"line":57,"column":1}},"line":46},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":29},"end":{"line":55,"column":5}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":59,"column":21},"end":{"line":59,"column":22}},"loc":{"start":{"line":59,"column":39},"end":{"line":69,"column":1}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":71,"column":23},"end":{"line":71,"column":24}},"loc":{"start":{"line":71,"column":35},"end":{"line":75,"column":1}},"line":71},"7":{"name":"(anonymous_7)","decl":{"start":{"line":77,"column":24},"end":{"line":77,"column":25}},"loc":{"start":{"line":77,"column":36},"end":{"line":82,"column":1}},"line":77},"8":{"name":"(anonymous_8)","decl":{"start":{"line":84,"column":21},"end":{"line":84,"column":22}},"loc":{"start":{"line":84,"column":33},"end":{"line":88,"column":1}},"line":84},"9":{"name":"(anonymous_9)","decl":{"start":{"line":90,"column":26},"end":{"line":90,"column":27}},"loc":{"start":{"line":90,"column":38},"end":{"line":233,"column":1}},"line":90},"10":{"name":"(anonymous_10)","decl":{"start":{"line":108,"column":22},"end":{"line":108,"column":23}},"loc":{"start":{"line":108,"column":34},"end":{"line":111,"column":5}},"line":108},"11":{"name":"(anonymous_11)","decl":{"start":{"line":142,"column":41},"end":{"line":142,"column":42}},"loc":{"start":{"line":142,"column":54},"end":{"line":144,"column":3}},"line":142},"12":{"name":"(anonymous_12)","decl":{"start":{"line":195,"column":20},"end":{"line":195,"column":21}},"loc":{"start":{"line":195,"column":33},"end":{"line":197,"column":3}},"line":195},"13":{"name":"(anonymous_13)","decl":{"start":{"line":199,"column":22},"end":{"line":199,"column":23}},"loc":{"start":{"line":199,"column":34},"end":{"line":205,"column":3}},"line":199},"14":{"name":"(anonymous_14)","decl":{"start":{"line":200,"column":30},"end":{"line":200,"column":31}},"loc":{"start":{"line":200,"column":42},"end":{"line":202,"column":5}},"line":200},"15":{"name":"nextEntry","decl":{"start":{"line":209,"column":11},"end":{"line":209,"column":20}},"loc":{"start":{"line":209,"column":24},"end":{"line":218,"column":3}},"line":209},"16":{"name":"(anonymous_16)","decl":{"start":{"line":220,"column":21},"end":{"line":220,"column":22}},"loc":{"start":{"line":220,"column":35},"end":{"line":223,"column":3}},"line":220},"17":{"name":"(anonymous_17)","decl":{"start":{"line":235,"column":25},"end":{"line":235,"column":26}},"loc":{"start":{"line":235,"column":37},"end":{"line":235,"column":39}},"line":235},"18":{"name":"(anonymous_18)","decl":{"start":{"line":236,"column":23},"end":{"line":236,"column":24}},"loc":{"start":{"line":236,"column":35},"end":{"line":236,"column":37}},"line":236}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"type":"if","locations":[{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},{"start":{"line":21,"column":2},"end":{"line":21,"column":51}}],"line":21},"1":{"loc":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"type":"if","locations":[{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},{"start":{"line":23,"column":2},"end":{"line":24,"column":32}}],"line":23},"2":{"loc":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},{"start":{"line":37,"column":4},"end":{"line":37,"column":41}}],"line":37},"3":{"loc":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"type":"if","locations":[{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},{"start":{"line":48,"column":2},"end":{"line":48,"column":29}}],"line":48},"4":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},{"start":{"line":60,"column":2},"end":{"line":60,"column":68}}],"line":60},"5":{"loc":{"start":{"line":60,"column":6},"end":{"line":60,"column":38}},"type":"binary-expr","locations":[{"start":{"line":60,"column":6},"end":{"line":60,"column":18}},{"start":{"line":60,"column":22},"end":{"line":60,"column":38}}],"line":60},"6":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},{"start":{"line":62,"column":2},"end":{"line":62,"column":72}}],"line":62},"7":{"loc":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},{"start":{"line":73,"column":2},"end":{"line":73,"column":52}}],"line":73},"8":{"loc":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"type":"if","locations":[{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},{"start":{"line":79,"column":2},"end":{"line":79,"column":53}}],"line":79},"9":{"loc":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"type":"if","locations":[{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},{"start":{"line":92,"column":2},"end":{"line":94,"column":3}}],"line":92},"10":{"loc":{"start":{"line":92,"column":6},"end":{"line":92,"column":34}},"type":"binary-expr","locations":[{"start":{"line":92,"column":6},"end":{"line":92,"column":16}},{"start":{"line":92,"column":20},"end":{"line":92,"column":34}}],"line":92},"11":{"loc":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},{"start":{"line":98,"column":2},"end":{"line":103,"column":3}}],"line":98},"12":{"loc":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},{"start":{"line":99,"column":4},"end":{"line":101,"column":5}}],"line":99},"13":{"loc":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"type":"if","locations":[{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},{"start":{"line":105,"column":2},"end":{"line":113,"column":3}}],"line":105},"14":{"loc":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"type":"if","locations":[{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},{"start":{"line":117,"column":2},"end":{"line":124,"column":3}}],"line":117},"15":{"loc":{"start":{"line":134,"column":27},"end":{"line":134,"column":46}},"type":"binary-expr","locations":[{"start":{"line":134,"column":27},"end":{"line":134,"column":37}},{"start":{"line":134,"column":41},"end":{"line":134,"column":46}}],"line":134},"16":{"loc":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"type":"if","locations":[{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},{"start":{"line":135,"column":2},"end":{"line":138,"column":3}}],"line":135},"17":{"loc":{"start":{"line":135,"column":6},"end":{"line":135,"column":72}},"type":"binary-expr","locations":[{"start":{"line":135,"column":6},"end":{"line":135,"column":16}},{"start":{"line":135,"column":20},"end":{"line":135,"column":39}},{"start":{"line":135,"column":43},"end":{"line":135,"column":53}},{"start":{"line":135,"column":57},"end":{"line":135,"column":72}}],"line":135},"18":{"loc":{"start":{"line":142,"column":14},"end":{"line":142,"column":31}},"type":"binary-expr","locations":[{"start":{"line":142,"column":14},"end":{"line":142,"column":25}},{"start":{"line":142,"column":29},"end":{"line":142,"column":31}}],"line":142},"19":{"loc":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"type":"if","locations":[{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},{"start":{"line":146,"column":2},"end":{"line":146,"column":52}}],"line":146},"20":{"loc":{"start":{"line":148,"column":36},"end":{"line":148,"column":52}},"type":"binary-expr","locations":[{"start":{"line":148,"column":36},"end":{"line":148,"column":46}},{"start":{"line":148,"column":50},"end":{"line":148,"column":52}}],"line":148},"21":{"loc":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"type":"if","locations":[{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},{"start":{"line":151,"column":2},"end":{"line":153,"column":3}}],"line":151},"22":{"loc":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"type":"if","locations":[{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},{"start":{"line":155,"column":2},"end":{"line":156,"column":29}}],"line":155},"23":{"loc":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"type":"switch","locations":[{"start":{"line":160,"column":4},"end":{"line":161,"column":12}},{"start":{"line":163,"column":4},"end":{"line":166,"column":11}},{"start":{"line":168,"column":4},"end":{"line":172,"column":11}},{"start":{"line":174,"column":4},"end":{"line":178,"column":11}}],"line":158},"24":{"loc":{"start":{"line":170,"column":24},"end":{"line":170,"column":54}},"type":"binary-expr","locations":[{"start":{"line":170,"column":24},"end":{"line":170,"column":47}},{"start":{"line":170,"column":51},"end":{"line":170,"column":54}}],"line":170},"25":{"loc":{"start":{"line":176,"column":24},"end":{"line":176,"column":74}},"type":"binary-expr","locations":[{"start":{"line":176,"column":24},"end":{"line":176,"column":67}},{"start":{"line":176,"column":71},"end":{"line":176,"column":74}}],"line":176},"26":{"loc":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"type":"if","locations":[{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},{"start":{"line":204,"column":4},"end":{"line":204,"column":44}}],"line":204},"27":{"loc":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"type":"if","locations":[{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},{"start":{"line":210,"column":4},"end":{"line":210,"column":21}}],"line":210},"28":{"loc":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"type":"if","locations":[{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},{"start":{"line":227,"column":2},"end":{"line":230,"column":3}}],"line":227}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":512,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":1,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":0,"52":0,"53":0,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":0,"63":0,"64":1,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":1,"134":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0,0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0,0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"8beb16ccde52e484aa1dd87f5ece33d696c808ab","contentHash":"7bb2b7ebe1111c0deefbf9a61d17bf9d2dbe951adb585db96f9d89663ce5909d"},"/Users/isaacs/dev/js/tar/lib/entry-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":28}},"1":{"start":{"line":3,"column":10},"end":{"line":3,"column":30}},"2":{"start":{"line":4,"column":16},"end":{"line":4,"column":38}},"3":{"start":{"line":5,"column":12},"end":{"line":5,"column":33}},"4":{"start":{"line":6,"column":15},"end":{"line":6,"column":34}},"5":{"start":{"line":7,"column":18},"end":{"line":7,"column":41}},"6":{"start":{"line":9,"column":13},"end":{"line":9,"column":37}},"7":{"start":{"line":10,"column":10},"end":{"line":10,"column":12}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"9":{"start":{"line":15,"column":11},"end":{"line":15,"column":15}},"10":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"11":{"start":{"line":18,"column":4},"end":{"line":18,"column":33}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":20}},"13":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"14":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":35}},"16":{"start":{"line":28,"column":2},"end":{"line":30,"column":4}},"17":{"start":{"line":29,"column":4},"end":{"line":29,"column":22}},"18":{"start":{"line":32,"column":2},"end":{"line":34,"column":4}},"19":{"start":{"line":33,"column":4},"end":{"line":33,"column":20}},"20":{"start":{"line":36,"column":2},"end":{"line":39,"column":4}},"21":{"start":{"line":37,"column":4},"end":{"line":37,"column":18}},"22":{"start":{"line":38,"column":4},"end":{"line":38,"column":20}},"23":{"start":{"line":41,"column":2},"end":{"line":41,"column":18}},"24":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"25":{"start":{"line":43,"column":4},"end":{"line":43,"column":18}},"26":{"start":{"line":45,"column":2},"end":{"line":45,"column":25}},"27":{"start":{"line":46,"column":2},"end":{"line":46,"column":23}},"28":{"start":{"line":47,"column":2},"end":{"line":47,"column":22}},"29":{"start":{"line":49,"column":2},"end":{"line":49,"column":17}},"30":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"31":{"start":{"line":51,"column":2},"end":{"line":51,"column":18}},"32":{"start":{"line":53,"column":2},"end":{"line":55,"column":4}},"33":{"start":{"line":54,"column":4},"end":{"line":54,"column":17}},"34":{"start":{"line":58,"column":0},"end":{"line":65,"column":1}},"35":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"36":{"start":{"line":60,"column":19},"end":{"line":60,"column":74}},"37":{"start":{"line":61,"column":2},"end":{"line":61,"column":22}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":17}},"39":{"start":{"line":63,"column":2},"end":{"line":63,"column":43}},"40":{"start":{"line":64,"column":2},"end":{"line":64,"column":25}},"41":{"start":{"line":67,"column":0},"end":{"line":74,"column":1}},"42":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"43":{"start":{"line":69,"column":9},"end":{"line":69,"column":29}},"44":{"start":{"line":70,"column":2},"end":{"line":70,"column":24}},"45":{"start":{"line":71,"column":2},"end":{"line":71,"column":20}},"46":{"start":{"line":72,"column":2},"end":{"line":72,"column":17}},"47":{"start":{"line":73,"column":2},"end":{"line":73,"column":43}},"48":{"start":{"line":76,"column":0},"end":{"line":80,"column":1}},"49":{"start":{"line":78,"column":2},"end":{"line":78,"column":21}},"50":{"start":{"line":79,"column":2},"end":{"line":79,"column":20}},"51":{"start":{"line":82,"column":0},"end":{"line":87,"column":1}},"52":{"start":{"line":84,"column":2},"end":{"line":84,"column":22}},"53":{"start":{"line":85,"column":2},"end":{"line":85,"column":21}},"54":{"start":{"line":86,"column":2},"end":{"line":86,"column":17}},"55":{"start":{"line":89,"column":0},"end":{"line":98,"column":1}},"56":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"57":{"start":{"line":91,"column":20},"end":{"line":91,"column":69}},"58":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"59":{"start":{"line":95,"column":20},"end":{"line":95,"column":30}},"60":{"start":{"line":97,"column":2},"end":{"line":97,"column":31}},"61":{"start":{"line":100,"column":0},"end":{"line":126,"column":1}},"62":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"63":{"start":{"line":102,"column":23},"end":{"line":102,"column":29}},"64":{"start":{"line":103,"column":2},"end":{"line":103,"column":24}},"65":{"start":{"line":105,"column":20},"end":{"line":105,"column":48}},"66":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"67":{"start":{"line":108,"column":13},"end":{"line":108,"column":17}},"68":{"start":{"line":110,"column":4},"end":{"line":111,"column":44}},"69":{"start":{"line":113,"column":4},"end":{"line":120,"column":12}},"70":{"start":{"line":115,"column":8},"end":{"line":115,"column":26}},"71":{"start":{"line":118,"column":8},"end":{"line":118,"column":28}},"72":{"start":{"line":124,"column":2},"end":{"line":124,"column":32}},"73":{"start":{"line":125,"column":2},"end":{"line":125,"column":21}},"74":{"start":{"line":128,"column":0},"end":{"line":167,"column":1}},"75":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"76":{"start":{"line":131,"column":4},"end":{"line":131,"column":18}},"77":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"78":{"start":{"line":136,"column":4},"end":{"line":136,"column":10}},"79":{"start":{"line":139,"column":2},"end":{"line":139,"column":25}},"80":{"start":{"line":141,"column":12},"end":{"line":141,"column":24}},"81":{"start":{"line":142,"column":2},"end":{"line":159,"column":3}},"82":{"start":{"line":142,"column":15},"end":{"line":142,"column":16}},"83":{"start":{"line":145,"column":12},"end":{"line":145,"column":18}},"84":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"85":{"start":{"line":147,"column":19},"end":{"line":147,"column":37}},"86":{"start":{"line":148,"column":9},"end":{"line":148,"column":30}},"87":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"88":{"start":{"line":152,"column":6},"end":{"line":152,"column":30}},"89":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"90":{"start":{"line":154,"column":8},"end":{"line":154,"column":30}},"91":{"start":{"line":155,"column":8},"end":{"line":155,"column":39}},"92":{"start":{"line":157,"column":6},"end":{"line":157,"column":12}},"93":{"start":{"line":162,"column":2},"end":{"line":162,"column":25}},"94":{"start":{"line":163,"column":2},"end":{"line":163,"column":26}},"95":{"start":{"line":166,"column":2},"end":{"line":166,"column":20}},"96":{"start":{"line":169,"column":0},"end":{"line":169,"column":46}}},"fnMap":{"0":{"name":"EntryWriter","decl":{"start":{"line":14,"column":9},"end":{"line":14,"column":20}},"loc":{"start":{"line":14,"column":29},"end":{"line":56,"column":1}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":28,"column":24},"end":{"line":28,"column":25}},"loc":{"start":{"line":28,"column":37},"end":{"line":30,"column":3}},"line":28},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":25},"end":{"line":32,"column":26}},"loc":{"start":{"line":32,"column":37},"end":{"line":34,"column":3}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":23},"end":{"line":36,"column":24}},"loc":{"start":{"line":36,"column":35},"end":{"line":39,"column":3}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":28},"end":{"line":55,"column":3}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":58,"column":30},"end":{"line":58,"column":31}},"loc":{"start":{"line":58,"column":43},"end":{"line":65,"column":1}},"line":58},"6":{"name":"(anonymous_6)","decl":{"start":{"line":67,"column":28},"end":{"line":67,"column":29}},"loc":{"start":{"line":67,"column":41},"end":{"line":74,"column":1}},"line":67},"7":{"name":"(anonymous_7)","decl":{"start":{"line":76,"column":30},"end":{"line":76,"column":31}},"loc":{"start":{"line":76,"column":42},"end":{"line":80,"column":1}},"line":76},"8":{"name":"(anonymous_8)","decl":{"start":{"line":82,"column":31},"end":{"line":82,"column":32}},"loc":{"start":{"line":82,"column":43},"end":{"line":87,"column":1}},"line":82},"9":{"name":"(anonymous_9)","decl":{"start":{"line":89,"column":28},"end":{"line":89,"column":29}},"loc":{"start":{"line":89,"column":45},"end":{"line":98,"column":1}},"line":89},"10":{"name":"(anonymous_10)","decl":{"start":{"line":100,"column":32},"end":{"line":100,"column":33}},"loc":{"start":{"line":100,"column":44},"end":{"line":126,"column":1}},"line":100},"11":{"name":"(anonymous_11)","decl":{"start":{"line":114,"column":18},"end":{"line":114,"column":19}},"loc":{"start":{"line":114,"column":31},"end":{"line":116,"column":7}},"line":114},"12":{"name":"(anonymous_12)","decl":{"start":{"line":117,"column":19},"end":{"line":117,"column":20}},"loc":{"start":{"line":117,"column":33},"end":{"line":119,"column":7}},"line":117},"13":{"name":"(anonymous_13)","decl":{"start":{"line":128,"column":33},"end":{"line":128,"column":34}},"loc":{"start":{"line":128,"column":45},"end":{"line":167,"column":1}},"line":128},"14":{"name":"(anonymous_14)","decl":{"start":{"line":169,"column":32},"end":{"line":169,"column":33}},"loc":{"start":{"line":169,"column":44},"end":{"line":169,"column":46}},"line":169}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},{"start":{"line":17,"column":2},"end":{"line":19,"column":3}}],"line":17},"1":{"loc":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"type":"if","locations":[{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},{"start":{"line":42,"column":2},"end":{"line":44,"column":3}}],"line":42},"2":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},{"start":{"line":60,"column":2},"end":{"line":60,"column":74}}],"line":60},"3":{"loc":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"type":"if","locations":[{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},{"start":{"line":69,"column":2},"end":{"line":69,"column":29}}],"line":69},"4":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},{"start":{"line":91,"column":2},"end":{"line":91,"column":69}}],"line":91},"5":{"loc":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"type":"if","locations":[{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},{"start":{"line":95,"column":2},"end":{"line":95,"column":30}}],"line":95},"6":{"loc":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"type":"if","locations":[{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},{"start":{"line":102,"column":2},"end":{"line":102,"column":29}}],"line":102},"7":{"loc":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"type":"if","locations":[{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},{"start":{"line":107,"column":2},"end":{"line":121,"column":3}}],"line":107},"8":{"loc":{"start":{"line":107,"column":6},"end":{"line":107,"column":44}},"type":"binary-expr","locations":[{"start":{"line":107,"column":6},"end":{"line":107,"column":29}},{"start":{"line":107,"column":33},"end":{"line":107,"column":44}}],"line":107},"9":{"loc":{"start":{"line":110,"column":27},"end":{"line":111,"column":44}},"type":"binary-expr","locations":[{"start":{"line":110,"column":27},"end":{"line":110,"column":47}},{"start":{"line":111,"column":6},"end":{"line":111,"column":44}}],"line":110},"10":{"loc":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"type":"if","locations":[{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},{"start":{"line":130,"column":2},"end":{"line":132,"column":3}}],"line":130},"11":{"loc":{"start":{"line":130,"column":6},"end":{"line":130,"column":37}},"type":"binary-expr","locations":[{"start":{"line":130,"column":6},"end":{"line":130,"column":22}},{"start":{"line":130,"column":26},"end":{"line":130,"column":37}}],"line":130},"12":{"loc":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"type":"if","locations":[{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},{"start":{"line":134,"column":2},"end":{"line":137,"column":3}}],"line":134},"13":{"loc":{"start":{"line":134,"column":6},"end":{"line":134,"column":38}},"type":"binary-expr","locations":[{"start":{"line":134,"column":6},"end":{"line":134,"column":18}},{"start":{"line":134,"column":22},"end":{"line":134,"column":38}}],"line":134},"14":{"loc":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},{"start":{"line":147,"column":4},"end":{"line":148,"column":30}}],"line":147},"15":{"loc":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},{"start":{"line":150,"column":4},"end":{"line":158,"column":5}}],"line":150},"16":{"loc":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"type":"if","locations":[{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},{"start":{"line":153,"column":6},"end":{"line":156,"column":7}}],"line":153}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":1,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":1,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":1,"49":0,"50":0,"51":1,"52":0,"53":0,"54":0,"55":1,"56":0,"57":0,"58":0,"59":0,"60":0,"61":1,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":1,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3e169418508e031df78186ff63b5fa5aa2484ab8","contentHash":"84191ed4732b6763ae8701256051735aebbe5e95c932c15bef34da01b33ba1a0"},"/Users/isaacs/dev/js/tar/lib/entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry.js","statementMap":{"0":{"start":{"line":7,"column":0},"end":{"line":7,"column":22}},"1":{"start":{"line":9,"column":16},"end":{"line":9,"column":38}},"2":{"start":{"line":10,"column":10},"end":{"line":10,"column":27}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":33}},"4":{"start":{"line":12,"column":13},"end":{"line":12,"column":37}},"5":{"start":{"line":13,"column":15},"end":{"line":13,"column":34}},"6":{"start":{"line":14,"column":14},"end":{"line":14,"column":41}},"7":{"start":{"line":17,"column":2},"end":{"line":17,"column":19}},"8":{"start":{"line":18,"column":2},"end":{"line":18,"column":22}},"9":{"start":{"line":19,"column":2},"end":{"line":19,"column":22}},"10":{"start":{"line":21,"column":2},"end":{"line":21,"column":25}},"11":{"start":{"line":22,"column":2},"end":{"line":22,"column":22}},"12":{"start":{"line":23,"column":2},"end":{"line":23,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":22}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":21}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":21}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":21}},"17":{"start":{"line":28,"column":2},"end":{"line":28,"column":18}},"18":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"19":{"start":{"line":30,"column":2},"end":{"line":30,"column":20}},"20":{"start":{"line":32,"column":2},"end":{"line":32,"column":36}},"21":{"start":{"line":34,"column":2},"end":{"line":34,"column":17}},"22":{"start":{"line":35,"column":2},"end":{"line":35,"column":23}},"23":{"start":{"line":36,"column":2},"end":{"line":36,"column":33}},"24":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"25":{"start":{"line":41,"column":11},"end":{"line":41,"column":15}},"26":{"start":{"line":42,"column":2},"end":{"line":44,"column":4}},"27":{"start":{"line":43,"column":4},"end":{"line":43,"column":29}},"28":{"start":{"line":46,"column":2},"end":{"line":46,"column":18}},"29":{"start":{"line":49,"column":0},"end":{"line":49,"column":23}},"30":{"start":{"line":51,"column":0},"end":{"line":78,"column":1}},"31":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"32":{"start":{"line":52,"column":20},"end":{"line":52,"column":65}},"33":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"34":{"start":{"line":54,"column":4},"end":{"line":54,"column":40}},"35":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"36":{"start":{"line":60,"column":4},"end":{"line":60,"column":35}},"37":{"start":{"line":62,"column":2},"end":{"line":62,"column":29}},"38":{"start":{"line":65,"column":11},"end":{"line":65,"column":25}},"39":{"start":{"line":66,"column":2},"end":{"line":66,"column":21}},"40":{"start":{"line":67,"column":2},"end":{"line":67,"column":19}},"41":{"start":{"line":69,"column":2},"end":{"line":69,"column":14}},"42":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"43":{"start":{"line":73,"column":4},"end":{"line":73,"column":26}},"44":{"start":{"line":74,"column":4},"end":{"line":74,"column":16}},"45":{"start":{"line":77,"column":2},"end":{"line":77,"column":13}},"46":{"start":{"line":80,"column":0},"end":{"line":84,"column":1}},"47":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"48":{"start":{"line":81,"column":9},"end":{"line":81,"column":22}},"49":{"start":{"line":82,"column":2},"end":{"line":82,"column":21}},"50":{"start":{"line":83,"column":2},"end":{"line":83,"column":14}},"51":{"start":{"line":86,"column":0},"end":{"line":89,"column":1}},"52":{"start":{"line":87,"column":2},"end":{"line":87,"column":21}},"53":{"start":{"line":88,"column":2},"end":{"line":88,"column":20}},"54":{"start":{"line":91,"column":0},"end":{"line":97,"column":1}},"55":{"start":{"line":93,"column":2},"end":{"line":93,"column":21}},"56":{"start":{"line":94,"column":2},"end":{"line":94,"column":22}},"57":{"start":{"line":95,"column":2},"end":{"line":95,"column":14}},"58":{"start":{"line":96,"column":2},"end":{"line":96,"column":41}},"59":{"start":{"line":100,"column":0},"end":{"line":139,"column":1}},"60":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"61":{"start":{"line":103,"column":52},"end":{"line":103,"column":58}},"62":{"start":{"line":107,"column":2},"end":{"line":107,"column":22}},"63":{"start":{"line":110,"column":2},"end":{"line":113,"column":3}},"64":{"start":{"line":111,"column":16},"end":{"line":111,"column":43}},"65":{"start":{"line":112,"column":4},"end":{"line":112,"column":28}},"66":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"67":{"start":{"line":117,"column":4},"end":{"line":117,"column":57}},"68":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"69":{"start":{"line":119,"column":6},"end":{"line":119,"column":29}},"70":{"start":{"line":120,"column":6},"end":{"line":120,"column":24}},"71":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"72":{"start":{"line":123,"column":6},"end":{"line":123,"column":24}},"73":{"start":{"line":124,"column":6},"end":{"line":124,"column":22}},"74":{"start":{"line":130,"column":12},"end":{"line":130,"column":29}},"75":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"76":{"start":{"line":132,"column":4},"end":{"line":132,"column":36}},"77":{"start":{"line":133,"column":4},"end":{"line":133,"column":22}},"78":{"start":{"line":134,"column":4},"end":{"line":134,"column":25}},"79":{"start":{"line":135,"column":4},"end":{"line":135,"column":40}},"80":{"start":{"line":138,"column":2},"end":{"line":138,"column":23}},"81":{"start":{"line":141,"column":0},"end":{"line":211,"column":1}},"82":{"start":{"line":143,"column":15},"end":{"line":143,"column":27}},"83":{"start":{"line":144,"column":17},"end":{"line":144,"column":31}},"84":{"start":{"line":145,"column":15},"end":{"line":145,"column":27}},"85":{"start":{"line":146,"column":14},"end":{"line":146,"column":24}},"86":{"start":{"line":149,"column":15},"end":{"line":149,"column":25}},"87":{"start":{"line":150,"column":2},"end":{"line":154,"column":3}},"88":{"start":{"line":150,"column":15},"end":{"line":150,"column":16}},"89":{"start":{"line":151,"column":16},"end":{"line":151,"column":25}},"90":{"start":{"line":152,"column":14},"end":{"line":152,"column":27}},"91":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"92":{"start":{"line":153,"column":36},"end":{"line":153,"column":54}},"93":{"start":{"line":158,"column":3},"end":{"line":165,"column":3}},"94":{"start":{"line":159,"column":4},"end":{"line":161,"column":6}},"95":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"96":{"start":{"line":160,"column":39},"end":{"line":160,"column":54}},"97":{"start":{"line":165,"column":3},"end":{"line":173,"column":3}},"98":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"99":{"start":{"line":167,"column":6},"end":{"line":167,"column":40}},"100":{"start":{"line":173,"column":3},"end":{"line":177,"column":4}},"101":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"102":{"start":{"line":175,"column":6},"end":{"line":175,"column":42}},"103":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"104":{"start":{"line":184,"column":6},"end":{"line":184,"column":19}},"105":{"start":{"line":185,"column":6},"end":{"line":185,"column":11}},"106":{"start":{"line":188,"column":6},"end":{"line":188,"column":24}},"107":{"start":{"line":189,"column":6},"end":{"line":189,"column":11}},"108":{"start":{"line":192,"column":6},"end":{"line":192,"column":22}},"109":{"start":{"line":193,"column":6},"end":{"line":193,"column":11}},"110":{"start":{"line":202,"column":6},"end":{"line":202,"column":34}},"111":{"start":{"line":205,"column":2},"end":{"line":205,"column":18}},"112":{"start":{"line":206,"column":2},"end":{"line":206,"column":24}},"113":{"start":{"line":207,"column":2},"end":{"line":207,"column":24}},"114":{"start":{"line":210,"column":2},"end":{"line":210,"column":30}},"115":{"start":{"line":215,"column":0},"end":{"line":217,"column":1}},"116":{"start":{"line":216,"column":2},"end":{"line":216,"column":20}},"117":{"start":{"line":219,"column":0},"end":{"line":219,"column":35}},"118":{"start":{"line":220,"column":0},"end":{"line":220,"column":37}}},"fnMap":{"0":{"name":"Entry","decl":{"start":{"line":16,"column":9},"end":{"line":16,"column":14}},"loc":{"start":{"line":16,"column":42},"end":{"line":47,"column":1}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":42,"column":36},"end":{"line":42,"column":37}},"loc":{"start":{"line":42,"column":49},"end":{"line":44,"column":3}},"line":42},"2":{"name":"(anonymous_2)","decl":{"start":{"line":51,"column":24},"end":{"line":51,"column":25}},"loc":{"start":{"line":51,"column":37},"end":{"line":78,"column":1}},"line":51},"3":{"name":"(anonymous_3)","decl":{"start":{"line":80,"column":22},"end":{"line":80,"column":23}},"loc":{"start":{"line":80,"column":35},"end":{"line":84,"column":1}},"line":80},"4":{"name":"(anonymous_4)","decl":{"start":{"line":86,"column":24},"end":{"line":86,"column":25}},"loc":{"start":{"line":86,"column":36},"end":{"line":89,"column":1}},"line":86},"5":{"name":"(anonymous_5)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":1}},"line":91},"6":{"name":"(anonymous_6)","decl":{"start":{"line":100,"column":24},"end":{"line":100,"column":25}},"loc":{"start":{"line":100,"column":36},"end":{"line":139,"column":1}},"line":100},"7":{"name":"(anonymous_7)","decl":{"start":{"line":141,"column":28},"end":{"line":141,"column":29}},"loc":{"start":{"line":141,"column":40},"end":{"line":211,"column":1}},"line":141},"8":{"name":"(anonymous_8)","decl":{"start":{"line":158,"column":30},"end":{"line":158,"column":31}},"loc":{"start":{"line":158,"column":43},"end":{"line":162,"column":3}},"line":158},"9":{"name":"(anonymous_9)","decl":{"start":{"line":159,"column":27},"end":{"line":159,"column":28}},"loc":{"start":{"line":159,"column":40},"end":{"line":161,"column":5}},"line":159},"10":{"name":"(anonymous_10)","decl":{"start":{"line":165,"column":32},"end":{"line":165,"column":33}},"loc":{"start":{"line":165,"column":45},"end":{"line":169,"column":3}},"line":165},"11":{"name":"(anonymous_11)","decl":{"start":{"line":173,"column":39},"end":{"line":173,"column":40}},"loc":{"start":{"line":173,"column":52},"end":{"line":177,"column":3}},"line":173},"12":{"name":"(anonymous_12)","decl":{"start":{"line":215,"column":24},"end":{"line":215,"column":25}},"loc":{"start":{"line":215,"column":34},"end":{"line":217,"column":1}},"line":215}},"branchMap":{"0":{"loc":{"start":{"line":36,"column":19},"end":{"line":36,"column":33}},"type":"binary-expr","locations":[{"start":{"line":36,"column":19},"end":{"line":36,"column":27}},{"start":{"line":36,"column":31},"end":{"line":36,"column":33}}],"line":36},"1":{"loc":{"start":{"line":42,"column":14},"end":{"line":42,"column":26}},"type":"binary-expr","locations":[{"start":{"line":42,"column":14},"end":{"line":42,"column":20}},{"start":{"line":42,"column":24},"end":{"line":42,"column":26}}],"line":42},"2":{"loc":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"type":"if","locations":[{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},{"start":{"line":52,"column":2},"end":{"line":52,"column":65}}],"line":52},"3":{"loc":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"type":"if","locations":[{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},{"start":{"line":53,"column":2},"end":{"line":55,"column":3}}],"line":53},"4":{"loc":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},{"start":{"line":59,"column":2},"end":{"line":61,"column":3}}],"line":59},"5":{"loc":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"type":"if","locations":[{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},{"start":{"line":72,"column":2},"end":{"line":75,"column":3}}],"line":72},"6":{"loc":{"start":{"line":72,"column":6},"end":{"line":72,"column":28}},"type":"binary-expr","locations":[{"start":{"line":72,"column":6},"end":{"line":72,"column":18}},{"start":{"line":72,"column":22},"end":{"line":72,"column":28}}],"line":72},"7":{"loc":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"type":"if","locations":[{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},{"start":{"line":81,"column":2},"end":{"line":81,"column":22}}],"line":81},"8":{"loc":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"type":"if","locations":[{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},{"start":{"line":103,"column":2},"end":{"line":103,"column":58}}],"line":103},"9":{"loc":{"start":{"line":103,"column":6},"end":{"line":103,"column":50}},"type":"binary-expr","locations":[{"start":{"line":103,"column":6},"end":{"line":103,"column":18}},{"start":{"line":103,"column":22},"end":{"line":103,"column":35}},{"start":{"line":103,"column":39},"end":{"line":103,"column":50}}],"line":103},"10":{"loc":{"start":{"line":110,"column":9},"end":{"line":110,"column":54}},"type":"binary-expr","locations":[{"start":{"line":110,"column":9},"end":{"line":110,"column":37}},{"start":{"line":110,"column":41},"end":{"line":110,"column":54}}],"line":110},"11":{"loc":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"type":"if","locations":[{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},{"start":{"line":116,"column":2},"end":{"line":126,"column":3}}],"line":116},"12":{"loc":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"type":"if","locations":[{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},{"start":{"line":118,"column":4},"end":{"line":121,"column":5}}],"line":118},"13":{"loc":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},{"start":{"line":122,"column":4},"end":{"line":125,"column":5}}],"line":122},"14":{"loc":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"type":"if","locations":[{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},{"start":{"line":131,"column":2},"end":{"line":136,"column":3}}],"line":131},"15":{"loc":{"start":{"line":131,"column":6},"end":{"line":131,"column":45}},"type":"binary-expr","locations":[{"start":{"line":131,"column":6},"end":{"line":131,"column":26}},{"start":{"line":131,"column":30},"end":{"line":131,"column":45}}],"line":131},"16":{"loc":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"type":"if","locations":[{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},{"start":{"line":153,"column":4},"end":{"line":153,"column":54}}],"line":153},"17":{"loc":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"type":"if","locations":[{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},{"start":{"line":160,"column":6},"end":{"line":160,"column":54}}],"line":160},"18":{"loc":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"type":"if","locations":[{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},{"start":{"line":166,"column":4},"end":{"line":168,"column":5}}],"line":166},"19":{"loc":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"type":"if","locations":[{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},{"start":{"line":174,"column":4},"end":{"line":176,"column":5}}],"line":174},"20":{"loc":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"type":"switch","locations":[{"start":{"line":182,"column":4},"end":{"line":182,"column":19}},{"start":{"line":183,"column":4},"end":{"line":185,"column":11}},{"start":{"line":187,"column":4},"end":{"line":189,"column":11}},{"start":{"line":191,"column":4},"end":{"line":193,"column":11}},{"start":{"line":195,"column":4},"end":{"line":195,"column":16}},{"start":{"line":196,"column":4},"end":{"line":196,"column":24}},{"start":{"line":197,"column":4},"end":{"line":197,"column":27}},{"start":{"line":198,"column":4},"end":{"line":198,"column":23}},{"start":{"line":199,"column":4},"end":{"line":199,"column":21}},{"start":{"line":200,"column":4},"end":{"line":200,"column":16}},{"start":{"line":201,"column":4},"end":{"line":202,"column":34}}],"line":181}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":17,"8":17,"9":17,"10":17,"11":17,"12":17,"13":17,"14":17,"15":17,"16":17,"17":17,"18":17,"19":17,"20":17,"21":17,"22":17,"23":17,"24":17,"25":17,"26":17,"27":0,"28":17,"29":1,"30":1,"31":17,"32":0,"33":17,"34":0,"35":17,"36":15,"37":17,"38":17,"39":17,"40":17,"41":17,"42":17,"43":10,"44":10,"45":7,"46":1,"47":17,"48":0,"49":17,"50":17,"51":1,"52":10,"53":10,"54":1,"55":20,"56":20,"57":20,"58":20,"59":1,"60":54,"61":30,"62":24,"63":24,"64":17,"65":17,"66":24,"67":24,"68":24,"69":8,"70":8,"71":24,"72":17,"73":17,"74":24,"75":24,"76":0,"77":0,"78":0,"79":0,"80":24,"81":1,"82":17,"83":17,"84":17,"85":17,"86":17,"87":17,"88":17,"89":289,"90":289,"91":289,"92":242,"93":17,"94":34,"95":29,"96":29,"97":17,"98":34,"99":34,"100":17,"101":51,"102":25,"103":17,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":17,"111":17,"112":17,"113":17,"114":17,"115":1,"116":0,"117":1,"118":1},"f":{"0":17,"1":0,"2":17,"3":17,"4":10,"5":20,"6":54,"7":17,"8":34,"9":29,"10":34,"11":51,"12":0},"b":{"0":[17,11],"1":[17,17],"2":[0,17],"3":[0,17],"4":[15,2],"5":[10,7],"6":[17,7],"7":[0,17],"8":[30,24],"9":[54,34,34],"10":[41,17],"11":[24,0],"12":[8,16],"13":[17,7],"14":[0,24],"15":[24,0],"16":[242,47],"17":[29,0],"18":[34,0],"19":[25,26],"20":[0,0,0,0,1,2,2,2,2,2,17]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"2cc4f925db2a60e89bf0743124faec4e8996dfdb","contentHash":"245d5cb2b23d975dc5b9a0ed2553c93c587727d50a7961242f50cec333c04ba9"},"/Users/isaacs/dev/js/tar/lib/global-header-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/global-header-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":35}},"1":{"start":{"line":3,"column":27},"end":{"line":3,"column":65}},"2":{"start":{"line":4,"column":15},"end":{"line":4,"column":34}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":50}},"4":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"5":{"start":{"line":10,"column":4},"end":{"line":10,"column":40}},"6":{"start":{"line":12,"column":2},"end":{"line":12,"column":40}},"7":{"start":{"line":13,"column":2},"end":{"line":13,"column":23}}},"fnMap":{"0":{"name":"GlobalHeaderWriter","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":27}},"loc":{"start":{"line":8,"column":36},"end":{"line":14,"column":1}},"line":8}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"type":"if","locations":[{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},{"start":{"line":9,"column":2},"end":{"line":11,"column":3}}],"line":9}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3d0c8589f62a5c8ccec606d52d3abd98e5627d57","contentHash":"a2570ca840cf3e44d77e15af0aee52f7c145da39b76366006f3672b9708def3e"},"/Users/isaacs/dev/js/tar/lib/parse.js":{"path":"/Users/isaacs/dev/js/tar/lib/parse.js","statementMap":{"0":{"start":{"line":6,"column":0},"end":{"line":6,"column":37}},"1":{"start":{"line":8,"column":13},"end":{"line":8,"column":30}},"2":{"start":{"line":9,"column":13},"end":{"line":9,"column":26}},"3":{"start":{"line":10,"column":18},"end":{"line":10,"column":41}},"4":{"start":{"line":11,"column":10},"end":{"line":11,"column":30}},"5":{"start":{"line":12,"column":16},"end":{"line":12,"column":38}},"6":{"start":{"line":13,"column":12},"end":{"line":13,"column":33}},"7":{"start":{"line":14,"column":18},"end":{"line":14,"column":46}},"8":{"start":{"line":15,"column":21},"end":{"line":15,"column":52}},"9":{"start":{"line":16,"column":13},"end":{"line":16,"column":33}},"10":{"start":{"line":17,"column":15},"end":{"line":17,"column":34}},"11":{"start":{"line":18,"column":14},"end":{"line":18,"column":32}},"12":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"13":{"start":{"line":28,"column":11},"end":{"line":28,"column":15}},"14":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"15":{"start":{"line":29,"column":30},"end":{"line":29,"column":48}},"16":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"17":{"start":{"line":36,"column":2},"end":{"line":36,"column":20}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":20}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":35}},"20":{"start":{"line":39,"column":2},"end":{"line":39,"column":17}},"21":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"22":{"start":{"line":41,"column":2},"end":{"line":41,"column":20}},"23":{"start":{"line":43,"column":2},"end":{"line":45,"column":4}},"24":{"start":{"line":44,"column":4},"end":{"line":44,"column":23}},"25":{"start":{"line":47,"column":2},"end":{"line":49,"column":4}},"26":{"start":{"line":48,"column":4},"end":{"line":48,"column":18}},"27":{"start":{"line":51,"column":2},"end":{"line":53,"column":4}},"28":{"start":{"line":52,"column":4},"end":{"line":52,"column":19}},"29":{"start":{"line":55,"column":2},"end":{"line":57,"column":4}},"30":{"start":{"line":56,"column":4},"end":{"line":56,"column":20}},"31":{"start":{"line":63,"column":0},"end":{"line":67,"column":1}},"32":{"start":{"line":64,"column":11},"end":{"line":64,"column":15}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"34":{"start":{"line":65,"column":31},"end":{"line":65,"column":57}},"35":{"start":{"line":66,"column":2},"end":{"line":66,"column":16}},"36":{"start":{"line":72,"column":0},"end":{"line":83,"column":1}},"37":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"38":{"start":{"line":77,"column":4},"end":{"line":79,"column":5}},"39":{"start":{"line":77,"column":17},"end":{"line":77,"column":18}},"40":{"start":{"line":77,"column":24},"end":{"line":77,"column":32}},"41":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"42":{"start":{"line":78,"column":22},"end":{"line":78,"column":62}},"43":{"start":{"line":80,"column":4},"end":{"line":80,"column":10}},"44":{"start":{"line":82,"column":2},"end":{"line":82,"column":30}},"45":{"start":{"line":85,"column":0},"end":{"line":88,"column":1}},"46":{"start":{"line":86,"column":2},"end":{"line":86,"column":20}},"47":{"start":{"line":87,"column":2},"end":{"line":87,"column":28}},"48":{"start":{"line":94,"column":0},"end":{"line":94,"column":38}},"49":{"start":{"line":96,"column":0},"end":{"line":137,"column":1}},"50":{"start":{"line":97,"column":2},"end":{"line":97,"column":59}},"51":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"52":{"start":{"line":105,"column":16},"end":{"line":105,"column":27}},"53":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"54":{"start":{"line":106,"column":22},"end":{"line":106,"column":36}},"55":{"start":{"line":108,"column":6},"end":{"line":108,"column":34}},"56":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"57":{"start":{"line":109,"column":31},"end":{"line":109,"column":51}},"58":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"59":{"start":{"line":112,"column":6},"end":{"line":112,"column":17}},"60":{"start":{"line":113,"column":6},"end":{"line":113,"column":24}},"61":{"start":{"line":117,"column":15},"end":{"line":117,"column":19}},"62":{"start":{"line":118,"column":4},"end":{"line":120,"column":5}},"63":{"start":{"line":118,"column":17},"end":{"line":118,"column":18}},"64":{"start":{"line":119,"column":6},"end":{"line":119,"column":23}},"65":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"66":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"67":{"start":{"line":128,"column":8},"end":{"line":128,"column":26}},"68":{"start":{"line":129,"column":6},"end":{"line":129,"column":29}},"69":{"start":{"line":131,"column":6},"end":{"line":131,"column":30}},"70":{"start":{"line":132,"column":6},"end":{"line":132,"column":25}},"71":{"start":{"line":136,"column":2},"end":{"line":136,"column":22}},"72":{"start":{"line":140,"column":0},"end":{"line":285,"column":1}},"73":{"start":{"line":141,"column":15},"end":{"line":141,"column":31}},"74":{"start":{"line":142,"column":13},"end":{"line":142,"column":17}},"75":{"start":{"line":147,"column":13},"end":{"line":147,"column":18}},"76":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"77":{"start":{"line":150,"column":12},"end":{"line":150,"column":41}},"78":{"start":{"line":151,"column":4},"end":{"line":151,"column":21}},"79":{"start":{"line":152,"column":4},"end":{"line":152,"column":37}},"80":{"start":{"line":153,"column":4},"end":{"line":153,"column":37}},"81":{"start":{"line":154,"column":4},"end":{"line":154,"column":32}},"82":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"83":{"start":{"line":171,"column":6},"end":{"line":171,"column":23}},"84":{"start":{"line":172,"column":6},"end":{"line":172,"column":18}},"85":{"start":{"line":173,"column":6},"end":{"line":173,"column":11}},"86":{"start":{"line":177,"column":6},"end":{"line":177,"column":32}},"87":{"start":{"line":178,"column":6},"end":{"line":183,"column":7}},"88":{"start":{"line":179,"column":8},"end":{"line":179,"column":41}},"89":{"start":{"line":180,"column":8},"end":{"line":182,"column":10}},"90":{"start":{"line":181,"column":10},"end":{"line":181,"column":43}},"91":{"start":{"line":184,"column":6},"end":{"line":184,"column":33}},"92":{"start":{"line":185,"column":6},"end":{"line":185,"column":17}},"93":{"start":{"line":186,"column":6},"end":{"line":186,"column":11}},"94":{"start":{"line":191,"column":6},"end":{"line":191,"column":32}},"95":{"start":{"line":192,"column":6},"end":{"line":194,"column":7}},"96":{"start":{"line":193,"column":8},"end":{"line":193,"column":37}},"97":{"start":{"line":195,"column":6},"end":{"line":195,"column":27}},"98":{"start":{"line":196,"column":6},"end":{"line":196,"column":17}},"99":{"start":{"line":197,"column":6},"end":{"line":197,"column":11}},"100":{"start":{"line":201,"column":6},"end":{"line":201,"column":29}},"101":{"start":{"line":202,"column":6},"end":{"line":205,"column":7}},"102":{"start":{"line":203,"column":8},"end":{"line":203,"column":45}},"103":{"start":{"line":204,"column":8},"end":{"line":204,"column":44}},"104":{"start":{"line":206,"column":6},"end":{"line":206,"column":25}},"105":{"start":{"line":207,"column":6},"end":{"line":207,"column":17}},"106":{"start":{"line":208,"column":6},"end":{"line":208,"column":11}},"107":{"start":{"line":213,"column":6},"end":{"line":213,"column":29}},"108":{"start":{"line":214,"column":6},"end":{"line":217,"column":7}},"109":{"start":{"line":215,"column":8},"end":{"line":215,"column":45}},"110":{"start":{"line":216,"column":8},"end":{"line":216,"column":40}},"111":{"start":{"line":218,"column":6},"end":{"line":218,"column":21}},"112":{"start":{"line":219,"column":6},"end":{"line":219,"column":17}},"113":{"start":{"line":220,"column":6},"end":{"line":220,"column":11}},"114":{"start":{"line":226,"column":6},"end":{"line":226,"column":23}},"115":{"start":{"line":227,"column":6},"end":{"line":227,"column":25}},"116":{"start":{"line":228,"column":6},"end":{"line":228,"column":11}},"117":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"118":{"start":{"line":233,"column":4},"end":{"line":233,"column":28}},"119":{"start":{"line":235,"column":17},"end":{"line":235,"column":29}},"120":{"start":{"line":236,"column":19},"end":{"line":236,"column":33}},"121":{"start":{"line":240,"column":4},"end":{"line":240,"column":25}},"122":{"start":{"line":242,"column":2},"end":{"line":242,"column":49}},"123":{"start":{"line":243,"column":2},"end":{"line":243,"column":19}},"124":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"125":{"start":{"line":247,"column":4},"end":{"line":249,"column":6}},"126":{"start":{"line":248,"column":6},"end":{"line":248,"column":24}},"127":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"128":{"start":{"line":252,"column":13},"end":{"line":252,"column":35}},"129":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"130":{"start":{"line":255,"column":4},"end":{"line":255,"column":23}},"131":{"start":{"line":258,"column":2},"end":{"line":258,"column":21}},"132":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"133":{"start":{"line":261,"column":4},"end":{"line":261,"column":39}},"134":{"start":{"line":264,"column":11},"end":{"line":264,"column":15}},"135":{"start":{"line":266,"column":2},"end":{"line":268,"column":4}},"136":{"start":{"line":267,"column":4},"end":{"line":267,"column":14}},"137":{"start":{"line":270,"column":2},"end":{"line":272,"column":4}},"138":{"start":{"line":271,"column":4},"end":{"line":271,"column":15}},"139":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"140":{"start":{"line":275,"column":4},"end":{"line":275,"column":29}},"141":{"start":{"line":278,"column":2},"end":{"line":278,"column":22}},"142":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"143":{"start":{"line":282,"column":4},"end":{"line":282,"column":15}},"144":{"start":{"line":283,"column":4},"end":{"line":283,"column":22}}},"fnMap":{"0":{"name":"Parse","decl":{"start":{"line":27,"column":9},"end":{"line":27,"column":14}},"loc":{"start":{"line":27,"column":18},"end":{"line":58,"column":1}},"line":27},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":25},"end":{"line":43,"column":26}},"loc":{"start":{"line":43,"column":38},"end":{"line":45,"column":3}},"line":43},"2":{"name":"(anonymous_2)","decl":{"start":{"line":47,"column":24},"end":{"line":47,"column":25}},"loc":{"start":{"line":47,"column":37},"end":{"line":49,"column":3}},"line":47},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":23},"end":{"line":51,"column":24}},"loc":{"start":{"line":51,"column":35},"end":{"line":53,"column":3}},"line":51},"4":{"name":"(anonymous_4)","decl":{"start":{"line":55,"column":25},"end":{"line":55,"column":26}},"loc":{"start":{"line":55,"column":37},"end":{"line":57,"column":3}},"line":55},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":29},"end":{"line":63,"column":30}},"loc":{"start":{"line":63,"column":41},"end":{"line":67,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":72,"column":24},"end":{"line":72,"column":25}},"loc":{"start":{"line":72,"column":37},"end":{"line":83,"column":1}},"line":72},"7":{"name":"(anonymous_7)","decl":{"start":{"line":85,"column":22},"end":{"line":85,"column":23}},"loc":{"start":{"line":85,"column":35},"end":{"line":88,"column":1}},"line":85},"8":{"name":"(anonymous_8)","decl":{"start":{"line":94,"column":24},"end":{"line":94,"column":25}},"loc":{"start":{"line":94,"column":36},"end":{"line":94,"column":38}},"line":94},"9":{"name":"(anonymous_9)","decl":{"start":{"line":96,"column":27},"end":{"line":96,"column":28}},"loc":{"start":{"line":96,"column":40},"end":{"line":137,"column":1}},"line":96},"10":{"name":"(anonymous_10)","decl":{"start":{"line":140,"column":30},"end":{"line":140,"column":31}},"loc":{"start":{"line":140,"column":43},"end":{"line":285,"column":1}},"line":140},"11":{"name":"(anonymous_11)","decl":{"start":{"line":178,"column":14},"end":{"line":178,"column":15}},"loc":{"start":{"line":178,"column":26},"end":{"line":183,"column":7}},"line":178},"12":{"name":"(anonymous_12)","decl":{"start":{"line":180,"column":42},"end":{"line":180,"column":43}},"loc":{"start":{"line":180,"column":55},"end":{"line":182,"column":9}},"line":180},"13":{"name":"(anonymous_13)","decl":{"start":{"line":192,"column":14},"end":{"line":192,"column":15}},"loc":{"start":{"line":192,"column":26},"end":{"line":194,"column":7}},"line":192},"14":{"name":"(anonymous_14)","decl":{"start":{"line":202,"column":14},"end":{"line":202,"column":15}},"loc":{"start":{"line":202,"column":26},"end":{"line":205,"column":7}},"line":202},"15":{"name":"(anonymous_15)","decl":{"start":{"line":214,"column":14},"end":{"line":214,"column":15}},"loc":{"start":{"line":214,"column":26},"end":{"line":217,"column":7}},"line":214},"16":{"name":"(anonymous_16)","decl":{"start":{"line":247,"column":21},"end":{"line":247,"column":22}},"loc":{"start":{"line":247,"column":34},"end":{"line":249,"column":5}},"line":247},"17":{"name":"(anonymous_17)","decl":{"start":{"line":266,"column":20},"end":{"line":266,"column":21}},"loc":{"start":{"line":266,"column":32},"end":{"line":268,"column":3}},"line":266},"18":{"name":"(anonymous_18)","decl":{"start":{"line":270,"column":21},"end":{"line":270,"column":22}},"loc":{"start":{"line":270,"column":33},"end":{"line":272,"column":3}},"line":270}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},{"start":{"line":29,"column":2},"end":{"line":29,"column":48}}],"line":29},"1":{"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"type":"if","locations":[{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},{"start":{"line":65,"column":2},"end":{"line":65,"column":57}}],"line":65},"2":{"loc":{"start":{"line":65,"column":6},"end":{"line":65,"column":29}},"type":"binary-expr","locations":[{"start":{"line":65,"column":6},"end":{"line":65,"column":16}},{"start":{"line":65,"column":20},"end":{"line":65,"column":29}}],"line":65},"3":{"loc":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},{"start":{"line":73,"column":2},"end":{"line":81,"column":3}}],"line":73},"4":{"loc":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"type":"if","locations":[{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},{"start":{"line":78,"column":6},"end":{"line":78,"column":62}}],"line":78},"5":{"loc":{"start":{"line":97,"column":9},"end":{"line":97,"column":30}},"type":"binary-expr","locations":[{"start":{"line":97,"column":9},"end":{"line":97,"column":10}},{"start":{"line":97,"column":14},"end":{"line":97,"column":30}}],"line":97},"6":{"loc":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"type":"if","locations":[{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},{"start":{"line":104,"column":2},"end":{"line":134,"column":3}}],"line":104},"7":{"loc":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"type":"if","locations":[{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},{"start":{"line":106,"column":4},"end":{"line":110,"column":5}}],"line":106},"8":{"loc":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"type":"if","locations":[{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},{"start":{"line":109,"column":6},"end":{"line":109,"column":51}}],"line":109},"9":{"loc":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},{"start":{"line":111,"column":4},"end":{"line":114,"column":5}}],"line":111},"10":{"loc":{"start":{"line":118,"column":20},"end":{"line":118,"column":35}},"type":"binary-expr","locations":[{"start":{"line":118,"column":20},"end":{"line":118,"column":27}},{"start":{"line":118,"column":31},"end":{"line":118,"column":35}}],"line":118},"11":{"loc":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"type":"if","locations":[{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},{"start":{"line":126,"column":4},"end":{"line":133,"column":5}}],"line":126},"12":{"loc":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"type":"if","locations":[{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},{"start":{"line":127,"column":6},"end":{"line":128,"column":26}}],"line":127},"13":{"loc":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"type":"if","locations":[{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},{"start":{"line":149,"column":2},"end":{"line":155,"column":3}}],"line":149},"14":{"loc":{"start":{"line":149,"column":6},"end":{"line":149,"column":48}},"type":"binary-expr","locations":[{"start":{"line":149,"column":6},"end":{"line":149,"column":26}},{"start":{"line":149,"column":30},"end":{"line":149,"column":48}}],"line":149},"15":{"loc":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"type":"switch","locations":[{"start":{"line":158,"column":4},"end":{"line":158,"column":16}},{"start":{"line":159,"column":4},"end":{"line":159,"column":19}},{"start":{"line":160,"column":4},"end":{"line":160,"column":16}},{"start":{"line":161,"column":4},"end":{"line":161,"column":24}},{"start":{"line":162,"column":4},"end":{"line":162,"column":27}},{"start":{"line":163,"column":4},"end":{"line":163,"column":23}},{"start":{"line":164,"column":4},"end":{"line":164,"column":21}},{"start":{"line":165,"column":4},"end":{"line":165,"column":16}},{"start":{"line":166,"column":4},"end":{"line":166,"column":26}},{"start":{"line":167,"column":4},"end":{"line":173,"column":11}},{"start":{"line":175,"column":4},"end":{"line":186,"column":11}},{"start":{"line":188,"column":4},"end":{"line":188,"column":26}},{"start":{"line":189,"column":4},"end":{"line":197,"column":11}},{"start":{"line":199,"column":4},"end":{"line":208,"column":11}},{"start":{"line":210,"column":4},"end":{"line":210,"column":31}},{"start":{"line":211,"column":4},"end":{"line":220,"column":11}},{"start":{"line":222,"column":4},"end":{"line":228,"column":11}}],"line":157},"16":{"loc":{"start":{"line":179,"column":23},"end":{"line":179,"column":41}},"type":"binary-expr","locations":[{"start":{"line":179,"column":23},"end":{"line":179,"column":35}},{"start":{"line":179,"column":39},"end":{"line":179,"column":41}}],"line":179},"17":{"loc":{"start":{"line":203,"column":25},"end":{"line":203,"column":45}},"type":"binary-expr","locations":[{"start":{"line":203,"column":25},"end":{"line":203,"column":39}},{"start":{"line":203,"column":43},"end":{"line":203,"column":45}}],"line":203},"18":{"loc":{"start":{"line":215,"column":25},"end":{"line":215,"column":45}},"type":"binary-expr","locations":[{"start":{"line":215,"column":25},"end":{"line":215,"column":39}},{"start":{"line":215,"column":43},"end":{"line":215,"column":45}}],"line":215},"19":{"loc":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"type":"if","locations":[{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},{"start":{"line":232,"column":2},"end":{"line":241,"column":3}}],"line":232},"20":{"loc":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"type":"if","locations":[{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},{"start":{"line":246,"column":2},"end":{"line":250,"column":3}}],"line":246},"21":{"loc":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"type":"if","locations":[{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},{"start":{"line":252,"column":2},"end":{"line":252,"column":35}}],"line":252},"22":{"loc":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"type":"if","locations":[{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},{"start":{"line":254,"column":2},"end":{"line":256,"column":3}}],"line":254},"23":{"loc":{"start":{"line":254,"column":6},"end":{"line":254,"column":58}},"type":"binary-expr","locations":[{"start":{"line":254,"column":6},"end":{"line":254,"column":27}},{"start":{"line":254,"column":31},"end":{"line":254,"column":58}}],"line":254},"24":{"loc":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"type":"if","locations":[{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},{"start":{"line":260,"column":2},"end":{"line":262,"column":3}}],"line":260},"25":{"loc":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"type":"if","locations":[{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},{"start":{"line":274,"column":2},"end":{"line":276,"column":3}}],"line":274},"26":{"loc":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"type":"if","locations":[{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},{"start":{"line":281,"column":2},"end":{"line":284,"column":3}}],"line":281}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":0,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":0,"25":1,"26":36,"27":1,"28":1,"29":1,"30":1,"31":1,"32":0,"33":0,"34":0,"35":0,"36":1,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":36,"51":36,"52":17,"53":17,"54":17,"55":0,"56":0,"57":0,"58":17,"59":15,"60":15,"61":19,"62":19,"63":19,"64":1041,"65":19,"66":2,"67":1,"68":2,"69":17,"70":17,"71":36,"72":1,"73":17,"74":17,"75":17,"76":17,"77":0,"78":0,"79":0,"80":0,"81":0,"82":17,"83":10,"84":10,"85":10,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":4,"95":4,"96":4,"97":4,"98":4,"99":4,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":2,"108":2,"109":2,"110":2,"111":2,"112":2,"113":2,"114":0,"115":0,"116":0,"117":17,"118":7,"119":10,"120":10,"121":10,"122":17,"123":17,"124":17,"125":10,"126":10,"127":17,"128":7,"129":17,"130":0,"131":17,"132":17,"133":1,"134":17,"135":17,"136":10,"137":17,"138":20,"139":17,"140":0,"141":17,"142":17,"143":2,"144":2},"f":{"0":1,"1":0,"2":36,"3":1,"4":1,"5":0,"6":1,"7":1,"8":22,"9":36,"10":17,"11":0,"12":0,"13":4,"14":1,"15":2,"16":10,"17":10,"18":20},"b":{"0":[0,1],"1":[0,0],"2":[0,0],"3":[0,1],"4":[0,0],"5":[36,36],"6":[17,19],"7":[17,0],"8":[0,0],"9":[15,2],"10":[1060,1058],"11":[2,17],"12":[1,1],"13":[0,17],"14":[17,17],"15":[8,8,9,10,10,10,10,10,10,10,0,4,4,1,2,2,0],"16":[0,0],"17":[1,1],"18":[2,1],"19":[7,10],"20":[10,7],"21":[7,10],"22":[0,17],"23":[17,8],"24":[1,16],"25":[0,17],"26":[2,15]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"4a8f51a3a12b59eb69694618530032a813fbf8cb","contentHash":"d347e73abcd3109143efee20401d9f0bfc6d68a4a6323bd4559ada44c741786a"},"/Users/isaacs/dev/js/tar/lib/buffer-entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/buffer-entry.js","statementMap":{"0":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"1":{"start":{"line":10,"column":15},"end":{"line":10,"column":34}},"2":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"3":{"start":{"line":14,"column":2},"end":{"line":14,"column":30}},"4":{"start":{"line":15,"column":2},"end":{"line":15,"column":44}},"5":{"start":{"line":16,"column":2},"end":{"line":16,"column":18}},"6":{"start":{"line":17,"column":2},"end":{"line":17,"column":16}},"7":{"start":{"line":18,"column":2},"end":{"line":20,"column":4}},"8":{"start":{"line":19,"column":4},"end":{"line":19,"column":52}},"9":{"start":{"line":23,"column":0},"end":{"line":23,"column":28}},"10":{"start":{"line":26,"column":0},"end":{"line":30,"column":1}},"11":{"start":{"line":27,"column":2},"end":{"line":27,"column":36}},"12":{"start":{"line":28,"column":2},"end":{"line":28,"column":26}},"13":{"start":{"line":29,"column":2},"end":{"line":29,"column":37}}},"fnMap":{"0":{"name":"BufferEntry","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":20}},"loc":{"start":{"line":13,"column":24},"end":{"line":21,"column":1}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":17},"end":{"line":18,"column":18}},"loc":{"start":{"line":18,"column":29},"end":{"line":20,"column":3}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":26,"column":30},"end":{"line":26,"column":31}},"loc":{"start":{"line":26,"column":43},"end":{"line":30,"column":1}},"line":26}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":3,"4":3,"5":3,"6":3,"7":3,"8":3,"9":1,"10":1,"11":3,"12":3,"13":3},"f":{"0":3,"1":3,"2":3},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"d8ad66df900443c9c9d8aefe5fc126a55ba268ec","contentHash":"25e5b3c51e476fcffac7affa191a0ed0f54d64d3d3b760e887bd45ba08fffa65"},"/Users/isaacs/dev/js/tar/lib/extended-header.js":{"path":"/Users/isaacs/dev/js/tar/lib/extended-header.js","statementMap":{"0":{"start":{"line":9,"column":0},"end":{"line":9,"column":31}},"1":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"2":{"start":{"line":12,"column":15},"end":{"line":12,"column":34}},"3":{"start":{"line":13,"column":10},"end":{"line":13,"column":30}},"4":{"start":{"line":14,"column":14},"end":{"line":14,"column":25}},"5":{"start":{"line":15,"column":15},"end":{"line":17,"column":42}},"6":{"start":{"line":20,"column":2},"end":{"line":20,"column":30}},"7":{"start":{"line":21,"column":2},"end":{"line":21,"column":30}},"8":{"start":{"line":22,"column":2},"end":{"line":22,"column":18}},"9":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"10":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"11":{"start":{"line":25,"column":2},"end":{"line":25,"column":20}},"12":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"13":{"start":{"line":27,"column":2},"end":{"line":27,"column":19}},"14":{"start":{"line":28,"column":2},"end":{"line":28,"column":19}},"15":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"16":{"start":{"line":30,"column":2},"end":{"line":30,"column":16}},"17":{"start":{"line":33,"column":0},"end":{"line":33,"column":31}},"18":{"start":{"line":34,"column":0},"end":{"line":34,"column":39}},"19":{"start":{"line":36,"column":8},"end":{"line":36,"column":9}},"20":{"start":{"line":37,"column":13},"end":{"line":37,"column":39}},"21":{"start":{"line":38,"column":11},"end":{"line":38,"column":28}},"22":{"start":{"line":39,"column":11},"end":{"line":39,"column":28}},"23":{"start":{"line":40,"column":11},"end":{"line":40,"column":28}},"24":{"start":{"line":41,"column":11},"end":{"line":41,"column":28}},"25":{"start":{"line":43,"column":0},"end":{"line":45,"column":2}},"26":{"start":{"line":44,"column":2},"end":{"line":44,"column":31}},"27":{"start":{"line":47,"column":0},"end":{"line":47,"column":16}},"28":{"start":{"line":50,"column":9},"end":{"line":50,"column":26}},"29":{"start":{"line":51,"column":9},"end":{"line":51,"column":26}},"30":{"start":{"line":52,"column":12},"end":{"line":52,"column":29}},"31":{"start":{"line":53,"column":8},"end":{"line":53,"column":25}},"32":{"start":{"line":54,"column":8},"end":{"line":54,"column":25}},"33":{"start":{"line":55,"column":8},"end":{"line":55,"column":25}},"34":{"start":{"line":56,"column":8},"end":{"line":56,"column":25}},"35":{"start":{"line":57,"column":12},"end":{"line":57,"column":29}},"36":{"start":{"line":58,"column":9},"end":{"line":58,"column":26}},"37":{"start":{"line":59,"column":9},"end":{"line":59,"column":27}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"39":{"start":{"line":62,"column":27},"end":{"line":62,"column":33}},"40":{"start":{"line":64,"column":2},"end":{"line":130,"column":3}},"41":{"start":{"line":64,"column":16},"end":{"line":64,"column":17}},"42":{"start":{"line":64,"column":23},"end":{"line":64,"column":31}},"43":{"start":{"line":69,"column":12},"end":{"line":69,"column":16}},"44":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"45":{"start":{"line":72,"column":6},"end":{"line":72,"column":53}},"46":{"start":{"line":73,"column":6},"end":{"line":73,"column":12}},"47":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"48":{"start":{"line":77,"column":16},"end":{"line":77,"column":22}},"49":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"50":{"start":{"line":82,"column":10},"end":{"line":82,"column":27}},"51":{"start":{"line":84,"column":10},"end":{"line":84,"column":73}},"52":{"start":{"line":85,"column":10},"end":{"line":85,"column":34}},"53":{"start":{"line":86,"column":10},"end":{"line":86,"column":18}},"54":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"55":{"start":{"line":89,"column":10},"end":{"line":89,"column":68}},"56":{"start":{"line":90,"column":10},"end":{"line":90,"column":16}},"57":{"start":{"line":92,"column":8},"end":{"line":92,"column":29}},"58":{"start":{"line":93,"column":8},"end":{"line":93,"column":16}},"59":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"60":{"start":{"line":98,"column":10},"end":{"line":98,"column":27}},"61":{"start":{"line":99,"column":10},"end":{"line":99,"column":57}},"62":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"63":{"start":{"line":100,"column":35},"end":{"line":100,"column":66}},"64":{"start":{"line":101,"column":10},"end":{"line":101,"column":33}},"65":{"start":{"line":102,"column":10},"end":{"line":102,"column":18}},"66":{"start":{"line":104,"column":8},"end":{"line":104,"column":28}},"67":{"start":{"line":105,"column":8},"end":{"line":105,"column":16}},"68":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"69":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"70":{"start":{"line":112,"column":12},"end":{"line":112,"column":55}},"71":{"start":{"line":113,"column":12},"end":{"line":113,"column":18}},"72":{"start":{"line":115,"column":20},"end":{"line":115,"column":55}},"73":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"74":{"start":{"line":117,"column":12},"end":{"line":117,"column":33}},"75":{"start":{"line":119,"column":10},"end":{"line":119,"column":38}},"76":{"start":{"line":121,"column":10},"end":{"line":121,"column":33}},"77":{"start":{"line":122,"column":10},"end":{"line":122,"column":28}},"78":{"start":{"line":123,"column":10},"end":{"line":123,"column":25}},"79":{"start":{"line":124,"column":10},"end":{"line":124,"column":29}},"80":{"start":{"line":125,"column":10},"end":{"line":125,"column":18}},"81":{"start":{"line":127,"column":8},"end":{"line":127,"column":28}},"82":{"start":{"line":128,"column":8},"end":{"line":128,"column":16}},"83":{"start":{"line":134,"column":2},"end":{"line":136,"column":42}},"84":{"start":{"line":138,"column":2},"end":{"line":138,"column":15}},"85":{"start":{"line":139,"column":2},"end":{"line":139,"column":16}}},"fnMap":{"0":{"name":"ExtendedHeader","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":23}},"loc":{"start":{"line":19,"column":27},"end":{"line":31,"column":1}},"line":19},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":28},"end":{"line":43,"column":29}},"loc":{"start":{"line":43,"column":41},"end":{"line":45,"column":1}},"line":43},"2":{"name":"parse","decl":{"start":{"line":61,"column":9},"end":{"line":61,"column":14}},"loc":{"start":{"line":61,"column":19},"end":{"line":131,"column":1}},"line":61},"3":{"name":"error","decl":{"start":{"line":133,"column":9},"end":{"line":133,"column":14}},"loc":{"start":{"line":133,"column":25},"end":{"line":140,"column":1}},"line":133}},"branchMap":{"0":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},{"start":{"line":62,"column":2},"end":{"line":62,"column":33}}],"line":62},"1":{"loc":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},{"start":{"line":71,"column":4},"end":{"line":74,"column":5}}],"line":71},"2":{"loc":{"start":{"line":71,"column":8},"end":{"line":71,"column":54}},"type":"binary-expr","locations":[{"start":{"line":71,"column":8},"end":{"line":71,"column":23}},{"start":{"line":71,"column":27},"end":{"line":71,"column":54}}],"line":71},"3":{"loc":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"type":"switch","locations":[{"start":{"line":77,"column":6},"end":{"line":77,"column":22}},{"start":{"line":79,"column":6},"end":{"line":93,"column":16}},{"start":{"line":95,"column":6},"end":{"line":105,"column":16}},{"start":{"line":107,"column":6},"end":{"line":128,"column":16}}],"line":76},"4":{"loc":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},{"start":{"line":81,"column":8},"end":{"line":87,"column":9}}],"line":81},"5":{"loc":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},{"start":{"line":88,"column":8},"end":{"line":91,"column":9}}],"line":88},"6":{"loc":{"start":{"line":88,"column":12},"end":{"line":88,"column":28}},"type":"binary-expr","locations":[{"start":{"line":88,"column":12},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":28}}],"line":88},"7":{"loc":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"type":"if","locations":[{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},{"start":{"line":97,"column":8},"end":{"line":103,"column":9}}],"line":97},"8":{"loc":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"type":"if","locations":[{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},{"start":{"line":100,"column":10},"end":{"line":100,"column":66}}],"line":100},"9":{"loc":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},{"start":{"line":109,"column":8},"end":{"line":126,"column":9}}],"line":109},"10":{"loc":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"type":"if","locations":[{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},{"start":{"line":111,"column":10},"end":{"line":114,"column":11}}],"line":111},"11":{"loc":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"type":"if","locations":[{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},{"start":{"line":116,"column":10},"end":{"line":118,"column":11}}],"line":116}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":4,"7":4,"8":4,"9":4,"10":4,"11":4,"12":4,"13":4,"14":4,"15":4,"16":4,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":4,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":4,"39":0,"40":4,"41":4,"42":4,"43":969,"44":969,"45":0,"46":0,"47":969,"48":0,"49":80,"50":26,"51":26,"52":26,"53":26,"54":54,"55":0,"56":0,"57":54,"58":54,"59":275,"60":26,"61":26,"62":26,"63":12,"64":26,"65":26,"66":249,"67":249,"68":614,"69":26,"70":0,"71":0,"72":26,"73":26,"74":20,"75":26,"76":26,"77":26,"78":26,"79":26,"80":26,"81":588,"82":588,"83":0,"84":0,"85":0},"f":{"0":4,"1":4,"2":4,"3":0},"b":{"0":[0,4],"1":[0,969],"2":[969,889],"3":[0,80,275,614],"4":[26,54],"5":[0,54],"6":[54,54],"7":[26,249],"8":[12,14],"9":[26,588],"10":[0,26],"11":[20,6]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"77cb382c69a46833a08275dbc55bf34db0dcd796","contentHash":"78a790af1726a774425fb478f1423068fe64414b747d89b597baf45139e7ae3d"},"/Users/isaacs/dev/js/tar/lib/extract.js":{"path":"/Users/isaacs/dev/js/tar/lib/extract.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"1":{"start":{"line":5,"column":10},"end":{"line":5,"column":30}},"2":{"start":{"line":6,"column":14},"end":{"line":6,"column":32}},"3":{"start":{"line":7,"column":15},"end":{"line":7,"column":34}},"4":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"6":{"start":{"line":11,"column":34},"end":{"line":11,"column":58}},"7":{"start":{"line":12,"column":2},"end":{"line":12,"column":23}},"8":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"9":{"start":{"line":15,"column":4},"end":{"line":15,"column":25}},"10":{"start":{"line":19,"column":2},"end":{"line":19,"column":59}},"11":{"start":{"line":20,"column":2},"end":{"line":20,"column":25}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":26}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"15":{"start":{"line":25,"column":38},"end":{"line":25,"column":52}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":34}},"17":{"start":{"line":29,"column":2},"end":{"line":29,"column":14}},"18":{"start":{"line":30,"column":11},"end":{"line":30,"column":15}},"19":{"start":{"line":35,"column":2},"end":{"line":60,"column":4}},"20":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"21":{"start":{"line":39,"column":14},"end":{"line":39,"column":63}},"22":{"start":{"line":40,"column":6},"end":{"line":40,"column":39}},"23":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"24":{"start":{"line":42,"column":17},"end":{"line":42,"column":70}},"25":{"start":{"line":43,"column":8},"end":{"line":43,"column":50}},"26":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"27":{"start":{"line":47,"column":6},"end":{"line":48,"column":66}},"28":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"29":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"30":{"start":{"line":53,"column":21},"end":{"line":53,"column":41}},"31":{"start":{"line":54,"column":19},"end":{"line":54,"column":56}},"32":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"33":{"start":{"line":56,"column":8},"end":{"line":56,"column":65}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":54}},"35":{"start":{"line":62,"column":2},"end":{"line":65,"column":4}},"36":{"start":{"line":63,"column":4},"end":{"line":63,"column":36}},"37":{"start":{"line":64,"column":4},"end":{"line":64,"column":15}},"38":{"start":{"line":67,"column":2},"end":{"line":69,"column":4}},"39":{"start":{"line":68,"column":4},"end":{"line":68,"column":25}},"40":{"start":{"line":71,"column":2},"end":{"line":73,"column":4}},"41":{"start":{"line":72,"column":4},"end":{"line":72,"column":20}},"42":{"start":{"line":79,"column":2},"end":{"line":84,"column":4}},"43":{"start":{"line":81,"column":4},"end":{"line":81,"column":21}},"44":{"start":{"line":82,"column":4},"end":{"line":82,"column":18}},"45":{"start":{"line":83,"column":4},"end":{"line":83,"column":20}},"46":{"start":{"line":87,"column":0},"end":{"line":87,"column":28}},"47":{"start":{"line":89,"column":0},"end":{"line":94,"column":1}},"48":{"start":{"line":90,"column":11},"end":{"line":90,"column":15}},"49":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"50":{"start":{"line":91,"column":31},"end":{"line":91,"column":57}},"51":{"start":{"line":92,"column":2},"end":{"line":92,"column":15}}},"fnMap":{"0":{"name":"Extract","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":16}},"loc":{"start":{"line":10,"column":24},"end":{"line":85,"column":1}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":35,"column":17},"end":{"line":35,"column":18}},"loc":{"start":{"line":35,"column":34},"end":{"line":60,"column":3}},"line":35},"2":{"name":"(anonymous_2)","decl":{"start":{"line":62,"column":24},"end":{"line":62,"column":25}},"loc":{"start":{"line":62,"column":36},"end":{"line":65,"column":3}},"line":62},"3":{"name":"(anonymous_3)","decl":{"start":{"line":67,"column":24},"end":{"line":67,"column":25}},"loc":{"start":{"line":67,"column":38},"end":{"line":69,"column":3}},"line":67},"4":{"name":"(anonymous_4)","decl":{"start":{"line":71,"column":24},"end":{"line":71,"column":25}},"loc":{"start":{"line":71,"column":35},"end":{"line":73,"column":3}},"line":71},"5":{"name":"(anonymous_5)","decl":{"start":{"line":79,"column":24},"end":{"line":79,"column":25}},"loc":{"start":{"line":79,"column":36},"end":{"line":84,"column":3}},"line":79},"6":{"name":"(anonymous_6)","decl":{"start":{"line":89,"column":31},"end":{"line":89,"column":32}},"loc":{"start":{"line":89,"column":43},"end":{"line":94,"column":1}},"line":89}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},{"start":{"line":11,"column":2},"end":{"line":11,"column":58}}],"line":11},"1":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"2":{"loc":{"start":{"line":19,"column":14},"end":{"line":19,"column":59}},"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":23}},{"start":{"line":19,"column":27},"end":{"line":19,"column":59}}],"line":19},"3":{"loc":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"type":"if","locations":[{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},{"start":{"line":25,"column":2},"end":{"line":25,"column":52}}],"line":25},"4":{"loc":{"start":{"line":25,"column":6},"end":{"line":25,"column":36}},"type":"binary-expr","locations":[{"start":{"line":25,"column":6},"end":{"line":25,"column":17}},{"start":{"line":25,"column":21},"end":{"line":25,"column":36}}],"line":25},"5":{"loc":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},{"start":{"line":38,"column":4},"end":{"line":45,"column":5}}],"line":38},"6":{"loc":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"type":"if","locations":[{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},{"start":{"line":41,"column":6},"end":{"line":44,"column":7}}],"line":41},"7":{"loc":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},{"start":{"line":46,"column":4},"end":{"line":49,"column":5}}],"line":46},"8":{"loc":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},{"start":{"line":51,"column":4},"end":{"line":59,"column":5}}],"line":51},"9":{"loc":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"type":"binary-expr","locations":[{"start":{"line":52,"column":15},"end":{"line":52,"column":39}},{"start":{"line":52,"column":43},"end":{"line":52,"column":45}}],"line":52},"10":{"loc":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"type":"if","locations":[{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},{"start":{"line":55,"column":6},"end":{"line":57,"column":7}}],"line":55},"11":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},{"start":{"line":91,"column":2},"end":{"line":91,"column":57}}],"line":91},"12":{"loc":{"start":{"line":91,"column":6},"end":{"line":91,"column":29}},"type":"binary-expr","locations":[{"start":{"line":91,"column":6},"end":{"line":91,"column":16}},{"start":{"line":91,"column":20},"end":{"line":91,"column":29}}],"line":91}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":2,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":10,"21":0,"22":0,"23":0,"24":0,"25":0,"26":10,"27":1,"28":10,"29":1,"30":1,"31":1,"32":1,"33":0,"34":1,"35":1,"36":1,"37":1,"38":1,"39":0,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":0,"51":1},"f":{"0":2,"1":10,"2":1,"3":0,"4":1,"5":1,"6":1},"b":{"0":[1,1],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[0,10],"6":[0,0],"7":[1,9],"8":[1,9],"9":[1,0],"10":[0,1],"11":[0,1],"12":[1,1]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3fb9f60facc409fe944dc36bd2e14fc6153e403d","contentHash":"3d9485ca58c6c768b022a39d276296b53647ccf39986885459406e933921c962"}} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/ea0194cb-f599-402f-8876-84fb8251e8db.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/ea0194cb-f599-402f-8876-84fb8251e8db.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/ea0194cb-f599-402f-8876-84fb8251e8db.json
+++ /dev/null
@@ -1 +0,0 @@
-{} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/eda6b7a3-5e15-440f-8619-e11a15a07f77.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/eda6b7a3-5e15-440f-8619-e11a15a07f77.json
deleted file mode 100644
index 750861f..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/eda6b7a3-5e15-440f-8619-e11a15a07f77.json
+++ /dev/null
@@ -1 +0,0 @@
-{"/Users/isaacs/dev/js/tar/lib/pack.js":{"path":"/Users/isaacs/dev/js/tar/lib/pack.js","statementMap":{"0":{"start":{"line":4,"column":0},"end":{"line":4,"column":21}},"1":{"start":{"line":6,"column":18},"end":{"line":6,"column":46}},"2":{"start":{"line":7,"column":13},"end":{"line":7,"column":37}},"3":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"4":{"start":{"line":9,"column":15},"end":{"line":9,"column":34}},"5":{"start":{"line":10,"column":25},"end":{"line":10,"column":61}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":40}},"7":{"start":{"line":12,"column":10},"end":{"line":12,"column":25}},"8":{"start":{"line":14,"column":0},"end":{"line":14,"column":41}},"9":{"start":{"line":14,"column":13},"end":{"line":14,"column":14}},"10":{"start":{"line":14,"column":31},"end":{"line":14,"column":41}},"11":{"start":{"line":16,"column":0},"end":{"line":16,"column":22}},"12":{"start":{"line":20,"column":11},"end":{"line":20,"column":15}},"13":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"14":{"start":{"line":21,"column":29},"end":{"line":21,"column":51}},"15":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"16":{"start":{"line":23,"column":13},"end":{"line":23,"column":52}},"17":{"start":{"line":24,"column":7},"end":{"line":24,"column":32}},"18":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"19":{"start":{"line":28,"column":2},"end":{"line":28,"column":20}},"20":{"start":{"line":29,"column":2},"end":{"line":29,"column":20}},"21":{"start":{"line":30,"column":2},"end":{"line":30,"column":17}},"22":{"start":{"line":32,"column":2},"end":{"line":32,"column":25}},"23":{"start":{"line":33,"column":2},"end":{"line":33,"column":24}},"24":{"start":{"line":35,"column":2},"end":{"line":35,"column":21}},"25":{"start":{"line":36,"column":2},"end":{"line":43,"column":4}},"26":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"27":{"start":{"line":37,"column":35},"end":{"line":37,"column":41}},"28":{"start":{"line":38,"column":4},"end":{"line":38,"column":22}},"29":{"start":{"line":39,"column":4},"end":{"line":41,"column":6}},"30":{"start":{"line":40,"column":6},"end":{"line":40,"column":25}},"31":{"start":{"line":42,"column":4},"end":{"line":42,"column":15}},"32":{"start":{"line":46,"column":0},"end":{"line":57,"column":1}},"33":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"34":{"start":{"line":48,"column":23},"end":{"line":48,"column":29}},"35":{"start":{"line":49,"column":2},"end":{"line":49,"column":24}},"36":{"start":{"line":51,"column":11},"end":{"line":51,"column":15}},"37":{"start":{"line":52,"column":2},"end":{"line":56,"column":10}},"38":{"start":{"line":54,"column":6},"end":{"line":54,"column":24}},"39":{"start":{"line":59,"column":0},"end":{"line":69,"column":1}},"40":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"41":{"start":{"line":60,"column":40},"end":{"line":60,"column":68}},"42":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"43":{"start":{"line":62,"column":19},"end":{"line":62,"column":72}},"44":{"start":{"line":64,"column":2},"end":{"line":64,"column":17}},"45":{"start":{"line":65,"column":2},"end":{"line":65,"column":27}},"46":{"start":{"line":66,"column":2},"end":{"line":66,"column":17}},"47":{"start":{"line":67,"column":2},"end":{"line":67,"column":43}},"48":{"start":{"line":68,"column":2},"end":{"line":68,"column":25}},"49":{"start":{"line":71,"column":0},"end":{"line":75,"column":1}},"50":{"start":{"line":72,"column":2},"end":{"line":72,"column":21}},"51":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"52":{"start":{"line":73,"column":26},"end":{"line":73,"column":52}},"53":{"start":{"line":74,"column":2},"end":{"line":74,"column":20}},"54":{"start":{"line":77,"column":0},"end":{"line":82,"column":1}},"55":{"start":{"line":78,"column":2},"end":{"line":78,"column":22}},"56":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"57":{"start":{"line":79,"column":26},"end":{"line":79,"column":53}},"58":{"start":{"line":80,"column":2},"end":{"line":80,"column":21}},"59":{"start":{"line":81,"column":2},"end":{"line":81,"column":17}},"60":{"start":{"line":84,"column":0},"end":{"line":88,"column":1}},"61":{"start":{"line":85,"column":2},"end":{"line":85,"column":20}},"62":{"start":{"line":86,"column":2},"end":{"line":86,"column":24}},"63":{"start":{"line":87,"column":2},"end":{"line":87,"column":17}},"64":{"start":{"line":90,"column":0},"end":{"line":233,"column":1}},"65":{"start":{"line":91,"column":11},"end":{"line":91,"column":15}},"66":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"67":{"start":{"line":93,"column":4},"end":{"line":93,"column":10}},"68":{"start":{"line":96,"column":14},"end":{"line":96,"column":32}},"69":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"70":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"71":{"start":{"line":100,"column":6},"end":{"line":100,"column":22}},"72":{"start":{"line":102,"column":4},"end":{"line":102,"column":10}},"73":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"74":{"start":{"line":107,"column":4},"end":{"line":107,"column":29}},"75":{"start":{"line":108,"column":4},"end":{"line":111,"column":6}},"76":{"start":{"line":110,"column":6},"end":{"line":110,"column":19}},"77":{"start":{"line":112,"column":4},"end":{"line":112,"column":10}},"78":{"start":{"line":115,"column":2},"end":{"line":115,"column":23}},"79":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"80":{"start":{"line":119,"column":4},"end":{"line":119,"column":24}},"81":{"start":{"line":120,"column":4},"end":{"line":120,"column":24}},"82":{"start":{"line":121,"column":4},"end":{"line":121,"column":18}},"83":{"start":{"line":122,"column":4},"end":{"line":122,"column":20}},"84":{"start":{"line":123,"column":4},"end":{"line":123,"column":10}},"85":{"start":{"line":134,"column":13},"end":{"line":134,"column":53}},"86":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"87":{"start":{"line":137,"column":4},"end":{"line":137,"column":27}},"88":{"start":{"line":140,"column":15},"end":{"line":140,"column":17}},"89":{"start":{"line":142,"column":2},"end":{"line":144,"column":4}},"90":{"start":{"line":143,"column":4},"end":{"line":143,"column":30}},"91":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"92":{"start":{"line":146,"column":25},"end":{"line":146,"column":52}},"93":{"start":{"line":148,"column":2},"end":{"line":148,"column":53}},"94":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"95":{"start":{"line":152,"column":4},"end":{"line":152,"column":49}},"96":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"97":{"start":{"line":156,"column":4},"end":{"line":156,"column":29}},"98":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"99":{"start":{"line":161,"column":6},"end":{"line":161,"column":12}},"100":{"start":{"line":164,"column":6},"end":{"line":164,"column":24}},"101":{"start":{"line":165,"column":6},"end":{"line":165,"column":21}},"102":{"start":{"line":166,"column":6},"end":{"line":166,"column":11}},"103":{"start":{"line":169,"column":15},"end":{"line":169,"column":69}},"104":{"start":{"line":170,"column":6},"end":{"line":170,"column":54}},"105":{"start":{"line":171,"column":6},"end":{"line":171,"column":21}},"106":{"start":{"line":172,"column":6},"end":{"line":172,"column":11}},"107":{"start":{"line":175,"column":15},"end":{"line":175,"column":69}},"108":{"start":{"line":176,"column":6},"end":{"line":176,"column":74}},"109":{"start":{"line":177,"column":6},"end":{"line":177,"column":21}},"110":{"start":{"line":178,"column":6},"end":{"line":178,"column":11}},"111":{"start":{"line":187,"column":15},"end":{"line":187,"column":53}},"112":{"start":{"line":189,"column":2},"end":{"line":189,"column":20}},"113":{"start":{"line":195,"column":2},"end":{"line":197,"column":4}},"114":{"start":{"line":196,"column":4},"end":{"line":196,"column":22}},"115":{"start":{"line":199,"column":2},"end":{"line":205,"column":4}},"116":{"start":{"line":200,"column":4},"end":{"line":202,"column":5}},"117":{"start":{"line":201,"column":6},"end":{"line":201,"column":50}},"118":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"119":{"start":{"line":204,"column":33},"end":{"line":204,"column":44}},"120":{"start":{"line":206,"column":2},"end":{"line":206,"column":31}},"121":{"start":{"line":208,"column":14},"end":{"line":208,"column":19}},"122":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"123":{"start":{"line":210,"column":15},"end":{"line":210,"column":21}},"124":{"start":{"line":211,"column":4},"end":{"line":211,"column":16}},"125":{"start":{"line":215,"column":4},"end":{"line":215,"column":27}},"126":{"start":{"line":216,"column":4},"end":{"line":216,"column":26}},"127":{"start":{"line":217,"column":4},"end":{"line":217,"column":17}},"128":{"start":{"line":220,"column":2},"end":{"line":223,"column":4}},"129":{"start":{"line":222,"column":4},"end":{"line":222,"column":24}},"130":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"131":{"start":{"line":229,"column":4},"end":{"line":229,"column":21}},"132":{"start":{"line":232,"column":2},"end":{"line":232,"column":20}},"133":{"start":{"line":235,"column":0},"end":{"line":235,"column":39}},"134":{"start":{"line":236,"column":0},"end":{"line":236,"column":37}}},"fnMap":{"0":{"name":"Pack","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":13}},"loc":{"start":{"line":18,"column":22},"end":{"line":44,"column":1}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":36,"column":16},"end":{"line":36,"column":17}},"loc":{"start":{"line":36,"column":31},"end":{"line":43,"column":3}},"line":36},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":18},"end":{"line":39,"column":19}},"loc":{"start":{"line":39,"column":30},"end":{"line":41,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":46,"column":27},"end":{"line":46,"column":28}},"loc":{"start":{"line":46,"column":44},"end":{"line":57,"column":1}},"line":46},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":29},"end":{"line":55,"column":5}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":59,"column":21},"end":{"line":59,"column":22}},"loc":{"start":{"line":59,"column":39},"end":{"line":69,"column":1}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":71,"column":23},"end":{"line":71,"column":24}},"loc":{"start":{"line":71,"column":35},"end":{"line":75,"column":1}},"line":71},"7":{"name":"(anonymous_7)","decl":{"start":{"line":77,"column":24},"end":{"line":77,"column":25}},"loc":{"start":{"line":77,"column":36},"end":{"line":82,"column":1}},"line":77},"8":{"name":"(anonymous_8)","decl":{"start":{"line":84,"column":21},"end":{"line":84,"column":22}},"loc":{"start":{"line":84,"column":33},"end":{"line":88,"column":1}},"line":84},"9":{"name":"(anonymous_9)","decl":{"start":{"line":90,"column":26},"end":{"line":90,"column":27}},"loc":{"start":{"line":90,"column":38},"end":{"line":233,"column":1}},"line":90},"10":{"name":"(anonymous_10)","decl":{"start":{"line":108,"column":22},"end":{"line":108,"column":23}},"loc":{"start":{"line":108,"column":34},"end":{"line":111,"column":5}},"line":108},"11":{"name":"(anonymous_11)","decl":{"start":{"line":142,"column":41},"end":{"line":142,"column":42}},"loc":{"start":{"line":142,"column":54},"end":{"line":144,"column":3}},"line":142},"12":{"name":"(anonymous_12)","decl":{"start":{"line":195,"column":20},"end":{"line":195,"column":21}},"loc":{"start":{"line":195,"column":33},"end":{"line":197,"column":3}},"line":195},"13":{"name":"(anonymous_13)","decl":{"start":{"line":199,"column":22},"end":{"line":199,"column":23}},"loc":{"start":{"line":199,"column":34},"end":{"line":205,"column":3}},"line":199},"14":{"name":"(anonymous_14)","decl":{"start":{"line":200,"column":30},"end":{"line":200,"column":31}},"loc":{"start":{"line":200,"column":42},"end":{"line":202,"column":5}},"line":200},"15":{"name":"nextEntry","decl":{"start":{"line":209,"column":11},"end":{"line":209,"column":20}},"loc":{"start":{"line":209,"column":24},"end":{"line":218,"column":3}},"line":209},"16":{"name":"(anonymous_16)","decl":{"start":{"line":220,"column":21},"end":{"line":220,"column":22}},"loc":{"start":{"line":220,"column":35},"end":{"line":223,"column":3}},"line":220},"17":{"name":"(anonymous_17)","decl":{"start":{"line":235,"column":25},"end":{"line":235,"column":26}},"loc":{"start":{"line":235,"column":37},"end":{"line":235,"column":39}},"line":235},"18":{"name":"(anonymous_18)","decl":{"start":{"line":236,"column":23},"end":{"line":236,"column":24}},"loc":{"start":{"line":236,"column":35},"end":{"line":236,"column":37}},"line":236}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"type":"if","locations":[{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},{"start":{"line":21,"column":2},"end":{"line":21,"column":51}}],"line":21},"1":{"loc":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"type":"if","locations":[{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},{"start":{"line":23,"column":2},"end":{"line":24,"column":32}}],"line":23},"2":{"loc":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},{"start":{"line":37,"column":4},"end":{"line":37,"column":41}}],"line":37},"3":{"loc":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"type":"if","locations":[{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},{"start":{"line":48,"column":2},"end":{"line":48,"column":29}}],"line":48},"4":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},{"start":{"line":60,"column":2},"end":{"line":60,"column":68}}],"line":60},"5":{"loc":{"start":{"line":60,"column":6},"end":{"line":60,"column":38}},"type":"binary-expr","locations":[{"start":{"line":60,"column":6},"end":{"line":60,"column":18}},{"start":{"line":60,"column":22},"end":{"line":60,"column":38}}],"line":60},"6":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},{"start":{"line":62,"column":2},"end":{"line":62,"column":72}}],"line":62},"7":{"loc":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},{"start":{"line":73,"column":2},"end":{"line":73,"column":52}}],"line":73},"8":{"loc":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"type":"if","locations":[{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},{"start":{"line":79,"column":2},"end":{"line":79,"column":53}}],"line":79},"9":{"loc":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"type":"if","locations":[{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},{"start":{"line":92,"column":2},"end":{"line":94,"column":3}}],"line":92},"10":{"loc":{"start":{"line":92,"column":6},"end":{"line":92,"column":34}},"type":"binary-expr","locations":[{"start":{"line":92,"column":6},"end":{"line":92,"column":16}},{"start":{"line":92,"column":20},"end":{"line":92,"column":34}}],"line":92},"11":{"loc":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},{"start":{"line":98,"column":2},"end":{"line":103,"column":3}}],"line":98},"12":{"loc":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},{"start":{"line":99,"column":4},"end":{"line":101,"column":5}}],"line":99},"13":{"loc":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"type":"if","locations":[{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},{"start":{"line":105,"column":2},"end":{"line":113,"column":3}}],"line":105},"14":{"loc":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"type":"if","locations":[{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},{"start":{"line":117,"column":2},"end":{"line":124,"column":3}}],"line":117},"15":{"loc":{"start":{"line":134,"column":27},"end":{"line":134,"column":46}},"type":"binary-expr","locations":[{"start":{"line":134,"column":27},"end":{"line":134,"column":37}},{"start":{"line":134,"column":41},"end":{"line":134,"column":46}}],"line":134},"16":{"loc":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"type":"if","locations":[{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},{"start":{"line":135,"column":2},"end":{"line":138,"column":3}}],"line":135},"17":{"loc":{"start":{"line":135,"column":6},"end":{"line":135,"column":72}},"type":"binary-expr","locations":[{"start":{"line":135,"column":6},"end":{"line":135,"column":16}},{"start":{"line":135,"column":20},"end":{"line":135,"column":39}},{"start":{"line":135,"column":43},"end":{"line":135,"column":53}},{"start":{"line":135,"column":57},"end":{"line":135,"column":72}}],"line":135},"18":{"loc":{"start":{"line":142,"column":14},"end":{"line":142,"column":31}},"type":"binary-expr","locations":[{"start":{"line":142,"column":14},"end":{"line":142,"column":25}},{"start":{"line":142,"column":29},"end":{"line":142,"column":31}}],"line":142},"19":{"loc":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"type":"if","locations":[{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},{"start":{"line":146,"column":2},"end":{"line":146,"column":52}}],"line":146},"20":{"loc":{"start":{"line":148,"column":36},"end":{"line":148,"column":52}},"type":"binary-expr","locations":[{"start":{"line":148,"column":36},"end":{"line":148,"column":46}},{"start":{"line":148,"column":50},"end":{"line":148,"column":52}}],"line":148},"21":{"loc":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"type":"if","locations":[{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},{"start":{"line":151,"column":2},"end":{"line":153,"column":3}}],"line":151},"22":{"loc":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"type":"if","locations":[{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},{"start":{"line":155,"column":2},"end":{"line":156,"column":29}}],"line":155},"23":{"loc":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"type":"switch","locations":[{"start":{"line":160,"column":4},"end":{"line":161,"column":12}},{"start":{"line":163,"column":4},"end":{"line":166,"column":11}},{"start":{"line":168,"column":4},"end":{"line":172,"column":11}},{"start":{"line":174,"column":4},"end":{"line":178,"column":11}}],"line":158},"24":{"loc":{"start":{"line":170,"column":24},"end":{"line":170,"column":54}},"type":"binary-expr","locations":[{"start":{"line":170,"column":24},"end":{"line":170,"column":47}},{"start":{"line":170,"column":51},"end":{"line":170,"column":54}}],"line":170},"25":{"loc":{"start":{"line":176,"column":24},"end":{"line":176,"column":74}},"type":"binary-expr","locations":[{"start":{"line":176,"column":24},"end":{"line":176,"column":67}},{"start":{"line":176,"column":71},"end":{"line":176,"column":74}}],"line":176},"26":{"loc":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"type":"if","locations":[{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},{"start":{"line":204,"column":4},"end":{"line":204,"column":44}}],"line":204},"27":{"loc":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"type":"if","locations":[{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},{"start":{"line":210,"column":4},"end":{"line":210,"column":21}}],"line":210},"28":{"loc":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"type":"if","locations":[{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},{"start":{"line":227,"column":2},"end":{"line":230,"column":3}}],"line":227}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":512,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":1,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":0,"52":0,"53":0,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":0,"63":0,"64":1,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":1,"134":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0,0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0,0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"8beb16ccde52e484aa1dd87f5ece33d696c808ab","contentHash":"7bb2b7ebe1111c0deefbf9a61d17bf9d2dbe951adb585db96f9d89663ce5909d"},"/Users/isaacs/dev/js/tar/lib/entry-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":28}},"1":{"start":{"line":3,"column":10},"end":{"line":3,"column":30}},"2":{"start":{"line":4,"column":16},"end":{"line":4,"column":38}},"3":{"start":{"line":5,"column":12},"end":{"line":5,"column":33}},"4":{"start":{"line":6,"column":15},"end":{"line":6,"column":34}},"5":{"start":{"line":7,"column":18},"end":{"line":7,"column":41}},"6":{"start":{"line":9,"column":13},"end":{"line":9,"column":37}},"7":{"start":{"line":10,"column":10},"end":{"line":10,"column":12}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"9":{"start":{"line":15,"column":11},"end":{"line":15,"column":15}},"10":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"11":{"start":{"line":18,"column":4},"end":{"line":18,"column":33}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":20}},"13":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"14":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":35}},"16":{"start":{"line":28,"column":2},"end":{"line":30,"column":4}},"17":{"start":{"line":29,"column":4},"end":{"line":29,"column":22}},"18":{"start":{"line":32,"column":2},"end":{"line":34,"column":4}},"19":{"start":{"line":33,"column":4},"end":{"line":33,"column":20}},"20":{"start":{"line":36,"column":2},"end":{"line":39,"column":4}},"21":{"start":{"line":37,"column":4},"end":{"line":37,"column":18}},"22":{"start":{"line":38,"column":4},"end":{"line":38,"column":20}},"23":{"start":{"line":41,"column":2},"end":{"line":41,"column":18}},"24":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"25":{"start":{"line":43,"column":4},"end":{"line":43,"column":18}},"26":{"start":{"line":45,"column":2},"end":{"line":45,"column":25}},"27":{"start":{"line":46,"column":2},"end":{"line":46,"column":23}},"28":{"start":{"line":47,"column":2},"end":{"line":47,"column":22}},"29":{"start":{"line":49,"column":2},"end":{"line":49,"column":17}},"30":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"31":{"start":{"line":51,"column":2},"end":{"line":51,"column":18}},"32":{"start":{"line":53,"column":2},"end":{"line":55,"column":4}},"33":{"start":{"line":54,"column":4},"end":{"line":54,"column":17}},"34":{"start":{"line":58,"column":0},"end":{"line":65,"column":1}},"35":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"36":{"start":{"line":60,"column":19},"end":{"line":60,"column":74}},"37":{"start":{"line":61,"column":2},"end":{"line":61,"column":22}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":17}},"39":{"start":{"line":63,"column":2},"end":{"line":63,"column":43}},"40":{"start":{"line":64,"column":2},"end":{"line":64,"column":25}},"41":{"start":{"line":67,"column":0},"end":{"line":74,"column":1}},"42":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"43":{"start":{"line":69,"column":9},"end":{"line":69,"column":29}},"44":{"start":{"line":70,"column":2},"end":{"line":70,"column":24}},"45":{"start":{"line":71,"column":2},"end":{"line":71,"column":20}},"46":{"start":{"line":72,"column":2},"end":{"line":72,"column":17}},"47":{"start":{"line":73,"column":2},"end":{"line":73,"column":43}},"48":{"start":{"line":76,"column":0},"end":{"line":80,"column":1}},"49":{"start":{"line":78,"column":2},"end":{"line":78,"column":21}},"50":{"start":{"line":79,"column":2},"end":{"line":79,"column":20}},"51":{"start":{"line":82,"column":0},"end":{"line":87,"column":1}},"52":{"start":{"line":84,"column":2},"end":{"line":84,"column":22}},"53":{"start":{"line":85,"column":2},"end":{"line":85,"column":21}},"54":{"start":{"line":86,"column":2},"end":{"line":86,"column":17}},"55":{"start":{"line":89,"column":0},"end":{"line":98,"column":1}},"56":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"57":{"start":{"line":91,"column":20},"end":{"line":91,"column":69}},"58":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"59":{"start":{"line":95,"column":20},"end":{"line":95,"column":30}},"60":{"start":{"line":97,"column":2},"end":{"line":97,"column":31}},"61":{"start":{"line":100,"column":0},"end":{"line":126,"column":1}},"62":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"63":{"start":{"line":102,"column":23},"end":{"line":102,"column":29}},"64":{"start":{"line":103,"column":2},"end":{"line":103,"column":24}},"65":{"start":{"line":105,"column":20},"end":{"line":105,"column":48}},"66":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"67":{"start":{"line":108,"column":13},"end":{"line":108,"column":17}},"68":{"start":{"line":110,"column":4},"end":{"line":111,"column":44}},"69":{"start":{"line":113,"column":4},"end":{"line":120,"column":12}},"70":{"start":{"line":115,"column":8},"end":{"line":115,"column":26}},"71":{"start":{"line":118,"column":8},"end":{"line":118,"column":28}},"72":{"start":{"line":124,"column":2},"end":{"line":124,"column":32}},"73":{"start":{"line":125,"column":2},"end":{"line":125,"column":21}},"74":{"start":{"line":128,"column":0},"end":{"line":167,"column":1}},"75":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"76":{"start":{"line":131,"column":4},"end":{"line":131,"column":18}},"77":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"78":{"start":{"line":136,"column":4},"end":{"line":136,"column":10}},"79":{"start":{"line":139,"column":2},"end":{"line":139,"column":25}},"80":{"start":{"line":141,"column":12},"end":{"line":141,"column":24}},"81":{"start":{"line":142,"column":2},"end":{"line":159,"column":3}},"82":{"start":{"line":142,"column":15},"end":{"line":142,"column":16}},"83":{"start":{"line":145,"column":12},"end":{"line":145,"column":18}},"84":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"85":{"start":{"line":147,"column":19},"end":{"line":147,"column":37}},"86":{"start":{"line":148,"column":9},"end":{"line":148,"column":30}},"87":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"88":{"start":{"line":152,"column":6},"end":{"line":152,"column":30}},"89":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"90":{"start":{"line":154,"column":8},"end":{"line":154,"column":30}},"91":{"start":{"line":155,"column":8},"end":{"line":155,"column":39}},"92":{"start":{"line":157,"column":6},"end":{"line":157,"column":12}},"93":{"start":{"line":162,"column":2},"end":{"line":162,"column":25}},"94":{"start":{"line":163,"column":2},"end":{"line":163,"column":26}},"95":{"start":{"line":166,"column":2},"end":{"line":166,"column":20}},"96":{"start":{"line":169,"column":0},"end":{"line":169,"column":46}}},"fnMap":{"0":{"name":"EntryWriter","decl":{"start":{"line":14,"column":9},"end":{"line":14,"column":20}},"loc":{"start":{"line":14,"column":29},"end":{"line":56,"column":1}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":28,"column":24},"end":{"line":28,"column":25}},"loc":{"start":{"line":28,"column":37},"end":{"line":30,"column":3}},"line":28},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":25},"end":{"line":32,"column":26}},"loc":{"start":{"line":32,"column":37},"end":{"line":34,"column":3}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":23},"end":{"line":36,"column":24}},"loc":{"start":{"line":36,"column":35},"end":{"line":39,"column":3}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":28},"end":{"line":55,"column":3}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":58,"column":30},"end":{"line":58,"column":31}},"loc":{"start":{"line":58,"column":43},"end":{"line":65,"column":1}},"line":58},"6":{"name":"(anonymous_6)","decl":{"start":{"line":67,"column":28},"end":{"line":67,"column":29}},"loc":{"start":{"line":67,"column":41},"end":{"line":74,"column":1}},"line":67},"7":{"name":"(anonymous_7)","decl":{"start":{"line":76,"column":30},"end":{"line":76,"column":31}},"loc":{"start":{"line":76,"column":42},"end":{"line":80,"column":1}},"line":76},"8":{"name":"(anonymous_8)","decl":{"start":{"line":82,"column":31},"end":{"line":82,"column":32}},"loc":{"start":{"line":82,"column":43},"end":{"line":87,"column":1}},"line":82},"9":{"name":"(anonymous_9)","decl":{"start":{"line":89,"column":28},"end":{"line":89,"column":29}},"loc":{"start":{"line":89,"column":45},"end":{"line":98,"column":1}},"line":89},"10":{"name":"(anonymous_10)","decl":{"start":{"line":100,"column":32},"end":{"line":100,"column":33}},"loc":{"start":{"line":100,"column":44},"end":{"line":126,"column":1}},"line":100},"11":{"name":"(anonymous_11)","decl":{"start":{"line":114,"column":18},"end":{"line":114,"column":19}},"loc":{"start":{"line":114,"column":31},"end":{"line":116,"column":7}},"line":114},"12":{"name":"(anonymous_12)","decl":{"start":{"line":117,"column":19},"end":{"line":117,"column":20}},"loc":{"start":{"line":117,"column":33},"end":{"line":119,"column":7}},"line":117},"13":{"name":"(anonymous_13)","decl":{"start":{"line":128,"column":33},"end":{"line":128,"column":34}},"loc":{"start":{"line":128,"column":45},"end":{"line":167,"column":1}},"line":128},"14":{"name":"(anonymous_14)","decl":{"start":{"line":169,"column":32},"end":{"line":169,"column":33}},"loc":{"start":{"line":169,"column":44},"end":{"line":169,"column":46}},"line":169}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},{"start":{"line":17,"column":2},"end":{"line":19,"column":3}}],"line":17},"1":{"loc":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"type":"if","locations":[{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},{"start":{"line":42,"column":2},"end":{"line":44,"column":3}}],"line":42},"2":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},{"start":{"line":60,"column":2},"end":{"line":60,"column":74}}],"line":60},"3":{"loc":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"type":"if","locations":[{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},{"start":{"line":69,"column":2},"end":{"line":69,"column":29}}],"line":69},"4":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},{"start":{"line":91,"column":2},"end":{"line":91,"column":69}}],"line":91},"5":{"loc":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"type":"if","locations":[{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},{"start":{"line":95,"column":2},"end":{"line":95,"column":30}}],"line":95},"6":{"loc":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"type":"if","locations":[{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},{"start":{"line":102,"column":2},"end":{"line":102,"column":29}}],"line":102},"7":{"loc":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"type":"if","locations":[{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},{"start":{"line":107,"column":2},"end":{"line":121,"column":3}}],"line":107},"8":{"loc":{"start":{"line":107,"column":6},"end":{"line":107,"column":44}},"type":"binary-expr","locations":[{"start":{"line":107,"column":6},"end":{"line":107,"column":29}},{"start":{"line":107,"column":33},"end":{"line":107,"column":44}}],"line":107},"9":{"loc":{"start":{"line":110,"column":27},"end":{"line":111,"column":44}},"type":"binary-expr","locations":[{"start":{"line":110,"column":27},"end":{"line":110,"column":47}},{"start":{"line":111,"column":6},"end":{"line":111,"column":44}}],"line":110},"10":{"loc":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"type":"if","locations":[{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},{"start":{"line":130,"column":2},"end":{"line":132,"column":3}}],"line":130},"11":{"loc":{"start":{"line":130,"column":6},"end":{"line":130,"column":37}},"type":"binary-expr","locations":[{"start":{"line":130,"column":6},"end":{"line":130,"column":22}},{"start":{"line":130,"column":26},"end":{"line":130,"column":37}}],"line":130},"12":{"loc":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"type":"if","locations":[{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},{"start":{"line":134,"column":2},"end":{"line":137,"column":3}}],"line":134},"13":{"loc":{"start":{"line":134,"column":6},"end":{"line":134,"column":38}},"type":"binary-expr","locations":[{"start":{"line":134,"column":6},"end":{"line":134,"column":18}},{"start":{"line":134,"column":22},"end":{"line":134,"column":38}}],"line":134},"14":{"loc":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},{"start":{"line":147,"column":4},"end":{"line":148,"column":30}}],"line":147},"15":{"loc":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},{"start":{"line":150,"column":4},"end":{"line":158,"column":5}}],"line":150},"16":{"loc":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"type":"if","locations":[{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},{"start":{"line":153,"column":6},"end":{"line":156,"column":7}}],"line":153}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":1,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":1,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":1,"49":0,"50":0,"51":1,"52":0,"53":0,"54":0,"55":1,"56":0,"57":0,"58":0,"59":0,"60":0,"61":1,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":1,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3e169418508e031df78186ff63b5fa5aa2484ab8","contentHash":"84191ed4732b6763ae8701256051735aebbe5e95c932c15bef34da01b33ba1a0"},"/Users/isaacs/dev/js/tar/lib/entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry.js","statementMap":{"0":{"start":{"line":7,"column":0},"end":{"line":7,"column":22}},"1":{"start":{"line":9,"column":16},"end":{"line":9,"column":38}},"2":{"start":{"line":10,"column":10},"end":{"line":10,"column":27}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":33}},"4":{"start":{"line":12,"column":13},"end":{"line":12,"column":37}},"5":{"start":{"line":13,"column":15},"end":{"line":13,"column":34}},"6":{"start":{"line":14,"column":14},"end":{"line":14,"column":41}},"7":{"start":{"line":17,"column":2},"end":{"line":17,"column":19}},"8":{"start":{"line":18,"column":2},"end":{"line":18,"column":22}},"9":{"start":{"line":19,"column":2},"end":{"line":19,"column":22}},"10":{"start":{"line":21,"column":2},"end":{"line":21,"column":25}},"11":{"start":{"line":22,"column":2},"end":{"line":22,"column":22}},"12":{"start":{"line":23,"column":2},"end":{"line":23,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":22}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":21}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":21}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":21}},"17":{"start":{"line":28,"column":2},"end":{"line":28,"column":18}},"18":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"19":{"start":{"line":30,"column":2},"end":{"line":30,"column":20}},"20":{"start":{"line":32,"column":2},"end":{"line":32,"column":36}},"21":{"start":{"line":34,"column":2},"end":{"line":34,"column":17}},"22":{"start":{"line":35,"column":2},"end":{"line":35,"column":23}},"23":{"start":{"line":36,"column":2},"end":{"line":36,"column":33}},"24":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"25":{"start":{"line":41,"column":11},"end":{"line":41,"column":15}},"26":{"start":{"line":42,"column":2},"end":{"line":44,"column":4}},"27":{"start":{"line":43,"column":4},"end":{"line":43,"column":29}},"28":{"start":{"line":46,"column":2},"end":{"line":46,"column":18}},"29":{"start":{"line":49,"column":0},"end":{"line":49,"column":23}},"30":{"start":{"line":51,"column":0},"end":{"line":78,"column":1}},"31":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"32":{"start":{"line":52,"column":20},"end":{"line":52,"column":65}},"33":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"34":{"start":{"line":54,"column":4},"end":{"line":54,"column":40}},"35":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"36":{"start":{"line":60,"column":4},"end":{"line":60,"column":35}},"37":{"start":{"line":62,"column":2},"end":{"line":62,"column":29}},"38":{"start":{"line":65,"column":11},"end":{"line":65,"column":25}},"39":{"start":{"line":66,"column":2},"end":{"line":66,"column":21}},"40":{"start":{"line":67,"column":2},"end":{"line":67,"column":19}},"41":{"start":{"line":69,"column":2},"end":{"line":69,"column":14}},"42":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"43":{"start":{"line":73,"column":4},"end":{"line":73,"column":26}},"44":{"start":{"line":74,"column":4},"end":{"line":74,"column":16}},"45":{"start":{"line":77,"column":2},"end":{"line":77,"column":13}},"46":{"start":{"line":80,"column":0},"end":{"line":84,"column":1}},"47":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"48":{"start":{"line":81,"column":9},"end":{"line":81,"column":22}},"49":{"start":{"line":82,"column":2},"end":{"line":82,"column":21}},"50":{"start":{"line":83,"column":2},"end":{"line":83,"column":14}},"51":{"start":{"line":86,"column":0},"end":{"line":89,"column":1}},"52":{"start":{"line":87,"column":2},"end":{"line":87,"column":21}},"53":{"start":{"line":88,"column":2},"end":{"line":88,"column":20}},"54":{"start":{"line":91,"column":0},"end":{"line":97,"column":1}},"55":{"start":{"line":93,"column":2},"end":{"line":93,"column":21}},"56":{"start":{"line":94,"column":2},"end":{"line":94,"column":22}},"57":{"start":{"line":95,"column":2},"end":{"line":95,"column":14}},"58":{"start":{"line":96,"column":2},"end":{"line":96,"column":41}},"59":{"start":{"line":100,"column":0},"end":{"line":139,"column":1}},"60":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"61":{"start":{"line":103,"column":52},"end":{"line":103,"column":58}},"62":{"start":{"line":107,"column":2},"end":{"line":107,"column":22}},"63":{"start":{"line":110,"column":2},"end":{"line":113,"column":3}},"64":{"start":{"line":111,"column":16},"end":{"line":111,"column":43}},"65":{"start":{"line":112,"column":4},"end":{"line":112,"column":28}},"66":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"67":{"start":{"line":117,"column":4},"end":{"line":117,"column":57}},"68":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"69":{"start":{"line":119,"column":6},"end":{"line":119,"column":29}},"70":{"start":{"line":120,"column":6},"end":{"line":120,"column":24}},"71":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"72":{"start":{"line":123,"column":6},"end":{"line":123,"column":24}},"73":{"start":{"line":124,"column":6},"end":{"line":124,"column":22}},"74":{"start":{"line":130,"column":12},"end":{"line":130,"column":29}},"75":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"76":{"start":{"line":132,"column":4},"end":{"line":132,"column":36}},"77":{"start":{"line":133,"column":4},"end":{"line":133,"column":22}},"78":{"start":{"line":134,"column":4},"end":{"line":134,"column":25}},"79":{"start":{"line":135,"column":4},"end":{"line":135,"column":40}},"80":{"start":{"line":138,"column":2},"end":{"line":138,"column":23}},"81":{"start":{"line":141,"column":0},"end":{"line":211,"column":1}},"82":{"start":{"line":143,"column":15},"end":{"line":143,"column":27}},"83":{"start":{"line":144,"column":17},"end":{"line":144,"column":31}},"84":{"start":{"line":145,"column":15},"end":{"line":145,"column":27}},"85":{"start":{"line":146,"column":14},"end":{"line":146,"column":24}},"86":{"start":{"line":149,"column":15},"end":{"line":149,"column":25}},"87":{"start":{"line":150,"column":2},"end":{"line":154,"column":3}},"88":{"start":{"line":150,"column":15},"end":{"line":150,"column":16}},"89":{"start":{"line":151,"column":16},"end":{"line":151,"column":25}},"90":{"start":{"line":152,"column":14},"end":{"line":152,"column":27}},"91":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"92":{"start":{"line":153,"column":36},"end":{"line":153,"column":54}},"93":{"start":{"line":158,"column":3},"end":{"line":165,"column":3}},"94":{"start":{"line":159,"column":4},"end":{"line":161,"column":6}},"95":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"96":{"start":{"line":160,"column":39},"end":{"line":160,"column":54}},"97":{"start":{"line":165,"column":3},"end":{"line":173,"column":3}},"98":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"99":{"start":{"line":167,"column":6},"end":{"line":167,"column":40}},"100":{"start":{"line":173,"column":3},"end":{"line":177,"column":4}},"101":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"102":{"start":{"line":175,"column":6},"end":{"line":175,"column":42}},"103":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"104":{"start":{"line":184,"column":6},"end":{"line":184,"column":19}},"105":{"start":{"line":185,"column":6},"end":{"line":185,"column":11}},"106":{"start":{"line":188,"column":6},"end":{"line":188,"column":24}},"107":{"start":{"line":189,"column":6},"end":{"line":189,"column":11}},"108":{"start":{"line":192,"column":6},"end":{"line":192,"column":22}},"109":{"start":{"line":193,"column":6},"end":{"line":193,"column":11}},"110":{"start":{"line":202,"column":6},"end":{"line":202,"column":34}},"111":{"start":{"line":205,"column":2},"end":{"line":205,"column":18}},"112":{"start":{"line":206,"column":2},"end":{"line":206,"column":24}},"113":{"start":{"line":207,"column":2},"end":{"line":207,"column":24}},"114":{"start":{"line":210,"column":2},"end":{"line":210,"column":30}},"115":{"start":{"line":215,"column":0},"end":{"line":217,"column":1}},"116":{"start":{"line":216,"column":2},"end":{"line":216,"column":20}},"117":{"start":{"line":219,"column":0},"end":{"line":219,"column":35}},"118":{"start":{"line":220,"column":0},"end":{"line":220,"column":37}}},"fnMap":{"0":{"name":"Entry","decl":{"start":{"line":16,"column":9},"end":{"line":16,"column":14}},"loc":{"start":{"line":16,"column":42},"end":{"line":47,"column":1}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":42,"column":36},"end":{"line":42,"column":37}},"loc":{"start":{"line":42,"column":49},"end":{"line":44,"column":3}},"line":42},"2":{"name":"(anonymous_2)","decl":{"start":{"line":51,"column":24},"end":{"line":51,"column":25}},"loc":{"start":{"line":51,"column":37},"end":{"line":78,"column":1}},"line":51},"3":{"name":"(anonymous_3)","decl":{"start":{"line":80,"column":22},"end":{"line":80,"column":23}},"loc":{"start":{"line":80,"column":35},"end":{"line":84,"column":1}},"line":80},"4":{"name":"(anonymous_4)","decl":{"start":{"line":86,"column":24},"end":{"line":86,"column":25}},"loc":{"start":{"line":86,"column":36},"end":{"line":89,"column":1}},"line":86},"5":{"name":"(anonymous_5)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":1}},"line":91},"6":{"name":"(anonymous_6)","decl":{"start":{"line":100,"column":24},"end":{"line":100,"column":25}},"loc":{"start":{"line":100,"column":36},"end":{"line":139,"column":1}},"line":100},"7":{"name":"(anonymous_7)","decl":{"start":{"line":141,"column":28},"end":{"line":141,"column":29}},"loc":{"start":{"line":141,"column":40},"end":{"line":211,"column":1}},"line":141},"8":{"name":"(anonymous_8)","decl":{"start":{"line":158,"column":30},"end":{"line":158,"column":31}},"loc":{"start":{"line":158,"column":43},"end":{"line":162,"column":3}},"line":158},"9":{"name":"(anonymous_9)","decl":{"start":{"line":159,"column":27},"end":{"line":159,"column":28}},"loc":{"start":{"line":159,"column":40},"end":{"line":161,"column":5}},"line":159},"10":{"name":"(anonymous_10)","decl":{"start":{"line":165,"column":32},"end":{"line":165,"column":33}},"loc":{"start":{"line":165,"column":45},"end":{"line":169,"column":3}},"line":165},"11":{"name":"(anonymous_11)","decl":{"start":{"line":173,"column":39},"end":{"line":173,"column":40}},"loc":{"start":{"line":173,"column":52},"end":{"line":177,"column":3}},"line":173},"12":{"name":"(anonymous_12)","decl":{"start":{"line":215,"column":24},"end":{"line":215,"column":25}},"loc":{"start":{"line":215,"column":34},"end":{"line":217,"column":1}},"line":215}},"branchMap":{"0":{"loc":{"start":{"line":36,"column":19},"end":{"line":36,"column":33}},"type":"binary-expr","locations":[{"start":{"line":36,"column":19},"end":{"line":36,"column":27}},{"start":{"line":36,"column":31},"end":{"line":36,"column":33}}],"line":36},"1":{"loc":{"start":{"line":42,"column":14},"end":{"line":42,"column":26}},"type":"binary-expr","locations":[{"start":{"line":42,"column":14},"end":{"line":42,"column":20}},{"start":{"line":42,"column":24},"end":{"line":42,"column":26}}],"line":42},"2":{"loc":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"type":"if","locations":[{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},{"start":{"line":52,"column":2},"end":{"line":52,"column":65}}],"line":52},"3":{"loc":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"type":"if","locations":[{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},{"start":{"line":53,"column":2},"end":{"line":55,"column":3}}],"line":53},"4":{"loc":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},{"start":{"line":59,"column":2},"end":{"line":61,"column":3}}],"line":59},"5":{"loc":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"type":"if","locations":[{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},{"start":{"line":72,"column":2},"end":{"line":75,"column":3}}],"line":72},"6":{"loc":{"start":{"line":72,"column":6},"end":{"line":72,"column":28}},"type":"binary-expr","locations":[{"start":{"line":72,"column":6},"end":{"line":72,"column":18}},{"start":{"line":72,"column":22},"end":{"line":72,"column":28}}],"line":72},"7":{"loc":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"type":"if","locations":[{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},{"start":{"line":81,"column":2},"end":{"line":81,"column":22}}],"line":81},"8":{"loc":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"type":"if","locations":[{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},{"start":{"line":103,"column":2},"end":{"line":103,"column":58}}],"line":103},"9":{"loc":{"start":{"line":103,"column":6},"end":{"line":103,"column":50}},"type":"binary-expr","locations":[{"start":{"line":103,"column":6},"end":{"line":103,"column":18}},{"start":{"line":103,"column":22},"end":{"line":103,"column":35}},{"start":{"line":103,"column":39},"end":{"line":103,"column":50}}],"line":103},"10":{"loc":{"start":{"line":110,"column":9},"end":{"line":110,"column":54}},"type":"binary-expr","locations":[{"start":{"line":110,"column":9},"end":{"line":110,"column":37}},{"start":{"line":110,"column":41},"end":{"line":110,"column":54}}],"line":110},"11":{"loc":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"type":"if","locations":[{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},{"start":{"line":116,"column":2},"end":{"line":126,"column":3}}],"line":116},"12":{"loc":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"type":"if","locations":[{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},{"start":{"line":118,"column":4},"end":{"line":121,"column":5}}],"line":118},"13":{"loc":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},{"start":{"line":122,"column":4},"end":{"line":125,"column":5}}],"line":122},"14":{"loc":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"type":"if","locations":[{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},{"start":{"line":131,"column":2},"end":{"line":136,"column":3}}],"line":131},"15":{"loc":{"start":{"line":131,"column":6},"end":{"line":131,"column":45}},"type":"binary-expr","locations":[{"start":{"line":131,"column":6},"end":{"line":131,"column":26}},{"start":{"line":131,"column":30},"end":{"line":131,"column":45}}],"line":131},"16":{"loc":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"type":"if","locations":[{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},{"start":{"line":153,"column":4},"end":{"line":153,"column":54}}],"line":153},"17":{"loc":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"type":"if","locations":[{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},{"start":{"line":160,"column":6},"end":{"line":160,"column":54}}],"line":160},"18":{"loc":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"type":"if","locations":[{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},{"start":{"line":166,"column":4},"end":{"line":168,"column":5}}],"line":166},"19":{"loc":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"type":"if","locations":[{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},{"start":{"line":174,"column":4},"end":{"line":176,"column":5}}],"line":174},"20":{"loc":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"type":"switch","locations":[{"start":{"line":182,"column":4},"end":{"line":182,"column":19}},{"start":{"line":183,"column":4},"end":{"line":185,"column":11}},{"start":{"line":187,"column":4},"end":{"line":189,"column":11}},{"start":{"line":191,"column":4},"end":{"line":193,"column":11}},{"start":{"line":195,"column":4},"end":{"line":195,"column":16}},{"start":{"line":196,"column":4},"end":{"line":196,"column":24}},{"start":{"line":197,"column":4},"end":{"line":197,"column":27}},{"start":{"line":198,"column":4},"end":{"line":198,"column":23}},{"start":{"line":199,"column":4},"end":{"line":199,"column":21}},{"start":{"line":200,"column":4},"end":{"line":200,"column":16}},{"start":{"line":201,"column":4},"end":{"line":202,"column":34}}],"line":181}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":2,"14":2,"15":2,"16":2,"17":2,"18":2,"19":2,"20":2,"21":2,"22":2,"23":2,"24":2,"25":2,"26":2,"27":0,"28":2,"29":1,"30":1,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":1,"47":2,"48":0,"49":2,"50":2,"51":1,"52":2,"53":2,"54":1,"55":3,"56":3,"57":3,"58":3,"59":1,"60":5,"61":4,"62":1,"63":1,"64":0,"65":0,"66":1,"67":1,"68":1,"69":0,"70":0,"71":1,"72":1,"73":1,"74":1,"75":1,"76":0,"77":0,"78":0,"79":0,"80":1,"81":1,"82":2,"83":2,"84":2,"85":2,"86":2,"87":2,"88":2,"89":34,"90":34,"91":34,"92":32,"93":2,"94":4,"95":0,"96":0,"97":2,"98":4,"99":4,"100":2,"101":6,"102":2,"103":2,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":2,"111":2,"112":2,"113":2,"114":2,"115":1,"116":0,"117":1,"118":1},"f":{"0":2,"1":0,"2":0,"3":2,"4":2,"5":3,"6":5,"7":2,"8":4,"9":0,"10":4,"11":6,"12":0},"b":{"0":[2,2],"1":[2,2],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,2],"8":[4,1],"9":[5,3,2],"10":[1,0],"11":[1,0],"12":[0,1],"13":[1,0],"14":[0,1],"15":[1,0],"16":[32,2],"17":[0,0],"18":[4,0],"19":[2,4],"20":[0,0,0,0,0,0,0,0,2,2,2]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"2cc4f925db2a60e89bf0743124faec4e8996dfdb","contentHash":"245d5cb2b23d975dc5b9a0ed2553c93c587727d50a7961242f50cec333c04ba9"},"/Users/isaacs/dev/js/tar/lib/global-header-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/global-header-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":35}},"1":{"start":{"line":3,"column":27},"end":{"line":3,"column":65}},"2":{"start":{"line":4,"column":15},"end":{"line":4,"column":34}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":50}},"4":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"5":{"start":{"line":10,"column":4},"end":{"line":10,"column":40}},"6":{"start":{"line":12,"column":2},"end":{"line":12,"column":40}},"7":{"start":{"line":13,"column":2},"end":{"line":13,"column":23}}},"fnMap":{"0":{"name":"GlobalHeaderWriter","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":27}},"loc":{"start":{"line":8,"column":36},"end":{"line":14,"column":1}},"line":8}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"type":"if","locations":[{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},{"start":{"line":9,"column":2},"end":{"line":11,"column":3}}],"line":9}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3d0c8589f62a5c8ccec606d52d3abd98e5627d57","contentHash":"a2570ca840cf3e44d77e15af0aee52f7c145da39b76366006f3672b9708def3e"},"/Users/isaacs/dev/js/tar/lib/parse.js":{"path":"/Users/isaacs/dev/js/tar/lib/parse.js","statementMap":{"0":{"start":{"line":6,"column":0},"end":{"line":6,"column":37}},"1":{"start":{"line":8,"column":13},"end":{"line":8,"column":30}},"2":{"start":{"line":9,"column":13},"end":{"line":9,"column":26}},"3":{"start":{"line":10,"column":18},"end":{"line":10,"column":41}},"4":{"start":{"line":11,"column":10},"end":{"line":11,"column":30}},"5":{"start":{"line":12,"column":16},"end":{"line":12,"column":38}},"6":{"start":{"line":13,"column":12},"end":{"line":13,"column":33}},"7":{"start":{"line":14,"column":18},"end":{"line":14,"column":46}},"8":{"start":{"line":15,"column":21},"end":{"line":15,"column":52}},"9":{"start":{"line":16,"column":13},"end":{"line":16,"column":33}},"10":{"start":{"line":17,"column":15},"end":{"line":17,"column":34}},"11":{"start":{"line":18,"column":14},"end":{"line":18,"column":32}},"12":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"13":{"start":{"line":28,"column":11},"end":{"line":28,"column":15}},"14":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"15":{"start":{"line":29,"column":30},"end":{"line":29,"column":48}},"16":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"17":{"start":{"line":36,"column":2},"end":{"line":36,"column":20}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":20}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":35}},"20":{"start":{"line":39,"column":2},"end":{"line":39,"column":17}},"21":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"22":{"start":{"line":41,"column":2},"end":{"line":41,"column":20}},"23":{"start":{"line":43,"column":2},"end":{"line":45,"column":4}},"24":{"start":{"line":44,"column":4},"end":{"line":44,"column":23}},"25":{"start":{"line":47,"column":2},"end":{"line":49,"column":4}},"26":{"start":{"line":48,"column":4},"end":{"line":48,"column":18}},"27":{"start":{"line":51,"column":2},"end":{"line":53,"column":4}},"28":{"start":{"line":52,"column":4},"end":{"line":52,"column":19}},"29":{"start":{"line":55,"column":2},"end":{"line":57,"column":4}},"30":{"start":{"line":56,"column":4},"end":{"line":56,"column":20}},"31":{"start":{"line":63,"column":0},"end":{"line":67,"column":1}},"32":{"start":{"line":64,"column":11},"end":{"line":64,"column":15}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"34":{"start":{"line":65,"column":31},"end":{"line":65,"column":57}},"35":{"start":{"line":66,"column":2},"end":{"line":66,"column":16}},"36":{"start":{"line":72,"column":0},"end":{"line":83,"column":1}},"37":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"38":{"start":{"line":77,"column":4},"end":{"line":79,"column":5}},"39":{"start":{"line":77,"column":17},"end":{"line":77,"column":18}},"40":{"start":{"line":77,"column":24},"end":{"line":77,"column":32}},"41":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"42":{"start":{"line":78,"column":22},"end":{"line":78,"column":62}},"43":{"start":{"line":80,"column":4},"end":{"line":80,"column":10}},"44":{"start":{"line":82,"column":2},"end":{"line":82,"column":30}},"45":{"start":{"line":85,"column":0},"end":{"line":88,"column":1}},"46":{"start":{"line":86,"column":2},"end":{"line":86,"column":20}},"47":{"start":{"line":87,"column":2},"end":{"line":87,"column":28}},"48":{"start":{"line":94,"column":0},"end":{"line":94,"column":38}},"49":{"start":{"line":96,"column":0},"end":{"line":137,"column":1}},"50":{"start":{"line":97,"column":2},"end":{"line":97,"column":59}},"51":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"52":{"start":{"line":105,"column":16},"end":{"line":105,"column":27}},"53":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"54":{"start":{"line":106,"column":22},"end":{"line":106,"column":36}},"55":{"start":{"line":108,"column":6},"end":{"line":108,"column":34}},"56":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"57":{"start":{"line":109,"column":31},"end":{"line":109,"column":51}},"58":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"59":{"start":{"line":112,"column":6},"end":{"line":112,"column":17}},"60":{"start":{"line":113,"column":6},"end":{"line":113,"column":24}},"61":{"start":{"line":117,"column":15},"end":{"line":117,"column":19}},"62":{"start":{"line":118,"column":4},"end":{"line":120,"column":5}},"63":{"start":{"line":118,"column":17},"end":{"line":118,"column":18}},"64":{"start":{"line":119,"column":6},"end":{"line":119,"column":23}},"65":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"66":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"67":{"start":{"line":128,"column":8},"end":{"line":128,"column":26}},"68":{"start":{"line":129,"column":6},"end":{"line":129,"column":29}},"69":{"start":{"line":131,"column":6},"end":{"line":131,"column":30}},"70":{"start":{"line":132,"column":6},"end":{"line":132,"column":25}},"71":{"start":{"line":136,"column":2},"end":{"line":136,"column":22}},"72":{"start":{"line":140,"column":0},"end":{"line":285,"column":1}},"73":{"start":{"line":141,"column":15},"end":{"line":141,"column":31}},"74":{"start":{"line":142,"column":13},"end":{"line":142,"column":17}},"75":{"start":{"line":147,"column":13},"end":{"line":147,"column":18}},"76":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"77":{"start":{"line":150,"column":12},"end":{"line":150,"column":41}},"78":{"start":{"line":151,"column":4},"end":{"line":151,"column":21}},"79":{"start":{"line":152,"column":4},"end":{"line":152,"column":37}},"80":{"start":{"line":153,"column":4},"end":{"line":153,"column":37}},"81":{"start":{"line":154,"column":4},"end":{"line":154,"column":32}},"82":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"83":{"start":{"line":171,"column":6},"end":{"line":171,"column":23}},"84":{"start":{"line":172,"column":6},"end":{"line":172,"column":18}},"85":{"start":{"line":173,"column":6},"end":{"line":173,"column":11}},"86":{"start":{"line":177,"column":6},"end":{"line":177,"column":32}},"87":{"start":{"line":178,"column":6},"end":{"line":183,"column":7}},"88":{"start":{"line":179,"column":8},"end":{"line":179,"column":41}},"89":{"start":{"line":180,"column":8},"end":{"line":182,"column":10}},"90":{"start":{"line":181,"column":10},"end":{"line":181,"column":43}},"91":{"start":{"line":184,"column":6},"end":{"line":184,"column":33}},"92":{"start":{"line":185,"column":6},"end":{"line":185,"column":17}},"93":{"start":{"line":186,"column":6},"end":{"line":186,"column":11}},"94":{"start":{"line":191,"column":6},"end":{"line":191,"column":32}},"95":{"start":{"line":192,"column":6},"end":{"line":194,"column":7}},"96":{"start":{"line":193,"column":8},"end":{"line":193,"column":37}},"97":{"start":{"line":195,"column":6},"end":{"line":195,"column":27}},"98":{"start":{"line":196,"column":6},"end":{"line":196,"column":17}},"99":{"start":{"line":197,"column":6},"end":{"line":197,"column":11}},"100":{"start":{"line":201,"column":6},"end":{"line":201,"column":29}},"101":{"start":{"line":202,"column":6},"end":{"line":205,"column":7}},"102":{"start":{"line":203,"column":8},"end":{"line":203,"column":45}},"103":{"start":{"line":204,"column":8},"end":{"line":204,"column":44}},"104":{"start":{"line":206,"column":6},"end":{"line":206,"column":25}},"105":{"start":{"line":207,"column":6},"end":{"line":207,"column":17}},"106":{"start":{"line":208,"column":6},"end":{"line":208,"column":11}},"107":{"start":{"line":213,"column":6},"end":{"line":213,"column":29}},"108":{"start":{"line":214,"column":6},"end":{"line":217,"column":7}},"109":{"start":{"line":215,"column":8},"end":{"line":215,"column":45}},"110":{"start":{"line":216,"column":8},"end":{"line":216,"column":40}},"111":{"start":{"line":218,"column":6},"end":{"line":218,"column":21}},"112":{"start":{"line":219,"column":6},"end":{"line":219,"column":17}},"113":{"start":{"line":220,"column":6},"end":{"line":220,"column":11}},"114":{"start":{"line":226,"column":6},"end":{"line":226,"column":23}},"115":{"start":{"line":227,"column":6},"end":{"line":227,"column":25}},"116":{"start":{"line":228,"column":6},"end":{"line":228,"column":11}},"117":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"118":{"start":{"line":233,"column":4},"end":{"line":233,"column":28}},"119":{"start":{"line":235,"column":17},"end":{"line":235,"column":29}},"120":{"start":{"line":236,"column":19},"end":{"line":236,"column":33}},"121":{"start":{"line":240,"column":4},"end":{"line":240,"column":25}},"122":{"start":{"line":242,"column":2},"end":{"line":242,"column":49}},"123":{"start":{"line":243,"column":2},"end":{"line":243,"column":19}},"124":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"125":{"start":{"line":247,"column":4},"end":{"line":249,"column":6}},"126":{"start":{"line":248,"column":6},"end":{"line":248,"column":24}},"127":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"128":{"start":{"line":252,"column":13},"end":{"line":252,"column":35}},"129":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"130":{"start":{"line":255,"column":4},"end":{"line":255,"column":23}},"131":{"start":{"line":258,"column":2},"end":{"line":258,"column":21}},"132":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"133":{"start":{"line":261,"column":4},"end":{"line":261,"column":39}},"134":{"start":{"line":264,"column":11},"end":{"line":264,"column":15}},"135":{"start":{"line":266,"column":2},"end":{"line":268,"column":4}},"136":{"start":{"line":267,"column":4},"end":{"line":267,"column":14}},"137":{"start":{"line":270,"column":2},"end":{"line":272,"column":4}},"138":{"start":{"line":271,"column":4},"end":{"line":271,"column":15}},"139":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"140":{"start":{"line":275,"column":4},"end":{"line":275,"column":29}},"141":{"start":{"line":278,"column":2},"end":{"line":278,"column":22}},"142":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"143":{"start":{"line":282,"column":4},"end":{"line":282,"column":15}},"144":{"start":{"line":283,"column":4},"end":{"line":283,"column":22}}},"fnMap":{"0":{"name":"Parse","decl":{"start":{"line":27,"column":9},"end":{"line":27,"column":14}},"loc":{"start":{"line":27,"column":18},"end":{"line":58,"column":1}},"line":27},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":25},"end":{"line":43,"column":26}},"loc":{"start":{"line":43,"column":38},"end":{"line":45,"column":3}},"line":43},"2":{"name":"(anonymous_2)","decl":{"start":{"line":47,"column":24},"end":{"line":47,"column":25}},"loc":{"start":{"line":47,"column":37},"end":{"line":49,"column":3}},"line":47},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":23},"end":{"line":51,"column":24}},"loc":{"start":{"line":51,"column":35},"end":{"line":53,"column":3}},"line":51},"4":{"name":"(anonymous_4)","decl":{"start":{"line":55,"column":25},"end":{"line":55,"column":26}},"loc":{"start":{"line":55,"column":37},"end":{"line":57,"column":3}},"line":55},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":29},"end":{"line":63,"column":30}},"loc":{"start":{"line":63,"column":41},"end":{"line":67,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":72,"column":24},"end":{"line":72,"column":25}},"loc":{"start":{"line":72,"column":37},"end":{"line":83,"column":1}},"line":72},"7":{"name":"(anonymous_7)","decl":{"start":{"line":85,"column":22},"end":{"line":85,"column":23}},"loc":{"start":{"line":85,"column":35},"end":{"line":88,"column":1}},"line":85},"8":{"name":"(anonymous_8)","decl":{"start":{"line":94,"column":24},"end":{"line":94,"column":25}},"loc":{"start":{"line":94,"column":36},"end":{"line":94,"column":38}},"line":94},"9":{"name":"(anonymous_9)","decl":{"start":{"line":96,"column":27},"end":{"line":96,"column":28}},"loc":{"start":{"line":96,"column":40},"end":{"line":137,"column":1}},"line":96},"10":{"name":"(anonymous_10)","decl":{"start":{"line":140,"column":30},"end":{"line":140,"column":31}},"loc":{"start":{"line":140,"column":43},"end":{"line":285,"column":1}},"line":140},"11":{"name":"(anonymous_11)","decl":{"start":{"line":178,"column":14},"end":{"line":178,"column":15}},"loc":{"start":{"line":178,"column":26},"end":{"line":183,"column":7}},"line":178},"12":{"name":"(anonymous_12)","decl":{"start":{"line":180,"column":42},"end":{"line":180,"column":43}},"loc":{"start":{"line":180,"column":55},"end":{"line":182,"column":9}},"line":180},"13":{"name":"(anonymous_13)","decl":{"start":{"line":192,"column":14},"end":{"line":192,"column":15}},"loc":{"start":{"line":192,"column":26},"end":{"line":194,"column":7}},"line":192},"14":{"name":"(anonymous_14)","decl":{"start":{"line":202,"column":14},"end":{"line":202,"column":15}},"loc":{"start":{"line":202,"column":26},"end":{"line":205,"column":7}},"line":202},"15":{"name":"(anonymous_15)","decl":{"start":{"line":214,"column":14},"end":{"line":214,"column":15}},"loc":{"start":{"line":214,"column":26},"end":{"line":217,"column":7}},"line":214},"16":{"name":"(anonymous_16)","decl":{"start":{"line":247,"column":21},"end":{"line":247,"column":22}},"loc":{"start":{"line":247,"column":34},"end":{"line":249,"column":5}},"line":247},"17":{"name":"(anonymous_17)","decl":{"start":{"line":266,"column":20},"end":{"line":266,"column":21}},"loc":{"start":{"line":266,"column":32},"end":{"line":268,"column":3}},"line":266},"18":{"name":"(anonymous_18)","decl":{"start":{"line":270,"column":21},"end":{"line":270,"column":22}},"loc":{"start":{"line":270,"column":33},"end":{"line":272,"column":3}},"line":270}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},{"start":{"line":29,"column":2},"end":{"line":29,"column":48}}],"line":29},"1":{"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"type":"if","locations":[{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},{"start":{"line":65,"column":2},"end":{"line":65,"column":57}}],"line":65},"2":{"loc":{"start":{"line":65,"column":6},"end":{"line":65,"column":29}},"type":"binary-expr","locations":[{"start":{"line":65,"column":6},"end":{"line":65,"column":16}},{"start":{"line":65,"column":20},"end":{"line":65,"column":29}}],"line":65},"3":{"loc":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},{"start":{"line":73,"column":2},"end":{"line":81,"column":3}}],"line":73},"4":{"loc":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"type":"if","locations":[{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},{"start":{"line":78,"column":6},"end":{"line":78,"column":62}}],"line":78},"5":{"loc":{"start":{"line":97,"column":9},"end":{"line":97,"column":30}},"type":"binary-expr","locations":[{"start":{"line":97,"column":9},"end":{"line":97,"column":10}},{"start":{"line":97,"column":14},"end":{"line":97,"column":30}}],"line":97},"6":{"loc":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"type":"if","locations":[{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},{"start":{"line":104,"column":2},"end":{"line":134,"column":3}}],"line":104},"7":{"loc":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"type":"if","locations":[{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},{"start":{"line":106,"column":4},"end":{"line":110,"column":5}}],"line":106},"8":{"loc":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"type":"if","locations":[{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},{"start":{"line":109,"column":6},"end":{"line":109,"column":51}}],"line":109},"9":{"loc":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},{"start":{"line":111,"column":4},"end":{"line":114,"column":5}}],"line":111},"10":{"loc":{"start":{"line":118,"column":20},"end":{"line":118,"column":35}},"type":"binary-expr","locations":[{"start":{"line":118,"column":20},"end":{"line":118,"column":27}},{"start":{"line":118,"column":31},"end":{"line":118,"column":35}}],"line":118},"11":{"loc":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"type":"if","locations":[{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},{"start":{"line":126,"column":4},"end":{"line":133,"column":5}}],"line":126},"12":{"loc":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"type":"if","locations":[{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},{"start":{"line":127,"column":6},"end":{"line":128,"column":26}}],"line":127},"13":{"loc":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"type":"if","locations":[{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},{"start":{"line":149,"column":2},"end":{"line":155,"column":3}}],"line":149},"14":{"loc":{"start":{"line":149,"column":6},"end":{"line":149,"column":48}},"type":"binary-expr","locations":[{"start":{"line":149,"column":6},"end":{"line":149,"column":26}},{"start":{"line":149,"column":30},"end":{"line":149,"column":48}}],"line":149},"15":{"loc":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"type":"switch","locations":[{"start":{"line":158,"column":4},"end":{"line":158,"column":16}},{"start":{"line":159,"column":4},"end":{"line":159,"column":19}},{"start":{"line":160,"column":4},"end":{"line":160,"column":16}},{"start":{"line":161,"column":4},"end":{"line":161,"column":24}},{"start":{"line":162,"column":4},"end":{"line":162,"column":27}},{"start":{"line":163,"column":4},"end":{"line":163,"column":23}},{"start":{"line":164,"column":4},"end":{"line":164,"column":21}},{"start":{"line":165,"column":4},"end":{"line":165,"column":16}},{"start":{"line":166,"column":4},"end":{"line":166,"column":26}},{"start":{"line":167,"column":4},"end":{"line":173,"column":11}},{"start":{"line":175,"column":4},"end":{"line":186,"column":11}},{"start":{"line":188,"column":4},"end":{"line":188,"column":26}},{"start":{"line":189,"column":4},"end":{"line":197,"column":11}},{"start":{"line":199,"column":4},"end":{"line":208,"column":11}},{"start":{"line":210,"column":4},"end":{"line":210,"column":31}},{"start":{"line":211,"column":4},"end":{"line":220,"column":11}},{"start":{"line":222,"column":4},"end":{"line":228,"column":11}}],"line":157},"16":{"loc":{"start":{"line":179,"column":23},"end":{"line":179,"column":41}},"type":"binary-expr","locations":[{"start":{"line":179,"column":23},"end":{"line":179,"column":35}},{"start":{"line":179,"column":39},"end":{"line":179,"column":41}}],"line":179},"17":{"loc":{"start":{"line":203,"column":25},"end":{"line":203,"column":45}},"type":"binary-expr","locations":[{"start":{"line":203,"column":25},"end":{"line":203,"column":39}},{"start":{"line":203,"column":43},"end":{"line":203,"column":45}}],"line":203},"18":{"loc":{"start":{"line":215,"column":25},"end":{"line":215,"column":45}},"type":"binary-expr","locations":[{"start":{"line":215,"column":25},"end":{"line":215,"column":39}},{"start":{"line":215,"column":43},"end":{"line":215,"column":45}}],"line":215},"19":{"loc":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"type":"if","locations":[{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},{"start":{"line":232,"column":2},"end":{"line":241,"column":3}}],"line":232},"20":{"loc":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"type":"if","locations":[{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},{"start":{"line":246,"column":2},"end":{"line":250,"column":3}}],"line":246},"21":{"loc":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"type":"if","locations":[{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},{"start":{"line":252,"column":2},"end":{"line":252,"column":35}}],"line":252},"22":{"loc":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"type":"if","locations":[{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},{"start":{"line":254,"column":2},"end":{"line":256,"column":3}}],"line":254},"23":{"loc":{"start":{"line":254,"column":6},"end":{"line":254,"column":58}},"type":"binary-expr","locations":[{"start":{"line":254,"column":6},"end":{"line":254,"column":27}},{"start":{"line":254,"column":31},"end":{"line":254,"column":58}}],"line":254},"24":{"loc":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"type":"if","locations":[{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},{"start":{"line":260,"column":2},"end":{"line":262,"column":3}}],"line":260},"25":{"loc":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"type":"if","locations":[{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},{"start":{"line":274,"column":2},"end":{"line":276,"column":3}}],"line":274},"26":{"loc":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"type":"if","locations":[{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},{"start":{"line":281,"column":2},"end":{"line":284,"column":3}}],"line":281}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":0,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":0,"25":1,"26":4,"27":1,"28":1,"29":1,"30":1,"31":1,"32":0,"33":0,"34":0,"35":0,"36":1,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":4,"51":4,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":4,"62":4,"63":4,"64":1026,"65":4,"66":2,"67":1,"68":2,"69":2,"70":2,"71":4,"72":1,"73":2,"74":2,"75":2,"76":2,"77":0,"78":0,"79":0,"80":0,"81":0,"82":2,"83":2,"84":2,"85":2,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":2,"118":0,"119":2,"120":2,"121":2,"122":2,"123":2,"124":2,"125":2,"126":0,"127":2,"128":0,"129":2,"130":0,"131":2,"132":2,"133":0,"134":2,"135":2,"136":2,"137":2,"138":3,"139":2,"140":0,"141":2,"142":2,"143":2,"144":2},"f":{"0":1,"1":0,"2":4,"3":1,"4":1,"5":0,"6":1,"7":1,"8":4,"9":4,"10":2,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":2,"18":3},"b":{"0":[0,1],"1":[0,0],"2":[0,0],"3":[0,1],"4":[0,0],"5":[4,4],"6":[0,4],"7":[0,0],"8":[0,0],"9":[0,0],"10":[1030,1028],"11":[2,2],"12":[1,1],"13":[0,2],"14":[2,2],"15":[0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,2],"20":[2,0],"21":[0,2],"22":[0,2],"23":[2,0],"24":[0,2],"25":[0,2],"26":[2,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"4a8f51a3a12b59eb69694618530032a813fbf8cb","contentHash":"d347e73abcd3109143efee20401d9f0bfc6d68a4a6323bd4559ada44c741786a"},"/Users/isaacs/dev/js/tar/lib/buffer-entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/buffer-entry.js","statementMap":{"0":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"1":{"start":{"line":10,"column":15},"end":{"line":10,"column":34}},"2":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"3":{"start":{"line":14,"column":2},"end":{"line":14,"column":30}},"4":{"start":{"line":15,"column":2},"end":{"line":15,"column":44}},"5":{"start":{"line":16,"column":2},"end":{"line":16,"column":18}},"6":{"start":{"line":17,"column":2},"end":{"line":17,"column":16}},"7":{"start":{"line":18,"column":2},"end":{"line":20,"column":4}},"8":{"start":{"line":19,"column":4},"end":{"line":19,"column":52}},"9":{"start":{"line":23,"column":0},"end":{"line":23,"column":28}},"10":{"start":{"line":26,"column":0},"end":{"line":30,"column":1}},"11":{"start":{"line":27,"column":2},"end":{"line":27,"column":36}},"12":{"start":{"line":28,"column":2},"end":{"line":28,"column":26}},"13":{"start":{"line":29,"column":2},"end":{"line":29,"column":37}}},"fnMap":{"0":{"name":"BufferEntry","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":20}},"loc":{"start":{"line":13,"column":24},"end":{"line":21,"column":1}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":17},"end":{"line":18,"column":18}},"loc":{"start":{"line":18,"column":29},"end":{"line":20,"column":3}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":26,"column":30},"end":{"line":26,"column":31}},"loc":{"start":{"line":26,"column":43},"end":{"line":30,"column":1}},"line":26}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":1,"10":1,"11":0,"12":0,"13":0},"f":{"0":0,"1":0,"2":0},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"d8ad66df900443c9c9d8aefe5fc126a55ba268ec","contentHash":"25e5b3c51e476fcffac7affa191a0ed0f54d64d3d3b760e887bd45ba08fffa65"},"/Users/isaacs/dev/js/tar/lib/extended-header.js":{"path":"/Users/isaacs/dev/js/tar/lib/extended-header.js","statementMap":{"0":{"start":{"line":9,"column":0},"end":{"line":9,"column":31}},"1":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"2":{"start":{"line":12,"column":15},"end":{"line":12,"column":34}},"3":{"start":{"line":13,"column":10},"end":{"line":13,"column":30}},"4":{"start":{"line":14,"column":14},"end":{"line":14,"column":25}},"5":{"start":{"line":15,"column":15},"end":{"line":17,"column":42}},"6":{"start":{"line":20,"column":2},"end":{"line":20,"column":30}},"7":{"start":{"line":21,"column":2},"end":{"line":21,"column":30}},"8":{"start":{"line":22,"column":2},"end":{"line":22,"column":18}},"9":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"10":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"11":{"start":{"line":25,"column":2},"end":{"line":25,"column":20}},"12":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"13":{"start":{"line":27,"column":2},"end":{"line":27,"column":19}},"14":{"start":{"line":28,"column":2},"end":{"line":28,"column":19}},"15":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"16":{"start":{"line":30,"column":2},"end":{"line":30,"column":16}},"17":{"start":{"line":33,"column":0},"end":{"line":33,"column":31}},"18":{"start":{"line":34,"column":0},"end":{"line":34,"column":39}},"19":{"start":{"line":36,"column":8},"end":{"line":36,"column":9}},"20":{"start":{"line":37,"column":13},"end":{"line":37,"column":39}},"21":{"start":{"line":38,"column":11},"end":{"line":38,"column":28}},"22":{"start":{"line":39,"column":11},"end":{"line":39,"column":28}},"23":{"start":{"line":40,"column":11},"end":{"line":40,"column":28}},"24":{"start":{"line":41,"column":11},"end":{"line":41,"column":28}},"25":{"start":{"line":43,"column":0},"end":{"line":45,"column":2}},"26":{"start":{"line":44,"column":2},"end":{"line":44,"column":31}},"27":{"start":{"line":47,"column":0},"end":{"line":47,"column":16}},"28":{"start":{"line":50,"column":9},"end":{"line":50,"column":26}},"29":{"start":{"line":51,"column":9},"end":{"line":51,"column":26}},"30":{"start":{"line":52,"column":12},"end":{"line":52,"column":29}},"31":{"start":{"line":53,"column":8},"end":{"line":53,"column":25}},"32":{"start":{"line":54,"column":8},"end":{"line":54,"column":25}},"33":{"start":{"line":55,"column":8},"end":{"line":55,"column":25}},"34":{"start":{"line":56,"column":8},"end":{"line":56,"column":25}},"35":{"start":{"line":57,"column":12},"end":{"line":57,"column":29}},"36":{"start":{"line":58,"column":9},"end":{"line":58,"column":26}},"37":{"start":{"line":59,"column":9},"end":{"line":59,"column":27}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"39":{"start":{"line":62,"column":27},"end":{"line":62,"column":33}},"40":{"start":{"line":64,"column":2},"end":{"line":130,"column":3}},"41":{"start":{"line":64,"column":16},"end":{"line":64,"column":17}},"42":{"start":{"line":64,"column":23},"end":{"line":64,"column":31}},"43":{"start":{"line":69,"column":12},"end":{"line":69,"column":16}},"44":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"45":{"start":{"line":72,"column":6},"end":{"line":72,"column":53}},"46":{"start":{"line":73,"column":6},"end":{"line":73,"column":12}},"47":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"48":{"start":{"line":77,"column":16},"end":{"line":77,"column":22}},"49":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"50":{"start":{"line":82,"column":10},"end":{"line":82,"column":27}},"51":{"start":{"line":84,"column":10},"end":{"line":84,"column":73}},"52":{"start":{"line":85,"column":10},"end":{"line":85,"column":34}},"53":{"start":{"line":86,"column":10},"end":{"line":86,"column":18}},"54":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"55":{"start":{"line":89,"column":10},"end":{"line":89,"column":68}},"56":{"start":{"line":90,"column":10},"end":{"line":90,"column":16}},"57":{"start":{"line":92,"column":8},"end":{"line":92,"column":29}},"58":{"start":{"line":93,"column":8},"end":{"line":93,"column":16}},"59":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"60":{"start":{"line":98,"column":10},"end":{"line":98,"column":27}},"61":{"start":{"line":99,"column":10},"end":{"line":99,"column":57}},"62":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"63":{"start":{"line":100,"column":35},"end":{"line":100,"column":66}},"64":{"start":{"line":101,"column":10},"end":{"line":101,"column":33}},"65":{"start":{"line":102,"column":10},"end":{"line":102,"column":18}},"66":{"start":{"line":104,"column":8},"end":{"line":104,"column":28}},"67":{"start":{"line":105,"column":8},"end":{"line":105,"column":16}},"68":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"69":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"70":{"start":{"line":112,"column":12},"end":{"line":112,"column":55}},"71":{"start":{"line":113,"column":12},"end":{"line":113,"column":18}},"72":{"start":{"line":115,"column":20},"end":{"line":115,"column":55}},"73":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"74":{"start":{"line":117,"column":12},"end":{"line":117,"column":33}},"75":{"start":{"line":119,"column":10},"end":{"line":119,"column":38}},"76":{"start":{"line":121,"column":10},"end":{"line":121,"column":33}},"77":{"start":{"line":122,"column":10},"end":{"line":122,"column":28}},"78":{"start":{"line":123,"column":10},"end":{"line":123,"column":25}},"79":{"start":{"line":124,"column":10},"end":{"line":124,"column":29}},"80":{"start":{"line":125,"column":10},"end":{"line":125,"column":18}},"81":{"start":{"line":127,"column":8},"end":{"line":127,"column":28}},"82":{"start":{"line":128,"column":8},"end":{"line":128,"column":16}},"83":{"start":{"line":134,"column":2},"end":{"line":136,"column":42}},"84":{"start":{"line":138,"column":2},"end":{"line":138,"column":15}},"85":{"start":{"line":139,"column":2},"end":{"line":139,"column":16}}},"fnMap":{"0":{"name":"ExtendedHeader","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":23}},"loc":{"start":{"line":19,"column":27},"end":{"line":31,"column":1}},"line":19},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":28},"end":{"line":43,"column":29}},"loc":{"start":{"line":43,"column":41},"end":{"line":45,"column":1}},"line":43},"2":{"name":"parse","decl":{"start":{"line":61,"column":9},"end":{"line":61,"column":14}},"loc":{"start":{"line":61,"column":19},"end":{"line":131,"column":1}},"line":61},"3":{"name":"error","decl":{"start":{"line":133,"column":9},"end":{"line":133,"column":14}},"loc":{"start":{"line":133,"column":25},"end":{"line":140,"column":1}},"line":133}},"branchMap":{"0":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},{"start":{"line":62,"column":2},"end":{"line":62,"column":33}}],"line":62},"1":{"loc":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},{"start":{"line":71,"column":4},"end":{"line":74,"column":5}}],"line":71},"2":{"loc":{"start":{"line":71,"column":8},"end":{"line":71,"column":54}},"type":"binary-expr","locations":[{"start":{"line":71,"column":8},"end":{"line":71,"column":23}},{"start":{"line":71,"column":27},"end":{"line":71,"column":54}}],"line":71},"3":{"loc":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"type":"switch","locations":[{"start":{"line":77,"column":6},"end":{"line":77,"column":22}},{"start":{"line":79,"column":6},"end":{"line":93,"column":16}},{"start":{"line":95,"column":6},"end":{"line":105,"column":16}},{"start":{"line":107,"column":6},"end":{"line":128,"column":16}}],"line":76},"4":{"loc":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},{"start":{"line":81,"column":8},"end":{"line":87,"column":9}}],"line":81},"5":{"loc":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},{"start":{"line":88,"column":8},"end":{"line":91,"column":9}}],"line":88},"6":{"loc":{"start":{"line":88,"column":12},"end":{"line":88,"column":28}},"type":"binary-expr","locations":[{"start":{"line":88,"column":12},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":28}}],"line":88},"7":{"loc":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"type":"if","locations":[{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},{"start":{"line":97,"column":8},"end":{"line":103,"column":9}}],"line":97},"8":{"loc":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"type":"if","locations":[{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},{"start":{"line":100,"column":10},"end":{"line":100,"column":66}}],"line":100},"9":{"loc":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},{"start":{"line":109,"column":8},"end":{"line":126,"column":9}}],"line":109},"10":{"loc":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"type":"if","locations":[{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},{"start":{"line":111,"column":10},"end":{"line":114,"column":11}}],"line":111},"11":{"loc":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"type":"if","locations":[{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},{"start":{"line":116,"column":10},"end":{"line":118,"column":11}}],"line":116}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":4,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0},"f":{"0":0,"1":4,"2":0,"3":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"77cb382c69a46833a08275dbc55bf34db0dcd796","contentHash":"78a790af1726a774425fb478f1423068fe64414b747d89b597baf45139e7ae3d"},"/Users/isaacs/dev/js/tar/lib/extract.js":{"path":"/Users/isaacs/dev/js/tar/lib/extract.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"1":{"start":{"line":5,"column":10},"end":{"line":5,"column":30}},"2":{"start":{"line":6,"column":14},"end":{"line":6,"column":32}},"3":{"start":{"line":7,"column":15},"end":{"line":7,"column":34}},"4":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"6":{"start":{"line":11,"column":34},"end":{"line":11,"column":58}},"7":{"start":{"line":12,"column":2},"end":{"line":12,"column":23}},"8":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"9":{"start":{"line":15,"column":4},"end":{"line":15,"column":25}},"10":{"start":{"line":19,"column":2},"end":{"line":19,"column":59}},"11":{"start":{"line":20,"column":2},"end":{"line":20,"column":25}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":26}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"15":{"start":{"line":25,"column":38},"end":{"line":25,"column":52}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":34}},"17":{"start":{"line":29,"column":2},"end":{"line":29,"column":14}},"18":{"start":{"line":30,"column":11},"end":{"line":30,"column":15}},"19":{"start":{"line":35,"column":2},"end":{"line":60,"column":4}},"20":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"21":{"start":{"line":39,"column":14},"end":{"line":39,"column":63}},"22":{"start":{"line":40,"column":6},"end":{"line":40,"column":39}},"23":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"24":{"start":{"line":42,"column":17},"end":{"line":42,"column":70}},"25":{"start":{"line":43,"column":8},"end":{"line":43,"column":50}},"26":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"27":{"start":{"line":47,"column":6},"end":{"line":48,"column":66}},"28":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"29":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"30":{"start":{"line":53,"column":21},"end":{"line":53,"column":41}},"31":{"start":{"line":54,"column":19},"end":{"line":54,"column":56}},"32":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"33":{"start":{"line":56,"column":8},"end":{"line":56,"column":65}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":54}},"35":{"start":{"line":62,"column":2},"end":{"line":65,"column":4}},"36":{"start":{"line":63,"column":4},"end":{"line":63,"column":36}},"37":{"start":{"line":64,"column":4},"end":{"line":64,"column":15}},"38":{"start":{"line":67,"column":2},"end":{"line":69,"column":4}},"39":{"start":{"line":68,"column":4},"end":{"line":68,"column":25}},"40":{"start":{"line":71,"column":2},"end":{"line":73,"column":4}},"41":{"start":{"line":72,"column":4},"end":{"line":72,"column":20}},"42":{"start":{"line":79,"column":2},"end":{"line":84,"column":4}},"43":{"start":{"line":81,"column":4},"end":{"line":81,"column":21}},"44":{"start":{"line":82,"column":4},"end":{"line":82,"column":18}},"45":{"start":{"line":83,"column":4},"end":{"line":83,"column":20}},"46":{"start":{"line":87,"column":0},"end":{"line":87,"column":28}},"47":{"start":{"line":89,"column":0},"end":{"line":94,"column":1}},"48":{"start":{"line":90,"column":11},"end":{"line":90,"column":15}},"49":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"50":{"start":{"line":91,"column":31},"end":{"line":91,"column":57}},"51":{"start":{"line":92,"column":2},"end":{"line":92,"column":15}}},"fnMap":{"0":{"name":"Extract","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":16}},"loc":{"start":{"line":10,"column":24},"end":{"line":85,"column":1}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":35,"column":17},"end":{"line":35,"column":18}},"loc":{"start":{"line":35,"column":34},"end":{"line":60,"column":3}},"line":35},"2":{"name":"(anonymous_2)","decl":{"start":{"line":62,"column":24},"end":{"line":62,"column":25}},"loc":{"start":{"line":62,"column":36},"end":{"line":65,"column":3}},"line":62},"3":{"name":"(anonymous_3)","decl":{"start":{"line":67,"column":24},"end":{"line":67,"column":25}},"loc":{"start":{"line":67,"column":38},"end":{"line":69,"column":3}},"line":67},"4":{"name":"(anonymous_4)","decl":{"start":{"line":71,"column":24},"end":{"line":71,"column":25}},"loc":{"start":{"line":71,"column":35},"end":{"line":73,"column":3}},"line":71},"5":{"name":"(anonymous_5)","decl":{"start":{"line":79,"column":24},"end":{"line":79,"column":25}},"loc":{"start":{"line":79,"column":36},"end":{"line":84,"column":3}},"line":79},"6":{"name":"(anonymous_6)","decl":{"start":{"line":89,"column":31},"end":{"line":89,"column":32}},"loc":{"start":{"line":89,"column":43},"end":{"line":94,"column":1}},"line":89}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},{"start":{"line":11,"column":2},"end":{"line":11,"column":58}}],"line":11},"1":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"2":{"loc":{"start":{"line":19,"column":14},"end":{"line":19,"column":59}},"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":23}},{"start":{"line":19,"column":27},"end":{"line":19,"column":59}}],"line":19},"3":{"loc":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"type":"if","locations":[{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},{"start":{"line":25,"column":2},"end":{"line":25,"column":52}}],"line":25},"4":{"loc":{"start":{"line":25,"column":6},"end":{"line":25,"column":36}},"type":"binary-expr","locations":[{"start":{"line":25,"column":6},"end":{"line":25,"column":17}},{"start":{"line":25,"column":21},"end":{"line":25,"column":36}}],"line":25},"5":{"loc":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},{"start":{"line":38,"column":4},"end":{"line":45,"column":5}}],"line":38},"6":{"loc":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"type":"if","locations":[{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},{"start":{"line":41,"column":6},"end":{"line":44,"column":7}}],"line":41},"7":{"loc":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},{"start":{"line":46,"column":4},"end":{"line":49,"column":5}}],"line":46},"8":{"loc":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},{"start":{"line":51,"column":4},"end":{"line":59,"column":5}}],"line":51},"9":{"loc":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"type":"binary-expr","locations":[{"start":{"line":52,"column":15},"end":{"line":52,"column":39}},{"start":{"line":52,"column":43},"end":{"line":52,"column":45}}],"line":52},"10":{"loc":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"type":"if","locations":[{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},{"start":{"line":55,"column":6},"end":{"line":57,"column":7}}],"line":55},"11":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},{"start":{"line":91,"column":2},"end":{"line":91,"column":57}}],"line":91},"12":{"loc":{"start":{"line":91,"column":6},"end":{"line":91,"column":29}},"type":"binary-expr","locations":[{"start":{"line":91,"column":6},"end":{"line":91,"column":16}},{"start":{"line":91,"column":20},"end":{"line":91,"column":29}}],"line":91}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":2,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":2,"21":0,"22":0,"23":0,"24":0,"25":0,"26":2,"27":0,"28":2,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":0,"42":1,"43":0,"44":0,"45":0,"46":1,"47":1,"48":1,"49":1,"50":0,"51":1},"f":{"0":2,"1":2,"2":1,"3":1,"4":0,"5":0,"6":1},"b":{"0":[1,1],"1":[1,0],"2":[1,0],"3":[1,0],"4":[1,0],"5":[0,2],"6":[0,0],"7":[0,2],"8":[0,2],"9":[0,0],"10":[0,0],"11":[0,1],"12":[1,1]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3fb9f60facc409fe944dc36bd2e14fc6153e403d","contentHash":"3d9485ca58c6c768b022a39d276296b53647ccf39986885459406e933921c962"}} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/fb518800-240c-42ff-811f-79e92708d9db.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/fb518800-240c-42ff-811f-79e92708d9db.json
deleted file mode 100644
index 646757b..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/fb518800-240c-42ff-811f-79e92708d9db.json
+++ /dev/null
@@ -1 +0,0 @@
-{"/Users/isaacs/dev/js/tar/lib/pack.js":{"path":"/Users/isaacs/dev/js/tar/lib/pack.js","statementMap":{"0":{"start":{"line":4,"column":0},"end":{"line":4,"column":21}},"1":{"start":{"line":6,"column":18},"end":{"line":6,"column":46}},"2":{"start":{"line":7,"column":13},"end":{"line":7,"column":37}},"3":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"4":{"start":{"line":9,"column":15},"end":{"line":9,"column":34}},"5":{"start":{"line":10,"column":25},"end":{"line":10,"column":61}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":40}},"7":{"start":{"line":12,"column":10},"end":{"line":12,"column":25}},"8":{"start":{"line":14,"column":0},"end":{"line":14,"column":41}},"9":{"start":{"line":14,"column":13},"end":{"line":14,"column":14}},"10":{"start":{"line":14,"column":31},"end":{"line":14,"column":41}},"11":{"start":{"line":16,"column":0},"end":{"line":16,"column":22}},"12":{"start":{"line":20,"column":11},"end":{"line":20,"column":15}},"13":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"14":{"start":{"line":21,"column":29},"end":{"line":21,"column":51}},"15":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"16":{"start":{"line":23,"column":13},"end":{"line":23,"column":52}},"17":{"start":{"line":24,"column":7},"end":{"line":24,"column":32}},"18":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"19":{"start":{"line":28,"column":2},"end":{"line":28,"column":20}},"20":{"start":{"line":29,"column":2},"end":{"line":29,"column":20}},"21":{"start":{"line":30,"column":2},"end":{"line":30,"column":17}},"22":{"start":{"line":32,"column":2},"end":{"line":32,"column":25}},"23":{"start":{"line":33,"column":2},"end":{"line":33,"column":24}},"24":{"start":{"line":35,"column":2},"end":{"line":35,"column":21}},"25":{"start":{"line":36,"column":2},"end":{"line":43,"column":4}},"26":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"27":{"start":{"line":37,"column":35},"end":{"line":37,"column":41}},"28":{"start":{"line":38,"column":4},"end":{"line":38,"column":22}},"29":{"start":{"line":39,"column":4},"end":{"line":41,"column":6}},"30":{"start":{"line":40,"column":6},"end":{"line":40,"column":25}},"31":{"start":{"line":42,"column":4},"end":{"line":42,"column":15}},"32":{"start":{"line":46,"column":0},"end":{"line":57,"column":1}},"33":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"34":{"start":{"line":48,"column":23},"end":{"line":48,"column":29}},"35":{"start":{"line":49,"column":2},"end":{"line":49,"column":24}},"36":{"start":{"line":51,"column":11},"end":{"line":51,"column":15}},"37":{"start":{"line":52,"column":2},"end":{"line":56,"column":10}},"38":{"start":{"line":54,"column":6},"end":{"line":54,"column":24}},"39":{"start":{"line":59,"column":0},"end":{"line":69,"column":1}},"40":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"41":{"start":{"line":60,"column":40},"end":{"line":60,"column":68}},"42":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"43":{"start":{"line":62,"column":19},"end":{"line":62,"column":72}},"44":{"start":{"line":64,"column":2},"end":{"line":64,"column":17}},"45":{"start":{"line":65,"column":2},"end":{"line":65,"column":27}},"46":{"start":{"line":66,"column":2},"end":{"line":66,"column":17}},"47":{"start":{"line":67,"column":2},"end":{"line":67,"column":43}},"48":{"start":{"line":68,"column":2},"end":{"line":68,"column":25}},"49":{"start":{"line":71,"column":0},"end":{"line":75,"column":1}},"50":{"start":{"line":72,"column":2},"end":{"line":72,"column":21}},"51":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"52":{"start":{"line":73,"column":26},"end":{"line":73,"column":52}},"53":{"start":{"line":74,"column":2},"end":{"line":74,"column":20}},"54":{"start":{"line":77,"column":0},"end":{"line":82,"column":1}},"55":{"start":{"line":78,"column":2},"end":{"line":78,"column":22}},"56":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"57":{"start":{"line":79,"column":26},"end":{"line":79,"column":53}},"58":{"start":{"line":80,"column":2},"end":{"line":80,"column":21}},"59":{"start":{"line":81,"column":2},"end":{"line":81,"column":17}},"60":{"start":{"line":84,"column":0},"end":{"line":88,"column":1}},"61":{"start":{"line":85,"column":2},"end":{"line":85,"column":20}},"62":{"start":{"line":86,"column":2},"end":{"line":86,"column":24}},"63":{"start":{"line":87,"column":2},"end":{"line":87,"column":17}},"64":{"start":{"line":90,"column":0},"end":{"line":233,"column":1}},"65":{"start":{"line":91,"column":11},"end":{"line":91,"column":15}},"66":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"67":{"start":{"line":93,"column":4},"end":{"line":93,"column":10}},"68":{"start":{"line":96,"column":14},"end":{"line":96,"column":32}},"69":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"70":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"71":{"start":{"line":100,"column":6},"end":{"line":100,"column":22}},"72":{"start":{"line":102,"column":4},"end":{"line":102,"column":10}},"73":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"74":{"start":{"line":107,"column":4},"end":{"line":107,"column":29}},"75":{"start":{"line":108,"column":4},"end":{"line":111,"column":6}},"76":{"start":{"line":110,"column":6},"end":{"line":110,"column":19}},"77":{"start":{"line":112,"column":4},"end":{"line":112,"column":10}},"78":{"start":{"line":115,"column":2},"end":{"line":115,"column":23}},"79":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"80":{"start":{"line":119,"column":4},"end":{"line":119,"column":24}},"81":{"start":{"line":120,"column":4},"end":{"line":120,"column":24}},"82":{"start":{"line":121,"column":4},"end":{"line":121,"column":18}},"83":{"start":{"line":122,"column":4},"end":{"line":122,"column":20}},"84":{"start":{"line":123,"column":4},"end":{"line":123,"column":10}},"85":{"start":{"line":134,"column":13},"end":{"line":134,"column":53}},"86":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"87":{"start":{"line":137,"column":4},"end":{"line":137,"column":27}},"88":{"start":{"line":140,"column":15},"end":{"line":140,"column":17}},"89":{"start":{"line":142,"column":2},"end":{"line":144,"column":4}},"90":{"start":{"line":143,"column":4},"end":{"line":143,"column":30}},"91":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"92":{"start":{"line":146,"column":25},"end":{"line":146,"column":52}},"93":{"start":{"line":148,"column":2},"end":{"line":148,"column":53}},"94":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"95":{"start":{"line":152,"column":4},"end":{"line":152,"column":49}},"96":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"97":{"start":{"line":156,"column":4},"end":{"line":156,"column":29}},"98":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"99":{"start":{"line":161,"column":6},"end":{"line":161,"column":12}},"100":{"start":{"line":164,"column":6},"end":{"line":164,"column":24}},"101":{"start":{"line":165,"column":6},"end":{"line":165,"column":21}},"102":{"start":{"line":166,"column":6},"end":{"line":166,"column":11}},"103":{"start":{"line":169,"column":15},"end":{"line":169,"column":69}},"104":{"start":{"line":170,"column":6},"end":{"line":170,"column":54}},"105":{"start":{"line":171,"column":6},"end":{"line":171,"column":21}},"106":{"start":{"line":172,"column":6},"end":{"line":172,"column":11}},"107":{"start":{"line":175,"column":15},"end":{"line":175,"column":69}},"108":{"start":{"line":176,"column":6},"end":{"line":176,"column":74}},"109":{"start":{"line":177,"column":6},"end":{"line":177,"column":21}},"110":{"start":{"line":178,"column":6},"end":{"line":178,"column":11}},"111":{"start":{"line":187,"column":15},"end":{"line":187,"column":53}},"112":{"start":{"line":189,"column":2},"end":{"line":189,"column":20}},"113":{"start":{"line":195,"column":2},"end":{"line":197,"column":4}},"114":{"start":{"line":196,"column":4},"end":{"line":196,"column":22}},"115":{"start":{"line":199,"column":2},"end":{"line":205,"column":4}},"116":{"start":{"line":200,"column":4},"end":{"line":202,"column":5}},"117":{"start":{"line":201,"column":6},"end":{"line":201,"column":50}},"118":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"119":{"start":{"line":204,"column":33},"end":{"line":204,"column":44}},"120":{"start":{"line":206,"column":2},"end":{"line":206,"column":31}},"121":{"start":{"line":208,"column":14},"end":{"line":208,"column":19}},"122":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"123":{"start":{"line":210,"column":15},"end":{"line":210,"column":21}},"124":{"start":{"line":211,"column":4},"end":{"line":211,"column":16}},"125":{"start":{"line":215,"column":4},"end":{"line":215,"column":27}},"126":{"start":{"line":216,"column":4},"end":{"line":216,"column":26}},"127":{"start":{"line":217,"column":4},"end":{"line":217,"column":17}},"128":{"start":{"line":220,"column":2},"end":{"line":223,"column":4}},"129":{"start":{"line":222,"column":4},"end":{"line":222,"column":24}},"130":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"131":{"start":{"line":229,"column":4},"end":{"line":229,"column":21}},"132":{"start":{"line":232,"column":2},"end":{"line":232,"column":20}},"133":{"start":{"line":235,"column":0},"end":{"line":235,"column":39}},"134":{"start":{"line":236,"column":0},"end":{"line":236,"column":37}}},"fnMap":{"0":{"name":"Pack","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":13}},"loc":{"start":{"line":18,"column":22},"end":{"line":44,"column":1}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":36,"column":16},"end":{"line":36,"column":17}},"loc":{"start":{"line":36,"column":31},"end":{"line":43,"column":3}},"line":36},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":18},"end":{"line":39,"column":19}},"loc":{"start":{"line":39,"column":30},"end":{"line":41,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":46,"column":27},"end":{"line":46,"column":28}},"loc":{"start":{"line":46,"column":44},"end":{"line":57,"column":1}},"line":46},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":29},"end":{"line":55,"column":5}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":59,"column":21},"end":{"line":59,"column":22}},"loc":{"start":{"line":59,"column":39},"end":{"line":69,"column":1}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":71,"column":23},"end":{"line":71,"column":24}},"loc":{"start":{"line":71,"column":35},"end":{"line":75,"column":1}},"line":71},"7":{"name":"(anonymous_7)","decl":{"start":{"line":77,"column":24},"end":{"line":77,"column":25}},"loc":{"start":{"line":77,"column":36},"end":{"line":82,"column":1}},"line":77},"8":{"name":"(anonymous_8)","decl":{"start":{"line":84,"column":21},"end":{"line":84,"column":22}},"loc":{"start":{"line":84,"column":33},"end":{"line":88,"column":1}},"line":84},"9":{"name":"(anonymous_9)","decl":{"start":{"line":90,"column":26},"end":{"line":90,"column":27}},"loc":{"start":{"line":90,"column":38},"end":{"line":233,"column":1}},"line":90},"10":{"name":"(anonymous_10)","decl":{"start":{"line":108,"column":22},"end":{"line":108,"column":23}},"loc":{"start":{"line":108,"column":34},"end":{"line":111,"column":5}},"line":108},"11":{"name":"(anonymous_11)","decl":{"start":{"line":142,"column":41},"end":{"line":142,"column":42}},"loc":{"start":{"line":142,"column":54},"end":{"line":144,"column":3}},"line":142},"12":{"name":"(anonymous_12)","decl":{"start":{"line":195,"column":20},"end":{"line":195,"column":21}},"loc":{"start":{"line":195,"column":33},"end":{"line":197,"column":3}},"line":195},"13":{"name":"(anonymous_13)","decl":{"start":{"line":199,"column":22},"end":{"line":199,"column":23}},"loc":{"start":{"line":199,"column":34},"end":{"line":205,"column":3}},"line":199},"14":{"name":"(anonymous_14)","decl":{"start":{"line":200,"column":30},"end":{"line":200,"column":31}},"loc":{"start":{"line":200,"column":42},"end":{"line":202,"column":5}},"line":200},"15":{"name":"nextEntry","decl":{"start":{"line":209,"column":11},"end":{"line":209,"column":20}},"loc":{"start":{"line":209,"column":24},"end":{"line":218,"column":3}},"line":209},"16":{"name":"(anonymous_16)","decl":{"start":{"line":220,"column":21},"end":{"line":220,"column":22}},"loc":{"start":{"line":220,"column":35},"end":{"line":223,"column":3}},"line":220},"17":{"name":"(anonymous_17)","decl":{"start":{"line":235,"column":25},"end":{"line":235,"column":26}},"loc":{"start":{"line":235,"column":37},"end":{"line":235,"column":39}},"line":235},"18":{"name":"(anonymous_18)","decl":{"start":{"line":236,"column":23},"end":{"line":236,"column":24}},"loc":{"start":{"line":236,"column":35},"end":{"line":236,"column":37}},"line":236}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"type":"if","locations":[{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},{"start":{"line":21,"column":2},"end":{"line":21,"column":51}}],"line":21},"1":{"loc":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"type":"if","locations":[{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},{"start":{"line":23,"column":2},"end":{"line":24,"column":32}}],"line":23},"2":{"loc":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},{"start":{"line":37,"column":4},"end":{"line":37,"column":41}}],"line":37},"3":{"loc":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"type":"if","locations":[{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},{"start":{"line":48,"column":2},"end":{"line":48,"column":29}}],"line":48},"4":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},{"start":{"line":60,"column":2},"end":{"line":60,"column":68}}],"line":60},"5":{"loc":{"start":{"line":60,"column":6},"end":{"line":60,"column":38}},"type":"binary-expr","locations":[{"start":{"line":60,"column":6},"end":{"line":60,"column":18}},{"start":{"line":60,"column":22},"end":{"line":60,"column":38}}],"line":60},"6":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},{"start":{"line":62,"column":2},"end":{"line":62,"column":72}}],"line":62},"7":{"loc":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},{"start":{"line":73,"column":2},"end":{"line":73,"column":52}}],"line":73},"8":{"loc":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"type":"if","locations":[{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},{"start":{"line":79,"column":2},"end":{"line":79,"column":53}}],"line":79},"9":{"loc":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"type":"if","locations":[{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},{"start":{"line":92,"column":2},"end":{"line":94,"column":3}}],"line":92},"10":{"loc":{"start":{"line":92,"column":6},"end":{"line":92,"column":34}},"type":"binary-expr","locations":[{"start":{"line":92,"column":6},"end":{"line":92,"column":16}},{"start":{"line":92,"column":20},"end":{"line":92,"column":34}}],"line":92},"11":{"loc":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},{"start":{"line":98,"column":2},"end":{"line":103,"column":3}}],"line":98},"12":{"loc":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},{"start":{"line":99,"column":4},"end":{"line":101,"column":5}}],"line":99},"13":{"loc":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"type":"if","locations":[{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},{"start":{"line":105,"column":2},"end":{"line":113,"column":3}}],"line":105},"14":{"loc":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"type":"if","locations":[{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},{"start":{"line":117,"column":2},"end":{"line":124,"column":3}}],"line":117},"15":{"loc":{"start":{"line":134,"column":27},"end":{"line":134,"column":46}},"type":"binary-expr","locations":[{"start":{"line":134,"column":27},"end":{"line":134,"column":37}},{"start":{"line":134,"column":41},"end":{"line":134,"column":46}}],"line":134},"16":{"loc":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"type":"if","locations":[{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},{"start":{"line":135,"column":2},"end":{"line":138,"column":3}}],"line":135},"17":{"loc":{"start":{"line":135,"column":6},"end":{"line":135,"column":72}},"type":"binary-expr","locations":[{"start":{"line":135,"column":6},"end":{"line":135,"column":16}},{"start":{"line":135,"column":20},"end":{"line":135,"column":39}},{"start":{"line":135,"column":43},"end":{"line":135,"column":53}},{"start":{"line":135,"column":57},"end":{"line":135,"column":72}}],"line":135},"18":{"loc":{"start":{"line":142,"column":14},"end":{"line":142,"column":31}},"type":"binary-expr","locations":[{"start":{"line":142,"column":14},"end":{"line":142,"column":25}},{"start":{"line":142,"column":29},"end":{"line":142,"column":31}}],"line":142},"19":{"loc":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"type":"if","locations":[{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},{"start":{"line":146,"column":2},"end":{"line":146,"column":52}}],"line":146},"20":{"loc":{"start":{"line":148,"column":36},"end":{"line":148,"column":52}},"type":"binary-expr","locations":[{"start":{"line":148,"column":36},"end":{"line":148,"column":46}},{"start":{"line":148,"column":50},"end":{"line":148,"column":52}}],"line":148},"21":{"loc":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"type":"if","locations":[{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},{"start":{"line":151,"column":2},"end":{"line":153,"column":3}}],"line":151},"22":{"loc":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"type":"if","locations":[{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},{"start":{"line":155,"column":2},"end":{"line":156,"column":29}}],"line":155},"23":{"loc":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"type":"switch","locations":[{"start":{"line":160,"column":4},"end":{"line":161,"column":12}},{"start":{"line":163,"column":4},"end":{"line":166,"column":11}},{"start":{"line":168,"column":4},"end":{"line":172,"column":11}},{"start":{"line":174,"column":4},"end":{"line":178,"column":11}}],"line":158},"24":{"loc":{"start":{"line":170,"column":24},"end":{"line":170,"column":54}},"type":"binary-expr","locations":[{"start":{"line":170,"column":24},"end":{"line":170,"column":47}},{"start":{"line":170,"column":51},"end":{"line":170,"column":54}}],"line":170},"25":{"loc":{"start":{"line":176,"column":24},"end":{"line":176,"column":74}},"type":"binary-expr","locations":[{"start":{"line":176,"column":24},"end":{"line":176,"column":67}},{"start":{"line":176,"column":71},"end":{"line":176,"column":74}}],"line":176},"26":{"loc":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"type":"if","locations":[{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},{"start":{"line":204,"column":4},"end":{"line":204,"column":44}}],"line":204},"27":{"loc":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"type":"if","locations":[{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},{"start":{"line":210,"column":4},"end":{"line":210,"column":21}}],"line":210},"28":{"loc":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"type":"if","locations":[{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},{"start":{"line":227,"column":2},"end":{"line":230,"column":3}}],"line":227}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":512,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":1,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":0,"52":0,"53":0,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":0,"63":0,"64":1,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":1,"134":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0,0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0,0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"8beb16ccde52e484aa1dd87f5ece33d696c808ab","contentHash":"7bb2b7ebe1111c0deefbf9a61d17bf9d2dbe951adb585db96f9d89663ce5909d"},"/Users/isaacs/dev/js/tar/lib/entry-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":28}},"1":{"start":{"line":3,"column":10},"end":{"line":3,"column":30}},"2":{"start":{"line":4,"column":16},"end":{"line":4,"column":38}},"3":{"start":{"line":5,"column":12},"end":{"line":5,"column":33}},"4":{"start":{"line":6,"column":15},"end":{"line":6,"column":34}},"5":{"start":{"line":7,"column":18},"end":{"line":7,"column":41}},"6":{"start":{"line":9,"column":13},"end":{"line":9,"column":37}},"7":{"start":{"line":10,"column":10},"end":{"line":10,"column":12}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"9":{"start":{"line":15,"column":11},"end":{"line":15,"column":15}},"10":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"11":{"start":{"line":18,"column":4},"end":{"line":18,"column":33}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":20}},"13":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"14":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":35}},"16":{"start":{"line":28,"column":2},"end":{"line":30,"column":4}},"17":{"start":{"line":29,"column":4},"end":{"line":29,"column":22}},"18":{"start":{"line":32,"column":2},"end":{"line":34,"column":4}},"19":{"start":{"line":33,"column":4},"end":{"line":33,"column":20}},"20":{"start":{"line":36,"column":2},"end":{"line":39,"column":4}},"21":{"start":{"line":37,"column":4},"end":{"line":37,"column":18}},"22":{"start":{"line":38,"column":4},"end":{"line":38,"column":20}},"23":{"start":{"line":41,"column":2},"end":{"line":41,"column":18}},"24":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"25":{"start":{"line":43,"column":4},"end":{"line":43,"column":18}},"26":{"start":{"line":45,"column":2},"end":{"line":45,"column":25}},"27":{"start":{"line":46,"column":2},"end":{"line":46,"column":23}},"28":{"start":{"line":47,"column":2},"end":{"line":47,"column":22}},"29":{"start":{"line":49,"column":2},"end":{"line":49,"column":17}},"30":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"31":{"start":{"line":51,"column":2},"end":{"line":51,"column":18}},"32":{"start":{"line":53,"column":2},"end":{"line":55,"column":4}},"33":{"start":{"line":54,"column":4},"end":{"line":54,"column":17}},"34":{"start":{"line":58,"column":0},"end":{"line":65,"column":1}},"35":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"36":{"start":{"line":60,"column":19},"end":{"line":60,"column":74}},"37":{"start":{"line":61,"column":2},"end":{"line":61,"column":22}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":17}},"39":{"start":{"line":63,"column":2},"end":{"line":63,"column":43}},"40":{"start":{"line":64,"column":2},"end":{"line":64,"column":25}},"41":{"start":{"line":67,"column":0},"end":{"line":74,"column":1}},"42":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"43":{"start":{"line":69,"column":9},"end":{"line":69,"column":29}},"44":{"start":{"line":70,"column":2},"end":{"line":70,"column":24}},"45":{"start":{"line":71,"column":2},"end":{"line":71,"column":20}},"46":{"start":{"line":72,"column":2},"end":{"line":72,"column":17}},"47":{"start":{"line":73,"column":2},"end":{"line":73,"column":43}},"48":{"start":{"line":76,"column":0},"end":{"line":80,"column":1}},"49":{"start":{"line":78,"column":2},"end":{"line":78,"column":21}},"50":{"start":{"line":79,"column":2},"end":{"line":79,"column":20}},"51":{"start":{"line":82,"column":0},"end":{"line":87,"column":1}},"52":{"start":{"line":84,"column":2},"end":{"line":84,"column":22}},"53":{"start":{"line":85,"column":2},"end":{"line":85,"column":21}},"54":{"start":{"line":86,"column":2},"end":{"line":86,"column":17}},"55":{"start":{"line":89,"column":0},"end":{"line":98,"column":1}},"56":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"57":{"start":{"line":91,"column":20},"end":{"line":91,"column":69}},"58":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"59":{"start":{"line":95,"column":20},"end":{"line":95,"column":30}},"60":{"start":{"line":97,"column":2},"end":{"line":97,"column":31}},"61":{"start":{"line":100,"column":0},"end":{"line":126,"column":1}},"62":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"63":{"start":{"line":102,"column":23},"end":{"line":102,"column":29}},"64":{"start":{"line":103,"column":2},"end":{"line":103,"column":24}},"65":{"start":{"line":105,"column":20},"end":{"line":105,"column":48}},"66":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"67":{"start":{"line":108,"column":13},"end":{"line":108,"column":17}},"68":{"start":{"line":110,"column":4},"end":{"line":111,"column":44}},"69":{"start":{"line":113,"column":4},"end":{"line":120,"column":12}},"70":{"start":{"line":115,"column":8},"end":{"line":115,"column":26}},"71":{"start":{"line":118,"column":8},"end":{"line":118,"column":28}},"72":{"start":{"line":124,"column":2},"end":{"line":124,"column":32}},"73":{"start":{"line":125,"column":2},"end":{"line":125,"column":21}},"74":{"start":{"line":128,"column":0},"end":{"line":167,"column":1}},"75":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"76":{"start":{"line":131,"column":4},"end":{"line":131,"column":18}},"77":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"78":{"start":{"line":136,"column":4},"end":{"line":136,"column":10}},"79":{"start":{"line":139,"column":2},"end":{"line":139,"column":25}},"80":{"start":{"line":141,"column":12},"end":{"line":141,"column":24}},"81":{"start":{"line":142,"column":2},"end":{"line":159,"column":3}},"82":{"start":{"line":142,"column":15},"end":{"line":142,"column":16}},"83":{"start":{"line":145,"column":12},"end":{"line":145,"column":18}},"84":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"85":{"start":{"line":147,"column":19},"end":{"line":147,"column":37}},"86":{"start":{"line":148,"column":9},"end":{"line":148,"column":30}},"87":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"88":{"start":{"line":152,"column":6},"end":{"line":152,"column":30}},"89":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"90":{"start":{"line":154,"column":8},"end":{"line":154,"column":30}},"91":{"start":{"line":155,"column":8},"end":{"line":155,"column":39}},"92":{"start":{"line":157,"column":6},"end":{"line":157,"column":12}},"93":{"start":{"line":162,"column":2},"end":{"line":162,"column":25}},"94":{"start":{"line":163,"column":2},"end":{"line":163,"column":26}},"95":{"start":{"line":166,"column":2},"end":{"line":166,"column":20}},"96":{"start":{"line":169,"column":0},"end":{"line":169,"column":46}}},"fnMap":{"0":{"name":"EntryWriter","decl":{"start":{"line":14,"column":9},"end":{"line":14,"column":20}},"loc":{"start":{"line":14,"column":29},"end":{"line":56,"column":1}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":28,"column":24},"end":{"line":28,"column":25}},"loc":{"start":{"line":28,"column":37},"end":{"line":30,"column":3}},"line":28},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":25},"end":{"line":32,"column":26}},"loc":{"start":{"line":32,"column":37},"end":{"line":34,"column":3}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":23},"end":{"line":36,"column":24}},"loc":{"start":{"line":36,"column":35},"end":{"line":39,"column":3}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":28},"end":{"line":55,"column":3}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":58,"column":30},"end":{"line":58,"column":31}},"loc":{"start":{"line":58,"column":43},"end":{"line":65,"column":1}},"line":58},"6":{"name":"(anonymous_6)","decl":{"start":{"line":67,"column":28},"end":{"line":67,"column":29}},"loc":{"start":{"line":67,"column":41},"end":{"line":74,"column":1}},"line":67},"7":{"name":"(anonymous_7)","decl":{"start":{"line":76,"column":30},"end":{"line":76,"column":31}},"loc":{"start":{"line":76,"column":42},"end":{"line":80,"column":1}},"line":76},"8":{"name":"(anonymous_8)","decl":{"start":{"line":82,"column":31},"end":{"line":82,"column":32}},"loc":{"start":{"line":82,"column":43},"end":{"line":87,"column":1}},"line":82},"9":{"name":"(anonymous_9)","decl":{"start":{"line":89,"column":28},"end":{"line":89,"column":29}},"loc":{"start":{"line":89,"column":45},"end":{"line":98,"column":1}},"line":89},"10":{"name":"(anonymous_10)","decl":{"start":{"line":100,"column":32},"end":{"line":100,"column":33}},"loc":{"start":{"line":100,"column":44},"end":{"line":126,"column":1}},"line":100},"11":{"name":"(anonymous_11)","decl":{"start":{"line":114,"column":18},"end":{"line":114,"column":19}},"loc":{"start":{"line":114,"column":31},"end":{"line":116,"column":7}},"line":114},"12":{"name":"(anonymous_12)","decl":{"start":{"line":117,"column":19},"end":{"line":117,"column":20}},"loc":{"start":{"line":117,"column":33},"end":{"line":119,"column":7}},"line":117},"13":{"name":"(anonymous_13)","decl":{"start":{"line":128,"column":33},"end":{"line":128,"column":34}},"loc":{"start":{"line":128,"column":45},"end":{"line":167,"column":1}},"line":128},"14":{"name":"(anonymous_14)","decl":{"start":{"line":169,"column":32},"end":{"line":169,"column":33}},"loc":{"start":{"line":169,"column":44},"end":{"line":169,"column":46}},"line":169}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},{"start":{"line":17,"column":2},"end":{"line":19,"column":3}}],"line":17},"1":{"loc":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"type":"if","locations":[{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},{"start":{"line":42,"column":2},"end":{"line":44,"column":3}}],"line":42},"2":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},{"start":{"line":60,"column":2},"end":{"line":60,"column":74}}],"line":60},"3":{"loc":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"type":"if","locations":[{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},{"start":{"line":69,"column":2},"end":{"line":69,"column":29}}],"line":69},"4":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},{"start":{"line":91,"column":2},"end":{"line":91,"column":69}}],"line":91},"5":{"loc":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"type":"if","locations":[{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},{"start":{"line":95,"column":2},"end":{"line":95,"column":30}}],"line":95},"6":{"loc":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"type":"if","locations":[{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},{"start":{"line":102,"column":2},"end":{"line":102,"column":29}}],"line":102},"7":{"loc":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"type":"if","locations":[{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},{"start":{"line":107,"column":2},"end":{"line":121,"column":3}}],"line":107},"8":{"loc":{"start":{"line":107,"column":6},"end":{"line":107,"column":44}},"type":"binary-expr","locations":[{"start":{"line":107,"column":6},"end":{"line":107,"column":29}},{"start":{"line":107,"column":33},"end":{"line":107,"column":44}}],"line":107},"9":{"loc":{"start":{"line":110,"column":27},"end":{"line":111,"column":44}},"type":"binary-expr","locations":[{"start":{"line":110,"column":27},"end":{"line":110,"column":47}},{"start":{"line":111,"column":6},"end":{"line":111,"column":44}}],"line":110},"10":{"loc":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"type":"if","locations":[{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},{"start":{"line":130,"column":2},"end":{"line":132,"column":3}}],"line":130},"11":{"loc":{"start":{"line":130,"column":6},"end":{"line":130,"column":37}},"type":"binary-expr","locations":[{"start":{"line":130,"column":6},"end":{"line":130,"column":22}},{"start":{"line":130,"column":26},"end":{"line":130,"column":37}}],"line":130},"12":{"loc":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"type":"if","locations":[{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},{"start":{"line":134,"column":2},"end":{"line":137,"column":3}}],"line":134},"13":{"loc":{"start":{"line":134,"column":6},"end":{"line":134,"column":38}},"type":"binary-expr","locations":[{"start":{"line":134,"column":6},"end":{"line":134,"column":18}},{"start":{"line":134,"column":22},"end":{"line":134,"column":38}}],"line":134},"14":{"loc":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},{"start":{"line":147,"column":4},"end":{"line":148,"column":30}}],"line":147},"15":{"loc":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},{"start":{"line":150,"column":4},"end":{"line":158,"column":5}}],"line":150},"16":{"loc":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"type":"if","locations":[{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},{"start":{"line":153,"column":6},"end":{"line":156,"column":7}}],"line":153}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":1,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":1,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":1,"49":0,"50":0,"51":1,"52":0,"53":0,"54":0,"55":1,"56":0,"57":0,"58":0,"59":0,"60":0,"61":1,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":1,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3e169418508e031df78186ff63b5fa5aa2484ab8","contentHash":"84191ed4732b6763ae8701256051735aebbe5e95c932c15bef34da01b33ba1a0"},"/Users/isaacs/dev/js/tar/lib/entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry.js","statementMap":{"0":{"start":{"line":7,"column":0},"end":{"line":7,"column":22}},"1":{"start":{"line":9,"column":16},"end":{"line":9,"column":38}},"2":{"start":{"line":10,"column":10},"end":{"line":10,"column":27}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":33}},"4":{"start":{"line":12,"column":13},"end":{"line":12,"column":37}},"5":{"start":{"line":13,"column":15},"end":{"line":13,"column":34}},"6":{"start":{"line":14,"column":14},"end":{"line":14,"column":41}},"7":{"start":{"line":17,"column":2},"end":{"line":17,"column":19}},"8":{"start":{"line":18,"column":2},"end":{"line":18,"column":22}},"9":{"start":{"line":19,"column":2},"end":{"line":19,"column":22}},"10":{"start":{"line":21,"column":2},"end":{"line":21,"column":25}},"11":{"start":{"line":22,"column":2},"end":{"line":22,"column":22}},"12":{"start":{"line":23,"column":2},"end":{"line":23,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":22}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":21}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":21}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":21}},"17":{"start":{"line":28,"column":2},"end":{"line":28,"column":18}},"18":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"19":{"start":{"line":30,"column":2},"end":{"line":30,"column":20}},"20":{"start":{"line":32,"column":2},"end":{"line":32,"column":36}},"21":{"start":{"line":34,"column":2},"end":{"line":34,"column":17}},"22":{"start":{"line":35,"column":2},"end":{"line":35,"column":23}},"23":{"start":{"line":36,"column":2},"end":{"line":36,"column":33}},"24":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"25":{"start":{"line":41,"column":11},"end":{"line":41,"column":15}},"26":{"start":{"line":42,"column":2},"end":{"line":44,"column":4}},"27":{"start":{"line":43,"column":4},"end":{"line":43,"column":29}},"28":{"start":{"line":46,"column":2},"end":{"line":46,"column":18}},"29":{"start":{"line":49,"column":0},"end":{"line":49,"column":23}},"30":{"start":{"line":51,"column":0},"end":{"line":78,"column":1}},"31":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"32":{"start":{"line":52,"column":20},"end":{"line":52,"column":65}},"33":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"34":{"start":{"line":54,"column":4},"end":{"line":54,"column":40}},"35":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"36":{"start":{"line":60,"column":4},"end":{"line":60,"column":35}},"37":{"start":{"line":62,"column":2},"end":{"line":62,"column":29}},"38":{"start":{"line":65,"column":11},"end":{"line":65,"column":25}},"39":{"start":{"line":66,"column":2},"end":{"line":66,"column":21}},"40":{"start":{"line":67,"column":2},"end":{"line":67,"column":19}},"41":{"start":{"line":69,"column":2},"end":{"line":69,"column":14}},"42":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"43":{"start":{"line":73,"column":4},"end":{"line":73,"column":26}},"44":{"start":{"line":74,"column":4},"end":{"line":74,"column":16}},"45":{"start":{"line":77,"column":2},"end":{"line":77,"column":13}},"46":{"start":{"line":80,"column":0},"end":{"line":84,"column":1}},"47":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"48":{"start":{"line":81,"column":9},"end":{"line":81,"column":22}},"49":{"start":{"line":82,"column":2},"end":{"line":82,"column":21}},"50":{"start":{"line":83,"column":2},"end":{"line":83,"column":14}},"51":{"start":{"line":86,"column":0},"end":{"line":89,"column":1}},"52":{"start":{"line":87,"column":2},"end":{"line":87,"column":21}},"53":{"start":{"line":88,"column":2},"end":{"line":88,"column":20}},"54":{"start":{"line":91,"column":0},"end":{"line":97,"column":1}},"55":{"start":{"line":93,"column":2},"end":{"line":93,"column":21}},"56":{"start":{"line":94,"column":2},"end":{"line":94,"column":22}},"57":{"start":{"line":95,"column":2},"end":{"line":95,"column":14}},"58":{"start":{"line":96,"column":2},"end":{"line":96,"column":41}},"59":{"start":{"line":100,"column":0},"end":{"line":139,"column":1}},"60":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"61":{"start":{"line":103,"column":52},"end":{"line":103,"column":58}},"62":{"start":{"line":107,"column":2},"end":{"line":107,"column":22}},"63":{"start":{"line":110,"column":2},"end":{"line":113,"column":3}},"64":{"start":{"line":111,"column":16},"end":{"line":111,"column":43}},"65":{"start":{"line":112,"column":4},"end":{"line":112,"column":28}},"66":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"67":{"start":{"line":117,"column":4},"end":{"line":117,"column":57}},"68":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"69":{"start":{"line":119,"column":6},"end":{"line":119,"column":29}},"70":{"start":{"line":120,"column":6},"end":{"line":120,"column":24}},"71":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"72":{"start":{"line":123,"column":6},"end":{"line":123,"column":24}},"73":{"start":{"line":124,"column":6},"end":{"line":124,"column":22}},"74":{"start":{"line":130,"column":12},"end":{"line":130,"column":29}},"75":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"76":{"start":{"line":132,"column":4},"end":{"line":132,"column":36}},"77":{"start":{"line":133,"column":4},"end":{"line":133,"column":22}},"78":{"start":{"line":134,"column":4},"end":{"line":134,"column":25}},"79":{"start":{"line":135,"column":4},"end":{"line":135,"column":40}},"80":{"start":{"line":138,"column":2},"end":{"line":138,"column":23}},"81":{"start":{"line":141,"column":0},"end":{"line":211,"column":1}},"82":{"start":{"line":143,"column":15},"end":{"line":143,"column":27}},"83":{"start":{"line":144,"column":17},"end":{"line":144,"column":31}},"84":{"start":{"line":145,"column":15},"end":{"line":145,"column":27}},"85":{"start":{"line":146,"column":14},"end":{"line":146,"column":24}},"86":{"start":{"line":149,"column":15},"end":{"line":149,"column":25}},"87":{"start":{"line":150,"column":2},"end":{"line":154,"column":3}},"88":{"start":{"line":150,"column":15},"end":{"line":150,"column":16}},"89":{"start":{"line":151,"column":16},"end":{"line":151,"column":25}},"90":{"start":{"line":152,"column":14},"end":{"line":152,"column":27}},"91":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"92":{"start":{"line":153,"column":36},"end":{"line":153,"column":54}},"93":{"start":{"line":158,"column":3},"end":{"line":165,"column":3}},"94":{"start":{"line":159,"column":4},"end":{"line":161,"column":6}},"95":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"96":{"start":{"line":160,"column":39},"end":{"line":160,"column":54}},"97":{"start":{"line":165,"column":3},"end":{"line":173,"column":3}},"98":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"99":{"start":{"line":167,"column":6},"end":{"line":167,"column":40}},"100":{"start":{"line":173,"column":3},"end":{"line":177,"column":4}},"101":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"102":{"start":{"line":175,"column":6},"end":{"line":175,"column":42}},"103":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"104":{"start":{"line":184,"column":6},"end":{"line":184,"column":19}},"105":{"start":{"line":185,"column":6},"end":{"line":185,"column":11}},"106":{"start":{"line":188,"column":6},"end":{"line":188,"column":24}},"107":{"start":{"line":189,"column":6},"end":{"line":189,"column":11}},"108":{"start":{"line":192,"column":6},"end":{"line":192,"column":22}},"109":{"start":{"line":193,"column":6},"end":{"line":193,"column":11}},"110":{"start":{"line":202,"column":6},"end":{"line":202,"column":34}},"111":{"start":{"line":205,"column":2},"end":{"line":205,"column":18}},"112":{"start":{"line":206,"column":2},"end":{"line":206,"column":24}},"113":{"start":{"line":207,"column":2},"end":{"line":207,"column":24}},"114":{"start":{"line":210,"column":2},"end":{"line":210,"column":30}},"115":{"start":{"line":215,"column":0},"end":{"line":217,"column":1}},"116":{"start":{"line":216,"column":2},"end":{"line":216,"column":20}},"117":{"start":{"line":219,"column":0},"end":{"line":219,"column":35}},"118":{"start":{"line":220,"column":0},"end":{"line":220,"column":37}}},"fnMap":{"0":{"name":"Entry","decl":{"start":{"line":16,"column":9},"end":{"line":16,"column":14}},"loc":{"start":{"line":16,"column":42},"end":{"line":47,"column":1}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":42,"column":36},"end":{"line":42,"column":37}},"loc":{"start":{"line":42,"column":49},"end":{"line":44,"column":3}},"line":42},"2":{"name":"(anonymous_2)","decl":{"start":{"line":51,"column":24},"end":{"line":51,"column":25}},"loc":{"start":{"line":51,"column":37},"end":{"line":78,"column":1}},"line":51},"3":{"name":"(anonymous_3)","decl":{"start":{"line":80,"column":22},"end":{"line":80,"column":23}},"loc":{"start":{"line":80,"column":35},"end":{"line":84,"column":1}},"line":80},"4":{"name":"(anonymous_4)","decl":{"start":{"line":86,"column":24},"end":{"line":86,"column":25}},"loc":{"start":{"line":86,"column":36},"end":{"line":89,"column":1}},"line":86},"5":{"name":"(anonymous_5)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":1}},"line":91},"6":{"name":"(anonymous_6)","decl":{"start":{"line":100,"column":24},"end":{"line":100,"column":25}},"loc":{"start":{"line":100,"column":36},"end":{"line":139,"column":1}},"line":100},"7":{"name":"(anonymous_7)","decl":{"start":{"line":141,"column":28},"end":{"line":141,"column":29}},"loc":{"start":{"line":141,"column":40},"end":{"line":211,"column":1}},"line":141},"8":{"name":"(anonymous_8)","decl":{"start":{"line":158,"column":30},"end":{"line":158,"column":31}},"loc":{"start":{"line":158,"column":43},"end":{"line":162,"column":3}},"line":158},"9":{"name":"(anonymous_9)","decl":{"start":{"line":159,"column":27},"end":{"line":159,"column":28}},"loc":{"start":{"line":159,"column":40},"end":{"line":161,"column":5}},"line":159},"10":{"name":"(anonymous_10)","decl":{"start":{"line":165,"column":32},"end":{"line":165,"column":33}},"loc":{"start":{"line":165,"column":45},"end":{"line":169,"column":3}},"line":165},"11":{"name":"(anonymous_11)","decl":{"start":{"line":173,"column":39},"end":{"line":173,"column":40}},"loc":{"start":{"line":173,"column":52},"end":{"line":177,"column":3}},"line":173},"12":{"name":"(anonymous_12)","decl":{"start":{"line":215,"column":24},"end":{"line":215,"column":25}},"loc":{"start":{"line":215,"column":34},"end":{"line":217,"column":1}},"line":215}},"branchMap":{"0":{"loc":{"start":{"line":36,"column":19},"end":{"line":36,"column":33}},"type":"binary-expr","locations":[{"start":{"line":36,"column":19},"end":{"line":36,"column":27}},{"start":{"line":36,"column":31},"end":{"line":36,"column":33}}],"line":36},"1":{"loc":{"start":{"line":42,"column":14},"end":{"line":42,"column":26}},"type":"binary-expr","locations":[{"start":{"line":42,"column":14},"end":{"line":42,"column":20}},{"start":{"line":42,"column":24},"end":{"line":42,"column":26}}],"line":42},"2":{"loc":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"type":"if","locations":[{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},{"start":{"line":52,"column":2},"end":{"line":52,"column":65}}],"line":52},"3":{"loc":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"type":"if","locations":[{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},{"start":{"line":53,"column":2},"end":{"line":55,"column":3}}],"line":53},"4":{"loc":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},{"start":{"line":59,"column":2},"end":{"line":61,"column":3}}],"line":59},"5":{"loc":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"type":"if","locations":[{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},{"start":{"line":72,"column":2},"end":{"line":75,"column":3}}],"line":72},"6":{"loc":{"start":{"line":72,"column":6},"end":{"line":72,"column":28}},"type":"binary-expr","locations":[{"start":{"line":72,"column":6},"end":{"line":72,"column":18}},{"start":{"line":72,"column":22},"end":{"line":72,"column":28}}],"line":72},"7":{"loc":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"type":"if","locations":[{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},{"start":{"line":81,"column":2},"end":{"line":81,"column":22}}],"line":81},"8":{"loc":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"type":"if","locations":[{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},{"start":{"line":103,"column":2},"end":{"line":103,"column":58}}],"line":103},"9":{"loc":{"start":{"line":103,"column":6},"end":{"line":103,"column":50}},"type":"binary-expr","locations":[{"start":{"line":103,"column":6},"end":{"line":103,"column":18}},{"start":{"line":103,"column":22},"end":{"line":103,"column":35}},{"start":{"line":103,"column":39},"end":{"line":103,"column":50}}],"line":103},"10":{"loc":{"start":{"line":110,"column":9},"end":{"line":110,"column":54}},"type":"binary-expr","locations":[{"start":{"line":110,"column":9},"end":{"line":110,"column":37}},{"start":{"line":110,"column":41},"end":{"line":110,"column":54}}],"line":110},"11":{"loc":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"type":"if","locations":[{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},{"start":{"line":116,"column":2},"end":{"line":126,"column":3}}],"line":116},"12":{"loc":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"type":"if","locations":[{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},{"start":{"line":118,"column":4},"end":{"line":121,"column":5}}],"line":118},"13":{"loc":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},{"start":{"line":122,"column":4},"end":{"line":125,"column":5}}],"line":122},"14":{"loc":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"type":"if","locations":[{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},{"start":{"line":131,"column":2},"end":{"line":136,"column":3}}],"line":131},"15":{"loc":{"start":{"line":131,"column":6},"end":{"line":131,"column":45}},"type":"binary-expr","locations":[{"start":{"line":131,"column":6},"end":{"line":131,"column":26}},{"start":{"line":131,"column":30},"end":{"line":131,"column":45}}],"line":131},"16":{"loc":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"type":"if","locations":[{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},{"start":{"line":153,"column":4},"end":{"line":153,"column":54}}],"line":153},"17":{"loc":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"type":"if","locations":[{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},{"start":{"line":160,"column":6},"end":{"line":160,"column":54}}],"line":160},"18":{"loc":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"type":"if","locations":[{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},{"start":{"line":166,"column":4},"end":{"line":168,"column":5}}],"line":166},"19":{"loc":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"type":"if","locations":[{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},{"start":{"line":174,"column":4},"end":{"line":176,"column":5}}],"line":174},"20":{"loc":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"type":"switch","locations":[{"start":{"line":182,"column":4},"end":{"line":182,"column":19}},{"start":{"line":183,"column":4},"end":{"line":185,"column":11}},{"start":{"line":187,"column":4},"end":{"line":189,"column":11}},{"start":{"line":191,"column":4},"end":{"line":193,"column":11}},{"start":{"line":195,"column":4},"end":{"line":195,"column":16}},{"start":{"line":196,"column":4},"end":{"line":196,"column":24}},{"start":{"line":197,"column":4},"end":{"line":197,"column":27}},{"start":{"line":198,"column":4},"end":{"line":198,"column":23}},{"start":{"line":199,"column":4},"end":{"line":199,"column":21}},{"start":{"line":200,"column":4},"end":{"line":200,"column":16}},{"start":{"line":201,"column":4},"end":{"line":202,"column":34}}],"line":181}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":1,"30":1,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":1,"47":0,"48":0,"49":0,"50":0,"51":1,"52":0,"53":0,"54":1,"55":0,"56":0,"57":0,"58":0,"59":1,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":1,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":1,"116":0,"117":1,"118":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0,0,0,0,0,0,0,0,0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"2cc4f925db2a60e89bf0743124faec4e8996dfdb","contentHash":"245d5cb2b23d975dc5b9a0ed2553c93c587727d50a7961242f50cec333c04ba9"},"/Users/isaacs/dev/js/tar/lib/global-header-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/global-header-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":35}},"1":{"start":{"line":3,"column":27},"end":{"line":3,"column":65}},"2":{"start":{"line":4,"column":15},"end":{"line":4,"column":34}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":50}},"4":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"5":{"start":{"line":10,"column":4},"end":{"line":10,"column":40}},"6":{"start":{"line":12,"column":2},"end":{"line":12,"column":40}},"7":{"start":{"line":13,"column":2},"end":{"line":13,"column":23}}},"fnMap":{"0":{"name":"GlobalHeaderWriter","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":27}},"loc":{"start":{"line":8,"column":36},"end":{"line":14,"column":1}},"line":8}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"type":"if","locations":[{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},{"start":{"line":9,"column":2},"end":{"line":11,"column":3}}],"line":9}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3d0c8589f62a5c8ccec606d52d3abd98e5627d57","contentHash":"a2570ca840cf3e44d77e15af0aee52f7c145da39b76366006f3672b9708def3e"},"/Users/isaacs/dev/js/tar/lib/parse.js":{"path":"/Users/isaacs/dev/js/tar/lib/parse.js","statementMap":{"0":{"start":{"line":6,"column":0},"end":{"line":6,"column":37}},"1":{"start":{"line":8,"column":13},"end":{"line":8,"column":30}},"2":{"start":{"line":9,"column":13},"end":{"line":9,"column":26}},"3":{"start":{"line":10,"column":18},"end":{"line":10,"column":41}},"4":{"start":{"line":11,"column":10},"end":{"line":11,"column":30}},"5":{"start":{"line":12,"column":16},"end":{"line":12,"column":38}},"6":{"start":{"line":13,"column":12},"end":{"line":13,"column":33}},"7":{"start":{"line":14,"column":18},"end":{"line":14,"column":46}},"8":{"start":{"line":15,"column":21},"end":{"line":15,"column":52}},"9":{"start":{"line":16,"column":13},"end":{"line":16,"column":33}},"10":{"start":{"line":17,"column":15},"end":{"line":17,"column":34}},"11":{"start":{"line":18,"column":14},"end":{"line":18,"column":32}},"12":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"13":{"start":{"line":28,"column":11},"end":{"line":28,"column":15}},"14":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"15":{"start":{"line":29,"column":30},"end":{"line":29,"column":48}},"16":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"17":{"start":{"line":36,"column":2},"end":{"line":36,"column":20}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":20}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":35}},"20":{"start":{"line":39,"column":2},"end":{"line":39,"column":17}},"21":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"22":{"start":{"line":41,"column":2},"end":{"line":41,"column":20}},"23":{"start":{"line":43,"column":2},"end":{"line":45,"column":4}},"24":{"start":{"line":44,"column":4},"end":{"line":44,"column":23}},"25":{"start":{"line":47,"column":2},"end":{"line":49,"column":4}},"26":{"start":{"line":48,"column":4},"end":{"line":48,"column":18}},"27":{"start":{"line":51,"column":2},"end":{"line":53,"column":4}},"28":{"start":{"line":52,"column":4},"end":{"line":52,"column":19}},"29":{"start":{"line":55,"column":2},"end":{"line":57,"column":4}},"30":{"start":{"line":56,"column":4},"end":{"line":56,"column":20}},"31":{"start":{"line":63,"column":0},"end":{"line":67,"column":1}},"32":{"start":{"line":64,"column":11},"end":{"line":64,"column":15}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"34":{"start":{"line":65,"column":31},"end":{"line":65,"column":57}},"35":{"start":{"line":66,"column":2},"end":{"line":66,"column":16}},"36":{"start":{"line":72,"column":0},"end":{"line":83,"column":1}},"37":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"38":{"start":{"line":77,"column":4},"end":{"line":79,"column":5}},"39":{"start":{"line":77,"column":17},"end":{"line":77,"column":18}},"40":{"start":{"line":77,"column":24},"end":{"line":77,"column":32}},"41":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"42":{"start":{"line":78,"column":22},"end":{"line":78,"column":62}},"43":{"start":{"line":80,"column":4},"end":{"line":80,"column":10}},"44":{"start":{"line":82,"column":2},"end":{"line":82,"column":30}},"45":{"start":{"line":85,"column":0},"end":{"line":88,"column":1}},"46":{"start":{"line":86,"column":2},"end":{"line":86,"column":20}},"47":{"start":{"line":87,"column":2},"end":{"line":87,"column":28}},"48":{"start":{"line":94,"column":0},"end":{"line":94,"column":38}},"49":{"start":{"line":96,"column":0},"end":{"line":137,"column":1}},"50":{"start":{"line":97,"column":2},"end":{"line":97,"column":59}},"51":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"52":{"start":{"line":105,"column":16},"end":{"line":105,"column":27}},"53":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"54":{"start":{"line":106,"column":22},"end":{"line":106,"column":36}},"55":{"start":{"line":108,"column":6},"end":{"line":108,"column":34}},"56":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"57":{"start":{"line":109,"column":31},"end":{"line":109,"column":51}},"58":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"59":{"start":{"line":112,"column":6},"end":{"line":112,"column":17}},"60":{"start":{"line":113,"column":6},"end":{"line":113,"column":24}},"61":{"start":{"line":117,"column":15},"end":{"line":117,"column":19}},"62":{"start":{"line":118,"column":4},"end":{"line":120,"column":5}},"63":{"start":{"line":118,"column":17},"end":{"line":118,"column":18}},"64":{"start":{"line":119,"column":6},"end":{"line":119,"column":23}},"65":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"66":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"67":{"start":{"line":128,"column":8},"end":{"line":128,"column":26}},"68":{"start":{"line":129,"column":6},"end":{"line":129,"column":29}},"69":{"start":{"line":131,"column":6},"end":{"line":131,"column":30}},"70":{"start":{"line":132,"column":6},"end":{"line":132,"column":25}},"71":{"start":{"line":136,"column":2},"end":{"line":136,"column":22}},"72":{"start":{"line":140,"column":0},"end":{"line":285,"column":1}},"73":{"start":{"line":141,"column":15},"end":{"line":141,"column":31}},"74":{"start":{"line":142,"column":13},"end":{"line":142,"column":17}},"75":{"start":{"line":147,"column":13},"end":{"line":147,"column":18}},"76":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"77":{"start":{"line":150,"column":12},"end":{"line":150,"column":41}},"78":{"start":{"line":151,"column":4},"end":{"line":151,"column":21}},"79":{"start":{"line":152,"column":4},"end":{"line":152,"column":37}},"80":{"start":{"line":153,"column":4},"end":{"line":153,"column":37}},"81":{"start":{"line":154,"column":4},"end":{"line":154,"column":32}},"82":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"83":{"start":{"line":171,"column":6},"end":{"line":171,"column":23}},"84":{"start":{"line":172,"column":6},"end":{"line":172,"column":18}},"85":{"start":{"line":173,"column":6},"end":{"line":173,"column":11}},"86":{"start":{"line":177,"column":6},"end":{"line":177,"column":32}},"87":{"start":{"line":178,"column":6},"end":{"line":183,"column":7}},"88":{"start":{"line":179,"column":8},"end":{"line":179,"column":41}},"89":{"start":{"line":180,"column":8},"end":{"line":182,"column":10}},"90":{"start":{"line":181,"column":10},"end":{"line":181,"column":43}},"91":{"start":{"line":184,"column":6},"end":{"line":184,"column":33}},"92":{"start":{"line":185,"column":6},"end":{"line":185,"column":17}},"93":{"start":{"line":186,"column":6},"end":{"line":186,"column":11}},"94":{"start":{"line":191,"column":6},"end":{"line":191,"column":32}},"95":{"start":{"line":192,"column":6},"end":{"line":194,"column":7}},"96":{"start":{"line":193,"column":8},"end":{"line":193,"column":37}},"97":{"start":{"line":195,"column":6},"end":{"line":195,"column":27}},"98":{"start":{"line":196,"column":6},"end":{"line":196,"column":17}},"99":{"start":{"line":197,"column":6},"end":{"line":197,"column":11}},"100":{"start":{"line":201,"column":6},"end":{"line":201,"column":29}},"101":{"start":{"line":202,"column":6},"end":{"line":205,"column":7}},"102":{"start":{"line":203,"column":8},"end":{"line":203,"column":45}},"103":{"start":{"line":204,"column":8},"end":{"line":204,"column":44}},"104":{"start":{"line":206,"column":6},"end":{"line":206,"column":25}},"105":{"start":{"line":207,"column":6},"end":{"line":207,"column":17}},"106":{"start":{"line":208,"column":6},"end":{"line":208,"column":11}},"107":{"start":{"line":213,"column":6},"end":{"line":213,"column":29}},"108":{"start":{"line":214,"column":6},"end":{"line":217,"column":7}},"109":{"start":{"line":215,"column":8},"end":{"line":215,"column":45}},"110":{"start":{"line":216,"column":8},"end":{"line":216,"column":40}},"111":{"start":{"line":218,"column":6},"end":{"line":218,"column":21}},"112":{"start":{"line":219,"column":6},"end":{"line":219,"column":17}},"113":{"start":{"line":220,"column":6},"end":{"line":220,"column":11}},"114":{"start":{"line":226,"column":6},"end":{"line":226,"column":23}},"115":{"start":{"line":227,"column":6},"end":{"line":227,"column":25}},"116":{"start":{"line":228,"column":6},"end":{"line":228,"column":11}},"117":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"118":{"start":{"line":233,"column":4},"end":{"line":233,"column":28}},"119":{"start":{"line":235,"column":17},"end":{"line":235,"column":29}},"120":{"start":{"line":236,"column":19},"end":{"line":236,"column":33}},"121":{"start":{"line":240,"column":4},"end":{"line":240,"column":25}},"122":{"start":{"line":242,"column":2},"end":{"line":242,"column":49}},"123":{"start":{"line":243,"column":2},"end":{"line":243,"column":19}},"124":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"125":{"start":{"line":247,"column":4},"end":{"line":249,"column":6}},"126":{"start":{"line":248,"column":6},"end":{"line":248,"column":24}},"127":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"128":{"start":{"line":252,"column":13},"end":{"line":252,"column":35}},"129":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"130":{"start":{"line":255,"column":4},"end":{"line":255,"column":23}},"131":{"start":{"line":258,"column":2},"end":{"line":258,"column":21}},"132":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"133":{"start":{"line":261,"column":4},"end":{"line":261,"column":39}},"134":{"start":{"line":264,"column":11},"end":{"line":264,"column":15}},"135":{"start":{"line":266,"column":2},"end":{"line":268,"column":4}},"136":{"start":{"line":267,"column":4},"end":{"line":267,"column":14}},"137":{"start":{"line":270,"column":2},"end":{"line":272,"column":4}},"138":{"start":{"line":271,"column":4},"end":{"line":271,"column":15}},"139":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"140":{"start":{"line":275,"column":4},"end":{"line":275,"column":29}},"141":{"start":{"line":278,"column":2},"end":{"line":278,"column":22}},"142":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"143":{"start":{"line":282,"column":4},"end":{"line":282,"column":15}},"144":{"start":{"line":283,"column":4},"end":{"line":283,"column":22}}},"fnMap":{"0":{"name":"Parse","decl":{"start":{"line":27,"column":9},"end":{"line":27,"column":14}},"loc":{"start":{"line":27,"column":18},"end":{"line":58,"column":1}},"line":27},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":25},"end":{"line":43,"column":26}},"loc":{"start":{"line":43,"column":38},"end":{"line":45,"column":3}},"line":43},"2":{"name":"(anonymous_2)","decl":{"start":{"line":47,"column":24},"end":{"line":47,"column":25}},"loc":{"start":{"line":47,"column":37},"end":{"line":49,"column":3}},"line":47},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":23},"end":{"line":51,"column":24}},"loc":{"start":{"line":51,"column":35},"end":{"line":53,"column":3}},"line":51},"4":{"name":"(anonymous_4)","decl":{"start":{"line":55,"column":25},"end":{"line":55,"column":26}},"loc":{"start":{"line":55,"column":37},"end":{"line":57,"column":3}},"line":55},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":29},"end":{"line":63,"column":30}},"loc":{"start":{"line":63,"column":41},"end":{"line":67,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":72,"column":24},"end":{"line":72,"column":25}},"loc":{"start":{"line":72,"column":37},"end":{"line":83,"column":1}},"line":72},"7":{"name":"(anonymous_7)","decl":{"start":{"line":85,"column":22},"end":{"line":85,"column":23}},"loc":{"start":{"line":85,"column":35},"end":{"line":88,"column":1}},"line":85},"8":{"name":"(anonymous_8)","decl":{"start":{"line":94,"column":24},"end":{"line":94,"column":25}},"loc":{"start":{"line":94,"column":36},"end":{"line":94,"column":38}},"line":94},"9":{"name":"(anonymous_9)","decl":{"start":{"line":96,"column":27},"end":{"line":96,"column":28}},"loc":{"start":{"line":96,"column":40},"end":{"line":137,"column":1}},"line":96},"10":{"name":"(anonymous_10)","decl":{"start":{"line":140,"column":30},"end":{"line":140,"column":31}},"loc":{"start":{"line":140,"column":43},"end":{"line":285,"column":1}},"line":140},"11":{"name":"(anonymous_11)","decl":{"start":{"line":178,"column":14},"end":{"line":178,"column":15}},"loc":{"start":{"line":178,"column":26},"end":{"line":183,"column":7}},"line":178},"12":{"name":"(anonymous_12)","decl":{"start":{"line":180,"column":42},"end":{"line":180,"column":43}},"loc":{"start":{"line":180,"column":55},"end":{"line":182,"column":9}},"line":180},"13":{"name":"(anonymous_13)","decl":{"start":{"line":192,"column":14},"end":{"line":192,"column":15}},"loc":{"start":{"line":192,"column":26},"end":{"line":194,"column":7}},"line":192},"14":{"name":"(anonymous_14)","decl":{"start":{"line":202,"column":14},"end":{"line":202,"column":15}},"loc":{"start":{"line":202,"column":26},"end":{"line":205,"column":7}},"line":202},"15":{"name":"(anonymous_15)","decl":{"start":{"line":214,"column":14},"end":{"line":214,"column":15}},"loc":{"start":{"line":214,"column":26},"end":{"line":217,"column":7}},"line":214},"16":{"name":"(anonymous_16)","decl":{"start":{"line":247,"column":21},"end":{"line":247,"column":22}},"loc":{"start":{"line":247,"column":34},"end":{"line":249,"column":5}},"line":247},"17":{"name":"(anonymous_17)","decl":{"start":{"line":266,"column":20},"end":{"line":266,"column":21}},"loc":{"start":{"line":266,"column":32},"end":{"line":268,"column":3}},"line":266},"18":{"name":"(anonymous_18)","decl":{"start":{"line":270,"column":21},"end":{"line":270,"column":22}},"loc":{"start":{"line":270,"column":33},"end":{"line":272,"column":3}},"line":270}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},{"start":{"line":29,"column":2},"end":{"line":29,"column":48}}],"line":29},"1":{"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"type":"if","locations":[{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},{"start":{"line":65,"column":2},"end":{"line":65,"column":57}}],"line":65},"2":{"loc":{"start":{"line":65,"column":6},"end":{"line":65,"column":29}},"type":"binary-expr","locations":[{"start":{"line":65,"column":6},"end":{"line":65,"column":16}},{"start":{"line":65,"column":20},"end":{"line":65,"column":29}}],"line":65},"3":{"loc":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},{"start":{"line":73,"column":2},"end":{"line":81,"column":3}}],"line":73},"4":{"loc":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"type":"if","locations":[{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},{"start":{"line":78,"column":6},"end":{"line":78,"column":62}}],"line":78},"5":{"loc":{"start":{"line":97,"column":9},"end":{"line":97,"column":30}},"type":"binary-expr","locations":[{"start":{"line":97,"column":9},"end":{"line":97,"column":10}},{"start":{"line":97,"column":14},"end":{"line":97,"column":30}}],"line":97},"6":{"loc":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"type":"if","locations":[{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},{"start":{"line":104,"column":2},"end":{"line":134,"column":3}}],"line":104},"7":{"loc":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"type":"if","locations":[{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},{"start":{"line":106,"column":4},"end":{"line":110,"column":5}}],"line":106},"8":{"loc":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"type":"if","locations":[{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},{"start":{"line":109,"column":6},"end":{"line":109,"column":51}}],"line":109},"9":{"loc":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},{"start":{"line":111,"column":4},"end":{"line":114,"column":5}}],"line":111},"10":{"loc":{"start":{"line":118,"column":20},"end":{"line":118,"column":35}},"type":"binary-expr","locations":[{"start":{"line":118,"column":20},"end":{"line":118,"column":27}},{"start":{"line":118,"column":31},"end":{"line":118,"column":35}}],"line":118},"11":{"loc":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"type":"if","locations":[{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},{"start":{"line":126,"column":4},"end":{"line":133,"column":5}}],"line":126},"12":{"loc":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"type":"if","locations":[{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},{"start":{"line":127,"column":6},"end":{"line":128,"column":26}}],"line":127},"13":{"loc":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"type":"if","locations":[{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},{"start":{"line":149,"column":2},"end":{"line":155,"column":3}}],"line":149},"14":{"loc":{"start":{"line":149,"column":6},"end":{"line":149,"column":48}},"type":"binary-expr","locations":[{"start":{"line":149,"column":6},"end":{"line":149,"column":26}},{"start":{"line":149,"column":30},"end":{"line":149,"column":48}}],"line":149},"15":{"loc":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"type":"switch","locations":[{"start":{"line":158,"column":4},"end":{"line":158,"column":16}},{"start":{"line":159,"column":4},"end":{"line":159,"column":19}},{"start":{"line":160,"column":4},"end":{"line":160,"column":16}},{"start":{"line":161,"column":4},"end":{"line":161,"column":24}},{"start":{"line":162,"column":4},"end":{"line":162,"column":27}},{"start":{"line":163,"column":4},"end":{"line":163,"column":23}},{"start":{"line":164,"column":4},"end":{"line":164,"column":21}},{"start":{"line":165,"column":4},"end":{"line":165,"column":16}},{"start":{"line":166,"column":4},"end":{"line":166,"column":26}},{"start":{"line":167,"column":4},"end":{"line":173,"column":11}},{"start":{"line":175,"column":4},"end":{"line":186,"column":11}},{"start":{"line":188,"column":4},"end":{"line":188,"column":26}},{"start":{"line":189,"column":4},"end":{"line":197,"column":11}},{"start":{"line":199,"column":4},"end":{"line":208,"column":11}},{"start":{"line":210,"column":4},"end":{"line":210,"column":31}},{"start":{"line":211,"column":4},"end":{"line":220,"column":11}},{"start":{"line":222,"column":4},"end":{"line":228,"column":11}}],"line":157},"16":{"loc":{"start":{"line":179,"column":23},"end":{"line":179,"column":41}},"type":"binary-expr","locations":[{"start":{"line":179,"column":23},"end":{"line":179,"column":35}},{"start":{"line":179,"column":39},"end":{"line":179,"column":41}}],"line":179},"17":{"loc":{"start":{"line":203,"column":25},"end":{"line":203,"column":45}},"type":"binary-expr","locations":[{"start":{"line":203,"column":25},"end":{"line":203,"column":39}},{"start":{"line":203,"column":43},"end":{"line":203,"column":45}}],"line":203},"18":{"loc":{"start":{"line":215,"column":25},"end":{"line":215,"column":45}},"type":"binary-expr","locations":[{"start":{"line":215,"column":25},"end":{"line":215,"column":39}},{"start":{"line":215,"column":43},"end":{"line":215,"column":45}}],"line":215},"19":{"loc":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"type":"if","locations":[{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},{"start":{"line":232,"column":2},"end":{"line":241,"column":3}}],"line":232},"20":{"loc":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"type":"if","locations":[{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},{"start":{"line":246,"column":2},"end":{"line":250,"column":3}}],"line":246},"21":{"loc":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"type":"if","locations":[{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},{"start":{"line":252,"column":2},"end":{"line":252,"column":35}}],"line":252},"22":{"loc":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"type":"if","locations":[{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},{"start":{"line":254,"column":2},"end":{"line":256,"column":3}}],"line":254},"23":{"loc":{"start":{"line":254,"column":6},"end":{"line":254,"column":58}},"type":"binary-expr","locations":[{"start":{"line":254,"column":6},"end":{"line":254,"column":27}},{"start":{"line":254,"column":31},"end":{"line":254,"column":58}}],"line":254},"24":{"loc":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"type":"if","locations":[{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},{"start":{"line":260,"column":2},"end":{"line":262,"column":3}}],"line":260},"25":{"loc":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"type":"if","locations":[{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},{"start":{"line":274,"column":2},"end":{"line":276,"column":3}}],"line":274},"26":{"loc":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"type":"if","locations":[{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},{"start":{"line":281,"column":2},"end":{"line":284,"column":3}}],"line":281}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":1,"32":0,"33":0,"34":0,"35":0,"36":1,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":1,"46":0,"47":0,"48":1,"49":1,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":1,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"4a8f51a3a12b59eb69694618530032a813fbf8cb","contentHash":"d347e73abcd3109143efee20401d9f0bfc6d68a4a6323bd4559ada44c741786a"},"/Users/isaacs/dev/js/tar/lib/buffer-entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/buffer-entry.js","statementMap":{"0":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"1":{"start":{"line":10,"column":15},"end":{"line":10,"column":34}},"2":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"3":{"start":{"line":14,"column":2},"end":{"line":14,"column":30}},"4":{"start":{"line":15,"column":2},"end":{"line":15,"column":44}},"5":{"start":{"line":16,"column":2},"end":{"line":16,"column":18}},"6":{"start":{"line":17,"column":2},"end":{"line":17,"column":16}},"7":{"start":{"line":18,"column":2},"end":{"line":20,"column":4}},"8":{"start":{"line":19,"column":4},"end":{"line":19,"column":52}},"9":{"start":{"line":23,"column":0},"end":{"line":23,"column":28}},"10":{"start":{"line":26,"column":0},"end":{"line":30,"column":1}},"11":{"start":{"line":27,"column":2},"end":{"line":27,"column":36}},"12":{"start":{"line":28,"column":2},"end":{"line":28,"column":26}},"13":{"start":{"line":29,"column":2},"end":{"line":29,"column":37}}},"fnMap":{"0":{"name":"BufferEntry","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":20}},"loc":{"start":{"line":13,"column":24},"end":{"line":21,"column":1}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":17},"end":{"line":18,"column":18}},"loc":{"start":{"line":18,"column":29},"end":{"line":20,"column":3}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":26,"column":30},"end":{"line":26,"column":31}},"loc":{"start":{"line":26,"column":43},"end":{"line":30,"column":1}},"line":26}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":1,"10":1,"11":0,"12":0,"13":0},"f":{"0":0,"1":0,"2":0},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"d8ad66df900443c9c9d8aefe5fc126a55ba268ec","contentHash":"25e5b3c51e476fcffac7affa191a0ed0f54d64d3d3b760e887bd45ba08fffa65"},"/Users/isaacs/dev/js/tar/lib/extended-header.js":{"path":"/Users/isaacs/dev/js/tar/lib/extended-header.js","statementMap":{"0":{"start":{"line":9,"column":0},"end":{"line":9,"column":31}},"1":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"2":{"start":{"line":12,"column":15},"end":{"line":12,"column":34}},"3":{"start":{"line":13,"column":10},"end":{"line":13,"column":30}},"4":{"start":{"line":14,"column":14},"end":{"line":14,"column":25}},"5":{"start":{"line":15,"column":15},"end":{"line":17,"column":42}},"6":{"start":{"line":20,"column":2},"end":{"line":20,"column":30}},"7":{"start":{"line":21,"column":2},"end":{"line":21,"column":30}},"8":{"start":{"line":22,"column":2},"end":{"line":22,"column":18}},"9":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"10":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"11":{"start":{"line":25,"column":2},"end":{"line":25,"column":20}},"12":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"13":{"start":{"line":27,"column":2},"end":{"line":27,"column":19}},"14":{"start":{"line":28,"column":2},"end":{"line":28,"column":19}},"15":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"16":{"start":{"line":30,"column":2},"end":{"line":30,"column":16}},"17":{"start":{"line":33,"column":0},"end":{"line":33,"column":31}},"18":{"start":{"line":34,"column":0},"end":{"line":34,"column":39}},"19":{"start":{"line":36,"column":8},"end":{"line":36,"column":9}},"20":{"start":{"line":37,"column":13},"end":{"line":37,"column":39}},"21":{"start":{"line":38,"column":11},"end":{"line":38,"column":28}},"22":{"start":{"line":39,"column":11},"end":{"line":39,"column":28}},"23":{"start":{"line":40,"column":11},"end":{"line":40,"column":28}},"24":{"start":{"line":41,"column":11},"end":{"line":41,"column":28}},"25":{"start":{"line":43,"column":0},"end":{"line":45,"column":2}},"26":{"start":{"line":44,"column":2},"end":{"line":44,"column":31}},"27":{"start":{"line":47,"column":0},"end":{"line":47,"column":16}},"28":{"start":{"line":50,"column":9},"end":{"line":50,"column":26}},"29":{"start":{"line":51,"column":9},"end":{"line":51,"column":26}},"30":{"start":{"line":52,"column":12},"end":{"line":52,"column":29}},"31":{"start":{"line":53,"column":8},"end":{"line":53,"column":25}},"32":{"start":{"line":54,"column":8},"end":{"line":54,"column":25}},"33":{"start":{"line":55,"column":8},"end":{"line":55,"column":25}},"34":{"start":{"line":56,"column":8},"end":{"line":56,"column":25}},"35":{"start":{"line":57,"column":12},"end":{"line":57,"column":29}},"36":{"start":{"line":58,"column":9},"end":{"line":58,"column":26}},"37":{"start":{"line":59,"column":9},"end":{"line":59,"column":27}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"39":{"start":{"line":62,"column":27},"end":{"line":62,"column":33}},"40":{"start":{"line":64,"column":2},"end":{"line":130,"column":3}},"41":{"start":{"line":64,"column":16},"end":{"line":64,"column":17}},"42":{"start":{"line":64,"column":23},"end":{"line":64,"column":31}},"43":{"start":{"line":69,"column":12},"end":{"line":69,"column":16}},"44":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"45":{"start":{"line":72,"column":6},"end":{"line":72,"column":53}},"46":{"start":{"line":73,"column":6},"end":{"line":73,"column":12}},"47":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"48":{"start":{"line":77,"column":16},"end":{"line":77,"column":22}},"49":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"50":{"start":{"line":82,"column":10},"end":{"line":82,"column":27}},"51":{"start":{"line":84,"column":10},"end":{"line":84,"column":73}},"52":{"start":{"line":85,"column":10},"end":{"line":85,"column":34}},"53":{"start":{"line":86,"column":10},"end":{"line":86,"column":18}},"54":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"55":{"start":{"line":89,"column":10},"end":{"line":89,"column":68}},"56":{"start":{"line":90,"column":10},"end":{"line":90,"column":16}},"57":{"start":{"line":92,"column":8},"end":{"line":92,"column":29}},"58":{"start":{"line":93,"column":8},"end":{"line":93,"column":16}},"59":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"60":{"start":{"line":98,"column":10},"end":{"line":98,"column":27}},"61":{"start":{"line":99,"column":10},"end":{"line":99,"column":57}},"62":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"63":{"start":{"line":100,"column":35},"end":{"line":100,"column":66}},"64":{"start":{"line":101,"column":10},"end":{"line":101,"column":33}},"65":{"start":{"line":102,"column":10},"end":{"line":102,"column":18}},"66":{"start":{"line":104,"column":8},"end":{"line":104,"column":28}},"67":{"start":{"line":105,"column":8},"end":{"line":105,"column":16}},"68":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"69":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"70":{"start":{"line":112,"column":12},"end":{"line":112,"column":55}},"71":{"start":{"line":113,"column":12},"end":{"line":113,"column":18}},"72":{"start":{"line":115,"column":20},"end":{"line":115,"column":55}},"73":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"74":{"start":{"line":117,"column":12},"end":{"line":117,"column":33}},"75":{"start":{"line":119,"column":10},"end":{"line":119,"column":38}},"76":{"start":{"line":121,"column":10},"end":{"line":121,"column":33}},"77":{"start":{"line":122,"column":10},"end":{"line":122,"column":28}},"78":{"start":{"line":123,"column":10},"end":{"line":123,"column":25}},"79":{"start":{"line":124,"column":10},"end":{"line":124,"column":29}},"80":{"start":{"line":125,"column":10},"end":{"line":125,"column":18}},"81":{"start":{"line":127,"column":8},"end":{"line":127,"column":28}},"82":{"start":{"line":128,"column":8},"end":{"line":128,"column":16}},"83":{"start":{"line":134,"column":2},"end":{"line":136,"column":42}},"84":{"start":{"line":138,"column":2},"end":{"line":138,"column":15}},"85":{"start":{"line":139,"column":2},"end":{"line":139,"column":16}}},"fnMap":{"0":{"name":"ExtendedHeader","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":23}},"loc":{"start":{"line":19,"column":27},"end":{"line":31,"column":1}},"line":19},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":28},"end":{"line":43,"column":29}},"loc":{"start":{"line":43,"column":41},"end":{"line":45,"column":1}},"line":43},"2":{"name":"parse","decl":{"start":{"line":61,"column":9},"end":{"line":61,"column":14}},"loc":{"start":{"line":61,"column":19},"end":{"line":131,"column":1}},"line":61},"3":{"name":"error","decl":{"start":{"line":133,"column":9},"end":{"line":133,"column":14}},"loc":{"start":{"line":133,"column":25},"end":{"line":140,"column":1}},"line":133}},"branchMap":{"0":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},{"start":{"line":62,"column":2},"end":{"line":62,"column":33}}],"line":62},"1":{"loc":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},{"start":{"line":71,"column":4},"end":{"line":74,"column":5}}],"line":71},"2":{"loc":{"start":{"line":71,"column":8},"end":{"line":71,"column":54}},"type":"binary-expr","locations":[{"start":{"line":71,"column":8},"end":{"line":71,"column":23}},{"start":{"line":71,"column":27},"end":{"line":71,"column":54}}],"line":71},"3":{"loc":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"type":"switch","locations":[{"start":{"line":77,"column":6},"end":{"line":77,"column":22}},{"start":{"line":79,"column":6},"end":{"line":93,"column":16}},{"start":{"line":95,"column":6},"end":{"line":105,"column":16}},{"start":{"line":107,"column":6},"end":{"line":128,"column":16}}],"line":76},"4":{"loc":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},{"start":{"line":81,"column":8},"end":{"line":87,"column":9}}],"line":81},"5":{"loc":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},{"start":{"line":88,"column":8},"end":{"line":91,"column":9}}],"line":88},"6":{"loc":{"start":{"line":88,"column":12},"end":{"line":88,"column":28}},"type":"binary-expr","locations":[{"start":{"line":88,"column":12},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":28}}],"line":88},"7":{"loc":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"type":"if","locations":[{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},{"start":{"line":97,"column":8},"end":{"line":103,"column":9}}],"line":97},"8":{"loc":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"type":"if","locations":[{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},{"start":{"line":100,"column":10},"end":{"line":100,"column":66}}],"line":100},"9":{"loc":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},{"start":{"line":109,"column":8},"end":{"line":126,"column":9}}],"line":109},"10":{"loc":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"type":"if","locations":[{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},{"start":{"line":111,"column":10},"end":{"line":114,"column":11}}],"line":111},"11":{"loc":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"type":"if","locations":[{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},{"start":{"line":116,"column":10},"end":{"line":118,"column":11}}],"line":116}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":4,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0},"f":{"0":0,"1":4,"2":0,"3":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0,0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"77cb382c69a46833a08275dbc55bf34db0dcd796","contentHash":"78a790af1726a774425fb478f1423068fe64414b747d89b597baf45139e7ae3d"},"/Users/isaacs/dev/js/tar/lib/extract.js":{"path":"/Users/isaacs/dev/js/tar/lib/extract.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"1":{"start":{"line":5,"column":10},"end":{"line":5,"column":30}},"2":{"start":{"line":6,"column":14},"end":{"line":6,"column":32}},"3":{"start":{"line":7,"column":15},"end":{"line":7,"column":34}},"4":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"6":{"start":{"line":11,"column":34},"end":{"line":11,"column":58}},"7":{"start":{"line":12,"column":2},"end":{"line":12,"column":23}},"8":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"9":{"start":{"line":15,"column":4},"end":{"line":15,"column":25}},"10":{"start":{"line":19,"column":2},"end":{"line":19,"column":59}},"11":{"start":{"line":20,"column":2},"end":{"line":20,"column":25}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":26}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"15":{"start":{"line":25,"column":38},"end":{"line":25,"column":52}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":34}},"17":{"start":{"line":29,"column":2},"end":{"line":29,"column":14}},"18":{"start":{"line":30,"column":11},"end":{"line":30,"column":15}},"19":{"start":{"line":35,"column":2},"end":{"line":60,"column":4}},"20":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"21":{"start":{"line":39,"column":14},"end":{"line":39,"column":63}},"22":{"start":{"line":40,"column":6},"end":{"line":40,"column":39}},"23":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"24":{"start":{"line":42,"column":17},"end":{"line":42,"column":70}},"25":{"start":{"line":43,"column":8},"end":{"line":43,"column":50}},"26":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"27":{"start":{"line":47,"column":6},"end":{"line":48,"column":66}},"28":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"29":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"30":{"start":{"line":53,"column":21},"end":{"line":53,"column":41}},"31":{"start":{"line":54,"column":19},"end":{"line":54,"column":56}},"32":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"33":{"start":{"line":56,"column":8},"end":{"line":56,"column":65}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":54}},"35":{"start":{"line":62,"column":2},"end":{"line":65,"column":4}},"36":{"start":{"line":63,"column":4},"end":{"line":63,"column":36}},"37":{"start":{"line":64,"column":4},"end":{"line":64,"column":15}},"38":{"start":{"line":67,"column":2},"end":{"line":69,"column":4}},"39":{"start":{"line":68,"column":4},"end":{"line":68,"column":25}},"40":{"start":{"line":71,"column":2},"end":{"line":73,"column":4}},"41":{"start":{"line":72,"column":4},"end":{"line":72,"column":20}},"42":{"start":{"line":79,"column":2},"end":{"line":84,"column":4}},"43":{"start":{"line":81,"column":4},"end":{"line":81,"column":21}},"44":{"start":{"line":82,"column":4},"end":{"line":82,"column":18}},"45":{"start":{"line":83,"column":4},"end":{"line":83,"column":20}},"46":{"start":{"line":87,"column":0},"end":{"line":87,"column":28}},"47":{"start":{"line":89,"column":0},"end":{"line":94,"column":1}},"48":{"start":{"line":90,"column":11},"end":{"line":90,"column":15}},"49":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"50":{"start":{"line":91,"column":31},"end":{"line":91,"column":57}},"51":{"start":{"line":92,"column":2},"end":{"line":92,"column":15}}},"fnMap":{"0":{"name":"Extract","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":16}},"loc":{"start":{"line":10,"column":24},"end":{"line":85,"column":1}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":35,"column":17},"end":{"line":35,"column":18}},"loc":{"start":{"line":35,"column":34},"end":{"line":60,"column":3}},"line":35},"2":{"name":"(anonymous_2)","decl":{"start":{"line":62,"column":24},"end":{"line":62,"column":25}},"loc":{"start":{"line":62,"column":36},"end":{"line":65,"column":3}},"line":62},"3":{"name":"(anonymous_3)","decl":{"start":{"line":67,"column":24},"end":{"line":67,"column":25}},"loc":{"start":{"line":67,"column":38},"end":{"line":69,"column":3}},"line":67},"4":{"name":"(anonymous_4)","decl":{"start":{"line":71,"column":24},"end":{"line":71,"column":25}},"loc":{"start":{"line":71,"column":35},"end":{"line":73,"column":3}},"line":71},"5":{"name":"(anonymous_5)","decl":{"start":{"line":79,"column":24},"end":{"line":79,"column":25}},"loc":{"start":{"line":79,"column":36},"end":{"line":84,"column":3}},"line":79},"6":{"name":"(anonymous_6)","decl":{"start":{"line":89,"column":31},"end":{"line":89,"column":32}},"loc":{"start":{"line":89,"column":43},"end":{"line":94,"column":1}},"line":89}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},{"start":{"line":11,"column":2},"end":{"line":11,"column":58}}],"line":11},"1":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"2":{"loc":{"start":{"line":19,"column":14},"end":{"line":19,"column":59}},"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":23}},{"start":{"line":19,"column":27},"end":{"line":19,"column":59}}],"line":19},"3":{"loc":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"type":"if","locations":[{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},{"start":{"line":25,"column":2},"end":{"line":25,"column":52}}],"line":25},"4":{"loc":{"start":{"line":25,"column":6},"end":{"line":25,"column":36}},"type":"binary-expr","locations":[{"start":{"line":25,"column":6},"end":{"line":25,"column":17}},{"start":{"line":25,"column":21},"end":{"line":25,"column":36}}],"line":25},"5":{"loc":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},{"start":{"line":38,"column":4},"end":{"line":45,"column":5}}],"line":38},"6":{"loc":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"type":"if","locations":[{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},{"start":{"line":41,"column":6},"end":{"line":44,"column":7}}],"line":41},"7":{"loc":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},{"start":{"line":46,"column":4},"end":{"line":49,"column":5}}],"line":46},"8":{"loc":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},{"start":{"line":51,"column":4},"end":{"line":59,"column":5}}],"line":51},"9":{"loc":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"type":"binary-expr","locations":[{"start":{"line":52,"column":15},"end":{"line":52,"column":39}},{"start":{"line":52,"column":43},"end":{"line":52,"column":45}}],"line":52},"10":{"loc":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"type":"if","locations":[{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},{"start":{"line":55,"column":6},"end":{"line":57,"column":7}}],"line":55},"11":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},{"start":{"line":91,"column":2},"end":{"line":91,"column":57}}],"line":91},"12":{"loc":{"start":{"line":91,"column":6},"end":{"line":91,"column":29}},"type":"binary-expr","locations":[{"start":{"line":91,"column":6},"end":{"line":91,"column":16}},{"start":{"line":91,"column":20},"end":{"line":91,"column":29}}],"line":91}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":1,"47":1,"48":0,"49":0,"50":0,"51":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3fb9f60facc409fe944dc36bd2e14fc6153e403d","contentHash":"3d9485ca58c6c768b022a39d276296b53647ccf39986885459406e933921c962"}} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/fdecfc06-a944-4897-9530-e08f62883fc1.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/fdecfc06-a944-4897-9530-e08f62883fc1.json
deleted file mode 100644
index 18f79cb..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/fdecfc06-a944-4897-9530-e08f62883fc1.json
+++ /dev/null
@@ -1 +0,0 @@
-{"/Users/isaacs/dev/js/tar/lib/pack.js":{"path":"/Users/isaacs/dev/js/tar/lib/pack.js","statementMap":{"0":{"start":{"line":4,"column":0},"end":{"line":4,"column":21}},"1":{"start":{"line":6,"column":18},"end":{"line":6,"column":46}},"2":{"start":{"line":7,"column":13},"end":{"line":7,"column":37}},"3":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"4":{"start":{"line":9,"column":15},"end":{"line":9,"column":34}},"5":{"start":{"line":10,"column":25},"end":{"line":10,"column":61}},"6":{"start":{"line":11,"column":14},"end":{"line":11,"column":40}},"7":{"start":{"line":12,"column":10},"end":{"line":12,"column":25}},"8":{"start":{"line":14,"column":0},"end":{"line":14,"column":41}},"9":{"start":{"line":14,"column":13},"end":{"line":14,"column":14}},"10":{"start":{"line":14,"column":31},"end":{"line":14,"column":41}},"11":{"start":{"line":16,"column":0},"end":{"line":16,"column":22}},"12":{"start":{"line":20,"column":11},"end":{"line":20,"column":15}},"13":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"14":{"start":{"line":21,"column":29},"end":{"line":21,"column":51}},"15":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"16":{"start":{"line":23,"column":13},"end":{"line":23,"column":52}},"17":{"start":{"line":24,"column":7},"end":{"line":24,"column":32}},"18":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"19":{"start":{"line":28,"column":2},"end":{"line":28,"column":20}},"20":{"start":{"line":29,"column":2},"end":{"line":29,"column":20}},"21":{"start":{"line":30,"column":2},"end":{"line":30,"column":17}},"22":{"start":{"line":32,"column":2},"end":{"line":32,"column":25}},"23":{"start":{"line":33,"column":2},"end":{"line":33,"column":24}},"24":{"start":{"line":35,"column":2},"end":{"line":35,"column":21}},"25":{"start":{"line":36,"column":2},"end":{"line":43,"column":4}},"26":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"27":{"start":{"line":37,"column":35},"end":{"line":37,"column":41}},"28":{"start":{"line":38,"column":4},"end":{"line":38,"column":22}},"29":{"start":{"line":39,"column":4},"end":{"line":41,"column":6}},"30":{"start":{"line":40,"column":6},"end":{"line":40,"column":25}},"31":{"start":{"line":42,"column":4},"end":{"line":42,"column":15}},"32":{"start":{"line":46,"column":0},"end":{"line":57,"column":1}},"33":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"34":{"start":{"line":48,"column":23},"end":{"line":48,"column":29}},"35":{"start":{"line":49,"column":2},"end":{"line":49,"column":24}},"36":{"start":{"line":51,"column":11},"end":{"line":51,"column":15}},"37":{"start":{"line":52,"column":2},"end":{"line":56,"column":10}},"38":{"start":{"line":54,"column":6},"end":{"line":54,"column":24}},"39":{"start":{"line":59,"column":0},"end":{"line":69,"column":1}},"40":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"41":{"start":{"line":60,"column":40},"end":{"line":60,"column":68}},"42":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"43":{"start":{"line":62,"column":19},"end":{"line":62,"column":72}},"44":{"start":{"line":64,"column":2},"end":{"line":64,"column":17}},"45":{"start":{"line":65,"column":2},"end":{"line":65,"column":27}},"46":{"start":{"line":66,"column":2},"end":{"line":66,"column":17}},"47":{"start":{"line":67,"column":2},"end":{"line":67,"column":43}},"48":{"start":{"line":68,"column":2},"end":{"line":68,"column":25}},"49":{"start":{"line":71,"column":0},"end":{"line":75,"column":1}},"50":{"start":{"line":72,"column":2},"end":{"line":72,"column":21}},"51":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"52":{"start":{"line":73,"column":26},"end":{"line":73,"column":52}},"53":{"start":{"line":74,"column":2},"end":{"line":74,"column":20}},"54":{"start":{"line":77,"column":0},"end":{"line":82,"column":1}},"55":{"start":{"line":78,"column":2},"end":{"line":78,"column":22}},"56":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"57":{"start":{"line":79,"column":26},"end":{"line":79,"column":53}},"58":{"start":{"line":80,"column":2},"end":{"line":80,"column":21}},"59":{"start":{"line":81,"column":2},"end":{"line":81,"column":17}},"60":{"start":{"line":84,"column":0},"end":{"line":88,"column":1}},"61":{"start":{"line":85,"column":2},"end":{"line":85,"column":20}},"62":{"start":{"line":86,"column":2},"end":{"line":86,"column":24}},"63":{"start":{"line":87,"column":2},"end":{"line":87,"column":17}},"64":{"start":{"line":90,"column":0},"end":{"line":233,"column":1}},"65":{"start":{"line":91,"column":11},"end":{"line":91,"column":15}},"66":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"67":{"start":{"line":93,"column":4},"end":{"line":93,"column":10}},"68":{"start":{"line":96,"column":14},"end":{"line":96,"column":32}},"69":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"70":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"71":{"start":{"line":100,"column":6},"end":{"line":100,"column":22}},"72":{"start":{"line":102,"column":4},"end":{"line":102,"column":10}},"73":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"74":{"start":{"line":107,"column":4},"end":{"line":107,"column":29}},"75":{"start":{"line":108,"column":4},"end":{"line":111,"column":6}},"76":{"start":{"line":110,"column":6},"end":{"line":110,"column":19}},"77":{"start":{"line":112,"column":4},"end":{"line":112,"column":10}},"78":{"start":{"line":115,"column":2},"end":{"line":115,"column":23}},"79":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"80":{"start":{"line":119,"column":4},"end":{"line":119,"column":24}},"81":{"start":{"line":120,"column":4},"end":{"line":120,"column":24}},"82":{"start":{"line":121,"column":4},"end":{"line":121,"column":18}},"83":{"start":{"line":122,"column":4},"end":{"line":122,"column":20}},"84":{"start":{"line":123,"column":4},"end":{"line":123,"column":10}},"85":{"start":{"line":134,"column":13},"end":{"line":134,"column":53}},"86":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"87":{"start":{"line":137,"column":4},"end":{"line":137,"column":27}},"88":{"start":{"line":140,"column":15},"end":{"line":140,"column":17}},"89":{"start":{"line":142,"column":2},"end":{"line":144,"column":4}},"90":{"start":{"line":143,"column":4},"end":{"line":143,"column":30}},"91":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"92":{"start":{"line":146,"column":25},"end":{"line":146,"column":52}},"93":{"start":{"line":148,"column":2},"end":{"line":148,"column":53}},"94":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"95":{"start":{"line":152,"column":4},"end":{"line":152,"column":49}},"96":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"97":{"start":{"line":156,"column":4},"end":{"line":156,"column":29}},"98":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"99":{"start":{"line":161,"column":6},"end":{"line":161,"column":12}},"100":{"start":{"line":164,"column":6},"end":{"line":164,"column":24}},"101":{"start":{"line":165,"column":6},"end":{"line":165,"column":21}},"102":{"start":{"line":166,"column":6},"end":{"line":166,"column":11}},"103":{"start":{"line":169,"column":15},"end":{"line":169,"column":69}},"104":{"start":{"line":170,"column":6},"end":{"line":170,"column":54}},"105":{"start":{"line":171,"column":6},"end":{"line":171,"column":21}},"106":{"start":{"line":172,"column":6},"end":{"line":172,"column":11}},"107":{"start":{"line":175,"column":15},"end":{"line":175,"column":69}},"108":{"start":{"line":176,"column":6},"end":{"line":176,"column":74}},"109":{"start":{"line":177,"column":6},"end":{"line":177,"column":21}},"110":{"start":{"line":178,"column":6},"end":{"line":178,"column":11}},"111":{"start":{"line":187,"column":15},"end":{"line":187,"column":53}},"112":{"start":{"line":189,"column":2},"end":{"line":189,"column":20}},"113":{"start":{"line":195,"column":2},"end":{"line":197,"column":4}},"114":{"start":{"line":196,"column":4},"end":{"line":196,"column":22}},"115":{"start":{"line":199,"column":2},"end":{"line":205,"column":4}},"116":{"start":{"line":200,"column":4},"end":{"line":202,"column":5}},"117":{"start":{"line":201,"column":6},"end":{"line":201,"column":50}},"118":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"119":{"start":{"line":204,"column":33},"end":{"line":204,"column":44}},"120":{"start":{"line":206,"column":2},"end":{"line":206,"column":31}},"121":{"start":{"line":208,"column":14},"end":{"line":208,"column":19}},"122":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"123":{"start":{"line":210,"column":15},"end":{"line":210,"column":21}},"124":{"start":{"line":211,"column":4},"end":{"line":211,"column":16}},"125":{"start":{"line":215,"column":4},"end":{"line":215,"column":27}},"126":{"start":{"line":216,"column":4},"end":{"line":216,"column":26}},"127":{"start":{"line":217,"column":4},"end":{"line":217,"column":17}},"128":{"start":{"line":220,"column":2},"end":{"line":223,"column":4}},"129":{"start":{"line":222,"column":4},"end":{"line":222,"column":24}},"130":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"131":{"start":{"line":229,"column":4},"end":{"line":229,"column":21}},"132":{"start":{"line":232,"column":2},"end":{"line":232,"column":20}},"133":{"start":{"line":235,"column":0},"end":{"line":235,"column":39}},"134":{"start":{"line":236,"column":0},"end":{"line":236,"column":37}}},"fnMap":{"0":{"name":"Pack","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":13}},"loc":{"start":{"line":18,"column":22},"end":{"line":44,"column":1}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":36,"column":16},"end":{"line":36,"column":17}},"loc":{"start":{"line":36,"column":31},"end":{"line":43,"column":3}},"line":36},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":18},"end":{"line":39,"column":19}},"loc":{"start":{"line":39,"column":30},"end":{"line":41,"column":5}},"line":39},"3":{"name":"(anonymous_3)","decl":{"start":{"line":46,"column":27},"end":{"line":46,"column":28}},"loc":{"start":{"line":46,"column":44},"end":{"line":57,"column":1}},"line":46},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":29},"end":{"line":55,"column":5}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":59,"column":21},"end":{"line":59,"column":22}},"loc":{"start":{"line":59,"column":39},"end":{"line":69,"column":1}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":71,"column":23},"end":{"line":71,"column":24}},"loc":{"start":{"line":71,"column":35},"end":{"line":75,"column":1}},"line":71},"7":{"name":"(anonymous_7)","decl":{"start":{"line":77,"column":24},"end":{"line":77,"column":25}},"loc":{"start":{"line":77,"column":36},"end":{"line":82,"column":1}},"line":77},"8":{"name":"(anonymous_8)","decl":{"start":{"line":84,"column":21},"end":{"line":84,"column":22}},"loc":{"start":{"line":84,"column":33},"end":{"line":88,"column":1}},"line":84},"9":{"name":"(anonymous_9)","decl":{"start":{"line":90,"column":26},"end":{"line":90,"column":27}},"loc":{"start":{"line":90,"column":38},"end":{"line":233,"column":1}},"line":90},"10":{"name":"(anonymous_10)","decl":{"start":{"line":108,"column":22},"end":{"line":108,"column":23}},"loc":{"start":{"line":108,"column":34},"end":{"line":111,"column":5}},"line":108},"11":{"name":"(anonymous_11)","decl":{"start":{"line":142,"column":41},"end":{"line":142,"column":42}},"loc":{"start":{"line":142,"column":54},"end":{"line":144,"column":3}},"line":142},"12":{"name":"(anonymous_12)","decl":{"start":{"line":195,"column":20},"end":{"line":195,"column":21}},"loc":{"start":{"line":195,"column":33},"end":{"line":197,"column":3}},"line":195},"13":{"name":"(anonymous_13)","decl":{"start":{"line":199,"column":22},"end":{"line":199,"column":23}},"loc":{"start":{"line":199,"column":34},"end":{"line":205,"column":3}},"line":199},"14":{"name":"(anonymous_14)","decl":{"start":{"line":200,"column":30},"end":{"line":200,"column":31}},"loc":{"start":{"line":200,"column":42},"end":{"line":202,"column":5}},"line":200},"15":{"name":"nextEntry","decl":{"start":{"line":209,"column":11},"end":{"line":209,"column":20}},"loc":{"start":{"line":209,"column":24},"end":{"line":218,"column":3}},"line":209},"16":{"name":"(anonymous_16)","decl":{"start":{"line":220,"column":21},"end":{"line":220,"column":22}},"loc":{"start":{"line":220,"column":35},"end":{"line":223,"column":3}},"line":220},"17":{"name":"(anonymous_17)","decl":{"start":{"line":235,"column":25},"end":{"line":235,"column":26}},"loc":{"start":{"line":235,"column":37},"end":{"line":235,"column":39}},"line":235},"18":{"name":"(anonymous_18)","decl":{"start":{"line":236,"column":23},"end":{"line":236,"column":24}},"loc":{"start":{"line":236,"column":35},"end":{"line":236,"column":37}},"line":236}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},"type":"if","locations":[{"start":{"line":21,"column":2},"end":{"line":21,"column":51}},{"start":{"line":21,"column":2},"end":{"line":21,"column":51}}],"line":21},"1":{"loc":{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},"type":"if","locations":[{"start":{"line":23,"column":2},"end":{"line":24,"column":32}},{"start":{"line":23,"column":2},"end":{"line":24,"column":32}}],"line":23},"2":{"loc":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},{"start":{"line":37,"column":4},"end":{"line":37,"column":41}}],"line":37},"3":{"loc":{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},"type":"if","locations":[{"start":{"line":48,"column":2},"end":{"line":48,"column":29}},{"start":{"line":48,"column":2},"end":{"line":48,"column":29}}],"line":48},"4":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":68}},{"start":{"line":60,"column":2},"end":{"line":60,"column":68}}],"line":60},"5":{"loc":{"start":{"line":60,"column":6},"end":{"line":60,"column":38}},"type":"binary-expr","locations":[{"start":{"line":60,"column":6},"end":{"line":60,"column":18}},{"start":{"line":60,"column":22},"end":{"line":60,"column":38}}],"line":60},"6":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":72}},{"start":{"line":62,"column":2},"end":{"line":62,"column":72}}],"line":62},"7":{"loc":{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":73,"column":52}},{"start":{"line":73,"column":2},"end":{"line":73,"column":52}}],"line":73},"8":{"loc":{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},"type":"if","locations":[{"start":{"line":79,"column":2},"end":{"line":79,"column":53}},{"start":{"line":79,"column":2},"end":{"line":79,"column":53}}],"line":79},"9":{"loc":{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},"type":"if","locations":[{"start":{"line":92,"column":2},"end":{"line":94,"column":3}},{"start":{"line":92,"column":2},"end":{"line":94,"column":3}}],"line":92},"10":{"loc":{"start":{"line":92,"column":6},"end":{"line":92,"column":34}},"type":"binary-expr","locations":[{"start":{"line":92,"column":6},"end":{"line":92,"column":16}},{"start":{"line":92,"column":20},"end":{"line":92,"column":34}}],"line":92},"11":{"loc":{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":103,"column":3}},{"start":{"line":98,"column":2},"end":{"line":103,"column":3}}],"line":98},"12":{"loc":{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":101,"column":5}},{"start":{"line":99,"column":4},"end":{"line":101,"column":5}}],"line":99},"13":{"loc":{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},"type":"if","locations":[{"start":{"line":105,"column":2},"end":{"line":113,"column":3}},{"start":{"line":105,"column":2},"end":{"line":113,"column":3}}],"line":105},"14":{"loc":{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},"type":"if","locations":[{"start":{"line":117,"column":2},"end":{"line":124,"column":3}},{"start":{"line":117,"column":2},"end":{"line":124,"column":3}}],"line":117},"15":{"loc":{"start":{"line":134,"column":27},"end":{"line":134,"column":46}},"type":"binary-expr","locations":[{"start":{"line":134,"column":27},"end":{"line":134,"column":37}},{"start":{"line":134,"column":41},"end":{"line":134,"column":46}}],"line":134},"16":{"loc":{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},"type":"if","locations":[{"start":{"line":135,"column":2},"end":{"line":138,"column":3}},{"start":{"line":135,"column":2},"end":{"line":138,"column":3}}],"line":135},"17":{"loc":{"start":{"line":135,"column":6},"end":{"line":135,"column":72}},"type":"binary-expr","locations":[{"start":{"line":135,"column":6},"end":{"line":135,"column":16}},{"start":{"line":135,"column":20},"end":{"line":135,"column":39}},{"start":{"line":135,"column":43},"end":{"line":135,"column":53}},{"start":{"line":135,"column":57},"end":{"line":135,"column":72}}],"line":135},"18":{"loc":{"start":{"line":142,"column":14},"end":{"line":142,"column":31}},"type":"binary-expr","locations":[{"start":{"line":142,"column":14},"end":{"line":142,"column":25}},{"start":{"line":142,"column":29},"end":{"line":142,"column":31}}],"line":142},"19":{"loc":{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},"type":"if","locations":[{"start":{"line":146,"column":2},"end":{"line":146,"column":52}},{"start":{"line":146,"column":2},"end":{"line":146,"column":52}}],"line":146},"20":{"loc":{"start":{"line":148,"column":36},"end":{"line":148,"column":52}},"type":"binary-expr","locations":[{"start":{"line":148,"column":36},"end":{"line":148,"column":46}},{"start":{"line":148,"column":50},"end":{"line":148,"column":52}}],"line":148},"21":{"loc":{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},"type":"if","locations":[{"start":{"line":151,"column":2},"end":{"line":153,"column":3}},{"start":{"line":151,"column":2},"end":{"line":153,"column":3}}],"line":151},"22":{"loc":{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},"type":"if","locations":[{"start":{"line":155,"column":2},"end":{"line":156,"column":29}},{"start":{"line":155,"column":2},"end":{"line":156,"column":29}}],"line":155},"23":{"loc":{"start":{"line":158,"column":2},"end":{"line":179,"column":3}},"type":"switch","locations":[{"start":{"line":160,"column":4},"end":{"line":161,"column":12}},{"start":{"line":163,"column":4},"end":{"line":166,"column":11}},{"start":{"line":168,"column":4},"end":{"line":172,"column":11}},{"start":{"line":174,"column":4},"end":{"line":178,"column":11}}],"line":158},"24":{"loc":{"start":{"line":170,"column":24},"end":{"line":170,"column":54}},"type":"binary-expr","locations":[{"start":{"line":170,"column":24},"end":{"line":170,"column":47}},{"start":{"line":170,"column":51},"end":{"line":170,"column":54}}],"line":170},"25":{"loc":{"start":{"line":176,"column":24},"end":{"line":176,"column":74}},"type":"binary-expr","locations":[{"start":{"line":176,"column":24},"end":{"line":176,"column":67}},{"start":{"line":176,"column":71},"end":{"line":176,"column":74}}],"line":176},"26":{"loc":{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},"type":"if","locations":[{"start":{"line":204,"column":4},"end":{"line":204,"column":44}},{"start":{"line":204,"column":4},"end":{"line":204,"column":44}}],"line":204},"27":{"loc":{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},"type":"if","locations":[{"start":{"line":210,"column":4},"end":{"line":210,"column":21}},{"start":{"line":210,"column":4},"end":{"line":210,"column":21}}],"line":210},"28":{"loc":{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},"type":"if","locations":[{"start":{"line":227,"column":2},"end":{"line":230,"column":3}},{"start":{"line":227,"column":2},"end":{"line":230,"column":3}}],"line":227}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":512,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":1,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":1,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":0,"51":0,"52":0,"53":0,"54":1,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":0,"63":0,"64":1,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":1,"134":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0,0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0,0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"8beb16ccde52e484aa1dd87f5ece33d696c808ab","contentHash":"7bb2b7ebe1111c0deefbf9a61d17bf9d2dbe951adb585db96f9d89663ce5909d"},"/Users/isaacs/dev/js/tar/lib/entry-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":28}},"1":{"start":{"line":3,"column":10},"end":{"line":3,"column":30}},"2":{"start":{"line":4,"column":16},"end":{"line":4,"column":38}},"3":{"start":{"line":5,"column":12},"end":{"line":5,"column":33}},"4":{"start":{"line":6,"column":15},"end":{"line":6,"column":34}},"5":{"start":{"line":7,"column":18},"end":{"line":7,"column":41}},"6":{"start":{"line":9,"column":13},"end":{"line":9,"column":37}},"7":{"start":{"line":10,"column":10},"end":{"line":10,"column":12}},"8":{"start":{"line":12,"column":0},"end":{"line":12,"column":29}},"9":{"start":{"line":15,"column":11},"end":{"line":15,"column":15}},"10":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"11":{"start":{"line":18,"column":4},"end":{"line":18,"column":33}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":20}},"13":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"14":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":35}},"16":{"start":{"line":28,"column":2},"end":{"line":30,"column":4}},"17":{"start":{"line":29,"column":4},"end":{"line":29,"column":22}},"18":{"start":{"line":32,"column":2},"end":{"line":34,"column":4}},"19":{"start":{"line":33,"column":4},"end":{"line":33,"column":20}},"20":{"start":{"line":36,"column":2},"end":{"line":39,"column":4}},"21":{"start":{"line":37,"column":4},"end":{"line":37,"column":18}},"22":{"start":{"line":38,"column":4},"end":{"line":38,"column":20}},"23":{"start":{"line":41,"column":2},"end":{"line":41,"column":18}},"24":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"25":{"start":{"line":43,"column":4},"end":{"line":43,"column":18}},"26":{"start":{"line":45,"column":2},"end":{"line":45,"column":25}},"27":{"start":{"line":46,"column":2},"end":{"line":46,"column":23}},"28":{"start":{"line":47,"column":2},"end":{"line":47,"column":22}},"29":{"start":{"line":49,"column":2},"end":{"line":49,"column":17}},"30":{"start":{"line":50,"column":2},"end":{"line":50,"column":23}},"31":{"start":{"line":51,"column":2},"end":{"line":51,"column":18}},"32":{"start":{"line":53,"column":2},"end":{"line":55,"column":4}},"33":{"start":{"line":54,"column":4},"end":{"line":54,"column":17}},"34":{"start":{"line":58,"column":0},"end":{"line":65,"column":1}},"35":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"36":{"start":{"line":60,"column":19},"end":{"line":60,"column":74}},"37":{"start":{"line":61,"column":2},"end":{"line":61,"column":22}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":17}},"39":{"start":{"line":63,"column":2},"end":{"line":63,"column":43}},"40":{"start":{"line":64,"column":2},"end":{"line":64,"column":25}},"41":{"start":{"line":67,"column":0},"end":{"line":74,"column":1}},"42":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"43":{"start":{"line":69,"column":9},"end":{"line":69,"column":29}},"44":{"start":{"line":70,"column":2},"end":{"line":70,"column":24}},"45":{"start":{"line":71,"column":2},"end":{"line":71,"column":20}},"46":{"start":{"line":72,"column":2},"end":{"line":72,"column":17}},"47":{"start":{"line":73,"column":2},"end":{"line":73,"column":43}},"48":{"start":{"line":76,"column":0},"end":{"line":80,"column":1}},"49":{"start":{"line":78,"column":2},"end":{"line":78,"column":21}},"50":{"start":{"line":79,"column":2},"end":{"line":79,"column":20}},"51":{"start":{"line":82,"column":0},"end":{"line":87,"column":1}},"52":{"start":{"line":84,"column":2},"end":{"line":84,"column":22}},"53":{"start":{"line":85,"column":2},"end":{"line":85,"column":21}},"54":{"start":{"line":86,"column":2},"end":{"line":86,"column":17}},"55":{"start":{"line":89,"column":0},"end":{"line":98,"column":1}},"56":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"57":{"start":{"line":91,"column":20},"end":{"line":91,"column":69}},"58":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"59":{"start":{"line":95,"column":20},"end":{"line":95,"column":30}},"60":{"start":{"line":97,"column":2},"end":{"line":97,"column":31}},"61":{"start":{"line":100,"column":0},"end":{"line":126,"column":1}},"62":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"63":{"start":{"line":102,"column":23},"end":{"line":102,"column":29}},"64":{"start":{"line":103,"column":2},"end":{"line":103,"column":24}},"65":{"start":{"line":105,"column":20},"end":{"line":105,"column":48}},"66":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"67":{"start":{"line":108,"column":13},"end":{"line":108,"column":17}},"68":{"start":{"line":110,"column":4},"end":{"line":111,"column":44}},"69":{"start":{"line":113,"column":4},"end":{"line":120,"column":12}},"70":{"start":{"line":115,"column":8},"end":{"line":115,"column":26}},"71":{"start":{"line":118,"column":8},"end":{"line":118,"column":28}},"72":{"start":{"line":124,"column":2},"end":{"line":124,"column":32}},"73":{"start":{"line":125,"column":2},"end":{"line":125,"column":21}},"74":{"start":{"line":128,"column":0},"end":{"line":167,"column":1}},"75":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"76":{"start":{"line":131,"column":4},"end":{"line":131,"column":18}},"77":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"78":{"start":{"line":136,"column":4},"end":{"line":136,"column":10}},"79":{"start":{"line":139,"column":2},"end":{"line":139,"column":25}},"80":{"start":{"line":141,"column":12},"end":{"line":141,"column":24}},"81":{"start":{"line":142,"column":2},"end":{"line":159,"column":3}},"82":{"start":{"line":142,"column":15},"end":{"line":142,"column":16}},"83":{"start":{"line":145,"column":12},"end":{"line":145,"column":18}},"84":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"85":{"start":{"line":147,"column":19},"end":{"line":147,"column":37}},"86":{"start":{"line":148,"column":9},"end":{"line":148,"column":30}},"87":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"88":{"start":{"line":152,"column":6},"end":{"line":152,"column":30}},"89":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"90":{"start":{"line":154,"column":8},"end":{"line":154,"column":30}},"91":{"start":{"line":155,"column":8},"end":{"line":155,"column":39}},"92":{"start":{"line":157,"column":6},"end":{"line":157,"column":12}},"93":{"start":{"line":162,"column":2},"end":{"line":162,"column":25}},"94":{"start":{"line":163,"column":2},"end":{"line":163,"column":26}},"95":{"start":{"line":166,"column":2},"end":{"line":166,"column":20}},"96":{"start":{"line":169,"column":0},"end":{"line":169,"column":46}}},"fnMap":{"0":{"name":"EntryWriter","decl":{"start":{"line":14,"column":9},"end":{"line":14,"column":20}},"loc":{"start":{"line":14,"column":29},"end":{"line":56,"column":1}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":28,"column":24},"end":{"line":28,"column":25}},"loc":{"start":{"line":28,"column":37},"end":{"line":30,"column":3}},"line":28},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":25},"end":{"line":32,"column":26}},"loc":{"start":{"line":32,"column":37},"end":{"line":34,"column":3}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":36,"column":23},"end":{"line":36,"column":24}},"loc":{"start":{"line":36,"column":35},"end":{"line":39,"column":3}},"line":36},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":17}},"loc":{"start":{"line":53,"column":28},"end":{"line":55,"column":3}},"line":53},"5":{"name":"(anonymous_5)","decl":{"start":{"line":58,"column":30},"end":{"line":58,"column":31}},"loc":{"start":{"line":58,"column":43},"end":{"line":65,"column":1}},"line":58},"6":{"name":"(anonymous_6)","decl":{"start":{"line":67,"column":28},"end":{"line":67,"column":29}},"loc":{"start":{"line":67,"column":41},"end":{"line":74,"column":1}},"line":67},"7":{"name":"(anonymous_7)","decl":{"start":{"line":76,"column":30},"end":{"line":76,"column":31}},"loc":{"start":{"line":76,"column":42},"end":{"line":80,"column":1}},"line":76},"8":{"name":"(anonymous_8)","decl":{"start":{"line":82,"column":31},"end":{"line":82,"column":32}},"loc":{"start":{"line":82,"column":43},"end":{"line":87,"column":1}},"line":82},"9":{"name":"(anonymous_9)","decl":{"start":{"line":89,"column":28},"end":{"line":89,"column":29}},"loc":{"start":{"line":89,"column":45},"end":{"line":98,"column":1}},"line":89},"10":{"name":"(anonymous_10)","decl":{"start":{"line":100,"column":32},"end":{"line":100,"column":33}},"loc":{"start":{"line":100,"column":44},"end":{"line":126,"column":1}},"line":100},"11":{"name":"(anonymous_11)","decl":{"start":{"line":114,"column":18},"end":{"line":114,"column":19}},"loc":{"start":{"line":114,"column":31},"end":{"line":116,"column":7}},"line":114},"12":{"name":"(anonymous_12)","decl":{"start":{"line":117,"column":19},"end":{"line":117,"column":20}},"loc":{"start":{"line":117,"column":33},"end":{"line":119,"column":7}},"line":117},"13":{"name":"(anonymous_13)","decl":{"start":{"line":128,"column":33},"end":{"line":128,"column":34}},"loc":{"start":{"line":128,"column":45},"end":{"line":167,"column":1}},"line":128},"14":{"name":"(anonymous_14)","decl":{"start":{"line":169,"column":32},"end":{"line":169,"column":33}},"loc":{"start":{"line":169,"column":44},"end":{"line":169,"column":46}},"line":169}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},{"start":{"line":17,"column":2},"end":{"line":19,"column":3}}],"line":17},"1":{"loc":{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},"type":"if","locations":[{"start":{"line":42,"column":2},"end":{"line":44,"column":3}},{"start":{"line":42,"column":2},"end":{"line":44,"column":3}}],"line":42},"2":{"loc":{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},"type":"if","locations":[{"start":{"line":60,"column":2},"end":{"line":60,"column":74}},{"start":{"line":60,"column":2},"end":{"line":60,"column":74}}],"line":60},"3":{"loc":{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},"type":"if","locations":[{"start":{"line":69,"column":2},"end":{"line":69,"column":29}},{"start":{"line":69,"column":2},"end":{"line":69,"column":29}}],"line":69},"4":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":69}},{"start":{"line":91,"column":2},"end":{"line":91,"column":69}}],"line":91},"5":{"loc":{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},"type":"if","locations":[{"start":{"line":95,"column":2},"end":{"line":95,"column":30}},{"start":{"line":95,"column":2},"end":{"line":95,"column":30}}],"line":95},"6":{"loc":{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},"type":"if","locations":[{"start":{"line":102,"column":2},"end":{"line":102,"column":29}},{"start":{"line":102,"column":2},"end":{"line":102,"column":29}}],"line":102},"7":{"loc":{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},"type":"if","locations":[{"start":{"line":107,"column":2},"end":{"line":121,"column":3}},{"start":{"line":107,"column":2},"end":{"line":121,"column":3}}],"line":107},"8":{"loc":{"start":{"line":107,"column":6},"end":{"line":107,"column":44}},"type":"binary-expr","locations":[{"start":{"line":107,"column":6},"end":{"line":107,"column":29}},{"start":{"line":107,"column":33},"end":{"line":107,"column":44}}],"line":107},"9":{"loc":{"start":{"line":110,"column":27},"end":{"line":111,"column":44}},"type":"binary-expr","locations":[{"start":{"line":110,"column":27},"end":{"line":110,"column":47}},{"start":{"line":111,"column":6},"end":{"line":111,"column":44}}],"line":110},"10":{"loc":{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},"type":"if","locations":[{"start":{"line":130,"column":2},"end":{"line":132,"column":3}},{"start":{"line":130,"column":2},"end":{"line":132,"column":3}}],"line":130},"11":{"loc":{"start":{"line":130,"column":6},"end":{"line":130,"column":37}},"type":"binary-expr","locations":[{"start":{"line":130,"column":6},"end":{"line":130,"column":22}},{"start":{"line":130,"column":26},"end":{"line":130,"column":37}}],"line":130},"12":{"loc":{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},"type":"if","locations":[{"start":{"line":134,"column":2},"end":{"line":137,"column":3}},{"start":{"line":134,"column":2},"end":{"line":137,"column":3}}],"line":134},"13":{"loc":{"start":{"line":134,"column":6},"end":{"line":134,"column":38}},"type":"binary-expr","locations":[{"start":{"line":134,"column":6},"end":{"line":134,"column":18}},{"start":{"line":134,"column":22},"end":{"line":134,"column":38}}],"line":134},"14":{"loc":{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":148,"column":30}},{"start":{"line":147,"column":4},"end":{"line":148,"column":30}}],"line":147},"15":{"loc":{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":150,"column":4},"end":{"line":158,"column":5}},{"start":{"line":150,"column":4},"end":{"line":158,"column":5}}],"line":150},"16":{"loc":{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},"type":"if","locations":[{"start":{"line":153,"column":6},"end":{"line":156,"column":7}},{"start":{"line":153,"column":6},"end":{"line":156,"column":7}}],"line":153}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":1,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":1,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":1,"49":0,"50":0,"51":1,"52":0,"53":0,"54":0,"55":1,"56":0,"57":0,"58":0,"59":0,"60":0,"61":1,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":1,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3e169418508e031df78186ff63b5fa5aa2484ab8","contentHash":"84191ed4732b6763ae8701256051735aebbe5e95c932c15bef34da01b33ba1a0"},"/Users/isaacs/dev/js/tar/lib/entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/entry.js","statementMap":{"0":{"start":{"line":7,"column":0},"end":{"line":7,"column":22}},"1":{"start":{"line":9,"column":16},"end":{"line":9,"column":38}},"2":{"start":{"line":10,"column":10},"end":{"line":10,"column":27}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":33}},"4":{"start":{"line":12,"column":13},"end":{"line":12,"column":37}},"5":{"start":{"line":13,"column":15},"end":{"line":13,"column":34}},"6":{"start":{"line":14,"column":14},"end":{"line":14,"column":41}},"7":{"start":{"line":17,"column":2},"end":{"line":17,"column":19}},"8":{"start":{"line":18,"column":2},"end":{"line":18,"column":22}},"9":{"start":{"line":19,"column":2},"end":{"line":19,"column":22}},"10":{"start":{"line":21,"column":2},"end":{"line":21,"column":25}},"11":{"start":{"line":22,"column":2},"end":{"line":22,"column":22}},"12":{"start":{"line":23,"column":2},"end":{"line":23,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":22}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":21}},"15":{"start":{"line":26,"column":2},"end":{"line":26,"column":21}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":21}},"17":{"start":{"line":28,"column":2},"end":{"line":28,"column":18}},"18":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"19":{"start":{"line":30,"column":2},"end":{"line":30,"column":20}},"20":{"start":{"line":32,"column":2},"end":{"line":32,"column":36}},"21":{"start":{"line":34,"column":2},"end":{"line":34,"column":17}},"22":{"start":{"line":35,"column":2},"end":{"line":35,"column":23}},"23":{"start":{"line":36,"column":2},"end":{"line":36,"column":33}},"24":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"25":{"start":{"line":41,"column":11},"end":{"line":41,"column":15}},"26":{"start":{"line":42,"column":2},"end":{"line":44,"column":4}},"27":{"start":{"line":43,"column":4},"end":{"line":43,"column":29}},"28":{"start":{"line":46,"column":2},"end":{"line":46,"column":18}},"29":{"start":{"line":49,"column":0},"end":{"line":49,"column":23}},"30":{"start":{"line":51,"column":0},"end":{"line":78,"column":1}},"31":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"32":{"start":{"line":52,"column":20},"end":{"line":52,"column":65}},"33":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"34":{"start":{"line":54,"column":4},"end":{"line":54,"column":40}},"35":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"36":{"start":{"line":60,"column":4},"end":{"line":60,"column":35}},"37":{"start":{"line":62,"column":2},"end":{"line":62,"column":29}},"38":{"start":{"line":65,"column":11},"end":{"line":65,"column":25}},"39":{"start":{"line":66,"column":2},"end":{"line":66,"column":21}},"40":{"start":{"line":67,"column":2},"end":{"line":67,"column":19}},"41":{"start":{"line":69,"column":2},"end":{"line":69,"column":14}},"42":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"43":{"start":{"line":73,"column":4},"end":{"line":73,"column":26}},"44":{"start":{"line":74,"column":4},"end":{"line":74,"column":16}},"45":{"start":{"line":77,"column":2},"end":{"line":77,"column":13}},"46":{"start":{"line":80,"column":0},"end":{"line":84,"column":1}},"47":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"48":{"start":{"line":81,"column":9},"end":{"line":81,"column":22}},"49":{"start":{"line":82,"column":2},"end":{"line":82,"column":21}},"50":{"start":{"line":83,"column":2},"end":{"line":83,"column":14}},"51":{"start":{"line":86,"column":0},"end":{"line":89,"column":1}},"52":{"start":{"line":87,"column":2},"end":{"line":87,"column":21}},"53":{"start":{"line":88,"column":2},"end":{"line":88,"column":20}},"54":{"start":{"line":91,"column":0},"end":{"line":97,"column":1}},"55":{"start":{"line":93,"column":2},"end":{"line":93,"column":21}},"56":{"start":{"line":94,"column":2},"end":{"line":94,"column":22}},"57":{"start":{"line":95,"column":2},"end":{"line":95,"column":14}},"58":{"start":{"line":96,"column":2},"end":{"line":96,"column":41}},"59":{"start":{"line":100,"column":0},"end":{"line":139,"column":1}},"60":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"61":{"start":{"line":103,"column":52},"end":{"line":103,"column":58}},"62":{"start":{"line":107,"column":2},"end":{"line":107,"column":22}},"63":{"start":{"line":110,"column":2},"end":{"line":113,"column":3}},"64":{"start":{"line":111,"column":16},"end":{"line":111,"column":43}},"65":{"start":{"line":112,"column":4},"end":{"line":112,"column":28}},"66":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"67":{"start":{"line":117,"column":4},"end":{"line":117,"column":57}},"68":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"69":{"start":{"line":119,"column":6},"end":{"line":119,"column":29}},"70":{"start":{"line":120,"column":6},"end":{"line":120,"column":24}},"71":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"72":{"start":{"line":123,"column":6},"end":{"line":123,"column":24}},"73":{"start":{"line":124,"column":6},"end":{"line":124,"column":22}},"74":{"start":{"line":130,"column":12},"end":{"line":130,"column":29}},"75":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"76":{"start":{"line":132,"column":4},"end":{"line":132,"column":36}},"77":{"start":{"line":133,"column":4},"end":{"line":133,"column":22}},"78":{"start":{"line":134,"column":4},"end":{"line":134,"column":25}},"79":{"start":{"line":135,"column":4},"end":{"line":135,"column":40}},"80":{"start":{"line":138,"column":2},"end":{"line":138,"column":23}},"81":{"start":{"line":141,"column":0},"end":{"line":211,"column":1}},"82":{"start":{"line":143,"column":15},"end":{"line":143,"column":27}},"83":{"start":{"line":144,"column":17},"end":{"line":144,"column":31}},"84":{"start":{"line":145,"column":15},"end":{"line":145,"column":27}},"85":{"start":{"line":146,"column":14},"end":{"line":146,"column":24}},"86":{"start":{"line":149,"column":15},"end":{"line":149,"column":25}},"87":{"start":{"line":150,"column":2},"end":{"line":154,"column":3}},"88":{"start":{"line":150,"column":15},"end":{"line":150,"column":16}},"89":{"start":{"line":151,"column":16},"end":{"line":151,"column":25}},"90":{"start":{"line":152,"column":14},"end":{"line":152,"column":27}},"91":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"92":{"start":{"line":153,"column":36},"end":{"line":153,"column":54}},"93":{"start":{"line":158,"column":3},"end":{"line":165,"column":3}},"94":{"start":{"line":159,"column":4},"end":{"line":161,"column":6}},"95":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"96":{"start":{"line":160,"column":39},"end":{"line":160,"column":54}},"97":{"start":{"line":165,"column":3},"end":{"line":173,"column":3}},"98":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"99":{"start":{"line":167,"column":6},"end":{"line":167,"column":40}},"100":{"start":{"line":173,"column":3},"end":{"line":177,"column":4}},"101":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"102":{"start":{"line":175,"column":6},"end":{"line":175,"column":42}},"103":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"104":{"start":{"line":184,"column":6},"end":{"line":184,"column":19}},"105":{"start":{"line":185,"column":6},"end":{"line":185,"column":11}},"106":{"start":{"line":188,"column":6},"end":{"line":188,"column":24}},"107":{"start":{"line":189,"column":6},"end":{"line":189,"column":11}},"108":{"start":{"line":192,"column":6},"end":{"line":192,"column":22}},"109":{"start":{"line":193,"column":6},"end":{"line":193,"column":11}},"110":{"start":{"line":202,"column":6},"end":{"line":202,"column":34}},"111":{"start":{"line":205,"column":2},"end":{"line":205,"column":18}},"112":{"start":{"line":206,"column":2},"end":{"line":206,"column":24}},"113":{"start":{"line":207,"column":2},"end":{"line":207,"column":24}},"114":{"start":{"line":210,"column":2},"end":{"line":210,"column":30}},"115":{"start":{"line":215,"column":0},"end":{"line":217,"column":1}},"116":{"start":{"line":216,"column":2},"end":{"line":216,"column":20}},"117":{"start":{"line":219,"column":0},"end":{"line":219,"column":35}},"118":{"start":{"line":220,"column":0},"end":{"line":220,"column":37}}},"fnMap":{"0":{"name":"Entry","decl":{"start":{"line":16,"column":9},"end":{"line":16,"column":14}},"loc":{"start":{"line":16,"column":42},"end":{"line":47,"column":1}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":42,"column":36},"end":{"line":42,"column":37}},"loc":{"start":{"line":42,"column":49},"end":{"line":44,"column":3}},"line":42},"2":{"name":"(anonymous_2)","decl":{"start":{"line":51,"column":24},"end":{"line":51,"column":25}},"loc":{"start":{"line":51,"column":37},"end":{"line":78,"column":1}},"line":51},"3":{"name":"(anonymous_3)","decl":{"start":{"line":80,"column":22},"end":{"line":80,"column":23}},"loc":{"start":{"line":80,"column":35},"end":{"line":84,"column":1}},"line":80},"4":{"name":"(anonymous_4)","decl":{"start":{"line":86,"column":24},"end":{"line":86,"column":25}},"loc":{"start":{"line":86,"column":36},"end":{"line":89,"column":1}},"line":86},"5":{"name":"(anonymous_5)","decl":{"start":{"line":91,"column":25},"end":{"line":91,"column":26}},"loc":{"start":{"line":91,"column":37},"end":{"line":97,"column":1}},"line":91},"6":{"name":"(anonymous_6)","decl":{"start":{"line":100,"column":24},"end":{"line":100,"column":25}},"loc":{"start":{"line":100,"column":36},"end":{"line":139,"column":1}},"line":100},"7":{"name":"(anonymous_7)","decl":{"start":{"line":141,"column":28},"end":{"line":141,"column":29}},"loc":{"start":{"line":141,"column":40},"end":{"line":211,"column":1}},"line":141},"8":{"name":"(anonymous_8)","decl":{"start":{"line":158,"column":30},"end":{"line":158,"column":31}},"loc":{"start":{"line":158,"column":43},"end":{"line":162,"column":3}},"line":158},"9":{"name":"(anonymous_9)","decl":{"start":{"line":159,"column":27},"end":{"line":159,"column":28}},"loc":{"start":{"line":159,"column":40},"end":{"line":161,"column":5}},"line":159},"10":{"name":"(anonymous_10)","decl":{"start":{"line":165,"column":32},"end":{"line":165,"column":33}},"loc":{"start":{"line":165,"column":45},"end":{"line":169,"column":3}},"line":165},"11":{"name":"(anonymous_11)","decl":{"start":{"line":173,"column":39},"end":{"line":173,"column":40}},"loc":{"start":{"line":173,"column":52},"end":{"line":177,"column":3}},"line":173},"12":{"name":"(anonymous_12)","decl":{"start":{"line":215,"column":24},"end":{"line":215,"column":25}},"loc":{"start":{"line":215,"column":34},"end":{"line":217,"column":1}},"line":215}},"branchMap":{"0":{"loc":{"start":{"line":36,"column":19},"end":{"line":36,"column":33}},"type":"binary-expr","locations":[{"start":{"line":36,"column":19},"end":{"line":36,"column":27}},{"start":{"line":36,"column":31},"end":{"line":36,"column":33}}],"line":36},"1":{"loc":{"start":{"line":42,"column":14},"end":{"line":42,"column":26}},"type":"binary-expr","locations":[{"start":{"line":42,"column":14},"end":{"line":42,"column":20}},{"start":{"line":42,"column":24},"end":{"line":42,"column":26}}],"line":42},"2":{"loc":{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},"type":"if","locations":[{"start":{"line":52,"column":2},"end":{"line":52,"column":65}},{"start":{"line":52,"column":2},"end":{"line":52,"column":65}}],"line":52},"3":{"loc":{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},"type":"if","locations":[{"start":{"line":53,"column":2},"end":{"line":55,"column":3}},{"start":{"line":53,"column":2},"end":{"line":55,"column":3}}],"line":53},"4":{"loc":{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":61,"column":3}},{"start":{"line":59,"column":2},"end":{"line":61,"column":3}}],"line":59},"5":{"loc":{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},"type":"if","locations":[{"start":{"line":72,"column":2},"end":{"line":75,"column":3}},{"start":{"line":72,"column":2},"end":{"line":75,"column":3}}],"line":72},"6":{"loc":{"start":{"line":72,"column":6},"end":{"line":72,"column":28}},"type":"binary-expr","locations":[{"start":{"line":72,"column":6},"end":{"line":72,"column":18}},{"start":{"line":72,"column":22},"end":{"line":72,"column":28}}],"line":72},"7":{"loc":{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},"type":"if","locations":[{"start":{"line":81,"column":2},"end":{"line":81,"column":22}},{"start":{"line":81,"column":2},"end":{"line":81,"column":22}}],"line":81},"8":{"loc":{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},"type":"if","locations":[{"start":{"line":103,"column":2},"end":{"line":103,"column":58}},{"start":{"line":103,"column":2},"end":{"line":103,"column":58}}],"line":103},"9":{"loc":{"start":{"line":103,"column":6},"end":{"line":103,"column":50}},"type":"binary-expr","locations":[{"start":{"line":103,"column":6},"end":{"line":103,"column":18}},{"start":{"line":103,"column":22},"end":{"line":103,"column":35}},{"start":{"line":103,"column":39},"end":{"line":103,"column":50}}],"line":103},"10":{"loc":{"start":{"line":110,"column":9},"end":{"line":110,"column":54}},"type":"binary-expr","locations":[{"start":{"line":110,"column":9},"end":{"line":110,"column":37}},{"start":{"line":110,"column":41},"end":{"line":110,"column":54}}],"line":110},"11":{"loc":{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},"type":"if","locations":[{"start":{"line":116,"column":2},"end":{"line":126,"column":3}},{"start":{"line":116,"column":2},"end":{"line":126,"column":3}}],"line":116},"12":{"loc":{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},"type":"if","locations":[{"start":{"line":118,"column":4},"end":{"line":121,"column":5}},{"start":{"line":118,"column":4},"end":{"line":121,"column":5}}],"line":118},"13":{"loc":{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":125,"column":5}},{"start":{"line":122,"column":4},"end":{"line":125,"column":5}}],"line":122},"14":{"loc":{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},"type":"if","locations":[{"start":{"line":131,"column":2},"end":{"line":136,"column":3}},{"start":{"line":131,"column":2},"end":{"line":136,"column":3}}],"line":131},"15":{"loc":{"start":{"line":131,"column":6},"end":{"line":131,"column":45}},"type":"binary-expr","locations":[{"start":{"line":131,"column":6},"end":{"line":131,"column":26}},{"start":{"line":131,"column":30},"end":{"line":131,"column":45}}],"line":131},"16":{"loc":{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},"type":"if","locations":[{"start":{"line":153,"column":4},"end":{"line":153,"column":54}},{"start":{"line":153,"column":4},"end":{"line":153,"column":54}}],"line":153},"17":{"loc":{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},"type":"if","locations":[{"start":{"line":160,"column":6},"end":{"line":160,"column":54}},{"start":{"line":160,"column":6},"end":{"line":160,"column":54}}],"line":160},"18":{"loc":{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},"type":"if","locations":[{"start":{"line":166,"column":4},"end":{"line":168,"column":5}},{"start":{"line":166,"column":4},"end":{"line":168,"column":5}}],"line":166},"19":{"loc":{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},"type":"if","locations":[{"start":{"line":174,"column":4},"end":{"line":176,"column":5}},{"start":{"line":174,"column":4},"end":{"line":176,"column":5}}],"line":174},"20":{"loc":{"start":{"line":181,"column":2},"end":{"line":203,"column":3}},"type":"switch","locations":[{"start":{"line":182,"column":4},"end":{"line":182,"column":19}},{"start":{"line":183,"column":4},"end":{"line":185,"column":11}},{"start":{"line":187,"column":4},"end":{"line":189,"column":11}},{"start":{"line":191,"column":4},"end":{"line":193,"column":11}},{"start":{"line":195,"column":4},"end":{"line":195,"column":16}},{"start":{"line":196,"column":4},"end":{"line":196,"column":24}},{"start":{"line":197,"column":4},"end":{"line":197,"column":27}},{"start":{"line":198,"column":4},"end":{"line":198,"column":23}},{"start":{"line":199,"column":4},"end":{"line":199,"column":21}},{"start":{"line":200,"column":4},"end":{"line":200,"column":16}},{"start":{"line":201,"column":4},"end":{"line":202,"column":34}}],"line":181}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":17,"8":17,"9":17,"10":17,"11":17,"12":17,"13":17,"14":17,"15":17,"16":17,"17":17,"18":17,"19":17,"20":17,"21":17,"22":17,"23":17,"24":17,"25":17,"26":17,"27":0,"28":17,"29":1,"30":1,"31":17,"32":0,"33":17,"34":0,"35":17,"36":15,"37":17,"38":17,"39":17,"40":17,"41":17,"42":17,"43":0,"44":0,"45":17,"46":1,"47":17,"48":0,"49":17,"50":17,"51":1,"52":0,"53":0,"54":1,"55":0,"56":0,"57":0,"58":0,"59":1,"60":34,"61":0,"62":34,"63":34,"64":17,"65":17,"66":34,"67":34,"68":34,"69":0,"70":0,"71":34,"72":17,"73":17,"74":34,"75":34,"76":0,"77":0,"78":0,"79":0,"80":34,"81":1,"82":17,"83":17,"84":17,"85":17,"86":17,"87":17,"88":17,"89":289,"90":289,"91":289,"92":242,"93":17,"94":34,"95":29,"96":29,"97":17,"98":34,"99":34,"100":17,"101":51,"102":25,"103":17,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":17,"111":17,"112":17,"113":17,"114":17,"115":1,"116":0,"117":1,"118":1},"f":{"0":17,"1":0,"2":17,"3":17,"4":0,"5":0,"6":34,"7":17,"8":34,"9":29,"10":34,"11":51,"12":0},"b":{"0":[17,11],"1":[17,17],"2":[0,17],"3":[0,17],"4":[15,2],"5":[0,17],"6":[17,17],"7":[0,17],"8":[0,34],"9":[34,34,34],"10":[51,17],"11":[34,0],"12":[0,34],"13":[17,17],"14":[0,34],"15":[34,0],"16":[242,47],"17":[29,0],"18":[34,0],"19":[25,26],"20":[0,0,0,0,1,2,2,2,2,2,17]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"2cc4f925db2a60e89bf0743124faec4e8996dfdb","contentHash":"245d5cb2b23d975dc5b9a0ed2553c93c587727d50a7961242f50cec333c04ba9"},"/Users/isaacs/dev/js/tar/lib/global-header-writer.js":{"path":"/Users/isaacs/dev/js/tar/lib/global-header-writer.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":35}},"1":{"start":{"line":3,"column":27},"end":{"line":3,"column":65}},"2":{"start":{"line":4,"column":15},"end":{"line":4,"column":34}},"3":{"start":{"line":6,"column":0},"end":{"line":6,"column":50}},"4":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"5":{"start":{"line":10,"column":4},"end":{"line":10,"column":40}},"6":{"start":{"line":12,"column":2},"end":{"line":12,"column":40}},"7":{"start":{"line":13,"column":2},"end":{"line":13,"column":23}}},"fnMap":{"0":{"name":"GlobalHeaderWriter","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":27}},"loc":{"start":{"line":8,"column":36},"end":{"line":14,"column":1}},"line":8}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},"type":"if","locations":[{"start":{"line":9,"column":2},"end":{"line":11,"column":3}},{"start":{"line":9,"column":2},"end":{"line":11,"column":3}}],"line":9}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0},"f":{"0":0},"b":{"0":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3d0c8589f62a5c8ccec606d52d3abd98e5627d57","contentHash":"a2570ca840cf3e44d77e15af0aee52f7c145da39b76366006f3672b9708def3e"},"/Users/isaacs/dev/js/tar/lib/parse.js":{"path":"/Users/isaacs/dev/js/tar/lib/parse.js","statementMap":{"0":{"start":{"line":6,"column":0},"end":{"line":6,"column":37}},"1":{"start":{"line":8,"column":13},"end":{"line":8,"column":30}},"2":{"start":{"line":9,"column":13},"end":{"line":9,"column":26}},"3":{"start":{"line":10,"column":18},"end":{"line":10,"column":41}},"4":{"start":{"line":11,"column":10},"end":{"line":11,"column":30}},"5":{"start":{"line":12,"column":16},"end":{"line":12,"column":38}},"6":{"start":{"line":13,"column":12},"end":{"line":13,"column":33}},"7":{"start":{"line":14,"column":18},"end":{"line":14,"column":46}},"8":{"start":{"line":15,"column":21},"end":{"line":15,"column":52}},"9":{"start":{"line":16,"column":13},"end":{"line":16,"column":33}},"10":{"start":{"line":17,"column":15},"end":{"line":17,"column":34}},"11":{"start":{"line":18,"column":14},"end":{"line":18,"column":32}},"12":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"13":{"start":{"line":28,"column":11},"end":{"line":28,"column":15}},"14":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"15":{"start":{"line":29,"column":30},"end":{"line":29,"column":48}},"16":{"start":{"line":34,"column":2},"end":{"line":34,"column":18}},"17":{"start":{"line":36,"column":2},"end":{"line":36,"column":20}},"18":{"start":{"line":37,"column":2},"end":{"line":37,"column":20}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":35}},"20":{"start":{"line":39,"column":2},"end":{"line":39,"column":17}},"21":{"start":{"line":40,"column":2},"end":{"line":40,"column":19}},"22":{"start":{"line":41,"column":2},"end":{"line":41,"column":20}},"23":{"start":{"line":43,"column":2},"end":{"line":45,"column":4}},"24":{"start":{"line":44,"column":4},"end":{"line":44,"column":23}},"25":{"start":{"line":47,"column":2},"end":{"line":49,"column":4}},"26":{"start":{"line":48,"column":4},"end":{"line":48,"column":18}},"27":{"start":{"line":51,"column":2},"end":{"line":53,"column":4}},"28":{"start":{"line":52,"column":4},"end":{"line":52,"column":19}},"29":{"start":{"line":55,"column":2},"end":{"line":57,"column":4}},"30":{"start":{"line":56,"column":4},"end":{"line":56,"column":20}},"31":{"start":{"line":63,"column":0},"end":{"line":67,"column":1}},"32":{"start":{"line":64,"column":11},"end":{"line":64,"column":15}},"33":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"34":{"start":{"line":65,"column":31},"end":{"line":65,"column":57}},"35":{"start":{"line":66,"column":2},"end":{"line":66,"column":16}},"36":{"start":{"line":72,"column":0},"end":{"line":83,"column":1}},"37":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"38":{"start":{"line":77,"column":4},"end":{"line":79,"column":5}},"39":{"start":{"line":77,"column":17},"end":{"line":77,"column":18}},"40":{"start":{"line":77,"column":24},"end":{"line":77,"column":32}},"41":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"42":{"start":{"line":78,"column":22},"end":{"line":78,"column":62}},"43":{"start":{"line":80,"column":4},"end":{"line":80,"column":10}},"44":{"start":{"line":82,"column":2},"end":{"line":82,"column":30}},"45":{"start":{"line":85,"column":0},"end":{"line":88,"column":1}},"46":{"start":{"line":86,"column":2},"end":{"line":86,"column":20}},"47":{"start":{"line":87,"column":2},"end":{"line":87,"column":28}},"48":{"start":{"line":94,"column":0},"end":{"line":94,"column":38}},"49":{"start":{"line":96,"column":0},"end":{"line":137,"column":1}},"50":{"start":{"line":97,"column":2},"end":{"line":97,"column":59}},"51":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"52":{"start":{"line":105,"column":16},"end":{"line":105,"column":27}},"53":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"54":{"start":{"line":106,"column":22},"end":{"line":106,"column":36}},"55":{"start":{"line":108,"column":6},"end":{"line":108,"column":34}},"56":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"57":{"start":{"line":109,"column":31},"end":{"line":109,"column":51}},"58":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"59":{"start":{"line":112,"column":6},"end":{"line":112,"column":17}},"60":{"start":{"line":113,"column":6},"end":{"line":113,"column":24}},"61":{"start":{"line":117,"column":15},"end":{"line":117,"column":19}},"62":{"start":{"line":118,"column":4},"end":{"line":120,"column":5}},"63":{"start":{"line":118,"column":17},"end":{"line":118,"column":18}},"64":{"start":{"line":119,"column":6},"end":{"line":119,"column":23}},"65":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"66":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"67":{"start":{"line":128,"column":8},"end":{"line":128,"column":26}},"68":{"start":{"line":129,"column":6},"end":{"line":129,"column":29}},"69":{"start":{"line":131,"column":6},"end":{"line":131,"column":30}},"70":{"start":{"line":132,"column":6},"end":{"line":132,"column":25}},"71":{"start":{"line":136,"column":2},"end":{"line":136,"column":22}},"72":{"start":{"line":140,"column":0},"end":{"line":285,"column":1}},"73":{"start":{"line":141,"column":15},"end":{"line":141,"column":31}},"74":{"start":{"line":142,"column":13},"end":{"line":142,"column":17}},"75":{"start":{"line":147,"column":13},"end":{"line":147,"column":18}},"76":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"77":{"start":{"line":150,"column":12},"end":{"line":150,"column":41}},"78":{"start":{"line":151,"column":4},"end":{"line":151,"column":21}},"79":{"start":{"line":152,"column":4},"end":{"line":152,"column":37}},"80":{"start":{"line":153,"column":4},"end":{"line":153,"column":37}},"81":{"start":{"line":154,"column":4},"end":{"line":154,"column":32}},"82":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"83":{"start":{"line":171,"column":6},"end":{"line":171,"column":23}},"84":{"start":{"line":172,"column":6},"end":{"line":172,"column":18}},"85":{"start":{"line":173,"column":6},"end":{"line":173,"column":11}},"86":{"start":{"line":177,"column":6},"end":{"line":177,"column":32}},"87":{"start":{"line":178,"column":6},"end":{"line":183,"column":7}},"88":{"start":{"line":179,"column":8},"end":{"line":179,"column":41}},"89":{"start":{"line":180,"column":8},"end":{"line":182,"column":10}},"90":{"start":{"line":181,"column":10},"end":{"line":181,"column":43}},"91":{"start":{"line":184,"column":6},"end":{"line":184,"column":33}},"92":{"start":{"line":185,"column":6},"end":{"line":185,"column":17}},"93":{"start":{"line":186,"column":6},"end":{"line":186,"column":11}},"94":{"start":{"line":191,"column":6},"end":{"line":191,"column":32}},"95":{"start":{"line":192,"column":6},"end":{"line":194,"column":7}},"96":{"start":{"line":193,"column":8},"end":{"line":193,"column":37}},"97":{"start":{"line":195,"column":6},"end":{"line":195,"column":27}},"98":{"start":{"line":196,"column":6},"end":{"line":196,"column":17}},"99":{"start":{"line":197,"column":6},"end":{"line":197,"column":11}},"100":{"start":{"line":201,"column":6},"end":{"line":201,"column":29}},"101":{"start":{"line":202,"column":6},"end":{"line":205,"column":7}},"102":{"start":{"line":203,"column":8},"end":{"line":203,"column":45}},"103":{"start":{"line":204,"column":8},"end":{"line":204,"column":44}},"104":{"start":{"line":206,"column":6},"end":{"line":206,"column":25}},"105":{"start":{"line":207,"column":6},"end":{"line":207,"column":17}},"106":{"start":{"line":208,"column":6},"end":{"line":208,"column":11}},"107":{"start":{"line":213,"column":6},"end":{"line":213,"column":29}},"108":{"start":{"line":214,"column":6},"end":{"line":217,"column":7}},"109":{"start":{"line":215,"column":8},"end":{"line":215,"column":45}},"110":{"start":{"line":216,"column":8},"end":{"line":216,"column":40}},"111":{"start":{"line":218,"column":6},"end":{"line":218,"column":21}},"112":{"start":{"line":219,"column":6},"end":{"line":219,"column":17}},"113":{"start":{"line":220,"column":6},"end":{"line":220,"column":11}},"114":{"start":{"line":226,"column":6},"end":{"line":226,"column":23}},"115":{"start":{"line":227,"column":6},"end":{"line":227,"column":25}},"116":{"start":{"line":228,"column":6},"end":{"line":228,"column":11}},"117":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"118":{"start":{"line":233,"column":4},"end":{"line":233,"column":28}},"119":{"start":{"line":235,"column":17},"end":{"line":235,"column":29}},"120":{"start":{"line":236,"column":19},"end":{"line":236,"column":33}},"121":{"start":{"line":240,"column":4},"end":{"line":240,"column":25}},"122":{"start":{"line":242,"column":2},"end":{"line":242,"column":49}},"123":{"start":{"line":243,"column":2},"end":{"line":243,"column":19}},"124":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"125":{"start":{"line":247,"column":4},"end":{"line":249,"column":6}},"126":{"start":{"line":248,"column":6},"end":{"line":248,"column":24}},"127":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"128":{"start":{"line":252,"column":13},"end":{"line":252,"column":35}},"129":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"130":{"start":{"line":255,"column":4},"end":{"line":255,"column":23}},"131":{"start":{"line":258,"column":2},"end":{"line":258,"column":21}},"132":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"133":{"start":{"line":261,"column":4},"end":{"line":261,"column":39}},"134":{"start":{"line":264,"column":11},"end":{"line":264,"column":15}},"135":{"start":{"line":266,"column":2},"end":{"line":268,"column":4}},"136":{"start":{"line":267,"column":4},"end":{"line":267,"column":14}},"137":{"start":{"line":270,"column":2},"end":{"line":272,"column":4}},"138":{"start":{"line":271,"column":4},"end":{"line":271,"column":15}},"139":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"140":{"start":{"line":275,"column":4},"end":{"line":275,"column":29}},"141":{"start":{"line":278,"column":2},"end":{"line":278,"column":22}},"142":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"143":{"start":{"line":282,"column":4},"end":{"line":282,"column":15}},"144":{"start":{"line":283,"column":4},"end":{"line":283,"column":22}}},"fnMap":{"0":{"name":"Parse","decl":{"start":{"line":27,"column":9},"end":{"line":27,"column":14}},"loc":{"start":{"line":27,"column":18},"end":{"line":58,"column":1}},"line":27},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":25},"end":{"line":43,"column":26}},"loc":{"start":{"line":43,"column":38},"end":{"line":45,"column":3}},"line":43},"2":{"name":"(anonymous_2)","decl":{"start":{"line":47,"column":24},"end":{"line":47,"column":25}},"loc":{"start":{"line":47,"column":37},"end":{"line":49,"column":3}},"line":47},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":23},"end":{"line":51,"column":24}},"loc":{"start":{"line":51,"column":35},"end":{"line":53,"column":3}},"line":51},"4":{"name":"(anonymous_4)","decl":{"start":{"line":55,"column":25},"end":{"line":55,"column":26}},"loc":{"start":{"line":55,"column":37},"end":{"line":57,"column":3}},"line":55},"5":{"name":"(anonymous_5)","decl":{"start":{"line":63,"column":29},"end":{"line":63,"column":30}},"loc":{"start":{"line":63,"column":41},"end":{"line":67,"column":1}},"line":63},"6":{"name":"(anonymous_6)","decl":{"start":{"line":72,"column":24},"end":{"line":72,"column":25}},"loc":{"start":{"line":72,"column":37},"end":{"line":83,"column":1}},"line":72},"7":{"name":"(anonymous_7)","decl":{"start":{"line":85,"column":22},"end":{"line":85,"column":23}},"loc":{"start":{"line":85,"column":35},"end":{"line":88,"column":1}},"line":85},"8":{"name":"(anonymous_8)","decl":{"start":{"line":94,"column":24},"end":{"line":94,"column":25}},"loc":{"start":{"line":94,"column":36},"end":{"line":94,"column":38}},"line":94},"9":{"name":"(anonymous_9)","decl":{"start":{"line":96,"column":27},"end":{"line":96,"column":28}},"loc":{"start":{"line":96,"column":40},"end":{"line":137,"column":1}},"line":96},"10":{"name":"(anonymous_10)","decl":{"start":{"line":140,"column":30},"end":{"line":140,"column":31}},"loc":{"start":{"line":140,"column":43},"end":{"line":285,"column":1}},"line":140},"11":{"name":"(anonymous_11)","decl":{"start":{"line":178,"column":14},"end":{"line":178,"column":15}},"loc":{"start":{"line":178,"column":26},"end":{"line":183,"column":7}},"line":178},"12":{"name":"(anonymous_12)","decl":{"start":{"line":180,"column":42},"end":{"line":180,"column":43}},"loc":{"start":{"line":180,"column":55},"end":{"line":182,"column":9}},"line":180},"13":{"name":"(anonymous_13)","decl":{"start":{"line":192,"column":14},"end":{"line":192,"column":15}},"loc":{"start":{"line":192,"column":26},"end":{"line":194,"column":7}},"line":192},"14":{"name":"(anonymous_14)","decl":{"start":{"line":202,"column":14},"end":{"line":202,"column":15}},"loc":{"start":{"line":202,"column":26},"end":{"line":205,"column":7}},"line":202},"15":{"name":"(anonymous_15)","decl":{"start":{"line":214,"column":14},"end":{"line":214,"column":15}},"loc":{"start":{"line":214,"column":26},"end":{"line":217,"column":7}},"line":214},"16":{"name":"(anonymous_16)","decl":{"start":{"line":247,"column":21},"end":{"line":247,"column":22}},"loc":{"start":{"line":247,"column":34},"end":{"line":249,"column":5}},"line":247},"17":{"name":"(anonymous_17)","decl":{"start":{"line":266,"column":20},"end":{"line":266,"column":21}},"loc":{"start":{"line":266,"column":32},"end":{"line":268,"column":3}},"line":266},"18":{"name":"(anonymous_18)","decl":{"start":{"line":270,"column":21},"end":{"line":270,"column":22}},"loc":{"start":{"line":270,"column":33},"end":{"line":272,"column":3}},"line":270}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},{"start":{"line":29,"column":2},"end":{"line":29,"column":48}}],"line":29},"1":{"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},"type":"if","locations":[{"start":{"line":65,"column":2},"end":{"line":65,"column":57}},{"start":{"line":65,"column":2},"end":{"line":65,"column":57}}],"line":65},"2":{"loc":{"start":{"line":65,"column":6},"end":{"line":65,"column":29}},"type":"binary-expr","locations":[{"start":{"line":65,"column":6},"end":{"line":65,"column":16}},{"start":{"line":65,"column":20},"end":{"line":65,"column":29}}],"line":65},"3":{"loc":{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},"type":"if","locations":[{"start":{"line":73,"column":2},"end":{"line":81,"column":3}},{"start":{"line":73,"column":2},"end":{"line":81,"column":3}}],"line":73},"4":{"loc":{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},"type":"if","locations":[{"start":{"line":78,"column":6},"end":{"line":78,"column":62}},{"start":{"line":78,"column":6},"end":{"line":78,"column":62}}],"line":78},"5":{"loc":{"start":{"line":97,"column":9},"end":{"line":97,"column":30}},"type":"binary-expr","locations":[{"start":{"line":97,"column":9},"end":{"line":97,"column":10}},{"start":{"line":97,"column":14},"end":{"line":97,"column":30}}],"line":97},"6":{"loc":{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},"type":"if","locations":[{"start":{"line":104,"column":2},"end":{"line":134,"column":3}},{"start":{"line":104,"column":2},"end":{"line":134,"column":3}}],"line":104},"7":{"loc":{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},"type":"if","locations":[{"start":{"line":106,"column":4},"end":{"line":110,"column":5}},{"start":{"line":106,"column":4},"end":{"line":110,"column":5}}],"line":106},"8":{"loc":{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},"type":"if","locations":[{"start":{"line":109,"column":6},"end":{"line":109,"column":51}},{"start":{"line":109,"column":6},"end":{"line":109,"column":51}}],"line":109},"9":{"loc":{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":114,"column":5}},{"start":{"line":111,"column":4},"end":{"line":114,"column":5}}],"line":111},"10":{"loc":{"start":{"line":118,"column":20},"end":{"line":118,"column":35}},"type":"binary-expr","locations":[{"start":{"line":118,"column":20},"end":{"line":118,"column":27}},{"start":{"line":118,"column":31},"end":{"line":118,"column":35}}],"line":118},"11":{"loc":{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},"type":"if","locations":[{"start":{"line":126,"column":4},"end":{"line":133,"column":5}},{"start":{"line":126,"column":4},"end":{"line":133,"column":5}}],"line":126},"12":{"loc":{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},"type":"if","locations":[{"start":{"line":127,"column":6},"end":{"line":128,"column":26}},{"start":{"line":127,"column":6},"end":{"line":128,"column":26}}],"line":127},"13":{"loc":{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},"type":"if","locations":[{"start":{"line":149,"column":2},"end":{"line":155,"column":3}},{"start":{"line":149,"column":2},"end":{"line":155,"column":3}}],"line":149},"14":{"loc":{"start":{"line":149,"column":6},"end":{"line":149,"column":48}},"type":"binary-expr","locations":[{"start":{"line":149,"column":6},"end":{"line":149,"column":26}},{"start":{"line":149,"column":30},"end":{"line":149,"column":48}}],"line":149},"15":{"loc":{"start":{"line":157,"column":2},"end":{"line":229,"column":3}},"type":"switch","locations":[{"start":{"line":158,"column":4},"end":{"line":158,"column":16}},{"start":{"line":159,"column":4},"end":{"line":159,"column":19}},{"start":{"line":160,"column":4},"end":{"line":160,"column":16}},{"start":{"line":161,"column":4},"end":{"line":161,"column":24}},{"start":{"line":162,"column":4},"end":{"line":162,"column":27}},{"start":{"line":163,"column":4},"end":{"line":163,"column":23}},{"start":{"line":164,"column":4},"end":{"line":164,"column":21}},{"start":{"line":165,"column":4},"end":{"line":165,"column":16}},{"start":{"line":166,"column":4},"end":{"line":166,"column":26}},{"start":{"line":167,"column":4},"end":{"line":173,"column":11}},{"start":{"line":175,"column":4},"end":{"line":186,"column":11}},{"start":{"line":188,"column":4},"end":{"line":188,"column":26}},{"start":{"line":189,"column":4},"end":{"line":197,"column":11}},{"start":{"line":199,"column":4},"end":{"line":208,"column":11}},{"start":{"line":210,"column":4},"end":{"line":210,"column":31}},{"start":{"line":211,"column":4},"end":{"line":220,"column":11}},{"start":{"line":222,"column":4},"end":{"line":228,"column":11}}],"line":157},"16":{"loc":{"start":{"line":179,"column":23},"end":{"line":179,"column":41}},"type":"binary-expr","locations":[{"start":{"line":179,"column":23},"end":{"line":179,"column":35}},{"start":{"line":179,"column":39},"end":{"line":179,"column":41}}],"line":179},"17":{"loc":{"start":{"line":203,"column":25},"end":{"line":203,"column":45}},"type":"binary-expr","locations":[{"start":{"line":203,"column":25},"end":{"line":203,"column":39}},{"start":{"line":203,"column":43},"end":{"line":203,"column":45}}],"line":203},"18":{"loc":{"start":{"line":215,"column":25},"end":{"line":215,"column":45}},"type":"binary-expr","locations":[{"start":{"line":215,"column":25},"end":{"line":215,"column":39}},{"start":{"line":215,"column":43},"end":{"line":215,"column":45}}],"line":215},"19":{"loc":{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},"type":"if","locations":[{"start":{"line":232,"column":2},"end":{"line":241,"column":3}},{"start":{"line":232,"column":2},"end":{"line":241,"column":3}}],"line":232},"20":{"loc":{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},"type":"if","locations":[{"start":{"line":246,"column":2},"end":{"line":250,"column":3}},{"start":{"line":246,"column":2},"end":{"line":250,"column":3}}],"line":246},"21":{"loc":{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},"type":"if","locations":[{"start":{"line":252,"column":2},"end":{"line":252,"column":35}},{"start":{"line":252,"column":2},"end":{"line":252,"column":35}}],"line":252},"22":{"loc":{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},"type":"if","locations":[{"start":{"line":254,"column":2},"end":{"line":256,"column":3}},{"start":{"line":254,"column":2},"end":{"line":256,"column":3}}],"line":254},"23":{"loc":{"start":{"line":254,"column":6},"end":{"line":254,"column":58}},"type":"binary-expr","locations":[{"start":{"line":254,"column":6},"end":{"line":254,"column":27}},{"start":{"line":254,"column":31},"end":{"line":254,"column":58}}],"line":254},"24":{"loc":{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},"type":"if","locations":[{"start":{"line":260,"column":2},"end":{"line":262,"column":3}},{"start":{"line":260,"column":2},"end":{"line":262,"column":3}}],"line":260},"25":{"loc":{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},"type":"if","locations":[{"start":{"line":274,"column":2},"end":{"line":276,"column":3}},{"start":{"line":274,"column":2},"end":{"line":276,"column":3}}],"line":274},"26":{"loc":{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},"type":"if","locations":[{"start":{"line":281,"column":2},"end":{"line":284,"column":3}},{"start":{"line":281,"column":2},"end":{"line":284,"column":3}}],"line":281}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":2,"14":2,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":0,"25":1,"26":36,"27":1,"28":1,"29":1,"30":0,"31":1,"32":1,"33":1,"34":0,"35":1,"36":1,"37":1,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":36,"51":36,"52":17,"53":17,"54":17,"55":0,"56":0,"57":0,"58":17,"59":15,"60":15,"61":19,"62":19,"63":19,"64":1041,"65":19,"66":2,"67":1,"68":2,"69":17,"70":17,"71":36,"72":1,"73":17,"74":17,"75":17,"76":17,"77":0,"78":0,"79":0,"80":0,"81":0,"82":17,"83":10,"84":10,"85":10,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":4,"95":4,"96":4,"97":4,"98":4,"99":4,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":2,"108":2,"109":2,"110":2,"111":2,"112":2,"113":2,"114":0,"115":0,"116":0,"117":17,"118":7,"119":10,"120":10,"121":10,"122":17,"123":17,"124":17,"125":10,"126":10,"127":17,"128":7,"129":17,"130":0,"131":17,"132":17,"133":1,"134":17,"135":17,"136":0,"137":17,"138":0,"139":17,"140":17,"141":17,"142":17,"143":2,"144":2},"f":{"0":2,"1":0,"2":36,"3":1,"4":0,"5":1,"6":1,"7":1,"8":0,"9":36,"10":17,"11":0,"12":0,"13":4,"14":1,"15":2,"16":10,"17":0,"18":0},"b":{"0":[1,1],"1":[0,1],"2":[1,1],"3":[0,1],"4":[0,0],"5":[36,36],"6":[17,19],"7":[17,0],"8":[0,0],"9":[15,2],"10":[1060,1058],"11":[2,17],"12":[1,1],"13":[0,17],"14":[17,17],"15":[8,8,9,10,10,10,10,10,10,10,0,4,4,1,2,2,0],"16":[0,0],"17":[1,1],"18":[2,1],"19":[7,10],"20":[10,7],"21":[7,10],"22":[0,17],"23":[17,8],"24":[1,16],"25":[17,0],"26":[2,15]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"4a8f51a3a12b59eb69694618530032a813fbf8cb","contentHash":"d347e73abcd3109143efee20401d9f0bfc6d68a4a6323bd4559ada44c741786a"},"/Users/isaacs/dev/js/tar/lib/buffer-entry.js":{"path":"/Users/isaacs/dev/js/tar/lib/buffer-entry.js","statementMap":{"0":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"1":{"start":{"line":10,"column":15},"end":{"line":10,"column":34}},"2":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"3":{"start":{"line":14,"column":2},"end":{"line":14,"column":30}},"4":{"start":{"line":15,"column":2},"end":{"line":15,"column":44}},"5":{"start":{"line":16,"column":2},"end":{"line":16,"column":18}},"6":{"start":{"line":17,"column":2},"end":{"line":17,"column":16}},"7":{"start":{"line":18,"column":2},"end":{"line":20,"column":4}},"8":{"start":{"line":19,"column":4},"end":{"line":19,"column":52}},"9":{"start":{"line":23,"column":0},"end":{"line":23,"column":28}},"10":{"start":{"line":26,"column":0},"end":{"line":30,"column":1}},"11":{"start":{"line":27,"column":2},"end":{"line":27,"column":36}},"12":{"start":{"line":28,"column":2},"end":{"line":28,"column":26}},"13":{"start":{"line":29,"column":2},"end":{"line":29,"column":37}}},"fnMap":{"0":{"name":"BufferEntry","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":20}},"loc":{"start":{"line":13,"column":24},"end":{"line":21,"column":1}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":17},"end":{"line":18,"column":18}},"loc":{"start":{"line":18,"column":29},"end":{"line":20,"column":3}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":26,"column":30},"end":{"line":26,"column":31}},"loc":{"start":{"line":26,"column":43},"end":{"line":30,"column":1}},"line":26}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":3,"4":3,"5":3,"6":3,"7":3,"8":3,"9":1,"10":1,"11":3,"12":3,"13":3},"f":{"0":3,"1":3,"2":3},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"d8ad66df900443c9c9d8aefe5fc126a55ba268ec","contentHash":"25e5b3c51e476fcffac7affa191a0ed0f54d64d3d3b760e887bd45ba08fffa65"},"/Users/isaacs/dev/js/tar/lib/extended-header.js":{"path":"/Users/isaacs/dev/js/tar/lib/extended-header.js","statementMap":{"0":{"start":{"line":9,"column":0},"end":{"line":9,"column":31}},"1":{"start":{"line":11,"column":12},"end":{"line":11,"column":33}},"2":{"start":{"line":12,"column":15},"end":{"line":12,"column":34}},"3":{"start":{"line":13,"column":10},"end":{"line":13,"column":30}},"4":{"start":{"line":14,"column":14},"end":{"line":14,"column":25}},"5":{"start":{"line":15,"column":15},"end":{"line":17,"column":42}},"6":{"start":{"line":20,"column":2},"end":{"line":20,"column":30}},"7":{"start":{"line":21,"column":2},"end":{"line":21,"column":30}},"8":{"start":{"line":22,"column":2},"end":{"line":22,"column":18}},"9":{"start":{"line":23,"column":2},"end":{"line":23,"column":20}},"10":{"start":{"line":24,"column":2},"end":{"line":24,"column":20}},"11":{"start":{"line":25,"column":2},"end":{"line":25,"column":20}},"12":{"start":{"line":26,"column":2},"end":{"line":26,"column":20}},"13":{"start":{"line":27,"column":2},"end":{"line":27,"column":19}},"14":{"start":{"line":28,"column":2},"end":{"line":28,"column":19}},"15":{"start":{"line":29,"column":2},"end":{"line":29,"column":17}},"16":{"start":{"line":30,"column":2},"end":{"line":30,"column":16}},"17":{"start":{"line":33,"column":0},"end":{"line":33,"column":31}},"18":{"start":{"line":34,"column":0},"end":{"line":34,"column":39}},"19":{"start":{"line":36,"column":8},"end":{"line":36,"column":9}},"20":{"start":{"line":37,"column":13},"end":{"line":37,"column":39}},"21":{"start":{"line":38,"column":11},"end":{"line":38,"column":28}},"22":{"start":{"line":39,"column":11},"end":{"line":39,"column":28}},"23":{"start":{"line":40,"column":11},"end":{"line":40,"column":28}},"24":{"start":{"line":41,"column":11},"end":{"line":41,"column":28}},"25":{"start":{"line":43,"column":0},"end":{"line":45,"column":2}},"26":{"start":{"line":44,"column":2},"end":{"line":44,"column":31}},"27":{"start":{"line":47,"column":0},"end":{"line":47,"column":16}},"28":{"start":{"line":50,"column":9},"end":{"line":50,"column":26}},"29":{"start":{"line":51,"column":9},"end":{"line":51,"column":26}},"30":{"start":{"line":52,"column":12},"end":{"line":52,"column":29}},"31":{"start":{"line":53,"column":8},"end":{"line":53,"column":25}},"32":{"start":{"line":54,"column":8},"end":{"line":54,"column":25}},"33":{"start":{"line":55,"column":8},"end":{"line":55,"column":25}},"34":{"start":{"line":56,"column":8},"end":{"line":56,"column":25}},"35":{"start":{"line":57,"column":12},"end":{"line":57,"column":29}},"36":{"start":{"line":58,"column":9},"end":{"line":58,"column":26}},"37":{"start":{"line":59,"column":9},"end":{"line":59,"column":27}},"38":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"39":{"start":{"line":62,"column":27},"end":{"line":62,"column":33}},"40":{"start":{"line":64,"column":2},"end":{"line":130,"column":3}},"41":{"start":{"line":64,"column":16},"end":{"line":64,"column":17}},"42":{"start":{"line":64,"column":23},"end":{"line":64,"column":31}},"43":{"start":{"line":69,"column":12},"end":{"line":69,"column":16}},"44":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"45":{"start":{"line":72,"column":6},"end":{"line":72,"column":53}},"46":{"start":{"line":73,"column":6},"end":{"line":73,"column":12}},"47":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"48":{"start":{"line":77,"column":16},"end":{"line":77,"column":22}},"49":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"50":{"start":{"line":82,"column":10},"end":{"line":82,"column":27}},"51":{"start":{"line":84,"column":10},"end":{"line":84,"column":73}},"52":{"start":{"line":85,"column":10},"end":{"line":85,"column":34}},"53":{"start":{"line":86,"column":10},"end":{"line":86,"column":18}},"54":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"55":{"start":{"line":89,"column":10},"end":{"line":89,"column":68}},"56":{"start":{"line":90,"column":10},"end":{"line":90,"column":16}},"57":{"start":{"line":92,"column":8},"end":{"line":92,"column":29}},"58":{"start":{"line":93,"column":8},"end":{"line":93,"column":16}},"59":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"60":{"start":{"line":98,"column":10},"end":{"line":98,"column":27}},"61":{"start":{"line":99,"column":10},"end":{"line":99,"column":57}},"62":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"63":{"start":{"line":100,"column":35},"end":{"line":100,"column":66}},"64":{"start":{"line":101,"column":10},"end":{"line":101,"column":33}},"65":{"start":{"line":102,"column":10},"end":{"line":102,"column":18}},"66":{"start":{"line":104,"column":8},"end":{"line":104,"column":28}},"67":{"start":{"line":105,"column":8},"end":{"line":105,"column":16}},"68":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"69":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"70":{"start":{"line":112,"column":12},"end":{"line":112,"column":55}},"71":{"start":{"line":113,"column":12},"end":{"line":113,"column":18}},"72":{"start":{"line":115,"column":20},"end":{"line":115,"column":55}},"73":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"74":{"start":{"line":117,"column":12},"end":{"line":117,"column":33}},"75":{"start":{"line":119,"column":10},"end":{"line":119,"column":38}},"76":{"start":{"line":121,"column":10},"end":{"line":121,"column":33}},"77":{"start":{"line":122,"column":10},"end":{"line":122,"column":28}},"78":{"start":{"line":123,"column":10},"end":{"line":123,"column":25}},"79":{"start":{"line":124,"column":10},"end":{"line":124,"column":29}},"80":{"start":{"line":125,"column":10},"end":{"line":125,"column":18}},"81":{"start":{"line":127,"column":8},"end":{"line":127,"column":28}},"82":{"start":{"line":128,"column":8},"end":{"line":128,"column":16}},"83":{"start":{"line":134,"column":2},"end":{"line":136,"column":42}},"84":{"start":{"line":138,"column":2},"end":{"line":138,"column":15}},"85":{"start":{"line":139,"column":2},"end":{"line":139,"column":16}}},"fnMap":{"0":{"name":"ExtendedHeader","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":23}},"loc":{"start":{"line":19,"column":27},"end":{"line":31,"column":1}},"line":19},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":28},"end":{"line":43,"column":29}},"loc":{"start":{"line":43,"column":41},"end":{"line":45,"column":1}},"line":43},"2":{"name":"parse","decl":{"start":{"line":61,"column":9},"end":{"line":61,"column":14}},"loc":{"start":{"line":61,"column":19},"end":{"line":131,"column":1}},"line":61},"3":{"name":"error","decl":{"start":{"line":133,"column":9},"end":{"line":133,"column":14}},"loc":{"start":{"line":133,"column":25},"end":{"line":140,"column":1}},"line":133}},"branchMap":{"0":{"loc":{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":62,"column":33}},{"start":{"line":62,"column":2},"end":{"line":62,"column":33}}],"line":62},"1":{"loc":{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":74,"column":5}},{"start":{"line":71,"column":4},"end":{"line":74,"column":5}}],"line":71},"2":{"loc":{"start":{"line":71,"column":8},"end":{"line":71,"column":54}},"type":"binary-expr","locations":[{"start":{"line":71,"column":8},"end":{"line":71,"column":23}},{"start":{"line":71,"column":27},"end":{"line":71,"column":54}}],"line":71},"3":{"loc":{"start":{"line":76,"column":4},"end":{"line":129,"column":5}},"type":"switch","locations":[{"start":{"line":77,"column":6},"end":{"line":77,"column":22}},{"start":{"line":79,"column":6},"end":{"line":93,"column":16}},{"start":{"line":95,"column":6},"end":{"line":105,"column":16}},{"start":{"line":107,"column":6},"end":{"line":128,"column":16}}],"line":76},"4":{"loc":{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":87,"column":9}},{"start":{"line":81,"column":8},"end":{"line":87,"column":9}}],"line":81},"5":{"loc":{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":91,"column":9}},{"start":{"line":88,"column":8},"end":{"line":91,"column":9}}],"line":88},"6":{"loc":{"start":{"line":88,"column":12},"end":{"line":88,"column":28}},"type":"binary-expr","locations":[{"start":{"line":88,"column":12},"end":{"line":88,"column":18}},{"start":{"line":88,"column":22},"end":{"line":88,"column":28}}],"line":88},"7":{"loc":{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},"type":"if","locations":[{"start":{"line":97,"column":8},"end":{"line":103,"column":9}},{"start":{"line":97,"column":8},"end":{"line":103,"column":9}}],"line":97},"8":{"loc":{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},"type":"if","locations":[{"start":{"line":100,"column":10},"end":{"line":100,"column":66}},{"start":{"line":100,"column":10},"end":{"line":100,"column":66}}],"line":100},"9":{"loc":{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":126,"column":9}},{"start":{"line":109,"column":8},"end":{"line":126,"column":9}}],"line":109},"10":{"loc":{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},"type":"if","locations":[{"start":{"line":111,"column":10},"end":{"line":114,"column":11}},{"start":{"line":111,"column":10},"end":{"line":114,"column":11}}],"line":111},"11":{"loc":{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},"type":"if","locations":[{"start":{"line":116,"column":10},"end":{"line":118,"column":11}},{"start":{"line":116,"column":10},"end":{"line":118,"column":11}}],"line":116}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":4,"7":4,"8":4,"9":4,"10":4,"11":4,"12":4,"13":4,"14":4,"15":4,"16":4,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":4,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":4,"39":0,"40":4,"41":4,"42":4,"43":969,"44":969,"45":0,"46":0,"47":969,"48":0,"49":80,"50":26,"51":26,"52":26,"53":26,"54":54,"55":0,"56":0,"57":54,"58":54,"59":275,"60":26,"61":26,"62":26,"63":12,"64":26,"65":26,"66":249,"67":249,"68":614,"69":26,"70":0,"71":0,"72":26,"73":26,"74":20,"75":26,"76":26,"77":26,"78":26,"79":26,"80":26,"81":588,"82":588,"83":0,"84":0,"85":0},"f":{"0":4,"1":4,"2":4,"3":0},"b":{"0":[0,4],"1":[0,969],"2":[969,889],"3":[0,80,275,614],"4":[26,54],"5":[0,54],"6":[54,54],"7":[26,249],"8":[12,14],"9":[26,588],"10":[0,26],"11":[20,6]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"77cb382c69a46833a08275dbc55bf34db0dcd796","contentHash":"78a790af1726a774425fb478f1423068fe64414b747d89b597baf45139e7ae3d"},"/Users/isaacs/dev/js/tar/lib/extract.js":{"path":"/Users/isaacs/dev/js/tar/lib/extract.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"1":{"start":{"line":5,"column":10},"end":{"line":5,"column":30}},"2":{"start":{"line":6,"column":14},"end":{"line":6,"column":32}},"3":{"start":{"line":7,"column":15},"end":{"line":7,"column":34}},"4":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"6":{"start":{"line":11,"column":34},"end":{"line":11,"column":58}},"7":{"start":{"line":12,"column":2},"end":{"line":12,"column":23}},"8":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"9":{"start":{"line":15,"column":4},"end":{"line":15,"column":25}},"10":{"start":{"line":19,"column":2},"end":{"line":19,"column":59}},"11":{"start":{"line":20,"column":2},"end":{"line":20,"column":25}},"12":{"start":{"line":21,"column":2},"end":{"line":21,"column":23}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":26}},"14":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"15":{"start":{"line":25,"column":38},"end":{"line":25,"column":52}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":34}},"17":{"start":{"line":29,"column":2},"end":{"line":29,"column":14}},"18":{"start":{"line":30,"column":11},"end":{"line":30,"column":15}},"19":{"start":{"line":35,"column":2},"end":{"line":60,"column":4}},"20":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"21":{"start":{"line":39,"column":14},"end":{"line":39,"column":63}},"22":{"start":{"line":40,"column":6},"end":{"line":40,"column":39}},"23":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"24":{"start":{"line":42,"column":17},"end":{"line":42,"column":70}},"25":{"start":{"line":43,"column":8},"end":{"line":43,"column":50}},"26":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"27":{"start":{"line":47,"column":6},"end":{"line":48,"column":66}},"28":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"29":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"30":{"start":{"line":53,"column":21},"end":{"line":53,"column":41}},"31":{"start":{"line":54,"column":19},"end":{"line":54,"column":56}},"32":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"33":{"start":{"line":56,"column":8},"end":{"line":56,"column":65}},"34":{"start":{"line":58,"column":6},"end":{"line":58,"column":54}},"35":{"start":{"line":62,"column":2},"end":{"line":65,"column":4}},"36":{"start":{"line":63,"column":4},"end":{"line":63,"column":36}},"37":{"start":{"line":64,"column":4},"end":{"line":64,"column":15}},"38":{"start":{"line":67,"column":2},"end":{"line":69,"column":4}},"39":{"start":{"line":68,"column":4},"end":{"line":68,"column":25}},"40":{"start":{"line":71,"column":2},"end":{"line":73,"column":4}},"41":{"start":{"line":72,"column":4},"end":{"line":72,"column":20}},"42":{"start":{"line":79,"column":2},"end":{"line":84,"column":4}},"43":{"start":{"line":81,"column":4},"end":{"line":81,"column":21}},"44":{"start":{"line":82,"column":4},"end":{"line":82,"column":18}},"45":{"start":{"line":83,"column":4},"end":{"line":83,"column":20}},"46":{"start":{"line":87,"column":0},"end":{"line":87,"column":28}},"47":{"start":{"line":89,"column":0},"end":{"line":94,"column":1}},"48":{"start":{"line":90,"column":11},"end":{"line":90,"column":15}},"49":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"50":{"start":{"line":91,"column":31},"end":{"line":91,"column":57}},"51":{"start":{"line":92,"column":2},"end":{"line":92,"column":15}}},"fnMap":{"0":{"name":"Extract","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":16}},"loc":{"start":{"line":10,"column":24},"end":{"line":85,"column":1}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":35,"column":17},"end":{"line":35,"column":18}},"loc":{"start":{"line":35,"column":34},"end":{"line":60,"column":3}},"line":35},"2":{"name":"(anonymous_2)","decl":{"start":{"line":62,"column":24},"end":{"line":62,"column":25}},"loc":{"start":{"line":62,"column":36},"end":{"line":65,"column":3}},"line":62},"3":{"name":"(anonymous_3)","decl":{"start":{"line":67,"column":24},"end":{"line":67,"column":25}},"loc":{"start":{"line":67,"column":38},"end":{"line":69,"column":3}},"line":67},"4":{"name":"(anonymous_4)","decl":{"start":{"line":71,"column":24},"end":{"line":71,"column":25}},"loc":{"start":{"line":71,"column":35},"end":{"line":73,"column":3}},"line":71},"5":{"name":"(anonymous_5)","decl":{"start":{"line":79,"column":24},"end":{"line":79,"column":25}},"loc":{"start":{"line":79,"column":36},"end":{"line":84,"column":3}},"line":79},"6":{"name":"(anonymous_6)","decl":{"start":{"line":89,"column":31},"end":{"line":89,"column":32}},"loc":{"start":{"line":89,"column":43},"end":{"line":94,"column":1}},"line":89}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":11,"column":58}},{"start":{"line":11,"column":2},"end":{"line":11,"column":58}}],"line":11},"1":{"loc":{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":16,"column":3}},{"start":{"line":14,"column":2},"end":{"line":16,"column":3}}],"line":14},"2":{"loc":{"start":{"line":19,"column":14},"end":{"line":19,"column":59}},"type":"binary-expr","locations":[{"start":{"line":19,"column":14},"end":{"line":19,"column":23}},{"start":{"line":19,"column":27},"end":{"line":19,"column":59}}],"line":19},"3":{"loc":{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},"type":"if","locations":[{"start":{"line":25,"column":2},"end":{"line":25,"column":52}},{"start":{"line":25,"column":2},"end":{"line":25,"column":52}}],"line":25},"4":{"loc":{"start":{"line":25,"column":6},"end":{"line":25,"column":36}},"type":"binary-expr","locations":[{"start":{"line":25,"column":6},"end":{"line":25,"column":17}},{"start":{"line":25,"column":21},"end":{"line":25,"column":36}}],"line":25},"5":{"loc":{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":45,"column":5}},{"start":{"line":38,"column":4},"end":{"line":45,"column":5}}],"line":38},"6":{"loc":{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},"type":"if","locations":[{"start":{"line":41,"column":6},"end":{"line":44,"column":7}},{"start":{"line":41,"column":6},"end":{"line":44,"column":7}}],"line":41},"7":{"loc":{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},"type":"if","locations":[{"start":{"line":46,"column":4},"end":{"line":49,"column":5}},{"start":{"line":46,"column":4},"end":{"line":49,"column":5}}],"line":46},"8":{"loc":{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":59,"column":5}},{"start":{"line":51,"column":4},"end":{"line":59,"column":5}}],"line":51},"9":{"loc":{"start":{"line":52,"column":15},"end":{"line":52,"column":45}},"type":"binary-expr","locations":[{"start":{"line":52,"column":15},"end":{"line":52,"column":39}},{"start":{"line":52,"column":43},"end":{"line":52,"column":45}}],"line":52},"10":{"loc":{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},"type":"if","locations":[{"start":{"line":55,"column":6},"end":{"line":57,"column":7}},{"start":{"line":55,"column":6},"end":{"line":57,"column":7}}],"line":55},"11":{"loc":{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},"type":"if","locations":[{"start":{"line":91,"column":2},"end":{"line":91,"column":57}},{"start":{"line":91,"column":2},"end":{"line":91,"column":57}}],"line":91},"12":{"loc":{"start":{"line":91,"column":6},"end":{"line":91,"column":29}},"type":"binary-expr","locations":[{"start":{"line":91,"column":6},"end":{"line":91,"column":16}},{"start":{"line":91,"column":20},"end":{"line":91,"column":29}}],"line":91}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":1,"47":1,"48":0,"49":0,"50":0,"51":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3fb9f60facc409fe944dc36bd2e14fc6153e403d","contentHash":"3d9485ca58c6c768b022a39d276296b53647ccf39986885459406e933921c962"}} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/0471d9cf-687f-4ae8-84a5-ce7468becd03.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/0471d9cf-687f-4ae8-84a5-ce7468becd03.json
deleted file mode 100644
index b45408c..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/0471d9cf-687f-4ae8-84a5-ce7468becd03.json
+++ /dev/null
@@ -1 +0,0 @@
-{"uuid":"0471d9cf-687f-4ae8-84a5-ce7468becd03","parent":"37d58de4-deea-4808-bb77-d27685bd1501","pid":93247,"argv":["/usr/local/bin/node","/Users/isaacs/dev/js/tar/test/parse-discard.js"],"execArgv":["-r","/usr/local/lib/node_modules/tap/node_modules/esm/esm.js"],"cwd":"/Users/isaacs/dev/js/tar","time":1557878802822,"ppid":93238,"root":"e52f8603-1293-44df-8bfa-ed740bdd2b77","coverageFilename":"/Users/isaacs/dev/js/tar/.nyc_output/0471d9cf-687f-4ae8-84a5-ce7468becd03.json","externalId":"test/parse-discard.js","files":["/Users/isaacs/dev/js/tar/lib/pack.js","/Users/isaacs/dev/js/tar/lib/entry-writer.js","/Users/isaacs/dev/js/tar/lib/entry.js","/Users/isaacs/dev/js/tar/lib/global-header-writer.js","/Users/isaacs/dev/js/tar/lib/parse.js","/Users/isaacs/dev/js/tar/lib/buffer-entry.js","/Users/isaacs/dev/js/tar/lib/extended-header.js","/Users/isaacs/dev/js/tar/lib/extract.js"]} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/12bca2bc-6a2b-4f45-abc7-8483922a524d.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/12bca2bc-6a2b-4f45-abc7-8483922a524d.json
deleted file mode 100644
index a527876..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/12bca2bc-6a2b-4f45-abc7-8483922a524d.json
+++ /dev/null
@@ -1 +0,0 @@
-{"uuid":"12bca2bc-6a2b-4f45-abc7-8483922a524d","parent":"37d58de4-deea-4808-bb77-d27685bd1501","pid":93240,"argv":["/usr/local/bin/node","/Users/isaacs/dev/js/tar/test/dir-normalization.js"],"execArgv":["-r","/usr/local/lib/node_modules/tap/node_modules/esm/esm.js"],"cwd":"/Users/isaacs/dev/js/tar","time":1557878801286,"ppid":93238,"root":"e52f8603-1293-44df-8bfa-ed740bdd2b77","coverageFilename":"/Users/isaacs/dev/js/tar/.nyc_output/12bca2bc-6a2b-4f45-abc7-8483922a524d.json","externalId":"test/dir-normalization.js","files":["/Users/isaacs/dev/js/tar/lib/pack.js","/Users/isaacs/dev/js/tar/lib/entry-writer.js","/Users/isaacs/dev/js/tar/lib/entry.js","/Users/isaacs/dev/js/tar/lib/global-header-writer.js","/Users/isaacs/dev/js/tar/lib/parse.js","/Users/isaacs/dev/js/tar/lib/buffer-entry.js","/Users/isaacs/dev/js/tar/lib/extended-header.js","/Users/isaacs/dev/js/tar/lib/extract.js"]} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/37d58de4-deea-4808-bb77-d27685bd1501.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/37d58de4-deea-4808-bb77-d27685bd1501.json
deleted file mode 100644
index 8bb0420..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/37d58de4-deea-4808-bb77-d27685bd1501.json
+++ /dev/null
@@ -1 +0,0 @@
-{"uuid":"37d58de4-deea-4808-bb77-d27685bd1501","parent":null,"pid":93238,"argv":["/usr/local/bin/node","/usr/local/bin/tap","test/00-setup-fixtures.js","test/dir-normalization.js","test/error-on-broken.js","test/extract-move.js","test/extract.js","test/header.js","test/pack-no-proprietary.js","test/pack.js","test/parse-discard.js","test/parse.js","test/zz-cleanup.js"],"execArgv":[],"cwd":"/Users/isaacs/dev/js/tar","time":1557878798122,"ppid":93237,"root":"e52f8603-1293-44df-8bfa-ed740bdd2b77","coverageFilename":"/Users/isaacs/dev/js/tar/.nyc_output/37d58de4-deea-4808-bb77-d27685bd1501.json","files":[]} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/5ad8066b-6b8c-4bc8-b807-c40bf80898b7.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/5ad8066b-6b8c-4bc8-b807-c40bf80898b7.json
deleted file mode 100644
index b8f9b3e..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/5ad8066b-6b8c-4bc8-b807-c40bf80898b7.json
+++ /dev/null
@@ -1 +0,0 @@
-{"uuid":"5ad8066b-6b8c-4bc8-b807-c40bf80898b7","parent":"37d58de4-deea-4808-bb77-d27685bd1501","pid":93246,"argv":["/usr/local/bin/node","/Users/isaacs/dev/js/tar/test/pack.js"],"execArgv":["-r","/usr/local/lib/node_modules/tap/node_modules/esm/esm.js"],"cwd":"/Users/isaacs/dev/js/tar","time":1557878801645,"ppid":93238,"root":"e52f8603-1293-44df-8bfa-ed740bdd2b77","coverageFilename":"/Users/isaacs/dev/js/tar/.nyc_output/5ad8066b-6b8c-4bc8-b807-c40bf80898b7.json","externalId":"test/pack.js","files":[]} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/5cbf674c-7089-4b7d-b9de-2119be4dbb0b.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/5cbf674c-7089-4b7d-b9de-2119be4dbb0b.json
deleted file mode 100644
index 04bc15a..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/5cbf674c-7089-4b7d-b9de-2119be4dbb0b.json
+++ /dev/null
@@ -1 +0,0 @@
-{"uuid":"5cbf674c-7089-4b7d-b9de-2119be4dbb0b","parent":"37d58de4-deea-4808-bb77-d27685bd1501","pid":93241,"argv":["/usr/local/bin/node","/Users/isaacs/dev/js/tar/test/error-on-broken.js"],"execArgv":["-r","/usr/local/lib/node_modules/tap/node_modules/esm/esm.js"],"cwd":"/Users/isaacs/dev/js/tar","time":1557878801335,"ppid":93238,"root":"e52f8603-1293-44df-8bfa-ed740bdd2b77","coverageFilename":"/Users/isaacs/dev/js/tar/.nyc_output/5cbf674c-7089-4b7d-b9de-2119be4dbb0b.json","externalId":"test/error-on-broken.js","files":["/Users/isaacs/dev/js/tar/lib/pack.js","/Users/isaacs/dev/js/tar/lib/entry-writer.js","/Users/isaacs/dev/js/tar/lib/entry.js","/Users/isaacs/dev/js/tar/lib/global-header-writer.js","/Users/isaacs/dev/js/tar/lib/parse.js","/Users/isaacs/dev/js/tar/lib/buffer-entry.js","/Users/isaacs/dev/js/tar/lib/extended-header.js","/Users/isaacs/dev/js/tar/lib/extract.js"]} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/7853e29b-78ef-4ab4-b8fb-e1e176c0787b.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/7853e29b-78ef-4ab4-b8fb-e1e176c0787b.json
deleted file mode 100644
index b8e852c..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/7853e29b-78ef-4ab4-b8fb-e1e176c0787b.json
+++ /dev/null
@@ -1 +0,0 @@
-{"uuid":"7853e29b-78ef-4ab4-b8fb-e1e176c0787b","parent":"37d58de4-deea-4808-bb77-d27685bd1501","pid":93245,"argv":["/usr/local/bin/node","/Users/isaacs/dev/js/tar/test/pack-no-proprietary.js"],"execArgv":["-r","/usr/local/lib/node_modules/tap/node_modules/esm/esm.js"],"cwd":"/Users/isaacs/dev/js/tar","time":1557878801610,"ppid":93238,"root":"e52f8603-1293-44df-8bfa-ed740bdd2b77","coverageFilename":"/Users/isaacs/dev/js/tar/.nyc_output/7853e29b-78ef-4ab4-b8fb-e1e176c0787b.json","externalId":"test/pack-no-proprietary.js","files":[]} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/9d414044-b18d-4f6d-b2e0-531a89bf6f4f.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/9d414044-b18d-4f6d-b2e0-531a89bf6f4f.json
deleted file mode 100644
index f85d7b5..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/9d414044-b18d-4f6d-b2e0-531a89bf6f4f.json
+++ /dev/null
@@ -1 +0,0 @@
-{"uuid":"9d414044-b18d-4f6d-b2e0-531a89bf6f4f","parent":"37d58de4-deea-4808-bb77-d27685bd1501","pid":93250,"argv":["/usr/local/bin/node","/Users/isaacs/dev/js/tar/test/zz-cleanup.js"],"execArgv":["-r","/usr/local/lib/node_modules/tap/node_modules/esm/esm.js"],"cwd":"/Users/isaacs/dev/js/tar","time":1557878803490,"ppid":93238,"root":"e52f8603-1293-44df-8bfa-ed740bdd2b77","coverageFilename":"/Users/isaacs/dev/js/tar/.nyc_output/9d414044-b18d-4f6d-b2e0-531a89bf6f4f.json","externalId":"test/zz-cleanup.js","files":[]} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/c3ffeb8c-8e79-4a2c-b678-e5a917fe721e.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/c3ffeb8c-8e79-4a2c-b678-e5a917fe721e.json
deleted file mode 100644
index ad2a869..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/c3ffeb8c-8e79-4a2c-b678-e5a917fe721e.json
+++ /dev/null
@@ -1 +0,0 @@
-{"uuid":"c3ffeb8c-8e79-4a2c-b678-e5a917fe721e","parent":"37d58de4-deea-4808-bb77-d27685bd1501","pid":93243,"argv":["/usr/local/bin/node","/Users/isaacs/dev/js/tar/test/extract.js"],"execArgv":["-r","/usr/local/lib/node_modules/tap/node_modules/esm/esm.js"],"cwd":"/Users/isaacs/dev/js/tar","time":1557878801464,"ppid":93238,"root":"e52f8603-1293-44df-8bfa-ed740bdd2b77","coverageFilename":"/Users/isaacs/dev/js/tar/.nyc_output/c3ffeb8c-8e79-4a2c-b678-e5a917fe721e.json","externalId":"test/extract.js","files":["/Users/isaacs/dev/js/tar/lib/pack.js","/Users/isaacs/dev/js/tar/lib/entry-writer.js","/Users/isaacs/dev/js/tar/lib/entry.js","/Users/isaacs/dev/js/tar/lib/global-header-writer.js","/Users/isaacs/dev/js/tar/lib/parse.js","/Users/isaacs/dev/js/tar/lib/buffer-entry.js","/Users/isaacs/dev/js/tar/lib/extended-header.js","/Users/isaacs/dev/js/tar/lib/extract.js"]} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/ea0194cb-f599-402f-8876-84fb8251e8db.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/ea0194cb-f599-402f-8876-84fb8251e8db.json
deleted file mode 100644
index 18f129b..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/ea0194cb-f599-402f-8876-84fb8251e8db.json
+++ /dev/null
@@ -1 +0,0 @@
-{"uuid":"ea0194cb-f599-402f-8876-84fb8251e8db","parent":"37d58de4-deea-4808-bb77-d27685bd1501","pid":93239,"argv":["/usr/local/bin/node","/Users/isaacs/dev/js/tar/test/00-setup-fixtures.js"],"execArgv":["-r","/usr/local/lib/node_modules/tap/node_modules/esm/esm.js"],"cwd":"/Users/isaacs/dev/js/tar","time":1557878801284,"ppid":93238,"root":"e52f8603-1293-44df-8bfa-ed740bdd2b77","coverageFilename":"/Users/isaacs/dev/js/tar/.nyc_output/ea0194cb-f599-402f-8876-84fb8251e8db.json","externalId":"test/00-setup-fixtures.js","files":[]} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/eda6b7a3-5e15-440f-8619-e11a15a07f77.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/eda6b7a3-5e15-440f-8619-e11a15a07f77.json
deleted file mode 100644
index bf261bf..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/eda6b7a3-5e15-440f-8619-e11a15a07f77.json
+++ /dev/null
@@ -1 +0,0 @@
-{"uuid":"eda6b7a3-5e15-440f-8619-e11a15a07f77","parent":"37d58de4-deea-4808-bb77-d27685bd1501","pid":93242,"argv":["/usr/local/bin/node","/Users/isaacs/dev/js/tar/test/extract-move.js"],"execArgv":["-r","/usr/local/lib/node_modules/tap/node_modules/esm/esm.js"],"cwd":"/Users/isaacs/dev/js/tar","time":1557878801409,"ppid":93238,"root":"e52f8603-1293-44df-8bfa-ed740bdd2b77","coverageFilename":"/Users/isaacs/dev/js/tar/.nyc_output/eda6b7a3-5e15-440f-8619-e11a15a07f77.json","externalId":"test/extract-move.js","files":["/Users/isaacs/dev/js/tar/lib/pack.js","/Users/isaacs/dev/js/tar/lib/entry-writer.js","/Users/isaacs/dev/js/tar/lib/entry.js","/Users/isaacs/dev/js/tar/lib/global-header-writer.js","/Users/isaacs/dev/js/tar/lib/parse.js","/Users/isaacs/dev/js/tar/lib/buffer-entry.js","/Users/isaacs/dev/js/tar/lib/extended-header.js","/Users/isaacs/dev/js/tar/lib/extract.js"]} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/fb518800-240c-42ff-811f-79e92708d9db.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/fb518800-240c-42ff-811f-79e92708d9db.json
deleted file mode 100644
index dcf5d5b..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/fb518800-240c-42ff-811f-79e92708d9db.json
+++ /dev/null
@@ -1 +0,0 @@
-{"uuid":"fb518800-240c-42ff-811f-79e92708d9db","parent":"37d58de4-deea-4808-bb77-d27685bd1501","pid":93244,"argv":["/usr/local/bin/node","/Users/isaacs/dev/js/tar/test/header.js"],"execArgv":["-r","/usr/local/lib/node_modules/tap/node_modules/esm/esm.js"],"cwd":"/Users/isaacs/dev/js/tar","time":1557878801608,"ppid":93238,"root":"e52f8603-1293-44df-8bfa-ed740bdd2b77","coverageFilename":"/Users/isaacs/dev/js/tar/.nyc_output/fb518800-240c-42ff-811f-79e92708d9db.json","externalId":"test/header.js","files":["/Users/isaacs/dev/js/tar/lib/pack.js","/Users/isaacs/dev/js/tar/lib/entry-writer.js","/Users/isaacs/dev/js/tar/lib/entry.js","/Users/isaacs/dev/js/tar/lib/global-header-writer.js","/Users/isaacs/dev/js/tar/lib/parse.js","/Users/isaacs/dev/js/tar/lib/buffer-entry.js","/Users/isaacs/dev/js/tar/lib/extended-header.js","/Users/isaacs/dev/js/tar/lib/extract.js"]} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/fdecfc06-a944-4897-9530-e08f62883fc1.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/fdecfc06-a944-4897-9530-e08f62883fc1.json
deleted file mode 100644
index dad6627..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/fdecfc06-a944-4897-9530-e08f62883fc1.json
+++ /dev/null
@@ -1 +0,0 @@
-{"uuid":"fdecfc06-a944-4897-9530-e08f62883fc1","parent":"37d58de4-deea-4808-bb77-d27685bd1501","pid":93248,"argv":["/usr/local/bin/node","/Users/isaacs/dev/js/tar/test/parse.js"],"execArgv":["-r","/usr/local/lib/node_modules/tap/node_modules/esm/esm.js"],"cwd":"/Users/isaacs/dev/js/tar","time":1557878802931,"ppid":93238,"root":"e52f8603-1293-44df-8bfa-ed740bdd2b77","coverageFilename":"/Users/isaacs/dev/js/tar/.nyc_output/fdecfc06-a944-4897-9530-e08f62883fc1.json","externalId":"test/parse.js","files":["/Users/isaacs/dev/js/tar/lib/pack.js","/Users/isaacs/dev/js/tar/lib/entry-writer.js","/Users/isaacs/dev/js/tar/lib/entry.js","/Users/isaacs/dev/js/tar/lib/global-header-writer.js","/Users/isaacs/dev/js/tar/lib/parse.js","/Users/isaacs/dev/js/tar/lib/buffer-entry.js","/Users/isaacs/dev/js/tar/lib/extended-header.js","/Users/isaacs/dev/js/tar/lib/extract.js"]} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/index.json b/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/index.json
deleted file mode 100644
index 9550e8e..0000000
--- a/node_modules/node-gyp/node_modules/tar/.nyc_output/processinfo/index.json
+++ /dev/null
@@ -1 +0,0 @@
-{"processes":{"0471d9cf-687f-4ae8-84a5-ce7468becd03":{"parent":"37d58de4-deea-4808-bb77-d27685bd1501","externalId":"test/parse-discard.js","children":[]},"12bca2bc-6a2b-4f45-abc7-8483922a524d":{"parent":"37d58de4-deea-4808-bb77-d27685bd1501","externalId":"test/dir-normalization.js","children":[]},"37d58de4-deea-4808-bb77-d27685bd1501":{"parent":null,"children":["0471d9cf-687f-4ae8-84a5-ce7468becd03","12bca2bc-6a2b-4f45-abc7-8483922a524d","5ad8066b-6b8c-4bc8-b807-c40bf80898b7","5cbf674c-7089-4b7d-b9de-2119be4dbb0b","7853e29b-78ef-4ab4-b8fb-e1e176c0787b","9d414044-b18d-4f6d-b2e0-531a89bf6f4f","c3ffeb8c-8e79-4a2c-b678-e5a917fe721e","ea0194cb-f599-402f-8876-84fb8251e8db","eda6b7a3-5e15-440f-8619-e11a15a07f77","fb518800-240c-42ff-811f-79e92708d9db","fdecfc06-a944-4897-9530-e08f62883fc1"]},"5ad8066b-6b8c-4bc8-b807-c40bf80898b7":{"parent":"37d58de4-deea-4808-bb77-d27685bd1501","externalId":"test/pack.js","children":[]},"5cbf674c-7089-4b7d-b9de-2119be4dbb0b":{"parent":"37d58de4-deea-4808-bb77-d27685bd1501","externalId":"test/error-on-broken.js","children":[]},"7853e29b-78ef-4ab4-b8fb-e1e176c0787b":{"parent":"37d58de4-deea-4808-bb77-d27685bd1501","externalId":"test/pack-no-proprietary.js","children":[]},"9d414044-b18d-4f6d-b2e0-531a89bf6f4f":{"parent":"37d58de4-deea-4808-bb77-d27685bd1501","externalId":"test/zz-cleanup.js","children":[]},"c3ffeb8c-8e79-4a2c-b678-e5a917fe721e":{"parent":"37d58de4-deea-4808-bb77-d27685bd1501","externalId":"test/extract.js","children":[]},"ea0194cb-f599-402f-8876-84fb8251e8db":{"parent":"37d58de4-deea-4808-bb77-d27685bd1501","externalId":"test/00-setup-fixtures.js","children":[]},"eda6b7a3-5e15-440f-8619-e11a15a07f77":{"parent":"37d58de4-deea-4808-bb77-d27685bd1501","externalId":"test/extract-move.js","children":[]},"fb518800-240c-42ff-811f-79e92708d9db":{"parent":"37d58de4-deea-4808-bb77-d27685bd1501","externalId":"test/header.js","children":[]},"fdecfc06-a944-4897-9530-e08f62883fc1":{"parent":"37d58de4-deea-4808-bb77-d27685bd1501","externalId":"test/parse.js","children":[]}},"files":{"/Users/isaacs/dev/js/tar/lib/pack.js":["0471d9cf-687f-4ae8-84a5-ce7468becd03","12bca2bc-6a2b-4f45-abc7-8483922a524d","5cbf674c-7089-4b7d-b9de-2119be4dbb0b","c3ffeb8c-8e79-4a2c-b678-e5a917fe721e","eda6b7a3-5e15-440f-8619-e11a15a07f77","fb518800-240c-42ff-811f-79e92708d9db","fdecfc06-a944-4897-9530-e08f62883fc1"],"/Users/isaacs/dev/js/tar/lib/entry-writer.js":["0471d9cf-687f-4ae8-84a5-ce7468becd03","12bca2bc-6a2b-4f45-abc7-8483922a524d","5cbf674c-7089-4b7d-b9de-2119be4dbb0b","c3ffeb8c-8e79-4a2c-b678-e5a917fe721e","eda6b7a3-5e15-440f-8619-e11a15a07f77","fb518800-240c-42ff-811f-79e92708d9db","fdecfc06-a944-4897-9530-e08f62883fc1"],"/Users/isaacs/dev/js/tar/lib/entry.js":["0471d9cf-687f-4ae8-84a5-ce7468becd03","12bca2bc-6a2b-4f45-abc7-8483922a524d","5cbf674c-7089-4b7d-b9de-2119be4dbb0b","c3ffeb8c-8e79-4a2c-b678-e5a917fe721e","eda6b7a3-5e15-440f-8619-e11a15a07f77","fb518800-240c-42ff-811f-79e92708d9db","fdecfc06-a944-4897-9530-e08f62883fc1"],"/Users/isaacs/dev/js/tar/lib/global-header-writer.js":["0471d9cf-687f-4ae8-84a5-ce7468becd03","12bca2bc-6a2b-4f45-abc7-8483922a524d","5cbf674c-7089-4b7d-b9de-2119be4dbb0b","c3ffeb8c-8e79-4a2c-b678-e5a917fe721e","eda6b7a3-5e15-440f-8619-e11a15a07f77","fb518800-240c-42ff-811f-79e92708d9db","fdecfc06-a944-4897-9530-e08f62883fc1"],"/Users/isaacs/dev/js/tar/lib/parse.js":["0471d9cf-687f-4ae8-84a5-ce7468becd03","12bca2bc-6a2b-4f45-abc7-8483922a524d","5cbf674c-7089-4b7d-b9de-2119be4dbb0b","c3ffeb8c-8e79-4a2c-b678-e5a917fe721e","eda6b7a3-5e15-440f-8619-e11a15a07f77","fb518800-240c-42ff-811f-79e92708d9db","fdecfc06-a944-4897-9530-e08f62883fc1"],"/Users/isaacs/dev/js/tar/lib/buffer-entry.js":["0471d9cf-687f-4ae8-84a5-ce7468becd03","12bca2bc-6a2b-4f45-abc7-8483922a524d","5cbf674c-7089-4b7d-b9de-2119be4dbb0b","c3ffeb8c-8e79-4a2c-b678-e5a917fe721e","eda6b7a3-5e15-440f-8619-e11a15a07f77","fb518800-240c-42ff-811f-79e92708d9db","fdecfc06-a944-4897-9530-e08f62883fc1"],"/Users/isaacs/dev/js/tar/lib/extended-header.js":["0471d9cf-687f-4ae8-84a5-ce7468becd03","12bca2bc-6a2b-4f45-abc7-8483922a524d","5cbf674c-7089-4b7d-b9de-2119be4dbb0b","c3ffeb8c-8e79-4a2c-b678-e5a917fe721e","eda6b7a3-5e15-440f-8619-e11a15a07f77","fb518800-240c-42ff-811f-79e92708d9db","fdecfc06-a944-4897-9530-e08f62883fc1"],"/Users/isaacs/dev/js/tar/lib/extract.js":["0471d9cf-687f-4ae8-84a5-ce7468becd03","12bca2bc-6a2b-4f45-abc7-8483922a524d","5cbf674c-7089-4b7d-b9de-2119be4dbb0b","c3ffeb8c-8e79-4a2c-b678-e5a917fe721e","eda6b7a3-5e15-440f-8619-e11a15a07f77","fb518800-240c-42ff-811f-79e92708d9db","fdecfc06-a944-4897-9530-e08f62883fc1"]},"externalIds":{"test/parse-discard.js":{"root":"0471d9cf-687f-4ae8-84a5-ce7468becd03","children":[]},"test/dir-normalization.js":{"root":"12bca2bc-6a2b-4f45-abc7-8483922a524d","children":[]},"test/pack.js":{"root":"5ad8066b-6b8c-4bc8-b807-c40bf80898b7","children":[]},"test/error-on-broken.js":{"root":"5cbf674c-7089-4b7d-b9de-2119be4dbb0b","children":[]},"test/pack-no-proprietary.js":{"root":"7853e29b-78ef-4ab4-b8fb-e1e176c0787b","children":[]},"test/zz-cleanup.js":{"root":"9d414044-b18d-4f6d-b2e0-531a89bf6f4f","children":[]},"test/extract.js":{"root":"c3ffeb8c-8e79-4a2c-b678-e5a917fe721e","children":[]},"test/00-setup-fixtures.js":{"root":"ea0194cb-f599-402f-8876-84fb8251e8db","children":[]},"test/extract-move.js":{"root":"eda6b7a3-5e15-440f-8619-e11a15a07f77","children":[]},"test/header.js":{"root":"fb518800-240c-42ff-811f-79e92708d9db","children":[]},"test/parse.js":{"root":"fdecfc06-a944-4897-9530-e08f62883fc1","children":[]}}} \ No newline at end of file
diff --git a/node_modules/node-gyp/node_modules/tar/.travis.yml b/node_modules/node-gyp/node_modules/tar/.travis.yml
deleted file mode 100644
index fca8ef0..0000000
--- a/node_modules/node-gyp/node_modules/tar/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
- - 0.10
- - 0.11
diff --git a/node_modules/node-gyp/node_modules/tar/LICENSE b/node_modules/node-gyp/node_modules/tar/LICENSE
deleted file mode 100644
index 019b7e4..0000000
--- a/node_modules/node-gyp/node_modules/tar/LICENSE
+++ /dev/null
@@ -1,12 +0,0 @@
-The ISC License
-Copyright (c) Isaac Z. Schlueter and Contributors
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/node-gyp/node_modules/tar/README.md b/node_modules/node-gyp/node_modules/tar/README.md
deleted file mode 100644
index cfda2ac..0000000
--- a/node_modules/node-gyp/node_modules/tar/README.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# node-tar
-
-Tar for Node.js.
-
-[![NPM](https://nodei.co/npm/tar.png)](https://nodei.co/npm/tar/)
-
-## API
-
-See `examples/` for usage examples.
-
-### var tar = require('tar')
-
-Returns an object with `.Pack`, `.Extract` and `.Parse` methods.
-
-### tar.Pack([properties])
-
-Returns a through stream. Use
-[fstream](https://npmjs.org/package/fstream) to write files into the
-pack stream and you will receive tar archive data from the pack
-stream.
-
-This only works with directories, it does not work with individual files.
-
-The optional `properties` object are used to set properties in the tar
-'Global Extended Header'. If the `fromBase` property is set to true,
-the tar will contain files relative to the path passed, and not with
-the path included.
-
-### tar.Extract([options])
-
-Returns a through stream. Write tar data to the stream and the files
-in the tarball will be extracted onto the filesystem.
-
-`options` can be:
-
-```js
-{
- path: '/path/to/extract/tar/into',
- strip: 0, // how many path segments to strip from the root when extracting
-}
-```
-
-`options` also get passed to the `fstream.Writer` instance that `tar`
-uses internally.
-
-### tar.Parse()
-
-Returns a writable stream. Write tar data to it and it will emit
-`entry` events for each entry parsed from the tarball. This is used by
-`tar.Extract`.
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/base.css b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/base.css
deleted file mode 100644
index 417c7ad..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/base.css
+++ /dev/null
@@ -1,212 +0,0 @@
-body, html {
- margin:0; padding: 0;
- height: 100%;
-}
-body {
- font-family: Helvetica Neue, Helvetica, Arial;
- font-size: 14px;
- color:#333;
-}
-.small { font-size: 12px; }
-*, *:after, *:before {
- -webkit-box-sizing:border-box;
- -moz-box-sizing:border-box;
- box-sizing:border-box;
- }
-h1 { font-size: 20px; margin: 0;}
-h2 { font-size: 14px; }
-pre {
- font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
- margin: 0;
- padding: 0;
- -moz-tab-size: 2;
- -o-tab-size: 2;
- tab-size: 2;
-}
-a { color:#0074D9; text-decoration:none; }
-a:hover { text-decoration:underline; }
-.strong { font-weight: bold; }
-.space-top1 { padding: 10px 0 0 0; }
-.pad2y { padding: 20px 0; }
-.pad1y { padding: 10px 0; }
-.pad2x { padding: 0 20px; }
-.pad2 { padding: 20px; }
-.pad1 { padding: 10px; }
-.space-left2 { padding-left:55px; }
-.space-right2 { padding-right:20px; }
-.center { text-align:center; }
-.clearfix { display:block; }
-.clearfix:after {
- content:'';
- display:block;
- height:0;
- clear:both;
- visibility:hidden;
- }
-.fl { float: left; }
-@media only screen and (max-width:640px) {
- .col3 { width:100%; max-width:100%; }
- .hide-mobile { display:none!important; }
-}
-
-.quiet {
- color: #7f7f7f;
- color: rgba(0,0,0,0.5);
-}
-.quiet a { opacity: 0.7; }
-
-.fraction {
- font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
- font-size: 10px;
- color: #555;
- background: #E8E8E8;
- padding: 4px 5px;
- border-radius: 3px;
- vertical-align: middle;
-}
-
-div.path a:link, div.path a:visited { color: #333; }
-table.coverage {
- border-collapse: collapse;
- margin: 10px 0 0 0;
- padding: 0;
-}
-
-table.coverage td {
- margin: 0;
- padding: 0;
- vertical-align: top;
-}
-table.coverage td.line-count {
- text-align: right;
- padding: 0 5px 0 20px;
-}
-table.coverage td.line-coverage {
- text-align: right;
- padding-right: 10px;
- min-width:20px;
-}
-
-table.coverage td span.cline-any {
- display: inline-block;
- padding: 0 5px;
- width: 100%;
-}
-.missing-if-branch {
- display: inline-block;
- margin-right: 5px;
- border-radius: 3px;
- position: relative;
- padding: 0 4px;
- background: #333;
- color: yellow;
-}
-
-.skip-if-branch {
- display: none;
- margin-right: 10px;
- position: relative;
- padding: 0 4px;
- background: #ccc;
- color: white;
-}
-.missing-if-branch .typ, .skip-if-branch .typ {
- color: inherit !important;
-}
-.coverage-summary {
- border-collapse: collapse;
- width: 100%;
-}
-.coverage-summary tr { border-bottom: 1px solid #bbb; }
-.keyline-all { border: 1px solid #ddd; }
-.coverage-summary td, .coverage-summary th { padding: 10px; }
-.coverage-summary tbody { border: 1px solid #bbb; }
-.coverage-summary td { border-right: 1px solid #bbb; }
-.coverage-summary td:last-child { border-right: none; }
-.coverage-summary th {
- text-align: left;
- font-weight: normal;
- white-space: nowrap;
-}
-.coverage-summary th.file { border-right: none !important; }
-.coverage-summary th.pct { }
-.coverage-summary th.pic,
-.coverage-summary th.abs,
-.coverage-summary td.pct,
-.coverage-summary td.abs { text-align: right; }
-.coverage-summary td.file { white-space: nowrap; }
-.coverage-summary td.pic { min-width: 120px !important; }
-.coverage-summary tfoot td { }
-
-.coverage-summary .sorter {
- height: 10px;
- width: 7px;
- display: inline-block;
- margin-left: 0.5em;
- background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
-}
-.coverage-summary .sorted .sorter {
- background-position: 0 -20px;
-}
-.coverage-summary .sorted-desc .sorter {
- background-position: 0 -10px;
-}
-.status-line { height: 10px; }
-/* dark red */
-.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
-.low .chart { border:1px solid #C21F39 }
-/* medium red */
-.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
-/* light red */
-.low, .cline-no { background:#FCE1E5 }
-/* light green */
-.high, .cline-yes { background:rgb(230,245,208) }
-/* medium green */
-.cstat-yes { background:rgb(161,215,106) }
-/* dark green */
-.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
-.high .chart { border:1px solid rgb(77,146,33) }
-
-
-.medium .chart { border:1px solid #666; }
-.medium .cover-fill { background: #666; }
-
-.cbranch-no { background: yellow !important; color: #111; }
-
-.cstat-skip { background: #ddd; color: #111; }
-.fstat-skip { background: #ddd; color: #111 !important; }
-.cbranch-skip { background: #ddd !important; color: #111; }
-
-span.cline-neutral { background: #eaeaea; }
-.medium { background: #eaeaea; }
-
-.cover-fill, .cover-empty {
- display:inline-block;
- height: 12px;
-}
-.chart {
- line-height: 0;
-}
-.cover-empty {
- background: white;
-}
-.cover-full {
- border-right: none !important;
-}
-pre.prettyprint {
- border: none !important;
- padding: 0 !important;
- margin: 0 !important;
-}
-.com { color: #999 !important; }
-.ignore-none { color: #999; font-weight: normal; }
-
-.wrapper {
- min-height: 100%;
- height: auto !important;
- height: 100%;
- margin: 0 auto -48px;
-}
-.footer, .push {
- height: 48px;
-}
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/index.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/index.html
deleted file mode 100644
index 2722480..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/index.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for All files</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="prettify.css" />
- <link rel="stylesheet" href="base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- All files
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">99.94% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>1795/1796</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">99.67% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>1224/1228</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>271/271</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">99.94% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>1748/1749</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
- <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
- <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
- <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
- <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
- <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
- <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
- <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
- <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
- <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
- <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
- <td class="file high" data-value="tar"><a href="tar/index.html">tar</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="13" class="abs high">13/13</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="0" class="abs high">0/0</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="0" class="abs high">0/0</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="13" class="abs high">13/13</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="tar/lib"><a href="tar/lib/index.html">tar/lib</a></td>
- <td data-value="99.94" class="pic high"><div class="chart"><div class="cover-fill" style="width: 99%;"></div><div class="cover-empty" style="width:1%;"></div></div></td>
- <td data-value="99.94" class="pct high">99.94%</td>
- <td data-value="1783" class="abs high">1782/1783</td>
- <td data-value="99.67" class="pct high">99.67%</td>
- <td data-value="1228" class="abs high">1224/1228</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="271" class="abs high">271/271</td>
- <td data-value="99.94" class="pct high">99.94%</td>
- <td data-value="1736" class="abs high">1735/1736</td>
- </tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/prettify.css b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/prettify.css
deleted file mode 100644
index b317a7c..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/prettify.css
+++ /dev/null
@@ -1 +0,0 @@
-.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/prettify.js b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/prettify.js
deleted file mode 100644
index ef51e03..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/prettify.js
+++ /dev/null
@@ -1 +0,0 @@
-window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/sort-arrow-sprite.png b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/sort-arrow-sprite.png
deleted file mode 100644
index 03f704a..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/sort-arrow-sprite.png
+++ /dev/null
Binary files differ
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/sorter.js b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/sorter.js
deleted file mode 100644
index 6c5034e..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/sorter.js
+++ /dev/null
@@ -1,158 +0,0 @@
-var addSorting = (function () {
- "use strict";
- var cols,
- currentSort = {
- index: 0,
- desc: false
- };
-
- // returns the summary table element
- function getTable() { return document.querySelector('.coverage-summary'); }
- // returns the thead element of the summary table
- function getTableHeader() { return getTable().querySelector('thead tr'); }
- // returns the tbody element of the summary table
- function getTableBody() { return getTable().querySelector('tbody'); }
- // returns the th element for nth column
- function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; }
-
- // loads all columns
- function loadColumns() {
- var colNodes = getTableHeader().querySelectorAll('th'),
- colNode,
- cols = [],
- col,
- i;
-
- for (i = 0; i < colNodes.length; i += 1) {
- colNode = colNodes[i];
- col = {
- key: colNode.getAttribute('data-col'),
- sortable: !colNode.getAttribute('data-nosort'),
- type: colNode.getAttribute('data-type') || 'string'
- };
- cols.push(col);
- if (col.sortable) {
- col.defaultDescSort = col.type === 'number';
- colNode.innerHTML = colNode.innerHTML + '<span class="sorter"></span>';
- }
- }
- return cols;
- }
- // attaches a data attribute to every tr element with an object
- // of data values keyed by column name
- function loadRowData(tableRow) {
- var tableCols = tableRow.querySelectorAll('td'),
- colNode,
- col,
- data = {},
- i,
- val;
- for (i = 0; i < tableCols.length; i += 1) {
- colNode = tableCols[i];
- col = cols[i];
- val = colNode.getAttribute('data-value');
- if (col.type === 'number') {
- val = Number(val);
- }
- data[col.key] = val;
- }
- return data;
- }
- // loads all row data
- function loadData() {
- var rows = getTableBody().querySelectorAll('tr'),
- i;
-
- for (i = 0; i < rows.length; i += 1) {
- rows[i].data = loadRowData(rows[i]);
- }
- }
- // sorts the table using the data for the ith column
- function sortByIndex(index, desc) {
- var key = cols[index].key,
- sorter = function (a, b) {
- a = a.data[key];
- b = b.data[key];
- return a < b ? -1 : a > b ? 1 : 0;
- },
- finalSorter = sorter,
- tableBody = document.querySelector('.coverage-summary tbody'),
- rowNodes = tableBody.querySelectorAll('tr'),
- rows = [],
- i;
-
- if (desc) {
- finalSorter = function (a, b) {
- return -1 * sorter(a, b);
- };
- }
-
- for (i = 0; i < rowNodes.length; i += 1) {
- rows.push(rowNodes[i]);
- tableBody.removeChild(rowNodes[i]);
- }
-
- rows.sort(finalSorter);
-
- for (i = 0; i < rows.length; i += 1) {
- tableBody.appendChild(rows[i]);
- }
- }
- // removes sort indicators for current column being sorted
- function removeSortIndicators() {
- var col = getNthColumn(currentSort.index),
- cls = col.className;
-
- cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
- col.className = cls;
- }
- // adds sort indicators for current column being sorted
- function addSortIndicators() {
- getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted';
- }
- // adds event listeners for all sorter widgets
- function enableUI() {
- var i,
- el,
- ithSorter = function ithSorter(i) {
- var col = cols[i];
-
- return function () {
- var desc = col.defaultDescSort;
-
- if (currentSort.index === i) {
- desc = !currentSort.desc;
- }
- sortByIndex(i, desc);
- removeSortIndicators();
- currentSort.index = i;
- currentSort.desc = desc;
- addSortIndicators();
- };
- };
- for (i =0 ; i < cols.length; i += 1) {
- if (cols[i].sortable) {
- // add the click event handler on the th so users
- // dont have to click on those tiny arrows
- el = getNthColumn(i).querySelector('.sorter').parentElement;
- if (el.addEventListener) {
- el.addEventListener('click', ithSorter(i));
- } else {
- el.attachEvent('onclick', ithSorter(i));
- }
- }
- }
- }
- // adds sorting functionality to the UI
- return function () {
- if (!getTable()) {
- return;
- }
- cols = loadColumns();
- loadData(cols);
- addSortIndicators();
- enableUI();
- };
-})();
-
-window.addEventListener('load', addSorting);
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/index.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/index.html
deleted file mode 100644
index 9c917bd..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../prettify.css" />
- <link rel="stylesheet" href="../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../index.html">All files</a> tar
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>13/13</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>0/0</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>0/0</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>13/13</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
- <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
- <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
- <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
- <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
- <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
- <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
- <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
- <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
- <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
- <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
- <td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="13" class="abs high">13/13</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="0" class="abs high">0/0</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="0" class="abs high">0/0</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="13" class="abs high">13/13</td>
- </tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/index.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/index.js.html
deleted file mode 100644
index f04c992..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/index.js.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/index.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../prettify.css" />
- <link rel="stylesheet" href="../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../index.html">All files</a> / <a href="index.html">tar</a> index.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>13/13</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>0/0</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>0/0</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>13/13</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-&nbsp;
-// high-level commands
-exports.c = exports.create = require('./lib/create.js')
-exports.r = exports.replace = require('./lib/replace.js')
-exports.t = exports.list = require('./lib/list.js')
-exports.u = exports.update = require('./lib/update.js')
-exports.x = exports.extract = require('./lib/extract.js')
-&nbsp;
-// classes
-exports.Pack = require('./lib/pack.js')
-exports.Unpack = require('./lib/unpack.js')
-exports.Parse = require('./lib/parse.js')
-exports.ReadEntry = require('./lib/read-entry.js')
-exports.WriteEntry = require('./lib/write-entry.js')
-exports.Header = require('./lib/header.js')
-exports.Pax = require('./lib/pax.js')
-exports.types = require('./lib/types.js')
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/create.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/create.js.html
deleted file mode 100644
index 2f01c7e..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/create.js.html
+++ /dev/null
@@ -1,380 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/create.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> create.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>59/59</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>35/35</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>12/12</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>59/59</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">15x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">15x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">15x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">8x</span>
-<span class="cline-any cline-yes">8x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-&nbsp;
-// tar -c
-const hlo = require('./high-level-opt.js')
-&nbsp;
-const Pack = require('./pack.js')
-const fs = require('fs')
-const fsm = require('fs-minipass')
-const t = require('./list.js')
-const path = require('path')
-&nbsp;
-const c = module.exports = (opt_, files, cb) =&gt; {
- if (typeof files === 'function')
- cb = files
-&nbsp;
- if (Array.isArray(opt_))
- files = opt_, opt_ = {}
-&nbsp;
- if (!files || !Array.isArray(files) || !files.length)
- throw new TypeError('no files or directories specified')
-&nbsp;
- files = Array.from(files)
-&nbsp;
- const opt = hlo(opt_)
-&nbsp;
- if (opt.sync &amp;&amp; typeof cb === 'function')
- throw new TypeError('callback not supported for sync tar functions')
-&nbsp;
- if (!opt.file &amp;&amp; typeof cb === 'function')
- throw new TypeError('callback only supported with file option')
-&nbsp;
- return opt.file &amp;&amp; opt.sync ? createFileSync(opt, files)
- : opt.file ? createFile(opt, files, cb)
- : opt.sync ? createSync(opt, files)
- : create(opt, files)
-}
-&nbsp;
-const createFileSync = (opt, files) =&gt; {
- const p = new Pack.Sync(opt)
- const stream = new fsm.WriteStreamSync(opt.file, {
- mode: opt.mode || 0o666
- })
- p.pipe(stream)
- addFilesSync(p, files)
-}
-&nbsp;
-const createFile = (opt, files, cb) =&gt; {
- const p = new Pack(opt)
- const stream = new fsm.WriteStream(opt.file, {
- mode: opt.mode || 0o666
- })
- p.pipe(stream)
-&nbsp;
- const promise = new Promise((res, rej) =&gt; {
- stream.on('error', rej)
- stream.on('close', res)
- p.on('error', rej)
- })
-&nbsp;
- addFilesAsync(p, files)
-&nbsp;
- return cb ? promise.then(cb, cb) : promise
-}
-&nbsp;
-const addFilesSync = (p, files) =&gt; {
- files.forEach(file =&gt; {
- if (file.charAt(0) === '@')
- t({
- file: path.resolve(p.cwd, file.substr(1)),
- sync: true,
- noResume: true,
- onentry: entry =&gt; p.add(entry)
- })
- else
- p.add(file)
- })
- p.end()
-}
-&nbsp;
-const addFilesAsync = (p, files) =&gt; {
- while (files.length) {
- const file = files.shift()
- if (file.charAt(0) === '@')
- return t({
- file: path.resolve(p.cwd, file.substr(1)),
- noResume: true,
- onentry: entry =&gt; p.add(entry)
- }).then(_ =&gt; addFilesAsync(p, files))
- else
- p.add(file)
- }
- p.end()
-}
-&nbsp;
-const createSync = (opt, files) =&gt; {
- const p = new Pack.Sync(opt)
- addFilesSync(p, files)
- return p
-}
-&nbsp;
-const create = (opt, files) =&gt; {
- const p = new Pack(opt)
- addFilesAsync(p, files)
- return p
-}
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/extract.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/extract.js.html
deleted file mode 100644
index 96245c7..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/extract.js.html
+++ /dev/null
@@ -1,401 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/extract.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> extract.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>61/61</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>45/45</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>12/12</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>60/60</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">21x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">21x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">21x</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">8x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">21x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">21x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">19x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">18x</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">18x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-yes">87x</span>
-<span class="cline-any cline-yes">87x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">87x</span>
-<span class="cline-any cline-yes">87x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">8x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">8x</span>
-<span class="cline-any cline-yes">8x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-&nbsp;
-// tar -x
-const hlo = require('./high-level-opt.js')
-const Unpack = require('./unpack.js')
-const fs = require('fs')
-const fsm = require('fs-minipass')
-const path = require('path')
-&nbsp;
-const x = module.exports = (opt_, files, cb) =&gt; {
- if (typeof opt_ === 'function')
- cb = opt_, files = null, opt_ = {}
- else if (Array.isArray(opt_))
- files = opt_, opt_ = {}
-&nbsp;
- if (typeof files === 'function')
- cb = files, files = null
-&nbsp;
- if (!files)
- files = []
- else
- files = Array.from(files)
-&nbsp;
- const opt = hlo(opt_)
-&nbsp;
- if (opt.sync &amp;&amp; typeof cb === 'function')
- throw new TypeError('callback not supported for sync tar functions')
-&nbsp;
- if (!opt.file &amp;&amp; typeof cb === 'function')
- throw new TypeError('callback only supported with file option')
-&nbsp;
- if (files.length)
- filesFilter(opt, files)
-&nbsp;
- return opt.file &amp;&amp; opt.sync ? extractFileSync(opt)
- : opt.file ? extractFile(opt, cb)
- : opt.sync ? extractSync(opt)
- : extract(opt)
-}
-&nbsp;
-// construct a filter that limits the file entries listed
-// include child entries if a dir is included
-const filesFilter = (opt, files) =&gt; {
- const map = new Map(files.map(f =&gt; [f.replace(/\/+$/, ''), true]))
- const filter = opt.filter
-&nbsp;
- const mapHas = (file, r) =&gt; {
- const root = r || path.parse(file).root || '.'
- const ret = file === root ? false
- : map.has(file) ? map.get(file)
- : mapHas(path.dirname(file), root)
-&nbsp;
- map.set(file, ret)
- return ret
- }
-&nbsp;
- opt.filter = filter
- ? (file, entry) =&gt; filter(file, entry) &amp;&amp; mapHas(file.replace(/\/+$/, ''))
- : file =&gt; mapHas(file.replace(/\/+$/, ''))
-}
-&nbsp;
-const extractFileSync = opt =&gt; {
- const u = new Unpack.Sync(opt)
-&nbsp;
- const file = opt.file
- let threw = true
- let fd
- const stat = fs.statSync(file)
- // This trades a zero-byte read() syscall for a stat
- // However, it will usually result in less memory allocation
- const readSize = opt.maxReadSize || 16*1024*1024
- const stream = new fsm.ReadStreamSync(file, {
- readSize: readSize,
- size: stat.size
- })
- stream.pipe(u)
-}
-&nbsp;
-const extractFile = (opt, cb) =&gt; {
- const u = new Unpack(opt)
- const readSize = opt.maxReadSize || 16*1024*1024
-&nbsp;
- const file = opt.file
- const p = new Promise((resolve, reject) =&gt; {
- u.on('error', reject)
- u.on('close', resolve)
-&nbsp;
- // This trades a zero-byte read() syscall for a stat
- // However, it will usually result in less memory allocation
- fs.stat(file, (er, stat) =&gt; {
- if (er)
- reject(er)
- else {
- const stream = new fsm.ReadStream(file, {
- readSize: readSize,
- size: stat.size
- })
- stream.on('error', reject)
- stream.pipe(u)
- }
- })
- })
- return cb ? p.then(cb, cb) : p
-}
-&nbsp;
-const extractSync = opt =&gt; {
- return new Unpack.Sync(opt)
-}
-&nbsp;
-const extract = opt =&gt; {
- return new Unpack(opt)
-}
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/header.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/header.js.html
deleted file mode 100644
index 69770d0..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/header.js.html
+++ /dev/null
@@ -1,881 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/header.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> header.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>161/161</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>120/120</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>20/20</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>159/159</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13121x</span>
-<span class="cline-any cline-yes">6393x</span>
-<span class="cline-any cline-yes">6728x</span>
-<span class="cline-any cline-yes">6726x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6393x</span>
-<span class="cline-any cline-yes">2795x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6393x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">1990x</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">1594x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">4275x</span>
-<span class="cline-any cline-yes">4275x</span>
-<span class="cline-any cline-yes">4275x</span>
-<span class="cline-any cline-yes">4275x</span>
-<span class="cline-any cline-yes">4275x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4273x</span>
-<span class="cline-any cline-yes">4273x</span>
-<span class="cline-any cline-yes">295x</span>
-<span class="cline-any cline-yes">4273x</span>
-<span class="cline-any cline-yes">4273x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">946016x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">2275552x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">6392x</span>
-<span class="cline-any cline-yes">1860x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6719x</span>
-<span class="cline-any cline-yes">6600x</span>
-<span class="cline-any cline-yes">6600x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6719x</span>
-<span class="cline-any cline-yes">6717x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6719x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6716x</span>
-<span class="cline-any cline-yes">6716x</span>
-<span class="cline-any cline-yes">6716x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">994264x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">2391608x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6728x</span>
-<span class="cline-any cline-yes">73451x</span>
-<span class="cline-any cline-yes">66740x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">8178x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6723x</span>
-<span class="cline-any cline-yes">6719x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-yes">6683x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">35x</span>
-<span class="cline-any cline-yes">35x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">35x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">49x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">21x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">15x</span>
-<span class="cline-any cline-yes">15x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">35x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6718x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">32001x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">14938x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">14938x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">55448x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">55411x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">55411x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">66910x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">66615x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">66615x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">66615x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">20150x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">40308x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-// parse a 512-byte header block to a data object, or vice-versa
-// encode returns `true` if a pax extended header is needed, because
-// the data could not be faithfully encoded in a simple header.
-// (Also, check header.needPax to see if it needs a pax header.)
-&nbsp;
-const types = require('./types.js')
-const pathModule = require('path')
-const large = require('./large-numbers.js')
-&nbsp;
-const TYPE = Symbol('type')
-&nbsp;
-class Header {
- constructor (data, off) {
- this.cksumValid = false
- this.needPax = false
- this.nullBlock = false
-&nbsp;
- this.block = null
- this.path = null
- this.mode = null
- this.uid = null
- this.gid = null
- this.size = null
- this.mtime = null
- this.cksum = null
- this[TYPE] = '0'
- this.linkpath = null
- this.uname = null
- this.gname = null
- this.devmaj = 0
- this.devmin = 0
- this.atime = null
- this.ctime = null
-&nbsp;
- if (Buffer.isBuffer(data)) {
- this.decode(data, off || 0)
- } else if (data)
- this.set(data)
- }
-&nbsp;
- decode (buf, off) {
- if (!off)
- off = 0
-&nbsp;
- if (!buf || !(buf.length &gt;= off + 512))
- throw new Error('need 512 bytes for header')
-&nbsp;
- this.path = decString(buf, off, 100)
- this.mode = decNumber(buf, off + 100, 8)
- this.uid = decNumber(buf, off + 108, 8)
- this.gid = decNumber(buf, off + 116, 8)
- this.size = decNumber(buf, off + 124, 12)
- this.mtime = decDate(buf, off + 136, 12)
- this.cksum = decNumber(buf, off + 148, 12)
-&nbsp;
- // old tar versions marked dirs as a file with a trailing /
- this[TYPE] = decString(buf, off + 156, 1)
- if (this[TYPE] === '')
- this[TYPE] = '0'
- if (this[TYPE] === '0' &amp;&amp; this.path.substr(-1) === '/')
- this[TYPE] = '5'
-&nbsp;
- // tar implementations sometimes incorrectly put the stat(dir).size
- // as the size in the tarball, even though Directory entries are
- // not able to have any body at all. In the very rare chance that
- // it actually DOES have a body, we weren't going to do anything with
- // it anyway, and it'll just be a warning about an invalid header.
- if (this[TYPE] === '5')
- this.size = 0
-&nbsp;
- this.linkpath = decString(buf, off + 157, 100)
- if (buf.slice(off + 257, off + 265).toString() === 'ustar\u000000') {
- this.uname = decString(buf, off + 265, 32)
- this.gname = decString(buf, off + 297, 32)
- this.devmaj = decNumber(buf, off + 329, 8)
- this.devmin = decNumber(buf, off + 337, 8)
- if (buf[off + 475] !== 0) {
- // definitely a prefix, definitely &gt;130 chars.
- const prefix = decString(buf, off + 345, 155)
- this.path = prefix + '/' + this.path
- } else {
- const prefix = decString(buf, off + 345, 130)
- if (prefix)
- this.path = prefix + '/' + this.path
- this.atime = decDate(buf, off + 476, 12)
- this.ctime = decDate(buf, off + 488, 12)
- }
- }
-&nbsp;
- let sum = 8 * 0x20
- for (let i = off; i &lt; off + 148; i++) {
- sum += buf[i]
- }
- for (let i = off + 156; i &lt; off + 512; i++) {
- sum += buf[i]
- }
- this.cksumValid = sum === this.cksum
- if (this.cksum === null &amp;&amp; sum === 8 * 0x20)
- this.nullBlock = true
- }
-&nbsp;
- encode (buf, off) {
- if (!buf) {
- buf = this.block = Buffer.alloc(512)
- off = 0
- }
-&nbsp;
- if (!off)
- off = 0
-&nbsp;
- if (!(buf.length &gt;= off + 512))
- throw new Error('need 512 bytes for header')
-&nbsp;
- const prefixSize = this.ctime || this.atime ? 130 : 155
- const split = splitPrefix(this.path || '', prefixSize)
- const path = split[0]
- const prefix = split[1]
- this.needPax = split[2]
-&nbsp;
- this.needPax = encString(buf, off, 100, path) || this.needPax
- this.needPax = encNumber(buf, off + 100, 8, this.mode) || this.needPax
- this.needPax = encNumber(buf, off + 108, 8, this.uid) || this.needPax
- this.needPax = encNumber(buf, off + 116, 8, this.gid) || this.needPax
- this.needPax = encNumber(buf, off + 124, 12, this.size) || this.needPax
- this.needPax = encDate(buf, off + 136, 12, this.mtime) || this.needPax
- buf[off + 156] = this[TYPE].charCodeAt(0)
- this.needPax = encString(buf, off + 157, 100, this.linkpath) || this.needPax
- buf.write('ustar\u000000', off + 257, 8)
- this.needPax = encString(buf, off + 265, 32, this.uname) || this.needPax
- this.needPax = encString(buf, off + 297, 32, this.gname) || this.needPax
- this.needPax = encNumber(buf, off + 329, 8, this.devmaj) || this.needPax
- this.needPax = encNumber(buf, off + 337, 8, this.devmin) || this.needPax
- this.needPax = encString(buf, off + 345, prefixSize, prefix) || this.needPax
- if (buf[off + 475] !== 0)
- this.needPax = encString(buf, off + 345, 155, prefix) || this.needPax
- else {
- this.needPax = encString(buf, off + 345, 130, prefix) || this.needPax
- this.needPax = encDate(buf, off + 476, 12, this.atime) || this.needPax
- this.needPax = encDate(buf, off + 488, 12, this.ctime) || this.needPax
- }
-&nbsp;
- let sum = 8 * 0x20
- for (let i = off; i &lt; off + 148; i++) {
- sum += buf[i]
- }
- for (let i = off + 156; i &lt; off + 512; i++) {
- sum += buf[i]
- }
- this.cksum = sum
- encNumber(buf, off + 148, 8, this.cksum)
- this.cksumValid = true
-&nbsp;
- return this.needPax
- }
-&nbsp;
- set (data) {
- for (let i in data) {
- if (data[i] !== null &amp;&amp; data[i] !== undefined)
- this[i] = data[i]
- }
- }
-&nbsp;
- get type () {
- return types.name.get(this[TYPE]) || this[TYPE]
- }
-&nbsp;
- get typeKey () {
- return this[TYPE]
- }
-&nbsp;
- set type (type) {
- if (types.code.has(type))
- this[TYPE] = types.code.get(type)
- else
- this[TYPE] = type
- }
-}
-&nbsp;
-const splitPrefix = (p, prefixSize) =&gt; {
- const pathSize = 100
- let pp = p
- let prefix = ''
- let ret
- const root = pathModule.parse(p).root || '.'
-&nbsp;
- if (Buffer.byteLength(pp) &lt; pathSize)
- ret = [pp, prefix, false]
- else {
- // first set prefix to the dir, and path to the base
- prefix = pathModule.dirname(pp)
- pp = pathModule.basename(pp)
-&nbsp;
- do {
- // both fit!
- if (Buffer.byteLength(pp) &lt;= pathSize &amp;&amp;
- Buffer.byteLength(prefix) &lt;= prefixSize)
- ret = [pp, prefix, false]
-&nbsp;
- // prefix fits in prefix, but path doesn't fit in path
- else if (Buffer.byteLength(pp) &gt; pathSize &amp;&amp;
- Buffer.byteLength(prefix) &lt;= prefixSize)
- ret = [pp.substr(0, pathSize - 1), prefix, true]
-&nbsp;
- else {
- // make path take a bit from prefix
- pp = pathModule.join(pathModule.basename(prefix), pp)
- prefix = pathModule.dirname(prefix)
- }
- } while (prefix !== root &amp;&amp; !ret)
-&nbsp;
- // at this point, found no resolution, just truncate
- if (!ret)
- ret = [p.substr(0, pathSize - 1), '', true]
- }
- return ret
-}
-&nbsp;
-const decString = (buf, off, size) =&gt;
- buf.slice(off, off + size).toString('utf8').replace(/\0.*/, '')
-&nbsp;
-const decDate = (buf, off, size) =&gt;
- numToDate(decNumber(buf, off, size))
-&nbsp;
-const numToDate = num =&gt; num === null ? null : new Date(num * 1000)
-&nbsp;
-const decNumber = (buf, off, size) =&gt;
- buf[off] &amp; 0x80 ? large.parse(buf.slice(off, off + size))
- : decSmallNumber(buf, off, size)
-&nbsp;
-const nanNull = value =&gt; isNaN(value) ? null : value
-&nbsp;
-const decSmallNumber = (buf, off, size) =&gt;
- nanNull(parseInt(
- buf.slice(off, off + size)
- .toString('utf8').replace(/\0.*$/, '').trim(), 8))
-&nbsp;
-// the maximum encodable as a null-terminated octal, by field size
-const MAXNUM = {
- 12: 0o77777777777,
- 8 : 0o7777777
-}
-&nbsp;
-const encNumber = (buf, off, size, number) =&gt;
- number === null ? false :
- number &gt; MAXNUM[size] || number &lt; 0
- ? (large.encode(number, buf.slice(off, off + size)), true)
- : (encSmallNumber(buf, off, size, number), false)
-&nbsp;
-const encSmallNumber = (buf, off, size, number) =&gt;
- buf.write(octalString(number, size), off, size, 'ascii')
-&nbsp;
-const octalString = (number, size) =&gt;
- padOctal(Math.floor(number).toString(8), size)
-&nbsp;
-const padOctal = (string, size) =&gt;
- (string.length === size - 1 ? string
- : new Array(size - string.length - 1).join('0') + string + ' ') + '\0'
-&nbsp;
-const encDate = (buf, off, size, date) =&gt;
- date === null ? false :
- encNumber(buf, off, size, date.getTime() / 1000)
-&nbsp;
-// enough to fill the longest string we've got
-const NULLS = new Array(156).join('\0')
-// pad with nulls, return true if it's longer or non-ascii
-const encString = (buf, off, size, string) =&gt;
- string === null ? false :
- (buf.write(string + NULLS, off, size, 'utf8'),
- string.length !== Buffer.byteLength(string) || string.length &gt; size)
-&nbsp;
-module.exports = Header
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/high-level-opt.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/high-level-opt.js.html
deleted file mode 100644
index 0a59596..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/high-level-opt.js.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/high-level-opt.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> high-level-opt.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>5/5</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>4/4</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>3/3</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>3/3</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">469x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">469x</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-&nbsp;
-// turn tar(1) style args like `C` into the more verbose things like `cwd`
-&nbsp;
-const argmap = new Map([
- ['C', 'cwd'],
- ['f', 'file'],
- ['z', 'gzip'],
- ['P', 'preservePaths'],
- ['U', 'unlink'],
- ['strip-components', 'strip'],
- ['stripComponents', 'strip'],
- ['keep-newer', 'newer'],
- ['keepNewer', 'newer'],
- ['keep-newer-files', 'newer'],
- ['keepNewerFiles', 'newer'],
- ['k', 'keep'],
- ['keep-existing', 'keep'],
- ['keepExisting', 'keep'],
- ['m', 'noMtime'],
- ['no-mtime', 'noMtime'],
- ['p', 'preserveOwner'],
- ['L', 'follow'],
- ['h', 'follow']
-])
-&nbsp;
-const parse = module.exports = opt =&gt; opt ? Object.keys(opt).map(k =&gt; [
- argmap.has(k) ? argmap.get(k) : k, opt[k]
-]).reduce((set, kv) =&gt; (set[kv[0]] = kv[1], set), Object.create(null)) : {}
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/index.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/index.html
deleted file mode 100644
index 1f908d1..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/index.html
+++ /dev/null
@@ -1,314 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> tar/lib
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">99.94% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>1782/1783</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">99.67% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>1224/1228</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>271/271</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">99.94% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>1735/1736</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<div class="pad1">
-<table class="coverage-summary">
-<thead>
-<tr>
- <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
- <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
- <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
- <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
- <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
- <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
- <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
- <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
- <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
- <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody><tr>
- <td class="file high" data-value="create.js"><a href="create.js.html">create.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="59" class="abs high">59/59</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="35" class="abs high">35/35</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="12" class="abs high">12/12</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="59" class="abs high">59/59</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="extract.js"><a href="extract.js.html">extract.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="61" class="abs high">61/61</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="45" class="abs high">45/45</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="12" class="abs high">12/12</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="60" class="abs high">60/60</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="header.js"><a href="header.js.html">header.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="161" class="abs high">161/161</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="120" class="abs high">120/120</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="20" class="abs high">20/20</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="159" class="abs high">159/159</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="high-level-opt.js"><a href="high-level-opt.js.html">high-level-opt.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="5" class="abs high">5/5</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="4" class="abs high">4/4</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="3" class="abs high">3/3</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="3" class="abs high">3/3</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="large-numbers.js"><a href="large-numbers.js.html">large-numbers.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="59" class="abs high">59/59</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="20" class="abs high">20/20</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="8" class="abs high">8/8</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="57" class="abs high">57/57</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="list.js"><a href="list.js.html">list.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="80" class="abs high">80/80</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="53" class="abs high">53/53</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="14" class="abs high">14/14</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="77" class="abs high">77/77</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="mkdir.js"><a href="mkdir.js.html">mkdir.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="130" class="abs high">130/130</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="91" class="abs high">91/91</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="15" class="abs high">15/15</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="128" class="abs high">128/128</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="pack.js"><a href="pack.js.html">pack.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="228" class="abs high">228/228</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="123" class="abs high">123/123</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="44" class="abs high">44/44</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="222" class="abs high">222/222</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="parse.js"><a href="parse.js.html">parse.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="242" class="abs high">242/242</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="155" class="abs high">155/155</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="24" class="abs high">24/24</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="236" class="abs high">236/236</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="pax.js"><a href="pax.js.html">pax.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="62" class="abs high">62/62</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="75" class="abs high">75/75</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="9" class="abs high">9/9</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="60" class="abs high">60/60</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="read-entry.js"><a href="read-entry.js.html">read-entry.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="53" class="abs high">53/53</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="36" class="abs high">36/36</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="3" class="abs high">3/3</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="51" class="abs high">51/51</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="replace.js"><a href="replace.js.html">replace.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="131" class="abs high">131/131</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="70" class="abs high">70/70</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="18" class="abs high">18/18</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="128" class="abs high">128/128</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="types.js"><a href="types.js.html">types.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="3" class="abs high">3/3</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="0" class="abs high">0/0</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="1" class="abs high">1/1</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="2" class="abs high">2/2</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="unpack.js"><a href="unpack.js.html">unpack.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="254" class="abs high">254/254</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="194" class="abs high">194/194</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="44" class="abs high">44/44</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="247" class="abs high">247/247</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="update.js"><a href="update.js.html">update.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="20" class="abs high">20/20</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="15" class="abs high">15/15</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="4" class="abs high">4/4</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="20" class="abs high">20/20</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="warn-mixin.js"><a href="warn-mixin.js.html">warn-mixin.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="9" class="abs high">9/9</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="4" class="abs high">4/4</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="2" class="abs high">2/2</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="8" class="abs high">8/8</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="winchars.js"><a href="winchars.js.html">winchars.js</a></td>
- <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="12" class="abs high">12/12</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="0" class="abs high">0/0</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="7" class="abs high">7/7</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="8" class="abs high">8/8</td>
- </tr>
-
-<tr>
- <td class="file high" data-value="write-entry.js"><a href="write-entry.js.html">write-entry.js</a></td>
- <td data-value="99.53" class="pic high"><div class="chart"><div class="cover-fill" style="width: 99%;"></div><div class="cover-empty" style="width:1%;"></div></div></td>
- <td data-value="99.53" class="pct high">99.53%</td>
- <td data-value="214" class="abs high">213/214</td>
- <td data-value="97.87" class="pct high">97.87%</td>
- <td data-value="188" class="abs high">184/188</td>
- <td data-value="100" class="pct high">100%</td>
- <td data-value="31" class="abs high">31/31</td>
- <td data-value="99.53" class="pct high">99.53%</td>
- <td data-value="211" class="abs high">210/211</td>
- </tr>
-
-</tbody>
-</table>
-</div><div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/large-numbers.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/large-numbers.js.html
deleted file mode 100644
index 5b8610f..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/large-numbers.js.html
+++ /dev/null
@@ -1,341 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/large-numbers.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> large-numbers.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>59/59</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>20/20</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>8/8</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>57/57</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">14x</span>
-<span class="cline-any cline-yes">17x</span>
-<span class="cline-any cline-yes">17x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-yes">17x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">14x</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-yes">86x</span>
-<span class="cline-any cline-yes">31x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">55x</span>
-<span class="cline-any cline-yes">55x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">14x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">60x</span>
-<span class="cline-any cline-yes">42x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">18x</span>
-<span class="cline-any cline-yes">18x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">60x</span>
-<span class="cline-any cline-yes">48x</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">14x</span>
-<span class="cline-any cline-yes">47x</span>
-<span class="cline-any cline-yes">47x</span>
-<span class="cline-any cline-yes">47x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">14x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">60x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">60x</span>
-<span class="cline-any cline-yes">48x</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">60x</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">14x</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-yes">266x</span>
-<span class="cline-any cline-yes">266x</span>
-<span class="cline-any cline-yes">161x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">96x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">14x</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-// Tar can encode large and negative numbers using a leading byte of
-// 0xff for negative, and 0x80 for positive. The trailing byte in the
-// section will always be 0x20, or in some implementations 0x00.
-// this module encodes and decodes these things.
-&nbsp;
-const encode = exports.encode = (num, buf) =&gt; {
- buf[buf.length - 1] = 0x20
- if (num &lt; 0)
- encodeNegative(num, buf)
- else
- encodePositive(num, buf)
- return buf
-}
-&nbsp;
-const encodePositive = (num, buf) =&gt; {
- buf[0] = 0x80
- for (var i = buf.length - 2; i &gt; 0; i--) {
- if (num === 0)
- buf[i] = 0
- else {
- buf[i] = num % 0x100
- num = Math.floor(num / 0x100)
- }
- }
-}
-&nbsp;
-const encodeNegative = (num, buf) =&gt; {
- buf[0] = 0xff
- var flipped = false
- num = num * -1
- for (var i = buf.length - 2; i &gt; 0; i--) {
- var byte
- if (num === 0)
- byte = 0
- else {
- byte = num % 0x100
- num = Math.floor(num / 0x100)
- }
- if (flipped)
- buf[i] = onesComp(byte)
- else if (byte === 0)
- buf[i] = 0
- else {
- flipped = true
- buf[i] = twosComp(byte)
- }
- }
-}
-&nbsp;
-const parse = exports.parse = (buf) =&gt; {
- var post = buf[buf.length - 1]
- var pre = buf[0]
- return pre === 0x80 ? pos(buf.slice(1, buf.length - 1))
- : twos(buf.slice(1, buf.length - 1))
-}
-&nbsp;
-const twos = (buf) =&gt; {
- var len = buf.length
- var sum = 0
- var flipped = false
- for (var i = len - 1; i &gt; -1; i--) {
- var byte = buf[i]
- var f
- if (flipped)
- f = onesComp(byte)
- else if (byte === 0)
- f = byte
- else {
- flipped = true
- f = twosComp(byte)
- }
- if (f !== 0)
- sum += f * Math.pow(256, len - i - 1)
- }
- return sum * -1
-}
-&nbsp;
-const pos = (buf) =&gt; {
- var len = buf.length
- var sum = 0
- for (var i = len - 1; i &gt; -1; i--) {
- var byte = buf[i]
- if (byte !== 0)
- sum += byte * Math.pow(256, len - i - 1)
- }
- return sum
-}
-&nbsp;
-const onesComp = byte =&gt; (0xff ^ byte) &amp; 0xff
-&nbsp;
-const twosComp = byte =&gt; ((0xff ^ byte) + 1) &amp; 0xff
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/list.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/list.js.html
deleted file mode 100644
index 4e6e34e..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/list.js.html
+++ /dev/null
@@ -1,449 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/list.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> list.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>80/80</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>53/53</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>14/14</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>77/77</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">31x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">22x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">22x</span>
-<span class="cline-any cline-yes">22x</span>
-<span class="cline-any cline-yes">255x</span>
-<span class="cline-any cline-yes">255x</span>
-<span class="cline-any cline-yes">72x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">125x</span>
-<span class="cline-any cline-yes">125x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">125x</span>
-<span class="cline-any cline-yes">125x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">64x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-yes">10x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">27x</span>
-<span class="cline-any cline-yes">27x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">16x</span>
-<span class="cline-any cline-yes">16x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">16x</span>
-<span class="cline-any cline-yes">16x</span>
-<span class="cline-any cline-yes">16x</span>
-<span class="cline-any cline-yes">16x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">16x</span>
-<span class="cline-any cline-yes">16x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">14x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">14x</span>
-<span class="cline-any cline-yes">14x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">16x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">16x</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-&nbsp;
-// XXX: This shares a lot in common with extract.js
-// maybe some DRY opportunity here?
-&nbsp;
-// tar -t
-const hlo = require('./high-level-opt.js')
-const Parser = require('./parse.js')
-const fs = require('fs')
-const fsm = require('fs-minipass')
-const path = require('path')
-&nbsp;
-const t = module.exports = (opt_, files, cb) =&gt; {
- if (typeof opt_ === 'function')
- cb = opt_, files = null, opt_ = {}
- else if (Array.isArray(opt_))
- files = opt_, opt_ = {}
-&nbsp;
- if (typeof files === 'function')
- cb = files, files = null
-&nbsp;
- if (!files)
- files = []
- else
- files = Array.from(files)
-&nbsp;
- const opt = hlo(opt_)
-&nbsp;
- if (opt.sync &amp;&amp; typeof cb === 'function')
- throw new TypeError('callback not supported for sync tar functions')
-&nbsp;
- if (!opt.file &amp;&amp; typeof cb === 'function')
- throw new TypeError('callback only supported with file option')
-&nbsp;
- if (files.length)
- filesFilter(opt, files)
-&nbsp;
- if (!opt.noResume)
- onentryFunction(opt)
-&nbsp;
- return opt.file &amp;&amp; opt.sync ? listFileSync(opt)
- : opt.file ? listFile(opt, cb)
- : list(opt)
-}
-&nbsp;
-const onentryFunction = opt =&gt; {
- const onentry = opt.onentry
- opt.onentry = onentry ? e =&gt; {
- onentry(e)
- e.resume()
- } : e =&gt; e.resume()
-}
-&nbsp;
-// construct a filter that limits the file entries listed
-// include child entries if a dir is included
-const filesFilter = (opt, files) =&gt; {
- const map = new Map(files.map(f =&gt; [f.replace(/\/+$/, ''), true]))
- const filter = opt.filter
-&nbsp;
- const mapHas = (file, r) =&gt; {
- const root = r || path.parse(file).root || '.'
- const ret = file === root ? false
- : map.has(file) ? map.get(file)
- : mapHas(path.dirname(file), root)
-&nbsp;
- map.set(file, ret)
- return ret
- }
-&nbsp;
- opt.filter = filter
- ? (file, entry) =&gt; filter(file, entry) &amp;&amp; mapHas(file.replace(/\/+$/, ''))
- : file =&gt; mapHas(file.replace(/\/+$/, ''))
-}
-&nbsp;
-const listFileSync = opt =&gt; {
- const p = list(opt)
- const file = opt.file
- let threw = true
- let fd
- try {
- const stat = fs.statSync(file)
- const readSize = opt.maxReadSize || 16*1024*1024
- if (stat.size &lt; readSize) {
- p.end(fs.readFileSync(file))
- } else {
- let pos = 0
- const buf = Buffer.allocUnsafe(readSize)
- fd = fs.openSync(file, 'r')
- while (pos &lt; stat.size) {
- let bytesRead = fs.readSync(fd, buf, 0, readSize, pos)
- pos += bytesRead
- p.write(buf.slice(0, bytesRead))
- }
- p.end()
- }
- threw = false
- } finally {
- if (threw &amp;&amp; fd)
- try { fs.closeSync(fd) } catch (er) {}
- }
-}
-&nbsp;
-const listFile = (opt, cb) =&gt; {
- const parse = new Parser(opt)
- const readSize = opt.maxReadSize || 16*1024*1024
-&nbsp;
- const file = opt.file
- const p = new Promise((resolve, reject) =&gt; {
- parse.on('error', reject)
- parse.on('end', resolve)
-&nbsp;
- fs.stat(file, (er, stat) =&gt; {
- if (er)
- reject(er)
- else {
- const stream = new fsm.ReadStream(file, {
- readSize: readSize,
- size: stat.size
- })
- stream.on('error', reject)
- stream.pipe(parse)
- }
- })
- })
- return cb ? p.then(cb, cb) : p
-}
-&nbsp;
-const list = opt =&gt; new Parser(opt)
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/mkdir.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/mkdir.js.html
deleted file mode 100644
index afeb931..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/mkdir.js.html
+++ /dev/null
@@ -1,686 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/mkdir.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> mkdir.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>130/130</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>91/91</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>15/15</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>128/128</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">8x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">36x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-yes">457x</span>
-<span class="cline-any cline-yes">15x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">442x</span>
-<span class="cline-any cline-yes">442x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">436x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-yes">272x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">179x</span>
-<span class="cline-any cline-yes">40x</span>
-<span class="cline-any cline-yes">40x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">40x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">139x</span>
-<span class="cline-any cline-yes">8x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">1062x</span>
-<span class="cline-any cline-yes">119x</span>
-<span class="cline-any cline-yes">943x</span>
-<span class="cline-any cline-yes">943x</span>
-<span class="cline-any cline-yes">943x</span>
-<span class="cline-any cline-yes">723x</span>
-<span class="cline-any cline-yes">220x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">222x</span>
-<span class="cline-any cline-yes">222x</span>
-<span class="cline-any cline-yes">36x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">22x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">186x</span>
-<span class="cline-any cline-yes">186x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-yes">266x</span>
-<span class="cline-any cline-yes">266x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">266x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">266x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-yes">128x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">148x</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">114x</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">107x</span>
-<span class="cline-any cline-yes">107x</span>
-<span class="cline-any cline-yes">107x</span>
-<span class="cline-any cline-yes">107x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">792x</span>
-<span class="cline-any cline-yes">608x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">184x</span>
-<span class="cline-any cline-yes">184x</span>
-<span class="cline-any cline-yes">169x</span>
-<span class="cline-any cline-yes">169x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">15x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">99x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-// wrapper around mkdirp for tar's needs.
-&nbsp;
-// TODO: This should probably be a class, not functionally
-// passing around state in a gazillion args.
-&nbsp;
-const mkdirp = require('mkdirp')
-const fs = require('fs')
-const path = require('path')
-const chownr = require('chownr')
-&nbsp;
-class SymlinkError extends Error {
- constructor (symlink, path) {
- super('Cannot extract through symbolic link')
- this.path = path
- this.symlink = symlink
- }
-&nbsp;
- get name () {
- return 'SylinkError'
- }
-}
-&nbsp;
-class CwdError extends Error {
- constructor (path, code) {
- super(code + ': Cannot cd into \'' + path + '\'')
- this.path = path
- this.code = code
- }
-&nbsp;
- get name () {
- return 'CwdError'
- }
-}
-&nbsp;
-const mkdir = module.exports = (dir, opt, cb) =&gt; {
- // if there's any overlap between mask and mode,
- // then we'll need an explicit chmod
- const umask = opt.umask
- const mode = opt.mode | 0o0700
- const needChmod = (mode &amp; umask) !== 0
-&nbsp;
- const uid = opt.uid
- const gid = opt.gid
- const doChown = typeof uid === 'number' &amp;&amp;
- typeof gid === 'number' &amp;&amp;
- ( uid !== opt.processUid || gid !== opt.processGid )
-&nbsp;
- const preserve = opt.preserve
- const unlink = opt.unlink
- const cache = opt.cache
- const cwd = opt.cwd
-&nbsp;
- const done = (er, created) =&gt; {
- if (er)
- cb(er)
- else {
- cache.set(dir, true)
- if (created &amp;&amp; doChown)
- chownr(created, uid, gid, er =&gt; done(er))
- else if (needChmod)
- fs.chmod(dir, mode, cb)
- else
- cb()
- }
- }
-&nbsp;
- if (cache &amp;&amp; cache.get(dir) === true)
- return done()
-&nbsp;
- if (dir === cwd)
- return fs.lstat(dir, (er, st) =&gt; {
- if (er || !st.isDirectory())
- er = new CwdError(dir, er &amp;&amp; er.code || 'ENOTDIR')
- done(er)
- })
-&nbsp;
- if (preserve)
- return mkdirp(dir, mode, done)
-&nbsp;
- const sub = path.relative(cwd, dir)
- const parts = sub.split(/\/|\\/)
- mkdir_(cwd, parts, mode, cache, unlink, cwd, null, done)
-}
-&nbsp;
-const mkdir_ = (base, parts, mode, cache, unlink, cwd, created, cb) =&gt; {
- if (!parts.length)
- return cb(null, created)
- const p = parts.shift()
- const part = base + '/' + p
- if (cache.get(part))
- return mkdir_(part, parts, mode, cache, unlink, cwd, created, cb)
- fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb))
-}
-&nbsp;
-const onmkdir = (part, parts, mode, cache, unlink, cwd, created, cb) =&gt; er =&gt; {
- if (er) {
- if (er.path &amp;&amp; path.dirname(er.path) === cwd &amp;&amp;
- (er.code === 'ENOTDIR' || er.code === 'ENOENT'))
- return cb(new CwdError(cwd, er.code))
-&nbsp;
- fs.lstat(part, (statEr, st) =&gt; {
- if (statEr)
- cb(statEr)
- else if (st.isDirectory())
- mkdir_(part, parts, mode, cache, unlink, cwd, created, cb)
- else if (unlink)
- fs.unlink(part, er =&gt; {
- if (er)
- return cb(er)
- fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb))
- })
- else if (st.isSymbolicLink())
- return cb(new SymlinkError(part, part + '/' + parts.join('/')))
- else
- cb(er)
- })
- } else {
- created = created || part
- mkdir_(part, parts, mode, cache, unlink, cwd, created, cb)
- }
-}
-&nbsp;
-const mkdirSync = module.exports.sync = (dir, opt) =&gt; {
- // if there's any overlap between mask and mode,
- // then we'll need an explicit chmod
- const umask = opt.umask
- const mode = opt.mode | 0o0700
- const needChmod = (mode &amp; umask) !== 0
-&nbsp;
- const uid = opt.uid
- const gid = opt.gid
- const doChown = typeof uid === 'number' &amp;&amp;
- typeof gid === 'number' &amp;&amp;
- ( uid !== opt.processUid || gid !== opt.processGid )
-&nbsp;
- const preserve = opt.preserve
- const unlink = opt.unlink
- const cache = opt.cache
- const cwd = opt.cwd
-&nbsp;
- const done = (created) =&gt; {
- cache.set(dir, true)
- if (created &amp;&amp; doChown)
- chownr.sync(created, uid, gid)
- if (needChmod)
- fs.chmodSync(dir, mode)
- cache.set(dir, true)
- }
-&nbsp;
- if (cache &amp;&amp; cache.get(dir) === true)
- return done()
-&nbsp;
- if (dir === cwd) {
- let ok = false
- let code = 'ENOTDIR'
- try {
- ok = fs.lstatSync(dir).isDirectory()
- } catch (er) {
- code = er.code
- } finally {
- if (!ok)
- throw new CwdError(dir, code)
- }
- done()
- return
- }
-&nbsp;
- if (preserve)
- return done(mkdirp.sync(dir, mode))
-&nbsp;
- const sub = path.relative(cwd, dir)
- const parts = sub.split(/\/|\\/)
- let created = null
- for (let p = parts.shift(), part = cwd;
- p &amp;&amp; (part += '/' + p);
- p = parts.shift()) {
-&nbsp;
- if (cache.get(part))
- continue
-&nbsp;
- try {
- fs.mkdirSync(part, mode)
- created = created || part
- cache.set(part, true)
- } catch (er) {
- if (er.path &amp;&amp; path.dirname(er.path) === cwd &amp;&amp;
- (er.code === 'ENOTDIR' || er.code === 'ENOENT'))
- return new CwdError(cwd, er.code)
-&nbsp;
- const st = fs.lstatSync(part)
- if (st.isDirectory()) {
- cache.set(part, true)
- continue
- } else if (unlink) {
- fs.unlinkSync(part)
- fs.mkdirSync(part, mode)
- created = created || part
- cache.set(part, true)
- continue
- } else if (st.isSymbolicLink())
- return new SymlinkError(part, part + '/' + parts.join('/'))
- }
- }
-&nbsp;
- return done(created)
-}
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/pack.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/pack.js.html
deleted file mode 100644
index d46f96d..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/pack.js.html
+++ /dev/null
@@ -1,1268 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/pack.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> pack.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>228/228</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>123/123</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>44/44</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>222/222</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">503x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">146x</span>
-<span class="cline-any cline-yes">219x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">117x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6507x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-yes">122x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">106x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">107x</span>
-<span class="cline-any cline-yes">103x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">100x</span>
-<span class="cline-any cline-yes">21x</span>
-<span class="cline-any cline-yes">99x</span>
-<span class="cline-any cline-yes">99x</span>
-<span class="cline-any cline-yes">99x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">128x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">127x</span>
-<span class="cline-any cline-yes">27x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">100x</span>
-<span class="cline-any cline-yes">123x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">27x</span>
-<span class="cline-any cline-yes">27x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">27x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">25x</span>
-<span class="cline-any cline-yes">25x</span>
-<span class="cline-any cline-yes">25x</span>
-<span class="cline-any cline-yes">25x</span>
-<span class="cline-any cline-yes">25x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">27x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6541x</span>
-<span class="cline-any cline-yes">6541x</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6541x</span>
-<span class="cline-any cline-yes">6541x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6453x</span>
-<span class="cline-any cline-yes">6453x</span>
-<span class="cline-any cline-yes">6453x</span>
-<span class="cline-any cline-yes">6453x</span>
-<span class="cline-any cline-yes">6453x</span>
-<span class="cline-any cline-yes">6453x</span>
-<span class="cline-any cline-yes">6453x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6452x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6538x</span>
-<span class="cline-any cline-yes">6538x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6538x</span>
-<span class="cline-any cline-yes">24x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6538x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">821x</span>
-<span class="cline-any cline-yes">821x</span>
-<span class="cline-any cline-yes">821x</span>
-<span class="cline-any cline-yes">821x</span>
-<span class="cline-any cline-yes">821x</span>
-<span class="cline-any cline-yes">821x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">820x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">858x</span>
-<span class="cline-any cline-yes">858x</span>
-<span class="cline-any cline-yes">858x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">20596x</span>
-<span class="cline-any cline-yes">9093x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11503x</span>
-<span class="cline-any cline-yes">11503x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">38739x</span>
-<span class="cline-any cline-yes">38735x</span>
-<span class="cline-any cline-yes">25x</span>
-<span class="cline-any cline-yes">25x</span>
-<span class="cline-any cline-yes">25x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11499x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11499x</span>
-<span class="cline-any cline-yes">96x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">92x</span>
-<span class="cline-any cline-yes">92x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">25863x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6533x</span>
-<span class="cline-any cline-yes">6533x</span>
-<span class="cline-any cline-yes">6533x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">38739x</span>
-<span class="cline-any cline-yes">6156x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32583x</span>
-<span class="cline-any cline-yes">18770x</span>
-<span class="cline-any cline-yes">4954x</span>
-<span class="cline-any cline-yes">18770x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13813x</span>
-<span class="cline-any cline-yes">6541x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6537x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13811x</span>
-<span class="cline-any cline-yes">6453x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7358x</span>
-<span class="cline-any cline-yes">24x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7334x</span>
-<span class="cline-any cline-yes">860x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">858x</span>
-<span class="cline-any cline-yes">859x</span>
-<span class="cline-any cline-yes">821x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6512x</span>
-<span class="cline-any cline-yes">6511x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6510x</span>
-<span class="cline-any cline-yes">1581x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6537x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6512x</span>
-<span class="cline-any cline-yes">6512x</span>
-<span class="cline-any cline-yes">6512x</span>
-<span class="cline-any cline-yes">6508x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">248x</span>
-<span class="cline-any cline-yes">158x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6448x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6448x</span>
-<span class="cline-any cline-yes">820x</span>
-<span class="cline-any cline-yes">6393x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6393x</span>
-<span class="cline-any cline-yes">6393x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6448x</span>
-<span class="cline-any cline-yes">6448x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6448x</span>
-<span class="cline-any cline-yes">6336x</span>
-<span class="cline-any cline-yes">11830x</span>
-<span class="cline-any cline-yes">156x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">112x</span>
-<span class="cline-any cline-yes">199x</span>
-<span class="cline-any cline-yes">53x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">265x</span>
-<span class="cline-any cline-yes">214x</span>
-<span class="cline-any cline-yes">265x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">47x</span>
-<span class="cline-any cline-yes">47x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">84x</span>
-<span class="cline-any cline-yes">84x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">37x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">87x</span>
-<span class="cline-any cline-yes">87x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">87x</span>
-<span class="cline-any cline-yes">38x</span>
-<span class="cline-any cline-yes">48x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">48x</span>
-<span class="cline-any cline-yes">48x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">87x</span>
-<span class="cline-any cline-yes">31x</span>
-<span class="cline-any cline-yes">39x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">56x</span>
-<span class="cline-any cline-yes">106x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-&nbsp;
-// A readable tar stream creator
-// Technically, this is a transform stream that you write paths into,
-// and tar format comes out of.
-// The `add()` method is like `write()` but returns this,
-// and end() return `this` as well, so you can
-// do `new Pack(opt).add('files').add('dir').end().pipe(output)
-// You could also do something like:
-// streamOfPaths().pipe(new Pack()).pipe(new fs.WriteStream('out.tar'))
-&nbsp;
-class PackJob {
- constructor (path, absolute) {
- this.path = path || './'
- this.absolute = absolute
- this.entry = null
- this.stat = null
- this.readdir = null
- this.pending = false
- this.ignore = false
- this.piped = false
- }
-}
-&nbsp;
-const MiniPass = require('minipass')
-const zlib = require('minizlib')
-const ReadEntry = require('./read-entry.js')
-const WriteEntry = require('./write-entry.js')
-const WriteEntrySync = WriteEntry.Sync
-const WriteEntryTar = WriteEntry.Tar
-const Yallist = require('yallist')
-const EOF = Buffer.alloc(1024)
-const ONSTAT = Symbol('onStat')
-const ENDED = Symbol('ended')
-const QUEUE = Symbol('queue')
-const CURRENT = Symbol('current')
-const PROCESS = Symbol('process')
-const PROCESSING = Symbol('processing')
-const PROCESSJOB = Symbol('processJob')
-const JOBS = Symbol('jobs')
-const JOBDONE = Symbol('jobDone')
-const ADDFSENTRY = Symbol('addFSEntry')
-const ADDTARENTRY = Symbol('addTarEntry')
-const STAT = Symbol('stat')
-const READDIR = Symbol('readdir')
-const ONREADDIR = Symbol('onreaddir')
-const PIPE = Symbol('pipe')
-const ENTRY = Symbol('entry')
-const ENTRYOPT = Symbol('entryOpt')
-const WRITEENTRYCLASS = Symbol('writeEntryClass')
-const WRITE = Symbol('write')
-const ONDRAIN = Symbol('ondrain')
-&nbsp;
-const fs = require('fs')
-const path = require('path')
-const warner = require('./warn-mixin.js')
-&nbsp;
-const Pack = warner(class Pack extends MiniPass {
- constructor (opt) {
- super(opt)
- opt = opt || Object.create(null)
- this.opt = opt
- this.cwd = opt.cwd || process.cwd()
- this.maxReadSize = opt.maxReadSize
- this.preservePaths = !!opt.preservePaths
- this.strict = !!opt.strict
- this.noPax = !!opt.noPax
- this.prefix = (opt.prefix || '').replace(/(\\|\/)+$/, '')
- this.linkCache = opt.linkCache || new Map()
- this.statCache = opt.statCache || new Map()
- this.readdirCache = opt.readdirCache || new Map()
- this[WRITEENTRYCLASS] = WriteEntry
- if (typeof opt.onwarn === 'function')
- this.on('warn', opt.onwarn)
-&nbsp;
- this.zip = null
- if (opt.gzip) {
- if (typeof opt.gzip !== 'object')
- opt.gzip = {}
- this.zip = new zlib.Gzip(opt.gzip)
- this.zip.on('data', chunk =&gt; super.write(chunk))
- this.zip.on('end', _ =&gt; super.end())
- this.zip.on('drain', _ =&gt; this[ONDRAIN]())
- this.on('resume', _ =&gt; this.zip.resume())
- } else
- this.on('drain', this[ONDRAIN])
-&nbsp;
- this.portable = !!opt.portable
- this.noDirRecurse = !!opt.noDirRecurse
- this.follow = !!opt.follow
- this.noMtime = !!opt.noMtime
-&nbsp;
-&nbsp;
- this.filter = typeof opt.filter === 'function' ? opt.filter : _ =&gt; true
-&nbsp;
- this[QUEUE] = new Yallist
- this[JOBS] = 0
- this.jobs = +opt.jobs || 4
- this[PROCESSING] = false
- this[ENDED] = false
- }
-&nbsp;
- [WRITE] (chunk) {
- return super.write(chunk)
- }
-&nbsp;
- add (path) {
- this.write(path)
- return this
- }
-&nbsp;
- end (path) {
- if (path)
- this.write(path)
- this[ENDED] = true
- this[PROCESS]()
- return this
- }
-&nbsp;
- write (path) {
- if (this[ENDED])
- throw new Error('write after end')
-&nbsp;
- if (path instanceof ReadEntry)
- this[ADDTARENTRY](path)
- else
- this[ADDFSENTRY](path)
- return this.flowing
- }
-&nbsp;
- [ADDTARENTRY] (p) {
- const absolute = path.resolve(this.cwd, p.path)
- if (this.prefix)
- p.path = this.prefix + '/' + p.path.replace(/^\.(\/+|$)/, '')
-&nbsp;
- // in this case, we don't have to wait for the stat
- if (!this.filter(p.path, p))
- p.resume()
- else {
- const job = new PackJob(p.path, absolute, false)
- job.entry = new WriteEntryTar(p, this[ENTRYOPT](job))
- job.entry.on('end', _ =&gt; this[JOBDONE](job))
- this[JOBS] += 1
- this[QUEUE].push(job)
- }
-&nbsp;
- this[PROCESS]()
- }
-&nbsp;
- [ADDFSENTRY] (p) {
- const absolute = path.resolve(this.cwd, p)
- if (this.prefix)
- p = this.prefix + '/' + p.replace(/^\.(\/+|$)/, '')
-&nbsp;
- this[QUEUE].push(new PackJob(p, absolute))
- this[PROCESS]()
- }
-&nbsp;
- [STAT] (job) {
- job.pending = true
- this[JOBS] += 1
- const stat = this.follow ? 'stat' : 'lstat'
- fs[stat](job.absolute, (er, stat) =&gt; {
- job.pending = false
- this[JOBS] -= 1
- if (er)
- this.emit('error', er)
- else
- this[ONSTAT](job, stat)
- })
- }
-&nbsp;
- [ONSTAT] (job, stat) {
- this.statCache.set(job.absolute, stat)
- job.stat = stat
-&nbsp;
- // now we have the stat, we can filter it.
- if (!this.filter(job.path, stat))
- job.ignore = true
-&nbsp;
- this[PROCESS]()
- }
-&nbsp;
- [READDIR] (job) {
- job.pending = true
- this[JOBS] += 1
- fs.readdir(job.absolute, (er, entries) =&gt; {
- job.pending = false
- this[JOBS] -= 1
- if (er)
- return this.emit('error', er)
- this[ONREADDIR](job, entries)
- })
- }
-&nbsp;
- [ONREADDIR] (job, entries) {
- this.readdirCache.set(job.absolute, entries)
- job.readdir = entries
- this[PROCESS]()
- }
-&nbsp;
- [PROCESS] () {
- if (this[PROCESSING])
- return
-&nbsp;
- this[PROCESSING] = true
- for (let w = this[QUEUE].head;
- w !== null &amp;&amp; this[JOBS] &lt; this.jobs;
- w = w.next) {
- this[PROCESSJOB](w.value)
- if (w.value.ignore) {
- const p = w.next
- this[QUEUE].removeNode(w)
- w.next = p
- }
- }
-&nbsp;
- this[PROCESSING] = false
-&nbsp;
- if (this[ENDED] &amp;&amp; !this[QUEUE].length &amp;&amp; this[JOBS] === 0) {
- if (this.zip)
- this.zip.end(EOF)
- else {
- super.write(EOF)
- super.end()
- }
- }
- }
-&nbsp;
- get [CURRENT] () {
- return this[QUEUE] &amp;&amp; this[QUEUE].head &amp;&amp; this[QUEUE].head.value
- }
-&nbsp;
- [JOBDONE] (job) {
- this[QUEUE].shift()
- this[JOBS] -= 1
- this[PROCESS]()
- }
-&nbsp;
- [PROCESSJOB] (job) {
- if (job.pending)
- return
-&nbsp;
- if (job.entry) {
- if (job === this[CURRENT] &amp;&amp; !job.piped)
- this[PIPE](job)
- return
- }
-&nbsp;
- if (!job.stat) {
- if (this.statCache.has(job.absolute))
- this[ONSTAT](job, this.statCache.get(job.absolute))
- else
- this[STAT](job)
- }
- if (!job.stat)
- return
-&nbsp;
- // filtered out!
- if (job.ignore)
- return
-&nbsp;
- if (!this.noDirRecurse &amp;&amp; job.stat.isDirectory() &amp;&amp; !job.readdir) {
- if (this.readdirCache.has(job.absolute))
- this[ONREADDIR](job, this.readdirCache.get(job.absolute))
- else
- this[READDIR](job)
- if (!job.readdir)
- return
- }
-&nbsp;
- // we know it doesn't have an entry, because that got checked above
- job.entry = this[ENTRY](job)
- if (!job.entry) {
- job.ignore = true
- return
- }
-&nbsp;
- if (job === this[CURRENT] &amp;&amp; !job.piped)
- this[PIPE](job)
- }
-&nbsp;
- [ENTRYOPT] (job) {
- return {
- onwarn: (msg, data) =&gt; {
- this.warn(msg, data)
- },
- noPax: this.noPax,
- cwd: this.cwd,
- absolute: job.absolute,
- preservePaths: this.preservePaths,
- maxReadSize: this.maxReadSize,
- strict: this.strict,
- portable: this.portable,
- linkCache: this.linkCache,
- statCache: this.statCache,
- noMtime: this.noMtime
- }
- }
-&nbsp;
- [ENTRY] (job) {
- this[JOBS] += 1
- try {
- return new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job))
- .on('end', () =&gt; this[JOBDONE](job))
- .on('error', er =&gt; this.emit('error', er))
- } catch (er) {
- this.emit('error', er)
- }
- }
-&nbsp;
- [ONDRAIN] () {
- if (this[CURRENT] &amp;&amp; this[CURRENT].entry)
- this[CURRENT].entry.resume()
- }
-&nbsp;
- // like .pipe() but using super, because our write() is special
- [PIPE] (job) {
- job.piped = true
-&nbsp;
- if (job.readdir)
- job.readdir.forEach(entry =&gt; {
- const p = this.prefix ?
- job.path.slice(this.prefix.length + 1) || './'
- : job.path
-&nbsp;
- const base = p === './' ? '' : p.replace(/\/*$/, '/')
- this[ADDFSENTRY](base + entry)
- })
-&nbsp;
- const source = job.entry
- const zip = this.zip
-&nbsp;
- if (zip)
- source.on('data', chunk =&gt; {
- if (!zip.write(chunk))
- source.pause()
- })
- else
- source.on('data', chunk =&gt; {
- if (!super.write(chunk))
- source.pause()
- })
- }
-&nbsp;
- pause () {
- if (this.zip)
- this.zip.pause()
- return super.pause()
- }
-})
-&nbsp;
-class PackSync extends Pack {
- constructor (opt) {
- super(opt)
- this[WRITEENTRYCLASS] = WriteEntrySync
- }
-&nbsp;
- // pause/resume are no-ops in sync streams.
- pause () {}
- resume () {}
-&nbsp;
- [STAT] (job) {
- const stat = this.follow ? 'statSync' : 'lstatSync'
- this[ONSTAT](job, fs[stat](job.absolute))
- }
-&nbsp;
- [READDIR] (job, stat) {
- this[ONREADDIR](job, fs.readdirSync(job.absolute))
- }
-&nbsp;
- // gotta get it all in this tick
- [PIPE] (job) {
- const source = job.entry
- const zip = this.zip
-&nbsp;
- if (job.readdir)
- job.readdir.forEach(entry =&gt; {
- const p = this.prefix ?
- job.path.slice(this.prefix.length + 1) || './'
- : job.path
-&nbsp;
-&nbsp;
- const base = p === './' ? '' : p.replace(/\/*$/, '/')
- this[ADDFSENTRY](base + entry)
- })
-&nbsp;
- if (zip)
- source.on('data', chunk =&gt; {
- zip.write(chunk)
- })
- else
- source.on('data', chunk =&gt; {
- super[WRITE](chunk)
- })
- }
-}
-&nbsp;
-Pack.Sync = PackSync
-&nbsp;
-module.exports = Pack
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/parse.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/parse.js.html
deleted file mode 100644
index 1d505ab..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/parse.js.html
+++ /dev/null
@@ -1,1310 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/parse.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> parse.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>242/242</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>155/155</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>24/24</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>236/236</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2032x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">134x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">608x</span>
-<span class="cline-any cline-yes">589x</span>
-<span class="cline-any cline-yes">589x</span>
-<span class="cline-any cline-yes">589x</span>
-<span class="cline-any cline-yes">589x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">36x</span>
-<span class="cline-any cline-yes">742x</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6101x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6101x</span>
-<span class="cline-any cline-yes">1834x</span>
-<span class="cline-any cline-yes">4267x</span>
-<span class="cline-any cline-yes">160x</span>
-<span class="cline-any cline-yes">4107x</span>
-<span class="cline-any cline-yes">40x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4067x</span>
-<span class="cline-any cline-yes">4067x</span>
-<span class="cline-any cline-yes">40x</span>
-<span class="cline-any cline-yes">4027x</span>
-<span class="cline-any cline-yes">40x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3987x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3987x</span>
-<span class="cline-any cline-yes">759x</span>
-<span class="cline-any cline-yes">260x</span>
-<span class="cline-any cline-yes">260x</span>
-<span class="cline-any cline-yes">260x</span>
-<span class="cline-any cline-yes">499x</span>
-<span class="cline-any cline-yes">455x</span>
-<span class="cline-any cline-yes">475x</span>
-<span class="cline-any cline-yes">455x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3228x</span>
-<span class="cline-any cline-yes">3228x</span>
-<span class="cline-any cline-yes">3228x</span>
-<span class="cline-any cline-yes">1070x</span>
-<span class="cline-any cline-yes">1070x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2158x</span>
-<span class="cline-any cline-yes">1028x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1130x</span>
-<span class="cline-any cline-yes">1130x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2158x</span>
-<span class="cline-any cline-yes">1675x</span>
-<span class="cline-any cline-yes">1675x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">483x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4299x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4299x</span>
-<span class="cline-any cline-yes">1653x</span>
-<span class="cline-any cline-yes">1653x</span>
-<span class="cline-any cline-yes">2646x</span>
-<span class="cline-any cline-yes">490x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2156x</span>
-<span class="cline-any cline-yes">2156x</span>
-<span class="cline-any cline-yes">2150x</span>
-<span class="cline-any cline-yes">1288x</span>
-<span class="cline-any cline-yes">1288x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4293x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2947x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2941x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2478x</span>
-<span class="cline-any cline-yes">2478x</span>
-<span class="cline-any cline-yes">2478x</span>
-<span class="cline-any cline-yes">2468x</span>
-<span class="cline-any cline-yes">516x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">10x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2194x</span>
-<span class="cline-any cline-yes">2194x</span>
-<span class="cline-any cline-yes">2194x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2194x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2194x</span>
-<span class="cline-any cline-yes">2121x</span>
-<span class="cline-any cline-yes">2121x</span>
-<span class="cline-any cline-yes">2121x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2194x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">475x</span>
-<span class="cline-any cline-yes">475x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">475x</span>
-<span class="cline-any cline-yes">455x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">475x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4328x</span>
-<span class="cline-any cline-yes">3815x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">513x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">455x</span>
-<span class="cline-any cline-yes">455x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">351x</span>
-<span class="cline-any cline-yes">351x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">44x</span>
-<span class="cline-any cline-yes">44x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">40x</span>
-<span class="cline-any cline-yes">40x</span>
-<span class="cline-any cline-yes">40x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">669590x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">669589x</span>
-<span class="cline-any cline-yes">944x</span>
-<span class="cline-any cline-yes">224x</span>
-<span class="cline-any cline-yes">224x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">944x</span>
-<span class="cline-any cline-yes">224x</span>
-<span class="cline-any cline-yes">224x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">720x</span>
-<span class="cline-any cline-yes">947x</span>
-<span class="cline-any cline-yes">493x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">720x</span>
-<span class="cline-any cline-yes">227x</span>
-<span class="cline-any cline-yes">227x</span>
-<span class="cline-any cline-yes">227x</span>
-<span class="cline-any cline-yes">20164x</span>
-<span class="cline-any cline-yes">227x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">227x</span>
-<span class="cline-any cline-yes">226x</span>
-<span class="cline-any cline-yes">226x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">227x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">669138x</span>
-<span class="cline-any cline-yes">669138x</span>
-<span class="cline-any cline-yes">33586x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">635552x</span>
-<span class="cline-any cline-yes">669132x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">669132x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">669132x</span>
-<span class="cline-any cline-yes">63x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">669132x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">652869x</span>
-<span class="cline-any cline-yes">652866x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3449x</span>
-<span class="cline-any cline-yes">709x</span>
-<span class="cline-any cline-yes">709x</span>
-<span class="cline-any cline-yes">709x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">709x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">655942x</span>
-<span class="cline-any cline-yes">10x</span>
-<span class="cline-any cline-yes">655932x</span>
-<span class="cline-any cline-yes">381x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">655551x</span>
-<span class="cline-any cline-yes">655551x</span>
-<span class="cline-any cline-yes">652859x</span>
-<span class="cline-any cline-yes">652859x</span>
-<span class="cline-any cline-yes">652859x</span>
-<span class="cline-any cline-yes">652859x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2692x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">655545x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">655545x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">655936x</span>
-<span class="cline-any cline-yes">3068x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">655553x</span>
-<span class="cline-any cline-yes">655553x</span>
-<span class="cline-any cline-yes">655553x</span>
-<span class="cline-any cline-yes">8295x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6101x</span>
-<span class="cline-any cline-yes">6095x</span>
-<span class="cline-any cline-yes">6095x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1719x</span>
-<span class="cline-any cline-yes">1719x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">475x</span>
-<span class="cline-any cline-yes">475x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">655547x</span>
-<span class="cline-any cline-yes">652863x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">652862x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">718x</span>
-<span class="cline-any cline-yes">717x</span>
-<span class="cline-any cline-yes">113x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">604x</span>
-<span class="cline-any cline-yes">604x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-&nbsp;
-// this[BUFFER] is the remainder of a chunk if we're waiting for
-// the full 512 bytes of a header to come in. We will Buffer.concat()
-// it to the next write(), which is a mem copy, but a small one.
-//
-// this[QUEUE] is a Yallist of entries that haven't been emitted
-// yet this can only get filled up if the user keeps write()ing after
-// a write() returns false, or does a write() with more than one entry
-//
-// We don't buffer chunks, we always parse them and either create an
-// entry, or push it into the active entry. The ReadEntry class knows
-// to throw data away if .ignore=true
-//
-// Shift entry off the buffer when it emits 'end', and emit 'entry' for
-// the next one in the list.
-//
-// At any time, we're pushing body chunks into the entry at WRITEENTRY,
-// and waiting for 'end' on the entry at READENTRY
-//
-// ignored entries get .resume() called on them straight away
-&nbsp;
-const warner = require('./warn-mixin.js')
-const path = require('path')
-const Header = require('./header.js')
-const EE = require('events')
-const Yallist = require('yallist')
-const maxMetaEntrySize = 1024 * 1024
-const Entry = require('./read-entry.js')
-const Pax = require('./pax.js')
-const zlib = require('minizlib')
-&nbsp;
-const gzipHeader = new Buffer([0x1f, 0x8b])
-const STATE = Symbol('state')
-const WRITEENTRY = Symbol('writeEntry')
-const READENTRY = Symbol('readEntry')
-const NEXTENTRY = Symbol('nextEntry')
-const PROCESSENTRY = Symbol('processEntry')
-const EX = Symbol('extendedHeader')
-const GEX = Symbol('globalExtendedHeader')
-const META = Symbol('meta')
-const EMITMETA = Symbol('emitMeta')
-const BUFFER = Symbol('buffer')
-const QUEUE = Symbol('queue')
-const ENDED = Symbol('ended')
-const EMITTEDEND = Symbol('emittedEnd')
-const EMIT = Symbol('emit')
-const UNZIP = Symbol('unzip')
-const CONSUMECHUNK = Symbol('consumeChunk')
-const CONSUMECHUNKSUB = Symbol('consumeChunkSub')
-const CONSUMEBODY = Symbol('consumeBody')
-const CONSUMEMETA = Symbol('consumeMeta')
-const CONSUMEHEADER = Symbol('consumeHeader')
-const CONSUMING = Symbol('consuming')
-const BUFFERCONCAT = Symbol('bufferConcat')
-const MAYBEEND = Symbol('maybeEnd')
-const WRITING = Symbol('writing')
-const ABORTED = Symbol('aborted')
-const DONE = Symbol('onDone')
-&nbsp;
-const noop = _ =&gt; true
-&nbsp;
-module.exports = warner(class Parser extends EE {
- constructor (opt) {
- opt = opt || {}
- super(opt)
-&nbsp;
- if (opt.ondone)
- this.on(DONE, opt.ondone)
- else
- this.on(DONE, _ =&gt; {
- this.emit('prefinish')
- this.emit('finish')
- this.emit('end')
- this.emit('close')
- })
-&nbsp;
- this.strict = !!opt.strict
- this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize
- this.filter = typeof opt.filter === 'function' ? opt.filter : noop
-&nbsp;
- // have to set this so that streams are ok piping into it
- this.writable = true
- this.readable = false
-&nbsp;
- this[QUEUE] = new Yallist()
- this[BUFFER] = null
- this[READENTRY] = null
- this[WRITEENTRY] = null
- this[STATE] = 'begin'
- this[META] = ''
- this[EX] = null
- this[GEX] = null
- this[ENDED] = false
- this[UNZIP] = null
- this[ABORTED] = false
- if (typeof opt.onwarn === 'function')
- this.on('warn', opt.onwarn)
- if (typeof opt.onentry === 'function')
- this.on('entry', opt.onentry)
- }
-&nbsp;
- [CONSUMEHEADER] (chunk, position) {
- const header = new Header(chunk, position)
-&nbsp;
- if (header.nullBlock)
- this[EMIT]('nullBlock')
- else if (!header.cksumValid)
- this.warn('invalid entry', header)
- else if (!header.path)
- this.warn('invalid: path is required', header)
- else {
- const type = header.type
- if (/^(Symbolic)?Link$/.test(type) &amp;&amp; !header.linkpath)
- this.warn('invalid: linkpath required', header)
- else if (!/^(Symbolic)?Link$/.test(type) &amp;&amp; header.linkpath)
- this.warn('invalid: linkpath forbidden', header)
- else {
- const entry = this[WRITEENTRY] = new Entry(header, this[EX], this[GEX])
-&nbsp;
- if (entry.meta) {
- if (entry.size &gt; this.maxMetaEntrySize) {
- entry.ignore = true
- this[EMIT]('ignoredEntry', entry)
- this[STATE] = 'ignore'
- } else if (entry.size &gt; 0) {
- this[META] = ''
- entry.on('data', c =&gt; this[META] += c)
- this[STATE] = 'meta'
- }
- } else {
-&nbsp;
- this[EX] = null
- entry.ignore = entry.ignore || !this.filter(entry.path, entry)
- if (entry.ignore) {
- this[EMIT]('ignoredEntry', entry)
- this[STATE] = entry.remain ? 'ignore' : 'begin'
- } else {
- if (entry.remain)
- this[STATE] = 'body'
- else {
- this[STATE] = 'begin'
- entry.end()
- }
-&nbsp;
- if (!this[READENTRY]) {
- this[QUEUE].push(entry)
- this[NEXTENTRY]()
- } else
- this[QUEUE].push(entry)
- }
- }
- }
- }
- }
-&nbsp;
- [PROCESSENTRY] (entry) {
- let go = true
-&nbsp;
- if (!entry) {
- this[READENTRY] = null
- go = false
- } else if (Array.isArray(entry))
- this.emit.apply(this, entry)
- else {
- this[READENTRY] = entry
- this.emit('entry', entry)
- if (!entry.emittedEnd) {
- entry.on('end', _ =&gt; this[NEXTENTRY]())
- go = false
- }
- }
-&nbsp;
- return go
- }
-&nbsp;
- [NEXTENTRY] () {
- do {} while (this[PROCESSENTRY](this[QUEUE].shift()))
-&nbsp;
- if (!this[QUEUE].length) {
- // At this point, there's nothing in the queue, but we may have an
- // entry which is being consumed (readEntry).
- // If we don't, then we definitely can handle more data.
- // If we do, and either it's flowing, or it has never had any data
- // written to it, then it needs more.
- // The only other possibility is that it has returned false from a
- // write() call, so we wait for the next drain to continue.
- const re = this[READENTRY]
- const drainNow = !re || re.flowing || re.size === re.remain
- if (drainNow) {
- if (!this[WRITING])
- this.emit('drain')
- } else
- re.once('drain', _ =&gt; this.emit('drain'))
- }
- }
-&nbsp;
- [CONSUMEBODY] (chunk, position) {
- // write up to but no more than writeEntry.blockRemain
- const entry = this[WRITEENTRY]
- const br = entry.blockRemain
- const c = (br &gt;= chunk.length &amp;&amp; position === 0) ? chunk
- : chunk.slice(position, position + br)
-&nbsp;
- entry.write(c)
-&nbsp;
- if (!entry.blockRemain) {
- this[STATE] = 'begin'
- this[WRITEENTRY] = null
- entry.end()
- }
-&nbsp;
- return c.length
- }
-&nbsp;
- [CONSUMEMETA] (chunk, position) {
- const entry = this[WRITEENTRY]
- const ret = this[CONSUMEBODY](chunk, position)
-&nbsp;
- // if we finished, then the entry is reset
- if (!this[WRITEENTRY])
- this[EMITMETA](entry)
-&nbsp;
- return ret
- }
-&nbsp;
- [EMIT] (ev, data, extra) {
- if (!this[QUEUE].length &amp;&amp; !this[READENTRY])
- this.emit(ev, data, extra)
- else
- this[QUEUE].push([ev, data, extra])
- }
-&nbsp;
- [EMITMETA] (entry) {
- this[EMIT]('meta', this[META])
- switch (entry.type) {
- case 'ExtendedHeader':
- case 'OldExtendedHeader':
- this[EX] = Pax.parse(this[META], this[EX], false)
- break
-&nbsp;
- case 'GlobalExtendedHeader':
- this[GEX] = Pax.parse(this[META], this[GEX], true)
- break
-&nbsp;
- case 'NextFileHasLongPath':
- case 'OldGnuLongPath':
- this[EX] = this[EX] || Object.create(null)
- this[EX].path = this[META].replace(/\0.*/, '')
- break
-&nbsp;
- case 'NextFileHasLongLinkpath':
- this[EX] = this[EX] || Object.create(null)
- this[EX].linkpath = this[META].replace(/\0.*/, '')
- break
-&nbsp;
- /* istanbul ignore next */
- default: throw new Error('unknown meta: ' + entry.type)
- }
- }
-&nbsp;
- abort (msg, error) {
- this[ABORTED] = true
- this.warn(msg, error)
- this.emit('abort')
- }
-&nbsp;
- write (chunk) {
- if (this[ABORTED])
- return
-&nbsp;
- // first write, might be gzipped
- if (this[UNZIP] === null &amp;&amp; chunk) {
- if (this[BUFFER]) {
- chunk = Buffer.concat([this[BUFFER], chunk])
- this[BUFFER] = null
- }
- if (chunk.length &lt; gzipHeader.length) {
- this[BUFFER] = chunk
- return true
- }
- for (let i = 0; this[UNZIP] === null &amp;&amp; i &lt; gzipHeader.length; i++) {
- if (chunk[i] !== gzipHeader[i])
- this[UNZIP] = false
- }
- if (this[UNZIP] === null) {
- const ended = this[ENDED]
- this[ENDED] = false
- this[UNZIP] = new zlib.Unzip()
- this[UNZIP].on('data', chunk =&gt; this[CONSUMECHUNK](chunk))
- this[UNZIP].on('error', er =&gt;
- this.abort('zlib error: ' + er.message, er))
- this[UNZIP].on('end', _ =&gt; {
- this[ENDED] = true
- this[CONSUMECHUNK]()
- })
- return ended ? this[UNZIP].end(chunk) : this[UNZIP].write(chunk)
- }
- }
-&nbsp;
- this[WRITING] = true
- if (this[UNZIP])
- this[UNZIP].write(chunk)
- else
- this[CONSUMECHUNK](chunk)
- this[WRITING] = false
-&nbsp;
- // return false if there's a queue, or if the current entry isn't flowing
- const ret =
- this[QUEUE].length ? false :
- this[READENTRY] ? this[READENTRY].flowing :
- true
-&nbsp;
- // if we have no queue, then that means a clogged READENTRY
- if (!ret &amp;&amp; !this[QUEUE].length)
- this[READENTRY].once('drain', _ =&gt; this.emit('drain'))
-&nbsp;
- return ret
- }
-&nbsp;
- [BUFFERCONCAT] (c) {
- if (c &amp;&amp; !this[ABORTED])
- this[BUFFER] = this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c
- }
-&nbsp;
- [MAYBEEND] () {
- if (this[ENDED] &amp;&amp; !this[EMITTEDEND] &amp;&amp; !this[ABORTED]) {
- this[EMITTEDEND] = true
- const entry = this[WRITEENTRY]
- if (entry &amp;&amp; entry.blockRemain) {
- const have = this[BUFFER] ? this[BUFFER].length : 0
- this.warn('Truncated input (needed ' + entry.blockRemain +
- ' more bytes, only ' + have + ' available)', entry)
- if (this[BUFFER])
- entry.write(this[BUFFER])
- entry.end()
- }
- this[EMIT](DONE)
- }
- }
-&nbsp;
- [CONSUMECHUNK] (chunk) {
- if (this[CONSUMING]) {
- this[BUFFERCONCAT](chunk)
- } else if (!chunk &amp;&amp; !this[BUFFER]) {
- this[MAYBEEND]()
- } else {
- this[CONSUMING] = true
- if (this[BUFFER]) {
- this[BUFFERCONCAT](chunk)
- const c = this[BUFFER]
- this[BUFFER] = null
- this[CONSUMECHUNKSUB](c)
- } else {
- this[CONSUMECHUNKSUB](chunk)
- }
-&nbsp;
- while (this[BUFFER] &amp;&amp; this[BUFFER].length &gt;= 512 &amp;&amp; !this[ABORTED]) {
- const c = this[BUFFER]
- this[BUFFER] = null
- this[CONSUMECHUNKSUB](c)
- }
- this[CONSUMING] = false
- }
-&nbsp;
- if (!this[BUFFER] || this[ENDED])
- this[MAYBEEND]()
- }
-&nbsp;
- [CONSUMECHUNKSUB] (chunk) {
- // we know that we are in CONSUMING mode, so anything written goes into
- // the buffer. Advance the position and put any remainder in the buffer.
- let position = 0
- let length = chunk.length
- while (position + 512 &lt;= length &amp;&amp; !this[ABORTED]) {
- switch (this[STATE]) {
- case 'begin':
- this[CONSUMEHEADER](chunk, position)
- position += 512
- break
-&nbsp;
- case 'ignore':
- case 'body':
- position += this[CONSUMEBODY](chunk, position)
- break
-&nbsp;
- case 'meta':
- position += this[CONSUMEMETA](chunk, position)
- break
-&nbsp;
- /* istanbul ignore next */
- default:
- throw new Error('invalid state: ' + this[STATE])
- }
- }
-&nbsp;
- if (position &lt; length) {
- if (this[BUFFER])
- this[BUFFER] = Buffer.concat([chunk.slice(position), this[BUFFER]])
- else
- this[BUFFER] = chunk.slice(position)
- }
- }
-&nbsp;
- end (chunk) {
- if (!this[ABORTED]) {
- if (this[UNZIP])
- this[UNZIP].end(chunk)
- else {
- this[ENDED] = true
- this.write(chunk)
- }
- }
- }
-})
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/pax.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/pax.js.html
deleted file mode 100644
index ed0e937..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/pax.js.html
+++ /dev/null
@@ -1,500 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/pax.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> pax.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>62/62</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>75/75</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>9/9</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>60/60</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-yes">435x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">16896x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">8949x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">510x</span>
-<span class="cline-any cline-yes">204x</span>
-<span class="cline-any cline-yes">306x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">306x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">306x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">306x</span>
-<span class="cline-any cline-yes">306x</span>
-<span class="cline-any cline-yes">30x</span>
-<span class="cline-any cline-yes">306x</span>
-<span class="cline-any cline-yes">306x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">401x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-yes">401x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-yes">401x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-yes">2259x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2259x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2254x</span>
-<span class="cline-any cline-yes">2254x</span>
-<span class="cline-any cline-yes">2254x</span>
-<span class="cline-any cline-yes">2254x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2253x</span>
-<span class="cline-any cline-yes">2253x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2253x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-const Header = require('./header.js')
-const path = require('path')
-&nbsp;
-class Pax {
- constructor (obj, global) {
- this.atime = obj.atime || null
- this.charset = obj.charset || null
- this.comment = obj.comment || null
- this.ctime = obj.ctime || null
- this.gid = obj.gid || null
- this.gname = obj.gname || null
- this.linkpath = obj.linkpath || null
- this.mtime = obj.mtime || null
- this.path = obj.path || null
- this.size = obj.size || null
- this.uid = obj.uid || null
- this.uname = obj.uname || null
- this.dev = obj.dev || null
- this.ino = obj.ino || null
- this.nlink = obj.nlink || null
- this.global = global || false
- }
-&nbsp;
- encode () {
- const body = this.encodeBody()
- if (body === '')
- return null
-&nbsp;
- const bodyLen = Buffer.byteLength(body)
- // round up to 512 bytes
- // add 512 for header
- const bufLen = 512 * Math.ceil(1 + bodyLen / 512)
- const buf = Buffer.allocUnsafe(bufLen)
-&nbsp;
- // 0-fill the header section, it might not hit every field
- for (let i = 0; i &lt; 512; i++) {
- buf[i] = 0
- }
-&nbsp;
- new Header({
- // XXX split the path
- // then the path should be PaxHeader + basename, but less than 99,
- // prepend with the dirname
- path: ('PaxHeader/' + path.basename(this.path)).slice(0, 99),
- mode: this.mode || 0o644,
- uid: this.uid || null,
- gid: this.gid || null,
- size: bodyLen,
- mtime: this.mtime || null,
- type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader',
- linkpath: '',
- uname: this.uname || '',
- gname: this.gname || '',
- devmaj: 0,
- devmin: 0,
- atime: this.atime || null,
- ctime: this.ctime || null
- }).encode(buf)
-&nbsp;
- buf.write(body, 512, bodyLen, 'utf8')
-&nbsp;
- // null pad after the body
- for (let i = bodyLen + 512; i &lt; buf.length; i++) {
- buf[i] = 0
- }
-&nbsp;
- return buf
- }
-&nbsp;
- encodeBody () {
- return (
- this.encodeField('path') +
- this.encodeField('ctime') +
- this.encodeField('atime') +
- this.encodeField('dev') +
- this.encodeField('ino') +
- this.encodeField('nlink') +
- this.encodeField('charset') +
- this.encodeField('comment') +
- this.encodeField('gid') +
- this.encodeField('gname') +
- this.encodeField('linkpath') +
- this.encodeField('mtime') +
- this.encodeField('size') +
- this.encodeField('uid') +
- this.encodeField('uname')
- )
- }
-&nbsp;
- encodeField (field) {
- if (this[field] === null || this[field] === undefined)
- return ''
- const v = this[field] instanceof Date ? this[field].getTime() / 1000
- : this[field]
- const s = ' ' +
- (field === 'dev' || field === 'ino' || field === 'nlink'
- ? 'SCHILY.' : '') +
- field + '=' + v + '\n'
- const byteLen = Buffer.byteLength(s)
- // the digits includes the length of the digits in ascii base-10
- // so if it's 9 characters, then adding 1 for the 9 makes it 10
- // which makes it 11 chars.
- let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1
- if (byteLen + digits &gt;= Math.pow(10, digits))
- digits += 1
- const len = digits + byteLen
- return len + s
- }
-}
-&nbsp;
-Pax.parse = (string, ex, g) =&gt; new Pax(merge(parseKV(string), ex), g)
-&nbsp;
-const merge = (a, b) =&gt;
- b ? Object.keys(a).reduce((s, k) =&gt; (s[k] = a[k], s), b) : a
-&nbsp;
-const parseKV = string =&gt;
- string
- .replace(/\n$/, '')
- .split('\n')
- .reduce(parseKVLine, Object.create(null))
-&nbsp;
-const parseKVLine = (set, line) =&gt; {
- const n = parseInt(line, 10)
-&nbsp;
- // XXX Values with \n in them will fail this.
- // Refactor to not be a naive line-by-line parse.
- if (n !== Buffer.byteLength(line) + 1)
- return set
-&nbsp;
- line = line.substr((n + ' ').length)
- const kv = line.split('=')
- const k = kv.shift().replace(/^SCHILY\.(dev|ino|nlink)/, '$1')
- if (!k)
- return set
-&nbsp;
- const v = kv.join('=')
- set[k] = /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(k)
- ? new Date(v * 1000)
- : /^[0-9]+$/.test(v) ? +v
- : v
- return set
-}
-&nbsp;
-module.exports = Pax
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/read-entry.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/read-entry.js.html
deleted file mode 100644
index 9fca327..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/read-entry.js.html
+++ /dev/null
@@ -1,347 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/read-entry.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> read-entry.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>53/53</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>36/36</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>3/3</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>51/51</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3241x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">760x</span>
-<span class="cline-any cline-yes">760x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">3720x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-yes">4004x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2222x</span>
-<span class="cline-any cline-yes">2222x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2220x</span>
-<span class="cline-any cline-yes">2220x</span>
-<span class="cline-any cline-yes">2220x</span>
-<span class="cline-any cline-yes">2220x</span>
-<span class="cline-any cline-yes">2220x</span>
-<span class="cline-any cline-yes">673x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1547x</span>
-<span class="cline-any cline-yes">132x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1415x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">457x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6384x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2657x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-const types = require('./types.js')
-const MiniPass = require('minipass')
-&nbsp;
-const SLURP = Symbol('slurp')
-module.exports = class ReadEntry extends MiniPass {
- constructor (header, ex, gex) {
- super()
- this.extended = ex
- this.globalExtended = gex
- this.header = header
- this.startBlockSize = 512 * Math.ceil(header.size / 512)
- this.blockRemain = this.startBlockSize
- this.remain = header.size
- this.type = header.type
- this.meta = false
- this.ignore = false
- switch (this.type) {
- case 'File':
- case 'OldFile':
- case 'Link':
- case 'SymbolicLink':
- case 'CharacterDevice':
- case 'BlockDevice':
- case 'Directory':
- case 'FIFO':
- case 'ContiguousFile':
- case 'GNUDumpDir':
- break
-&nbsp;
- case 'NextFileHasLongLinkpath':
- case 'NextFileHasLongPath':
- case 'OldGnuLongPath':
- case 'GlobalExtendedHeader':
- case 'ExtendedHeader':
- case 'OldExtendedHeader':
- this.meta = true
- break
-&nbsp;
- // NOTE: gnutar and bsdtar treat unrecognized types as 'File'
- // it may be worth doing the same, but with a warning.
- default:
- this.ignore = true
- }
-&nbsp;
- this.path = header.path
- this.mode = header.mode
- if (this.mode)
- this.mode = this.mode &amp; 0o7777
- this.uid = header.uid
- this.gid = header.gid
- this.uname = header.uname
- this.gname = header.gname
- this.size = header.size
- this.mtime = header.mtime
- this.atime = header.atime
- this.ctime = header.ctime
- this.linkpath = header.linkpath
- this.uname = header.uname
- this.gname = header.gname
-&nbsp;
- if (ex) this[SLURP](ex)
- if (gex) this[SLURP](gex, true)
- }
-&nbsp;
- write (data) {
- const writeLen = data.length
- if (writeLen &gt; this.blockRemain)
- throw new Error('writing more to entry than is appropriate')
-&nbsp;
- const r = this.remain
- const br = this.blockRemain
- this.remain = Math.max(0, r - writeLen)
- this.blockRemain = Math.max(0, br - writeLen)
- if (this.ignore)
- return true
-&nbsp;
- if (r &gt;= writeLen)
- return super.write(data)
-&nbsp;
- // r &lt; writeLen
- return super.write(data.slice(0, r))
- }
-&nbsp;
- [SLURP] (ex, global) {
- for (let k in ex) {
- // we slurp in everything except for the path attribute in
- // a global extended header, because that's weird.
- if (ex[k] !== null &amp;&amp; ex[k] !== undefined &amp;&amp;
- !(global &amp;&amp; k === 'path'))
- this[k] = ex[k]
- }
- }
-}
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/replace.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/replace.js.html
deleted file mode 100644
index e764c04..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/replace.js.html
+++ /dev/null
@@ -1,722 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/replace.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> replace.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>131/131</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>70/70</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>18/18</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>128/128</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">70x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">70x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">69x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">68x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">67x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">67x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">26x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">26x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">26x</span>
-<span class="cline-any cline-yes">26x</span>
-<span class="cline-any cline-yes">26x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">24x</span>
-<span class="cline-any cline-yes">22x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">22x</span>
-<span class="cline-any cline-yes">61x</span>
-<span class="cline-any cline-yes">63x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">61x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">59x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">55x</span>
-<span class="cline-any cline-yes">55x</span>
-<span class="cline-any cline-yes">8x</span>
-<span class="cline-any cline-yes">47x</span>
-<span class="cline-any cline-yes">47x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">45x</span>
-<span class="cline-any cline-yes">45x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">18x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">18x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">26x</span>
-<span class="cline-any cline-yes">8x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">18x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">18x</span>
-<span class="cline-any cline-yes">18x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-yes">37x</span>
-<span class="cline-any cline-yes">37x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">37x</span>
-<span class="cline-any cline-yes">37x</span>
-<span class="cline-any cline-yes">8x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">29x</span>
-<span class="cline-any cline-yes">29x</span>
-<span class="cline-any cline-yes">29x</span>
-<span class="cline-any cline-yes">112x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">110x</span>
-<span class="cline-any cline-yes">110x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">104x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">102x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">98x</span>
-<span class="cline-any cline-yes">98x</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">85x</span>
-<span class="cline-any cline-yes">85x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">81x</span>
-<span class="cline-any cline-yes">81x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">77x</span>
-<span class="cline-any cline-yes">46x</span>
-<span class="cline-any cline-yes">77x</span>
-<span class="cline-any cline-yes">77x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">29x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-yes">45x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">39x</span>
-<span class="cline-any cline-yes">39x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">37x</span>
-<span class="cline-any cline-yes">37x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">41x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">18x</span>
-<span class="cline-any cline-yes">19x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">18x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">18x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-&nbsp;
-// tar -r
-const hlo = require('./high-level-opt.js')
-const Pack = require('./pack.js')
-const Parse = require('./parse.js')
-const fs = require('fs')
-const fsm = require('fs-minipass')
-const t = require('./list.js')
-const path = require('path')
-&nbsp;
-// starting at the head of the file, read a Header
-// If the checksum is invalid, that's our position to start writing
-// If it is, jump forward by the specified size (round up to 512)
-// and try again.
-// Write the new Pack stream starting there.
-&nbsp;
-const Header = require('./header.js')
-&nbsp;
-const r = module.exports = (opt_, files, cb) =&gt; {
- const opt = hlo(opt_)
-&nbsp;
- if (!opt.file)
- throw new TypeError('file is required')
-&nbsp;
- if (opt.gzip)
- throw new TypeError('cannot append to compressed archives')
-&nbsp;
- if (!files || !Array.isArray(files) || !files.length)
- throw new TypeError('no files or directories specified')
-&nbsp;
- files = Array.from(files)
-&nbsp;
- return opt.sync ? replaceSync(opt, files)
- : replace(opt, files, cb)
-}
-&nbsp;
-const replaceSync = (opt, files) =&gt; {
- const p = new Pack.Sync(opt)
-&nbsp;
- let threw = true
- let fd
- let position
-&nbsp;
- try {
- try {
- fd = fs.openSync(opt.file, 'r+')
- } catch (er) {
- if (er.code === 'ENOENT')
- fd = fs.openSync(opt.file, 'w+')
- else
- throw er
- }
-&nbsp;
- const st = fs.fstatSync(fd)
- const headBuf = Buffer.alloc(512)
-&nbsp;
- POSITION: for (position = 0; position &lt; st.size; position += 512) {
- for (let bufPos = 0, bytes = 0; bufPos &lt; 512; bufPos += bytes) {
- bytes = fs.readSync(
- fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos
- )
-&nbsp;
- if (position === 0 &amp;&amp; headBuf[0] === 0x1f &amp;&amp; headBuf[1] === 0x8b)
- throw new Error('cannot append to compressed archives')
-&nbsp;
- if (!bytes)
- break POSITION
- }
-&nbsp;
- let h = new Header(headBuf)
- if (!h.cksumValid)
- break
- let entryBlockSize = 512 * Math.ceil(h.size / 512)
- if (position + entryBlockSize + 512 &gt; st.size)
- break
- // the 512 for the header we just parsed will be added as well
- // also jump ahead all the blocks for the body
- position += entryBlockSize
- if (opt.mtimeCache)
- opt.mtimeCache.set(h.path, h.mtime)
- }
- threw = false
-&nbsp;
- streamSync(opt, p, position, fd, files)
- } finally {
- if (threw)
- try { fs.closeSync(fd) } catch (er) {}
- }
-}
-&nbsp;
-const streamSync = (opt, p, position, fd, files) =&gt; {
- const stream = new fsm.WriteStreamSync(opt.file, {
- fd: fd,
- start: position
- })
- p.pipe(stream)
- addFilesSync(p, files)
-}
-&nbsp;
-const replace = (opt, files, cb) =&gt; {
- files = Array.from(files)
- const p = new Pack(opt)
-&nbsp;
- const getPos = (fd, size, cb_) =&gt; {
- const cb = (er, pos) =&gt; {
- if (er)
- fs.close(fd, _ =&gt; cb_(er))
- else
- cb_(null, pos)
- }
-&nbsp;
- let position = 0
- if (size === 0)
- return cb(null, 0)
-&nbsp;
- let bufPos = 0
- const headBuf = Buffer.alloc(512)
- const onread = (er, bytes) =&gt; {
- if (er)
- return cb(er)
- bufPos += bytes
- if (bufPos &lt; 512 &amp;&amp; bytes)
- return fs.read(
- fd, headBuf, bufPos, headBuf.length - bufPos,
- position + bufPos, onread
- )
-&nbsp;
- if (position === 0 &amp;&amp; headBuf[0] === 0x1f &amp;&amp; headBuf[1] === 0x8b)
- return cb(new Error('cannot append to compressed archives'))
-&nbsp;
- // truncated header
- if (bufPos &lt; 512)
- return cb(null, position)
-&nbsp;
- const h = new Header(headBuf)
- if (!h.cksumValid)
- return cb(null, position)
-&nbsp;
- const entryBlockSize = 512 * Math.ceil(h.size / 512)
- if (position + entryBlockSize + 512 &gt; size)
- return cb(null, position)
-&nbsp;
- position += entryBlockSize + 512
- if (position &gt;= size)
- return cb(null, position)
-&nbsp;
- if (opt.mtimeCache)
- opt.mtimeCache.set(h.path, h.mtime)
- bufPos = 0
- fs.read(fd, headBuf, 0, 512, position, onread)
- }
- fs.read(fd, headBuf, 0, 512, position, onread)
- }
-&nbsp;
- const promise = new Promise((resolve, reject) =&gt; {
- p.on('error', reject)
- let flag = 'r+'
- const onopen = (er, fd) =&gt; {
- if (er &amp;&amp; er.code === 'ENOENT' &amp;&amp; flag === 'r+') {
- flag = 'w+'
- return fs.open(opt.file, flag, onopen)
- }
-&nbsp;
- if (er)
- return reject(er)
-&nbsp;
- fs.fstat(fd, (er, st) =&gt; {
- if (er)
- return reject(er)
- getPos(fd, st.size, (er, position) =&gt; {
- if (er)
- return reject(er)
- const stream = new fsm.WriteStream(opt.file, {
- fd: fd,
- start: position
- })
- p.pipe(stream)
- stream.on('error', reject)
- stream.on('close', resolve)
- addFilesAsync(p, files)
- })
- })
- }
- fs.open(opt.file, flag, onopen)
- })
-&nbsp;
- return cb ? promise.then(cb, cb) : promise
-}
-&nbsp;
-const addFilesSync = (p, files) =&gt; {
- files.forEach(file =&gt; {
- if (file.charAt(0) === '@')
- t({
- file: path.resolve(p.cwd, file.substr(1)),
- sync: true,
- noResume: true,
- onentry: entry =&gt; p.add(entry)
- })
- else
- p.add(file)
- })
- p.end()
-}
-&nbsp;
-const addFilesAsync = (p, files) =&gt; {
- while (files.length) {
- const file = files.shift()
- if (file.charAt(0) === '@')
- return t({
- file: path.resolve(p.cwd, file.substr(1)),
- noResume: true,
- onentry: entry =&gt; p.add(entry)
- }).then(_ =&gt; addFilesAsync(p, files))
- else
- p.add(file)
- }
- p.end()
-}
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/types.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/types.js.html
deleted file mode 100644
index ad8de07..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/types.js.html
+++ /dev/null
@@ -1,197 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/types.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> types.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>3/3</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>0/0</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>1/1</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>2/2</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">14x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">294x</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-// map types from key to human-friendly name
-exports.name = new Map([
- ['0', 'File'],
- // same as File
- ['', 'OldFile'],
- ['1', 'Link'],
- ['2', 'SymbolicLink'],
- // Devices and FIFOs aren't fully supported
- // they are parsed, but skipped when unpacking
- ['3', 'CharacterDevice'],
- ['4', 'BlockDevice'],
- ['5', 'Directory'],
- ['6', 'FIFO'],
- // same as File
- ['7', 'ContiguousFile'],
- // pax headers
- ['g', 'GlobalExtendedHeader'],
- ['x', 'ExtendedHeader'],
- // vendor-specific stuff
- // skip
- ['A', 'SolarisACL'],
- // like 5, but with data, which should be skipped
- ['D', 'GNUDumpDir'],
- // metadata only, skip
- ['I', 'Inode'],
- // data = link path of next file
- ['K', 'NextFileHasLongLinkpath'],
- // data = path of next file
- ['L', 'NextFileHasLongPath'],
- // skip
- ['M', 'ContinuationFile'],
- // like L
- ['N', 'OldGnuLongPath'],
- // skip
- ['S', 'SparseFile'],
- // skip
- ['V', 'TapeVolumeHeader'],
- // like x
- ['X', 'OldExtendedHeader']
-])
-&nbsp;
-// map the other direction
-exports.code = new Map(Array.from(exports.name).map(kv =&gt; [kv[1], kv[0]]))
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/unpack.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/unpack.js.html
deleted file mode 100644
index 240a6fa..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/unpack.js.html
+++ /dev/null
@@ -1,1604 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/unpack.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> unpack.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>254/254</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>194/194</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>44/44</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>247/247</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">60x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">134x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">134x</span>
-<span class="cline-any cline-yes">109x</span>
-<span class="cline-any cline-yes">109x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">134x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">134x</span>
-<span class="cline-any cline-yes">134x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">134x</span>
-<span class="cline-any cline-yes">134x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">134x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">134x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">125x</span>
-<span class="cline-any cline-yes">125x</span>
-<span class="cline-any cline-yes">125x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-yes">119x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-yes">131x</span>
-<span class="cline-any cline-yes">571x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">473x</span>
-<span class="cline-any cline-yes">98x</span>
-<span class="cline-any cline-yes">98x</span>
-<span class="cline-any cline-yes">98x</span>
-<span class="cline-any cline-yes">98x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">571x</span>
-<span class="cline-any cline-yes">144x</span>
-<span class="cline-any cline-yes">144x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">135x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">562x</span>
-<span class="cline-any cline-yes">545x</span>
-<span class="cline-any cline-yes">545x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">543x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">560x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">560x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">558x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">560x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">571x</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">560x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">560x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">179x</span>
-<span class="cline-any cline-yes">140x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">554x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">39x</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">27x</span>
-<span class="cline-any cline-yes">27x</span>
-<span class="cline-any cline-yes">27x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">451x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">473x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">30x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">30x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">221x</span>
-<span class="cline-any cline-yes">221x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">221x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">221x</span>
-<span class="cline-any cline-yes">221x</span>
-<span class="cline-any cline-yes">421x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">421x</span>
-<span class="cline-any cline-yes">219x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">221x</span>
-<span class="cline-any cline-yes">219x</span>
-<span class="cline-any cline-yes">192x</span>
-<span class="cline-any cline-yes">192x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">219x</span>
-<span class="cline-any cline-yes">10x</span>
-<span class="cline-any cline-yes">10x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">219x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">221x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">97x</span>
-<span class="cline-any cline-yes">97x</span>
-<span class="cline-any cline-yes">97x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">94x</span>
-<span class="cline-any cline-yes">94x</span>
-<span class="cline-any cline-yes">171x</span>
-<span class="cline-any cline-yes">94x</span>
-<span class="cline-any cline-yes">94x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">94x</span>
-<span class="cline-any cline-yes">73x</span>
-<span class="cline-any cline-yes">73x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">94x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">94x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">21x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">19x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">354x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">364x</span>
-<span class="cline-any cline-yes">364x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">354x</span>
-<span class="cline-any cline-yes">354x</span>
-<span class="cline-any cline-yes">354x</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-yes">342x</span>
-<span class="cline-any cline-yes">342x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">340x</span>
-<span class="cline-any cline-yes">318x</span>
-<span class="cline-any cline-yes">22x</span>
-<span class="cline-any cline-yes">16x</span>
-<span class="cline-any cline-yes">11x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">528x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">527x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">314x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">19x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">21x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">173x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">21x</span>
-<span class="cline-any cline-yes">21x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">59x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">200x</span>
-<span class="cline-any cline-yes">200x</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">191x</span>
-<span class="cline-any cline-yes">191x</span>
-<span class="cline-any cline-yes">17x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">15x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">13x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">174x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">93x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">93x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">93x</span>
-<span class="cline-any cline-yes">93x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">92x</span>
-<span class="cline-any cline-yes">86x</span>
-<span class="cline-any cline-yes">86x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">92x</span>
-<span class="cline-any cline-yes">86x</span>
-<span class="cline-any cline-yes">86x</span>
-<span class="cline-any cline-yes">58x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">85x</span>
-<span class="cline-any cline-yes">12x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">82x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">76x</span>
-<span class="cline-any cline-yes">76x</span>
-<span class="cline-any cline-yes">76x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">75x</span>
-<span class="cline-any cline-yes">56x</span>
-<span class="cline-any cline-yes">56x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">75x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">75x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-yes">276x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">19x</span>
-<span class="cline-any cline-yes">19x</span>
-<span class="cline-any cline-yes">17x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-&nbsp;
-const assert = require('assert')
-const EE = require('events').EventEmitter
-const Parser = require('./parse.js')
-const fs = require('fs')
-const fsm = require('fs-minipass')
-const path = require('path')
-const mkdir = require('./mkdir.js')
-const mkdirSync = mkdir.sync
-const wc = require('./winchars.js')
-&nbsp;
-const ONENTRY = Symbol('onEntry')
-const CHECKFS = Symbol('checkFs')
-const MAKEFS = Symbol('makeFs')
-const FILE = Symbol('file')
-const DIRECTORY = Symbol('directory')
-const LINK = Symbol('link')
-const SYMLINK = Symbol('symlink')
-const HARDLINK = Symbol('hardlink')
-const UNSUPPORTED = Symbol('unsupported')
-const UNKNOWN = Symbol('unknown')
-const CHECKPATH = Symbol('checkPath')
-const MKDIR = Symbol('mkdir')
-const ONERROR = Symbol('onError')
-const PENDING = Symbol('pending')
-const PEND = Symbol('pend')
-const UNPEND = Symbol('unpend')
-const ENDED = Symbol('ended')
-const MAYBECLOSE = Symbol('maybeClose')
-const SKIP = Symbol('skip')
-const DOCHOWN = Symbol('doChown')
-const UID = Symbol('uid')
-const GID = Symbol('gid')
-&nbsp;
-// this.gid, entry.gid, this.processUid
-const uint32 = (a, b, c) =&gt;
- a === a &gt;&gt;&gt; 0 ? a
- : b === b &gt;&gt;&gt; 0 ? b
- : c
-&nbsp;
-class Unpack extends Parser {
- constructor (opt) {
- if (!opt)
- opt = {}
-&nbsp;
- opt.ondone = _ =&gt; {
- this[ENDED] = true
- this[MAYBECLOSE]()
- }
-&nbsp;
- super(opt)
-&nbsp;
- this.writable = true
- this.readable = false
-&nbsp;
- this[PENDING] = 0
- this[ENDED] = false
-&nbsp;
- this.dirCache = opt.dirCache || new Map()
-&nbsp;
- if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {
- // need both or neither
- if (typeof opt.uid !== 'number' || typeof opt.gid !== 'number')
- throw new TypeError('cannot set owner without number uid and gid')
- if (opt.preserveOwner)
- throw new TypeError(
- 'cannot preserve owner in archive and also set owner explicitly')
- this.uid = opt.uid
- this.gid = opt.gid
- this.setOwner = true
- } else {
- this.uid = null
- this.gid = null
- this.setOwner = false
- }
-&nbsp;
- // default true for root
- if (opt.preserveOwner === undefined &amp;&amp; typeof opt.uid !== 'number')
- this.preserveOwner = process.getuid &amp;&amp; process.getuid() === 0
- else
- this.preserveOwner = !!opt.preserveOwner
-&nbsp;
- this.processUid = (this.preserveOwner || this.setOwner) &amp;&amp; process.getuid ?
- process.getuid() : null
- this.processGid = (this.preserveOwner || this.setOwner) &amp;&amp; process.getgid ?
- process.getgid() : null
-&nbsp;
- // turn &gt;&lt;?| in filenames into 0xf000-higher encoded forms
- this.win32 = !!opt.win32 || process.platform === 'win32'
-&nbsp;
- // do not unpack over files that are newer than what's in the archive
- this.newer = !!opt.newer
-&nbsp;
- // do not unpack over ANY files
- this.keep = !!opt.keep
-&nbsp;
- // do not set mtime/atime of extracted entries
- this.noMtime = !!opt.noMtime
-&nbsp;
- // allow .., absolute path entries, and unpacking through symlinks
- // without this, warn and skip .., relativize absolutes, and error
- // on symlinks in extraction path
- this.preservePaths = !!opt.preservePaths
-&nbsp;
- // unlink files and links before writing. This breaks existing hard
- // links, and removes symlink directories rather than erroring
- this.unlink = !!opt.unlink
-&nbsp;
- this.cwd = path.resolve(opt.cwd || process.cwd())
- this.strip = +opt.strip || 0
- this.processUmask = process.umask()
- this.umask = typeof opt.umask === 'number' ? opt.umask : this.processUmask
- // default mode for dirs created as parents
- this.dmode = opt.dmode || (0o0777 &amp; (~this.umask))
- this.fmode = opt.fmode || (0o0666 &amp; (~this.umask))
- this.on('entry', entry =&gt; this[ONENTRY](entry))
- }
-&nbsp;
- [MAYBECLOSE] () {
- if (this[ENDED] &amp;&amp; this[PENDING] === 0) {
- this.emit('prefinish')
- this.emit('finish')
- this.emit('end')
- this.emit('close')
- }
- }
-&nbsp;
- [CHECKPATH] (entry) {
- if (this.strip) {
- const parts = entry.path.split(/\/|\\/)
- if (parts.length &lt; this.strip)
- return false
- entry.path = parts.slice(this.strip).join('/')
- }
-&nbsp;
- if (!this.preservePaths) {
- const p = entry.path
- if (p.match(/(^|\/|\\)\.\.(\\|\/|$)/)) {
- this.warn('path contains \'..\'', p)
- return false
- }
-&nbsp;
- // absolutes on posix are also absolutes on win32
- // so we only need to test this one to get both
- if (path.win32.isAbsolute(p)) {
- const parsed = path.win32.parse(p)
- this.warn('stripping ' + parsed.root + ' from absolute path', p)
- entry.path = p.substr(parsed.root.length)
- }
- }
-&nbsp;
- // only encode : chars that aren't drive letter indicators
- if (this.win32) {
- const parsed = path.win32.parse(entry.path)
- entry.path = parsed.root === '' ? wc.encode(entry.path)
- : parsed.root + wc.encode(entry.path.substr(parsed.root.length))
- }
-&nbsp;
- if (path.isAbsolute(entry.path))
- entry.absolute = entry.path
- else
- entry.absolute = path.resolve(this.cwd, entry.path)
-&nbsp;
- return true
- }
-&nbsp;
- [ONENTRY] (entry) {
- if (!this[CHECKPATH](entry))
- return entry.resume()
-&nbsp;
- assert.equal(typeof entry.absolute, 'string')
-&nbsp;
- switch (entry.type) {
- case 'Directory':
- case 'GNUDumpDir':
- if (entry.mode)
- entry.mode = entry.mode | 0o700
-&nbsp;
- case 'File':
- case 'OldFile':
- case 'ContiguousFile':
- case 'Link':
- case 'SymbolicLink':
- return this[CHECKFS](entry)
-&nbsp;
- case 'CharacterDevice':
- case 'BlockDevice':
- case 'FIFO':
- return this[UNSUPPORTED](entry)
- }
- }
-&nbsp;
- [ONERROR] (er, entry) {
- // Cwd has to exist, or else nothing works. That's serious.
- // Other errors are warnings, which raise the error in strict
- // mode, but otherwise continue on.
- if (er.name === 'CwdError')
- this.emit('error', er)
- else {
- this.warn(er.message, er)
- this[UNPEND]()
- entry.resume()
- }
- }
-&nbsp;
- [MKDIR] (dir, mode, cb) {
- mkdir(dir, {
- uid: this.uid,
- gid: this.gid,
- processUid: this.processUid,
- processGid: this.processGid,
- umask: this.processUmask,
- preserve: this.preservePaths,
- unlink: this.unlink,
- cache: this.dirCache,
- cwd: this.cwd,
- mode: mode
- }, cb)
- }
-&nbsp;
- [DOCHOWN] (entry) {
- // in preserve owner mode, chown if the entry doesn't match process
- // in set owner mode, chown if setting doesn't match process
- return this.preserveOwner &amp;&amp;
- ( typeof entry.uid === 'number' &amp;&amp; entry.uid !== this.processUid ||
- typeof entry.gid === 'number' &amp;&amp; entry.gid !== this.processGid )
- ||
- ( typeof this.uid === 'number' &amp;&amp; this.uid !== this.processUid ||
- typeof this.gid === 'number' &amp;&amp; this.gid !== this.processGid )
- }
-&nbsp;
- [UID] (entry) {
- return uint32(this.uid, entry.uid, this.processUid)
- }
-&nbsp;
- [GID] (entry) {
- return uint32(this.gid, entry.gid, this.processGid)
- }
-&nbsp;
- [FILE] (entry) {
- const mode = entry.mode &amp; 0o7777 || this.fmode
- const stream = new fsm.WriteStream(entry.absolute, {
- mode: mode,
- autoClose: false
- })
- stream.on('error', er =&gt; this[ONERROR](er, entry))
-&nbsp;
- let actions = 1
- const done = er =&gt; {
- if (er) {
- this[ONERROR](er, entry)
- actions = 1
- }
-&nbsp;
- if (--actions === 0)
- fs.close(stream.fd, _ =&gt; this[UNPEND]())
- }
-&nbsp;
- stream.on('finish', _ =&gt; {
- if (entry.mtime &amp;&amp; !this.noMtime) {
- actions++
- fs.futimes(stream.fd, entry.atime || new Date(), entry.mtime, done)
- }
-&nbsp;
- if (this[DOCHOWN](entry)) {
- actions++
- fs.fchown(stream.fd, this[UID](entry), this[GID](entry), done)
- }
-&nbsp;
- done()
- })
-&nbsp;
- entry.pipe(stream)
- }
-&nbsp;
- [DIRECTORY] (entry) {
- const mode = entry.mode &amp; 0o7777 || this.dmode
- this[MKDIR](entry.absolute, mode, er =&gt; {
- if (er)
- return this[ONERROR](er, entry)
-&nbsp;
- let actions = 1
- const done = _ =&gt; {
- if (--actions === 0) {
- this[UNPEND]()
- entry.resume()
- }
- }
-&nbsp;
- if (entry.mtime &amp;&amp; !this.noMtime) {
- actions++
- fs.utimes(entry.absolute, entry.atime || new Date(), entry.mtime, done)
- }
-&nbsp;
- if (this[DOCHOWN](entry)) {
- actions++
- fs.chown(entry.absolute, this[UID](entry), this[GID](entry), done)
- }
-&nbsp;
- done()
- })
- }
-&nbsp;
- [UNSUPPORTED] (entry) {
- this.warn('unsupported entry type: ' + entry.type, entry)
- entry.resume()
- }
-&nbsp;
- [SYMLINK] (entry) {
- this[LINK](entry, entry.linkpath, 'symlink')
- }
-&nbsp;
- [HARDLINK] (entry) {
- this[LINK](entry, path.resolve(this.cwd, entry.linkpath), 'link')
- }
-&nbsp;
- [PEND] () {
- this[PENDING]++
- }
-&nbsp;
- [UNPEND] () {
- this[PENDING]--
- this[MAYBECLOSE]()
- }
-&nbsp;
- [SKIP] (entry) {
- this[UNPEND]()
- entry.resume()
- }
-&nbsp;
- // check if a thing is there, and if so, try to clobber it
- [CHECKFS] (entry) {
- this[PEND]()
- this[MKDIR](path.dirname(entry.absolute), this.dmode, er =&gt; {
- if (er)
- return this[ONERROR](er, entry)
- fs.lstat(entry.absolute, (er, st) =&gt; {
- if (st &amp;&amp; (this.keep || this.newer &amp;&amp; st.mtime &gt; entry.mtime))
- this[SKIP](entry)
- else if (er || (entry.type === 'File' &amp;&amp; !this.unlink &amp;&amp; st.isFile()))
- this[MAKEFS](null, entry)
- else if (st.isDirectory()) {
- if (entry.type === 'Directory') {
- if (!entry.mode || (st.mode &amp; 0o7777) === entry.mode)
- this[MAKEFS](null, entry)
- else
- fs.chmod(entry.absolute, entry.mode, er =&gt; this[MAKEFS](er, entry))
- } else
- fs.rmdir(entry.absolute, er =&gt; this[MAKEFS](er, entry))
- } else
- fs.unlink(entry.absolute, er =&gt; this[MAKEFS](er, entry))
- })
- })
- }
-&nbsp;
- [MAKEFS] (er, entry) {
- if (er)
- return this[ONERROR](er, entry)
-&nbsp;
- switch (entry.type) {
- case 'File':
- case 'OldFile':
- case 'ContiguousFile':
- return this[FILE](entry)
-&nbsp;
- case 'Link':
- return this[HARDLINK](entry)
-&nbsp;
- case 'SymbolicLink':
- return this[SYMLINK](entry)
-&nbsp;
- case 'Directory':
- case 'GNUDumpDir':
- return this[DIRECTORY](entry)
- }
- }
-&nbsp;
- [LINK] (entry, linkpath, link) {
- // XXX: get the type ('file' or 'dir') for windows
- fs[link](linkpath, entry.absolute, er =&gt; {
- if (er)
- return this[ONERROR](er, entry)
- this[UNPEND]()
- entry.resume()
- })
- }
-}
-&nbsp;
-class UnpackSync extends Unpack {
- constructor (opt) {
- super(opt)
- }
-&nbsp;
- [CHECKFS] (entry) {
- const er = this[MKDIR](path.dirname(entry.absolute), this.dmode)
- if (er)
- return this[ONERROR](er, entry)
- try {
- const st = fs.lstatSync(entry.absolute)
- if (this.keep || this.newer &amp;&amp; st.mtime &gt; entry.mtime)
- return this[SKIP](entry)
- else if (entry.type === 'File' &amp;&amp; !this.unlink &amp;&amp; st.isFile())
- return this[MAKEFS](null, entry)
- else {
- try {
- if (st.isDirectory()) {
- if (entry.type === 'Directory') {
- if (entry.mode &amp;&amp; (st.mode &amp; 0o7777) !== entry.mode)
- fs.chmodSync(entry.absolute, entry.mode)
- } else
- fs.rmdirSync(entry.absolute)
- } else
- fs.unlinkSync(entry.absolute)
- return this[MAKEFS](null, entry)
- } catch (er) {
- return this[ONERROR](er, entry)
- }
- }
- } catch (er) {
- return this[MAKEFS](null, entry)
- }
- }
-&nbsp;
- [FILE] (entry) {
- const mode = entry.mode &amp; 0o7777 || this.fmode
-&nbsp;
- const oner = er =&gt; {
- try { fs.closeSync(fd) } catch (_) {}
- this[ONERROR](er, entry)
- }
-&nbsp;
- let stream
- let fd
- try {
- fd = fs.openSync(entry.absolute, 'w', mode)
- } catch (er) {
- return oner(er)
- }
-&nbsp;
- entry.on('data', chunk =&gt; {
- try {
- fs.writeSync(fd, chunk, 0, chunk.length)
- } catch (er) {
- oner(er)
- }
- })
-&nbsp;
- entry.on('end', _ =&gt; {
- try {
- if (entry.mtime &amp;&amp; !this.noMtime)
- fs.futimesSync(fd, entry.atime || new Date(), entry.mtime)
-&nbsp;
- if (this[DOCHOWN](entry))
- fs.fchownSync(fd, this[UID](entry), this[GID](entry))
-&nbsp;
- fs.closeSync(fd)
- } catch (er) {
- return oner(er)
- }
- })
-&nbsp;
- }
-&nbsp;
- [DIRECTORY] (entry) {
- const mode = entry.mode &amp; 0o7777 || this.dmode
- const er = this[MKDIR](entry.absolute, mode)
- if (er)
- return this[ONERROR](er, entry)
- if (entry.mtime &amp;&amp; !this.noMtime) {
- try {
- fs.utimesSync(entry.absolute, entry.atime || new Date(), entry.mtime)
- } catch (er) {}
- }
- if (this[DOCHOWN](entry)) {
- try {
- fs.chownSync(entry.absolute, this[UID](entry), this[GID](entry))
- } catch (er) {}
- }
- entry.resume()
- }
-&nbsp;
- [MKDIR] (dir, mode) {
- try {
- return mkdir.sync(dir, {
- uid: this.uid,
- gid: this.gid,
- processUid: this.processUid,
- processGid: this.processGid,
- umask: this.processUmask,
- preserve: this.preservePaths,
- unlink: this.unlink,
- cache: this.dirCache,
- cwd: this.cwd,
- mode: mode
- })
- } catch (er) {
- return er
- }
- }
-&nbsp;
- [LINK] (entry, linkpath, link) {
- try {
- fs[link + 'Sync'](linkpath, entry.absolute)
- entry.resume()
- } catch (er) {
- return this[ONERROR](er, entry)
- }
- }
-}
-&nbsp;
-Unpack.Sync = UnpackSync
-module.exports = Unpack
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/update.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/update.js.html
deleted file mode 100644
index 531cdde..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/update.js.html
+++ /dev/null
@@ -1,173 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/update.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> update.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>20/20</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>15/15</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>4/4</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>20/20</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">36x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">36x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">35x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">24x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-&nbsp;
-// tar -u
-&nbsp;
-const hlo = require('./high-level-opt.js')
-const r = require('./replace.js')
-// just call tar.r with the filter and mtimeCache
-&nbsp;
-const u = module.exports = (opt_, files, cb) =&gt; {
- const opt = hlo(opt_)
-&nbsp;
- if (!opt.file)
- throw new TypeError('file is required')
-&nbsp;
- if (opt.gzip)
- throw new TypeError('cannot append to compressed archives')
-&nbsp;
- if (!files || !Array.isArray(files) || !files.length)
- throw new TypeError('no files or directories specified')
-&nbsp;
- files = Array.from(files)
-&nbsp;
- mtimeFilter(opt)
- return r(opt, files, cb)
-}
-&nbsp;
-const mtimeFilter = opt =&gt; {
- const filter = opt.filter
-&nbsp;
- if (!opt.mtimeCache)
- opt.mtimeCache = new Map()
-&nbsp;
- opt.filter = filter ? (path, stat) =&gt;
- filter(path, stat) &amp;&amp; !(opt.mtimeCache.get(path) &gt; stat.mtime)
- : (path, stat) =&gt; !(opt.mtimeCache.get(path) &gt; stat.mtime)
-}
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/warn-mixin.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/warn-mixin.js.html
deleted file mode 100644
index 99aa9f3..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/warn-mixin.js.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/warn-mixin.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> warn-mixin.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>9/9</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>4/4</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>2/2</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>8/8</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">27x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">333x</span>
-<span class="cline-any cline-yes">184x</span>
-<span class="cline-any cline-yes">149x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">147x</span>
-<span class="cline-any cline-yes">147x</span>
-<span class="cline-any cline-yes">147x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-module.exports = Base =&gt; class extends Base {
- warn (msg, data) {
- if (!this.strict)
- this.emit('warn', msg, data)
- else if (data instanceof Error)
- this.emit('error', data)
- else {
- const er = new Error(msg)
- er.data = data
- this.emit('error', er)
- }
- }
-}
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/winchars.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/winchars.js.html
deleted file mode 100644
index 8e9fb65..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/winchars.js.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/winchars.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> winchars.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>12/12</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>0/0</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>7/7</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>8/8</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">45x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">45x</span>
-<span class="cline-any cline-yes">45x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">9x</span>
-<span class="cline-any cline-yes">30x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-&nbsp;
-// When writing files on Windows, translate the characters to their
-// 0xf000 higher-encoded versions.
-&nbsp;
-const raw = [
- '|',
- '&lt;',
- '&gt;',
- '?',
- ':'
-]
-&nbsp;
-const win = raw.map(char =&gt;
- String.fromCharCode(0xf000 + char.charCodeAt(0)))
-&nbsp;
-const toWin = new Map(raw.map((char, i) =&gt; [char, win[i]]))
-const toRaw = new Map(win.map((char, i) =&gt; [char, raw[i]]))
-&nbsp;
-module.exports = {
- encode: s =&gt; raw.reduce((s, c) =&gt; s.split(c).join(toWin.get(c)), s),
- decode: s =&gt; win.reduce((s, c) =&gt; s.split(c).join(toRaw.get(c)), s)
-}
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/write-entry.js.html b/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/write-entry.js.html
deleted file mode 100644
index ba22b99..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov-report/tar/lib/write-entry.js.html
+++ /dev/null
@@ -1,1268 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <title>Code coverage report for tar/lib/write-entry.js</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="../../prettify.css" />
- <link rel="stylesheet" href="../../base.css" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style type='text/css'>
- .coverage-summary .sorter {
- background-image: url(../../sort-arrow-sprite.png);
- }
- </style>
-</head>
-<body>
-<div class='wrapper'>
- <div class='pad1'>
- <h1>
- <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> write-entry.js
- </h1>
- <div class='clearfix'>
- <div class='fl pad1y space-right2'>
- <span class="strong">99.53% </span>
- <span class="quiet">Statements</span>
- <span class='fraction'>213/214</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">97.87% </span>
- <span class="quiet">Branches</span>
- <span class='fraction'>184/188</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">100% </span>
- <span class="quiet">Functions</span>
- <span class='fraction'>31/31</span>
- </div>
- <div class='fl pad1y space-right2'>
- <span class="strong">99.53% </span>
- <span class="quiet">Lines</span>
- <span class='fraction'>210/211</span>
- </div>
- </div>
- </div>
- <div class='status-line high'></div>
-<pre><table class="coverage">
-<tr><td class="line-count quiet">1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184
-185
-186
-187
-188
-189
-190
-191
-192
-193
-194
-195
-196
-197
-198
-199
-200
-201
-202
-203
-204
-205
-206
-207
-208
-209
-210
-211
-212
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6570x</span>
-<span class="cline-any cline-yes">6570x</span>
-<span class="cline-any cline-yes">6570x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-yes">6515x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6569x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6567x</span>
-<span class="cline-any cline-yes">6567x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6567x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6567x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6567x</span>
-<span class="cline-any cline-yes">6513x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">54x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">902x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-yes">5664x</span>
-<span class="cline-any cline-yes">867x</span>
-<span class="cline-any cline-yes">34x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6563x</span>
-<span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6563x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6563x</span>
-<span class="cline-any cline-yes">17x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6563x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">867x</span>
-<span class="cline-any cline-yes">859x</span>
-<span class="cline-any cline-yes">867x</span>
-<span class="cline-any cline-yes">867x</span>
-<span class="cline-any cline-yes">867x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">31x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5664x</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-yes">7x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5663x</span>
-<span class="cline-any cline-yes">5663x</span>
-<span class="cline-any cline-yes">42x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5621x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5568x</span>
-<span class="cline-any cline-yes">5568x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">5566x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5617x</span>
-<span class="cline-any cline-yes">5617x</span>
-<span class="cline-any cline-yes">5617x</span>
-<span class="cline-any cline-yes">5617x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7336x</span>
-<span class="cline-any cline-yes">7336x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">7335x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">5566x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7393x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7392x</span>
-<span class="cline-any cline-yes">5614x</span>
-<span class="cline-any cline-yes">1700449x</span>
-<span class="cline-any cline-yes">1700449x</span>
-<span class="cline-any cline-yes">1700449x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7392x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7392x</span>
-<span class="cline-any cline-yes">7392x</span>
-<span class="cline-any cline-yes">7392x</span>
-<span class="cline-any cline-yes">7392x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7392x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">7392x</span>
-<span class="cline-any cline-yes">5614x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">5614x</span>
-<span class="cline-any cline-yes">5614x</span>
-<span class="cline-any cline-yes">5614x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1778x</span>
-<span class="cline-any cline-yes">1754x</span>
-<span class="cline-any cline-yes">1754x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1778x</span>
-<span class="cline-any cline-yes">1778x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">99x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">53x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">59x</span>
-<span class="cline-any cline-yes">59x</span>
-<span class="cline-any cline-yes">59x</span>
-<span class="cline-any cline-yes">58x</span>
-<span class="cline-any cline-yes">57x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">59x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">51x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">26x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">27x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">33x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">14x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-yes">32x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">52x</span>
-<span class="cline-any cline-yes">52x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">51x</span>
-<span class="cline-any cline-yes">51x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">29x</span>
-<span class="cline-any cline-yes">22x</span>
-<span class="cline-any cline-yes">29x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6566x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
-const MiniPass = require('minipass')
-const Pax = require('./pax.js')
-const Header = require('./header.js')
-const ReadEntry = require('./read-entry.js')
-const fs = require('fs')
-const path = require('path')
-&nbsp;
-const types = require('./types.js')
-const maxReadSize = 16 * 1024 * 1024
-const PROCESS = Symbol('process')
-const FILE = Symbol('file')
-const DIRECTORY = Symbol('directory')
-const SYMLINK = Symbol('symlink')
-const HARDLINK = Symbol('hardlink')
-const HEADER = Symbol('header')
-const READ = Symbol('read')
-const LSTAT = Symbol('lstat')
-const ONLSTAT = Symbol('onlstat')
-const ONREAD = Symbol('onread')
-const ONREADLINK = Symbol('onreadlink')
-const OPENFILE = Symbol('openfile')
-const ONOPENFILE = Symbol('onopenfile')
-const CLOSE = Symbol('close')
-const warner = require('./warn-mixin.js')
-const winchars = require('./winchars.js')
-&nbsp;
-const WriteEntry = warner(class WriteEntry extends MiniPass {
- constructor (p, opt) {
- opt = opt || {}
- super(opt)
- if (typeof p !== 'string')
- throw new TypeError('path is required')
- this.path = p
- // suppress atime, ctime, uid, gid, uname, gname
- this.portable = !!opt.portable
- // until node has builtin pwnam functions, this'll have to do
- this.myuid = process.getuid &amp;&amp; process.getuid()
- this.myuser = process.env.USER || ''
- this.maxReadSize = opt.maxReadSize || maxReadSize
- this.linkCache = opt.linkCache || new Map()
- this.statCache = opt.statCache || new Map()
- this.preservePaths = !!opt.preservePaths
- this.cwd = opt.cwd || process.cwd()
- this.strict = !!opt.strict
- this.noPax = !!opt.noPax
- this.noMtime = !!opt.noMtime
-&nbsp;
- if (typeof opt.onwarn === 'function')
- this.on('warn', opt.onwarn)
-&nbsp;
- if (!this.preservePaths &amp;&amp; path.win32.isAbsolute(p)) {
- // absolutes on posix are also absolutes on win32
- // so we only need to test this one to get both
- const parsed = path.win32.parse(p)
- this.warn('stripping ' + parsed.root + ' from absolute path', p)
- this.path = p.substr(parsed.root.length)
- }
-&nbsp;
- this.win32 = !!opt.win32 || process.platform === 'win32'
- if (this.win32) {
- this.path = winchars.decode(this.path.replace(/\\/g, '/'))
- p = p.replace(/\\/g, '/')
- }
-&nbsp;
- this.absolute = opt.absolute || path.resolve(this.cwd, p)
-&nbsp;
- if (this.path === '')
- this.path = './'
-&nbsp;
- if (this.statCache.has(this.absolute))
- this[ONLSTAT](this.statCache.get(this.absolute))
- else
- this[LSTAT]()
- }
-&nbsp;
- [LSTAT] () {
- fs.lstat(this.absolute, (er, stat) =&gt; {
- if (er)
- return this.emit('error', er)
- this[ONLSTAT](stat)
- })
- }
-&nbsp;
- [ONLSTAT] (stat) {
- this.statCache.set(this.absolute, stat)
- this.stat = stat
- if (!stat.isFile())
- stat.size = 0
- this.type = getType(stat)
- this.emit('stat', stat)
- this[PROCESS]()
- }
-&nbsp;
- [PROCESS] () {
- switch (this.type) {
- case 'File': return this[FILE]()
- case 'Directory': return this[DIRECTORY]()
- case 'SymbolicLink': return this[SYMLINK]()
- // unsupported types are ignored.
- default: return this.end()
- }
- }
-&nbsp;
- [HEADER] () {
- if (this.type === 'Directory' &amp;&amp; this.portable)
- this.noMtime = true
-&nbsp;
- this.header = new Header({
- path: this.path,
- linkpath: this.linkpath,
- // only the permissions and setuid/setgid/sticky bitflags
- // not the higher-order bits that specify file type
- mode: this.stat.mode &amp; 0o7777,
- uid: this.portable ? null : this.stat.uid,
- gid: this.portable ? null : this.stat.gid,
- size: this.stat.size,
- mtime: this.noMtime ? null : this.stat.mtime,
- type: this.type,
- uname: this.portable ? null :
- this.stat.uid === this.myuid ? this.myuser : '',
- atime: this.portable ? null : this.stat.atime,
- ctime: this.portable ? null : this.stat.ctime
- })
-&nbsp;
- if (this.header.encode() &amp;&amp; !this.noPax)
- this.write(new Pax({
- atime: this.portable ? null : this.header.atime,
- ctime: this.portable ? null : this.header.ctime,
- gid: this.portable ? null : this.header.gid,
- mtime: this.noMtime ? null : this.header.mtime,
- path: this.path,
- linkpath: this.linkpath,
- size: this.header.size,
- uid: this.portable ? null : this.header.uid,
- uname: this.portable ? null : this.header.uname,
- dev: this.portable ? null : this.stat.dev,
- ino: this.portable ? null : this.stat.ino,
- nlink: this.portable ? null : this.stat.nlink
- }).encode())
- this.write(this.header.block)
- }
-&nbsp;
- [DIRECTORY] () {
- if (this.path.substr(-1) !== '/')
- this.path += '/'
- this.stat.size = 0
- this[HEADER]()
- this.end()
- }
-&nbsp;
- [SYMLINK] () {
- fs.readlink(this.absolute, (er, linkpath) =&gt; {
- if (er)
- return this.emit('error', er)
- this[ONREADLINK](linkpath)
- })
- }
-&nbsp;
- [ONREADLINK] (linkpath) {
- this.linkpath = linkpath
- this[HEADER]()
- this.end()
- }
-&nbsp;
- [HARDLINK] (linkpath) {
- this.type = 'Link'
- this.linkpath = path.relative(this.cwd, linkpath)
- this.stat.size = 0
- this[HEADER]()
- this.end()
- }
-&nbsp;
- [FILE] () {
- if (this.stat.nlink &gt; 1) {
- const linkKey = this.stat.dev + ':' + this.stat.ino
- if (this.linkCache.has(linkKey)) {
- const linkpath = this.linkCache.get(linkKey)
- if (linkpath.indexOf(this.cwd) === 0)
- return this[HARDLINK](linkpath)
- }
- this.linkCache.set(linkKey, this.absolute)
- }
-&nbsp;
- this[HEADER]()
- if (this.stat.size === 0)
- return this.end()
-&nbsp;
- this[OPENFILE]()
- }
-&nbsp;
- [OPENFILE] () {
- fs.open(this.absolute, 'r', (er, fd) =&gt; {
- if (er)
- return this.emit('error', er)
- this[ONOPENFILE](fd)
- })
- }
-&nbsp;
- [ONOPENFILE] (fd) {
- const blockLen = 512 * Math.ceil(this.stat.size / 512)
- const bufLen = Math.min(blockLen, this.maxReadSize)
- const buf = Buffer.allocUnsafe(bufLen)
- this[READ](fd, buf, 0, buf.length, 0, this.stat.size, blockLen)
- }
-&nbsp;
- [READ] (fd, buf, offset, length, pos, remain, blockRemain) {
- fs.read(fd, buf, offset, length, pos, (er, bytesRead) =&gt; {
- if (er)
- return this[CLOSE](fd, _ =&gt; this.emit('error', er))
- this[ONREAD](fd, buf, offset, length, pos, remain, blockRemain, bytesRead)
- })
- }
-&nbsp;
- [CLOSE] (fd, cb) {
- fs.close(fd, cb)
- }
-&nbsp;
- [ONREAD] (fd, buf, offset, length, pos, remain, blockRemain, bytesRead) {
- if (bytesRead &lt;= 0 &amp;&amp; remain &gt; 0) {
- const er = new Error('unexpected EOF')
- er.path = this.absolute
- er.syscall = 'read'
- er.code = 'EOF'
- this.emit('error', er)
- }
-&nbsp;
- // null out the rest of the buffer, if we could fit the block padding
- if (bytesRead === remain) {
- for (let i = bytesRead; i &lt; length &amp;&amp; bytesRead &lt; blockRemain; i++) {
- buf[i + offset] = 0
- bytesRead ++
- remain ++
- }
- }
-&nbsp;
- const writeBuf = offset === 0 &amp;&amp; bytesRead === buf.length ?
- buf : buf.slice(offset, offset + bytesRead)
- remain -= bytesRead
- blockRemain -= bytesRead
- pos += bytesRead
- offset += bytesRead
-&nbsp;
- this.write(writeBuf)
-&nbsp;
- if (!remain) {
- if (blockRemain)
- this.write(Buffer.alloc(blockRemain))
- this.end()
- this[CLOSE](fd, _ =&gt; _)
- return
- }
-&nbsp;
- if (offset &gt;= length) {
- buf = Buffer.allocUnsafe(length)
- offset = 0
- }
- length = buf.length - offset
- this[READ](fd, buf, offset, length, pos, remain, blockRemain)
- }
-})
-&nbsp;
-class WriteEntrySync extends WriteEntry {
- constructor (path, opt) {
- super(path, opt)
- }
-&nbsp;
- [LSTAT] () {
- this[ONLSTAT](fs.lstatSync(this.absolute))
- }
-&nbsp;
- [SYMLINK] () {
- this[ONREADLINK](fs.readlinkSync(this.absolute))
- }
-&nbsp;
- [OPENFILE] () {
- this[ONOPENFILE](fs.openSync(this.absolute, 'r'))
- }
-&nbsp;
- [READ] (fd, buf, offset, length, pos, remain, blockRemain) {
- let threw = true
- try {
- const bytesRead = fs.readSync(fd, buf, offset, length, pos)
- this[ONREAD](fd, buf, offset, length, pos, remain, blockRemain, bytesRead)
- threw = false
- } finally {
- if (threw)
- try { this[CLOSE](fd) } catch (er) {}
- }
- }
-&nbsp;
- [CLOSE] (fd) {
- fs.closeSync(fd)
- }
-}
-&nbsp;
-const WriteEntryTar = warner(class WriteEntryTar extends MiniPass {
- constructor (readEntry, opt) {
- opt = opt || {}
- super(opt)
- this.preservePaths = !!opt.preservePaths
- this.portable = !!opt.portable
- this.strict = !!opt.strict
- this.noPax = !!opt.noPax
- this.noMtime = !!opt.noMtime
-&nbsp;
- this.readEntry = readEntry
- this.type = readEntry.type
- <span class="missing-if-branch" title="if path not taken" >I</span>if (this.type === 'Directory' &amp;&amp; this.portable)
-<span class="cstat-no" title="statement not covered" > this.noMtime = true</span>
-&nbsp;
- this.path = readEntry.path
- this.mode = readEntry.mode
- if (this.mode)
- this.mode = this.mode &amp; 0o7777
- this.uid = this.portable ? null : readEntry.uid
- this.gid = this.portable ? null : readEntry.gid
- this.uname = this.portable ? null : readEntry.uname
- this.gname = this.portable ? null : readEntry.gname
- this.size = readEntry.size
- this.mtime = this.noMtime ? <span class="branch-0 cbranch-no" title="branch not covered" >null </span>: readEntry.mtime
- this.atime = this.portable ? null : readEntry.atime
- this.ctime = this.portable ? null : readEntry.ctime
- this.linkpath = readEntry.linkpath
-&nbsp;
- if (typeof opt.onwarn === 'function')
- this.on('warn', opt.onwarn)
-&nbsp;
- if (path.isAbsolute(this.path) &amp;&amp; !this.preservePaths) {
- const parsed = path.parse(this.path)
- this.warn(
- 'stripping ' + parsed.root + ' from absolute path',
- this.path
- )
- this.path = this.path.substr(parsed.root.length)
- }
-&nbsp;
- this.remain = readEntry.size
- this.blockRemain = readEntry.startBlockSize
-&nbsp;
- this.header = new Header({
- path: this.path,
- linkpath: this.linkpath,
- // only the permissions and setuid/setgid/sticky bitflags
- // not the higher-order bits that specify file type
- mode: this.mode,
- uid: this.portable ? null : this.uid,
- gid: this.portable ? null : this.gid,
- size: this.size,
- mtime: this.noMtime ? <span class="branch-0 cbranch-no" title="branch not covered" >null </span>: this.mtime,
- type: this.type,
- uname: this.portable ? null : this.uname,
- atime: this.portable ? null : this.atime,
- ctime: this.portable ? null : this.ctime
- })
-&nbsp;
- if (this.header.encode() &amp;&amp; !this.noPax)
- super.write(new Pax({
- atime: this.portable ? null : this.atime,
- ctime: this.portable ? null : this.ctime,
- gid: this.portable ? null : this.gid,
- mtime: this.noMtime ? <span class="branch-0 cbranch-no" title="branch not covered" >null </span>: this.mtime,
- path: this.path,
- linkpath: this.linkpath,
- size: this.size,
- uid: this.portable ? null : this.uid,
- uname: this.portable ? null : this.uname,
- dev: this.portable ? null : this.readEntry.dev,
- ino: this.portable ? null : this.readEntry.ino,
- nlink: this.portable ? null : this.readEntry.nlink
- }).encode())
-&nbsp;
- super.write(this.header.block)
- readEntry.pipe(this)
- }
-&nbsp;
- write (data) {
- const writeLen = data.length
- if (writeLen &gt; this.blockRemain)
- throw new Error('writing more to entry than is appropriate')
- this.blockRemain -= writeLen
- return super.write(data)
- }
-&nbsp;
- end () {
- if (this.blockRemain)
- this.write(Buffer.alloc(this.blockRemain))
- return super.end()
- }
-})
-&nbsp;
-WriteEntry.Sync = WriteEntrySync
-WriteEntry.Tar = WriteEntryTar
-&nbsp;
-const getType = stat =&gt;
- stat.isFile() ? 'File'
- : stat.isDirectory() ? 'Directory'
- : stat.isSymbolicLink() ? 'SymbolicLink'
- : 'Unsupported'
-&nbsp;
-module.exports = WriteEntry
-&nbsp;</pre></td></tr>
-</table></pre>
-<div class='push'></div><!-- for sticky footer -->
-</div><!-- /wrapper -->
-<div class='footer quiet pad2 space-top1 center small'>
- Code coverage
- generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
-</div>
-</div>
-<script src="../../prettify.js"></script>
-<script>
-window.onload = function () {
- if (typeof prettyPrint === 'function') {
- prettyPrint();
- }
-};
-</script>
-<script src="../../sorter.js"></script>
-</body>
-</html>
diff --git a/node_modules/node-gyp/node_modules/tar/coverage/lcov.info b/node_modules/node-gyp/node_modules/tar/coverage/lcov.info
deleted file mode 100644
index 19aa7c2..0000000
--- a/node_modules/node-gyp/node_modules/tar/coverage/lcov.info
+++ /dev/null
@@ -1,3690 +0,0 @@
-TN:
-SF:/Users/isaacs/dev/js/tar/index.js
-FNF:0
-FNH:0
-DA:4,1
-DA:5,1
-DA:6,1
-DA:7,1
-DA:8,1
-DA:11,1
-DA:12,1
-DA:13,1
-DA:14,1
-DA:15,1
-DA:16,1
-DA:17,1
-DA:18,1
-LF:13
-LH:13
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/create.js
-FN:12,(anonymous_0)
-FN:38,(anonymous_1)
-FN:47,(anonymous_2)
-FN:54,(anonymous_3)
-FN:65,(anonymous_4)
-FN:66,(anonymous_5)
-FN:72,(anonymous_6)
-FN:80,(anonymous_7)
-FN:87,(anonymous_8)
-FN:88,(anonymous_9)
-FN:95,(anonymous_10)
-FN:101,(anonymous_11)
-FNF:12
-FNH:12
-FNDA:15,(anonymous_0)
-FNDA:4,(anonymous_1)
-FNDA:4,(anonymous_2)
-FNDA:4,(anonymous_3)
-FNDA:5,(anonymous_4)
-FNDA:7,(anonymous_5)
-FNDA:7,(anonymous_6)
-FNDA:9,(anonymous_7)
-FNDA:7,(anonymous_8)
-FNDA:3,(anonymous_9)
-FNDA:1,(anonymous_10)
-FNDA:2,(anonymous_11)
-DA:4,2
-DA:6,2
-DA:7,2
-DA:8,2
-DA:9,2
-DA:10,2
-DA:12,2
-DA:13,15
-DA:14,1
-DA:16,15
-DA:17,1
-DA:19,15
-DA:20,2
-DA:22,13
-DA:24,13
-DA:26,13
-DA:27,1
-DA:29,12
-DA:30,1
-DA:32,11
-DA:38,2
-DA:39,4
-DA:40,4
-DA:43,4
-DA:44,4
-DA:47,2
-DA:48,4
-DA:49,4
-DA:52,4
-DA:54,4
-DA:55,4
-DA:56,4
-DA:57,4
-DA:60,4
-DA:62,4
-DA:65,2
-DA:66,5
-DA:67,7
-DA:68,3
-DA:72,7
-DA:75,4
-DA:77,4
-DA:80,2
-DA:81,9
-DA:82,8
-DA:83,8
-DA:84,3
-DA:87,7
-DA:88,3
-DA:90,5
-DA:92,6
-DA:95,2
-DA:96,1
-DA:97,1
-DA:98,1
-DA:101,2
-DA:102,2
-DA:103,2
-DA:104,2
-LF:59
-LH:59
-BRDA:13,0,0,1
-BRDA:13,0,1,14
-BRDA:16,1,0,1
-BRDA:16,1,1,14
-BRDA:19,2,0,2
-BRDA:19,2,1,13
-BRDA:19,3,0,15
-BRDA:19,3,1,14
-BRDA:19,3,2,13
-BRDA:26,4,0,1
-BRDA:26,4,1,12
-BRDA:26,5,0,13
-BRDA:26,5,1,6
-BRDA:29,6,0,1
-BRDA:29,6,1,11
-BRDA:29,7,0,12
-BRDA:29,7,1,4
-BRDA:32,8,0,4
-BRDA:32,8,1,7
-BRDA:32,9,0,11
-BRDA:32,9,1,8
-BRDA:33,10,0,4
-BRDA:33,10,1,3
-BRDA:34,11,0,1
-BRDA:34,11,1,2
-BRDA:41,12,0,4
-BRDA:41,12,1,3
-BRDA:50,13,0,4
-BRDA:50,13,1,3
-BRDA:62,14,0,3
-BRDA:62,14,1,1
-BRDA:67,15,0,3
-BRDA:67,15,1,4
-BRDA:83,16,0,3
-BRDA:83,16,1,5
-BRF:35
-BRH:35
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/extract.js
-FN:10,(anonymous_0)
-FN:43,(anonymous_1)
-FN:44,(anonymous_2)
-FN:47,(anonymous_3)
-FN:58,(anonymous_4)
-FN:59,(anonymous_5)
-FN:62,(anonymous_6)
-FN:79,(anonymous_7)
-FN:84,(anonymous_8)
-FN:90,(anonymous_9)
-FN:106,(anonymous_10)
-FN:110,(anonymous_11)
-FNF:12
-FNH:12
-FNDA:21,(anonymous_0)
-FNDA:7,(anonymous_1)
-FNDA:13,(anonymous_2)
-FNDA:87,(anonymous_3)
-FNDA:9,(anonymous_4)
-FNDA:9,(anonymous_5)
-FNDA:6,(anonymous_6)
-FNDA:9,(anonymous_7)
-FNDA:9,(anonymous_8)
-FNDA:9,(anonymous_9)
-FNDA:1,(anonymous_10)
-FNDA:2,(anonymous_11)
-DA:4,2
-DA:5,2
-DA:6,2
-DA:7,2
-DA:8,2
-DA:10,2
-DA:11,21
-DA:12,1
-DA:13,20
-DA:14,1
-DA:16,21
-DA:17,3
-DA:19,21
-DA:20,13
-DA:22,8
-DA:24,21
-DA:26,21
-DA:27,2
-DA:29,19
-DA:30,1
-DA:32,18
-DA:33,7
-DA:35,18
-DA:43,2
-DA:44,13
-DA:45,7
-DA:47,7
-DA:48,87
-DA:49,87
-DA:53,87
-DA:54,87
-DA:57,7
-DA:58,9
-DA:59,9
-DA:62,2
-DA:63,6
-DA:65,6
-DA:66,6
-DA:68,6
-DA:71,5
-DA:72,5
-DA:76,4
-DA:79,2
-DA:80,9
-DA:81,9
-DA:83,9
-DA:84,9
-DA:85,9
-DA:86,9
-DA:90,9
-DA:91,9
-DA:92,1
-DA:94,8
-DA:98,8
-DA:99,8
-DA:103,9
-DA:106,2
-DA:107,1
-DA:110,2
-DA:111,2
-LF:60
-LH:60
-BRDA:11,0,0,1
-BRDA:11,0,1,20
-BRDA:13,1,0,1
-BRDA:13,1,1,19
-BRDA:16,2,0,3
-BRDA:16,2,1,18
-BRDA:19,3,0,13
-BRDA:19,3,1,8
-BRDA:26,4,0,2
-BRDA:26,4,1,19
-BRDA:26,5,0,21
-BRDA:26,5,1,9
-BRDA:29,6,0,1
-BRDA:29,6,1,18
-BRDA:29,7,0,19
-BRDA:29,7,1,4
-BRDA:32,8,0,7
-BRDA:32,8,1,11
-BRDA:35,9,0,6
-BRDA:35,9,1,12
-BRDA:35,10,0,18
-BRDA:35,10,1,15
-BRDA:36,11,0,9
-BRDA:36,11,1,3
-BRDA:37,12,0,1
-BRDA:37,12,1,2
-BRDA:48,13,0,87
-BRDA:48,13,1,12
-BRDA:48,13,2,12
-BRDA:49,14,0,3
-BRDA:49,14,1,84
-BRDA:50,15,0,9
-BRDA:50,15,1,75
-BRDA:57,16,0,3
-BRDA:57,16,1,4
-BRDA:58,17,0,9
-BRDA:58,17,1,3
-BRDA:71,18,0,5
-BRDA:71,18,1,3
-BRDA:81,19,0,9
-BRDA:81,19,1,7
-BRDA:91,20,0,1
-BRDA:91,20,1,8
-BRDA:103,21,0,4
-BRDA:103,21,1,5
-BRF:45
-BRH:45
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/header.js
-FN:14,(anonymous_0)
-FN:42,(anonymous_1)
-FN:103,(anonymous_2)
-FN:157,(anonymous_3)
-FN:164,(anonymous_4)
-FN:168,(anonymous_5)
-FN:172,(anonymous_6)
-FN:180,(anonymous_7)
-FN:219,(anonymous_8)
-FN:222,(anonymous_9)
-FN:225,(anonymous_10)
-FN:227,(anonymous_11)
-FN:231,(anonymous_12)
-FN:233,(anonymous_13)
-FN:244,(anonymous_14)
-FN:250,(anonymous_15)
-FN:253,(anonymous_16)
-FN:256,(anonymous_17)
-FN:260,(anonymous_18)
-FN:267,(anonymous_19)
-FNF:20
-FNH:20
-FNDA:13121,(anonymous_0)
-FNDA:6393,(anonymous_1)
-FNDA:6719,(anonymous_2)
-FNDA:6728,(anonymous_3)
-FNDA:8178,(anonymous_4)
-FNDA:4,(anonymous_5)
-FNDA:6723,(anonymous_6)
-FNDA:6718,(anonymous_7)
-FNDA:32001,(anonymous_8)
-FNDA:14938,(anonymous_9)
-FNDA:14938,(anonymous_10)
-FNDA:55448,(anonymous_11)
-FNDA:55411,(anonymous_12)
-FNDA:55411,(anonymous_13)
-FNDA:66910,(anonymous_14)
-FNDA:66615,(anonymous_15)
-FNDA:66615,(anonymous_16)
-FNDA:66615,(anonymous_17)
-FNDA:20150,(anonymous_18)
-FNDA:40308,(anonymous_19)
-DA:7,13
-DA:8,13
-DA:9,13
-DA:11,13
-DA:15,13121
-DA:16,13121
-DA:17,13121
-DA:19,13121
-DA:20,13121
-DA:21,13121
-DA:22,13121
-DA:23,13121
-DA:24,13121
-DA:25,13121
-DA:26,13121
-DA:27,13121
-DA:28,13121
-DA:29,13121
-DA:30,13121
-DA:31,13121
-DA:32,13121
-DA:33,13121
-DA:34,13121
-DA:36,13121
-DA:37,6393
-DA:38,6728
-DA:39,6726
-DA:43,6393
-DA:44,2795
-DA:46,6393
-DA:47,1
-DA:49,6392
-DA:50,6392
-DA:51,6392
-DA:52,6392
-DA:53,6392
-DA:54,6392
-DA:55,6392
-DA:58,6392
-DA:59,6392
-DA:60,1990
-DA:61,6392
-DA:62,2
-DA:69,6392
-DA:70,1594
-DA:72,6392
-DA:73,6392
-DA:74,4275
-DA:75,4275
-DA:76,4275
-DA:77,4275
-DA:78,4275
-DA:80,2
-DA:81,2
-DA:83,4273
-DA:84,4273
-DA:85,295
-DA:86,4273
-DA:87,4273
-DA:91,6392
-DA:92,6392
-DA:93,946016
-DA:95,6392
-DA:96,2275552
-DA:98,6392
-DA:99,6392
-DA:100,1860
-DA:104,6719
-DA:105,6600
-DA:106,6600
-DA:109,6719
-DA:110,6717
-DA:112,6719
-DA:113,1
-DA:115,6718
-DA:116,6718
-DA:117,6718
-DA:118,6718
-DA:119,6718
-DA:121,6718
-DA:122,6718
-DA:123,6718
-DA:124,6718
-DA:125,6718
-DA:126,6718
-DA:127,6718
-DA:128,6718
-DA:129,6718
-DA:130,6718
-DA:131,6718
-DA:132,6718
-DA:133,6718
-DA:134,6718
-DA:135,6718
-DA:136,2
-DA:138,6716
-DA:139,6716
-DA:140,6716
-DA:143,6718
-DA:144,6718
-DA:145,994264
-DA:147,6718
-DA:148,2391608
-DA:150,6718
-DA:151,6718
-DA:152,6718
-DA:154,6718
-DA:158,6728
-DA:159,73451
-DA:160,66740
-DA:165,8178
-DA:169,4
-DA:173,6723
-DA:174,6719
-DA:176,4
-DA:180,13
-DA:181,6718
-DA:182,6718
-DA:183,6718
-DA:185,6718
-DA:187,6718
-DA:188,6683
-DA:191,35
-DA:192,35
-DA:194,35
-DA:196,49
-DA:198,21
-DA:201,28
-DA:203,13
-DA:207,15
-DA:208,15
-DA:213,35
-DA:214,1
-DA:216,6718
-DA:219,13
-DA:220,32001
-DA:222,13
-DA:223,14938
-DA:225,14938
-DA:227,13
-DA:228,55448
-DA:231,55411
-DA:233,13
-DA:234,55411
-DA:239,13
-DA:244,13
-DA:245,66910
-DA:250,13
-DA:251,66615
-DA:253,13
-DA:254,66615
-DA:256,13
-DA:257,66615
-DA:260,13
-DA:261,20150
-DA:265,13
-DA:267,13
-DA:268,40308
-DA:272,13
-LF:159
-LH:159
-BRDA:36,0,0,6393
-BRDA:36,0,1,6728
-BRDA:37,1,0,6393
-BRDA:37,1,1,2795
-BRDA:38,2,0,6726
-BRDA:38,2,1,2
-BRDA:43,3,0,2795
-BRDA:43,3,1,3598
-BRDA:46,4,0,1
-BRDA:46,4,1,6392
-BRDA:46,5,0,6393
-BRDA:46,5,1,6393
-BRDA:59,6,0,1990
-BRDA:59,6,1,4402
-BRDA:61,7,0,2
-BRDA:61,7,1,6390
-BRDA:61,8,0,6392
-BRDA:61,8,1,3769
-BRDA:69,9,0,1594
-BRDA:69,9,1,4798
-BRDA:73,10,0,4275
-BRDA:73,10,1,2117
-BRDA:78,11,0,2
-BRDA:78,11,1,4273
-BRDA:84,12,0,295
-BRDA:84,12,1,3978
-BRDA:99,13,0,1860
-BRDA:99,13,1,4532
-BRDA:99,14,0,6392
-BRDA:99,14,1,1994
-BRDA:104,15,0,6600
-BRDA:104,15,1,119
-BRDA:109,16,0,6717
-BRDA:109,16,1,2
-BRDA:112,17,0,1
-BRDA:112,17,1,6718
-BRDA:115,18,0,6623
-BRDA:115,18,1,95
-BRDA:115,19,0,6718
-BRDA:115,19,1,95
-BRDA:116,20,0,6718
-BRDA:116,20,1,1
-BRDA:121,21,0,6718
-BRDA:121,21,1,6678
-BRDA:122,22,0,6718
-BRDA:122,22,1,6718
-BRDA:123,23,0,6718
-BRDA:123,23,1,6715
-BRDA:124,24,0,6718
-BRDA:124,24,1,6715
-BRDA:125,25,0,6718
-BRDA:125,25,1,6717
-BRDA:126,26,0,6718
-BRDA:126,26,1,6718
-BRDA:128,27,0,6718
-BRDA:128,27,1,6718
-BRDA:130,28,0,6718
-BRDA:130,28,1,6718
-BRDA:131,29,0,6718
-BRDA:131,29,1,6718
-BRDA:132,30,0,6718
-BRDA:132,30,1,6718
-BRDA:133,31,0,6718
-BRDA:133,31,1,6718
-BRDA:134,32,0,6718
-BRDA:134,32,1,6718
-BRDA:135,33,0,2
-BRDA:135,33,1,6716
-BRDA:136,34,0,2
-BRDA:136,34,1,2
-BRDA:138,35,0,6716
-BRDA:138,35,1,6716
-BRDA:139,36,0,6716
-BRDA:139,36,1,6716
-BRDA:140,37,0,6716
-BRDA:140,37,1,6716
-BRDA:159,38,0,66740
-BRDA:159,38,1,6711
-BRDA:159,39,0,73451
-BRDA:159,39,1,73273
-BRDA:165,40,0,8178
-BRDA:165,40,1,6
-BRDA:173,41,0,6719
-BRDA:173,41,1,4
-BRDA:185,42,0,6718
-BRDA:185,42,1,6712
-BRDA:187,43,0,6683
-BRDA:187,43,1,35
-BRDA:210,44,0,49
-BRDA:210,44,1,34
-BRDA:196,45,0,21
-BRDA:196,45,1,28
-BRDA:196,46,0,49
-BRDA:196,46,1,35
-BRDA:201,47,0,13
-BRDA:201,47,1,15
-BRDA:201,48,0,28
-BRDA:201,48,1,14
-BRDA:213,49,0,1
-BRDA:213,49,1,34
-BRDA:225,50,0,10449
-BRDA:225,50,1,4489
-BRDA:228,51,0,37
-BRDA:228,51,1,55411
-BRDA:231,52,0,21489
-BRDA:231,52,1,33922
-BRDA:245,53,0,288
-BRDA:245,53,1,66622
-BRDA:246,54,0,7
-BRDA:246,54,1,66615
-BRDA:246,55,0,66622
-BRDA:246,55,1,66615
-BRDA:257,56,0,19852
-BRDA:257,56,1,46763
-BRDA:261,57,0,266
-BRDA:261,57,1,19884
-BRDA:268,58,0,13394
-BRDA:268,58,1,26914
-BRDA:270,59,0,26914
-BRDA:270,59,1,26874
-BRF:120
-BRH:120
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/high-level-opt.js
-FN:27,(anonymous_0)
-FN:27,(anonymous_1)
-FN:29,(anonymous_2)
-FNF:3
-FNH:3
-FNDA:177,(anonymous_0)
-FNDA:469,(anonymous_1)
-FNDA:469,(anonymous_2)
-DA:5,7
-DA:27,469
-DA:29,469
-LF:3
-LH:3
-BRDA:27,0,0,174
-BRDA:27,0,1,3
-BRDA:28,1,0,26
-BRDA:28,1,1,443
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/large-numbers.js
-FN:7,(anonymous_0)
-FN:16,(anonymous_1)
-FN:28,(anonymous_2)
-FN:51,(anonymous_3)
-FN:58,(anonymous_4)
-FN:79,(anonymous_5)
-FN:90,(anonymous_6)
-FN:92,(anonymous_7)
-FNF:8
-FNH:8
-FNDA:17,(anonymous_0)
-FNDA:11,(anonymous_1)
-FNDA:6,(anonymous_2)
-FNDA:47,(anonymous_3)
-FNDA:6,(anonymous_4)
-FNDA:41,(anonymous_5)
-FNDA:96,(anonymous_6)
-FNDA:12,(anonymous_7)
-DA:7,14
-DA:8,17
-DA:9,17
-DA:10,6
-DA:12,11
-DA:13,17
-DA:16,14
-DA:17,11
-DA:18,11
-DA:19,86
-DA:20,31
-DA:22,55
-DA:23,55
-DA:28,14
-DA:29,6
-DA:30,6
-DA:31,6
-DA:32,6
-DA:34,60
-DA:35,42
-DA:37,18
-DA:38,18
-DA:40,60
-DA:41,48
-DA:42,12
-DA:43,6
-DA:45,6
-DA:46,6
-DA:51,14
-DA:52,47
-DA:53,47
-DA:54,47
-DA:58,14
-DA:59,6
-DA:60,6
-DA:61,6
-DA:62,6
-DA:63,60
-DA:65,60
-DA:66,48
-DA:67,12
-DA:68,6
-DA:70,6
-DA:71,6
-DA:73,60
-DA:74,12
-DA:76,6
-DA:79,14
-DA:80,41
-DA:81,41
-DA:82,41
-DA:83,266
-DA:84,266
-DA:85,161
-DA:87,41
-DA:90,96
-DA:92,14
-LF:57
-LH:57
-BRDA:9,0,0,6
-BRDA:9,0,1,11
-BRDA:19,1,0,31
-BRDA:19,1,1,55
-BRDA:34,2,0,42
-BRDA:34,2,1,18
-BRDA:40,3,0,48
-BRDA:40,3,1,12
-BRDA:42,4,0,6
-BRDA:42,4,1,6
-BRDA:54,5,0,41
-BRDA:54,5,1,6
-BRDA:65,6,0,48
-BRDA:65,6,1,12
-BRDA:67,7,0,6
-BRDA:67,7,1,6
-BRDA:73,8,0,12
-BRDA:73,8,1,48
-BRDA:84,9,0,161
-BRDA:84,9,1,105
-BRF:20
-BRH:20
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/list.js
-FN:13,(anonymous_0)
-FN:46,(anonymous_1)
-FN:48,(anonymous_2)
-FN:51,(anonymous_3)
-FN:56,(anonymous_4)
-FN:57,(anonymous_5)
-FN:60,(anonymous_6)
-FN:71,(anonymous_7)
-FN:72,(anonymous_8)
-FN:75,(anonymous_9)
-FN:103,(anonymous_10)
-FN:108,(anonymous_11)
-FN:112,(anonymous_12)
-FN:128,(anonymous_13)
-FNF:14
-FNH:14
-FNDA:34,(anonymous_0)
-FNDA:22,(anonymous_1)
-FNDA:255,(anonymous_2)
-FNDA:72,(anonymous_3)
-FNDA:3,(anonymous_4)
-FNDA:6,(anonymous_5)
-FNDA:125,(anonymous_6)
-FNDA:32,(anonymous_7)
-FNDA:64,(anonymous_8)
-FNDA:13,(anonymous_9)
-FNDA:16,(anonymous_10)
-FNDA:16,(anonymous_11)
-FNDA:16,(anonymous_12)
-FNDA:16,(anonymous_13)
-DA:7,5
-DA:8,5
-DA:9,5
-DA:10,5
-DA:11,5
-DA:13,5
-DA:14,34
-DA:15,1
-DA:16,33
-DA:17,1
-DA:19,34
-DA:20,5
-DA:22,34
-DA:23,31
-DA:25,3
-DA:27,34
-DA:29,34
-DA:30,1
-DA:32,33
-DA:33,1
-DA:35,32
-DA:36,3
-DA:38,32
-DA:39,22
-DA:41,32
-DA:46,5
-DA:47,22
-DA:48,22
-DA:49,255
-DA:50,255
-DA:51,72
-DA:56,5
-DA:57,6
-DA:58,3
-DA:60,3
-DA:61,125
-DA:62,125
-DA:66,125
-DA:67,125
-DA:70,3
-DA:71,32
-DA:72,64
-DA:75,5
-DA:76,13
-DA:77,13
-DA:78,13
-DA:80,13
-DA:81,13
-DA:82,12
-DA:83,12
-DA:84,10
-DA:86,2
-DA:87,2
-DA:88,2
-DA:89,2
-DA:90,28
-DA:91,27
-DA:92,27
-DA:94,1
-DA:96,11
-DA:98,13
-DA:99,1
-DA:103,5
-DA:104,16
-DA:105,16
-DA:107,16
-DA:108,16
-DA:109,16
-DA:110,16
-DA:112,16
-DA:113,16
-DA:114,2
-DA:116,14
-DA:120,14
-DA:121,14
-DA:125,16
-DA:128,16
-LF:77
-LH:77
-BRDA:14,0,0,1
-BRDA:14,0,1,33
-BRDA:16,1,0,1
-BRDA:16,1,1,32
-BRDA:19,2,0,5
-BRDA:19,2,1,29
-BRDA:22,3,0,31
-BRDA:22,3,1,3
-BRDA:29,4,0,1
-BRDA:29,4,1,33
-BRDA:29,5,0,34
-BRDA:29,5,1,15
-BRDA:32,6,0,1
-BRDA:32,6,1,32
-BRDA:32,7,0,33
-BRDA:32,7,1,4
-BRDA:35,8,0,3
-BRDA:35,8,1,29
-BRDA:38,9,0,22
-BRDA:38,9,1,10
-BRDA:41,10,0,13
-BRDA:41,10,1,19
-BRDA:41,11,0,32
-BRDA:41,11,1,29
-BRDA:42,12,0,16
-BRDA:42,12,1,3
-BRDA:48,13,0,13
-BRDA:48,13,1,9
-BRDA:61,14,0,125
-BRDA:61,14,1,65
-BRDA:61,14,2,65
-BRDA:62,15,0,6
-BRDA:62,15,1,119
-BRDA:63,16,0,59
-BRDA:63,16,1,60
-BRDA:70,17,0,1
-BRDA:70,17,1,2
-BRDA:71,18,0,32
-BRDA:71,18,1,1
-BRDA:82,19,0,12
-BRDA:82,19,1,10
-BRDA:83,20,0,10
-BRDA:83,20,1,2
-BRDA:98,21,0,1
-BRDA:98,21,1,12
-BRDA:98,22,0,13
-BRDA:98,22,1,2
-BRDA:105,23,0,16
-BRDA:105,23,1,14
-BRDA:113,24,0,2
-BRDA:113,24,1,14
-BRDA:125,25,0,4
-BRDA:125,25,1,12
-BRF:53
-BRH:53
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/mkdir.js
-FN:13,(anonymous_0)
-FN:19,(anonymous_1)
-FN:25,(anonymous_2)
-FN:31,(anonymous_3)
-FN:36,(anonymous_4)
-FN:54,(anonymous_5)
-FN:60,(anonymous_6)
-FN:72,(anonymous_7)
-FN:86,(anonymous_8)
-FN:96,(anonymous_9)
-FN:96,(anonymous_10)
-FN:102,(anonymous_11)
-FN:108,(anonymous_12)
-FN:124,(anonymous_13)
-FN:142,(anonymous_14)
-FNF:15
-FNH:15
-FNDA:4,(anonymous_0)
-FNDA:8,(anonymous_1)
-FNDA:12,(anonymous_2)
-FNDA:36,(anonymous_3)
-FNDA:451,(anonymous_4)
-FNDA:457,(anonymous_5)
-FNDA:6,(anonymous_6)
-FNDA:40,(anonymous_7)
-FNDA:1062,(anonymous_8)
-FNDA:222,(anonymous_9)
-FNDA:222,(anonymous_10)
-FNDA:32,(anonymous_11)
-FNDA:3,(anonymous_12)
-FNDA:276,(anonymous_13)
-FNDA:266,(anonymous_14)
-DA:7,3
-DA:8,3
-DA:9,3
-DA:10,3
-DA:14,4
-DA:15,4
-DA:16,4
-DA:20,8
-DA:26,12
-DA:27,12
-DA:28,12
-DA:32,36
-DA:36,3
-DA:39,451
-DA:40,451
-DA:41,451
-DA:43,451
-DA:44,451
-DA:45,451
-DA:49,451
-DA:50,451
-DA:51,451
-DA:52,451
-DA:54,451
-DA:55,457
-DA:56,15
-DA:58,442
-DA:59,442
-DA:60,6
-DA:61,436
-DA:62,1
-DA:64,435
-DA:68,451
-DA:69,272
-DA:71,179
-DA:72,40
-DA:73,40
-DA:74,2
-DA:75,40
-DA:78,139
-DA:79,8
-DA:81,131
-DA:82,131
-DA:83,131
-DA:86,3
-DA:87,1062
-DA:88,119
-DA:89,943
-DA:90,943
-DA:91,943
-DA:92,723
-DA:93,220
-DA:96,222
-DA:97,222
-DA:98,36
-DA:100,4
-DA:102,32
-DA:103,32
-DA:104,4
-DA:105,28
-DA:106,22
-DA:107,6
-DA:108,3
-DA:109,3
-DA:110,1
-DA:111,2
-DA:113,3
-DA:114,2
-DA:116,1
-DA:119,186
-DA:120,186
-DA:124,3
-DA:127,276
-DA:128,276
-DA:129,276
-DA:131,276
-DA:132,276
-DA:133,276
-DA:137,276
-DA:138,276
-DA:139,276
-DA:140,276
-DA:142,276
-DA:143,266
-DA:144,266
-DA:145,6
-DA:146,266
-DA:147,1
-DA:148,266
-DA:151,276
-DA:152,128
-DA:154,148
-DA:155,34
-DA:156,34
-DA:157,34
-DA:158,34
-DA:160,1
-DA:162,34
-DA:163,2
-DA:165,32
-DA:166,32
-DA:169,114
-DA:170,7
-DA:172,107
-DA:173,107
-DA:174,107
-DA:175,107
-DA:179,792
-DA:180,608
-DA:182,184
-DA:183,184
-DA:184,169
-DA:185,169
-DA:187,15
-DA:189,4
-DA:191,11
-DA:192,9
-DA:193,4
-DA:194,4
-DA:195,5
-DA:196,2
-DA:197,2
-DA:198,2
-DA:199,2
-DA:200,2
-DA:201,3
-DA:202,2
-DA:206,99
-LF:128
-LH:128
-BRDA:45,0,0,451
-BRDA:45,0,1,6
-BRDA:45,0,2,6
-BRDA:45,0,3,2
-BRDA:55,1,0,15
-BRDA:55,1,1,442
-BRDA:59,2,0,6
-BRDA:59,2,1,436
-BRDA:59,3,0,442
-BRDA:59,3,1,114
-BRDA:61,4,0,1
-BRDA:61,4,1,435
-BRDA:68,5,0,272
-BRDA:68,5,1,179
-BRDA:68,6,0,451
-BRDA:68,6,1,451
-BRDA:71,7,0,40
-BRDA:71,7,1,139
-BRDA:73,8,0,2
-BRDA:73,8,1,38
-BRDA:73,9,0,40
-BRDA:73,9,1,39
-BRDA:74,10,0,2
-BRDA:74,10,1,1
-BRDA:74,10,2,1
-BRDA:78,11,0,8
-BRDA:78,11,1,131
-BRDA:87,12,0,119
-BRDA:87,12,1,943
-BRDA:91,13,0,723
-BRDA:91,13,1,220
-BRDA:97,14,0,36
-BRDA:97,14,1,186
-BRDA:98,15,0,4
-BRDA:98,15,1,32
-BRDA:98,16,0,36
-BRDA:98,16,1,35
-BRDA:98,16,2,16
-BRDA:98,16,3,14
-BRDA:103,17,0,4
-BRDA:103,17,1,28
-BRDA:105,18,0,22
-BRDA:105,18,1,6
-BRDA:107,19,0,3
-BRDA:107,19,1,3
-BRDA:109,20,0,1
-BRDA:109,20,1,2
-BRDA:113,21,0,2
-BRDA:113,21,1,1
-BRDA:119,22,0,186
-BRDA:119,22,1,108
-BRDA:133,23,0,276
-BRDA:133,23,1,6
-BRDA:133,23,2,6
-BRDA:133,23,3,2
-BRDA:144,24,0,6
-BRDA:144,24,1,260
-BRDA:144,25,0,266
-BRDA:144,25,1,101
-BRDA:146,26,0,1
-BRDA:146,26,1,265
-BRDA:151,27,0,128
-BRDA:151,27,1,148
-BRDA:151,28,0,276
-BRDA:151,28,1,276
-BRDA:154,29,0,34
-BRDA:154,29,1,114
-BRDA:162,30,0,2
-BRDA:162,30,1,32
-BRDA:169,31,0,7
-BRDA:169,31,1,107
-BRDA:176,32,0,891
-BRDA:176,32,1,792
-BRDA:179,33,0,608
-BRDA:179,33,1,184
-BRDA:184,34,0,169
-BRDA:184,34,1,93
-BRDA:187,35,0,4
-BRDA:187,35,1,11
-BRDA:187,36,0,15
-BRDA:187,36,1,14
-BRDA:187,36,2,5
-BRDA:187,36,3,3
-BRDA:192,37,0,4
-BRDA:192,37,1,5
-BRDA:195,38,0,2
-BRDA:195,38,1,3
-BRDA:198,39,0,2
-BRDA:198,39,1,2
-BRDA:201,40,0,2
-BRDA:201,40,1,1
-BRF:91
-BRH:91
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/pack.js
-FN:13,(anonymous_0)
-FN:59,(anonymous_1)
-FN:81,(anonymous_2)
-FN:82,(anonymous_3)
-FN:83,(anonymous_4)
-FN:84,(anonymous_5)
-FN:94,(anonymous_6)
-FN:103,(anonymous_7)
-FN:107,(anonymous_8)
-FN:112,(anonymous_9)
-FN:120,(anonymous_10)
-FN:131,(anonymous_11)
-FN:142,(anonymous_12)
-FN:150,(anonymous_13)
-FN:159,(anonymous_14)
-FN:163,(anonymous_15)
-FN:173,(anonymous_16)
-FN:184,(anonymous_17)
-FN:187,(anonymous_18)
-FN:196,(anonymous_19)
-FN:202,(anonymous_20)
-FN:230,(anonymous_21)
-FN:234,(anonymous_22)
-FN:240,(anonymous_23)
-FN:283,(anonymous_24)
-FN:285,(anonymous_25)
-FN:301,(anonymous_26)
-FN:305,(anonymous_27)
-FN:306,(anonymous_28)
-FN:312,(anonymous_29)
-FN:318,(anonymous_30)
-FN:322,(anonymous_31)
-FN:335,(anonymous_32)
-FN:340,(anonymous_33)
-FN:346,(anonymous_34)
-FN:354,(anonymous_35)
-FN:360,(anonymous_36)
-FN:361,(anonymous_37)
-FN:363,(anonymous_38)
-FN:368,(anonymous_39)
-FN:373,(anonymous_40)
-FN:378,(anonymous_41)
-FN:389,(anonymous_42)
-FN:393,(anonymous_43)
-FNF:44
-FNH:44
-FNDA:6566,(anonymous_0)
-FNDA:122,(anonymous_1)
-FNDA:503,(anonymous_2)
-FNDA:4,(anonymous_3)
-FNDA:146,(anonymous_4)
-FNDA:219,(anonymous_5)
-FNDA:6507,(anonymous_6)
-FNDA:106,(anonymous_7)
-FNDA:107,(anonymous_8)
-FNDA:100,(anonymous_9)
-FNDA:128,(anonymous_10)
-FNDA:27,(anonymous_11)
-FNDA:25,(anonymous_12)
-FNDA:6541,(anonymous_13)
-FNDA:6453,(anonymous_14)
-FNDA:6453,(anonymous_15)
-FNDA:6538,(anonymous_16)
-FNDA:821,(anonymous_17)
-FNDA:821,(anonymous_18)
-FNDA:858,(anonymous_19)
-FNDA:20596,(anonymous_20)
-FNDA:25863,(anonymous_21)
-FNDA:6533,(anonymous_22)
-FNDA:38739,(anonymous_23)
-FNDA:6537,(anonymous_24)
-FNDA:1,(anonymous_25)
-FNDA:6512,(anonymous_26)
-FNDA:6508,(anonymous_27)
-FNDA:1,(anonymous_28)
-FNDA:248,(anonymous_29)
-FNDA:6448,(anonymous_30)
-FNDA:6393,(anonymous_31)
-FNDA:11830,(anonymous_32)
-FNDA:199,(anonymous_33)
-FNDA:265,(anonymous_34)
-FNDA:47,(anonymous_35)
-FNDA:1,(anonymous_36)
-FNDA:1,(anonymous_37)
-FNDA:84,(anonymous_38)
-FNDA:37,(anonymous_39)
-FNDA:87,(anonymous_40)
-FNDA:48,(anonymous_41)
-FNDA:39,(anonymous_42)
-FNDA:106,(anonymous_43)
-DA:14,6566
-DA:15,6566
-DA:16,6566
-DA:17,6566
-DA:18,6566
-DA:19,6566
-DA:20,6566
-DA:21,6566
-DA:25,5
-DA:26,5
-DA:27,5
-DA:28,5
-DA:29,5
-DA:30,5
-DA:31,5
-DA:32,5
-DA:33,5
-DA:34,5
-DA:35,5
-DA:36,5
-DA:37,5
-DA:38,5
-DA:39,5
-DA:40,5
-DA:41,5
-DA:42,5
-DA:43,5
-DA:44,5
-DA:45,5
-DA:46,5
-DA:47,5
-DA:48,5
-DA:49,5
-DA:50,5
-DA:51,5
-DA:52,5
-DA:54,5
-DA:55,5
-DA:56,5
-DA:58,5
-DA:60,122
-DA:61,122
-DA:62,122
-DA:63,122
-DA:64,122
-DA:65,122
-DA:66,122
-DA:67,122
-DA:68,122
-DA:69,122
-DA:70,122
-DA:71,122
-DA:72,122
-DA:73,122
-DA:74,3
-DA:76,122
-DA:77,122
-DA:78,5
-DA:79,4
-DA:80,5
-DA:81,503
-DA:82,5
-DA:83,146
-DA:84,219
-DA:86,117
-DA:88,122
-DA:89,122
-DA:90,122
-DA:91,122
-DA:94,6507
-DA:96,122
-DA:97,122
-DA:98,122
-DA:99,122
-DA:100,122
-DA:104,106
-DA:108,107
-DA:109,103
-DA:113,100
-DA:114,21
-DA:115,99
-DA:116,99
-DA:117,99
-DA:121,128
-DA:122,1
-DA:124,127
-DA:125,27
-DA:127,100
-DA:128,123
-DA:132,27
-DA:133,27
-DA:134,1
-DA:137,27
-DA:138,2
-DA:140,25
-DA:141,25
-DA:142,25
-DA:143,25
-DA:144,25
-DA:147,27
-DA:151,6541
-DA:152,6541
-DA:153,34
-DA:155,6541
-DA:156,6541
-DA:160,6453
-DA:161,6453
-DA:162,6453
-DA:163,6453
-DA:164,6453
-DA:165,6453
-DA:166,6453
-DA:167,1
-DA:169,6452
-DA:174,6538
-DA:175,6538
-DA:178,6538
-DA:179,24
-DA:181,6538
-DA:185,821
-DA:186,821
-DA:187,821
-DA:188,821
-DA:189,821
-DA:190,821
-DA:191,1
-DA:192,820
-DA:197,858
-DA:198,858
-DA:199,858
-DA:203,20596
-DA:204,9093
-DA:206,11503
-DA:207,11503
-DA:210,38739
-DA:211,38735
-DA:212,25
-DA:213,25
-DA:214,25
-DA:218,11499
-DA:220,11499
-DA:221,96
-DA:222,4
-DA:224,92
-DA:225,92
-DA:231,25863
-DA:235,6533
-DA:236,6533
-DA:237,6533
-DA:241,38739
-DA:242,6156
-DA:244,32583
-DA:245,18770
-DA:246,4954
-DA:247,18770
-DA:250,13813
-DA:251,6541
-DA:252,4
-DA:254,6537
-DA:256,13811
-DA:257,6453
-DA:260,7358
-DA:261,24
-DA:263,7334
-DA:264,860
-DA:265,2
-DA:267,858
-DA:268,859
-DA:269,821
-DA:273,6512
-DA:274,6511
-DA:275,1
-DA:276,1
-DA:279,6510
-DA:280,1581
-DA:284,6537
-DA:286,1
-DA:302,6512
-DA:303,6512
-DA:304,6512
-DA:305,6508
-DA:306,1
-DA:308,2
-DA:313,248
-DA:314,158
-DA:319,6448
-DA:321,6448
-DA:322,820
-DA:323,6393
-DA:327,6393
-DA:328,6393
-DA:331,6448
-DA:332,6448
-DA:334,6448
-DA:335,6336
-DA:336,11830
-DA:337,156
-DA:340,112
-DA:341,199
-DA:342,53
-DA:347,265
-DA:348,214
-DA:349,265
-DA:355,47
-DA:356,47
-DA:364,84
-DA:365,84
-DA:369,37
-DA:374,87
-DA:375,87
-DA:377,87
-DA:378,38
-DA:379,48
-DA:384,48
-DA:385,48
-DA:388,87
-DA:389,31
-DA:390,39
-DA:393,56
-DA:394,106
-DA:399,5
-DA:401,5
-LF:222
-LH:222
-BRDA:14,0,0,6566
-BRDA:14,0,1,1
-BRDA:61,1,0,122
-BRDA:61,1,1,5
-BRDA:63,2,0,122
-BRDA:63,2,1,22
-BRDA:68,3,0,122
-BRDA:68,3,1,115
-BRDA:69,4,0,122
-BRDA:69,4,1,121
-BRDA:70,5,0,122
-BRDA:70,5,1,121
-BRDA:71,6,0,122
-BRDA:71,6,1,121
-BRDA:73,7,0,3
-BRDA:73,7,1,119
-BRDA:77,8,0,5
-BRDA:77,8,1,117
-BRDA:78,9,0,4
-BRDA:78,9,1,1
-BRDA:94,10,0,41
-BRDA:94,10,1,81
-BRDA:98,11,0,122
-BRDA:98,11,1,122
-BRDA:113,12,0,21
-BRDA:113,12,1,79
-BRDA:121,13,0,1
-BRDA:121,13,1,127
-BRDA:124,14,0,27
-BRDA:124,14,1,100
-BRDA:133,15,0,1
-BRDA:133,15,1,26
-BRDA:137,16,0,2
-BRDA:137,16,1,25
-BRDA:152,17,0,34
-BRDA:152,17,1,6507
-BRDA:162,18,0,1
-BRDA:162,18,1,6452
-BRDA:166,19,0,1
-BRDA:166,19,1,6452
-BRDA:178,20,0,24
-BRDA:178,20,1,6514
-BRDA:190,21,0,1
-BRDA:190,21,1,820
-BRDA:203,22,0,9093
-BRDA:203,22,1,11503
-BRDA:208,23,0,50238
-BRDA:208,23,1,49694
-BRDA:211,24,0,25
-BRDA:211,24,1,38710
-BRDA:220,25,0,96
-BRDA:220,25,1,11403
-BRDA:220,26,0,11499
-BRDA:220,26,1,11363
-BRDA:220,26,2,97
-BRDA:221,27,0,4
-BRDA:221,27,1,92
-BRDA:231,28,0,25863
-BRDA:231,28,1,25863
-BRDA:231,28,2,25792
-BRDA:241,29,0,6156
-BRDA:241,29,1,32583
-BRDA:244,30,0,18770
-BRDA:244,30,1,13813
-BRDA:245,31,0,4954
-BRDA:245,31,1,13816
-BRDA:245,32,0,18770
-BRDA:245,32,1,9951
-BRDA:250,33,0,6541
-BRDA:250,33,1,7272
-BRDA:251,34,0,4
-BRDA:251,34,1,6537
-BRDA:256,35,0,6453
-BRDA:256,35,1,7358
-BRDA:260,36,0,24
-BRDA:260,36,1,7334
-BRDA:263,37,0,860
-BRDA:263,37,1,6474
-BRDA:263,38,0,7334
-BRDA:263,38,1,7332
-BRDA:263,38,2,1680
-BRDA:264,39,0,2
-BRDA:264,39,1,858
-BRDA:268,40,0,821
-BRDA:268,40,1,38
-BRDA:274,41,0,1
-BRDA:274,41,1,6510
-BRDA:279,42,0,1581
-BRDA:279,42,1,4929
-BRDA:279,43,0,6510
-BRDA:279,43,1,1581
-BRDA:313,44,0,158
-BRDA:313,44,1,90
-BRDA:313,45,0,248
-BRDA:313,45,1,177
-BRDA:321,46,0,820
-BRDA:321,46,1,5628
-BRDA:323,47,0,14
-BRDA:323,47,1,6379
-BRDA:324,48,0,14
-BRDA:324,48,1,4
-BRDA:327,49,0,18
-BRDA:327,49,1,6375
-BRDA:334,50,0,6336
-BRDA:334,50,1,112
-BRDA:336,51,0,156
-BRDA:336,51,1,11674
-BRDA:341,52,0,53
-BRDA:341,52,1,146
-BRDA:347,53,0,214
-BRDA:347,53,1,51
-BRDA:364,54,0,1
-BRDA:364,54,1,83
-BRDA:377,55,0,38
-BRDA:377,55,1,49
-BRDA:379,56,0,14
-BRDA:379,56,1,34
-BRDA:380,57,0,14
-BRDA:380,57,1,4
-BRDA:384,58,0,4
-BRDA:384,58,1,44
-BRDA:388,59,0,31
-BRDA:388,59,1,56
-BRF:123
-BRH:123
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/parse.js
-FN:61,(anonymous_0)
-FN:64,(anonymous_1)
-FN:71,(anonymous_2)
-FN:103,(anonymous_3)
-FN:128,(anonymous_4)
-FN:157,(anonymous_5)
-FN:169,(anonymous_6)
-FN:177,(anonymous_7)
-FN:194,(anonymous_8)
-FN:198,(anonymous_9)
-FN:216,(anonymous_10)
-FN:227,(anonymous_11)
-FN:234,(anonymous_12)
-FN:262,(anonymous_13)
-FN:268,(anonymous_14)
-FN:290,(anonymous_15)
-FN:291,(anonymous_16)
-FN:293,(anonymous_17)
-FN:316,(anonymous_18)
-FN:321,(anonymous_19)
-FN:326,(anonymous_20)
-FN:342,(anonymous_21)
-FN:370,(anonymous_22)
-FN:405,(anonymous_23)
-FNF:24
-FNH:24
-FNDA:2032,(anonymous_0)
-FNDA:742,(anonymous_1)
-FNDA:589,(anonymous_2)
-FNDA:6101,(anonymous_3)
-FNDA:475,(anonymous_4)
-FNDA:4299,(anonymous_5)
-FNDA:1272,(anonymous_6)
-FNDA:2947,(anonymous_7)
-FNDA:9,(anonymous_8)
-FNDA:2194,(anonymous_9)
-FNDA:475,(anonymous_10)
-FNDA:4328,(anonymous_11)
-FNDA:455,(anonymous_12)
-FNDA:2,(anonymous_13)
-FNDA:669590,(anonymous_14)
-FNDA:20164,(anonymous_15)
-FNDA:2,(anonymous_16)
-FNDA:226,(anonymous_17)
-FNDA:6,(anonymous_18)
-FNDA:652869,(anonymous_19)
-FNDA:3449,(anonymous_20)
-FNDA:655942,(anonymous_21)
-FNDA:655553,(anonymous_22)
-FNDA:718,(anonymous_23)
-DA:23,9
-DA:24,9
-DA:25,9
-DA:26,9
-DA:27,9
-DA:28,9
-DA:29,9
-DA:30,9
-DA:31,9
-DA:33,9
-DA:34,9
-DA:35,9
-DA:36,9
-DA:37,9
-DA:38,9
-DA:39,9
-DA:40,9
-DA:41,9
-DA:42,9
-DA:43,9
-DA:44,9
-DA:45,9
-DA:46,9
-DA:47,9
-DA:48,9
-DA:49,9
-DA:50,9
-DA:51,9
-DA:52,9
-DA:53,9
-DA:54,9
-DA:55,9
-DA:56,9
-DA:57,9
-DA:58,9
-DA:59,9
-DA:61,2032
-DA:63,9
-DA:65,742
-DA:66,742
-DA:68,742
-DA:69,134
-DA:71,608
-DA:72,589
-DA:73,589
-DA:74,589
-DA:75,589
-DA:78,742
-DA:79,742
-DA:80,742
-DA:83,742
-DA:84,742
-DA:86,742
-DA:87,742
-DA:88,742
-DA:89,742
-DA:90,742
-DA:91,742
-DA:92,742
-DA:93,742
-DA:94,742
-DA:95,742
-DA:96,742
-DA:97,742
-DA:98,36
-DA:99,742
-DA:100,34
-DA:104,6101
-DA:106,6101
-DA:107,1834
-DA:108,4267
-DA:109,160
-DA:110,4107
-DA:111,40
-DA:113,4067
-DA:114,4067
-DA:115,40
-DA:116,4027
-DA:117,40
-DA:119,3987
-DA:121,3987
-DA:122,759
-DA:123,260
-DA:124,260
-DA:125,260
-DA:126,499
-DA:127,455
-DA:128,475
-DA:129,455
-DA:133,3228
-DA:134,3228
-DA:135,3228
-DA:136,1070
-DA:137,1070
-DA:139,2158
-DA:140,1028
-DA:142,1130
-DA:143,1130
-DA:146,2158
-DA:147,1675
-DA:148,1675
-DA:150,483
-DA:158,4299
-DA:160,4299
-DA:161,1653
-DA:162,1653
-DA:163,2646
-DA:164,490
-DA:166,2156
-DA:167,2156
-DA:168,2150
-DA:169,1288
-DA:170,1288
-DA:174,4293
-DA:178,2947
-DA:180,2941
-DA:188,2478
-DA:189,2478
-DA:190,2478
-DA:191,2468
-DA:192,516
-DA:194,10
-DA:200,2194
-DA:201,2194
-DA:202,2194
-DA:205,2194
-DA:207,2194
-DA:208,2121
-DA:209,2121
-DA:210,2121
-DA:213,2194
-DA:217,475
-DA:218,475
-DA:221,475
-DA:222,455
-DA:224,475
-DA:228,4328
-DA:229,3815
-DA:231,513
-DA:235,455
-DA:236,455
-DA:239,351
-DA:240,351
-DA:243,44
-DA:244,44
-DA:248,40
-DA:249,40
-DA:250,40
-DA:253,20
-DA:254,20
-DA:255,20
-DA:263,2
-DA:264,2
-DA:265,2
-DA:269,669590
-DA:270,1
-DA:273,669589
-DA:274,944
-DA:275,224
-DA:276,224
-DA:278,944
-DA:279,224
-DA:280,224
-DA:282,720
-DA:283,947
-DA:284,493
-DA:286,720
-DA:287,227
-DA:288,227
-DA:289,227
-DA:290,20164
-DA:291,227
-DA:292,2
-DA:293,227
-DA:294,226
-DA:295,226
-DA:297,227
-DA:301,669138
-DA:302,669138
-DA:303,33586
-DA:305,635552
-DA:306,669132
-DA:310,669132
-DA:315,669132
-DA:316,63
-DA:318,669132
-DA:322,652869
-DA:323,652866
-DA:327,3449
-DA:328,709
-DA:329,709
-DA:330,709
-DA:331,2
-DA:332,2
-DA:334,2
-DA:335,1
-DA:336,2
-DA:338,709
-DA:343,655942
-DA:344,10
-DA:345,655932
-DA:346,381
-DA:348,655551
-DA:349,655551
-DA:350,652859
-DA:351,652859
-DA:352,652859
-DA:353,652859
-DA:355,2692
-DA:358,655545
-DA:359,2
-DA:360,2
-DA:361,2
-DA:363,655545
-DA:366,655936
-DA:367,3068
-DA:373,655553
-DA:374,655553
-DA:375,655553
-DA:376,8295
-DA:378,6101
-DA:379,6095
-DA:380,6095
-DA:384,1719
-DA:385,1719
-DA:388,475
-DA:389,475
-DA:397,655547
-DA:398,652863
-DA:399,1
-DA:401,652862
-DA:406,718
-DA:407,717
-DA:408,113
-DA:410,604
-DA:411,604
-LF:236
-LH:236
-BRDA:65,0,0,742
-BRDA:65,0,1,22
-BRDA:68,1,0,134
-BRDA:68,1,1,608
-BRDA:79,2,0,742
-BRDA:79,2,1,462
-BRDA:80,3,0,290
-BRDA:80,3,1,452
-BRDA:97,4,0,36
-BRDA:97,4,1,706
-BRDA:99,5,0,34
-BRDA:99,5,1,708
-BRDA:106,6,0,1834
-BRDA:106,6,1,4267
-BRDA:108,7,0,160
-BRDA:108,7,1,4107
-BRDA:110,8,0,40
-BRDA:110,8,1,4067
-BRDA:114,9,0,40
-BRDA:114,9,1,4027
-BRDA:114,10,0,4067
-BRDA:114,10,1,248
-BRDA:116,11,0,40
-BRDA:116,11,1,3987
-BRDA:116,12,0,4027
-BRDA:116,12,1,3819
-BRDA:121,13,0,759
-BRDA:121,13,1,3228
-BRDA:122,14,0,260
-BRDA:122,14,1,499
-BRDA:126,15,0,455
-BRDA:126,15,1,44
-BRDA:134,16,0,3228
-BRDA:134,16,1,3226
-BRDA:135,17,0,1070
-BRDA:135,17,1,2158
-BRDA:137,18,0,382
-BRDA:137,18,1,688
-BRDA:139,19,0,1028
-BRDA:139,19,1,1130
-BRDA:146,20,0,1675
-BRDA:146,20,1,483
-BRDA:160,21,0,1653
-BRDA:160,21,1,2646
-BRDA:163,22,0,490
-BRDA:163,22,1,2156
-BRDA:168,23,0,1288
-BRDA:168,23,1,862
-BRDA:180,24,0,2478
-BRDA:180,24,1,463
-BRDA:189,25,0,2478
-BRDA:189,25,1,825
-BRDA:189,25,2,167
-BRDA:190,26,0,2468
-BRDA:190,26,1,10
-BRDA:191,27,0,516
-BRDA:191,27,1,1952
-BRDA:202,28,0,583
-BRDA:202,28,1,1611
-BRDA:202,29,0,2194
-BRDA:202,29,1,593
-BRDA:207,30,0,2121
-BRDA:207,30,1,73
-BRDA:221,31,0,455
-BRDA:221,31,1,20
-BRDA:228,32,0,3815
-BRDA:228,32,1,513
-BRDA:228,33,0,4328
-BRDA:228,33,1,3916
-BRDA:236,34,0,351
-BRDA:236,34,1,351
-BRDA:236,34,2,44
-BRDA:236,34,3,40
-BRDA:236,34,4,40
-BRDA:236,34,5,20
-BRDA:248,35,0,40
-BRDA:248,35,1,40
-BRDA:253,36,0,20
-BRDA:253,36,1,20
-BRDA:269,37,0,1
-BRDA:269,37,1,669589
-BRDA:273,38,0,944
-BRDA:273,38,1,668645
-BRDA:273,39,0,669589
-BRDA:273,39,1,944
-BRDA:274,40,0,224
-BRDA:274,40,1,720
-BRDA:278,41,0,224
-BRDA:278,41,1,720
-BRDA:282,42,0,1667
-BRDA:282,42,1,1174
-BRDA:283,43,0,493
-BRDA:283,43,1,454
-BRDA:286,44,0,227
-BRDA:286,44,1,493
-BRDA:297,45,0,113
-BRDA:297,45,1,114
-BRDA:302,46,0,33586
-BRDA:302,46,1,635552
-BRDA:310,47,0,190
-BRDA:310,47,1,668942
-BRDA:311,48,0,61606
-BRDA:311,48,1,607336
-BRDA:315,49,0,63
-BRDA:315,49,1,669069
-BRDA:315,50,0,669132
-BRDA:315,50,1,253
-BRDA:322,51,0,652866
-BRDA:322,51,1,3
-BRDA:322,52,0,652869
-BRDA:322,52,1,652866
-BRDA:323,53,0,652864
-BRDA:323,53,1,2
-BRDA:327,54,0,709
-BRDA:327,54,1,2740
-BRDA:327,55,0,3449
-BRDA:327,55,1,1094
-BRDA:327,55,2,710
-BRDA:330,56,0,2
-BRDA:330,56,1,707
-BRDA:330,57,0,709
-BRDA:330,57,1,255
-BRDA:331,58,0,1
-BRDA:331,58,1,1
-BRDA:334,59,0,1
-BRDA:334,59,1,1
-BRDA:343,60,0,10
-BRDA:343,60,1,655932
-BRDA:345,61,0,381
-BRDA:345,61,1,655551
-BRDA:345,62,0,655932
-BRDA:345,62,1,382
-BRDA:349,63,0,652859
-BRDA:349,63,1,2692
-BRDA:358,64,0,655547
-BRDA:358,64,1,652864
-BRDA:358,64,2,2
-BRDA:366,65,0,3068
-BRDA:366,65,1,652868
-BRDA:366,66,0,655936
-BRDA:366,66,1,652872
-BRDA:375,67,0,663842
-BRDA:375,67,1,8295
-BRDA:376,68,0,6101
-BRDA:376,68,1,670
-BRDA:376,68,2,1719
-BRDA:376,68,3,475
-BRDA:397,69,0,652863
-BRDA:397,69,1,2684
-BRDA:398,70,0,1
-BRDA:398,70,1,652862
-BRDA:406,71,0,717
-BRDA:406,71,1,1
-BRDA:407,72,0,113
-BRDA:407,72,1,604
-BRF:155
-BRH:155
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/pax.js
-FN:6,(anonymous_0)
-FN:25,(anonymous_1)
-FN:71,(anonymous_2)
-FN:91,(anonymous_3)
-FN:112,(anonymous_4)
-FN:114,(anonymous_5)
-FN:115,(anonymous_6)
-FN:117,(anonymous_7)
-FN:123,(anonymous_8)
-FNF:9
-FNH:9
-FNDA:435,(anonymous_0)
-FNDA:34,(anonymous_1)
-FNDA:34,(anonymous_2)
-FNDA:510,(anonymous_3)
-FNDA:401,(anonymous_4)
-FNDA:401,(anonymous_5)
-FNDA:1,(anonymous_6)
-FNDA:401,(anonymous_7)
-FNDA:2259,(anonymous_8)
-DA:2,11
-DA:3,11
-DA:7,435
-DA:8,435
-DA:9,435
-DA:10,435
-DA:11,435
-DA:12,435
-DA:13,435
-DA:14,435
-DA:15,435
-DA:16,435
-DA:17,435
-DA:18,435
-DA:19,435
-DA:20,435
-DA:21,435
-DA:22,435
-DA:26,34
-DA:27,34
-DA:28,1
-DA:30,33
-DA:33,33
-DA:34,33
-DA:37,33
-DA:38,16896
-DA:41,33
-DA:61,33
-DA:64,33
-DA:65,8949
-DA:68,33
-DA:72,34
-DA:92,510
-DA:93,204
-DA:94,306
-DA:96,306
-DA:100,306
-DA:104,306
-DA:105,306
-DA:106,30
-DA:107,306
-DA:108,306
-DA:112,401
-DA:114,11
-DA:115,401
-DA:117,11
-DA:118,401
-DA:123,11
-DA:124,2259
-DA:128,2259
-DA:129,5
-DA:131,2254
-DA:132,2254
-DA:133,2254
-DA:134,2254
-DA:135,1
-DA:137,2253
-DA:138,2253
-DA:142,2253
-DA:145,11
-LF:60
-LH:60
-BRDA:7,0,0,435
-BRDA:7,0,1,85
-BRDA:8,1,0,435
-BRDA:8,1,1,435
-BRDA:9,2,0,435
-BRDA:9,2,1,411
-BRDA:10,3,0,435
-BRDA:10,3,1,85
-BRDA:11,4,0,435
-BRDA:11,4,1,369
-BRDA:12,5,0,435
-BRDA:12,5,1,410
-BRDA:13,6,0,435
-BRDA:13,6,1,435
-BRDA:14,7,0,435
-BRDA:14,7,1,368
-BRDA:15,8,0,435
-BRDA:15,8,1,2
-BRDA:16,9,0,435
-BRDA:16,9,1,363
-BRDA:17,10,0,435
-BRDA:17,10,1,371
-BRDA:18,11,0,435
-BRDA:18,11,1,373
-BRDA:19,12,0,435
-BRDA:19,12,1,86
-BRDA:20,13,0,435
-BRDA:20,13,1,86
-BRDA:21,14,0,435
-BRDA:21,14,1,86
-BRDA:22,15,0,435
-BRDA:22,15,1,389
-BRDA:27,16,0,1
-BRDA:27,16,1,33
-BRDA:46,17,0,33
-BRDA:46,17,1,33
-BRDA:47,18,0,33
-BRDA:47,18,1,6
-BRDA:48,19,0,33
-BRDA:48,19,1,6
-BRDA:50,20,0,33
-BRDA:50,20,1,5
-BRDA:51,21,0,1
-BRDA:51,21,1,32
-BRDA:53,22,0,33
-BRDA:53,22,1,7
-BRDA:54,23,0,33
-BRDA:54,23,1,32
-BRDA:57,24,0,33
-BRDA:57,24,1,6
-BRDA:58,25,0,33
-BRDA:58,25,1,6
-BRDA:92,26,0,204
-BRDA:92,26,1,306
-BRDA:92,27,0,510
-BRDA:92,27,1,306
-BRDA:94,28,0,82
-BRDA:94,28,1,224
-BRDA:97,29,0,78
-BRDA:97,29,1,228
-BRDA:97,30,0,306
-BRDA:97,30,1,280
-BRDA:97,30,2,254
-BRDA:105,31,0,30
-BRDA:105,31,1,276
-BRDA:115,32,0,1
-BRDA:115,32,1,400
-BRDA:128,33,0,5
-BRDA:128,33,1,2254
-BRDA:134,34,0,1
-BRDA:134,34,1,2253
-BRDA:138,35,0,685
-BRDA:138,35,1,1568
-BRDA:140,36,0,1084
-BRDA:140,36,1,484
-BRF:75
-BRH:75
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/read-entry.js
-FN:7,(anonymous_0)
-FN:66,(anonymous_1)
-FN:85,(anonymous_2)
-FNF:3
-FNH:3
-FNDA:4004,(anonymous_0)
-FNDA:2222,(anonymous_1)
-FNDA:457,(anonymous_2)
-DA:2,11
-DA:3,11
-DA:5,11
-DA:6,11
-DA:8,4004
-DA:9,4004
-DA:10,4004
-DA:11,4004
-DA:12,4004
-DA:13,4004
-DA:14,4004
-DA:15,4004
-DA:16,4004
-DA:17,4004
-DA:18,4004
-DA:29,3241
-DA:37,760
-DA:38,760
-DA:43,3
-DA:46,4004
-DA:47,4004
-DA:48,4004
-DA:49,3720
-DA:50,4004
-DA:51,4004
-DA:52,4004
-DA:53,4004
-DA:54,4004
-DA:55,4004
-DA:56,4004
-DA:57,4004
-DA:58,4004
-DA:59,4004
-DA:60,4004
-DA:62,4004
-DA:63,4004
-DA:67,2222
-DA:68,2222
-DA:69,2
-DA:71,2220
-DA:72,2220
-DA:73,2220
-DA:74,2220
-DA:75,2220
-DA:76,673
-DA:78,1547
-DA:79,132
-DA:82,1415
-DA:86,457
-DA:89,6384
-DA:91,2657
-LF:51
-LH:51
-BRDA:18,0,0,1502
-BRDA:18,0,1,1502
-BRDA:18,0,2,1565
-BRDA:18,0,3,1710
-BRDA:18,0,4,1712
-BRDA:18,0,5,1714
-BRDA:18,0,6,3239
-BRDA:18,0,7,3241
-BRDA:18,0,8,3241
-BRDA:18,0,9,3241
-BRDA:18,0,10,41
-BRDA:18,0,11,121
-BRDA:18,0,12,121
-BRDA:18,0,13,165
-BRDA:18,0,14,760
-BRDA:18,0,15,760
-BRDA:18,0,16,3
-BRDA:48,1,0,3720
-BRDA:48,1,1,284
-BRDA:62,2,0,412
-BRDA:62,2,1,3592
-BRDA:63,3,0,45
-BRDA:63,3,1,3959
-BRDA:68,4,0,2
-BRDA:68,4,1,2220
-BRDA:75,5,0,673
-BRDA:75,5,1,1547
-BRDA:78,6,0,132
-BRDA:78,6,1,1415
-BRDA:89,7,0,2657
-BRDA:89,7,1,3727
-BRDA:89,8,0,6384
-BRDA:89,8,1,2702
-BRDA:89,8,2,2701
-BRDA:90,9,0,2701
-BRDA:90,9,1,89
-BRF:36
-BRH:36
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/replace.js
-FN:20,(anonymous_0)
-FN:38,(anonymous_1)
-FN:92,(anonymous_2)
-FN:101,(anonymous_3)
-FN:105,(anonymous_4)
-FN:106,(anonymous_5)
-FN:108,(anonymous_6)
-FN:119,(anonymous_7)
-FN:156,(anonymous_8)
-FN:159,(anonymous_9)
-FN:168,(anonymous_10)
-FN:171,(anonymous_11)
-FN:191,(anonymous_12)
-FN:192,(anonymous_13)
-FN:198,(anonymous_14)
-FN:206,(anonymous_15)
-FN:213,(anonymous_16)
-FN:214,(anonymous_17)
-FNF:18
-FNH:18
-FNDA:70,(anonymous_0)
-FNDA:26,(anonymous_1)
-FNDA:18,(anonymous_2)
-FNDA:41,(anonymous_3)
-FNDA:37,(anonymous_4)
-FNDA:37,(anonymous_5)
-FNDA:4,(anonymous_6)
-FNDA:112,(anonymous_7)
-FNDA:41,(anonymous_8)
-FNDA:45,(anonymous_9)
-FNDA:39,(anonymous_10)
-FNDA:37,(anonymous_11)
-FNDA:18,(anonymous_12)
-FNDA:19,(anonymous_13)
-FNDA:3,(anonymous_14)
-FNDA:34,(anonymous_15)
-FNDA:3,(anonymous_16)
-FNDA:1,(anonymous_17)
-DA:4,3
-DA:5,3
-DA:6,3
-DA:7,3
-DA:8,3
-DA:9,3
-DA:10,3
-DA:18,3
-DA:20,3
-DA:21,70
-DA:23,70
-DA:24,1
-DA:26,69
-DA:27,1
-DA:29,68
-DA:30,1
-DA:32,67
-DA:34,67
-DA:38,3
-DA:39,26
-DA:41,26
-DA:45,26
-DA:46,26
-DA:47,26
-DA:49,4
-DA:50,2
-DA:52,2
-DA:55,24
-DA:56,22
-DA:58,22
-DA:59,61
-DA:60,63
-DA:64,61
-DA:65,2
-DA:67,59
-DA:68,2
-DA:71,55
-DA:72,55
-DA:73,8
-DA:74,47
-DA:75,47
-DA:76,2
-DA:79,45
-DA:80,45
-DA:81,28
-DA:83,18
-DA:85,18
-DA:87,26
-DA:88,8
-DA:92,3
-DA:93,18
-DA:97,18
-DA:98,18
-DA:101,3
-DA:102,41
-DA:103,41
-DA:105,41
-DA:106,37
-DA:107,37
-DA:108,4
-DA:110,33
-DA:113,37
-DA:114,37
-DA:115,8
-DA:117,29
-DA:118,29
-DA:119,29
-DA:120,112
-DA:121,2
-DA:122,110
-DA:123,110
-DA:124,6
-DA:129,104
-DA:130,2
-DA:133,102
-DA:134,4
-DA:136,98
-DA:137,98
-DA:138,13
-DA:140,85
-DA:141,85
-DA:142,4
-DA:144,81
-DA:145,81
-DA:146,4
-DA:148,77
-DA:149,46
-DA:150,77
-DA:151,77
-DA:153,29
-DA:156,41
-DA:157,41
-DA:158,41
-DA:159,41
-DA:160,45
-DA:161,4
-DA:162,4
-DA:165,41
-DA:166,2
-DA:168,39
-DA:169,39
-DA:170,2
-DA:171,37
-DA:172,37
-DA:173,4
-DA:174,33
-DA:178,33
-DA:179,33
-DA:180,33
-DA:181,33
-DA:185,41
-DA:188,41
-DA:191,3
-DA:192,18
-DA:193,19
-DA:194,1
-DA:198,3
-DA:201,18
-DA:203,18
-DA:206,3
-DA:207,34
-DA:208,33
-DA:209,33
-DA:210,1
-DA:213,3
-DA:214,1
-DA:216,32
-DA:218,33
-LF:128
-LH:128
-BRDA:23,0,0,1
-BRDA:23,0,1,69
-BRDA:26,1,0,1
-BRDA:26,1,1,68
-BRDA:29,2,0,1
-BRDA:29,2,1,67
-BRDA:29,3,0,68
-BRDA:29,3,1,68
-BRDA:29,3,2,68
-BRDA:34,4,0,26
-BRDA:34,4,1,41
-BRDA:49,5,0,2
-BRDA:49,5,1,2
-BRDA:64,6,0,2
-BRDA:64,6,1,59
-BRDA:64,7,0,61
-BRDA:64,7,1,16
-BRDA:64,7,2,2
-BRDA:67,8,0,2
-BRDA:67,8,1,57
-BRDA:72,9,0,8
-BRDA:72,9,1,47
-BRDA:75,10,0,2
-BRDA:75,10,1,45
-BRDA:80,11,0,28
-BRDA:80,11,1,17
-BRDA:87,12,0,8
-BRDA:87,12,1,18
-BRDA:107,13,0,4
-BRDA:107,13,1,33
-BRDA:114,14,0,8
-BRDA:114,14,1,29
-BRDA:120,15,0,2
-BRDA:120,15,1,110
-BRDA:123,16,0,6
-BRDA:123,16,1,104
-BRDA:123,17,0,110
-BRDA:123,17,1,12
-BRDA:129,18,0,2
-BRDA:129,18,1,102
-BRDA:129,19,0,104
-BRDA:129,19,1,27
-BRDA:129,19,2,2
-BRDA:133,20,0,4
-BRDA:133,20,1,98
-BRDA:137,21,0,13
-BRDA:137,21,1,85
-BRDA:141,22,0,4
-BRDA:141,22,1,81
-BRDA:145,23,0,4
-BRDA:145,23,1,77
-BRDA:148,24,0,46
-BRDA:148,24,1,31
-BRDA:160,25,0,4
-BRDA:160,25,1,41
-BRDA:160,26,0,45
-BRDA:160,26,1,6
-BRDA:160,26,2,4
-BRDA:165,27,0,2
-BRDA:165,27,1,39
-BRDA:169,28,0,2
-BRDA:169,28,1,37
-BRDA:172,29,0,4
-BRDA:172,29,1,33
-BRDA:188,30,0,24
-BRDA:188,30,1,17
-BRDA:193,31,0,1
-BRDA:193,31,1,18
-BRDA:209,32,0,1
-BRDA:209,32,1,32
-BRF:70
-BRH:70
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/types.js
-FN:44,(anonymous_0)
-FNF:1
-FNH:1
-FNDA:294,(anonymous_0)
-DA:3,14
-DA:44,294
-LF:2
-LH:2
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/unpack.js
-FN:37,(anonymous_0)
-FN:43,(anonymous_1)
-FN:47,(anonymous_2)
-FN:117,(anonymous_3)
-FN:120,(anonymous_4)
-FN:129,(anonymous_5)
-FN:168,(anonymous_6)
-FN:194,(anonymous_7)
-FN:207,(anonymous_8)
-FN:222,(anonymous_9)
-FN:233,(anonymous_10)
-FN:237,(anonymous_11)
-FN:241,(anonymous_12)
-FN:247,(anonymous_13)
-FN:250,(anonymous_14)
-FN:257,(anonymous_15)
-FN:260,(anonymous_16)
-FN:277,(anonymous_17)
-FN:279,(anonymous_18)
-FN:284,(anonymous_19)
-FN:305,(anonymous_20)
-FN:310,(anonymous_21)
-FN:314,(anonymous_22)
-FN:318,(anonymous_23)
-FN:322,(anonymous_24)
-FN:327,(anonymous_25)
-FN:333,(anonymous_26)
-FN:335,(anonymous_27)
-FN:338,(anonymous_28)
-FN:348,(anonymous_29)
-FN:350,(anonymous_30)
-FN:352,(anonymous_31)
-FN:357,(anonymous_32)
-FN:379,(anonymous_33)
-FN:381,(anonymous_34)
-FN:391,(anonymous_35)
-FN:395,(anonymous_36)
-FN:425,(anonymous_37)
-FN:428,(anonymous_38)
-FN:441,(anonymous_39)
-FN:449,(anonymous_40)
-FN:465,(anonymous_41)
-FN:483,(anonymous_42)
-FN:502,(anonymous_43)
-FNF:44
-FNH:44
-FNDA:60,(anonymous_0)
-FNDA:134,(anonymous_1)
-FNDA:109,(anonymous_2)
-FNDA:571,(anonymous_3)
-FNDA:473,(anonymous_4)
-FNDA:571,(anonymous_5)
-FNDA:571,(anonymous_6)
-FNDA:39,(anonymous_7)
-FNDA:451,(anonymous_8)
-FNDA:473,(anonymous_9)
-FNDA:30,(anonymous_10)
-FNDA:30,(anonymous_11)
-FNDA:221,(anonymous_12)
-FNDA:2,(anonymous_13)
-FNDA:421,(anonymous_14)
-FNDA:219,(anonymous_15)
-FNDA:219,(anonymous_16)
-FNDA:97,(anonymous_17)
-FNDA:97,(anonymous_18)
-FNDA:171,(anonymous_19)
-FNDA:6,(anonymous_20)
-FNDA:21,(anonymous_21)
-FNDA:19,(anonymous_22)
-FNDA:354,(anonymous_23)
-FNDA:364,(anonymous_24)
-FNDA:4,(anonymous_25)
-FNDA:354,(anonymous_26)
-FNDA:354,(anonymous_27)
-FNDA:342,(anonymous_28)
-FNDA:2,(anonymous_29)
-FNDA:5,(anonymous_30)
-FNDA:6,(anonymous_31)
-FNDA:528,(anonymous_32)
-FNDA:21,(anonymous_33)
-FNDA:21,(anonymous_34)
-FNDA:59,(anonymous_35)
-FNDA:200,(anonymous_36)
-FNDA:93,(anonymous_37)
-FNDA:6,(anonymous_38)
-FNDA:86,(anonymous_39)
-FNDA:86,(anonymous_40)
-FNDA:76,(anonymous_41)
-FNDA:276,(anonymous_42)
-FNDA:19,(anonymous_43)
-DA:3,3
-DA:4,3
-DA:5,3
-DA:6,3
-DA:7,3
-DA:8,3
-DA:9,3
-DA:10,3
-DA:11,3
-DA:13,3
-DA:14,3
-DA:15,3
-DA:16,3
-DA:17,3
-DA:18,3
-DA:19,3
-DA:20,3
-DA:21,3
-DA:22,3
-DA:23,3
-DA:24,3
-DA:25,3
-DA:26,3
-DA:27,3
-DA:28,3
-DA:29,3
-DA:30,3
-DA:31,3
-DA:32,3
-DA:33,3
-DA:34,3
-DA:37,3
-DA:38,60
-DA:44,134
-DA:45,4
-DA:47,134
-DA:48,109
-DA:49,109
-DA:52,134
-DA:54,134
-DA:55,134
-DA:57,134
-DA:58,134
-DA:60,134
-DA:62,134
-DA:64,9
-DA:65,2
-DA:66,7
-DA:67,1
-DA:69,6
-DA:70,6
-DA:71,6
-DA:73,125
-DA:74,125
-DA:75,125
-DA:79,131
-DA:80,119
-DA:82,12
-DA:84,131
-DA:86,131
-DA:90,131
-DA:93,131
-DA:96,131
-DA:99,131
-DA:104,131
-DA:108,131
-DA:110,131
-DA:111,131
-DA:112,131
-DA:113,131
-DA:115,131
-DA:116,131
-DA:117,571
-DA:121,473
-DA:122,98
-DA:123,98
-DA:124,98
-DA:125,98
-DA:130,571
-DA:131,144
-DA:132,144
-DA:133,9
-DA:134,135
-DA:137,562
-DA:138,545
-DA:139,545
-DA:140,2
-DA:141,2
-DA:146,543
-DA:147,2
-DA:148,2
-DA:149,2
-DA:154,560
-DA:155,3
-DA:156,3
-DA:160,560
-DA:161,2
-DA:163,558
-DA:165,560
-DA:169,571
-DA:170,11
-DA:172,560
-DA:174,560
-DA:177,179
-DA:178,140
-DA:185,554
-DA:190,6
-DA:198,39
-DA:199,12
-DA:201,27
-DA:202,27
-DA:203,27
-DA:208,451
-DA:225,473
-DA:234,30
-DA:238,30
-DA:242,221
-DA:243,221
-DA:247,221
-DA:249,221
-DA:250,221
-DA:251,421
-DA:252,1
-DA:253,1
-DA:256,421
-DA:257,219
-DA:260,221
-DA:261,219
-DA:262,192
-DA:263,192
-DA:266,219
-DA:267,10
-DA:268,10
-DA:271,219
-DA:274,221
-DA:278,97
-DA:279,97
-DA:280,97
-DA:281,3
-DA:283,94
-DA:284,94
-DA:285,171
-DA:286,94
-DA:287,94
-DA:291,94
-DA:292,73
-DA:293,73
-DA:296,94
-DA:297,4
-DA:298,4
-DA:301,94
-DA:306,6
-DA:307,6
-DA:311,21
-DA:315,19
-DA:319,354
-DA:323,364
-DA:324,364
-DA:328,4
-DA:329,4
-DA:334,354
-DA:335,354
-DA:336,354
-DA:337,12
-DA:338,342
-DA:339,342
-DA:340,2
-DA:341,340
-DA:342,318
-DA:343,22
-DA:344,16
-DA:345,11
-DA:346,9
-DA:348,2
-DA:350,5
-DA:352,6
-DA:358,528
-DA:359,1
-DA:361,527
-DA:365,314
-DA:368,19
-DA:371,21
-DA:375,173
-DA:381,21
-DA:382,21
-DA:383,1
-DA:384,20
-DA:385,20
-DA:392,59
-DA:396,200
-DA:397,200
-DA:398,9
-DA:399,191
-DA:400,191
-DA:401,17
-DA:402,2
-DA:403,15
-DA:404,2
-DA:406,13
-DA:407,13
-DA:408,6
-DA:409,3
-DA:410,2
-DA:412,3
-DA:414,7
-DA:415,12
-DA:417,1
-DA:421,174
-DA:426,93
-DA:428,93
-DA:429,6
-DA:430,6
-DA:435,93
-DA:436,93
-DA:438,1
-DA:441,92
-DA:442,86
-DA:443,86
-DA:445,1
-DA:449,92
-DA:450,86
-DA:451,86
-DA:452,58
-DA:454,85
-DA:455,12
-DA:457,82
-DA:459,4
-DA:466,76
-DA:467,76
-DA:468,76
-DA:469,1
-DA:470,75
-DA:471,56
-DA:472,56
-DA:475,75
-DA:476,4
-DA:477,4
-DA:480,75
-DA:484,276
-DA:485,276
-DA:498,4
-DA:503,19
-DA:504,19
-DA:505,17
-DA:507,2
-DA:512,3
-DA:513,3
-LF:247
-LH:247
-BRDA:38,0,0,24
-BRDA:38,0,1,36
-BRDA:39,1,0,26
-BRDA:39,1,1,10
-BRDA:44,2,0,4
-BRDA:44,2,1,130
-BRDA:60,3,0,134
-BRDA:60,3,1,134
-BRDA:62,4,0,9
-BRDA:62,4,1,125
-BRDA:62,5,0,134
-BRDA:62,5,1,126
-BRDA:64,6,0,2
-BRDA:64,6,1,7
-BRDA:64,7,0,9
-BRDA:64,7,1,8
-BRDA:66,8,0,1
-BRDA:66,8,1,6
-BRDA:79,9,0,119
-BRDA:79,9,1,12
-BRDA:79,10,0,131
-BRDA:79,10,1,125
-BRDA:80,11,0,119
-BRDA:80,11,1,119
-BRDA:84,12,0,11
-BRDA:84,12,1,120
-BRDA:84,13,0,131
-BRDA:84,13,1,126
-BRDA:84,13,2,11
-BRDA:86,14,0,11
-BRDA:86,14,1,120
-BRDA:86,15,0,131
-BRDA:86,15,1,126
-BRDA:86,15,2,11
-BRDA:90,16,0,131
-BRDA:90,16,1,128
-BRDA:110,17,0,131
-BRDA:110,17,1,11
-BRDA:111,18,0,131
-BRDA:111,18,1,129
-BRDA:113,19,0,1
-BRDA:113,19,1,130
-BRDA:115,20,0,131
-BRDA:115,20,1,131
-BRDA:116,21,0,131
-BRDA:116,21,1,127
-BRDA:121,22,0,98
-BRDA:121,22,1,375
-BRDA:121,23,0,473
-BRDA:121,23,1,178
-BRDA:130,24,0,144
-BRDA:130,24,1,427
-BRDA:132,25,0,9
-BRDA:132,25,1,135
-BRDA:137,26,0,545
-BRDA:137,26,1,17
-BRDA:139,27,0,2
-BRDA:139,27,1,543
-BRDA:146,28,0,2
-BRDA:146,28,1,541
-BRDA:154,29,0,3
-BRDA:154,29,1,557
-BRDA:156,30,0,2
-BRDA:156,30,1,1
-BRDA:160,31,0,2
-BRDA:160,31,1,558
-BRDA:169,32,0,11
-BRDA:169,32,1,560
-BRDA:174,33,0,179
-BRDA:174,33,1,179
-BRDA:174,33,2,514
-BRDA:174,33,3,514
-BRDA:174,33,4,514
-BRDA:174,33,5,533
-BRDA:174,33,6,554
-BRDA:174,33,7,2
-BRDA:174,33,8,4
-BRDA:174,33,9,6
-BRDA:177,34,0,140
-BRDA:177,34,1,39
-BRDA:198,35,0,12
-BRDA:198,35,1,27
-BRDA:225,36,0,473
-BRDA:225,36,1,34
-BRDA:225,36,2,31
-BRDA:225,36,3,23
-BRDA:225,36,4,15
-BRDA:225,36,5,455
-BRDA:225,36,6,12
-BRDA:225,36,7,447
-BRDA:225,36,8,4
-BRDA:242,37,0,221
-BRDA:242,37,1,30
-BRDA:251,38,0,1
-BRDA:251,38,1,420
-BRDA:256,39,0,219
-BRDA:256,39,1,202
-BRDA:261,40,0,192
-BRDA:261,40,1,27
-BRDA:261,41,0,219
-BRDA:261,41,1,193
-BRDA:263,42,0,192
-BRDA:263,42,1,156
-BRDA:266,43,0,10
-BRDA:266,43,1,209
-BRDA:278,44,0,97
-BRDA:278,44,1,20
-BRDA:280,45,0,3
-BRDA:280,45,1,94
-BRDA:285,46,0,94
-BRDA:285,46,1,77
-BRDA:291,47,0,73
-BRDA:291,47,1,21
-BRDA:291,48,0,94
-BRDA:291,48,1,74
-BRDA:293,49,0,73
-BRDA:293,49,1,71
-BRDA:296,50,0,4
-BRDA:296,50,1,90
-BRDA:336,51,0,12
-BRDA:336,51,1,342
-BRDA:339,52,0,2
-BRDA:339,52,1,340
-BRDA:339,53,0,342
-BRDA:339,53,1,27
-BRDA:339,53,2,26
-BRDA:339,53,3,1
-BRDA:341,54,0,318
-BRDA:341,54,1,22
-BRDA:341,55,0,340
-BRDA:341,55,1,25
-BRDA:341,55,2,6
-BRDA:341,55,3,5
-BRDA:343,56,0,16
-BRDA:343,56,1,6
-BRDA:344,57,0,11
-BRDA:344,57,1,5
-BRDA:345,58,0,9
-BRDA:345,58,1,2
-BRDA:345,59,0,11
-BRDA:345,59,1,8
-BRDA:358,60,0,1
-BRDA:358,60,1,527
-BRDA:361,61,0,314
-BRDA:361,61,1,314
-BRDA:361,61,2,314
-BRDA:361,61,3,19
-BRDA:361,61,4,21
-BRDA:361,61,5,173
-BRDA:361,61,6,173
-BRDA:382,62,0,1
-BRDA:382,62,1,20
-BRDA:397,63,0,9
-BRDA:397,63,1,191
-BRDA:401,64,0,2
-BRDA:401,64,1,15
-BRDA:401,65,0,17
-BRDA:401,65,1,16
-BRDA:401,65,2,1
-BRDA:403,66,0,2
-BRDA:403,66,1,13
-BRDA:403,67,0,15
-BRDA:403,67,1,4
-BRDA:403,67,2,3
-BRDA:407,68,0,6
-BRDA:407,68,1,7
-BRDA:408,69,0,3
-BRDA:408,69,1,3
-BRDA:409,70,0,2
-BRDA:409,70,1,1
-BRDA:409,71,0,3
-BRDA:409,71,1,2
-BRDA:426,72,0,93
-BRDA:426,72,1,30
-BRDA:451,73,0,58
-BRDA:451,73,1,28
-BRDA:451,74,0,86
-BRDA:451,74,1,59
-BRDA:452,75,0,58
-BRDA:452,75,1,31
-BRDA:454,76,0,12
-BRDA:454,76,1,73
-BRDA:466,77,0,76
-BRDA:466,77,1,19
-BRDA:468,78,0,1
-BRDA:468,78,1,75
-BRDA:470,79,0,56
-BRDA:470,79,1,19
-BRDA:470,80,0,75
-BRDA:470,80,1,57
-BRDA:472,81,0,56
-BRDA:472,81,1,52
-BRDA:475,82,0,4
-BRDA:475,82,1,71
-BRF:194
-BRH:194
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/update.js
-FN:9,(anonymous_0)
-FN:27,(anonymous_1)
-FN:33,(anonymous_2)
-FN:35,(anonymous_3)
-FNF:4
-FNH:4
-FNDA:36,(anonymous_0)
-FNDA:33,(anonymous_1)
-FNDA:2,(anonymous_2)
-FNDA:24,(anonymous_3)
-DA:5,2
-DA:6,2
-DA:9,2
-DA:10,36
-DA:12,36
-DA:13,1
-DA:15,35
-DA:16,1
-DA:18,34
-DA:19,1
-DA:21,33
-DA:23,33
-DA:24,33
-DA:27,2
-DA:28,33
-DA:30,33
-DA:31,32
-DA:33,33
-DA:34,2
-DA:35,24
-LF:20
-LH:20
-BRDA:12,0,0,1
-BRDA:12,0,1,35
-BRDA:15,1,0,1
-BRDA:15,1,1,34
-BRDA:18,2,0,1
-BRDA:18,2,1,33
-BRDA:18,3,0,34
-BRDA:18,3,1,34
-BRDA:18,3,2,34
-BRDA:30,4,0,32
-BRDA:30,4,1,1
-BRDA:33,5,0,1
-BRDA:33,5,1,32
-BRDA:34,6,0,2
-BRDA:34,6,1,1
-BRF:15
-BRH:15
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/warn-mixin.js
-FN:2,(anonymous_0)
-FN:3,(anonymous_1)
-FNF:2
-FNH:2
-FNDA:27,(anonymous_0)
-FNDA:333,(anonymous_1)
-DA:2,27
-DA:4,333
-DA:5,184
-DA:6,149
-DA:7,2
-DA:9,147
-DA:10,147
-DA:11,147
-LF:8
-LH:8
-BRDA:4,0,0,184
-BRDA:4,0,1,149
-BRDA:6,1,0,2
-BRDA:6,1,1,147
-BRF:4
-BRH:4
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/winchars.js
-FN:14,(anonymous_0)
-FN:17,(anonymous_1)
-FN:18,(anonymous_2)
-FN:21,(anonymous_3)
-FN:21,(anonymous_4)
-FN:22,(anonymous_5)
-FN:22,(anonymous_6)
-FNF:7
-FNH:7
-FNDA:45,(anonymous_0)
-FNDA:45,(anonymous_1)
-FNDA:45,(anonymous_2)
-FNDA:6,(anonymous_3)
-FNDA:30,(anonymous_4)
-FNDA:4,(anonymous_5)
-FNDA:20,(anonymous_6)
-DA:6,9
-DA:14,9
-DA:15,45
-DA:17,45
-DA:18,45
-DA:20,9
-DA:21,30
-DA:22,20
-LF:8
-LH:8
-BRF:0
-BRH:0
-end_of_record
-TN:
-SF:/Users/isaacs/dev/js/tar/lib/write-entry.js
-FN:29,(anonymous_0)
-FN:77,(anonymous_1)
-FN:78,(anonymous_2)
-FN:85,(anonymous_3)
-FN:95,(anonymous_4)
-FN:105,(anonymous_5)
-FN:144,(anonymous_6)
-FN:152,(anonymous_7)
-FN:153,(anonymous_8)
-FN:160,(anonymous_9)
-FN:166,(anonymous_10)
-FN:174,(anonymous_11)
-FN:192,(anonymous_12)
-FN:193,(anonymous_13)
-FN:200,(anonymous_14)
-FN:207,(anonymous_15)
-FN:208,(anonymous_16)
-FN:210,(anonymous_17)
-FN:215,(anonymous_18)
-FN:219,(anonymous_19)
-FN:250,(anonymous_20)
-FN:264,(anonymous_21)
-FN:268,(anonymous_22)
-FN:272,(anonymous_23)
-FN:276,(anonymous_24)
-FN:280,(anonymous_25)
-FN:292,(anonymous_26)
-FN:298,(anonymous_27)
-FN:377,(anonymous_28)
-FN:385,(anonymous_29)
-FN:395,(anonymous_30)
-FNF:31
-FNH:31
-FNDA:6570,(anonymous_0)
-FNDA:34,(anonymous_1)
-FNDA:34,(anonymous_2)
-FNDA:6566,(anonymous_3)
-FNDA:6566,(anonymous_4)
-FNDA:6563,(anonymous_5)
-FNDA:867,(anonymous_6)
-FNDA:32,(anonymous_7)
-FNDA:32,(anonymous_8)
-FNDA:32,(anonymous_9)
-FNDA:1,(anonymous_10)
-FNDA:5664,(anonymous_11)
-FNDA:5568,(anonymous_12)
-FNDA:5568,(anonymous_13)
-FNDA:5617,(anonymous_14)
-FNDA:7336,(anonymous_15)
-FNDA:7336,(anonymous_16)
-FNDA:1,(anonymous_17)
-FNDA:5566,(anonymous_18)
-FNDA:7393,(anonymous_19)
-FNDA:5565,(anonymous_20)
-FNDA:99,(anonymous_21)
-FNDA:20,(anonymous_22)
-FNDA:2,(anonymous_23)
-FNDA:53,(anonymous_24)
-FNDA:59,(anonymous_25)
-FNDA:51,(anonymous_26)
-FNDA:33,(anonymous_27)
-FNDA:52,(anonymous_28)
-FNDA:29,(anonymous_29)
-FNDA:6566,(anonymous_30)
-DA:2,6
-DA:3,6
-DA:4,6
-DA:5,6
-DA:6,6
-DA:7,6
-DA:9,6
-DA:10,6
-DA:11,6
-DA:12,6
-DA:13,6
-DA:14,6
-DA:15,6
-DA:16,6
-DA:17,6
-DA:18,6
-DA:19,6
-DA:20,6
-DA:21,6
-DA:22,6
-DA:23,6
-DA:24,6
-DA:25,6
-DA:26,6
-DA:28,6
-DA:30,6570
-DA:31,6570
-DA:32,6570
-DA:33,1
-DA:34,6569
-DA:36,6569
-DA:38,6569
-DA:39,6569
-DA:40,6569
-DA:41,6569
-DA:42,6569
-DA:43,6569
-DA:44,6569
-DA:45,6569
-DA:46,6569
-DA:47,6569
-DA:49,6569
-DA:50,6515
-DA:52,6569
-DA:55,4
-DA:56,4
-DA:57,2
-DA:60,6567
-DA:61,6567
-DA:62,2
-DA:63,2
-DA:66,6567
-DA:68,6567
-DA:69,1
-DA:71,6567
-DA:72,6513
-DA:74,54
-DA:78,34
-DA:79,34
-DA:80,1
-DA:81,33
-DA:86,6566
-DA:87,6566
-DA:88,6566
-DA:89,902
-DA:90,6566
-DA:91,6566
-DA:92,6566
-DA:96,6566
-DA:97,5664
-DA:98,867
-DA:99,34
-DA:101,1
-DA:106,6563
-DA:107,4
-DA:109,6563
-DA:126,6563
-DA:127,17
-DA:141,6563
-DA:145,867
-DA:146,859
-DA:147,867
-DA:148,867
-DA:149,867
-DA:153,32
-DA:154,32
-DA:155,1
-DA:156,31
-DA:161,32
-DA:162,32
-DA:163,32
-DA:167,1
-DA:168,1
-DA:169,1
-DA:170,1
-DA:171,1
-DA:175,5664
-DA:176,7
-DA:177,7
-DA:178,2
-DA:179,2
-DA:180,1
-DA:182,6
-DA:185,5663
-DA:186,5663
-DA:187,42
-DA:189,5621
-DA:193,5568
-DA:194,5568
-DA:195,2
-DA:196,5566
-DA:201,5617
-DA:202,5617
-DA:203,5617
-DA:204,5617
-DA:208,7336
-DA:209,7336
-DA:210,1
-DA:211,7335
-DA:216,5566
-DA:220,7393
-DA:221,2
-DA:222,2
-DA:223,2
-DA:224,2
-DA:225,2
-DA:229,7392
-DA:230,5614
-DA:231,1700449
-DA:232,1700449
-DA:233,1700449
-DA:237,7392
-DA:239,7392
-DA:240,7392
-DA:241,7392
-DA:242,7392
-DA:244,7392
-DA:246,7392
-DA:247,5614
-DA:248,2
-DA:249,5614
-DA:250,5614
-DA:251,5614
-DA:254,1778
-DA:255,1754
-DA:256,1754
-DA:258,1778
-DA:259,1778
-DA:265,99
-DA:269,20
-DA:273,2
-DA:277,53
-DA:281,59
-DA:282,59
-DA:283,59
-DA:284,58
-DA:285,57
-DA:287,59
-DA:288,2
-DA:293,51
-DA:297,6
-DA:299,33
-DA:300,33
-DA:301,33
-DA:302,33
-DA:303,33
-DA:304,33
-DA:305,33
-DA:307,33
-DA:308,33
-DA:309,33
-DA:310,0
-DA:312,33
-DA:313,33
-DA:314,33
-DA:315,26
-DA:316,33
-DA:317,33
-DA:318,33
-DA:319,33
-DA:320,33
-DA:321,33
-DA:322,33
-DA:323,33
-DA:324,33
-DA:326,33
-DA:327,27
-DA:329,33
-DA:330,2
-DA:331,2
-DA:335,1
-DA:338,32
-DA:339,32
-DA:341,32
-DA:357,32
-DA:358,14
-DA:373,32
-DA:374,32
-DA:378,52
-DA:379,52
-DA:380,1
-DA:381,51
-DA:382,51
-DA:386,29
-DA:387,22
-DA:388,29
-DA:392,6
-DA:393,6
-DA:395,6
-DA:396,6566
-DA:401,6
-LF:211
-LH:210
-BRDA:30,0,0,6570
-BRDA:30,0,1,2
-BRDA:32,1,0,1
-BRDA:32,1,1,6569
-BRDA:38,2,0,6569
-BRDA:38,2,1,6569
-BRDA:39,3,0,6569
-BRDA:39,3,1,37
-BRDA:40,4,0,6569
-BRDA:40,4,1,6563
-BRDA:41,5,0,6569
-BRDA:41,5,1,53
-BRDA:42,6,0,6569
-BRDA:42,6,1,55
-BRDA:44,7,0,6569
-BRDA:44,7,1,4
-BRDA:49,8,0,6515
-BRDA:49,8,1,54
-BRDA:52,9,0,4
-BRDA:52,9,1,6565
-BRDA:52,10,0,6569
-BRDA:52,10,1,6564
-BRDA:60,11,0,6567
-BRDA:60,11,1,6565
-BRDA:61,12,0,2
-BRDA:61,12,1,6565
-BRDA:66,13,0,6567
-BRDA:66,13,1,54
-BRDA:68,14,0,1
-BRDA:68,14,1,6566
-BRDA:71,15,0,6513
-BRDA:71,15,1,54
-BRDA:79,16,0,1
-BRDA:79,16,1,33
-BRDA:88,17,0,902
-BRDA:88,17,1,5664
-BRDA:96,18,0,5664
-BRDA:96,18,1,867
-BRDA:96,18,2,34
-BRDA:96,18,3,1
-BRDA:106,19,0,4
-BRDA:106,19,1,6559
-BRDA:106,20,0,6563
-BRDA:106,20,1,867
-BRDA:115,21,0,10
-BRDA:115,21,1,6553
-BRDA:116,22,0,10
-BRDA:116,22,1,6553
-BRDA:118,23,0,6
-BRDA:118,23,1,6557
-BRDA:120,24,0,10
-BRDA:120,24,1,6553
-BRDA:121,25,0,6552
-BRDA:121,25,1,1
-BRDA:122,26,0,10
-BRDA:122,26,1,6553
-BRDA:123,27,0,10
-BRDA:123,27,1,6553
-BRDA:126,28,0,17
-BRDA:126,28,1,6546
-BRDA:126,29,0,6563
-BRDA:126,29,1,18
-BRDA:128,30,0,4
-BRDA:128,30,1,13
-BRDA:129,31,0,4
-BRDA:129,31,1,13
-BRDA:130,32,0,4
-BRDA:130,32,1,13
-BRDA:131,33,0,2
-BRDA:131,33,1,15
-BRDA:135,34,0,4
-BRDA:135,34,1,13
-BRDA:136,35,0,4
-BRDA:136,35,1,13
-BRDA:137,36,0,4
-BRDA:137,36,1,13
-BRDA:138,37,0,4
-BRDA:138,37,1,13
-BRDA:139,38,0,4
-BRDA:139,38,1,13
-BRDA:145,39,0,859
-BRDA:145,39,1,8
-BRDA:154,40,0,1
-BRDA:154,40,1,31
-BRDA:175,41,0,7
-BRDA:175,41,1,5657
-BRDA:177,42,0,2
-BRDA:177,42,1,5
-BRDA:179,43,0,1
-BRDA:179,43,1,1
-BRDA:186,44,0,42
-BRDA:186,44,1,5621
-BRDA:194,45,0,2
-BRDA:194,45,1,5566
-BRDA:209,46,0,1
-BRDA:209,46,1,7335
-BRDA:220,47,0,2
-BRDA:220,47,1,7391
-BRDA:220,48,0,7393
-BRDA:220,48,1,2
-BRDA:229,49,0,5614
-BRDA:229,49,1,1778
-BRDA:230,50,0,1706063
-BRDA:230,50,1,1700456
-BRDA:237,51,0,7338
-BRDA:237,51,1,54
-BRDA:237,52,0,7392
-BRDA:237,52,1,7369
-BRDA:246,53,0,5614
-BRDA:246,53,1,1778
-BRDA:247,54,0,2
-BRDA:247,54,1,5612
-BRDA:254,55,0,1754
-BRDA:254,55,1,24
-BRDA:287,56,0,2
-BRDA:287,56,1,57
-BRDA:299,57,0,33
-BRDA:299,57,1,4
-BRDA:309,58,0,0
-BRDA:309,58,1,33
-BRDA:309,59,0,33
-BRDA:309,59,1,2
-BRDA:314,60,0,26
-BRDA:314,60,1,7
-BRDA:316,61,0,1
-BRDA:316,61,1,32
-BRDA:317,62,0,1
-BRDA:317,62,1,32
-BRDA:318,63,0,1
-BRDA:318,63,1,32
-BRDA:319,64,0,1
-BRDA:319,64,1,32
-BRDA:321,65,0,0
-BRDA:321,65,1,33
-BRDA:322,66,0,1
-BRDA:322,66,1,32
-BRDA:323,67,0,1
-BRDA:323,67,1,32
-BRDA:326,68,0,27
-BRDA:326,68,1,6
-BRDA:329,69,0,2
-BRDA:329,69,1,31
-BRDA:329,70,0,33
-BRDA:329,70,1,3
-BRDA:347,71,0,1
-BRDA:347,71,1,31
-BRDA:348,72,0,1
-BRDA:348,72,1,31
-BRDA:350,73,0,0
-BRDA:350,73,1,32
-BRDA:352,74,0,1
-BRDA:352,74,1,31
-BRDA:353,75,0,1
-BRDA:353,75,1,31
-BRDA:354,76,0,1
-BRDA:354,76,1,31
-BRDA:357,77,0,14
-BRDA:357,77,1,18
-BRDA:357,78,0,32
-BRDA:357,78,1,14
-BRDA:359,79,0,1
-BRDA:359,79,1,13
-BRDA:360,80,0,1
-BRDA:360,80,1,13
-BRDA:361,81,0,1
-BRDA:361,81,1,13
-BRDA:362,82,0,0
-BRDA:362,82,1,14
-BRDA:366,83,0,1
-BRDA:366,83,1,13
-BRDA:367,84,0,1
-BRDA:367,84,1,13
-BRDA:368,85,0,1
-BRDA:368,85,1,13
-BRDA:369,86,0,1
-BRDA:369,86,1,13
-BRDA:370,87,0,1
-BRDA:370,87,1,13
-BRDA:379,88,0,1
-BRDA:379,88,1,51
-BRDA:386,89,0,22
-BRDA:386,89,1,7
-BRDA:396,90,0,5664
-BRDA:396,90,1,902
-BRDA:397,91,0,867
-BRDA:397,91,1,35
-BRDA:398,92,0,34
-BRDA:398,92,1,1
-BRF:188
-BRH:184
-end_of_record
diff --git a/node_modules/node-gyp/node_modules/tar/examples/extracter.js b/node_modules/node-gyp/node_modules/tar/examples/extracter.js
deleted file mode 100644
index f6253a7..0000000
--- a/node_modules/node-gyp/node_modules/tar/examples/extracter.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var tar = require("../tar.js")
- , fs = require("fs")
-
-
-function onError(err) {
- console.error('An error occurred:', err)
-}
-
-function onEnd() {
- console.log('Extracted!')
-}
-
-var extractor = tar.Extract({path: __dirname + "/extract"})
- .on('error', onError)
- .on('end', onEnd);
-
-fs.createReadStream(__dirname + "/../test/fixtures/c.tar")
- .on('error', onError)
- .pipe(extractor);
diff --git a/node_modules/node-gyp/node_modules/tar/examples/packer.js b/node_modules/node-gyp/node_modules/tar/examples/packer.js
deleted file mode 100644
index 039969c..0000000
--- a/node_modules/node-gyp/node_modules/tar/examples/packer.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var tar = require("../tar.js")
- , fstream = require("fstream")
- , fs = require("fs")
-
-var dirDest = fs.createWriteStream('dir.tar')
-
-
-function onError(err) {
- console.error('An error occurred:', err)
-}
-
-function onEnd() {
- console.log('Packed!')
-}
-
-var packer = tar.Pack({ noProprietary: true })
- .on('error', onError)
- .on('end', onEnd);
-
-// This must be a "directory"
-fstream.Reader({ path: __dirname, type: "Directory" })
- .on('error', onError)
- .pipe(packer)
- .pipe(dirDest)
diff --git a/node_modules/node-gyp/node_modules/tar/examples/reader.js b/node_modules/node-gyp/node_modules/tar/examples/reader.js
deleted file mode 100644
index 39f3f08..0000000
--- a/node_modules/node-gyp/node_modules/tar/examples/reader.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var tar = require("../tar.js")
- , fs = require("fs")
-
-fs.createReadStream(__dirname + "/../test/fixtures/c.tar")
- .pipe(tar.Parse())
- .on("extendedHeader", function (e) {
- console.error("extended pax header", e.props)
- e.on("end", function () {
- console.error("extended pax fields:", e.fields)
- })
- })
- .on("ignoredEntry", function (e) {
- console.error("ignoredEntry?!?", e.props)
- })
- .on("longLinkpath", function (e) {
- console.error("longLinkpath entry", e.props)
- e.on("end", function () {
- console.error("value=%j", e.body.toString())
- })
- })
- .on("longPath", function (e) {
- console.error("longPath entry", e.props)
- e.on("end", function () {
- console.error("value=%j", e.body.toString())
- })
- })
- .on("entry", function (e) {
- console.error("entry", e.props)
- e.on("data", function (c) {
- console.error(" >>>" + c.toString().replace(/\n/g, "\\n"))
- })
- e.on("end", function () {
- console.error(" <<<EOF")
- })
- })
-
diff --git a/node_modules/node-gyp/node_modules/tar/lib/buffer-entry.js b/node_modules/node-gyp/node_modules/tar/lib/buffer-entry.js
deleted file mode 100644
index 6c1da23..0000000
--- a/node_modules/node-gyp/node_modules/tar/lib/buffer-entry.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// just like the Entry class, but it buffers the contents
-//
-// XXX It would be good to set a maximum BufferEntry filesize,
-// since it eats up memory. In normal operation,
-// these are only for long filenames or link names, which are
-// rarely very big.
-
-module.exports = BufferEntry
-
-var inherits = require("inherits")
- , Entry = require("./entry.js")
-
-function BufferEntry () {
- Entry.apply(this, arguments)
- this._buffer = new Buffer(this.props.size)
- this._offset = 0
- this.body = ""
- this.on("end", function () {
- this.body = this._buffer.toString().slice(0, -1)
- })
-}
-
-inherits(BufferEntry, Entry)
-
-// collect the bytes as they come in.
-BufferEntry.prototype.write = function (c) {
- c.copy(this._buffer, this._offset)
- this._offset += c.length
- Entry.prototype.write.call(this, c)
-}
diff --git a/node_modules/node-gyp/node_modules/tar/lib/entry-writer.js b/node_modules/node-gyp/node_modules/tar/lib/entry-writer.js
deleted file mode 100644
index 8e09042..0000000
--- a/node_modules/node-gyp/node_modules/tar/lib/entry-writer.js
+++ /dev/null
@@ -1,169 +0,0 @@
-module.exports = EntryWriter
-
-var tar = require("../tar.js")
- , TarHeader = require("./header.js")
- , Entry = require("./entry.js")
- , inherits = require("inherits")
- , BlockStream = require("block-stream")
- , ExtendedHeaderWriter
- , Stream = require("stream").Stream
- , EOF = {}
-
-inherits(EntryWriter, Stream)
-
-function EntryWriter (props) {
- var me = this
-
- if (!(me instanceof EntryWriter)) {
- return new EntryWriter(props)
- }
-
- Stream.apply(this)
-
- me.writable = true
- me.readable = true
-
- me._stream = new BlockStream(512)
-
- me._stream.on("data", function (c) {
- me.emit("data", c)
- })
-
- me._stream.on("drain", function () {
- me.emit("drain")
- })
-
- me._stream.on("end", function () {
- me.emit("end")
- me.emit("close")
- })
-
- me.props = props
- if (props.type === "Directory") {
- props.size = 0
- }
- props.ustar = "ustar\0"
- props.ustarver = "00"
- me.path = props.path
-
- me._buffer = []
- me._didHeader = false
- me._meta = false
-
- me.on("pipe", function () {
- me._process()
- })
-}
-
-EntryWriter.prototype.write = function (c) {
- // console.error(".. ew write")
- if (this._ended) return this.emit("error", new Error("write after end"))
- this._buffer.push(c)
- this._process()
- this._needDrain = this._buffer.length > 0
- return !this._needDrain
-}
-
-EntryWriter.prototype.end = function (c) {
- // console.error(".. ew end")
- if (c) this._buffer.push(c)
- this._buffer.push(EOF)
- this._ended = true
- this._process()
- this._needDrain = this._buffer.length > 0
-}
-
-EntryWriter.prototype.pause = function () {
- // console.error(".. ew pause")
- this._paused = true
- this.emit("pause")
-}
-
-EntryWriter.prototype.resume = function () {
- // console.error(".. ew resume")
- this._paused = false
- this.emit("resume")
- this._process()
-}
-
-EntryWriter.prototype.add = function (entry) {
- // console.error(".. ew add")
- if (!this.parent) return this.emit("error", new Error("no parent"))
-
- // make sure that the _header and such is emitted, and clear out
- // the _currentEntry link on the parent.
- if (!this._ended) this.end()
-
- return this.parent.add(entry)
-}
-
-EntryWriter.prototype._header = function () {
- // console.error(".. ew header")
- if (this._didHeader) return
- this._didHeader = true
-
- var headerBlock = TarHeader.encode(this.props)
-
- if (this.props.needExtended && !this._meta) {
- var me = this
-
- ExtendedHeaderWriter = ExtendedHeaderWriter ||
- require("./extended-header-writer.js")
-
- ExtendedHeaderWriter(this.props)
- .on("data", function (c) {
- me.emit("data", c)
- })
- .on("error", function (er) {
- me.emit("error", er)
- })
- .end()
- }
-
- // console.error(".. .. ew headerBlock emitting")
- this.emit("data", headerBlock)
- this.emit("header")
-}
-
-EntryWriter.prototype._process = function () {
- // console.error(".. .. ew process")
- if (!this._didHeader && !this._meta) {
- this._header()
- }
-
- if (this._paused || this._processing) {
- // console.error(".. .. .. paused=%j, processing=%j", this._paused, this._processing)
- return
- }
-
- this._processing = true
-
- var buf = this._buffer
- for (var i = 0; i < buf.length; i ++) {
- // console.error(".. .. .. i=%d", i)
-
- var c = buf[i]
-
- if (c === EOF) this._stream.end()
- else this._stream.write(c)
-
- if (this._paused) {
- // console.error(".. .. .. paused mid-emission")
- this._processing = false
- if (i < buf.length) {
- this._needDrain = true
- this._buffer = buf.slice(i + 1)
- }
- return
- }
- }
-
- // console.error(".. .. .. emitted")
- this._buffer.length = 0
- this._processing = false
-
- // console.error(".. .. .. emitting drain")
- this.emit("drain")
-}
-
-EntryWriter.prototype.destroy = function () {}
diff --git a/node_modules/node-gyp/node_modules/tar/lib/entry.js b/node_modules/node-gyp/node_modules/tar/lib/entry.js
deleted file mode 100644
index 591202b..0000000
--- a/node_modules/node-gyp/node_modules/tar/lib/entry.js
+++ /dev/null
@@ -1,220 +0,0 @@
-// A passthrough read/write stream that sets its properties
-// based on a header, extendedHeader, and globalHeader
-//
-// Can be either a file system object of some sort, or
-// a pax/ustar metadata entry.
-
-module.exports = Entry
-
-var TarHeader = require("./header.js")
- , tar = require("../tar")
- , assert = require("assert").ok
- , Stream = require("stream").Stream
- , inherits = require("inherits")
- , fstream = require("fstream").Abstract
-
-function Entry (header, extended, global) {
- Stream.call(this)
- this.readable = true
- this.writable = true
-
- this._needDrain = false
- this._paused = false
- this._reading = false
- this._ending = false
- this._ended = false
- this._remaining = 0
- this._abort = false
- this._queue = []
- this._index = 0
- this._queueLen = 0
-
- this._read = this._read.bind(this)
-
- this.props = {}
- this._header = header
- this._extended = extended || {}
-
- // globals can change throughout the course of
- // a file parse operation. Freeze it at its current state.
- this._global = {}
- var me = this
- Object.keys(global || {}).forEach(function (g) {
- me._global[g] = global[g]
- })
-
- this._setProps()
-}
-
-inherits(Entry, Stream)
-
-Entry.prototype.write = function (c) {
- if (this._ending) this.error("write() after end()", null, true)
- if (this._remaining === 0) {
- this.error("invalid bytes past eof")
- }
-
- // often we'll get a bunch of \0 at the end of the last write,
- // since chunks will always be 512 bytes when reading a tarball.
- if (c.length > this._remaining) {
- c = c.slice(0, this._remaining)
- }
- this._remaining -= c.length
-
- // put it on the stack.
- var ql = this._queueLen
- this._queue.push(c)
- this._queueLen ++
-
- this._read()
-
- // either paused, or buffered
- if (this._paused || ql > 0) {
- this._needDrain = true
- return false
- }
-
- return true
-}
-
-Entry.prototype.end = function (c) {
- if (c) this.write(c)
- this._ending = true
- this._read()
-}
-
-Entry.prototype.pause = function () {
- this._paused = true
- this.emit("pause")
-}
-
-Entry.prototype.resume = function () {
- // console.error(" Tar Entry resume", this.path)
- this.emit("resume")
- this._paused = false
- this._read()
- return this._queueLen - this._index > 1
-}
-
- // This is bound to the instance
-Entry.prototype._read = function () {
- // console.error(" Tar Entry _read", this.path)
-
- if (this._paused || this._reading || this._ended) return
-
- // set this flag so that event handlers don't inadvertently
- // get multiple _read() calls running.
- this._reading = true
-
- // have any data to emit?
- while (this._index < this._queueLen && !this._paused) {
- var chunk = this._queue[this._index ++]
- this.emit("data", chunk)
- }
-
- // check if we're drained
- if (this._index >= this._queueLen) {
- this._queue.length = this._queueLen = this._index = 0
- if (this._needDrain) {
- this._needDrain = false
- this.emit("drain")
- }
- if (this._ending) {
- this._ended = true
- this.emit("end")
- }
- }
-
- // if the queue gets too big, then pluck off whatever we can.
- // this should be fairly rare.
- var mql = this._maxQueueLen
- if (this._queueLen > mql && this._index > 0) {
- mql = Math.min(this._index, mql)
- this._index -= mql
- this._queueLen -= mql
- this._queue = this._queue.slice(mql)
- }
-
- this._reading = false
-}
-
-Entry.prototype._setProps = function () {
- // props = extended->global->header->{}
- var header = this._header
- , extended = this._extended
- , global = this._global
- , props = this.props
-
- // first get the values from the normal header.
- var fields = tar.fields
- for (var f = 0; fields[f] !== null; f ++) {
- var field = fields[f]
- , val = header[field]
- if (typeof val !== "undefined") props[field] = val
- }
-
- // next, the global header for this file.
- // numeric values, etc, will have already been parsed.
- ;[global, extended].forEach(function (p) {
- Object.keys(p).forEach(function (f) {
- if (typeof p[f] !== "undefined") props[f] = p[f]
- })
- })
-
- // no nulls allowed in path or linkpath
- ;["path", "linkpath"].forEach(function (p) {
- if (props.hasOwnProperty(p)) {
- props[p] = props[p].split("\0")[0]
- }
- })
-
-
- // set date fields to be a proper date
- ;["mtime", "ctime", "atime"].forEach(function (p) {
- if (props.hasOwnProperty(p)) {
- props[p] = new Date(props[p] * 1000)
- }
- })
-
- // set the type so that we know what kind of file to create
- var type
- switch (tar.types[props.type]) {
- case "OldFile":
- case "ContiguousFile":
- type = "File"
- break
-
- case "GNUDumpDir":
- type = "Directory"
- break
-
- case undefined:
- type = "Unknown"
- break
-
- case "Link":
- case "SymbolicLink":
- case "CharacterDevice":
- case "BlockDevice":
- case "Directory":
- case "FIFO":
- default:
- type = tar.types[props.type]
- }
-
- this.type = type
- this.path = props.path
- this.size = props.size
-
- // size is special, since it signals when the file needs to end.
- this._remaining = props.size
-}
-
-// the parser may not call write if _abort is true.
-// useful for skipping data from some files quickly.
-Entry.prototype.abort = function(){
- this._abort = true
-}
-
-Entry.prototype.warn = fstream.warn
-Entry.prototype.error = fstream.error
diff --git a/node_modules/node-gyp/node_modules/tar/lib/extended-header-writer.js b/node_modules/node-gyp/node_modules/tar/lib/extended-header-writer.js
deleted file mode 100644
index 1728c45..0000000
--- a/node_modules/node-gyp/node_modules/tar/lib/extended-header-writer.js
+++ /dev/null
@@ -1,191 +0,0 @@
-
-module.exports = ExtendedHeaderWriter
-
-var inherits = require("inherits")
- , EntryWriter = require("./entry-writer.js")
-
-inherits(ExtendedHeaderWriter, EntryWriter)
-
-var tar = require("../tar.js")
- , path = require("path")
- , TarHeader = require("./header.js")
-
-// props is the props of the thing we need to write an
-// extended header for.
-// Don't be shy with it. Just encode everything.
-function ExtendedHeaderWriter (props) {
- // console.error(">> ehw ctor")
- var me = this
-
- if (!(me instanceof ExtendedHeaderWriter)) {
- return new ExtendedHeaderWriter(props)
- }
-
- me.fields = props
-
- var p =
- { path : ("PaxHeader" + path.join("/", props.path || ""))
- .replace(/\\/g, "/").substr(0, 100)
- , mode : props.mode || 0666
- , uid : props.uid || 0
- , gid : props.gid || 0
- , size : 0 // will be set later
- , mtime : props.mtime || Date.now() / 1000
- , type : "x"
- , linkpath : ""
- , ustar : "ustar\0"
- , ustarver : "00"
- , uname : props.uname || ""
- , gname : props.gname || ""
- , devmaj : props.devmaj || 0
- , devmin : props.devmin || 0
- }
-
-
- EntryWriter.call(me, p)
- // console.error(">> ehw props", me.props)
- me.props = p
-
- me._meta = true
-}
-
-ExtendedHeaderWriter.prototype.end = function () {
- // console.error(">> ehw end")
- var me = this
-
- if (me._ended) return
- me._ended = true
-
- me._encodeFields()
-
- if (me.props.size === 0) {
- // nothing to write!
- me._ready = true
- me._stream.end()
- return
- }
-
- me._stream.write(TarHeader.encode(me.props))
- me.body.forEach(function (l) {
- me._stream.write(l)
- })
- me._ready = true
-
- // console.error(">> ehw _process calling end()", me.props)
- this._stream.end()
-}
-
-ExtendedHeaderWriter.prototype._encodeFields = function () {
- // console.error(">> ehw _encodeFields")
- this.body = []
- if (this.fields.prefix) {
- this.fields.path = this.fields.prefix + "/" + this.fields.path
- this.fields.prefix = ""
- }
- encodeFields(this.fields, "", this.body, this.fields.noProprietary)
- var me = this
- this.body.forEach(function (l) {
- me.props.size += l.length
- })
-}
-
-function encodeFields (fields, prefix, body, nop) {
- // console.error(">> >> ehw encodeFields")
- // "%d %s=%s\n", <length>, <keyword>, <value>
- // The length is a decimal number, and includes itself and the \n
- // Numeric values are decimal strings.
-
- Object.keys(fields).forEach(function (k) {
- var val = fields[k]
- , numeric = tar.numeric[k]
-
- if (prefix) k = prefix + "." + k
-
- // already including NODETAR.type, don't need File=true also
- if (k === fields.type && val === true) return
-
- switch (k) {
- // don't include anything that's always handled just fine
- // in the normal header, or only meaningful in the context
- // of nodetar
- case "mode":
- case "cksum":
- case "ustar":
- case "ustarver":
- case "prefix":
- case "basename":
- case "dirname":
- case "needExtended":
- case "block":
- case "filter":
- return
-
- case "rdev":
- if (val === 0) return
- break
-
- case "nlink":
- case "dev": // Truly a hero among men, Creator of Star!
- case "ino": // Speak his name with reverent awe! It is:
- k = "SCHILY." + k
- break
-
- default: break
- }
-
- if (val && typeof val === "object" &&
- !Buffer.isBuffer(val)) encodeFields(val, k, body, nop)
- else if (val === null || val === undefined) return
- else body.push.apply(body, encodeField(k, val, nop))
- })
-
- return body
-}
-
-function encodeField (k, v, nop) {
- // lowercase keys must be valid, otherwise prefix with
- // "NODETAR."
- if (k.charAt(0) === k.charAt(0).toLowerCase()) {
- var m = k.split(".")[0]
- if (!tar.knownExtended[m]) k = "NODETAR." + k
- }
-
- // no proprietary
- if (nop && k.charAt(0) !== k.charAt(0).toLowerCase()) {
- return []
- }
-
- if (typeof val === "number") val = val.toString(10)
-
- var s = new Buffer(" " + k + "=" + v + "\n")
- , digits = Math.floor(Math.log(s.length) / Math.log(10)) + 1
-
- // console.error("1 s=%j digits=%j s.length=%d", s.toString(), digits, s.length)
-
- // if adding that many digits will make it go over that length,
- // then add one to it. For example, if the string is:
- // " foo=bar\n"
- // then that's 9 characters. With the "9", that bumps the length
- // up to 10. However, this is invalid:
- // "10 foo=bar\n"
- // but, since that's actually 11 characters, since 10 adds another
- // character to the length, and the length includes the number
- // itself. In that case, just bump it up again.
- if (s.length + digits >= Math.pow(10, digits)) digits += 1
- // console.error("2 s=%j digits=%j s.length=%d", s.toString(), digits, s.length)
-
- var len = digits + s.length
- // console.error("3 s=%j digits=%j s.length=%d len=%d", s.toString(), digits, s.length, len)
- var lenBuf = new Buffer("" + len)
- if (lenBuf.length + s.length !== len) {
- throw new Error("Bad length calculation\n"+
- "len="+len+"\n"+
- "lenBuf="+JSON.stringify(lenBuf.toString())+"\n"+
- "lenBuf.length="+lenBuf.length+"\n"+
- "digits="+digits+"\n"+
- "s="+JSON.stringify(s.toString())+"\n"+
- "s.length="+s.length)
- }
-
- return [lenBuf, s]
-}
diff --git a/node_modules/node-gyp/node_modules/tar/lib/extended-header.js b/node_modules/node-gyp/node_modules/tar/lib/extended-header.js
deleted file mode 100644
index 74f432c..0000000
--- a/node_modules/node-gyp/node_modules/tar/lib/extended-header.js
+++ /dev/null
@@ -1,140 +0,0 @@
-// An Entry consisting of:
-//
-// "%d %s=%s\n", <length>, <keyword>, <value>
-//
-// The length is a decimal number, and includes itself and the \n
-// \0 does not terminate anything. Only the length terminates the string.
-// Numeric values are decimal strings.
-
-module.exports = ExtendedHeader
-
-var Entry = require("./entry.js")
- , inherits = require("inherits")
- , tar = require("../tar.js")
- , numeric = tar.numeric
- , keyTrans = { "SCHILY.dev": "dev"
- , "SCHILY.ino": "ino"
- , "SCHILY.nlink": "nlink" }
-
-function ExtendedHeader () {
- Entry.apply(this, arguments)
- this.on("data", this._parse)
- this.fields = {}
- this._position = 0
- this._fieldPos = 0
- this._state = SIZE
- this._sizeBuf = []
- this._keyBuf = []
- this._valBuf = []
- this._size = -1
- this._key = ""
-}
-
-inherits(ExtendedHeader, Entry)
-ExtendedHeader.prototype._parse = parse
-
-var s = 0
- , states = ExtendedHeader.states = {}
- , SIZE = states.SIZE = s++
- , KEY = states.KEY = s++
- , VAL = states.VAL = s++
- , ERR = states.ERR = s++
-
-Object.keys(states).forEach(function (s) {
- states[states[s]] = states[s]
-})
-
-states[s] = null
-
-// char code values for comparison
-var _0 = "0".charCodeAt(0)
- , _9 = "9".charCodeAt(0)
- , point = ".".charCodeAt(0)
- , a = "a".charCodeAt(0)
- , Z = "Z".charCodeAt(0)
- , a = "a".charCodeAt(0)
- , z = "z".charCodeAt(0)
- , space = " ".charCodeAt(0)
- , eq = "=".charCodeAt(0)
- , cr = "\n".charCodeAt(0)
-
-function parse (c) {
- if (this._state === ERR) return
-
- for ( var i = 0, l = c.length
- ; i < l
- ; this._position++, this._fieldPos++, i++) {
- // console.error("top of loop, size="+this._size)
-
- var b = c[i]
-
- if (this._size >= 0 && this._fieldPos > this._size) {
- error(this, "field exceeds length="+this._size)
- return
- }
-
- switch (this._state) {
- case ERR: return
-
- case SIZE:
- // console.error("parsing size, b=%d, rest=%j", b, c.slice(i).toString())
- if (b === space) {
- this._state = KEY
- // this._fieldPos = this._sizeBuf.length
- this._size = parseInt(new Buffer(this._sizeBuf).toString(), 10)
- this._sizeBuf.length = 0
- continue
- }
- if (b < _0 || b > _9) {
- error(this, "expected [" + _0 + ".." + _9 + "], got " + b)
- return
- }
- this._sizeBuf.push(b)
- continue
-
- case KEY:
- // can be any char except =, not > size.
- if (b === eq) {
- this._state = VAL
- this._key = new Buffer(this._keyBuf).toString()
- if (keyTrans[this._key]) this._key = keyTrans[this._key]
- this._keyBuf.length = 0
- continue
- }
- this._keyBuf.push(b)
- continue
-
- case VAL:
- // field must end with cr
- if (this._fieldPos === this._size - 1) {
- // console.error("finished with "+this._key)
- if (b !== cr) {
- error(this, "expected \\n at end of field")
- return
- }
- var val = new Buffer(this._valBuf).toString()
- if (numeric[this._key]) {
- val = parseFloat(val)
- }
- this.fields[this._key] = val
-
- this._valBuf.length = 0
- this._state = SIZE
- this._size = -1
- this._fieldPos = -1
- continue
- }
- this._valBuf.push(b)
- continue
- }
- }
-}
-
-function error (me, msg) {
- msg = "invalid header: " + msg
- + "\nposition=" + me._position
- + "\nfield position=" + me._fieldPos
-
- me.error(msg)
- me.state = ERR
-}
diff --git a/node_modules/node-gyp/node_modules/tar/lib/extract.js b/node_modules/node-gyp/node_modules/tar/lib/extract.js
deleted file mode 100644
index fe1bb97..0000000
--- a/node_modules/node-gyp/node_modules/tar/lib/extract.js
+++ /dev/null
@@ -1,94 +0,0 @@
-// give it a tarball and a path, and it'll dump the contents
-
-module.exports = Extract
-
-var tar = require("../tar.js")
- , fstream = require("fstream")
- , inherits = require("inherits")
- , path = require("path")
-
-function Extract (opts) {
- if (!(this instanceof Extract)) return new Extract(opts)
- tar.Parse.apply(this)
-
- if (typeof opts !== "object") {
- opts = { path: opts }
- }
-
- // better to drop in cwd? seems more standard.
- opts.path = opts.path || path.resolve("node-tar-extract")
- opts.type = "Directory"
- opts.Directory = true
-
- // similar to --strip or --strip-components
- opts.strip = +opts.strip
- if (!opts.strip || opts.strip <= 0) opts.strip = 0
-
- this._fst = fstream.Writer(opts)
-
- this.pause()
- var me = this
-
- // Hardlinks in tarballs are relative to the root
- // of the tarball. So, they need to be resolved against
- // the target directory in order to be created properly.
- me.on("entry", function (entry) {
- // if there's a "strip" argument, then strip off that many
- // path components.
- if (opts.strip) {
- var p = entry.path.split("/").slice(opts.strip).join("/")
- entry.path = entry.props.path = p
- if (entry.linkpath) {
- var lp = entry.linkpath.split("/").slice(opts.strip).join("/")
- entry.linkpath = entry.props.linkpath = lp
- }
- }
- if (entry.type === "Link") {
- entry.linkpath = entry.props.linkpath =
- path.join(opts.path, path.join("/", entry.props.linkpath))
- }
-
- if (entry.type === "SymbolicLink") {
- var dn = path.dirname(entry.path) || ""
- var linkpath = entry.props.linkpath
- var target = path.resolve(opts.path, dn, linkpath)
- if (target.indexOf(opts.path) !== 0) {
- linkpath = path.join(opts.path, path.join("/", linkpath))
- }
- entry.linkpath = entry.props.linkpath = linkpath
- }
- })
-
- this._fst.on("ready", function () {
- me.pipe(me._fst, { end: false })
- me.resume()
- })
-
- this._fst.on('error', function(err) {
- me.emit('error', err)
- })
-
- this._fst.on('drain', function() {
- me.emit('drain')
- })
-
- // this._fst.on("end", function () {
- // console.error("\nEEEE Extract End", me._fst.path)
- // })
-
- this._fst.on("close", function () {
- // console.error("\nEEEE Extract End", me._fst.path)
- me.emit("finish")
- me.emit("end")
- me.emit("close")
- })
-}
-
-inherits(Extract, tar.Parse)
-
-Extract.prototype._streamEnd = function () {
- var me = this
- if (!me._ended || me._entry) me.error("unexpected eof")
- me._fst.end()
- // my .end() is coming later.
-}
diff --git a/node_modules/node-gyp/node_modules/tar/lib/global-header-writer.js b/node_modules/node-gyp/node_modules/tar/lib/global-header-writer.js
deleted file mode 100644
index 0bfc7b8..0000000
--- a/node_modules/node-gyp/node_modules/tar/lib/global-header-writer.js
+++ /dev/null
@@ -1,14 +0,0 @@
-module.exports = GlobalHeaderWriter
-
-var ExtendedHeaderWriter = require("./extended-header-writer.js")
- , inherits = require("inherits")
-
-inherits(GlobalHeaderWriter, ExtendedHeaderWriter)
-
-function GlobalHeaderWriter (props) {
- if (!(this instanceof GlobalHeaderWriter)) {
- return new GlobalHeaderWriter(props)
- }
- ExtendedHeaderWriter.call(this, props)
- this.props.type = "g"
-}
diff --git a/node_modules/node-gyp/node_modules/tar/lib/header.js b/node_modules/node-gyp/node_modules/tar/lib/header.js
deleted file mode 100644
index 05b237c..0000000
--- a/node_modules/node-gyp/node_modules/tar/lib/header.js
+++ /dev/null
@@ -1,385 +0,0 @@
-// parse a 512-byte header block to a data object, or vice-versa
-// If the data won't fit nicely in a simple header, then generate
-// the appropriate extended header file, and return that.
-
-module.exports = TarHeader
-
-var tar = require("../tar.js")
- , fields = tar.fields
- , fieldOffs = tar.fieldOffs
- , fieldEnds = tar.fieldEnds
- , fieldSize = tar.fieldSize
- , numeric = tar.numeric
- , assert = require("assert").ok
- , space = " ".charCodeAt(0)
- , slash = "/".charCodeAt(0)
- , bslash = process.platform === "win32" ? "\\".charCodeAt(0) : null
-
-function TarHeader (block) {
- if (!(this instanceof TarHeader)) return new TarHeader(block)
- if (block) this.decode(block)
-}
-
-TarHeader.prototype =
- { decode : decode
- , encode: encode
- , calcSum: calcSum
- , checkSum: checkSum
- }
-
-TarHeader.parseNumeric = parseNumeric
-TarHeader.encode = encode
-TarHeader.decode = decode
-
-// note that this will only do the normal ustar header, not any kind
-// of extended posix header file. If something doesn't fit comfortably,
-// then it will set obj.needExtended = true, and set the block to
-// the closest approximation.
-function encode (obj) {
- if (!obj && !(this instanceof TarHeader)) throw new Error(
- "encode must be called on a TarHeader, or supplied an object")
-
- obj = obj || this
- var block = obj.block = new Buffer(512)
-
- // if the object has a "prefix", then that's actually an extension of
- // the path field.
- if (obj.prefix) {
- // console.error("%% header encoding, got a prefix", obj.prefix)
- obj.path = obj.prefix + "/" + obj.path
- // console.error("%% header encoding, prefixed path", obj.path)
- obj.prefix = ""
- }
-
- obj.needExtended = false
-
- if (obj.mode) {
- if (typeof obj.mode === "string") obj.mode = parseInt(obj.mode, 8)
- obj.mode = obj.mode & 0777
- }
-
- for (var f = 0; fields[f] !== null; f ++) {
- var field = fields[f]
- , off = fieldOffs[f]
- , end = fieldEnds[f]
- , ret
-
- switch (field) {
- case "cksum":
- // special, done below, after all the others
- break
-
- case "prefix":
- // special, this is an extension of the "path" field.
- // console.error("%% header encoding, skip prefix later")
- break
-
- case "type":
- // convert from long name to a single char.
- var type = obj.type || "0"
- if (type.length > 1) {
- type = tar.types[obj.type]
- if (!type) type = "0"
- }
- writeText(block, off, end, type)
- break
-
- case "path":
- // uses the "prefix" field if > 100 bytes, but <= 255
- var pathLen = Buffer.byteLength(obj.path)
- , pathFSize = fieldSize[fields.path]
- , prefFSize = fieldSize[fields.prefix]
-
- // paths between 100 and 255 should use the prefix field.
- // longer than 255
- if (pathLen > pathFSize &&
- pathLen <= pathFSize + prefFSize) {
- // need to find a slash somewhere in the middle so that
- // path and prefix both fit in their respective fields
- var searchStart = pathLen - 1 - pathFSize
- , searchEnd = prefFSize
- , found = false
- , pathBuf = new Buffer(obj.path)
-
- for ( var s = searchStart
- ; (s <= searchEnd)
- ; s ++ ) {
- if (pathBuf[s] === slash || pathBuf[s] === bslash) {
- found = s
- break
- }
- }
-
- if (found !== false) {
- prefix = pathBuf.slice(0, found).toString("utf8")
- path = pathBuf.slice(found + 1).toString("utf8")
-
- ret = writeText(block, off, end, path)
- off = fieldOffs[fields.prefix]
- end = fieldEnds[fields.prefix]
- // console.error("%% header writing prefix", off, end, prefix)
- ret = writeText(block, off, end, prefix) || ret
- break
- }
- }
-
- // paths less than 100 chars don't need a prefix
- // and paths longer than 255 need an extended header and will fail
- // on old implementations no matter what we do here.
- // Null out the prefix, and fallthrough to default.
- // console.error("%% header writing no prefix")
- var poff = fieldOffs[fields.prefix]
- , pend = fieldEnds[fields.prefix]
- writeText(block, poff, pend, "")
- // fallthrough
-
- // all other fields are numeric or text
- default:
- ret = numeric[field]
- ? writeNumeric(block, off, end, obj[field])
- : writeText(block, off, end, obj[field] || "")
- break
- }
- obj.needExtended = obj.needExtended || ret
- }
-
- var off = fieldOffs[fields.cksum]
- , end = fieldEnds[fields.cksum]
-
- writeNumeric(block, off, end, calcSum.call(this, block))
-
- return block
-}
-
-// if it's a negative number, or greater than will fit,
-// then use write256.
-var MAXNUM = { 12: 077777777777
- , 11: 07777777777
- , 8 : 07777777
- , 7 : 0777777 }
-function writeNumeric (block, off, end, num) {
- var writeLen = end - off
- , maxNum = MAXNUM[writeLen] || 0
-
- num = num || 0
- // console.error(" numeric", num)
-
- if (num instanceof Date ||
- Object.prototype.toString.call(num) === "[object Date]") {
- num = num.getTime() / 1000
- }
-
- if (num > maxNum || num < 0) {
- write256(block, off, end, num)
- // need an extended header if negative or too big.
- return true
- }
-
- // god, tar is so annoying
- // if the string is small enough, you should put a space
- // between the octal string and the \0, but if it doesn't
- // fit, then don't.
- var numStr = Math.floor(num).toString(8)
- if (num < MAXNUM[writeLen - 1]) numStr += " "
-
- // pad with "0" chars
- if (numStr.length < writeLen) {
- numStr = (new Array(writeLen - numStr.length).join("0")) + numStr
- }
-
- if (numStr.length !== writeLen - 1) {
- throw new Error("invalid length: " + JSON.stringify(numStr) + "\n" +
- "expected: "+writeLen)
- }
- block.write(numStr, off, writeLen, "utf8")
- block[end - 1] = 0
-}
-
-function write256 (block, off, end, num) {
- var buf = block.slice(off, end)
- var positive = num >= 0
- buf[0] = positive ? 0x80 : 0xFF
-
- // get the number as a base-256 tuple
- if (!positive) num *= -1
- var tuple = []
- do {
- var n = num % 256
- tuple.push(n)
- num = (num - n) / 256
- } while (num)
-
- var bytes = tuple.length
-
- var fill = buf.length - bytes
- for (var i = 1; i < fill; i ++) {
- buf[i] = positive ? 0 : 0xFF
- }
-
- // tuple is a base256 number, with [0] as the *least* significant byte
- // if it's negative, then we need to flip all the bits once we hit the
- // first non-zero bit. The 2's-complement is (0x100 - n), and the 1's-
- // complement is (0xFF - n).
- var zero = true
- for (i = bytes; i > 0; i --) {
- var byte = tuple[bytes - i]
- if (positive) buf[fill + i] = byte
- else if (zero && byte === 0) buf[fill + i] = 0
- else if (zero) {
- zero = false
- buf[fill + i] = 0x100 - byte
- } else buf[fill + i] = 0xFF - byte
- }
-}
-
-function writeText (block, off, end, str) {
- // strings are written as utf8, then padded with \0
- var strLen = Buffer.byteLength(str)
- , writeLen = Math.min(strLen, end - off)
- // non-ascii fields need extended headers
- // long fields get truncated
- , needExtended = strLen !== str.length || strLen > writeLen
-
- // write the string, and null-pad
- if (writeLen > 0) block.write(str, off, writeLen, "utf8")
- for (var i = off + writeLen; i < end; i ++) block[i] = 0
-
- return needExtended
-}
-
-function calcSum (block) {
- block = block || this.block
- assert(Buffer.isBuffer(block) && block.length === 512)
-
- if (!block) throw new Error("Need block to checksum")
-
- // now figure out what it would be if the cksum was " "
- var sum = 0
- , start = fieldOffs[fields.cksum]
- , end = fieldEnds[fields.cksum]
-
- for (var i = 0; i < fieldOffs[fields.cksum]; i ++) {
- sum += block[i]
- }
-
- for (var i = start; i < end; i ++) {
- sum += space
- }
-
- for (var i = end; i < 512; i ++) {
- sum += block[i]
- }
-
- return sum
-}
-
-
-function checkSum (block) {
- var sum = calcSum.call(this, block)
- block = block || this.block
-
- var cksum = block.slice(fieldOffs[fields.cksum], fieldEnds[fields.cksum])
- cksum = parseNumeric(cksum)
-
- return cksum === sum
-}
-
-function decode (block) {
- block = block || this.block
- assert(Buffer.isBuffer(block) && block.length === 512)
-
- this.block = block
- this.cksumValid = this.checkSum()
-
- var prefix = null
-
- // slice off each field.
- for (var f = 0; fields[f] !== null; f ++) {
- var field = fields[f]
- , val = block.slice(fieldOffs[f], fieldEnds[f])
-
- switch (field) {
- case "ustar":
- // if not ustar, then everything after that is just padding.
- if (val.toString() !== "ustar\0") {
- this.ustar = false
- return
- } else {
- // console.error("ustar:", val, val.toString())
- this.ustar = val.toString()
- }
- break
-
- // prefix is special, since it might signal the xstar header
- case "prefix":
- var atime = parseNumeric(val.slice(131, 131 + 12))
- , ctime = parseNumeric(val.slice(131 + 12, 131 + 12 + 12))
- if ((val[130] === 0 || val[130] === space) &&
- typeof atime === "number" &&
- typeof ctime === "number" &&
- val[131 + 12] === space &&
- val[131 + 12 + 12] === space) {
- this.atime = atime
- this.ctime = ctime
- val = val.slice(0, 130)
- }
- prefix = val.toString("utf8").replace(/\0+$/, "")
- // console.error("%% header reading prefix", prefix)
- break
-
- // all other fields are null-padding text
- // or a number.
- default:
- if (numeric[field]) {
- this[field] = parseNumeric(val)
- } else {
- this[field] = val.toString("utf8").replace(/\0+$/, "")
- }
- break
- }
- }
-
- // if we got a prefix, then prepend it to the path.
- if (prefix) {
- this.path = prefix + "/" + this.path
- // console.error("%% header got a prefix", this.path)
- }
-}
-
-function parse256 (buf) {
- // first byte MUST be either 80 or FF
- // 80 for positive, FF for 2's comp
- var positive
- if (buf[0] === 0x80) positive = true
- else if (buf[0] === 0xFF) positive = false
- else return null
-
- // build up a base-256 tuple from the least sig to the highest
- var zero = false
- , tuple = []
- for (var i = buf.length - 1; i > 0; i --) {
- var byte = buf[i]
- if (positive) tuple.push(byte)
- else if (zero && byte === 0) tuple.push(0)
- else if (zero) {
- zero = false
- tuple.push(0x100 - byte)
- } else tuple.push(0xFF - byte)
- }
-
- for (var sum = 0, i = 0, l = tuple.length; i < l; i ++) {
- sum += tuple[i] * Math.pow(256, i)
- }
-
- return positive ? sum : -1 * sum
-}
-
-function parseNumeric (f) {
- if (f[0] & 0x80) return parse256(f)
-
- var str = f.toString("utf8").split("\0")[0].trim()
- , res = parseInt(str, 8)
-
- return isNaN(res) ? null : res
-}
-
diff --git a/node_modules/node-gyp/node_modules/tar/lib/pack.js b/node_modules/node-gyp/node_modules/tar/lib/pack.js
deleted file mode 100644
index 5a3bb95..0000000
--- a/node_modules/node-gyp/node_modules/tar/lib/pack.js
+++ /dev/null
@@ -1,236 +0,0 @@
-// pipe in an fstream, and it'll make a tarball.
-// key-value pair argument is global extended header props.
-
-module.exports = Pack
-
-var EntryWriter = require("./entry-writer.js")
- , Stream = require("stream").Stream
- , path = require("path")
- , inherits = require("inherits")
- , GlobalHeaderWriter = require("./global-header-writer.js")
- , collect = require("fstream").collect
- , eof = new Buffer(512)
-
-for (var i = 0; i < 512; i ++) eof[i] = 0
-
-inherits(Pack, Stream)
-
-function Pack (props) {
- // console.error("-- p ctor")
- var me = this
- if (!(me instanceof Pack)) return new Pack(props)
-
- if (props) me._noProprietary = props.noProprietary
- else me._noProprietary = false
-
- me._global = props
-
- me.readable = true
- me.writable = true
- me._buffer = []
- // console.error("-- -- set current to null in ctor")
- me._currentEntry = null
- me._processing = false
-
- me._pipeRoot = null
- me.on("pipe", function (src) {
- if (src.root === me._pipeRoot) return
- me._pipeRoot = src
- src.on("end", function () {
- me._pipeRoot = null
- })
- me.add(src)
- })
-}
-
-Pack.prototype.addGlobal = function (props) {
- // console.error("-- p addGlobal")
- if (this._didGlobal) return
- this._didGlobal = true
-
- var me = this
- GlobalHeaderWriter(props)
- .on("data", function (c) {
- me.emit("data", c)
- })
- .end()
-}
-
-Pack.prototype.add = function (stream) {
- if (this._global && !this._didGlobal) this.addGlobal(this._global)
-
- if (this._ended) return this.emit("error", new Error("add after end"))
-
- collect(stream)
- this._buffer.push(stream)
- this._process()
- this._needDrain = this._buffer.length > 0
- return !this._needDrain
-}
-
-Pack.prototype.pause = function () {
- this._paused = true
- if (this._currentEntry) this._currentEntry.pause()
- this.emit("pause")
-}
-
-Pack.prototype.resume = function () {
- this._paused = false
- if (this._currentEntry) this._currentEntry.resume()
- this.emit("resume")
- this._process()
-}
-
-Pack.prototype.end = function () {
- this._ended = true
- this._buffer.push(eof)
- this._process()
-}
-
-Pack.prototype._process = function () {
- var me = this
- if (me._paused || me._processing) {
- return
- }
-
- var entry = me._buffer.shift()
-
- if (!entry) {
- if (me._needDrain) {
- me.emit("drain")
- }
- return
- }
-
- if (entry.ready === false) {
- // console.error("-- entry is not ready", entry)
- me._buffer.unshift(entry)
- entry.on("ready", function () {
- // console.error("-- -- ready!", entry)
- me._process()
- })
- return
- }
-
- me._processing = true
-
- if (entry === eof) {
- // need 2 ending null blocks.
- me.emit("data", eof)
- me.emit("data", eof)
- me.emit("end")
- me.emit("close")
- return
- }
-
- // Change the path to be relative to the root dir that was
- // added to the tarball.
- //
- // XXX This should be more like how -C works, so you can
- // explicitly set a root dir, and also explicitly set a pathname
- // in the tarball to use. That way we can skip a lot of extra
- // work when resolving symlinks for bundled dependencies in npm.
-
- var root = path.dirname((entry.root || entry).path);
- if (me._global && me._global.fromBase && entry.root && entry.root.path) {
- // user set 'fromBase: true' indicating tar root should be directory itself
- root = entry.root.path;
- }
-
- var wprops = {}
-
- Object.keys(entry.props || {}).forEach(function (k) {
- wprops[k] = entry.props[k]
- })
-
- if (me._noProprietary) wprops.noProprietary = true
-
- wprops.path = path.relative(root, entry.path || '')
-
- // actually not a matter of opinion or taste.
- if (process.platform === "win32") {
- wprops.path = wprops.path.replace(/\\/g, "/")
- }
-
- if (!wprops.type)
- wprops.type = 'Directory'
-
- switch (wprops.type) {
- // sockets not supported
- case "Socket":
- return
-
- case "Directory":
- wprops.path += "/"
- wprops.size = 0
- break
-
- case "Link":
- var lp = path.resolve(path.dirname(entry.path), entry.linkpath)
- wprops.linkpath = path.relative(root, lp) || "."
- wprops.size = 0
- break
-
- case "SymbolicLink":
- var lp = path.resolve(path.dirname(entry.path), entry.linkpath)
- wprops.linkpath = path.relative(path.dirname(entry.path), lp) || "."
- wprops.size = 0
- break
- }
-
- // console.error("-- new writer", wprops)
- // if (!wprops.type) {
- // // console.error("-- no type?", entry.constructor.name, entry)
- // }
-
- // console.error("-- -- set current to new writer", wprops.path)
- var writer = me._currentEntry = EntryWriter(wprops)
-
- writer.parent = me
-
- // writer.on("end", function () {
- // // console.error("-- -- writer end", writer.path)
- // })
-
- writer.on("data", function (c) {
- me.emit("data", c)
- })
-
- writer.on("header", function () {
- Buffer.prototype.toJSON = function () {
- return this.toString().split(/\0/).join(".")
- }
- // console.error("-- -- writer header %j", writer.props)
- if (writer.props.size === 0) nextEntry()
- })
- writer.on("close", nextEntry)
-
- var ended = false
- function nextEntry () {
- if (ended) return
- ended = true
-
- // console.error("-- -- writer close", writer.path)
- // console.error("-- -- set current to null", wprops.path)
- me._currentEntry = null
- me._processing = false
- me._process()
- }
-
- writer.on("error", function (er) {
- // console.error("-- -- writer error", writer.path)
- me.emit("error", er)
- })
-
- // if it's the root, then there's no need to add its entries,
- // or data, since they'll be added directly.
- if (entry === me._pipeRoot) {
- // console.error("-- is the root, don't auto-add")
- writer.add = null
- }
-
- entry.pipe(writer)
-}
-
-Pack.prototype.destroy = function () {}
-Pack.prototype.write = function () {}
diff --git a/node_modules/node-gyp/node_modules/tar/lib/parse.js b/node_modules/node-gyp/node_modules/tar/lib/parse.js
deleted file mode 100644
index 1c66ebd..0000000
--- a/node_modules/node-gyp/node_modules/tar/lib/parse.js
+++ /dev/null
@@ -1,281 +0,0 @@
-
-// A writable stream.
-// It emits "entry" events, which provide a readable stream that has
-// header info attached.
-
-module.exports = Parse.create = Parse
-
-var stream = require("stream")
- , Stream = stream.Stream
- , BlockStream = require("block-stream")
- , tar = require("../tar.js")
- , TarHeader = require("./header.js")
- , Entry = require("./entry.js")
- , BufferEntry = require("./buffer-entry.js")
- , ExtendedHeader = require("./extended-header.js")
- , assert = require("assert").ok
- , inherits = require("inherits")
- , fstream = require("fstream")
-
-// reading a tar is a lot like reading a directory
-// However, we're actually not going to run the ctor,
-// since it does a stat and various other stuff.
-// This inheritance gives us the pause/resume/pipe
-// behavior that is desired.
-inherits(Parse, fstream.Reader)
-
-function Parse () {
- var me = this
- if (!(me instanceof Parse)) return new Parse()
-
- // doesn't apply fstream.Reader ctor?
- // no, becasue we don't want to stat/etc, we just
- // want to get the entry/add logic from .pipe()
- Stream.apply(me)
-
- me.writable = true
- me.readable = true
- me._stream = new BlockStream(512)
- me.position = 0
- me._ended = false
- me._hardLinks = {}
-
- me._stream.on("error", function (e) {
- me.emit("error", e)
- })
-
- me._stream.on("data", function (c) {
- me._process(c)
- })
-
- me._stream.on("end", function () {
- me._streamEnd()
- })
-
- me._stream.on("drain", function () {
- me.emit("drain")
- })
-}
-
-// overridden in Extract class, since it needs to
-// wait for its DirWriter part to finish before
-// emitting "end"
-Parse.prototype._streamEnd = function () {
- var me = this
- if (!me._ended || me._entry) me.error("unexpected eof")
- me.emit("end")
-}
-
-// a tar reader is actually a filter, not just a readable stream.
-// So, you should pipe a tarball stream into it, and it needs these
-// write/end methods to do that.
-Parse.prototype.write = function (c) {
- if (this._ended) {
- // gnutar puts a LOT of nulls at the end.
- // you can keep writing these things forever.
- // Just ignore them.
- for (var i = 0, l = c.length; i > l; i ++) {
- if (c[i] !== 0) return this.error("write() after end()")
- }
- return
- }
- return this._stream.write(c)
-}
-
-Parse.prototype.end = function (c) {
- this._ended = true
- return this._stream.end(c)
-}
-
-// don't need to do anything, since we're just
-// proxying the data up from the _stream.
-// Just need to override the parent's "Not Implemented"
-// error-thrower.
-Parse.prototype._read = function () {}
-
-Parse.prototype._process = function (c) {
- assert(c && c.length === 512, "block size should be 512")
-
- // one of three cases.
- // 1. A new header
- // 2. A part of a file/extended header
- // 3. One of two or more EOF null blocks
-
- if (this._entry) {
- var entry = this._entry
- if(!entry._abort) entry.write(c)
- else {
- entry._remaining -= c.length
- if(entry._remaining < 0) entry._remaining = 0
- }
- if (entry._remaining === 0) {
- entry.end()
- this._entry = null
- }
- } else {
- // either zeroes or a header
- var zero = true
- for (var i = 0; i < 512 && zero; i ++) {
- zero = c[i] === 0
- }
-
- // eof is *at least* 2 blocks of nulls, and then the end of the
- // file. you can put blocks of nulls between entries anywhere,
- // so appending one tarball to another is technically valid.
- // ending without the eof null blocks is not allowed, however.
- if (zero) {
- if (this._eofStarted)
- this._ended = true
- this._eofStarted = true
- } else {
- this._eofStarted = false
- this._startEntry(c)
- }
- }
-
- this.position += 512
-}
-
-// take a header chunk, start the right kind of entry.
-Parse.prototype._startEntry = function (c) {
- var header = new TarHeader(c)
- , self = this
- , entry
- , ev
- , EntryType
- , onend
- , meta = false
-
- if (null === header.size || !header.cksumValid) {
- var e = new Error("invalid tar file")
- e.header = header
- e.tar_file_offset = this.position
- e.tar_block = this.position / 512
- return this.emit("error", e)
- }
-
- switch (tar.types[header.type]) {
- case "File":
- case "OldFile":
- case "Link":
- case "SymbolicLink":
- case "CharacterDevice":
- case "BlockDevice":
- case "Directory":
- case "FIFO":
- case "ContiguousFile":
- case "GNUDumpDir":
- // start a file.
- // pass in any extended headers
- // These ones consumers are typically most interested in.
- EntryType = Entry
- ev = "entry"
- break
-
- case "GlobalExtendedHeader":
- // extended headers that apply to the rest of the tarball
- EntryType = ExtendedHeader
- onend = function () {
- self._global = self._global || {}
- Object.keys(entry.fields).forEach(function (k) {
- self._global[k] = entry.fields[k]
- })
- }
- ev = "globalExtendedHeader"
- meta = true
- break
-
- case "ExtendedHeader":
- case "OldExtendedHeader":
- // extended headers that apply to the next entry
- EntryType = ExtendedHeader
- onend = function () {
- self._extended = entry.fields
- }
- ev = "extendedHeader"
- meta = true
- break
-
- case "NextFileHasLongLinkpath":
- // set linkpath=<contents> in extended header
- EntryType = BufferEntry
- onend = function () {
- self._extended = self._extended || {}
- self._extended.linkpath = entry.body
- }
- ev = "longLinkpath"
- meta = true
- break
-
- case "NextFileHasLongPath":
- case "OldGnuLongPath":
- // set path=<contents> in file-extended header
- EntryType = BufferEntry
- onend = function () {
- self._extended = self._extended || {}
- self._extended.path = entry.body
- }
- ev = "longPath"
- meta = true
- break
-
- default:
- // all the rest we skip, but still set the _entry
- // member, so that we can skip over their data appropriately.
- // emit an event to say that this is an ignored entry type?
- EntryType = Entry
- ev = "ignoredEntry"
- break
- }
-
- var global, extended
- if (meta) {
- global = extended = null
- } else {
- var global = this._global
- var extended = this._extended
-
- // extendedHeader only applies to one entry, so once we start
- // an entry, it's over.
- this._extended = null
- }
- entry = new EntryType(header, extended, global)
- entry.meta = meta
-
- // only proxy data events of normal files.
- if (!meta) {
- entry.on("data", function (c) {
- me.emit("data", c)
- })
- }
-
- if (onend) entry.on("end", onend)
-
- this._entry = entry
-
- if (entry.type === "Link") {
- this._hardLinks[entry.path] = entry
- }
-
- var me = this
-
- entry.on("pause", function () {
- me.pause()
- })
-
- entry.on("resume", function () {
- me.resume()
- })
-
- if (this.listeners("*").length) {
- this.emit("*", ev, entry)
- }
-
- this.emit(ev, entry)
-
- // Zero-byte entry. End immediately.
- if (entry.props.size === 0) {
- entry.end()
- this._entry = null
- }
-}
diff --git a/node_modules/node-gyp/node_modules/tar/package.json b/node_modules/node-gyp/node_modules/tar/package.json
deleted file mode 100644
index c0ff44f..0000000
--- a/node_modules/node-gyp/node_modules/tar/package.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "_from": "tar@^2.0.0",
- "_id": "tar@2.2.2",
- "_inBundle": false,
- "_integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
- "_location": "/node-gyp/tar",
- "_phantomChildren": {},
- "_requested": {
- "type": "range",
- "registry": true,
- "raw": "tar@^2.0.0",
- "name": "tar",
- "escapedName": "tar",
- "rawSpec": "^2.0.0",
- "saveSpec": null,
- "fetchSpec": "^2.0.0"
- },
- "_requiredBy": [
- "/node-gyp"
- ],
- "_resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
- "_shasum": "0ca8848562c7299b8b446ff6a4d60cdbb23edc40",
- "_spec": "tar@^2.0.0",
- "_where": "/home/pruss/Dev/3-minute-website/node_modules/node-gyp",
- "author": {
- "name": "Isaac Z. Schlueter",
- "email": "i@izs.me",
- "url": "http://blog.izs.me/"
- },
- "bugs": {
- "url": "https://github.com/isaacs/node-tar/issues"
- },
- "bundleDependencies": false,
- "dependencies": {
- "block-stream": "*",
- "fstream": "^1.0.12",
- "inherits": "2"
- },
- "deprecated": false,
- "description": "tar for node",
- "devDependencies": {
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "rimraf": "1.x",
- "tap": "0.x"
- },
- "homepage": "https://github.com/isaacs/node-tar#readme",
- "license": "ISC",
- "main": "tar.js",
- "name": "tar",
- "repository": {
- "type": "git",
- "url": "git://github.com/isaacs/node-tar.git"
- },
- "scripts": {
- "test": "tap test/*.js"
- },
- "version": "2.2.2"
-}
diff --git a/node_modules/node-gyp/node_modules/tar/tar.js b/node_modules/node-gyp/node_modules/tar/tar.js
deleted file mode 100644
index a81298b..0000000
--- a/node_modules/node-gyp/node_modules/tar/tar.js
+++ /dev/null
@@ -1,173 +0,0 @@
-// field paths that every tar file must have.
-// header is padded to 512 bytes.
-var f = 0
- , fields = {}
- , path = fields.path = f++
- , mode = fields.mode = f++
- , uid = fields.uid = f++
- , gid = fields.gid = f++
- , size = fields.size = f++
- , mtime = fields.mtime = f++
- , cksum = fields.cksum = f++
- , type = fields.type = f++
- , linkpath = fields.linkpath = f++
- , headerSize = 512
- , blockSize = 512
- , fieldSize = []
-
-fieldSize[path] = 100
-fieldSize[mode] = 8
-fieldSize[uid] = 8
-fieldSize[gid] = 8
-fieldSize[size] = 12
-fieldSize[mtime] = 12
-fieldSize[cksum] = 8
-fieldSize[type] = 1
-fieldSize[linkpath] = 100
-
-// "ustar\0" may introduce another bunch of headers.
-// these are optional, and will be nulled out if not present.
-
-var ustar = fields.ustar = f++
- , ustarver = fields.ustarver = f++
- , uname = fields.uname = f++
- , gname = fields.gname = f++
- , devmaj = fields.devmaj = f++
- , devmin = fields.devmin = f++
- , prefix = fields.prefix = f++
- , fill = fields.fill = f++
-
-// terminate fields.
-fields[f] = null
-
-fieldSize[ustar] = 6
-fieldSize[ustarver] = 2
-fieldSize[uname] = 32
-fieldSize[gname] = 32
-fieldSize[devmaj] = 8
-fieldSize[devmin] = 8
-fieldSize[prefix] = 155
-fieldSize[fill] = 12
-
-// nb: prefix field may in fact be 130 bytes of prefix,
-// a null char, 12 bytes for atime, 12 bytes for ctime.
-//
-// To recognize this format:
-// 1. prefix[130] === ' ' or '\0'
-// 2. atime and ctime are octal numeric values
-// 3. atime and ctime have ' ' in their last byte
-
-var fieldEnds = {}
- , fieldOffs = {}
- , fe = 0
-for (var i = 0; i < f; i ++) {
- fieldOffs[i] = fe
- fieldEnds[i] = (fe += fieldSize[i])
-}
-
-// build a translation table of field paths.
-Object.keys(fields).forEach(function (f) {
- if (fields[f] !== null) fields[fields[f]] = f
-})
-
-// different values of the 'type' field
-// paths match the values of Stats.isX() functions, where appropriate
-var types =
- { 0: "File"
- , "\0": "OldFile" // like 0
- , "": "OldFile"
- , 1: "Link"
- , 2: "SymbolicLink"
- , 3: "CharacterDevice"
- , 4: "BlockDevice"
- , 5: "Directory"
- , 6: "FIFO"
- , 7: "ContiguousFile" // like 0
- // posix headers
- , g: "GlobalExtendedHeader" // k=v for the rest of the archive
- , x: "ExtendedHeader" // k=v for the next file
- // vendor-specific stuff
- , A: "SolarisACL" // skip
- , D: "GNUDumpDir" // like 5, but with data, which should be skipped
- , I: "Inode" // metadata only, skip
- , K: "NextFileHasLongLinkpath" // data = link path of next file
- , L: "NextFileHasLongPath" // data = path of next file
- , M: "ContinuationFile" // skip
- , N: "OldGnuLongPath" // like L
- , S: "SparseFile" // skip
- , V: "TapeVolumeHeader" // skip
- , X: "OldExtendedHeader" // like x
- }
-
-Object.keys(types).forEach(function (t) {
- types[types[t]] = types[types[t]] || t
-})
-
-// values for the mode field
-var modes =
- { suid: 04000 // set uid on extraction
- , sgid: 02000 // set gid on extraction
- , svtx: 01000 // set restricted deletion flag on dirs on extraction
- , uread: 0400
- , uwrite: 0200
- , uexec: 0100
- , gread: 040
- , gwrite: 020
- , gexec: 010
- , oread: 4
- , owrite: 2
- , oexec: 1
- , all: 07777
- }
-
-var numeric =
- { mode: true
- , uid: true
- , gid: true
- , size: true
- , mtime: true
- , devmaj: true
- , devmin: true
- , cksum: true
- , atime: true
- , ctime: true
- , dev: true
- , ino: true
- , nlink: true
- }
-
-Object.keys(modes).forEach(function (t) {
- modes[modes[t]] = modes[modes[t]] || t
-})
-
-var knownExtended =
- { atime: true
- , charset: true
- , comment: true
- , ctime: true
- , gid: true
- , gname: true
- , linkpath: true
- , mtime: true
- , path: true
- , realtime: true
- , security: true
- , size: true
- , uid: true
- , uname: true }
-
-
-exports.fields = fields
-exports.fieldSize = fieldSize
-exports.fieldOffs = fieldOffs
-exports.fieldEnds = fieldEnds
-exports.types = types
-exports.modes = modes
-exports.numeric = numeric
-exports.headerSize = headerSize
-exports.blockSize = blockSize
-exports.knownExtended = knownExtended
-
-exports.Pack = require("./lib/pack.js")
-exports.Parse = require("./lib/parse.js")
-exports.Extract = require("./lib/extract.js")
diff --git a/node_modules/node-gyp/node_modules/tar/test/00-setup-fixtures.js b/node_modules/node-gyp/node_modules/tar/test/00-setup-fixtures.js
deleted file mode 100644
index 1524ff7..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/00-setup-fixtures.js
+++ /dev/null
@@ -1,53 +0,0 @@
-// the fixtures have some weird stuff that is painful
-// to include directly in the repo for various reasons.
-//
-// So, unpack the fixtures with the system tar first.
-//
-// This means, of course, that it'll only work if you
-// already have a tar implementation, and some of them
-// will not properly unpack the fixtures anyway.
-//
-// But, since usually those tests will fail on Windows
-// and other systems with less capable filesystems anyway,
-// at least this way we don't cause inconveniences by
-// merely cloning the repo or installing the package.
-
-var tap = require("tap")
-, child_process = require("child_process")
-, rimraf = require("rimraf")
-, test = tap.test
-, path = require("path")
-
-test("clean fixtures", function (t) {
- rimraf(path.resolve(__dirname, "fixtures"), function (er) {
- t.ifError(er, "rimraf ./fixtures/")
- t.end()
- })
-})
-
-test("clean tmp", function (t) {
- rimraf(path.resolve(__dirname, "tmp"), function (er) {
- t.ifError(er, "rimraf ./tmp/")
- t.end()
- })
-})
-
-test("extract fixtures", function (t) {
- var c = child_process.spawn("tar"
- ,["xzvf", "fixtures.tgz"]
- ,{ cwd: __dirname })
-
- c.stdout.on("data", errwrite)
- c.stderr.on("data", errwrite)
- function errwrite (chunk) {
- process.stderr.write(chunk)
- }
-
- c.on("exit", function (code) {
- t.equal(code, 0, "extract fixtures should exit with 0")
- if (code) {
- t.comment("Note, all tests from here on out will fail because of this.")
- }
- t.end()
- })
-})
diff --git a/node_modules/node-gyp/node_modules/tar/test/cb-never-called-1.0.1.tgz b/node_modules/node-gyp/node_modules/tar/test/cb-never-called-1.0.1.tgz
deleted file mode 100644
index 9e7014d..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/cb-never-called-1.0.1.tgz
+++ /dev/null
Binary files differ
diff --git a/node_modules/node-gyp/node_modules/tar/test/dir-normalization.js b/node_modules/node-gyp/node_modules/tar/test/dir-normalization.js
deleted file mode 100644
index 9719c42..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/dir-normalization.js
+++ /dev/null
@@ -1,177 +0,0 @@
-// Set the umask, so that it works the same everywhere.
-process.umask(parseInt('22', 8))
-
-var fs = require('fs')
-var path = require('path')
-
-var fstream = require('fstream')
-var test = require('tap').test
-
-var tar = require('../tar.js')
-var file = path.resolve(__dirname, 'dir-normalization.tar')
-var target = path.resolve(__dirname, 'tmp/dir-normalization-test')
-var ee = 0
-
-var expectEntries = [
- { path: 'fixtures/',
- mode: '755',
- type: '5',
- linkpath: ''
- },
- { path: 'fixtures/a/',
- mode: '755',
- type: '5',
- linkpath: ''
- },
- { path: 'fixtures/the-chumbler',
- mode: '755',
- type: '2',
- linkpath: path.resolve(target, 'a/b/c/d/the-chumbler'),
- },
- { path: 'fixtures/a/b/',
- mode: '755',
- type: '5',
- linkpath: ''
- },
- { path: 'fixtures/a/x',
- mode: '644',
- type: '0',
- linkpath: ''
- },
- { path: 'fixtures/a/b/c/',
- mode: '755',
- type: '5',
- linkpath: ''
- },
- { path: 'fixtures/a/b/c/y',
- mode: '755',
- type: '2',
- linkpath: '../../x',
- }
-]
-
-var ef = 0
-var expectFiles = [
- { path: '',
- mode: '40755',
- type: 'Directory',
- depth: 0,
- linkpath: undefined
- },
- { path: '/fixtures',
- mode: '40755',
- type: 'Directory',
- depth: 1,
- linkpath: undefined
- },
- { path: '/fixtures/a',
- mode: '40755',
- type: 'Directory',
- depth: 2,
- linkpath: undefined
- },
- { path: '/fixtures/a/b',
- mode: '40755',
- type: 'Directory',
- depth: 3,
- linkpath: undefined
- },
- { path: '/fixtures/a/b/c',
- mode: '40755',
- type: 'Directory',
- depth: 4,
- linkpath: undefined
- },
- { path: '/fixtures/a/b/c/y',
- mode: '120755',
- type: 'SymbolicLink',
- depth: 5,
- linkpath: '../../x'
- },
- { path: '/fixtures/a/x',
- mode: '100644',
- type: 'File',
- depth: 3,
- linkpath: undefined
- },
- { path: '/fixtures/the-chumbler',
- mode: '120755',
- type: 'SymbolicLink',
- depth: 2,
- linkpath: path.resolve(target, 'a/b/c/d/the-chumbler')
- }
-]
-
-test('preclean', function (t) {
- require('rimraf').sync(path.join(__dirname, '/tmp/dir-normalization-test'))
- t.pass('cleaned!')
- t.end()
-})
-
-test('extract test', function (t) {
- var extract = tar.Extract(target)
- var inp = fs.createReadStream(file)
-
- inp.pipe(extract)
-
- extract.on('end', function () {
- t.equal(ee, expectEntries.length, 'should see ' + expectEntries.length + ' entries')
-
- // should get no more entries after end
- extract.removeAllListeners('entry')
- extract.on('entry', function (e) {
- t.fail('Should not get entries after end!')
- })
-
- next()
- })
-
- extract.on('entry', function (entry) {
- var mode = entry.props.mode & (~parseInt('22', 8))
- var found = {
- path: entry.path,
- mode: mode.toString(8),
- type: entry.props.type,
- linkpath: entry.props.linkpath,
- }
-
- var wanted = expectEntries[ee++]
- t.equivalent(found, wanted, 'tar entry ' + ee + ' ' + (wanted && wanted.path))
- })
-
- function next () {
- var r = fstream.Reader({
- path: target,
- type: 'Directory',
- sort: 'alpha'
- })
-
- r.on('ready', function () {
- foundEntry(r)
- })
-
- r.on('end', finish)
-
- function foundEntry (entry) {
- var p = entry.path.substr(target.length)
- var mode = entry.props.mode & (~parseInt('22', 8))
- var found = {
- path: p,
- mode: mode.toString(8),
- type: entry.props.type,
- depth: entry.props.depth,
- linkpath: entry.props.linkpath
- }
-
- var wanted = expectFiles[ef++]
- t.equivalent(found, wanted, 'unpacked file ' + ef + ' ' + (wanted && wanted.path))
-
- entry.on('entry', foundEntry)
- }
-
- function finish () {
- t.equal(ef, expectFiles.length, 'should have ' + ef + ' items')
- t.end()
- }
- }
-})
diff --git a/node_modules/node-gyp/node_modules/tar/test/dir-normalization.tar b/node_modules/node-gyp/node_modules/tar/test/dir-normalization.tar
deleted file mode 100644
index 3c48453..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/dir-normalization.tar
+++ /dev/null
Binary files differ
diff --git a/node_modules/node-gyp/node_modules/tar/test/error-on-broken.js b/node_modules/node-gyp/node_modules/tar/test/error-on-broken.js
deleted file mode 100644
index e484920..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/error-on-broken.js
+++ /dev/null
@@ -1,33 +0,0 @@
-var fs = require('fs')
-var path = require('path')
-var zlib = require('zlib')
-
-var tap = require('tap')
-
-var tar = require('../tar.js')
-
-var file = path.join(__dirname, 'cb-never-called-1.0.1.tgz')
-var target = path.join(__dirname, 'tmp/extract-test')
-
-tap.test('preclean', function (t) {
- require('rimraf').sync(__dirname + '/tmp/extract-test')
- t.pass('cleaned!')
- t.end()
-})
-
-tap.test('extract test', function (t) {
- var extract = tar.Extract(target)
- var inp = fs.createReadStream(file)
-
- inp.pipe(zlib.createGunzip()).pipe(extract)
-
- extract.on('error', function (er) {
- t.equal(er.message, 'unexpected eof', 'error noticed')
- t.end()
- })
-
- extract.on('end', function () {
- t.fail('shouldn\'t reach this point due to errors')
- t.end()
- })
-})
diff --git a/node_modules/node-gyp/node_modules/tar/test/extract-move.js b/node_modules/node-gyp/node_modules/tar/test/extract-move.js
deleted file mode 100644
index 45400cd..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/extract-move.js
+++ /dev/null
@@ -1,132 +0,0 @@
-// Set the umask, so that it works the same everywhere.
-process.umask(parseInt('22', 8))
-
-var tap = require("tap")
- , tar = require("../tar.js")
- , fs = require("fs")
- , gfs = require("graceful-fs")
- , path = require("path")
- , file = path.resolve(__dirname, "fixtures/dir.tar")
- , target = path.resolve(__dirname, "tmp/extract-test")
- , index = 0
- , fstream = require("fstream")
- , rimraf = require("rimraf")
- , mkdirp = require("mkdirp")
-
- , ee = 0
- , expectEntries = [
- {
- "path" : "dir/",
- "mode" : "750",
- "type" : "5",
- "depth" : undefined,
- "size" : 0,
- "linkpath" : "",
- "nlink" : undefined,
- "dev" : undefined,
- "ino" : undefined
- },
- {
- "path" : "dir/sub/",
- "mode" : "750",
- "type" : "5",
- "depth" : undefined,
- "size" : 0,
- "linkpath" : "",
- "nlink" : undefined,
- "dev" : undefined,
- "ino" : undefined
- } ]
-
-function slow (fs, method, t1, t2) {
- var orig = fs[method]
- if (!orig) return null
- fs[method] = function () {
- var args = [].slice.call(arguments)
- console.error("slow", method, args[0])
- var cb = args.pop()
-
- setTimeout(function () {
- orig.apply(fs, args.concat(function(er, data) {
- setTimeout(function() {
- cb(er, data)
- }, t2)
- }))
- }, t1)
- }
-}
-
-// Make sure we get the graceful-fs that fstream is using.
-var gfs2
-try {
- gfs2 = require("fstream/node_modules/graceful-fs")
-} catch (er) {}
-
-var slowMethods = ["chown", "chmod", "utimes", "lutimes"]
-slowMethods.forEach(function (method) {
- var t1 = 500
- var t2 = 0
- slow(fs, method, t1, t2)
- slow(gfs, method, t1, t2)
- if (gfs2) {
- slow(gfs2, method, t1, t2)
- }
-})
-
-
-
-// The extract class basically just pipes the input
-// to a Reader, and then to a fstream.DirWriter
-
-// So, this is as much a test of fstream.Reader and fstream.Writer
-// as it is of tar.Extract, but it sort of makes sense.
-
-tap.test("preclean", function (t) {
- rimraf.sync(target)
- /mkdirp.sync(target)
- t.pass("cleaned!")
- t.end()
-})
-
-tap.test("extract test", function (t) {
- var extract = tar.Extract(target)
- var inp = fs.createReadStream(file)
-
- // give it a weird buffer size to try to break in odd places
- inp.bufferSize = 1234
-
- inp.pipe(extract)
-
- extract.on("end", function () {
- rimraf.sync(target)
-
- t.equal(ee, expectEntries.length, "should see "+ee+" entries")
-
- // should get no more entries after end
- extract.removeAllListeners("entry")
- extract.on("entry", function (e) {
- t.fail("Should not get entries after end!")
- })
-
- t.end()
- })
-
-
- extract.on("entry", function (entry) {
- var found =
- { path: entry.path
- , mode: entry.props.mode.toString(8)
- , type: entry.props.type
- , depth: entry.props.depth
- , size: entry.props.size
- , linkpath: entry.props.linkpath
- , nlink: entry.props.nlink
- , dev: entry.props.dev
- , ino: entry.props.ino
- }
-
- var wanted = expectEntries[ee ++]
-
- t.equivalent(found, wanted, "tar entry " + ee + " " + wanted.path)
- })
-})
diff --git a/node_modules/node-gyp/node_modules/tar/test/extract.js b/node_modules/node-gyp/node_modules/tar/test/extract.js
deleted file mode 100644
index eca4e7c..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/extract.js
+++ /dev/null
@@ -1,367 +0,0 @@
-// Set the umask, so that it works the same everywhere.
-process.umask(parseInt('22', 8))
-
-var tap = require("tap")
- , tar = require("../tar.js")
- , fs = require("fs")
- , path = require("path")
- , file = path.resolve(__dirname, "fixtures/c.tar")
- , target = path.resolve(__dirname, "tmp/extract-test")
- , index = 0
- , fstream = require("fstream")
-
- , ee = 0
- , expectEntries =
-[ { path: 'c.txt',
- mode: '644',
- type: '0',
- depth: undefined,
- size: 513,
- linkpath: '',
- nlink: undefined,
- dev: undefined,
- ino: undefined },
- { path: 'cc.txt',
- mode: '644',
- type: '0',
- depth: undefined,
- size: 513,
- linkpath: '',
- nlink: undefined,
- dev: undefined,
- ino: undefined },
- { path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: '644',
- type: '0',
- depth: undefined,
- size: 100,
- linkpath: '',
- nlink: undefined,
- dev: undefined,
- ino: undefined },
- { path: 'Ω.txt',
- mode: '644',
- type: '0',
- depth: undefined,
- size: 2,
- linkpath: '',
- nlink: undefined,
- dev: undefined,
- ino: undefined },
- { path: 'Ω.txt',
- mode: '644',
- type: '0',
- depth: undefined,
- size: 2,
- linkpath: '',
- nlink: 1,
- dev: 234881026,
- ino: 51693379 },
- { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: '644',
- type: '0',
- depth: undefined,
- size: 200,
- linkpath: '',
- nlink: 1,
- dev: 234881026,
- ino: 51681874 },
- { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: '644',
- type: '0',
- depth: undefined,
- size: 201,
- linkpath: '',
- nlink: undefined,
- dev: undefined,
- ino: undefined },
- { path: '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL',
- mode: '777',
- type: '2',
- depth: undefined,
- size: 0,
- linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- nlink: undefined,
- dev: undefined,
- ino: undefined },
- { path: '200-hard',
- mode: '644',
- type: '0',
- depth: undefined,
- size: 200,
- linkpath: '',
- nlink: 2,
- dev: 234881026,
- ino: 51681874 },
- { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: '644',
- type: '1',
- depth: undefined,
- size: 0,
- linkpath: path.resolve(target, '200-hard'),
- nlink: 2,
- dev: 234881026,
- ino: 51681874 } ]
-
- , ef = 0
- , expectFiles =
-[ { path: '',
- mode: '40755',
- type: 'Directory',
- depth: 0,
- linkpath: undefined },
- { path: '/200-hard',
- mode: '100644',
- type: 'File',
- depth: 1,
- size: 200,
- linkpath: undefined,
- nlink: 2 },
- { path: '/200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL',
- mode: '120777',
- type: 'SymbolicLink',
- depth: 1,
- size: 200,
- linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- nlink: 1 },
- { path: '/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: '100644',
- type: 'Link',
- depth: 1,
- size: 200,
- linkpath: path.join(target, '200-hard'),
- nlink: 2 },
- { path: '/c.txt',
- mode: '100644',
- type: 'File',
- depth: 1,
- size: 513,
- linkpath: undefined,
- nlink: 1 },
- { path: '/cc.txt',
- mode: '100644',
- type: 'File',
- depth: 1,
- size: 513,
- linkpath: undefined,
- nlink: 1 },
- { path: '/r',
- mode: '40755',
- type: 'Directory',
- depth: 1,
- linkpath: undefined },
- { path: '/r/e',
- mode: '40755',
- type: 'Directory',
- depth: 2,
- linkpath: undefined },
- { path: '/r/e/a',
- mode: '40755',
- type: 'Directory',
- depth: 3,
- linkpath: undefined },
- { path: '/r/e/a/l',
- mode: '40755',
- type: 'Directory',
- depth: 4,
- linkpath: undefined },
- { path: '/r/e/a/l/l',
- mode: '40755',
- type: 'Directory',
- depth: 5,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y',
- mode: '40755',
- type: 'Directory',
- depth: 6,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-',
- mode: '40755',
- type: 'Directory',
- depth: 7,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d',
- mode: '40755',
- type: 'Directory',
- depth: 8,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e',
- mode: '40755',
- type: 'Directory',
- depth: 9,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e',
- mode: '40755',
- type: 'Directory',
- depth: 10,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p',
- mode: '40755',
- type: 'Directory',
- depth: 11,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-',
- mode: '40755',
- type: 'Directory',
- depth: 12,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f',
- mode: '40755',
- type: 'Directory',
- depth: 13,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o',
- mode: '40755',
- type: 'Directory',
- depth: 14,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l',
- mode: '40755',
- type: 'Directory',
- depth: 15,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d',
- mode: '40755',
- type: 'Directory',
- depth: 16,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e',
- mode: '40755',
- type: 'Directory',
- depth: 17,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r',
- mode: '40755',
- type: 'Directory',
- depth: 18,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-',
- mode: '40755',
- type: 'Directory',
- depth: 19,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p',
- mode: '40755',
- type: 'Directory',
- depth: 20,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a',
- mode: '40755',
- type: 'Directory',
- depth: 21,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t',
- mode: '40755',
- type: 'Directory',
- depth: 22,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h',
- mode: '40755',
- type: 'Directory',
- depth: 23,
- linkpath: undefined },
- { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: '100644',
- type: 'File',
- depth: 24,
- size: 100,
- linkpath: undefined,
- nlink: 1 },
- { path: '/Ω.txt',
- mode: '100644',
- type: 'File',
- depth: 1,
- size: 2,
- linkpath: undefined,
- nlink: 1 } ]
-
-
-
-// The extract class basically just pipes the input
-// to a Reader, and then to a fstream.DirWriter
-
-// So, this is as much a test of fstream.Reader and fstream.Writer
-// as it is of tar.Extract, but it sort of makes sense.
-
-tap.test("preclean", function (t) {
- require("rimraf").sync(__dirname + "/tmp/extract-test")
- t.pass("cleaned!")
- t.end()
-})
-
-tap.test("extract test", function (t) {
- var extract = tar.Extract(target)
- var inp = fs.createReadStream(file)
-
- // give it a weird buffer size to try to break in odd places
- inp.bufferSize = 1234
-
- inp.pipe(extract)
-
- extract.on("end", function () {
- t.equal(ee, expectEntries.length, "should see "+ee+" entries")
-
- // should get no more entries after end
- extract.removeAllListeners("entry")
- extract.on("entry", function (e) {
- t.fail("Should not get entries after end!")
- })
-
- next()
- })
-
- extract.on("entry", function (entry) {
- var found =
- { path: entry.path
- , mode: entry.props.mode.toString(8)
- , type: entry.props.type
- , depth: entry.props.depth
- , size: entry.props.size
- , linkpath: entry.props.linkpath
- , nlink: entry.props.nlink
- , dev: entry.props.dev
- , ino: entry.props.ino
- }
-
- var wanted = expectEntries[ee ++]
-
- t.equivalent(found, wanted, "tar entry " + ee + " " + wanted.path)
- })
-
- function next () {
- var r = fstream.Reader({ path: target
- , type: "Directory"
- // this is just to encourage consistency
- , sort: "alpha" })
-
- r.on("ready", function () {
- foundEntry(r)
- })
-
- r.on("end", finish)
-
- function foundEntry (entry) {
- var p = entry.path.substr(target.length)
- var found =
- { path: p
- , mode: entry.props.mode.toString(8)
- , type: entry.props.type
- , depth: entry.props.depth
- , size: entry.props.size
- , linkpath: entry.props.linkpath
- , nlink: entry.props.nlink
- }
-
- var wanted = expectFiles[ef ++]
-
- t.has(found, wanted, "unpacked file " + ef + " " + wanted.path)
-
- entry.on("entry", foundEntry)
- }
-
- function finish () {
- t.equal(ef, expectFiles.length, "should have "+ef+" items")
- t.end()
- }
- }
-})
diff --git a/node_modules/node-gyp/node_modules/tar/test/fixtures.tgz b/node_modules/node-gyp/node_modules/tar/test/fixtures.tgz
deleted file mode 100644
index f167602..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/fixtures.tgz
+++ /dev/null
Binary files differ
diff --git a/node_modules/node-gyp/node_modules/tar/test/header.js b/node_modules/node-gyp/node_modules/tar/test/header.js
deleted file mode 100644
index 8ea6f79..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/header.js
+++ /dev/null
@@ -1,183 +0,0 @@
-var tap = require("tap")
-var TarHeader = require("../lib/header.js")
-var tar = require("../tar.js")
-var fs = require("fs")
-
-
-var headers =
- { "a.txt file header":
- [ "612e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303430312031313635313336303333332030313234353100203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
- , { cksumValid: true
- , path: 'a.txt'
- , mode: 420
- , uid: 24561
- , gid: 20
- , size: 257
- , mtime: 1319493851
- , cksum: 5417
- , type: '0'
- , linkpath: ''
- , ustar: 'ustar\0'
- , ustarver: '00'
- , uname: 'isaacs'
- , gname: 'staff'
- , devmaj: 0
- , devmin: 0
- , fill: '' }
- ]
-
- , "omega pax": // the extended header from omega tar.
- [ "5061784865616465722fcea92e74787400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303137302031313534333731303631312030313530353100207800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
- , { cksumValid: true
- , path: 'PaxHeader/Ω.txt'
- , mode: 420
- , uid: 24561
- , gid: 20
- , size: 120
- , mtime: 1301254537
- , cksum: 6697
- , type: 'x'
- , linkpath: ''
- , ustar: 'ustar\0'
- , ustarver: '00'
- , uname: 'isaacs'
- , gname: 'staff'
- , devmaj: 0
- , devmin: 0
- , fill: '' } ]
-
- , "omega file header":
- [ "cea92e7478740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303030322031313534333731303631312030313330373200203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
- , { cksumValid: true
- , path: 'Ω.txt'
- , mode: 420
- , uid: 24561
- , gid: 20
- , size: 2
- , mtime: 1301254537
- , cksum: 5690
- , type: '0'
- , linkpath: ''
- , ustar: 'ustar\0'
- , ustarver: '00'
- , uname: 'isaacs'
- , gname: 'staff'
- , devmaj: 0
- , devmin: 0
- , fill: '' } ]
-
- , "foo.js file header":
- [ "666f6f2e6a730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303030342031313534333637303734312030313236313700203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
- , { cksumValid: true
- , path: 'foo.js'
- , mode: 420
- , uid: 24561
- , gid: 20
- , size: 4
- , mtime: 1301246433
- , cksum: 5519
- , type: '0'
- , linkpath: ''
- , ustar: 'ustar\0'
- , ustarver: '00'
- , uname: 'isaacs'
- , gname: 'staff'
- , devmaj: 0
- , devmin: 0
- , fill: '' }
- ]
-
- , "b.txt file header":
- [ "622e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030313030302031313635313336303637372030313234363100203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
- , { cksumValid: true
- , path: 'b.txt'
- , mode: 420
- , uid: 24561
- , gid: 20
- , size: 512
- , mtime: 1319494079
- , cksum: 5425
- , type: '0'
- , linkpath: ''
- , ustar: 'ustar\0'
- , ustarver: '00'
- , uname: 'isaacs'
- , gname: 'staff'
- , devmaj: 0
- , devmin: 0
- , fill: '' }
- ]
-
- , "deep nested file":
- [ "636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363633030303634342000303537373631200030303030323420003030303030303030313434203131363532313531353333203034333331340020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075737461720030306973616163730000000000000000000000000000000000000000000000000000737461666600000000000000000000000000000000000000000000000000000030303030303020003030303030302000722f652f612f6c2f6c2f792f2d2f642f652f652f702f2d2f662f6f2f6c2f642f652f722f2d2f702f612f742f680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
- , { cksumValid: true,
- path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc'
- , mode: 420
- , uid: 24561
- , gid: 20
- , size: 100
- , mtime: 1319687003
- , cksum: 18124
- , type: '0'
- , linkpath: ''
- , ustar: 'ustar\0'
- , ustarver: '00'
- , uname: 'isaacs'
- , gname: 'staff'
- , devmaj: 0
- , devmin: 0
- , fill: '' }
- ]
- }
-
-tap.test("parsing", function (t) {
- Object.keys(headers).forEach(function (name) {
- var h = headers[name]
- , header = new Buffer(h[0], "hex")
- , expect = h[1]
- , parsed = new TarHeader(header)
-
- // console.error(parsed)
- t.has(parsed, expect, "parse " + name)
- })
- t.end()
-})
-
-tap.test("encoding", function (t) {
- Object.keys(headers).forEach(function (name) {
- var h = headers[name]
- , expect = new Buffer(h[0], "hex")
- , encoded = TarHeader.encode(h[1])
-
- // might have slightly different bytes, since the standard
- // isn't very strict, but should have the same semantics
- // checkSum will be different, but cksumValid will be true
-
- var th = new TarHeader(encoded)
- delete h[1].block
- delete h[1].needExtended
- delete h[1].cksum
- t.has(th, h[1], "fields "+name)
- })
- t.end()
-})
-
-// test these manually. they're a bit rare to find in the wild
-tap.test("parseNumeric tests", function (t) {
- var parseNumeric = TarHeader.parseNumeric
- , numbers =
- { "303737373737373700": 2097151
- , "30373737373737373737373700": 8589934591
- , "303030303036343400": 420
- , "800000ffffffffffff": 281474976710655
- , "ffffff000000000001": -281474976710654
- , "ffffff000000000000": -281474976710655
- , "800000000000200000": 2097152
- , "8000000000001544c5": 1393861
- , "ffffffffffff1544c5": -15383354 }
- Object.keys(numbers).forEach(function (n) {
- var b = new Buffer(n, "hex")
- t.equal(parseNumeric(b), numbers[n], n + " === " + numbers[n])
- })
- t.end()
-})
diff --git a/node_modules/node-gyp/node_modules/tar/test/link-file-entry-collision.js b/node_modules/node-gyp/node_modules/tar/test/link-file-entry-collision.js
deleted file mode 100644
index cb3e2d5..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/link-file-entry-collision.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// Set the umask, so that it works the same everywhere.
-process.umask(parseInt('22', 8))
-
-var tap = require("tap")
- , tar = require("../tar.js")
- , fs = require("fs")
- , path = require("path")
- , file = path.resolve(__dirname, "link-file-entry-collision/bad-link.tar")
- , target = path.resolve(__dirname, "tmp/link-file-entry-collision")
- , index = 0
- , fstream = require("fstream")
- , mkdirp = require("mkdirp")
- , rimraf = require("rimraf")
-
-tap.test("preclean", function (t) {
- rimraf.sync(target)
- t.pass("cleaned!")
- t.end()
-})
-
-tap.test("extract test", function (t) {
- var extract = tar.Extract(target)
- var inp = fs.createReadStream(file)
- inp.pipe(extract)
-
- extract.on("end", function () {
- t.equal(fs.readFileSync(target + "/bad-link-target", "utf8"),
- "this should remain the same\n")
- t.equal(fs.readFileSync(target + "/a.txt", "utf8"),
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
- t.end()
- })
-})
-
-tap.test("cleanup", function (t) {
- rimraf.sync(target)
- t.pass("cleaned!")
- t.end()
-})
diff --git a/node_modules/node-gyp/node_modules/tar/test/link-file-entry-collision/bad-link.hex b/node_modules/node-gyp/node_modules/tar/test/link-file-entry-collision/bad-link.hex
deleted file mode 100644
index 99f5db0..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/link-file-entry-collision/bad-link.hex
+++ /dev/null
@@ -1,25 +0,0 @@
--- header for the link target --
-6261642d6c696e6b2d74617267657400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030363434200030303037363520003030303032342000303030303030303030333420313334363636353530353620303134333731002030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # bad-link-target.....................................................................................000644..000765..000024..00000000034.13466655056.014371..0...................................................................................................
-00757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # .ustar.00isaacs..........................staff...........................000000..000000.........................................................................................................................................................................
-
--- link target file contents (should not be overwritten) --
-746869732073686f756c642072656d61696e207468652073616d650a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # this.should.remain.the.same.....................................................................................................................................................................................................................................
-00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # ................................................................................................................................................................................................................................................................
-
--- header for the link named a.txt --
-612e74787400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003030303634342000303030373635200030303030323420003030303030303030303030203133343636363535303536203031353334320020316261642d6c696e6b2d746172676574000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # a.txt...............................................................................................000644..000765..000024..00000000000.13466655056.015342..1bad-link-target....................................................................................
-00757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # .ustar.00isaacs..........................staff...........................000000..000000.........................................................................................................................................................................
-
--- header for file entry which attempts to overwrite the link --
-612e7478740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030363434200030353737363120003030303032342000303030303030303034303120313136353133363033333320303132343531002030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # a.txt...............................................................................................000644..057761..000024..00000000401.11651360333.012451..0...................................................................................................
-00757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # .ustar.00isaacs..........................staff...........................000000..000000.........................................................................................................................................................................
-
--- contents that threaten to overwrite the link target --
-61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161 # aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-61000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # a...............................................................................................................................................................................................................................................................
-
--- tar eof --
-00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # ................................................................................................................................................................................................................................................................
-00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # ................................................................................................................................................................................................................................................................
-00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # ................................................................................................................................................................................................................................................................
-00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 # ................................................................................................................................................................................................................................................................
diff --git a/node_modules/node-gyp/node_modules/tar/test/link-file-entry-collision/bad-link.tar b/node_modules/node-gyp/node_modules/tar/test/link-file-entry-collision/bad-link.tar
deleted file mode 100644
index be0b0d2..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/link-file-entry-collision/bad-link.tar
+++ /dev/null
Binary files differ
diff --git a/node_modules/node-gyp/node_modules/tar/test/pack-no-proprietary.js b/node_modules/node-gyp/node_modules/tar/test/pack-no-proprietary.js
deleted file mode 100644
index d4b03a1..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/pack-no-proprietary.js
+++ /dev/null
@@ -1,886 +0,0 @@
-// This is exactly like test/pack.js, except that it's excluding
-// any proprietary headers.
-//
-// This loses some information about the filesystem, but creates
-// tarballs that are supported by more versions of tar, especially
-// old non-spec-compliant copies of gnutar.
-
-// the symlink file is excluded from git, because it makes
-// windows freak the hell out.
-var fs = require("fs")
- , path = require("path")
- , symlink = path.resolve(__dirname, "fixtures/symlink")
-try { fs.unlinkSync(symlink) } catch (e) {}
-fs.symlinkSync("./hardlink-1", symlink)
-process.on("exit", function () {
- fs.unlinkSync(symlink)
-})
-
-var tap = require("tap")
- , tar = require("../tar.js")
- , pkg = require("../package.json")
- , Pack = tar.Pack
- , fstream = require("fstream")
- , Reader = fstream.Reader
- , Writer = fstream.Writer
- , input = path.resolve(__dirname, "fixtures/")
- , target = path.resolve(__dirname, "tmp/pack.tar")
- , uid = process.getuid ? process.getuid() : 0
- , gid = process.getgid ? process.getgid() : 0
-
- , entries =
-
- // the global header and root fixtures/ dir are going to get
- // a different date each time, so omit that bit.
- // Also, dev/ino values differ across machines, so that's not
- // included.
- [ [ 'entry',
- { path: 'fixtures/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'extendedHeader',
- { path: 'PaxHeader/fixtures/200cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: 420,
- uid: uid,
- gid: gid,
- type: 'x',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- uid: uid,
- gid: gid,
- size: 200 } ]
-
- , [ 'entry',
- { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 200,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/a.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 257,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/b.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 512,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/c.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 513,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/cc.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 513,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/dir/',
- mode: 488,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/dir/sub/',
- mode: 488,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/foo.js',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 4,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/hardlink-1',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 200,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/hardlink-2',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 0,
- type: '1',
- linkpath: 'fixtures/hardlink-1',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/omega.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 2,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/packtest/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/packtest/omega.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 2,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/packtest/star.4.html',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 54081,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'extendedHeader',
- { path: 'PaxHeader/fixtures/packtest/Ω.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- type: 'x',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- { path: 'fixtures/packtest/Ω.txt',
- uid: uid,
- gid: gid,
- size: 2 } ]
-
- , [ 'entry',
- { path: 'fixtures/packtest/Ω.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 2,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 100,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/symlink',
- uid: uid,
- gid: gid,
- size: 0,
- type: '2',
- linkpath: 'hardlink-1',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'extendedHeader',
- { path: 'PaxHeader/fixtures/Ω.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- type: 'x',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- { path: "fixtures/Ω.txt"
- , uid: uid
- , gid: gid
- , size: 2 } ]
-
- , [ 'entry',
- { path: 'fixtures/Ω.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 2,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
- ]
-
-
-// first, make sure that the hardlinks are actually hardlinks, or this
-// won't work. Git has a way of replacing them with a copy.
-var hard1 = path.resolve(__dirname, "fixtures/hardlink-1")
- , hard2 = path.resolve(__dirname, "fixtures/hardlink-2")
- , fs = require("fs")
-
-try { fs.unlinkSync(hard2) } catch (e) {}
-fs.linkSync(hard1, hard2)
-
-tap.test("with global header", { timeout: 10000 }, function (t) {
- runTest(t, true)
-})
-
-tap.test("without global header", { timeout: 10000 }, function (t) {
- runTest(t, false)
-})
-
-function alphasort (a, b) {
- return a === b ? 0
- : a.toLowerCase() > b.toLowerCase() ? 1
- : a.toLowerCase() < b.toLowerCase() ? -1
- : a > b ? 1
- : -1
-}
-
-
-function runTest (t, doGH) {
- var reader = Reader({ path: input
- , filter: function () {
- return !this.path.match(/\.(tar|hex)$/)
- }
- , sort: alphasort
- })
-
- var props = doGH ? pkg : {}
- props.noProprietary = true
- var pack = Pack(props)
- var writer = Writer(target)
-
- // global header should be skipped regardless, since it has no content.
- var entry = 0
-
- t.ok(reader, "reader ok")
- t.ok(pack, "pack ok")
- t.ok(writer, "writer ok")
-
- pack.pipe(writer)
-
- var parse = tar.Parse()
- t.ok(parse, "parser should be ok")
-
- pack.on("data", function (c) {
- // console.error("PACK DATA")
- if (c.length !== 512) {
- // this one is too noisy, only assert if it'll be relevant
- t.equal(c.length, 512, "parser should emit data in 512byte blocks")
- }
- parse.write(c)
- })
-
- pack.on("end", function () {
- // console.error("PACK END")
- t.pass("parser ends")
- parse.end()
- })
-
- pack.on("error", function (er) {
- t.fail("pack error", er)
- })
-
- parse.on("error", function (er) {
- t.fail("parse error", er)
- })
-
- writer.on("error", function (er) {
- t.fail("writer error", er)
- })
-
- reader.on("error", function (er) {
- t.fail("reader error", er)
- })
-
- parse.on("*", function (ev, e) {
- var wanted = entries[entry++]
- if (!wanted) {
- t.fail("unexpected event: "+ev)
- return
- }
- t.equal(ev, wanted[0], "event type should be "+wanted[0])
-
- if (ev !== wanted[0] || e.path !== wanted[1].path) {
- console.error("wanted", wanted)
- console.error([ev, e.props])
- e.on("end", function () {
- console.error(e.fields)
- throw "break"
- })
- }
-
- t.has(e.props, wanted[1], "properties "+wanted[1].path)
- if (wanted[2]) {
- e.on("end", function () {
- if (!e.fields) {
- t.ok(e.fields, "should get fields")
- } else {
- t.has(e.fields, wanted[2], "should get expected fields")
- }
- })
- }
- })
-
- reader.pipe(pack)
-
- writer.on("close", function () {
- t.equal(entry, entries.length, "should get all expected entries")
- t.pass("it finished")
- t.end()
- })
-
-}
diff --git a/node_modules/node-gyp/node_modules/tar/test/pack.js b/node_modules/node-gyp/node_modules/tar/test/pack.js
deleted file mode 100644
index 0f16c07..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/pack.js
+++ /dev/null
@@ -1,952 +0,0 @@
-
-// the symlink file is excluded from git, because it makes
-// windows freak the hell out.
-var fs = require("fs")
- , path = require("path")
- , symlink = path.resolve(__dirname, "fixtures/symlink")
-try { fs.unlinkSync(symlink) } catch (e) {}
-fs.symlinkSync("./hardlink-1", symlink)
-process.on("exit", function () {
- fs.unlinkSync(symlink)
-})
-
-
-var tap = require("tap")
- , tar = require("../tar.js")
- , pkg = require("../package.json")
- , Pack = tar.Pack
- , fstream = require("fstream")
- , Reader = fstream.Reader
- , Writer = fstream.Writer
- , input = path.resolve(__dirname, "fixtures/")
- , target = path.resolve(__dirname, "tmp/pack.tar")
- , uid = process.getuid ? process.getuid() : 0
- , gid = process.getgid ? process.getgid() : 0
-
- , entries =
-
- // the global header and root fixtures/ dir are going to get
- // a different date each time, so omit that bit.
- // Also, dev/ino values differ across machines, so that's not
- // included.
- [ [ 'globalExtendedHeader',
- { path: 'PaxHeader/',
- mode: 438,
- uid: 0,
- gid: 0,
- type: 'g',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- { "NODETAR.author": pkg.author,
- "NODETAR.name": pkg.name,
- "NODETAR.description": pkg.description,
- "NODETAR.version": pkg.version,
- "NODETAR.repository.type": pkg.repository.type,
- "NODETAR.repository.url": pkg.repository.url,
- "NODETAR.main": pkg.main,
- "NODETAR.scripts.test": pkg.scripts.test } ]
-
- , [ 'entry',
- { path: 'fixtures/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'extendedHeader',
- { path: 'PaxHeader/fixtures/200cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: 420,
- uid: uid,
- gid: gid,
- type: 'x',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- 'NODETAR.depth': '1',
- 'NODETAR.type': 'File',
- nlink: 1,
- uid: uid,
- gid: gid,
- size: 200,
- 'NODETAR.blksize': '4096',
- 'NODETAR.blocks': '8' } ]
-
- , [ 'entry',
- { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 200,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '',
- 'NODETAR.depth': '1',
- 'NODETAR.type': 'File',
- nlink: 1,
- 'NODETAR.blksize': '4096',
- 'NODETAR.blocks': '8' } ]
-
- , [ 'entry',
- { path: 'fixtures/a.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 257,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/b.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 512,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/c.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 513,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/cc.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 513,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/dir/',
- mode: 488,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/dir/sub/',
- mode: 488,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
-
- , [ 'entry',
- { path: 'fixtures/foo.js',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 4,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/hardlink-1',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 200,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/hardlink-2',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 0,
- type: '1',
- linkpath: 'fixtures/hardlink-1',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/omega.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 2,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/packtest/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/packtest/omega.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 2,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/packtest/star.4.html',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 54081,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'extendedHeader',
- { path: 'PaxHeader/fixtures/packtest/Ω.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- type: 'x',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- { path: 'fixtures/packtest/Ω.txt',
- 'NODETAR.depth': '2',
- 'NODETAR.type': 'File',
- nlink: 1,
- uid: uid,
- gid: gid,
- size: 2,
- 'NODETAR.blksize': '4096',
- 'NODETAR.blocks': '8' } ]
-
- , [ 'entry',
- { path: 'fixtures/packtest/Ω.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 2,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '',
- 'NODETAR.depth': '2',
- 'NODETAR.type': 'File',
- nlink: 1,
- 'NODETAR.blksize': '4096',
- 'NODETAR.blocks': '8' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/',
- mode: 493,
- uid: uid,
- gid: gid,
- size: 0,
- type: '5',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 100,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'entry',
- { path: 'fixtures/symlink',
- uid: uid,
- gid: gid,
- size: 0,
- type: '2',
- linkpath: 'hardlink-1',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' } ]
-
- , [ 'extendedHeader',
- { path: 'PaxHeader/fixtures/Ω.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- type: 'x',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- { path: "fixtures/Ω.txt"
- , "NODETAR.depth": "1"
- , "NODETAR.type": "File"
- , nlink: 1
- , uid: uid
- , gid: gid
- , size: 2
- , "NODETAR.blksize": "4096"
- , "NODETAR.blocks": "8" } ]
-
- , [ 'entry',
- { path: 'fixtures/Ω.txt',
- mode: 420,
- uid: uid,
- gid: gid,
- size: 2,
- type: '0',
- linkpath: '',
- ustar: 'ustar\u0000',
- ustarver: '00',
- uname: '',
- gname: '',
- devmaj: 0,
- devmin: 0,
- fill: '',
- 'NODETAR.depth': '1',
- 'NODETAR.type': 'File',
- nlink: 1,
- 'NODETAR.blksize': '4096',
- 'NODETAR.blocks': '8' } ]
- ]
-
-
-// first, make sure that the hardlinks are actually hardlinks, or this
-// won't work. Git has a way of replacing them with a copy.
-var hard1 = path.resolve(__dirname, "fixtures/hardlink-1")
- , hard2 = path.resolve(__dirname, "fixtures/hardlink-2")
- , fs = require("fs")
-
-try { fs.unlinkSync(hard2) } catch (e) {}
-fs.linkSync(hard1, hard2)
-
-tap.test("with global header", { timeout: 10000 }, function (t) {
- runTest(t, true)
-})
-
-tap.test("without global header", { timeout: 10000 }, function (t) {
- runTest(t, false)
-})
-
-tap.test("with from base", { timeout: 10000 }, function (t) {
- runTest(t, true, true)
-})
-
-function alphasort (a, b) {
- return a === b ? 0
- : a.toLowerCase() > b.toLowerCase() ? 1
- : a.toLowerCase() < b.toLowerCase() ? -1
- : a > b ? 1
- : -1
-}
-
-
-function runTest (t, doGH, doFromBase) {
- var reader = Reader({ path: input
- , filter: function () {
- return !this.path.match(/\.(tar|hex)$/)
- }
- , sort: alphasort
- })
-
- var props = doGH ? pkg : {}
- if(doFromBase) props.fromBase = true;
-
- var pack = Pack(props)
- var writer = Writer(target)
-
- // skip the global header if we're not doing that.
- var entry = doGH ? 0 : 1
-
- t.ok(reader, "reader ok")
- t.ok(pack, "pack ok")
- t.ok(writer, "writer ok")
-
- pack.pipe(writer)
-
- var parse = tar.Parse()
- t.ok(parse, "parser should be ok")
-
- pack.on("data", function (c) {
- // console.error("PACK DATA")
- if (c.length !== 512) {
- // this one is too noisy, only assert if it'll be relevant
- t.equal(c.length, 512, "parser should emit data in 512byte blocks")
- }
- parse.write(c)
- })
-
- pack.on("end", function () {
- // console.error("PACK END")
- t.pass("parser ends")
- parse.end()
- })
-
- pack.on("error", function (er) {
- t.fail("pack error", er)
- })
-
- parse.on("error", function (er) {
- t.fail("parse error", er)
- })
-
- writer.on("error", function (er) {
- t.fail("writer error", er)
- })
-
- reader.on("error", function (er) {
- t.fail("reader error", er)
- })
-
- parse.on("*", function (ev, e) {
- var wanted = entries[entry++]
- if (!wanted) {
- t.fail("unexpected event: "+ev)
- return
- }
- t.equal(ev, wanted[0], "event type should be "+wanted[0])
-
- if(doFromBase) {
- if(wanted[1].path.indexOf('fixtures/') && wanted[1].path.length == 100)
- wanted[1].path = wanted[1].path.replace('fixtures/', '') + 'ccccccccc'
-
- if(wanted[1]) wanted[1].path = wanted[1].path.replace('fixtures/', '').replace('//', '/')
- if(wanted[1].path == '') wanted[1].path = '/'
- if(wanted[2] && wanted[2].path) wanted[2].path = wanted[2].path.replace('fixtures', '').replace(/^\//, '')
-
- wanted[1].linkpath = wanted[1].linkpath.replace('fixtures/', '')
- }
-
- if (ev !== wanted[0] || e.path !== wanted[1].path) {
- console.error("wanted", wanted)
- console.error([ev, e.props])
- e.on("end", function () {
- console.error(e.fields)
- throw "break"
- })
- }
-
-
- t.has(e.props, wanted[1], "properties "+wanted[1].path)
- if (wanted[2]) {
- e.on("end", function () {
- if (!e.fields) {
- t.ok(e.fields, "should get fields")
- } else {
- t.has(e.fields, wanted[2], "should get expected fields")
- }
- })
- }
- })
-
- reader.pipe(pack)
-
- writer.on("close", function () {
- t.equal(entry, entries.length, "should get all expected entries")
- t.pass("it finished")
- t.end()
- })
-
-}
diff --git a/node_modules/node-gyp/node_modules/tar/test/parse-discard.js b/node_modules/node-gyp/node_modules/tar/test/parse-discard.js
deleted file mode 100644
index da01a65..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/parse-discard.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var tap = require("tap")
- , tar = require("../tar.js")
- , fs = require("fs")
- , path = require("path")
- , file = path.resolve(__dirname, "fixtures/c.tar")
-
-tap.test("parser test", function (t) {
- var parser = tar.Parse()
- var total = 0
- var dataTotal = 0
-
- parser.on("end", function () {
-
- t.equals(total-513,dataTotal,'should have discarded only c.txt')
-
- t.end()
- })
-
- fs.createReadStream(file)
- .pipe(parser)
- .on('entry',function(entry){
- if(entry.path === 'c.txt') entry.abort()
-
- total += entry.size;
- entry.on('data',function(data){
- dataTotal += data.length
- })
- })
-})
diff --git a/node_modules/node-gyp/node_modules/tar/test/parse.js b/node_modules/node-gyp/node_modules/tar/test/parse.js
deleted file mode 100644
index f765a50..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/parse.js
+++ /dev/null
@@ -1,359 +0,0 @@
-var tap = require("tap")
- , tar = require("../tar.js")
- , fs = require("fs")
- , path = require("path")
- , file = path.resolve(__dirname, "fixtures/c.tar")
- , index = 0
-
- , expect =
-[ [ 'entry',
- { path: 'c.txt',
- mode: 420,
- uid: 24561,
- gid: 20,
- size: 513,
- mtime: new Date('Wed, 26 Oct 2011 01:10:58 GMT'),
- cksum: 5422,
- type: '0',
- linkpath: '',
- ustar: 'ustar\0',
- ustarver: '00',
- uname: 'isaacs',
- gname: 'staff',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- undefined ],
- [ 'entry',
- { path: 'cc.txt',
- mode: 420,
- uid: 24561,
- gid: 20,
- size: 513,
- mtime: new Date('Wed, 26 Oct 2011 01:11:02 GMT'),
- cksum: 5525,
- type: '0',
- linkpath: '',
- ustar: 'ustar\0',
- ustarver: '00',
- uname: 'isaacs',
- gname: 'staff',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- undefined ],
- [ 'entry',
- { path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: 420,
- uid: 24561,
- gid: 20,
- size: 100,
- mtime: new Date('Thu, 27 Oct 2011 03:43:23 GMT'),
- cksum: 18124,
- type: '0',
- linkpath: '',
- ustar: 'ustar\0',
- ustarver: '00',
- uname: 'isaacs',
- gname: 'staff',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- undefined ],
- [ 'entry',
- { path: 'Ω.txt',
- mode: 420,
- uid: 24561,
- gid: 20,
- size: 2,
- mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'),
- cksum: 5695,
- type: '0',
- linkpath: '',
- ustar: 'ustar\0',
- ustarver: '00',
- uname: 'isaacs',
- gname: 'staff',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- undefined ],
- [ 'extendedHeader',
- { path: 'PaxHeader/Ω.txt',
- mode: 420,
- uid: 24561,
- gid: 20,
- size: 120,
- mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'),
- cksum: 6702,
- type: 'x',
- linkpath: '',
- ustar: 'ustar\0',
- ustarver: '00',
- uname: 'isaacs',
- gname: 'staff',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- { path: 'Ω.txt',
- ctime: 1319737909,
- atime: 1319739061,
- dev: 234881026,
- ino: 51693379,
- nlink: 1 } ],
- [ 'entry',
- { path: 'Ω.txt',
- mode: 420,
- uid: 24561,
- gid: 20,
- size: 2,
- mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'),
- cksum: 5695,
- type: '0',
- linkpath: '',
- ustar: 'ustar\0',
- ustarver: '00',
- uname: 'isaacs',
- gname: 'staff',
- devmaj: 0,
- devmin: 0,
- fill: '',
- ctime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'),
- atime: new Date('Thu, 27 Oct 2011 18:11:01 GMT'),
- dev: 234881026,
- ino: 51693379,
- nlink: 1 },
- undefined ],
- [ 'extendedHeader',
- { path: 'PaxHeader/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: 420,
- uid: 24561,
- gid: 20,
- size: 353,
- mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'),
- cksum: 14488,
- type: 'x',
- linkpath: '',
- ustar: 'ustar\0',
- ustarver: '00',
- uname: 'isaacs',
- gname: 'staff',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- ctime: 1319686868,
- atime: 1319741254,
- 'LIBARCHIVE.creationtime': '1319686852',
- dev: 234881026,
- ino: 51681874,
- nlink: 1 } ],
- [ 'entry',
- { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: 420,
- uid: 24561,
- gid: 20,
- size: 200,
- mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'),
- cksum: 14570,
- type: '0',
- linkpath: '',
- ustar: 'ustar\0',
- ustarver: '00',
- uname: 'isaacs',
- gname: 'staff',
- devmaj: 0,
- devmin: 0,
- fill: '',
- ctime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'),
- atime: new Date('Thu, 27 Oct 2011 18:47:34 GMT'),
- 'LIBARCHIVE.creationtime': '1319686852',
- dev: 234881026,
- ino: 51681874,
- nlink: 1 },
- undefined ],
- [ 'longPath',
- { path: '././@LongLink',
- mode: 0,
- uid: 0,
- gid: 0,
- size: 201,
- mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'),
- cksum: 4976,
- type: 'L',
- linkpath: '',
- ustar: false },
- '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ],
- [ 'entry',
- { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: 420,
- uid: 1000,
- gid: 1000,
- size: 201,
- mtime: new Date('Thu, 27 Oct 2011 22:21:50 GMT'),
- cksum: 14086,
- type: '0',
- linkpath: '',
- ustar: false },
- undefined ],
- [ 'longLinkpath',
- { path: '././@LongLink',
- mode: 0,
- uid: 0,
- gid: 0,
- size: 201,
- mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'),
- cksum: 4975,
- type: 'K',
- linkpath: '',
- ustar: false },
- '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ],
- [ 'longPath',
- { path: '././@LongLink',
- mode: 0,
- uid: 0,
- gid: 0,
- size: 201,
- mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'),
- cksum: 4976,
- type: 'L',
- linkpath: '',
- ustar: false },
- '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL' ],
- [ 'entry',
- { path: '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL',
- mode: 511,
- uid: 1000,
- gid: 1000,
- size: 0,
- mtime: new Date('Fri, 28 Oct 2011 23:05:17 GMT'),
- cksum: 21603,
- type: '2',
- linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- ustar: false },
- undefined ],
- [ 'extendedHeader',
- { path: 'PaxHeader/200-hard',
- mode: 420,
- uid: 24561,
- gid: 20,
- size: 143,
- mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'),
- cksum: 6533,
- type: 'x',
- linkpath: '',
- ustar: 'ustar\0',
- ustarver: '00',
- uname: 'isaacs',
- gname: 'staff',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- { ctime: 1320617144,
- atime: 1320617232,
- 'LIBARCHIVE.creationtime': '1319686852',
- dev: 234881026,
- ino: 51681874,
- nlink: 2 } ],
- [ 'entry',
- { path: '200-hard',
- mode: 420,
- uid: 24561,
- gid: 20,
- size: 200,
- mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'),
- cksum: 5526,
- type: '0',
- linkpath: '',
- ustar: 'ustar\0',
- ustarver: '00',
- uname: 'isaacs',
- gname: 'staff',
- devmaj: 0,
- devmin: 0,
- fill: '',
- ctime: new Date('Sun, 06 Nov 2011 22:05:44 GMT'),
- atime: new Date('Sun, 06 Nov 2011 22:07:12 GMT'),
- 'LIBARCHIVE.creationtime': '1319686852',
- dev: 234881026,
- ino: 51681874,
- nlink: 2 },
- undefined ],
- [ 'extendedHeader',
- { path: 'PaxHeader/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: 420,
- uid: 24561,
- gid: 20,
- size: 353,
- mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'),
- cksum: 14488,
- type: 'x',
- linkpath: '',
- ustar: 'ustar\0',
- ustarver: '00',
- uname: 'isaacs',
- gname: 'staff',
- devmaj: 0,
- devmin: 0,
- fill: '' },
- { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- ctime: 1320617144,
- atime: 1320617406,
- 'LIBARCHIVE.creationtime': '1319686852',
- dev: 234881026,
- ino: 51681874,
- nlink: 2 } ],
- [ 'entry',
- { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
- mode: 420,
- uid: 24561,
- gid: 20,
- size: 0,
- mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'),
- cksum: 15173,
- type: '1',
- linkpath: '200-hard',
- ustar: 'ustar\0',
- ustarver: '00',
- uname: 'isaacs',
- gname: 'staff',
- devmaj: 0,
- devmin: 0,
- fill: '',
- ctime: new Date('Sun, 06 Nov 2011 22:05:44 GMT'),
- atime: new Date('Sun, 06 Nov 2011 22:10:06 GMT'),
- 'LIBARCHIVE.creationtime': '1319686852',
- dev: 234881026,
- ino: 51681874,
- nlink: 2 },
- undefined ] ]
-
-
-tap.test("parser test", function (t) {
- var parser = tar.Parse()
-
- parser.on("end", function () {
- t.equal(index, expect.length, "saw all expected events")
- t.end()
- })
-
- fs.createReadStream(file)
- .pipe(parser)
- .on("*", function (ev, entry) {
- var wanted = expect[index]
- if (!wanted) {
- return t.fail("Unexpected event: " + ev)
- }
- var result = [ev, entry.props]
- entry.on("end", function () {
- result.push(entry.fields || entry.body)
-
- t.equal(ev, wanted[0], index + " event type")
- t.equivalent(entry.props, wanted[1], wanted[1].path + " entry properties")
- if (wanted[2]) {
- t.equivalent(result[2], wanted[2], "metadata values")
- }
- index ++
- })
- })
-})
diff --git a/node_modules/node-gyp/node_modules/tar/test/zz-cleanup.js b/node_modules/node-gyp/node_modules/tar/test/zz-cleanup.js
deleted file mode 100644
index a00ff7f..0000000
--- a/node_modules/node-gyp/node_modules/tar/test/zz-cleanup.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// clean up the fixtures
-
-var tap = require("tap")
-, rimraf = require("rimraf")
-, test = tap.test
-, path = require("path")
-
-test("clean fixtures", function (t) {
- rimraf(path.resolve(__dirname, "fixtures"), function (er) {
- t.ifError(er, "rimraf ./fixtures/")
- t.end()
- })
-})
-
-test("clean tmp", function (t) {
- rimraf(path.resolve(__dirname, "tmp"), function (er) {
- t.ifError(er, "rimraf ./tmp/")
- t.end()
- })
-})
diff --git a/node_modules/node-gyp/package.json b/node_modules/node-gyp/package.json
deleted file mode 100644
index e4ed8dd..0000000
--- a/node_modules/node-gyp/package.json
+++ /dev/null
@@ -1,90 +0,0 @@
-{
- "_from": "node-gyp@^3.8.0",
- "_id": "node-gyp@3.8.0",
- "_inBundle": false,
- "_integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
- "_location": "/node-gyp",
- "_phantomChildren": {
- "block-stream": "0.0.9",
- "fstream": "1.0.12",
- "glob": "7.1.6",
- "inherits": "2.0.3"
- },
- "_requested": {
- "type": "range",
- "registry": true,
- "raw": "node-gyp@^3.8.0",
- "name": "node-gyp",
- "escapedName": "node-gyp",
- "rawSpec": "^3.8.0",
- "saveSpec": null,
- "fetchSpec": "^3.8.0"
- },
- "_requiredBy": [
- "/node-sass"
- ],
- "_resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
- "_shasum": "540304261c330e80d0d5edce253a68cb3964218c",
- "_spec": "node-gyp@^3.8.0",
- "_where": "/home/pruss/Dev/3-minute-website/node_modules/node-sass",
- "author": {
- "name": "Nathan Rajlich",
- "email": "nathan@tootallnate.net",
- "url": "http://tootallnate.net"
- },
- "bin": {
- "node-gyp": "bin/node-gyp.js"
- },
- "bugs": {
- "url": "https://github.com/nodejs/node-gyp/issues"
- },
- "bundleDependencies": false,
- "dependencies": {
- "fstream": "^1.0.0",
- "glob": "^7.0.3",
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "nopt": "2 || 3",
- "npmlog": "0 || 1 || 2 || 3 || 4",
- "osenv": "0",
- "request": "^2.87.0",
- "rimraf": "2",
- "semver": "~5.3.0",
- "tar": "^2.0.0",
- "which": "1"
- },
- "deprecated": false,
- "description": "Node.js native addon build tool",
- "devDependencies": {
- "bindings": "~1.2.1",
- "nan": "^2.0.0",
- "require-inject": "~1.3.0",
- "tape": "~4.2.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- },
- "homepage": "https://github.com/nodejs/node-gyp#readme",
- "installVersion": 9,
- "keywords": [
- "native",
- "addon",
- "module",
- "c",
- "c++",
- "bindings",
- "gyp"
- ],
- "license": "MIT",
- "main": "./lib/node-gyp.js",
- "name": "node-gyp",
- "preferGlobal": true,
- "repository": {
- "type": "git",
- "url": "git://github.com/nodejs/node-gyp.git"
- },
- "scripts": {
- "test": "tape test/test-*"
- },
- "version": "3.8.0"
-}
diff --git a/node_modules/node-gyp/src/win_delay_load_hook.cc b/node_modules/node-gyp/src/win_delay_load_hook.cc
deleted file mode 100644
index e75954b..0000000
--- a/node_modules/node-gyp/src/win_delay_load_hook.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * When this file is linked to a DLL, it sets up a delay-load hook that
- * intervenes when the DLL is trying to load 'node.exe' or 'iojs.exe'
- * dynamically. Instead of trying to locate the .exe file it'll just return
- * a handle to the process image.
- *
- * This allows compiled addons to work when node.exe or iojs.exe is renamed.
- */
-
-#ifdef _MSC_VER
-
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-
-#include <windows.h>
-
-#include <delayimp.h>
-#include <string.h>
-
-static FARPROC WINAPI load_exe_hook(unsigned int event, DelayLoadInfo* info) {
- HMODULE m;
- if (event != dliNotePreLoadLibrary)
- return NULL;
-
- if (_stricmp(info->szDll, "iojs.exe") != 0 &&
- _stricmp(info->szDll, "node.exe") != 0)
- return NULL;
-
- m = GetModuleHandle(NULL);
- return (FARPROC) m;
-}
-
-decltype(__pfnDliNotifyHook2) __pfnDliNotifyHook2 = load_exe_hook;
-
-#endif
diff --git a/node_modules/node-gyp/test/docker.sh b/node_modules/node-gyp/test/docker.sh
deleted file mode 100755
index ac21aa8..0000000
--- a/node_modules/node-gyp/test/docker.sh
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/bin/bash
-
-#set -e
-
-test_node_versions="0.8.28 0.10.40 0.12.7 4.3.0 5.6.0"
-test_iojs_versions="1.8.4 2.4.0 3.3.0"
-
-myuid=$(id -u)
-mygid=$(id -g)
-__dirname="$(CDPATH= cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-dot_node_gyp=${__dirname}/.node-gyp/
-
-# borrows from https://github.com/rvagg/dnt/
-
-# Simple setup function for a container:
-# setup_container(image id, base image, commands to run to set up)
-setup_container() {
- local container_id="$1"
- local base_container="$2"
- local run_cmd="$3"
-
- # Does this image exist? If yes, ignore
- docker inspect "$container_id" &> /dev/null
- if [[ $? -eq 0 ]]; then
- echo "Found existing container [$container_id]"
- else
- # No such image, so make it
- echo "Did not find container [$container_id], creating..."
- docker run -i $base_container /bin/bash -c "$run_cmd"
- sleep 2
- docker commit $(docker ps -l -q) $container_id
- fi
-}
-
-# Run tests inside each of the versioned containers, copy cwd into npm's copy of node-gyp
-# so it'll be invoked by npm when a compile is needed
-# run_tests(version, test-commands)
-run_tests() {
- local version="$1"
- local run_cmd="$2"
-
- run_cmd="rsync -aAXx --delete --exclude .git --exclude build /node-gyp-src/ /usr/lib/node_modules/npm/node_modules/node-gyp/;
- /bin/su -s /bin/bash node-gyp -c 'cd && ${run_cmd}'"
-
- rm -rf $dot_node_gyp
- mkdir $dot_node_gyp
-
- docker run \
- --rm -i \
- -v ~/.npm/:/node-gyp/.npm/ \
- -v ${dot_node_gyp}:/node-gyp/.node-gyp/ \
- -v $(pwd):/node-gyp-src/:ro \
- node-gyp-test/${version} /bin/bash -c "${run_cmd}"
-}
-
-# A base image with build tools and a user account
-setup_container "node-gyp-test/base" "ubuntu:14.04" "
- adduser --gecos node-gyp --home /node-gyp/ --disabled-login node-gyp --uid $myuid &&
- echo "node-gyp:node-gyp" | chpasswd &&
- apt-get update &&
- apt-get install -y build-essential python git rsync curl
-"
-
-# An image on top of the base containing clones of repos we want to use for testing
-setup_container "node-gyp-test/clones" "node-gyp-test/base" "
- cd /node-gyp/ && git clone https://github.com/justmoon/node-bignum.git &&
- cd /node-gyp/ && git clone https://github.com/bnoordhuis/node-buffertools.git &&
- chown -R node-gyp.node-gyp /node-gyp/
-"
-
-# An image for each of the node versions we want to test with that version installed and the latest npm
-for v in $test_node_versions; do
- setup_container "node-gyp-test/${v}" "node-gyp-test/clones" "
- curl -sL https://nodejs.org/dist/v${v}/node-v${v}-linux-x64.tar.gz | tar -zxv --strip-components=1 -C /usr/ &&
- npm install npm@latest -g &&
- node -v && npm -v
- "
-done
-
-# An image for each of the io.js versions we want to test with that version installed and the latest npm
-for v in $test_iojs_versions; do
- setup_container "node-gyp-test/${v}" "node-gyp-test/clones" "
- curl -sL https://iojs.org/dist/v${v}/iojs-v${v}-linux-x64.tar.gz | tar -zxv --strip-components=1 -C /usr/ &&
- npm install npm@latest -g &&
- node -v && npm -v
- "
-done
-
-# Run the tests for all of the test images we've created,
-# we should see node-gyp doing its download, configure and run thing
-# _NOTE: bignum doesn't compile on 0.8 currently so it'll fail for that version only_
-for v in $test_node_versions $test_iojs_versions; do
- run_tests $v "
- cd node-buffertools && npm install --loglevel=info && npm test && cd
- "
- # removed for now, too noisy: cd node-bignum && npm install --loglevel=info && npm test
-done
-
-# Test use of --target=x.y.z to compile against alternate versions
-test_download_node_version() {
- local run_with_ver="$1"
- local expected_dir="$2"
- local expected_ver="$3"
- run_tests $run_with_ver "cd node-buffertools && npm install --loglevel=info --target=${expected_ver}"
- local node_ver=$(cat "${dot_node_gyp}${expected_dir}/node_version.h" | grep '#define NODE_\w*_VERSION [0-9]*$')
- node_ver=$(echo $node_ver | sed 's/#define NODE_[A-Z]*_VERSION //g' | sed 's/ /./g')
- if [ "X$(echo $node_ver)" != "X${expected_ver}" ]; then
- echo "Did not download v${expected_ver} using --target, instead got: $(echo $node_ver)"
- exit 1
- fi
- echo "Verified correct download of [v${node_ver}]"
-}
-
-test_download_node_version "0.12.7" "0.10.30/src" "0.10.30"
-test_download_node_version "3.3.0" "iojs-1.8.4/src" "1.8.4"
-# should download the headers file
-test_download_node_version "3.3.0" "iojs-3.3.0/include/node" "3.3.0"
-test_download_node_version "4.3.0" "4.3.0/include/node" "4.3.0"
-test_download_node_version "5.6.0" "5.6.0/include/node" "5.6.0"
-
-# TODO: test --dist-url by starting up a localhost server and serving up tarballs
-
-# testing --dist-url, using simple-proxy.js to make localhost work as a distribution
-# point for tarballs
-# we can test whether it uses the proxy because after 2 connections the proxy will
-# die and therefore should not be running at the end of the test, `nc` can tell us this
-run_tests "3.3.0" "
- (node /node-gyp-src/test/simple-proxy.js 8080 /foobar/ https://iojs.org/dist/ &) &&
- cd node-buffertools &&
- /node-gyp-src/bin/node-gyp.js --loglevel=info --dist-url=http://localhost:8080/foobar/ rebuild &&
- nc -z localhost 8080 && echo -e \"\\n\\n\\033[31mFAILED TO USE LOCAL PROXY\\033[39m\\n\\n\"
-"
-
-# REMOVE after next semver-major
-run_tests "3.3.0" "
- (node /node-gyp-src/test/simple-proxy.js 8080 /doobar/ https://iojs.org/dist/ &) &&
- cd node-buffertools &&
- NVM_IOJS_ORG_MIRROR=http://localhost:8080/doobar/ /node-gyp-src/bin/node-gyp.js --loglevel=info rebuild &&
- nc -z localhost 8080 && echo -e \"\\n\\n\\033[31mFAILED TO USE LOCAL PROXY\\033[39m\\n\\n\"
-"
-
-# REMOVE after next semver-major
-run_tests "0.12.7" "
- (node /node-gyp-src/test/simple-proxy.js 8080 /boombar/ https://nodejs.org/dist/ &) &&
- cd node-buffertools &&
- NVM_NODEJS_ORG_MIRROR=http://localhost:8080/boombar/ /node-gyp-src/bin/node-gyp.js --loglevel=info rebuild &&
- nc -z localhost 8080 && echo -e \"\\n\\n\\033[31mFAILED TO USE LOCAL PROXY\\033[39m\\n\\n\"
-"
-
-run_tests "3.3.0" "
- (node /node-gyp-src/test/simple-proxy.js 8080 /doobar/ https://iojs.org/dist/ &) &&
- cd node-buffertools &&
- IOJS_ORG_MIRROR=http://localhost:8080/doobar/ /node-gyp-src/bin/node-gyp.js --loglevel=info rebuild &&
- nc -z localhost 8080 && echo -e \"\\n\\n\\033[31mFAILED TO USE LOCAL PROXY\\033[39m\\n\\n\"
-"
-
-run_tests "0.12.7" "
- (node /node-gyp-src/test/simple-proxy.js 8080 /boombar/ https://nodejs.org/dist/ &) &&
- cd node-buffertools &&
- NODEJS_ORG_MIRROR=http://localhost:8080/boombar/ /node-gyp-src/bin/node-gyp.js --loglevel=info rebuild &&
- nc -z localhost 8080 && echo -e \"\\n\\n\\033[31mFAILED TO USE LOCAL PROXY\\033[39m\\n\\n\"
-"
-
-rm -rf $dot_node_gyp
diff --git a/node_modules/node-gyp/test/fixtures/ca-bundle.crt b/node_modules/node-gyp/test/fixtures/ca-bundle.crt
deleted file mode 100644
index fb1dea9..0000000
--- a/node_modules/node-gyp/test/fixtures/ca-bundle.crt
+++ /dev/null
@@ -1,40 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDJjCCAg4CAhnOMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNVBAYTAlVTMQswCQYD
-VQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZMBcGA1UECgwQU3Ryb25n
-TG9vcCwgSW5jLjESMBAGA1UECwwJU3Ryb25nT3BzMRowGAYDVQQDDBFjYS5zdHJv
-bmdsb29wLmNvbTAeFw0xNTEyMDgyMzM1MzNaFw00MzA0MjQyMzM1MzNaMBkxFzAV
-BgNVBAMMDnN0cm9uZ2xvb3AuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAwOYI7OZ2FX/YjRgLZoDQlbPc5UZXU/j0e1wwiJNPtPEax9Y5Uoza0Pnt
-Ikzkc2SfvQ+IJrhXo385tI0W5juuqbHnE7UrjUuPjUX6NHevkxcs/flmjan5wnZM
-cPsGhH71WDuUEEflvZihf2Se2x+xgZtMhc5XGmVmRuZFYKvkgUhA2/w8/QrK+jPT
-n9QRJxZjWNh2RBdC1B7u4jffSmOSUljYFH1I2eTeY+Rdi6YUIYSU9gEoZxsv3Tia
-SomfMF5jt2Mouo6MzA+IhLvvFjcrcph1Qxgi9RkfdCMMd+Ipm9YWELkyG1bDRpQy
-0iyHD4gvVsAqz1Y2KdRSdc3Kt+nTqwIDAQABoxkwFzAVBgNVHREEDjAMhwQAAAAA
-hwR/AAABMA0GCSqGSIb3DQEBBQUAA4IBAQAhy4J0hML3NgmDRHdL5/iTucBe22Mf
-jJjg2aifD1S187dHm+Il4qZNO2plWwAhN0h704f+8wpsaALxUvBIu6nvlvcMP5PH
-jGN5JLe2Km3UaPvYOQU2SgacLilu+uBcIo2JSHLV6O7ziqUj5Gior6YxDLCtEZie
-Ea8aX5/YjuACtEMJ1JjRqjgkM66XAoUe0E8onOK3FgTIO3tGoTJwRp0zS50pFuP0
-PsZtT04ck6mmXEXXknNoAyBCvPypfms9OHqcUIW9fiQnrGbS/Ri4QSQYj0DtFk/1
-na4fY1gf3zTHxH8259b/TOOaPfTnCEsOQtjUrWNR4xhmVZ+HJy4yytUW
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDbzCCAlcCAmm6MA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNVBAYTAlVTMQswCQYD
-VQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZMBcGA1UECgwQU3Ryb25n
-TG9vcCwgSW5jLjESMBAGA1UECwwJU3Ryb25nT3BzMRowGAYDVQQDDBFjYS5zdHJv
-bmdsb29wLmNvbTAeFw0xNTEyMDgyMzM1MzNaFw00MzA0MjQyMzM1MzNaMH0xCzAJ
-BgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZ
-MBcGA1UECgwQU3Ryb25nTG9vcCwgSW5jLjESMBAGA1UECwwJU3Ryb25nT3BzMRow
-GAYDVQQDDBFjYS5zdHJvbmdsb29wLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBANfj86jkvvYDjHBgiqWhk9Cj+bqiMq3MqnV0CBO4iuK33Fo6XssE
-H+yVdXlIBFbFe6t655MdBVOR2Sfj7WqNh96vhu6PyDHiwcQlTaiLU6nhIed1J4Wv
-lvnJHFmp8Wbtx5AgLT4UYu03ftvXEl2DLi3vhSL2tRM1ebXHB/KPbRWkb25DPX0P
-foOHot3f2dgNe2x6kponf7E/QDmAu3s7Nlkfh+ryDhgGU7wocXEhXbprNqRqOGNo
-xbXgUI+/9XDxYT/7Gn5LF/fPjtN+aB0SKMnTsDhprVlZie83mlqJ46fOOrR+vrsQ
-mi/1m/TadrARtZoIExC/cQRdVM05EK4tUa8CAwEAATANBgkqhkiG9w0BAQsFAAOC
-AQEAQ7k5WhyhDTIGYCNzRnrMHWSzGqa1y4tJMW06wafJNRqTm1cthq1ibc6Hfq5a
-K10K0qMcgauRTfQ1MWrVCTW/KnJ1vkhiTOH+RvxapGn84gSaRmV6KZen0+gMsgae
-KEGe/3Hn+PmDVV+PTamHgPACfpTww38WHIe/7Ce9gHfG7MZ8cKHNZhDy0IAYPln+
-YRwMLd7JNQffHAbWb2CE1mcea4H/12U8JZW5tHCF6y9V+7IuDzqwIrLKcW3lG17n
-VUG6ODF/Ryqn3V5X+TL91YyXi6c34y34IpC7MQDV/67U7+5Bp5CfeDPWW2wVSrW+
-uGZtfEvhbNm6m2i4UNmpCXxUZQ==
------END CERTIFICATE-----
diff --git a/node_modules/node-gyp/test/fixtures/ca.crt b/node_modules/node-gyp/test/fixtures/ca.crt
deleted file mode 100644
index 9d2755a..0000000
--- a/node_modules/node-gyp/test/fixtures/ca.crt
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDbzCCAlcCAmm6MA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNVBAYTAlVTMQswCQYD
-VQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZMBcGA1UECgwQU3Ryb25n
-TG9vcCwgSW5jLjESMBAGA1UECwwJU3Ryb25nT3BzMRowGAYDVQQDDBFjYS5zdHJv
-bmdsb29wLmNvbTAeFw0xNTEyMDgyMzM1MzNaFw00MzA0MjQyMzM1MzNaMH0xCzAJ
-BgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZ
-MBcGA1UECgwQU3Ryb25nTG9vcCwgSW5jLjESMBAGA1UECwwJU3Ryb25nT3BzMRow
-GAYDVQQDDBFjYS5zdHJvbmdsb29wLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBANfj86jkvvYDjHBgiqWhk9Cj+bqiMq3MqnV0CBO4iuK33Fo6XssE
-H+yVdXlIBFbFe6t655MdBVOR2Sfj7WqNh96vhu6PyDHiwcQlTaiLU6nhIed1J4Wv
-lvnJHFmp8Wbtx5AgLT4UYu03ftvXEl2DLi3vhSL2tRM1ebXHB/KPbRWkb25DPX0P
-foOHot3f2dgNe2x6kponf7E/QDmAu3s7Nlkfh+ryDhgGU7wocXEhXbprNqRqOGNo
-xbXgUI+/9XDxYT/7Gn5LF/fPjtN+aB0SKMnTsDhprVlZie83mlqJ46fOOrR+vrsQ
-mi/1m/TadrARtZoIExC/cQRdVM05EK4tUa8CAwEAATANBgkqhkiG9w0BAQsFAAOC
-AQEAQ7k5WhyhDTIGYCNzRnrMHWSzGqa1y4tJMW06wafJNRqTm1cthq1ibc6Hfq5a
-K10K0qMcgauRTfQ1MWrVCTW/KnJ1vkhiTOH+RvxapGn84gSaRmV6KZen0+gMsgae
-KEGe/3Hn+PmDVV+PTamHgPACfpTww38WHIe/7Ce9gHfG7MZ8cKHNZhDy0IAYPln+
-YRwMLd7JNQffHAbWb2CE1mcea4H/12U8JZW5tHCF6y9V+7IuDzqwIrLKcW3lG17n
-VUG6ODF/Ryqn3V5X+TL91YyXi6c34y34IpC7MQDV/67U7+5Bp5CfeDPWW2wVSrW+
-uGZtfEvhbNm6m2i4UNmpCXxUZQ==
------END CERTIFICATE-----
diff --git a/node_modules/node-gyp/test/fixtures/server.crt b/node_modules/node-gyp/test/fixtures/server.crt
deleted file mode 100644
index fe13bb9..0000000
--- a/node_modules/node-gyp/test/fixtures/server.crt
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDJjCCAg4CAhnOMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNVBAYTAlVTMQswCQYD
-VQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEZMBcGA1UECgwQU3Ryb25n
-TG9vcCwgSW5jLjESMBAGA1UECwwJU3Ryb25nT3BzMRowGAYDVQQDDBFjYS5zdHJv
-bmdsb29wLmNvbTAeFw0xNTEyMDgyMzM1MzNaFw00MzA0MjQyMzM1MzNaMBkxFzAV
-BgNVBAMMDnN0cm9uZ2xvb3AuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAwOYI7OZ2FX/YjRgLZoDQlbPc5UZXU/j0e1wwiJNPtPEax9Y5Uoza0Pnt
-Ikzkc2SfvQ+IJrhXo385tI0W5juuqbHnE7UrjUuPjUX6NHevkxcs/flmjan5wnZM
-cPsGhH71WDuUEEflvZihf2Se2x+xgZtMhc5XGmVmRuZFYKvkgUhA2/w8/QrK+jPT
-n9QRJxZjWNh2RBdC1B7u4jffSmOSUljYFH1I2eTeY+Rdi6YUIYSU9gEoZxsv3Tia
-SomfMF5jt2Mouo6MzA+IhLvvFjcrcph1Qxgi9RkfdCMMd+Ipm9YWELkyG1bDRpQy
-0iyHD4gvVsAqz1Y2KdRSdc3Kt+nTqwIDAQABoxkwFzAVBgNVHREEDjAMhwQAAAAA
-hwR/AAABMA0GCSqGSIb3DQEBBQUAA4IBAQAhy4J0hML3NgmDRHdL5/iTucBe22Mf
-jJjg2aifD1S187dHm+Il4qZNO2plWwAhN0h704f+8wpsaALxUvBIu6nvlvcMP5PH
-jGN5JLe2Km3UaPvYOQU2SgacLilu+uBcIo2JSHLV6O7ziqUj5Gior6YxDLCtEZie
-Ea8aX5/YjuACtEMJ1JjRqjgkM66XAoUe0E8onOK3FgTIO3tGoTJwRp0zS50pFuP0
-PsZtT04ck6mmXEXXknNoAyBCvPypfms9OHqcUIW9fiQnrGbS/Ri4QSQYj0DtFk/1
-na4fY1gf3zTHxH8259b/TOOaPfTnCEsOQtjUrWNR4xhmVZ+HJy4yytUW
------END CERTIFICATE-----
diff --git a/node_modules/node-gyp/test/fixtures/server.key b/node_modules/node-gyp/test/fixtures/server.key
deleted file mode 100644
index f8227f4..0000000
--- a/node_modules/node-gyp/test/fixtures/server.key
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDA5gjs5nYVf9iN
-GAtmgNCVs9zlRldT+PR7XDCIk0+08RrH1jlSjNrQ+e0iTORzZJ+9D4gmuFejfzm0
-jRbmO66psecTtSuNS4+NRfo0d6+TFyz9+WaNqfnCdkxw+waEfvVYO5QQR+W9mKF/
-ZJ7bH7GBm0yFzlcaZWZG5kVgq+SBSEDb/Dz9Csr6M9Of1BEnFmNY2HZEF0LUHu7i
-N99KY5JSWNgUfUjZ5N5j5F2LphQhhJT2AShnGy/dOJpKiZ8wXmO3Yyi6jozMD4iE
-u+8WNytymHVDGCL1GR90Iwx34imb1hYQuTIbVsNGlDLSLIcPiC9WwCrPVjYp1FJ1
-zcq36dOrAgMBAAECggEACg60Xm2xsHNG/ixHw+NpfLSxCr89JGKxlJD88tIDcOK1
-S8AOoxA3BHhTddteeenALmJV7fbkkuC6SICmtgBcnfppmuxyRd6vsGT6o6ut2tR1
-gxRy1WYMYKg8WhOshlH8RspscODeyKDhorvDUJd5cNGBDuTwQ68PwxiUe3La6iac
-EVQoKohg9EmRIhMF1i8I00zXE8p3XENrlTc491ipc+gLPIP5vtqHyQztEUkZHkWd
-dXbs+n1hGCr+4FxrphGYEW80HINzmume7dGChr8nvF4ZZcuWW13DJuNim6pQno1i
-hM8VdXm8XphLh0XEGI5OCfu/CetkBILZRXKltZk6AQKBgQDoBqJzRlp7regYNU4q
-usfS+43tPNaJ0o4DIzcLawqpmK/B/cZStzHl14Sm62BVkKV6cnWAJPeLkENPMFoV
-7Q7wLZBJxpPzqXkpeiDkKN4Wovca891Rffne5Sz6IDB5mOxMjfKIEPd5RkmB5Lkp
-qQLwm3YJ2AJcLagG/Gi1DFDRAQKBgQDU1G9T43Mjke6TXG0u7gCSb+VwyDRsrvJA
-u2vy6+MANRc1EEF31YLmTKOU5XxUmhtIu7TUbgPoNi0HuRFXx4Zul3BPlAosLMJv
-kNQbA/9d0YQAfSgTsploN5CX65dLZ4ejIzVgDZREzpIBWTze6YZTA2DT5iOIet84
-DD5DujY4qwKBgG0PuUo/9oYOD3tZiv1wwD5+uY6auykbTF9TLStzzBY9y9d+hrsY
-mx6zOAoRtz1g+TdeF7b9KVJzo//T9XQ68nuYnyreaWrt7SK+4jj8sK+pOEd1+0Cz
-20CXLpX/jWmKpP+y9R5aA0kA7cpdjV90rwoTuN8Vpr5XQ5TNDhaTzGUBAoGABYig
-fGXlkH8y3NICZL37ddNC+/O4qTrDQbudyusnM9ItkEuj6CG9DY/gkPaGjQyUuQdo
-ZD2YDGmcMh81vDqL3ERDv03yFcP0KkJxwWIRObdA32JhsGFsa7FGKS0O+f7vH+bC
-dITl3gQg97gCRSl9PJtR4TCSq/HF7Acld01YK5ECgYEAwLFB5JIuxrowJe74cCMP
-n5Rwuc8vWdOsg+ytvQTv0/hVCdzcaLet6YvagnWTWaU7PUwTFxZs/mLQ9CAWVutK
-IRzs/GWxGFjH5xotDaJdDDzSdQye4tUqvUVxv7zzzsVycCPBYFkyRQ8Tmr5FLtUJ
-Cl48TZ6J8Rx5avjdtOw3QC8=
------END PRIVATE KEY-----
diff --git a/node_modules/node-gyp/test/fixtures/test-charmap.py b/node_modules/node-gyp/test/fixtures/test-charmap.py
deleted file mode 100644
index d9fa6fb..0000000
--- a/node_modules/node-gyp/test/fixtures/test-charmap.py
+++ /dev/null
@@ -1,22 +0,0 @@
-import sys
-import locale
-
-reload(sys)
-
-def main():
- encoding = locale.getdefaultlocale()[1]
- if not encoding:
- return False
-
- sys.setdefaultencoding(encoding)
- textmap = {
- 'cp936': u'\u4e2d\u6587',
- 'cp1252': u'Lat\u012Bna',
- 'cp932': u'\u306b\u307b\u3093\u3054'
- }
- if textmap.has_key(encoding):
- print textmap[encoding]
- return True
-
-if __name__ == '__main__':
- print main()
diff --git a/node_modules/node-gyp/test/process-exec-sync.js b/node_modules/node-gyp/test/process-exec-sync.js
deleted file mode 100644
index 859cbc1..0000000
--- a/node_modules/node-gyp/test/process-exec-sync.js
+++ /dev/null
@@ -1,138 +0,0 @@
-'use strict'
-
-var fs = require('graceful-fs')
-var child_process = require('child_process')
-
-if (!String.prototype.startsWith) {
- String.prototype.startsWith = function(search, pos) {
- return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search
- }
-}
-
-function processExecSync(file, args, options) {
- var child, error, timeout, tmpdir, command, quote
- command = makeCommand(file, args)
-
- /*
- this function emulates child_process.execSync for legacy node <= 0.10.x
- derived from https://github.com/gvarsanyi/sync-exec/blob/master/js/sync-exec.js
- */
-
- options = options || {}
- // init timeout
- timeout = Date.now() + options.timeout
- // init tmpdir
- var os_temp_base = '/tmp'
- var os = determine_os()
- os_temp_base = '/tmp'
-
- if (process.env.TMP) {
- os_temp_base = process.env.TMP
- }
-
- if (os_temp_base[os_temp_base.length - 1] !== '/') {
- os_temp_base += '/'
- }
-
- tmpdir = os_temp_base + 'processExecSync.' + Date.now() + Math.random()
- fs.mkdirSync(tmpdir)
-
- // init command
- if (os === 'linux') {
- command = '(' + command + ' > ' + tmpdir + '/stdout 2> ' + tmpdir +
- '/stderr); echo $? > ' + tmpdir + '/status'
- } else {
- command = '(' + command + ' > ' + tmpdir + '/stdout 2> ' + tmpdir +
- '/stderr) | echo %errorlevel% > ' + tmpdir + '/status | exit'
- }
-
- // init child
- child = child_process.exec(command, options)
-
- var maxTry = 100000 // increases the test time by 6 seconds on win-2016-node-0.10
- var tryCount = 0
- while (tryCount < maxTry) {
- try {
- var x = fs.readFileSync(tmpdir + '/status')
- if (x.toString() === '0') {
- break
- }
- } catch (ignore) {}
- tryCount++
- if (Date.now() > timeout) {
- error = child
- break
- }
- }
-
- ['stdout', 'stderr', 'status'].forEach(function (file) {
- child[file] = fs.readFileSync(tmpdir + '/' + file, options.encoding)
- setTimeout(unlinkFile, 500, tmpdir + '/' + file)
- })
-
- child.status = Number(child.status)
- if (child.status !== 0) {
- error = child
- }
-
- try {
- fs.rmdirSync(tmpdir)
- } catch (ignore) {}
- if (error) {
- throw error
- }
- return child.stdout
-}
-
-function makeCommand(file, args) {
- var command, quote
- command = file
- if (args.length > 0) {
- for(var i in args) {
- command = command + ' '
- if (args[i][0] === '-') {
- command = command + args[i]
- } else {
- if (!quote) {
- command = command + '\"'
- quote = true
- }
- command = command + args[i]
- if (quote) {
- if (args.length === (parseInt(i) + 1)) {
- command = command + '\"'
- }
- }
- }
- }
- }
- return command
-}
-
-function determine_os() {
- var os = ''
- var tmpVar = ''
- if (process.env.OSTYPE) {
- tmpVar = process.env.OSTYPE
- } else if (process.env.OS) {
- tmpVar = process.env.OS
- } else {
- //default is linux
- tmpVar = 'linux'
- }
-
- if (tmpVar.startsWith('linux')) {
- os = 'linux'
- }
- if (tmpVar.startsWith('win')) {
- os = 'win'
- }
-
- return os
-}
-
-function unlinkFile(file) {
- fs.unlinkSync(file)
-}
-
-module.exports = processExecSync
diff --git a/node_modules/node-gyp/test/simple-proxy.js b/node_modules/node-gyp/test/simple-proxy.js
deleted file mode 100644
index e55330c..0000000
--- a/node_modules/node-gyp/test/simple-proxy.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var http = require('http')
- , https = require('https')
- , server = http.createServer(handler)
- , port = +process.argv[2]
- , prefix = process.argv[3]
- , upstream = process.argv[4]
- , calls = 0
-
-server.listen(port)
-
-function handler (req, res) {
- if (req.url.indexOf(prefix) != 0)
- throw new Error('request url [' + req.url + '] does not start with [' + prefix + ']')
-
- var upstreamUrl = upstream + req.url.substring(prefix.length)
- console.log(req.url + ' -> ' + upstreamUrl)
- https.get(upstreamUrl, function (ures) {
- ures.on('end', function () {
- if (++calls == 2)
- server.close()
- })
- ures.pipe(res)
- })
-}
diff --git a/node_modules/node-gyp/test/test-addon.js b/node_modules/node-gyp/test/test-addon.js
deleted file mode 100644
index 89350ef..0000000
--- a/node_modules/node-gyp/test/test-addon.js
+++ /dev/null
@@ -1,113 +0,0 @@
-'use strict'
-
-var test = require('tape')
-var path = require('path')
-var fs = require('graceful-fs')
-var child_process = require('child_process')
-var addonPath = path.resolve(__dirname, 'node_modules', 'hello_world')
-var nodeGyp = path.resolve(__dirname, '..', 'bin', 'node-gyp.js')
-var execFileSync = child_process.execFileSync || require('./process-exec-sync')
-var execFile = child_process.execFile
-
-function runHello() {
- var testCode = "console.log(require('hello_world').hello())"
- return execFileSync(process.execPath, ['-e', testCode], { cwd: __dirname }).toString()
-}
-
-function getEncoding() {
- var code = 'import locale;print locale.getdefaultlocale()[1]'
- return execFileSync('python', ['-c', code]).toString().trim()
-}
-
-function checkCharmapValid() {
- var data
- try {
- data = execFileSync('python', ['fixtures/test-charmap.py'],
- { cwd: __dirname })
- } catch (err) {
- return false
- }
- var lines = data.toString().trim().split('\n')
- return lines.pop() === 'True'
-}
-
-test('build simple addon', function (t) {
- t.plan(3)
-
- // Set the loglevel otherwise the output disappears when run via 'npm test'
- var cmd = [nodeGyp, 'rebuild', '-C', addonPath, '--loglevel=verbose']
- var proc = execFile(process.execPath, cmd, function (err, stdout, stderr) {
- var logLines = stderr.toString().trim().split(/\r?\n/)
- var lastLine = logLines[logLines.length-1]
- t.strictEqual(err, null)
- t.strictEqual(lastLine, 'gyp info ok', 'should end in ok')
- t.strictEqual(runHello().trim(), 'world')
- })
- proc.stdout.setEncoding('utf-8')
- proc.stderr.setEncoding('utf-8')
-})
-
-test('build simple addon in path with non-ascii characters', function (t) {
- t.plan(1)
-
- if (!checkCharmapValid()) {
- return t.skip('python console app can\'t encode non-ascii character.')
- }
-
- var testDirNames = {
- 'cp936': '文件夹',
- 'cp1252': 'Latīna',
- 'cp932': 'フォルダ'
- }
- // Select non-ascii characters by current encoding
- var testDirName = testDirNames[getEncoding()]
- // If encoding is UTF-8 or other then no need to test
- if (!testDirName) {
- return t.skip('no need to test')
- }
-
- t.plan(3)
-
- var data, configPath = path.join(addonPath, 'build', 'config.gypi')
- try {
- data = fs.readFileSync(configPath, 'utf8')
- } catch (err) {
- t.error(err)
- return
- }
- var config = JSON.parse(data.replace(/\#.+\n/, ''))
- var nodeDir = config.variables.nodedir
- var testNodeDir = path.join(addonPath, testDirName)
- // Create symbol link to path with non-ascii characters
- try {
- fs.symlinkSync(nodeDir, testNodeDir, 'dir')
- } catch (err) {
- switch (err.code) {
- case 'EEXIST': break
- case 'EPERM':
- t.error(err, 'Please try to running console as an administrator')
- return
- default:
- t.error(err)
- return
- }
- }
-
- var cmd = [nodeGyp, 'rebuild', '-C', addonPath,
- '--loglevel=verbose', '-nodedir=' + testNodeDir]
- var proc = execFile(process.execPath, cmd, function (err, stdout, stderr) {
- try {
- fs.unlink(testNodeDir)
- } catch (err) {
- t.error(err)
- }
-
- var logLines = stderr.toString().trim().split(/\r?\n/)
- var lastLine = logLines[logLines.length-1]
- t.strictEqual(err, null)
- t.strictEqual(lastLine, 'gyp info ok', 'should end in ok')
- t.strictEqual(runHello().trim(), 'world')
- })
- proc.stdout.setEncoding('utf-8')
- proc.stderr.setEncoding('utf-8')
-})
diff --git a/node_modules/node-gyp/test/test-configure-python.js b/node_modules/node-gyp/test/test-configure-python.js
deleted file mode 100644
index f235bdb..0000000
--- a/node_modules/node-gyp/test/test-configure-python.js
+++ /dev/null
@@ -1,74 +0,0 @@
-'use strict'
-
-var test = require('tape')
-var path = require('path')
-var gyp = require('../lib/node-gyp')
-var requireInject = require('require-inject')
-var configure = requireInject('../lib/configure', {
- 'graceful-fs': {
- 'openSync': function (file, mode) { return 0; },
- 'closeSync': function (fd) { },
- 'writeFile': function (file, data, cb) { cb() },
- 'stat': function (file, cb) { cb(null, {}) }
- }
-})
-
-var EXPECTED_PYPATH = path.join(__dirname, '..', 'gyp', 'pylib')
-var SEPARATOR = process.platform == 'win32' ? ';' : ':'
-var SPAWN_RESULT = { on: function () { } }
-
-test('configure PYTHONPATH with no existing env', function (t) {
- t.plan(1)
-
- delete process.env.PYTHONPATH
-
- var prog = gyp()
- prog.parseArgv([])
- prog.spawn = function () {
- t.equal(process.env.PYTHONPATH, EXPECTED_PYPATH)
- return SPAWN_RESULT
- }
- configure(prog, [], t.fail)
-})
-
-test('configure PYTHONPATH with existing env of one dir', function (t) {
- t.plan(2)
-
- var existingPath = path.join('a', 'b')
- process.env.PYTHONPATH = existingPath
-
- var prog = gyp()
- prog.parseArgv([])
- prog.spawn = function () {
-
- t.equal(process.env.PYTHONPATH, [EXPECTED_PYPATH, existingPath].join(SEPARATOR))
-
- var dirs = process.env.PYTHONPATH.split(SEPARATOR)
- t.deepEqual(dirs, [EXPECTED_PYPATH, existingPath])
-
- return SPAWN_RESULT
- }
- configure(prog, [], t.fail)
-})
-
-test('configure PYTHONPATH with existing env of multiple dirs', function (t) {
- t.plan(2)
-
- var pythonDir1 = path.join('a', 'b')
- var pythonDir2 = path.join('b', 'c')
- var existingPath = [pythonDir1, pythonDir2].join(SEPARATOR)
- process.env.PYTHONPATH = existingPath
-
- var prog = gyp()
- prog.parseArgv([])
- prog.spawn = function () {
-
- t.equal(process.env.PYTHONPATH, [EXPECTED_PYPATH, existingPath].join(SEPARATOR))
-
- var dirs = process.env.PYTHONPATH.split(SEPARATOR)
- t.deepEqual(dirs, [EXPECTED_PYPATH, pythonDir1, pythonDir2])
-
- return SPAWN_RESULT
- }
- configure(prog, [], t.fail)
-})
diff --git a/node_modules/node-gyp/test/test-download.js b/node_modules/node-gyp/test/test-download.js
deleted file mode 100644
index 6e6f64f..0000000
--- a/node_modules/node-gyp/test/test-download.js
+++ /dev/null
@@ -1,102 +0,0 @@
-'use strict'
-
-var fs = require('fs')
-var http = require('http')
-var https = require('https')
-var test = require('tape')
-var install = require('../lib/install')
-
-test('download over http', function (t) {
- t.plan(2)
-
- var server = http.createServer(function (req, res) {
- t.strictEqual(req.headers['user-agent'],
- 'node-gyp v42 (node ' + process.version + ')')
- res.end('ok')
- server.close()
- })
-
- var host = '127.0.0.1'
- server.listen(0, host, function () {
- var port = this.address().port
- var gyp = {
- opts: {},
- version: '42',
- }
- var url = 'http://' + host + ':' + port
- var req = install.test.download(gyp, {}, url)
- req.on('response', function (res) {
- var body = ''
- res.setEncoding('utf8')
- res.on('data', function(data) {
- body += data
- })
- res.on('end', function() {
- t.strictEqual(body, 'ok')
- })
- })
- })
-})
-
-test('download over https with custom ca', function (t) {
- t.plan(3)
-
- var cert = fs.readFileSync(__dirname + '/fixtures/server.crt', 'utf8')
- var key = fs.readFileSync(__dirname + '/fixtures/server.key', 'utf8')
-
- var cafile = __dirname + '/fixtures/ca.crt'
- var ca = install.test.readCAFile(cafile)
- t.strictEqual(ca.length, 1)
-
- var options = { ca: ca, cert: cert, key: key }
- var server = https.createServer(options, function (req, res) {
- t.strictEqual(req.headers['user-agent'],
- 'node-gyp v42 (node ' + process.version + ')')
- res.end('ok')
- server.close()
- })
-
- server.on('clientError', function (err) {
- throw err
- })
-
- var host = '127.0.0.1'
- server.listen(8000, host, function () {
- var port = this.address().port
- var gyp = {
- opts: { cafile: cafile },
- version: '42',
- }
- var url = 'https://' + host + ':' + port
- var req = install.test.download(gyp, {}, url)
- req.on('response', function (res) {
- var body = ''
- res.setEncoding('utf8')
- res.on('data', function(data) {
- body += data
- })
- res.on('end', function() {
- t.strictEqual(body, 'ok')
- })
- })
- })
-})
-
-test('download with missing cafile', function (t) {
- t.plan(1)
- var gyp = {
- opts: { cafile: 'no.such.file' },
- }
- try {
- install.test.download(gyp, {}, 'http://bad/')
- } catch (e) {
- t.ok(/no.such.file/.test(e.message))
- }
-})
-
-test('check certificate splitting', function (t) {
- var cas = install.test.readCAFile(__dirname + '/fixtures/ca-bundle.crt')
- t.plan(2)
- t.strictEqual(cas.length, 2)
- t.notStrictEqual(cas[0], cas[1])
-})
diff --git a/node_modules/node-gyp/test/test-find-accessible-sync.js b/node_modules/node-gyp/test/test-find-accessible-sync.js
deleted file mode 100644
index d336243..0000000
--- a/node_modules/node-gyp/test/test-find-accessible-sync.js
+++ /dev/null
@@ -1,86 +0,0 @@
-'use strict'
-
-var test = require('tape')
-var path = require('path')
-var requireInject = require('require-inject')
-var configure = requireInject('../lib/configure', {
- 'graceful-fs': {
- 'closeSync': function (fd) { return undefined },
- 'openSync': function (path) {
- if (readableFiles.some(function (f) { return f === path} )) {
- return 0
- } else {
- var error = new Error('ENOENT - not found')
- throw error
- }
- }
- }
-})
-
-var dir = path.sep + 'testdir'
-var readableFile = 'readable_file'
-var anotherReadableFile = 'another_readable_file'
-var readableFileInDir = 'somedir' + path.sep + readableFile
-var readableFiles = [
- path.resolve(dir, readableFile),
- path.resolve(dir, anotherReadableFile),
- path.resolve(dir, readableFileInDir)
-]
-
-test('find accessible - empty array', function (t) {
- t.plan(1)
-
- var candidates = []
- var found = configure.test.findAccessibleSync('test', dir, candidates)
- t.strictEqual(found, undefined)
-})
-
-test('find accessible - single item array, readable', function (t) {
- t.plan(1)
-
- var candidates = [ readableFile ]
- var found = configure.test.findAccessibleSync('test', dir, candidates)
- t.strictEqual(found, path.resolve(dir, readableFile))
-})
-
-test('find accessible - single item array, readable in subdir', function (t) {
- t.plan(1)
-
- var candidates = [ readableFileInDir ]
- var found = configure.test.findAccessibleSync('test', dir, candidates)
- t.strictEqual(found, path.resolve(dir, readableFileInDir))
-})
-
-test('find accessible - single item array, unreadable', function (t) {
- t.plan(1)
-
- var candidates = [ 'unreadable_file' ]
- var found = configure.test.findAccessibleSync('test', dir, candidates)
- t.strictEqual(found, undefined)
-})
-
-
-test('find accessible - multi item array, no matches', function (t) {
- t.plan(1)
-
- var candidates = [ 'non_existent_file', 'unreadable_file' ]
- var found = configure.test.findAccessibleSync('test', dir, candidates)
- t.strictEqual(found, undefined)
-})
-
-
-test('find accessible - multi item array, single match', function (t) {
- t.plan(1)
-
- var candidates = [ 'non_existent_file', readableFile ]
- var found = configure.test.findAccessibleSync('test', dir, candidates)
- t.strictEqual(found, path.resolve(dir, readableFile))
-})
-
-test('find accessible - multi item array, return first match', function (t) {
- t.plan(1)
-
- var candidates = [ 'non_existent_file', anotherReadableFile, readableFile ]
- var found = configure.test.findAccessibleSync('test', dir, candidates)
- t.strictEqual(found, path.resolve(dir, anotherReadableFile))
-})
diff --git a/node_modules/node-gyp/test/test-find-node-directory.js b/node_modules/node-gyp/test/test-find-node-directory.js
deleted file mode 100644
index 46659d0..0000000
--- a/node_modules/node-gyp/test/test-find-node-directory.js
+++ /dev/null
@@ -1,115 +0,0 @@
-var test = require('tape')
-var path = require('path')
-var findNodeDirectory = require('../lib/find-node-directory')
-
-var platforms = ['darwin', 'freebsd', 'linux', 'sunos', 'win32', 'aix']
-
-// we should find the directory based on the directory
-// the script is running in and it should match the layout
-// in a build tree where npm is installed in
-// .... /deps/npm
-test('test find-node-directory - node install', function (t) {
- t.plan(platforms.length)
- for (var next = 0; next < platforms.length; next++) {
- var processObj = {execPath: '/x/y/bin/node', platform: platforms[next]}
- t.equal(
- findNodeDirectory('/x/deps/npm/node_modules/node-gyp/lib', processObj),
- path.join('/x'))
- }
-})
-
-// we should find the directory based on the directory
-// the script is running in and it should match the layout
-// in an installed tree where npm is installed in
-// .... /lib/node_modules/npm or .../node_modules/npm
-// depending on the patform
-test('test find-node-directory - node build', function (t) {
- t.plan(platforms.length)
- for (var next = 0; next < platforms.length; next++) {
- var processObj = {execPath: '/x/y/bin/node', platform: platforms[next]}
- if (platforms[next] === 'win32') {
- t.equal(
- findNodeDirectory('/y/node_modules/npm/node_modules/node-gyp/lib',
- processObj), path.join('/y'))
- } else {
- t.equal(
- findNodeDirectory('/y/lib/node_modules/npm/node_modules/node-gyp/lib',
- processObj), path.join('/y'))
- }
- }
-})
-
-// we should find the directory based on the execPath
-// for node and match because it was in the bin directory
-test('test find-node-directory - node in bin directory', function (t) {
- t.plan(platforms.length)
- for (var next = 0; next < platforms.length; next++) {
- var processObj = {execPath: '/x/y/bin/node', platform: platforms[next]}
- t.equal(
- findNodeDirectory('/nothere/npm/node_modules/node-gyp/lib', processObj),
- path.join('/x/y'))
- }
-})
-
-// we should find the directory based on the execPath
-// for node and match because it was in the Release directory
-test('test find-node-directory - node in build release dir', function (t) {
- t.plan(platforms.length)
- for (var next = 0; next < platforms.length; next++) {
- var processObj
- if (platforms[next] === 'win32') {
- processObj = {execPath: '/x/y/Release/node', platform: platforms[next]}
- } else {
- processObj = {execPath: '/x/y/out/Release/node',
- platform: platforms[next]}
- }
-
- t.equal(
- findNodeDirectory('/nothere/npm/node_modules/node-gyp/lib', processObj),
- path.join('/x/y'))
- }
-})
-
-// we should find the directory based on the execPath
-// for node and match because it was in the Debug directory
-test('test find-node-directory - node in Debug release dir', function (t) {
- t.plan(platforms.length)
- for (var next = 0; next < platforms.length; next++) {
- var processObj
- if (platforms[next] === 'win32') {
- processObj = {execPath: '/a/b/Debug/node', platform: platforms[next]}
- } else {
- processObj = {execPath: '/a/b/out/Debug/node', platform: platforms[next]}
- }
-
- t.equal(
- findNodeDirectory('/nothere/npm/node_modules/node-gyp/lib', processObj),
- path.join('/a/b'))
- }
-})
-
-// we should not find it as it will not match based on the execPath nor
-// the directory from which the script is running
-test('test find-node-directory - not found', function (t) {
- t.plan(platforms.length)
- for (var next = 0; next < platforms.length; next++) {
- var processObj = {execPath: '/x/y/z/y', platform:next}
- t.equal(findNodeDirectory('/a/b/c/d', processObj), '')
- }
-})
-
-// we should find the directory based on the directory
-// the script is running in and it should match the layout
-// in a build tree where npm is installed in
-// .... /deps/npm
-// same test as above but make sure additional directory entries
-// don't cause an issue
-test('test find-node-directory - node install', function (t) {
- t.plan(platforms.length)
- for (var next = 0; next < platforms.length; next++) {
- var processObj = {execPath: '/x/y/bin/node', platform: platforms[next]}
- t.equal(
- findNodeDirectory('/x/y/z/a/b/c/deps/npm/node_modules/node-gyp/lib',
- processObj), path.join('/x/y/z/a/b/c'))
- }
-})
diff --git a/node_modules/node-gyp/test/test-find-python.js b/node_modules/node-gyp/test/test-find-python.js
deleted file mode 100644
index 570eb18..0000000
--- a/node_modules/node-gyp/test/test-find-python.js
+++ /dev/null
@@ -1,339 +0,0 @@
-'use strict'
-
-var test = require('tape')
-var path = require('path')
-var configure = require('../lib/configure')
-var execFile = require('child_process').execFile
-var PythonFinder = configure.test.PythonFinder
-
-test('find python', function (t) {
- t.plan(4)
-
- configure.test.findPython('python', function (err, found) {
- t.strictEqual(err, null)
- var proc = execFile(found, ['-V'], function (err, stdout, stderr) {
- t.strictEqual(err, null)
- t.strictEqual(stdout, '')
- t.ok(/Python 2/.test(stderr))
- })
- proc.stdout.setEncoding('utf-8')
- proc.stderr.setEncoding('utf-8')
- })
-})
-
-function poison(object, property) {
- function fail() {
- throw new Error('Property ' + property + ' should not have been accessed.')
- }
- var descriptor = {
- configurable: true,
- enumerable: false,
- writable: true,
- getter: fail,
- setter: fail,
- }
- Object.defineProperty(object, property, descriptor)
-}
-
-// Work around a v0.10.x CI issue where path.resolve() on UNIX systems prefixes
-// Windows paths with the current working directory. v0.12 and up are free of
-// this issue because they use path.win32.resolve() which does the right thing.
-var resolve = path.win32 && path.win32.resolve || function() {
- function rstrip(s) { return s.replace(/\\+$/, '') }
- return [].slice.call(arguments).map(rstrip).join('\\')
-}
-
-function TestPythonFinder() { PythonFinder.apply(this, arguments) }
-TestPythonFinder.prototype = Object.create(PythonFinder.prototype)
-poison(TestPythonFinder.prototype, 'env')
-poison(TestPythonFinder.prototype, 'execFile')
-poison(TestPythonFinder.prototype, 'resolve')
-poison(TestPythonFinder.prototype, 'stat')
-poison(TestPythonFinder.prototype, 'which')
-poison(TestPythonFinder.prototype, 'win')
-
-test('find python - python', function (t) {
- t.plan(5)
-
- var f = new TestPythonFinder('python', done)
- f.which = function(program, cb) {
- t.strictEqual(program, 'python')
- cb(null, program)
- }
- f.execFile = function(program, args, opts, cb) {
- t.strictEqual(program, 'python')
- t.ok(/import sys/.test(args[1]))
- cb(null, '2.7.0')
- }
- f.checkPython()
-
- function done(err, python) {
- t.strictEqual(err, null)
- t.strictEqual(python, 'python')
- }
-})
-
-test('find python - python too old', function (t) {
- t.plan(4)
-
- var f = new TestPythonFinder('python', done)
- f.which = function(program, cb) {
- t.strictEqual(program, 'python')
- cb(null, program)
- }
- f.execFile = function(program, args, opts, cb) {
- t.strictEqual(program, 'python')
- t.ok(/import sys/.test(args[1]))
- cb(null, '2.3.4')
- }
- f.checkPython()
-
- function done(err, python) {
- t.ok(/is not supported by gyp/.test(err))
- }
-})
-
-test('find python - python too new', function (t) {
- t.plan(4)
-
- var f = new TestPythonFinder('python', done)
- f.which = function(program, cb) {
- t.strictEqual(program, 'python')
- cb(null, program)
- }
- f.execFile = function(program, args, opts, cb) {
- t.strictEqual(program, 'python')
- t.ok(/import sys/.test(args[1]))
- cb(null, '3.0.0')
- }
- f.checkPython()
-
- function done(err, python) {
- t.ok(/is not supported by gyp/.test(err))
- }
-})
-
-test('find python - no python', function (t) {
- t.plan(2)
-
- var f = new TestPythonFinder('python', done)
- f.which = function(program, cb) {
- t.strictEqual(program, 'python')
- cb(new Error('not found'))
- }
- f.checkPython()
-
- function done(err, python) {
- t.ok(/Can't find Python executable/.test(err))
- }
-})
-
-test('find python - no python2', function (t) {
- t.plan(6)
-
- var f = new TestPythonFinder('python2', done)
- f.which = function(program, cb) {
- f.which = function(program, cb) {
- t.strictEqual(program, 'python')
- cb(null, program)
- }
- t.strictEqual(program, 'python2')
- cb(new Error('not found'))
- }
- f.execFile = function(program, args, opts, cb) {
- t.strictEqual(program, 'python')
- t.ok(/import sys/.test(args[1]))
- cb(null, '2.7.0')
- }
- f.checkPython()
-
- function done(err, python) {
- t.strictEqual(err, null)
- t.strictEqual(python, 'python')
- }
-})
-
-test('find python - no python2, no python, unix', function (t) {
- t.plan(3)
-
- var f = new TestPythonFinder('python2', done)
- poison(f, 'checkPythonLauncher')
- f.win = false
-
- f.which = function(program, cb) {
- f.which = function(program, cb) {
- t.strictEqual(program, 'python')
- cb(new Error('not found'))
- }
- t.strictEqual(program, 'python2')
- cb(new Error('not found'))
- }
- f.checkPython()
-
- function done(err, python) {
- t.ok(/Can't find Python executable/.test(err))
- }
-})
-
-test('find python - no python, use python launcher', function (t) {
- t.plan(8)
-
- var f = new TestPythonFinder('python', done)
- f.env = {}
- f.win = true
-
- f.which = function(program, cb) {
- t.strictEqual(program, 'python')
- cb(new Error('not found'))
- }
- f.execFile = function(program, args, opts, cb) {
- f.execFile = function(program, args, opts, cb) {
- t.strictEqual(program, 'Z:\\snake.exe')
- t.ok(/import sys/.test(args[1]))
- cb(null, '2.7.0')
- }
- t.strictEqual(program, 'py.exe')
- t.notEqual(args.indexOf('-2'), -1)
- t.notEqual(args.indexOf('-c'), -1)
- cb(null, 'Z:\\snake.exe')
- }
- f.checkPython()
-
- function done(err, python) {
- t.strictEqual(err, null)
- t.strictEqual(python, 'Z:\\snake.exe')
- }
-})
-
-test('find python - python 3, use python launcher', function (t) {
- t.plan(10)
-
- var f = new TestPythonFinder('python', done)
- f.env = {}
- f.win = true
-
- f.which = function(program, cb) {
- t.strictEqual(program, 'python')
- cb(null, program)
- }
- f.execFile = function(program, args, opts, cb) {
- f.execFile = function(program, args, opts, cb) {
- f.execFile = function(program, args, opts, cb) {
- t.strictEqual(program, 'Z:\\snake.exe')
- t.ok(/import sys/.test(args[1]))
- cb(null, '2.7.0')
- }
- t.strictEqual(program, 'py.exe')
- t.notEqual(args.indexOf('-2'), -1)
- t.notEqual(args.indexOf('-c'), -1)
- cb(null, 'Z:\\snake.exe')
- }
- t.strictEqual(program, 'python')
- t.ok(/import sys/.test(args[1]))
- cb(null, '3.0.0')
- }
- f.checkPython()
-
- function done(err, python) {
- t.strictEqual(err, null)
- t.strictEqual(python, 'Z:\\snake.exe')
- }
-})
-
-test('find python - python 3, use python launcher, python 2 too old',
- function (t) {
- t.plan(9)
-
- var f = new TestPythonFinder('python', done)
- f.checkedPythonLauncher = false
- f.env = {}
- f.win = true
-
- f.which = function(program, cb) {
- t.strictEqual(program, 'python')
- cb(null, program)
- }
- f.execFile = function(program, args, opts, cb) {
- f.execFile = function(program, args, opts, cb) {
- f.execFile = function(program, args, opts, cb) {
- t.strictEqual(program, 'Z:\\snake.exe')
- t.ok(/import sys/.test(args[1]))
- cb(null, '2.3.4')
- }
- t.strictEqual(program, 'py.exe')
- t.notEqual(args.indexOf('-2'), -1)
- t.notEqual(args.indexOf('-c'), -1)
- cb(null, 'Z:\\snake.exe')
- }
- t.strictEqual(program, 'python')
- t.ok(/import sys/.test(args[1]))
- cb(null, '3.0.0')
- }
- f.checkPython()
-
- function done(err, python) {
- t.ok(/is not supported by gyp/.test(err))
- }
-})
-
-test('find python - no python, no python launcher, good guess', function (t) {
- t.plan(6)
-
- var re = /C:[\\\/]Python27[\\\/]python[.]exe/
- var f = new TestPythonFinder('python', done)
- f.env = {}
- f.win = true
-
- f.which = function(program, cb) {
- t.strictEqual(program, 'python')
- cb(new Error('not found'))
- }
- f.execFile = function(program, args, opts, cb) {
- f.execFile = function(program, args, opts, cb) {
- t.ok(re.test(program))
- t.ok(/import sys/.test(args[1]))
- cb(null, '2.7.0')
- }
- t.strictEqual(program, 'py.exe')
- cb(new Error('not found'))
- }
- f.resolve = resolve
- f.stat = function(path, cb) {
- t.ok(re.test(path))
- cb(null, {})
- }
- f.checkPython()
-
- function done(err, python) {
- t.ok(re.test(python))
- }
-})
-
-test('find python - no python, no python launcher, bad guess', function (t) {
- t.plan(4)
-
- var f = new TestPythonFinder('python', done)
- f.env = { SystemDrive: 'Z:\\' }
- f.win = true
-
- f.which = function(program, cb) {
- t.strictEqual(program, 'python')
- cb(new Error('not found'))
- }
- f.execFile = function(program, args, opts, cb) {
- t.strictEqual(program, 'py.exe')
- cb(new Error('not found'))
- }
- f.resolve = resolve
- f.stat = function(path, cb) {
- t.ok(/Z:[\\\/]Python27[\\\/]python.exe/.test(path))
- var err = new Error('not found')
- err.code = 'ENOENT'
- cb(err)
- }
- f.checkPython()
-
- function done(err, python) {
- t.ok(/Can't find Python executable/.test(err))
- }
-})
diff --git a/node_modules/node-gyp/test/test-install.js b/node_modules/node-gyp/test/test-install.js
deleted file mode 100644
index f647326..0000000
--- a/node_modules/node-gyp/test/test-install.js
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict'
-
-var test = require('tape')
-var install = require('../lib/install').test.install
-
-test('EACCES retry once', function (t) {
- t.plan(3)
-
- var fs = {}
- fs.stat = function (path, cb) {
- var err = new Error()
- err.code = 'EACCES'
- cb(err)
- t.ok(true);
- }
-
-
- var gyp = {}
- gyp.devDir = __dirname
- gyp.opts = {}
- gyp.opts.ensure = true
- gyp.commands = {}
- gyp.commands.install = function (argv, cb) {
- install(fs, gyp, argv, cb)
- }
- gyp.commands.remove = function (argv, cb) {
- cb()
- }
-
- gyp.commands.install([], function (err) {
- t.ok(true)
- if (/"pre" versions of node cannot be installed/.test(err.message)) {
- t.ok(true)
- t.ok(true)
- }
- })
-})
diff --git a/node_modules/node-gyp/test/test-options.js b/node_modules/node-gyp/test/test-options.js
deleted file mode 100644
index d097f81..0000000
--- a/node_modules/node-gyp/test/test-options.js
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-
-var test = require('tape')
-var gyp = require('../lib/node-gyp')
-
-test('options in environment', function (t) {
- t.plan(1)
-
- // `npm test` dumps a ton of npm_config_* variables in the environment.
- Object.keys(process.env)
- .filter(function(key) { return /^npm_config_/.test(key) })
- .forEach(function(key) { delete process.env[key] })
-
- // Zero-length keys should get filtered out.
- process.env.npm_config_ = '42'
- // Other keys should get added.
- process.env.npm_config_x = '42'
- // Except loglevel.
- process.env.npm_config_loglevel = 'debug'
-
- var g = gyp();
- g.parseArgv(['rebuild']) // Also sets opts.argv.
-
- t.deepEqual(Object.keys(g.opts).sort(), ['argv', 'x'])
-})
diff --git a/node_modules/node-gyp/test/test-process-release.js b/node_modules/node-gyp/test/test-process-release.js
deleted file mode 100644
index 48411ae..0000000
--- a/node_modules/node-gyp/test/test-process-release.js
+++ /dev/null
@@ -1,637 +0,0 @@
-var test = require('tape')
-var processRelease = require('../lib/process-release')
-
-test('test process release - process.version = 0.8.20', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v0.8.20', null)
-
- t.equal(release.semver.version, '0.8.20')
- delete release.semver
-
- t.deepEqual(release, {
- version: '0.8.20',
- name: 'node',
- baseUrl: 'https://nodejs.org/dist/v0.8.20/',
- tarballUrl: 'https://nodejs.org/dist/v0.8.20/node-v0.8.20.tar.gz',
- shasumsUrl: 'https://nodejs.org/dist/v0.8.20/SHASUMS256.txt',
- versionDir: '0.8.20',
- libUrl32: 'https://nodejs.org/dist/v0.8.20/node.lib',
- libUrl64: 'https://nodejs.org/dist/v0.8.20/x64/node.lib',
- libPath32: 'node.lib',
- libPath64: 'x64/node.lib'
- })
-})
-
-test('test process release - process.version = 0.10.21', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v0.10.21', null)
-
- t.equal(release.semver.version, '0.10.21')
- delete release.semver
-
- t.deepEqual(release, {
- version: '0.10.21',
- name: 'node',
- baseUrl: 'https://nodejs.org/dist/v0.10.21/',
- tarballUrl: 'https://nodejs.org/dist/v0.10.21/node-v0.10.21.tar.gz',
- shasumsUrl: 'https://nodejs.org/dist/v0.10.21/SHASUMS256.txt',
- versionDir: '0.10.21',
- libUrl32: 'https://nodejs.org/dist/v0.10.21/node.lib',
- libUrl64: 'https://nodejs.org/dist/v0.10.21/x64/node.lib',
- libPath32: 'node.lib',
- libPath64: 'x64/node.lib'
- })
-})
-
-// prior to -headers.tar.gz
-test('test process release - process.version = 0.12.9', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v0.12.9', null)
-
- t.equal(release.semver.version, '0.12.9')
- delete release.semver
-
- t.deepEqual(release, {
- version: '0.12.9',
- name: 'node',
- baseUrl: 'https://nodejs.org/dist/v0.12.9/',
- tarballUrl: 'https://nodejs.org/dist/v0.12.9/node-v0.12.9.tar.gz',
- shasumsUrl: 'https://nodejs.org/dist/v0.12.9/SHASUMS256.txt',
- versionDir: '0.12.9',
- libUrl32: 'https://nodejs.org/dist/v0.12.9/node.lib',
- libUrl64: 'https://nodejs.org/dist/v0.12.9/x64/node.lib',
- libPath32: 'node.lib',
- libPath64: 'x64/node.lib'
- })
-})
-
-// prior to -headers.tar.gz
-test('test process release - process.version = 0.10.41', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v0.10.41', null)
-
- t.equal(release.semver.version, '0.10.41')
- delete release.semver
-
- t.deepEqual(release, {
- version: '0.10.41',
- name: 'node',
- baseUrl: 'https://nodejs.org/dist/v0.10.41/',
- tarballUrl: 'https://nodejs.org/dist/v0.10.41/node-v0.10.41.tar.gz',
- shasumsUrl: 'https://nodejs.org/dist/v0.10.41/SHASUMS256.txt',
- versionDir: '0.10.41',
- libUrl32: 'https://nodejs.org/dist/v0.10.41/node.lib',
- libUrl64: 'https://nodejs.org/dist/v0.10.41/x64/node.lib',
- libPath32: 'node.lib',
- libPath64: 'x64/node.lib'
- })
-})
-
-// has -headers.tar.gz
-test('test process release - process.release ~ node@0.10.42', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v0.10.42', null)
-
- t.equal(release.semver.version, '0.10.42')
- delete release.semver
-
- t.deepEqual(release, {
- version: '0.10.42',
- name: 'node',
- baseUrl: 'https://nodejs.org/dist/v0.10.42/',
- tarballUrl: 'https://nodejs.org/dist/v0.10.42/node-v0.10.42-headers.tar.gz',
- shasumsUrl: 'https://nodejs.org/dist/v0.10.42/SHASUMS256.txt',
- versionDir: '0.10.42',
- libUrl32: 'https://nodejs.org/dist/v0.10.42/node.lib',
- libUrl64: 'https://nodejs.org/dist/v0.10.42/x64/node.lib',
- libPath32: 'node.lib',
- libPath64: 'x64/node.lib'
- })
-})
-
-// has -headers.tar.gz
-test('test process release - process.release ~ node@0.12.10', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v0.12.10', null)
-
- t.equal(release.semver.version, '0.12.10')
- delete release.semver
-
- t.deepEqual(release, {
- version: '0.12.10',
- name: 'node',
- baseUrl: 'https://nodejs.org/dist/v0.12.10/',
- tarballUrl: 'https://nodejs.org/dist/v0.12.10/node-v0.12.10-headers.tar.gz',
- shasumsUrl: 'https://nodejs.org/dist/v0.12.10/SHASUMS256.txt',
- versionDir: '0.12.10',
- libUrl32: 'https://nodejs.org/dist/v0.12.10/node.lib',
- libUrl64: 'https://nodejs.org/dist/v0.12.10/x64/node.lib',
- libPath32: 'node.lib',
- libPath64: 'x64/node.lib'
- })
-})
-
-test('test process release - process.release ~ node@4.1.23', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v4.1.23', {
- name: 'node',
- headersUrl: 'https://nodejs.org/dist/v4.1.23/node-v4.1.23-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '4.1.23')
- delete release.semver
-
- t.deepEqual(release, {
- version: '4.1.23',
- name: 'node',
- baseUrl: 'https://nodejs.org/dist/v4.1.23/',
- tarballUrl: 'https://nodejs.org/dist/v4.1.23/node-v4.1.23-headers.tar.gz',
- shasumsUrl: 'https://nodejs.org/dist/v4.1.23/SHASUMS256.txt',
- versionDir: '4.1.23',
- libUrl32: 'https://nodejs.org/dist/v4.1.23/win-x86/node.lib',
- libUrl64: 'https://nodejs.org/dist/v4.1.23/win-x64/node.lib',
- libPath32: 'win-x86/node.lib',
- libPath64: 'win-x64/node.lib'
- })
-})
-
-test('test process release - process.release ~ node@4.1.23 / corp build', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v4.1.23', {
- name: 'node',
- headersUrl: 'https://some.custom.location/node-v4.1.23-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '4.1.23')
- delete release.semver
-
- t.deepEqual(release, {
- version: '4.1.23',
- name: 'node',
- baseUrl: 'https://some.custom.location/',
- tarballUrl: 'https://some.custom.location/node-v4.1.23-headers.tar.gz',
- shasumsUrl: 'https://some.custom.location/SHASUMS256.txt',
- versionDir: '4.1.23',
- libUrl32: 'https://some.custom.location/win-x86/node.lib',
- libUrl64: 'https://some.custom.location/win-x64/node.lib',
- libPath32: 'win-x86/node.lib',
- libPath64: 'win-x64/node.lib'
- })
-})
-
-test('test process release - process.version = 1.8.4', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v1.8.4', null)
-
- t.equal(release.semver.version, '1.8.4')
- delete release.semver
-
- t.deepEqual(release, {
- version: '1.8.4',
- name: 'iojs',
- baseUrl: 'https://iojs.org/download/release/v1.8.4/',
- tarballUrl: 'https://iojs.org/download/release/v1.8.4/iojs-v1.8.4.tar.gz',
- shasumsUrl: 'https://iojs.org/download/release/v1.8.4/SHASUMS256.txt',
- versionDir: 'iojs-1.8.4',
- libUrl32: 'https://iojs.org/download/release/v1.8.4/win-x86/iojs.lib',
- libUrl64: 'https://iojs.org/download/release/v1.8.4/win-x64/iojs.lib',
- libPath32: 'win-x86/iojs.lib',
- libPath64: 'win-x64/iojs.lib'
- })
-})
-
-test('test process release - process.release ~ iojs@3.2.24', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v3.2.24', {
- name: 'io.js',
- headersUrl: 'https://iojs.org/download/release/v3.2.24/iojs-v3.2.24-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '3.2.24')
- delete release.semver
-
- t.deepEqual(release, {
- version: '3.2.24',
- name: 'iojs',
- baseUrl: 'https://iojs.org/download/release/v3.2.24/',
- tarballUrl: 'https://iojs.org/download/release/v3.2.24/iojs-v3.2.24-headers.tar.gz',
- shasumsUrl: 'https://iojs.org/download/release/v3.2.24/SHASUMS256.txt',
- versionDir: 'iojs-3.2.24',
- libUrl32: 'https://iojs.org/download/release/v3.2.24/win-x86/iojs.lib',
- libUrl64: 'https://iojs.org/download/release/v3.2.24/win-x64/iojs.lib',
- libPath32: 'win-x86/iojs.lib',
- libPath64: 'win-x64/iojs.lib'
- })
-})
-
-test('test process release - process.release ~ iojs@3.2.11 +libUrl32', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v3.2.11', {
- name: 'io.js',
- headersUrl: 'https://iojs.org/download/release/v3.2.11/iojs-v3.2.11-headers.tar.gz',
- libUrl: 'https://iojs.org/download/release/v3.2.11/win-x86/iojs.lib' // custom
- })
-
- t.equal(release.semver.version, '3.2.11')
- delete release.semver
-
- t.deepEqual(release, {
- version: '3.2.11',
- name: 'iojs',
- baseUrl: 'https://iojs.org/download/release/v3.2.11/',
- tarballUrl: 'https://iojs.org/download/release/v3.2.11/iojs-v3.2.11-headers.tar.gz',
- shasumsUrl: 'https://iojs.org/download/release/v3.2.11/SHASUMS256.txt',
- versionDir: 'iojs-3.2.11',
- libUrl32: 'https://iojs.org/download/release/v3.2.11/win-x86/iojs.lib',
- libUrl64: 'https://iojs.org/download/release/v3.2.11/win-x64/iojs.lib',
- libPath32: 'win-x86/iojs.lib',
- libPath64: 'win-x64/iojs.lib'
- })
-})
-
-test('test process release - process.release ~ iojs@3.2.101 +libUrl64', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v3.2.101', {
- name: 'io.js',
- headersUrl: 'https://iojs.org/download/release/v3.2.101/iojs-v3.2.101-headers.tar.gz',
- libUrl: 'https://iojs.org/download/release/v3.2.101/win-x64/iojs.lib' // custom
- })
-
- t.equal(release.semver.version, '3.2.101')
- delete release.semver
-
- t.deepEqual(release, {
- version: '3.2.101',
- name: 'iojs',
- baseUrl: 'https://iojs.org/download/release/v3.2.101/',
- tarballUrl: 'https://iojs.org/download/release/v3.2.101/iojs-v3.2.101-headers.tar.gz',
- shasumsUrl: 'https://iojs.org/download/release/v3.2.101/SHASUMS256.txt',
- versionDir: 'iojs-3.2.101',
- libUrl32: 'https://iojs.org/download/release/v3.2.101/win-x86/iojs.lib',
- libUrl64: 'https://iojs.org/download/release/v3.2.101/win-x64/iojs.lib',
- libPath32: 'win-x86/iojs.lib',
- libPath64: 'win-x64/iojs.lib'
- })
-})
-
-test('test process release - process.release ~ iojs@3.3.0 - borked win-ia32', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v3.2.101', {
- name: 'io.js',
- headersUrl: 'https://iojs.org/download/release/v3.2.101/iojs-v3.2.101-headers.tar.gz',
- libUrl: 'https://iojs.org/download/release/v3.2.101/win-ia32/iojs.lib' // custom
- })
-
- t.equal(release.semver.version, '3.2.101')
- delete release.semver
-
- t.deepEqual(release, {
- version: '3.2.101',
- name: 'iojs',
- baseUrl: 'https://iojs.org/download/release/v3.2.101/',
- tarballUrl: 'https://iojs.org/download/release/v3.2.101/iojs-v3.2.101-headers.tar.gz',
- shasumsUrl: 'https://iojs.org/download/release/v3.2.101/SHASUMS256.txt',
- versionDir: 'iojs-3.2.101',
- libUrl32: 'https://iojs.org/download/release/v3.2.101/win-x86/iojs.lib',
- libUrl64: 'https://iojs.org/download/release/v3.2.101/win-x64/iojs.lib',
- libPath32: 'win-x86/iojs.lib',
- libPath64: 'win-x64/iojs.lib'
- })
-})
-
-test('test process release - process.release ~ node@4.1.23 --target=0.10.40', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: { target: '0.10.40' } }, 'v4.1.23', {
- name: 'node',
- headersUrl: 'https://nodejs.org/dist/v4.1.23/node-v4.1.23-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '0.10.40')
- delete release.semver
-
- t.deepEqual(release, {
- version: '0.10.40',
- name: 'node',
- baseUrl: 'https://nodejs.org/dist/v0.10.40/',
- tarballUrl: 'https://nodejs.org/dist/v0.10.40/node-v0.10.40.tar.gz',
- shasumsUrl: 'https://nodejs.org/dist/v0.10.40/SHASUMS256.txt',
- versionDir: '0.10.40',
- libUrl32: 'https://nodejs.org/dist/v0.10.40/node.lib',
- libUrl64: 'https://nodejs.org/dist/v0.10.40/x64/node.lib',
- libPath32: 'node.lib',
- libPath64: 'x64/node.lib'
- })
-})
-
-test('test process release - process.release ~ node@4.1.23 --target=1.8.4', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: { target: '1.8.4' } }, 'v4.1.23', {
- name: 'node',
- headersUrl: 'https://nodejs.org/dist/v4.1.23/node-v4.1.23-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '1.8.4')
- delete release.semver
-
- t.deepEqual(release, {
- version: '1.8.4',
- name: 'iojs',
- baseUrl: 'https://iojs.org/download/release/v1.8.4/',
- tarballUrl: 'https://iojs.org/download/release/v1.8.4/iojs-v1.8.4.tar.gz',
- shasumsUrl: 'https://iojs.org/download/release/v1.8.4/SHASUMS256.txt',
- versionDir: 'iojs-1.8.4',
- libUrl32: 'https://iojs.org/download/release/v1.8.4/win-x86/iojs.lib',
- libUrl64: 'https://iojs.org/download/release/v1.8.4/win-x64/iojs.lib',
- libPath32: 'win-x86/iojs.lib',
- libPath64: 'win-x64/iojs.lib'
- })
-})
-
-test('test process release - process.release ~ node@4.1.23 --dist-url=https://foo.bar/baz', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: { 'dist-url': 'https://foo.bar/baz' } }, 'v4.1.23', {
- name: 'node',
- headersUrl: 'https://nodejs.org/dist/v4.1.23/node-v4.1.23-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '4.1.23')
- delete release.semver
-
- t.deepEqual(release, {
- version: '4.1.23',
- name: 'node',
- baseUrl: 'https://foo.bar/baz/v4.1.23/',
- tarballUrl: 'https://foo.bar/baz/v4.1.23/node-v4.1.23-headers.tar.gz',
- shasumsUrl: 'https://foo.bar/baz/v4.1.23/SHASUMS256.txt',
- versionDir: '4.1.23',
- libUrl32: 'https://foo.bar/baz/v4.1.23/win-x86/node.lib',
- libUrl64: 'https://foo.bar/baz/v4.1.23/win-x64/node.lib',
- libPath32: 'win-x86/node.lib',
- libPath64: 'win-x64/node.lib'
- })
-})
-
-test('test process release - process.release ~ frankenstein@4.1.23', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v4.1.23', {
- name: 'frankenstein',
- headersUrl: 'https://frankensteinjs.org/dist/v4.1.23/frankenstein-v4.1.23-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '4.1.23')
- delete release.semver
-
- t.deepEqual(release, {
- version: '4.1.23',
- name: 'frankenstein',
- baseUrl: 'https://frankensteinjs.org/dist/v4.1.23/',
- tarballUrl: 'https://frankensteinjs.org/dist/v4.1.23/frankenstein-v4.1.23-headers.tar.gz',
- shasumsUrl: 'https://frankensteinjs.org/dist/v4.1.23/SHASUMS256.txt',
- versionDir: 'frankenstein-4.1.23',
- libUrl32: 'https://frankensteinjs.org/dist/v4.1.23/win-x86/frankenstein.lib',
- libUrl64: 'https://frankensteinjs.org/dist/v4.1.23/win-x64/frankenstein.lib',
- libPath32: 'win-x86/frankenstein.lib',
- libPath64: 'win-x64/frankenstein.lib'
- })
-})
-
-
-test('test process release - process.release ~ frankenstein@4.1.23 --dist-url=http://foo.bar/baz/', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: { 'dist-url': 'http://foo.bar/baz/' } }, 'v4.1.23', {
- name: 'frankenstein',
- headersUrl: 'https://frankensteinjs.org/dist/v4.1.23/frankenstein-v4.1.23.tar.gz'
- })
-
- t.equal(release.semver.version, '4.1.23')
- delete release.semver
-
- t.deepEqual(release, {
- version: '4.1.23',
- name: 'frankenstein',
- baseUrl: 'http://foo.bar/baz/v4.1.23/',
- tarballUrl: 'http://foo.bar/baz/v4.1.23/frankenstein-v4.1.23-headers.tar.gz',
- shasumsUrl: 'http://foo.bar/baz/v4.1.23/SHASUMS256.txt',
- versionDir: 'frankenstein-4.1.23',
- libUrl32: 'http://foo.bar/baz/v4.1.23/win-x86/frankenstein.lib',
- libUrl64: 'http://foo.bar/baz/v4.1.23/win-x64/frankenstein.lib',
- libPath32: 'win-x86/frankenstein.lib',
- libPath64: 'win-x64/frankenstein.lib'
- })
-})
-
-test('test process release - process.release ~ node@4.0.0-rc.4', function (t) {
- t.plan(2)
-
- var release = processRelease([], { opts: {} }, 'v4.0.0-rc.4', {
- name: 'node',
- headersUrl: 'https://nodejs.org/download/rc/v4.0.0-rc.4/node-v4.0.0-rc.4-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '4.0.0-rc.4')
- delete release.semver
-
- t.deepEqual(release, {
- version: '4.0.0-rc.4',
- name: 'node',
- baseUrl: 'https://nodejs.org/download/rc/v4.0.0-rc.4/',
- tarballUrl: 'https://nodejs.org/download/rc/v4.0.0-rc.4/node-v4.0.0-rc.4-headers.tar.gz',
- shasumsUrl: 'https://nodejs.org/download/rc/v4.0.0-rc.4/SHASUMS256.txt',
- versionDir: '4.0.0-rc.4',
- libUrl32: 'https://nodejs.org/download/rc/v4.0.0-rc.4/win-x86/node.lib',
- libUrl64: 'https://nodejs.org/download/rc/v4.0.0-rc.4/win-x64/node.lib',
- libPath32: 'win-x86/node.lib',
- libPath64: 'win-x64/node.lib'
- })
-})
-
-
-test('test process release - process.release ~ node@4.0.0-rc.4 passed as argv[0]', function (t) {
- t.plan(2)
-
- // note the missing 'v' on the arg, it should normalise when checking
- // whether we're on the default or not
- var release = processRelease([ '4.0.0-rc.4' ], { opts: {} }, 'v4.0.0-rc.4', {
- name: 'node',
- headersUrl: 'https://nodejs.org/download/rc/v4.0.0-rc.4/node-v4.0.0-rc.4-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '4.0.0-rc.4')
- delete release.semver
-
- t.deepEqual(release, {
- version: '4.0.0-rc.4',
- name: 'node',
- baseUrl: 'https://nodejs.org/download/rc/v4.0.0-rc.4/',
- tarballUrl: 'https://nodejs.org/download/rc/v4.0.0-rc.4/node-v4.0.0-rc.4-headers.tar.gz',
- shasumsUrl: 'https://nodejs.org/download/rc/v4.0.0-rc.4/SHASUMS256.txt',
- versionDir: '4.0.0-rc.4',
- libUrl32: 'https://nodejs.org/download/rc/v4.0.0-rc.4/win-x86/node.lib',
- libUrl64: 'https://nodejs.org/download/rc/v4.0.0-rc.4/win-x64/node.lib',
- libPath32: 'win-x86/node.lib',
- libPath64: 'win-x64/node.lib'
- })
-})
-
-
-test('test process release - process.release ~ node@4.0.0-rc.4 - bogus string passed as argv[0]', function (t) {
- t.plan(2)
-
- // additional arguments can be passed in on the commandline that should be ignored if they
- // are not specifying a valid version @ position 0
- var release = processRelease([ 'this is no version!' ], { opts: {} }, 'v4.0.0-rc.4', {
- name: 'node',
- headersUrl: 'https://nodejs.org/download/rc/v4.0.0-rc.4/node-v4.0.0-rc.4-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '4.0.0-rc.4')
- delete release.semver
-
- t.deepEqual(release, {
- version: '4.0.0-rc.4',
- name: 'node',
- baseUrl: 'https://nodejs.org/download/rc/v4.0.0-rc.4/',
- tarballUrl: 'https://nodejs.org/download/rc/v4.0.0-rc.4/node-v4.0.0-rc.4-headers.tar.gz',
- shasumsUrl: 'https://nodejs.org/download/rc/v4.0.0-rc.4/SHASUMS256.txt',
- versionDir: '4.0.0-rc.4',
- libUrl32: 'https://nodejs.org/download/rc/v4.0.0-rc.4/win-x86/node.lib',
- libUrl64: 'https://nodejs.org/download/rc/v4.0.0-rc.4/win-x64/node.lib',
- libPath32: 'win-x86/node.lib',
- libPath64: 'win-x64/node.lib'
- })
-})
-
-test('test process release - NODEJS_ORG_MIRROR', function (t) {
- t.plan(2)
-
- process.env.NODEJS_ORG_MIRROR = 'http://foo.bar'
-
- var release = processRelease([], { opts: {} }, 'v4.1.23', {
- name: 'node',
- headersUrl: 'https://nodejs.org/dist/v4.1.23/node-v4.1.23-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '4.1.23')
- delete release.semver
-
- t.deepEqual(release, {
- version: '4.1.23',
- name: 'node',
- baseUrl: 'http://foo.bar/v4.1.23/',
- tarballUrl: 'http://foo.bar/v4.1.23/node-v4.1.23-headers.tar.gz',
- shasumsUrl: 'http://foo.bar/v4.1.23/SHASUMS256.txt',
- versionDir: '4.1.23',
- libUrl32: 'http://foo.bar/v4.1.23/win-x86/node.lib',
- libUrl64: 'http://foo.bar/v4.1.23/win-x64/node.lib',
- libPath32: 'win-x86/node.lib',
- libPath64: 'win-x64/node.lib'
- })
-
- delete process.env.NODEJS_ORG_MIRROR
-})
-
-test('test process release - NVM_NODEJS_ORG_MIRROR', function (t) {
- t.plan(2)
-
- process.env.NVM_NODEJS_ORG_MIRROR = 'http://foo.bar'
-
- var release = processRelease([], { opts: {} }, 'v4.1.23', {
- name: 'node',
- headersUrl: 'https://nodejs.org/dist/v4.1.23/node-v4.1.23-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '4.1.23')
- delete release.semver
-
- t.deepEqual(release, {
- version: '4.1.23',
- name: 'node',
- baseUrl: 'http://foo.bar/v4.1.23/',
- tarballUrl: 'http://foo.bar/v4.1.23/node-v4.1.23-headers.tar.gz',
- shasumsUrl: 'http://foo.bar/v4.1.23/SHASUMS256.txt',
- versionDir: '4.1.23',
- libUrl32: 'http://foo.bar/v4.1.23/win-x86/node.lib',
- libUrl64: 'http://foo.bar/v4.1.23/win-x64/node.lib',
- libPath32: 'win-x86/node.lib',
- libPath64: 'win-x64/node.lib'
- })
-
- delete process.env.NVM_NODEJS_ORG_MIRROR
-})
-
-test('test process release - IOJS_ORG_MIRROR', function (t) {
- t.plan(2)
-
- process.env.IOJS_ORG_MIRROR = 'http://foo.bar'
-
- var release = processRelease([], { opts: {} }, 'v3.2.24', {
- name: 'io.js',
- headersUrl: 'https://iojs.org/download/release/v3.2.24/iojs-v3.2.24-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '3.2.24')
- delete release.semver
-
- t.deepEqual(release, {
- version: '3.2.24',
- name: 'iojs',
- baseUrl: 'http://foo.bar/v3.2.24/',
- tarballUrl: 'http://foo.bar/v3.2.24/iojs-v3.2.24-headers.tar.gz',
- shasumsUrl: 'http://foo.bar/v3.2.24/SHASUMS256.txt',
- versionDir: 'iojs-3.2.24',
- libUrl32: 'http://foo.bar/v3.2.24/win-x86/iojs.lib',
- libUrl64: 'http://foo.bar/v3.2.24/win-x64/iojs.lib',
- libPath32: 'win-x86/iojs.lib',
- libPath64: 'win-x64/iojs.lib'
- })
-
- delete process.env.IOJS_ORG_MIRROR
-})
-
-
-test('test process release - NVM_IOJS_ORG_MIRROR', function (t) {
- t.plan(2)
-
- process.env.NVM_IOJS_ORG_MIRROR = 'http://foo.bar'
-
- var release = processRelease([], { opts: {} }, 'v3.2.24', {
- name: 'io.js',
- headersUrl: 'https://iojs.org/download/release/v3.2.24/iojs-v3.2.24-headers.tar.gz'
- })
-
- t.equal(release.semver.version, '3.2.24')
- delete release.semver
-
- t.deepEqual(release, {
- version: '3.2.24',
- name: 'iojs',
- baseUrl: 'http://foo.bar/v3.2.24/',
- tarballUrl: 'http://foo.bar/v3.2.24/iojs-v3.2.24-headers.tar.gz',
- shasumsUrl: 'http://foo.bar/v3.2.24/SHASUMS256.txt',
- versionDir: 'iojs-3.2.24',
- libUrl32: 'http://foo.bar/v3.2.24/win-x86/iojs.lib',
- libUrl64: 'http://foo.bar/v3.2.24/win-x64/iojs.lib',
- libPath32: 'win-x86/iojs.lib',
- libPath64: 'win-x64/iojs.lib'
- })
-
- delete process.env.NVM_IOJS_ORG_MIRROR
-})
diff --git a/node_modules/node-gyp/tools/gyp/pylib/gyp/generator/compile_commands_json.py b/node_modules/node-gyp/tools/gyp/pylib/gyp/generator/compile_commands_json.py
deleted file mode 100644
index 575db63..0000000
--- a/node_modules/node-gyp/tools/gyp/pylib/gyp/generator/compile_commands_json.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# Copyright (c) 2016 Ben Noordhuis <info@bnoordhuis.nl>. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import gyp.common
-import gyp.xcode_emulation
-import json
-import os
-
-generator_additional_non_configuration_keys = []
-generator_additional_path_sections = []
-generator_extra_sources_for_rules = []
-generator_filelist_paths = None
-generator_supports_multiple_toolsets = True
-generator_wants_sorted_dependencies = False
-
-# Lifted from make.py. The actual values don't matter much.
-generator_default_variables = {
- 'CONFIGURATION_NAME': '$(BUILDTYPE)',
- 'EXECUTABLE_PREFIX': '',
- 'EXECUTABLE_SUFFIX': '',
- 'INTERMEDIATE_DIR': '$(obj).$(TOOLSET)/$(TARGET)/geni',
- 'PRODUCT_DIR': '$(builddir)',
- 'RULE_INPUT_DIRNAME': '%(INPUT_DIRNAME)s',
- 'RULE_INPUT_EXT': '$(suffix $<)',
- 'RULE_INPUT_NAME': '$(notdir $<)',
- 'RULE_INPUT_PATH': '$(abspath $<)',
- 'RULE_INPUT_ROOT': '%(INPUT_ROOT)s',
- 'SHARED_INTERMEDIATE_DIR': '$(obj)/gen',
- 'SHARED_LIB_PREFIX': 'lib',
- 'STATIC_LIB_PREFIX': 'lib',
- 'STATIC_LIB_SUFFIX': '.a',
-}
-
-
-def IsMac(params):
- return 'mac' == gyp.common.GetFlavor(params)
-
-
-def CalculateVariables(default_variables, params):
- default_variables.setdefault('OS', gyp.common.GetFlavor(params))
-
-
-def AddCommandsForTarget(cwd, target, params, per_config_commands):
- output_dir = params['generator_flags']['output_dir']
- for configuration_name, configuration in target['configurations'].iteritems():
- builddir_name = os.path.join(output_dir, configuration_name)
-
- if IsMac(params):
- xcode_settings = gyp.xcode_emulation.XcodeSettings(target)
- cflags = xcode_settings.GetCflags(configuration_name)
- cflags_c = xcode_settings.GetCflagsC(configuration_name)
- cflags_cc = xcode_settings.GetCflagsCC(configuration_name)
- else:
- cflags = configuration.get('cflags', [])
- cflags_c = configuration.get('cflags_c', [])
- cflags_cc = configuration.get('cflags_cc', [])
-
- cflags_c = cflags + cflags_c
- cflags_cc = cflags + cflags_cc
-
- defines = configuration.get('defines', [])
- defines = ['-D' + s for s in defines]
-
- # TODO(bnoordhuis) Handle generated source files.
- sources = target.get('sources', [])
- sources = [s for s in sources if s.endswith('.c') or s.endswith('.cc')]
-
- def resolve(filename):
- return os.path.abspath(os.path.join(cwd, filename))
-
- # TODO(bnoordhuis) Handle generated header files.
- include_dirs = configuration.get('include_dirs', [])
- include_dirs = [s for s in include_dirs if not s.startswith('$(obj)')]
- includes = ['-I' + resolve(s) for s in include_dirs]
-
- defines = gyp.common.EncodePOSIXShellList(defines)
- includes = gyp.common.EncodePOSIXShellList(includes)
- cflags_c = gyp.common.EncodePOSIXShellList(cflags_c)
- cflags_cc = gyp.common.EncodePOSIXShellList(cflags_cc)
-
- commands = per_config_commands.setdefault(configuration_name, [])
- for source in sources:
- file = resolve(source)
- isc = source.endswith('.c')
- cc = 'cc' if isc else 'c++'
- cflags = cflags_c if isc else cflags_cc
- command = ' '.join((cc, defines, includes, cflags,
- '-c', gyp.common.EncodePOSIXShellArgument(file)))
- commands.append(dict(command=command, directory=output_dir, file=file))
-
-
-def GenerateOutput(target_list, target_dicts, data, params):
- per_config_commands = {}
- for qualified_target, target in target_dicts.iteritems():
- build_file, target_name, toolset = (
- gyp.common.ParseQualifiedTarget(qualified_target))
- if IsMac(params):
- settings = data[build_file]
- gyp.xcode_emulation.MergeGlobalXcodeSettingsToSpec(settings, target)
- cwd = os.path.dirname(build_file)
- AddCommandsForTarget(cwd, target, params, per_config_commands)
-
- output_dir = params['generator_flags']['output_dir']
- for configuration_name, commands in per_config_commands.iteritems():
- filename = os.path.join(output_dir,
- configuration_name,
- 'compile_commands.json')
- gyp.common.EnsureDirExists(filename)
- fp = open(filename, 'w')
- json.dump(commands, fp=fp, indent=0, check_circular=False)
-
-
-def PerformBuild(data, configurations, params):
- pass