@btc-vision/bitcoin 6.4.9 → 6.4.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/.babelrc +4 -4
  2. package/.mocharc.json +13 -13
  3. package/.prettierrc.json +12 -12
  4. package/CHANGELOG.md +403 -403
  5. package/CONTRIBUTING.md +83 -83
  6. package/LICENSE +21 -21
  7. package/README.md +201 -201
  8. package/browser/index.d.ts +1 -1
  9. package/browser/index.js +1 -1
  10. package/browser/{ops.d.ts → opcodes.d.ts} +2 -3
  11. package/browser/script.d.ts +2 -2
  12. package/build/address.js +2 -1
  13. package/build/index.d.ts +1 -1
  14. package/build/index.js +1 -1
  15. package/build/{ops.d.ts → opcodes.d.ts} +2 -3
  16. package/build/{ops.js → opcodes.js} +4 -5
  17. package/build/payments/embed.js +1 -1
  18. package/build/payments/p2ms.js +1 -1
  19. package/build/payments/p2op.js +1 -1
  20. package/build/payments/p2pk.js +1 -1
  21. package/build/payments/p2pkh.js +1 -1
  22. package/build/payments/p2sh.js +3 -3
  23. package/build/payments/p2tr.js +1 -1
  24. package/build/payments/p2wpkh.js +2 -2
  25. package/build/payments/p2wsh.js +2 -2
  26. package/build/push_data.js +9 -9
  27. package/build/script.d.ts +2 -2
  28. package/build/script.js +12 -12
  29. package/build/transaction.js +1 -1
  30. package/cjs/package.json +3 -3
  31. package/gulpfile.js +42 -42
  32. package/package.json +150 -150
  33. package/src/address.ts +304 -303
  34. package/src/bip66.ts +107 -107
  35. package/src/block.ts +233 -233
  36. package/src/bufferutils.ts +188 -188
  37. package/src/crypto.ts +108 -108
  38. package/src/ecc_lib.ts +94 -94
  39. package/src/hooks/AdvancedSignatureManager.ts +104 -104
  40. package/src/hooks/SignatureManager.ts +84 -84
  41. package/src/index.ts +105 -105
  42. package/src/merkle.ts +31 -31
  43. package/src/{ops.ts → opcodes.ts} +280 -282
  44. package/src/payments/bip341.ts +140 -140
  45. package/src/payments/embed.ts +61 -61
  46. package/src/payments/index.ts +172 -172
  47. package/src/payments/lazy.ts +28 -28
  48. package/src/payments/p2ms.ts +156 -156
  49. package/src/payments/p2op.ts +195 -195
  50. package/src/payments/p2pk.ts +93 -93
  51. package/src/payments/p2pkh.ts +214 -214
  52. package/src/payments/p2sh.ts +210 -210
  53. package/src/payments/p2tr.ts +309 -309
  54. package/src/payments/p2wpkh.ts +144 -144
  55. package/src/payments/p2wsh.ts +217 -217
  56. package/src/psbt/bip371.ts +441 -441
  57. package/src/push_data.ts +97 -97
  58. package/src/script.ts +247 -247
  59. package/src/script_number.ts +72 -72
  60. package/src/script_signature.ts +91 -91
  61. package/src/transaction.ts +656 -656
  62. package/test/address.spec.ts +155 -155
  63. package/test/bitcoin.core.spec.ts +212 -212
  64. package/test/block.spec.ts +171 -171
  65. package/test/bufferutils.spec.ts +450 -450
  66. package/test/crypto.spec.ts +49 -49
  67. package/test/fixtures/address.json +329 -329
  68. package/test/fixtures/block.json +148 -148
  69. package/test/fixtures/bufferutils.json +102 -102
  70. package/test/fixtures/core/README.md +26 -26
  71. package/test/fixtures/core/base58_encode_decode.json +50 -50
  72. package/test/fixtures/core/base58_keys_invalid.json +152 -152
  73. package/test/fixtures/core/base58_keys_valid.json +452 -452
  74. package/test/fixtures/core/blocks.json +27 -27
  75. package/test/fixtures/core/sig_canonical.json +7 -7
  76. package/test/fixtures/core/sig_noncanonical.json +33 -33
  77. package/test/fixtures/core/sighash.json +3505 -3505
  78. package/test/fixtures/core/tx_valid.json +2023 -2023
  79. package/test/fixtures/crypto.json +43 -43
  80. package/test/fixtures/ecdsa.json +217 -217
  81. package/test/fixtures/ecpair.json +141 -141
  82. package/test/fixtures/embed.json +108 -108
  83. package/test/fixtures/p2ms.json +434 -434
  84. package/test/fixtures/p2pk.json +179 -179
  85. package/test/fixtures/p2pkh.json +276 -276
  86. package/test/fixtures/p2sh.json +508 -508
  87. package/test/fixtures/p2tr.json +1198 -1198
  88. package/test/fixtures/p2wpkh.json +290 -290
  89. package/test/fixtures/p2wsh.json +489 -489
  90. package/test/fixtures/psbt.json +924 -924
  91. package/test/fixtures/script.json +465 -465
  92. package/test/fixtures/script_number.json +225 -225
  93. package/test/fixtures/signature.json +140 -140
  94. package/test/fixtures/transaction.json +916 -916
  95. package/test/integration/_regtest.ts +6 -6
  96. package/test/integration/addresses.spec.ts +142 -142
  97. package/test/integration/bip32.spec.ts +130 -130
  98. package/test/integration/blocks.spec.ts +28 -28
  99. package/test/integration/cltv.spec.ts +241 -241
  100. package/test/integration/csv.spec.ts +452 -452
  101. package/test/integration/payments.spec.ts +110 -110
  102. package/test/integration/taproot.spec.ts +663 -663
  103. package/test/integration/transactions.spec.ts +668 -668
  104. package/test/payments.spec.ts +114 -114
  105. package/test/payments.utils.ts +165 -165
  106. package/test/psbt.spec.ts +1285 -1285
  107. package/test/script.spec.ts +186 -186
  108. package/test/script_number.spec.ts +26 -26
  109. package/test/script_signature.spec.ts +66 -66
  110. package/test/transaction.spec.ts +337 -337
  111. package/test/ts-node-register.js +7 -7
  112. package/test/tsconfig.json +48 -48
  113. package/test/types.spec.ts +53 -53
  114. package/tsconfig.base.json +27 -27
  115. package/tsconfig.json +19 -19
  116. package/tsconfig.webpack.json +18 -18
  117. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/.ready +0 -0
  118. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/.release-please-manifest.json +0 -3
  119. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/CHANGELOG.md +0 -962
  120. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/CONTRIBUTING.md +0 -34
  121. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/LICENSE +0 -24
  122. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/README.md +0 -273
  123. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/SECURITY.md +0 -2
  124. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/addon.gypi +0 -204
  125. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/bin/node-gyp.js +0 -138
  126. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/.release-please-manifest.json +0 -3
  127. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/LICENSE +0 -28
  128. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/data/ninja/build.ninja +0 -4
  129. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc +0 -12
  130. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/GypVsCMake.md +0 -116
  131. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/Hacking.md +0 -46
  132. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/InputFormatReference.md +0 -1080
  133. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/LanguageSpecification.md +0 -430
  134. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/README.md +0 -27
  135. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/Testing.md +0 -450
  136. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/docs/UserDocumentation.md +0 -965
  137. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp +0 -8
  138. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp.bat +0 -5
  139. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/gyp_main.py +0 -45
  140. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py +0 -365
  141. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py +0 -206
  142. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py +0 -1272
  143. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py +0 -1547
  144. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py +0 -59
  145. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py +0 -153
  146. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py +0 -271
  147. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py +0 -574
  148. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/__init__.py +0 -692
  149. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/common.py +0 -711
  150. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/common_test.py +0 -171
  151. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py +0 -169
  152. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py +0 -113
  153. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py +0 -55
  154. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py +0 -0
  155. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py +0 -804
  156. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py +0 -1173
  157. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py +0 -1318
  158. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py +0 -127
  159. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py +0 -103
  160. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py +0 -461
  161. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py +0 -89
  162. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py +0 -57
  163. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py +0 -2745
  164. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py +0 -3976
  165. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py +0 -44
  166. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py +0 -2964
  167. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py +0 -67
  168. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py +0 -1391
  169. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py +0 -25
  170. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/input.py +0 -3115
  171. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/input_test.py +0 -98
  172. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py +0 -771
  173. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py +0 -1260
  174. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py +0 -174
  175. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py +0 -61
  176. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py +0 -373
  177. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py +0 -1938
  178. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py +0 -53
  179. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py +0 -302
  180. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py +0 -3198
  181. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py +0 -65
  182. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE +0 -3
  183. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.APACHE +0 -177
  184. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.BSD +0 -23
  185. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/__init__.py +0 -15
  186. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_elffile.py +0 -108
  187. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_manylinux.py +0 -252
  188. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_musllinux.py +0 -83
  189. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_parser.py +0 -359
  190. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_structures.py +0 -61
  191. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/_tokenizer.py +0 -192
  192. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/markers.py +0 -252
  193. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/metadata.py +0 -825
  194. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/py.typed +0 -0
  195. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/requirements.py +0 -90
  196. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/specifiers.py +0 -1030
  197. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/tags.py +0 -553
  198. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/utils.py +0 -172
  199. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pylib/packaging/version.py +0 -563
  200. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/pyproject.toml +0 -120
  201. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/release-please-config.json +0 -11
  202. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/gyp/test_gyp.py +0 -261
  203. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/Find-VisualStudio.cs +0 -250
  204. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/build.js +0 -227
  205. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/clean.js +0 -15
  206. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/configure.js +0 -328
  207. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/create-config-gypi.js +0 -150
  208. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/download.js +0 -39
  209. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-node-directory.js +0 -63
  210. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-python.js +0 -310
  211. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/find-visualstudio.js +0 -590
  212. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/install.js +0 -415
  213. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/list.js +0 -26
  214. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/log.js +0 -168
  215. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/node-gyp.js +0 -188
  216. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/process-release.js +0 -146
  217. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/rebuild.js +0 -12
  218. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/remove.js +0 -43
  219. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/lib/util.js +0 -81
  220. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/macOS_Catalina_acid_test.sh +0 -21
  221. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/package.json +0 -51
  222. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/release-please-config.json +0 -40
  223. package/.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/src/win_delay_load_hook.cc +0 -39
  224. package/coverage/tmp/coverage-31752-1735543485354-0.json +0 -1
  225. package/coverage/tmp/coverage-59920-1735543484555-0.json +0 -1
  226. package/coverage/tmp/coverage-66252-1735543483919-0.json +0 -1
  227. package/coverage/tmp/coverage-68440-1735543485236-0.json +0 -1
  228. package/coverage/tmp/coverage-70588-1735543484426-0.json +0 -1
  229. package/coverage/tmp/coverage-79292-1735543485296-0.json +0 -1
  230. package/coverage/tmp/coverage-80212-1735543483980-0.json +0 -1
@@ -1,430 +0,0 @@
1
- # Language Specification
2
-
3
- ## Objective
4
-
5
- Create a tool for the Chromium project that generates native Visual Studio,
6
- Xcode and SCons and/or make build files from a platform-independent input
7
- format. Make the input format as reasonably general as possible without
8
- spending extra time trying to "get everything right," except where not doing so
9
- would likely lead Chromium to an eventual dead end. When in doubt, do what
10
- Chromium needs and don't worry about generalizing the solution.
11
-
12
- ## Background
13
-
14
- Numerous other projects, both inside and outside Google, have tried to
15
- create a simple, universal cross-platform build representation that
16
- still allows sufficient per-platform flexibility to accommodate
17
- irreconcilable differences. The fact that no obvious working candidate
18
- exists that meets Chromium's requirements indicates this is probably a
19
- tougher problem than it appears at first glance. We aim to succeed by
20
- creating a tool that is highly specific to Chromium's specific use case,
21
- not to the general case of design a completely platform-independent tool
22
- for expressing any possible build.
23
-
24
- The Mac has the most sophisticated model for application development
25
- through an IDE. Consequently, we will use the Xcode model as the
26
- starting point (the input file format must handle Chromium's use of
27
- Xcode seamlessly) and adapt the design as necessary for the other
28
- platforms.
29
-
30
- ## Overview
31
-
32
- The overall design has the following characteristics:
33
-
34
- * Input configurations are specified in files with the suffix `.gyp`.
35
- * Each `.gyp` file specifies how to build the targets for the
36
- "component" defined by that file.
37
- * Each `.gyp` file generates one or more output files appropriate to
38
- the platform:
39
- * On Mac, a `.gyp` file generates one Xcode .xcodeproj bundle with
40
- information about how its targets are built.
41
- * On Windows, a `.gyp` file generates one Visual Studio .sln file,
42
- and one Visual Studio .vcproj file per target.
43
- * On Linux, a `.gyp` file generates one SCons file and/or one
44
- Makefile per target
45
- * The `.gyp` file syntax is a Python data structure.
46
- * Use of arbitrary Python in `.gyp` files is forbidden.
47
- * Use of eval() with restricted globals and locals on `.gyp` file
48
- contents restricts the input to an evaluated expression, not
49
- arbitrary Python statements.
50
- * All input is expected to comply with JSON, with two exceptions:
51
- the # character (not inside strings) begins a comment that lasts
52
- until the end of the line, and trailing commas are permitted at
53
- the end of list and dict contents.
54
- * Input data is a dictionary of keywords and values.
55
- * "Invalid" keywords on any given data structure are not illegal,
56
- they're just ignored.
57
- * TODO: providing warnings on use of illegal keywords would help
58
- users catch typos. Figure out something nice to do with this.
59
-
60
- ## Detailed Design
61
-
62
- Some up-front design principles/thoughts/TODOs:
63
-
64
- * Re-use keywords consistently.
65
- * Keywords that allow configuration of a platform-specific concept get
66
- prefixed appropriately:
67
- * Examples: `msvs_disabled_warnings`, `xcode_framework_dirs`
68
- * The input syntax is declarative and data-driven.
69
- * This gets enforced by using Python `eval()` (which only evaluates
70
- an expression) instead of `exec` (which executes arbitrary python)
71
- * Semantic meanings of specific keyword values get deferred until all
72
- are read and the configuration is being evaluated to spit out the
73
- appropriate file(s)
74
- * Source file lists:
75
- * Are flat lists. Any imposed ordering within the `.gyp` file (e.g.
76
- alphabetically) is purely by convention and for developer
77
- convenience. When source files are linked or archived together,
78
- it is expected that this will occur in the order that files are
79
- listed in the `.gyp` file.
80
- * Source file lists contain no mechanism for by-hand folder
81
- configuration (`Filter` tags in Visual Studio, `Groups` in Xcode)
82
- * A folder hierarchy is created automatically that mirrors the file
83
- system
84
-
85
- ### Example
86
-
87
- ```
88
- {
89
- 'target_defaults': {
90
- 'defines': [
91
- 'U_STATIC_IMPLEMENTATION',
92
- ['LOGFILE', 'foo.log',],
93
- ],
94
- 'include_dirs': [
95
- '..',
96
- ],
97
- },
98
- 'targets': [
99
- {
100
- 'target_name': 'foo',
101
- 'type': 'static_library',
102
- 'sources': [
103
- 'foo/src/foo.cc',
104
- 'foo/src/foo_main.cc',
105
- ],
106
- 'include_dirs': [
107
- 'foo',
108
- 'foo/include',
109
- ],
110
- 'conditions': [
111
- [ 'OS==mac', { 'sources': [ 'platform_test_mac.mm' ] } ]
112
- ],
113
- 'direct_dependent_settings': {
114
- 'defines': [
115
- 'UNIT_TEST',
116
- ],
117
- 'include_dirs': [
118
- 'foo',
119
- 'foo/include',
120
- ],
121
- },
122
- },
123
- ],
124
- }
125
- ```
126
-
127
- ### Structural Elements
128
-
129
- ### Top-level Dictionary
130
-
131
- This is the single dictionary in the `.gyp` file that defines the
132
- targets and how they're to be built.
133
-
134
- The following keywords are meaningful within the top-level dictionary
135
- definition:
136
-
137
- | *Keyword* | *Description* |
138
- |:------------------|:------------------|
139
- | `conditions` | A conditional section that may contain other items that can be present in a top-level dictionary, on a conditional basis. See the "Conditionals" section below. |
140
- | `includes` | A list of `.gypi` files to be included in the top-level dictionary. |
141
- | `target_defaults` | A dictionary of default settings to be inherited by all targets in the top-level dictionary. See the "Settings keywords" section below. |
142
- | `targets` | A list of target specifications. See the "targets" below. |
143
- | `variables` | A dictionary containing variable definitions. Each key in this dictionary is the name of a variable, and each value must be a string value that the variable is to be set to. |
144
-
145
- ### targets
146
-
147
- A list of dictionaries defining targets to be built by the files
148
- generated from this `.gyp` file.
149
-
150
- Targets may contain `includes`, `conditions`, and `variables` sections
151
- as permitted in the root dictionary. The following additional keywords
152
- have structural meaning for target definitions:
153
-
154
- | *Keyword* | *Description* |
155
- |:---------------------------- |:------------------------------------------|
156
- | `actions` | A list of special custom actions to perform on a specific input file, or files, to produce output files. See the "Actions" section below. |
157
- | `all_dependent_settings` | A dictionary of settings to be applied to all dependents of the target, transitively. This includes direct dependents and the entire set of their dependents, and so on. This section may contain anything found within a `target` dictionary, except `configurations`, `target_name`, and `type` sections. Compare `direct_dependent_settings` and `link_settings`. |
158
- | `configurations` | A list of dictionaries defining build configurations for the target. See the "Configurations" section below. |
159
- | `copies` | A list of copy actions to perform. See the "Copies" section below. |
160
- | `defines` | A list of preprocesor definitions to be passed on the command line to the C/C++ compiler (via `-D` or `/D` options). |
161
- | `dependencies` | A list of targets on which this target depends. Targets in other `.gyp` files are specified as `../path/to/other.gyp:target_we_want`. |
162
- | `direct_dependent_settings` | A dictionary of settings to be applied to other targets that depend on this target. These settings will only be applied to direct dependents. This section may contain anything found within a `target` dictionary, except `configurations`, `target_name`, and `type` sections. Compare with `all_dependent_settings` and `link_settings`. |
163
- | `include_dirs` | A list of include directories to be passed on the command line to the C/C++ compiler (via `-I` or `/I` options). |
164
- | `libraries` | A list of list of libraries (and/or frameworks) on which this target depends. |
165
- | `link_settings` | A dictionary of settings to be applied to targets in which this target's contents are linked. `executable` and `shared_library` targets are linkable, so if they depend on a non-linkable target such as a `static_library`, they will adopt its `link_settings`. This section can contain anything found within a `target` dictionary, except `configurations`, `target_name`, and `type` sections. Compare `all_dependent_settings` and `direct_dependent_settings`. |
166
- | `rules` | A special custom action to perform on a list of input files, to produce output files. See the "Rules" section below. |
167
- | `sources` | A list of source files that are used to build this target or which should otherwise show up in the IDE for this target. In practice, we expect this list to be a union of all files necessary to build the target on all platforms, as well as other related files that aren't actually used for building, like README files. |
168
- | `target_conditions` | Like `conditions`, but evaluation is delayed until the settings have been merged into an actual target. `target_conditions` may be used to place conditionals into a `target_defaults` section but have them still depend on specific target settings. |
169
- | `target_name` | The name of a target being defined. |
170
- | `type` | The type of target being defined. This field currently supports `executable`, `static_library`, `shared_library`, and `none`. The `none` target type is useful when producing output which is not linked. For example, converting raw translation files into resources or documentation into platform specific help files. |
171
- | `msvs_props` | A list of Visual Studio property sheets (`.vsprops` files) to be used to build the target. |
172
- | `xcode_config_file` | An Xcode configuration (`.xcconfig` file) to be used to build the target. |
173
- | `xcode_framework_dirs` | A list of framework directories be used to build the target. |
174
-
175
- You can affect the way that lists/dictionaries are merged together (for
176
- example the way a list in target\_defaults interacts with the same named
177
- list in the target itself) with a couple of special characters, which
178
- are covered in [Merge
179
- Basics](InputFormatReference#Merge_Basics_(=,_?,_+).md) and [List
180
- Filters](InputFormatReference#List_Filters.md) on the
181
- InputFormatReference page.
182
-
183
- ### configurations
184
-
185
- `configurations` sections may be found within `targets` or
186
- `target_defaults` sections. The `configurations` section is a list of
187
- dictionaries specifying different build configurations. Because
188
- configurations are implemented as lists, it is not currently possible to
189
- override aspects of configurations that are imported into a target from
190
- a `target_defaults` section.
191
-
192
- NOTE: It is extremely important that each target within a project define
193
- the same set of configurations. This continues to apply even when a
194
- project spans across multiple `.gyp` files.
195
-
196
- A configuration dictionary may contain anything that can be found within
197
- a target dictionary, except for `actions`, `all_dependent_settings`,
198
- `configurations`, `dependencies`, `direct_dependent_settings`,
199
- `libraries`, `link_settings`, `sources`, `target_name`, and `type`.
200
-
201
- Configuration dictionaries may also contain these elements:
202
-
203
- | *Keyword* | *Description* |
204
- |:---------------------|:----------------------------------------------------|
205
- | `configuration_name` | Required attribute. The name of the configuration. |
206
-
207
- ### Conditionals
208
-
209
- Conditionals may appear within any dictionary in a `.gyp` file. There
210
- are two tpes of conditionals, which differ only in the timing of their
211
- processing. `conditons` sections are processed shortly after loading
212
- `.gyp` files, and `target_conditons` sections are processed after all
213
- dependencies have been computed.
214
-
215
- A conditional section is introduced with a `conditions` or
216
- `target_conditions` dictionary keyword, and is composed of a list. Each
217
- list contains two or three elements. The first two elements, which are
218
- always required, are the conditional expression to evaluate and a
219
- dictionary containing settings to merge into the dictionary containing
220
- the `conditions` or `target_conditions` section if the expression
221
- evaluates to true. The third, optional, list element is a dictionary to
222
- merge if the expression evaluates to false.
223
-
224
- The `eval()` of the expression string takes place in the context of
225
- global and/or local dictionaries that constructed from the `.gyp` input
226
- data, and overrides the `__builtin__` dictionary, to prevent the
227
- execution of arbitrary Python code.
228
-
229
- ### Actions
230
-
231
- An `actions` section provides a list of custom build actions to perform
232
- on inputs, producing outputs. The `actions` section is organized as a
233
- list. Each item in the list is a dictionary having the following form:
234
-
235
- | *Keyword* | *Type* | *Description* |
236
- |:--------------|:-------|:-----------------------------|
237
- | `action_name` | string | The name of the action. Depending on how actions are implemented in the various generators, some may desire or require this property to be set to a unique name; others may ignore this property entirely. |
238
- | `inputs` | list | A list of pathnames treated as inputs to the custom action. |
239
- | `outputs` | list | A list of pathnames that the custom action produces. |
240
- | `action` | list | A command line invocation used to produce `outputs` from `inputs`. For maximum cross-platform compatibility, invocations that require a Python interpreter should be specified with a first element `"python"`. This will enable generators for environments with specialized Python installations to be able to perform the action in an appropriate Python environment. |
241
- | `message` | string | A message to be displayed to the user by the build system when the action is run. |
242
-
243
- Build environments will compare `inputs` and `outputs`. If any `output`
244
- is missing or is outdated relative to any `input`, the custom action
245
- will be invoked. If all `outputs` are present and newer than all
246
- `inputs`, the `outputs` are considered up-to-date and the action need
247
- not be invoked.
248
-
249
- Actions are implemented in Xcode as shell script build phases performed
250
- prior to the compilation phase. In the Visual Studio generator, actions
251
- appear files with a `FileConfiguration` containing a custom
252
- `VCCustomBuildTool` specifying the remainder of the inputs, the outputs,
253
- and the action.
254
-
255
- Combined with variable expansions, actions can be quite powerful. Here
256
- is an example action that leverages variable expansions to minimize
257
- duplication of pathnames:
258
-
259
- ```
260
- 'sources': [
261
- # libraries.cc is generated by the js2c action below.
262
- '<(INTERMEDIATE_DIR)/libraries.cc',
263
- ],
264
- 'actions': [
265
- {
266
- 'variables': {
267
- 'core_library_files': [
268
- 'src/runtime.js',
269
- 'src/v8natives.js',
270
- 'src/macros.py',
271
- ],
272
- },
273
- 'action_name': 'js2c',
274
- 'inputs': [
275
- 'tools/js2c.py',
276
- '<@(core_library_files)',
277
- ],
278
- 'outputs': [
279
- '<(INTERMEDIATE_DIR)/libraries.cc',
280
- '<(INTERMEDIATE_DIR)/libraries-empty.cc',
281
- ],
282
- 'action': ['python', 'tools/js2c.py', '<@(_outputs)', 'CORE', '<@(core_library_files)'],
283
- },
284
- ],
285
- ```
286
-
287
- ### Rules
288
-
289
- A `rules` section provides custom build action to perform on inputs, producing
290
- outputs. The `rules` section is organized as a list. Each item in the list is
291
- a dictionary having the following form:
292
-
293
- | *Keyword* | *Type* | *Description* |
294
- |:------------|:-------|:-----------------------------------------|
295
- | `rule_name` | string | The name of the rule. Depending on how Rules are implemented in the various generators, some may desire or require this property to be set to a unique name; others may ignore this property entirely. |
296
- | `extension` | string | All source files of the current target with the given extension will be treated successively as inputs to the rule. |
297
- | `inputs` | list | Additional dependencies of the rule. |
298
- | `outputs` | list | A list of pathnames that the rule produces. Has access to `RULE_INPUT_` variables (see below). |
299
- | `action` | list | A command line invocation used to produce `outputs` from `inputs`. For maximum cross-platform compatibility, invocations that require a Python interpreter should be specified with a first element `"python"`. This will enable generators for environments with specialized Python installations to be able to perform the action in an appropriate Python environment. Has access to `RULE_INPUT_` variables (see below). |
300
- | `message` | string | A message to be displayed to the user by the build system when the action is run. Has access to `RULE_INPUT_` variables (see below). |
301
-
302
- There are several variables available to `outputs`, `action`, and `message`.
303
-
304
- | *Variable* | *Description* |
305
- |:---------------------|:------------------------------------|
306
- | `RULE_INPUT_PATH` | The full path to the current input. |
307
- | `RULE_INPUT_DIRNAME` | The directory of the current input. |
308
- | `RULE_INPUT_NAME` | The file name of the current input. |
309
- | `RULE_INPUT_ROOT` | The file name of the current input without extension. |
310
- | `RULE_INPUT_EXT` | The file name extension of the current input. |
311
-
312
- Rules can be thought of as Action generators. For each source selected
313
- by `extension` an special action is created. This action starts out with
314
- the same `inputs`, `outputs`, `action`, and `message` as the rule. The
315
- source is added to the action's `inputs`. The `outputs`, `action`, and
316
- `message` are then handled the same but with the additional variables.
317
- If the `_output` variable is used in the `action` or `message` the
318
- `RULE_INPUT_` variables in `output` will be expanded for the current
319
- source.
320
-
321
- ### Copies
322
-
323
- A `copies` section provides a simple means of copying files. The
324
- `copies` section is organized as a list. Each item in the list is a
325
- dictionary having the following form:
326
-
327
- | *Keyword* | *Type* | *Description* |
328
- |:--------------|:-------|:------------------------------|
329
- | `destination` | string | The directory into which the `files` will be copied. |
330
- | `files` | list | A list of files to be copied. |
331
-
332
- The copies will be created in `destination` and have the same file name
333
- as the file they are copied from. Even if the `files` are from multiple
334
- directories they will all be copied into the `destination` directory.
335
- Each `destination` file has an implicit build dependency on the file it
336
- is copied from.
337
-
338
- ### Generated Xcode .pbxproj Files
339
-
340
- We derive the following things in a `project.pbxproj` plist file within
341
- an `.xcodeproj` bundle from the above input file formats as follows:
342
-
343
- * `Group hierarchy`: This is generated in a fixed format with contents
344
- derived from the input files. There is no provision for the user to
345
- specify additional groups or create a custom hierarchy.
346
- * `Configuration group`: This will be used with the
347
- `xcode_config_file` property above, if needed.
348
- * `Source group`: The union of the `sources` lists of all `targets`
349
- after applying appropriate `conditions`. The resulting list is
350
- sorted and put into a group hierarchy that matches the layout of
351
- the directory tree on disk, with a root of // (the top of the
352
- hierarchy).
353
- * `Frameworks group`: Taken directly from `libraries` value for the
354
- target, after applying appropriate conditions.
355
- * `Projects group`: References to other `.xcodeproj` bundles that
356
- are needed by the `.xcodeproj` in which the group is contained.
357
- * `Products group`: Output from the various targets.
358
- * `Project References`:
359
- * `Project Configurations`:
360
- * Per-`.xcodeproj` file settings are not supported, all settings are
361
- applied at the target level.
362
- * `Targets`:
363
- * `Phases`: Copy sources, link with libraries/frameworks, ...
364
- * `Target Configurations`: Specified by input.
365
- * `Dependencies`: (local and remote)
366
-
367
- ### Generated Visual Studio .vcproj Files
368
-
369
- We derive the following sections in a `.vcproj` file from the above
370
- input file formats as follows:
371
-
372
- * `VisualStudioProject`:
373
- * `Platforms`:
374
- * `ToolFiles`:
375
- * `Configurations`:
376
- * `Configuration`:
377
- * `References`:
378
- * `Files`:
379
- * `Filter`:
380
- * `File`:
381
- * `FileConfiguration`:
382
- * `Tool`:
383
- * `Globals`:
384
-
385
- ### Generated Visual Studio .sln Files
386
-
387
- We derive the following sections in a `.sln` file from the above input
388
- file formats as follows:
389
-
390
- * `Projects`:
391
- * `WebsiteProperties`:
392
- * `ProjectDependencies`:
393
- * `Global`:
394
- * `SolutionConfigurationPlatforms`:
395
- * `ProjectConfigurationPlatforms`:
396
- * `SolutionProperties`:
397
- * `NestedProjects`:
398
-
399
- ## Caveats
400
-
401
- Notes/Question from very first prototype draft of the language.
402
- Make sure these issues are addressed somewhere before deleting.
403
-
404
- * Libraries are easy, application abstraction is harder
405
- * Applications involves resource compilation
406
- * Applications involve many inputs
407
- * Applications include transitive closure of dependencies
408
- * Specific use cases like cc\_library
409
- * Mac compiles more than just .c/.cpp files (specifically, .m and .mm
410
- files)
411
- * Compiler options vary by:
412
- * File type
413
- * Target type
414
- * Individual file
415
- * Files may have custom settings per file per platform, but we probably
416
- don't care or need to support this in gyp.
417
- * Will all linked non-Chromium projects always use the same versions of every
418
- subsystem?
419
- * Variants are difficult. We've identified the following variants (some
420
- specific to Chromium, some typical of other projects in the same ballpark):
421
- * Target platform
422
- * V8 vs. JSC
423
- * Debug vs. Release
424
- * Toolchain (VS version, gcc, version)
425
- * Host platform
426
- * L10N
427
- * Vendor
428
- * Purify / Valgrind
429
- * Will everyone upgrade VS at once?
430
- * What does a dylib dependency mean?
@@ -1,27 +0,0 @@
1
- # Generate Your Projects (gyp-next)
2
-
3
- GYP is a Meta-Build system: a build system that generates other build systems.
4
-
5
- * [User documentation](./UserDocumentation.md)
6
- * [Input Format Reference](./InputFormatReference.md)
7
- * [Language specification](./LanguageSpecification.md)
8
- * [Hacking](./Hacking.md)
9
- * [Testing](./Testing.md)
10
- * [GYP vs. CMake](./GypVsCMake.md)
11
-
12
- GYP is intended to support large projects that need to be built on multiple
13
- platforms (e.g., Mac, Windows, Linux), and where it is important that
14
- the project can be built using the IDEs that are popular on each platform
15
- as if the project is a "native" one.
16
-
17
- It can be used to generate XCode projects, Visual Studio projects, Ninja
18
- build files, and Makefiles. In each case GYP's goal is to replicate as
19
- closely as possible the way one would set up a native build of the project
20
- using the IDE.
21
-
22
- GYP can also be used to generate "hybrid" projects that provide the IDE
23
- scaffolding for a nice user experience but call out to Ninja to do the actual
24
- building (which is usually much faster than the native build systems of the
25
- IDEs).
26
-
27
- For more information on GYP, click on the links above.