|  | 
| 21 | 21 | 
 | 
| 22 | 22 | Usage: | 
| 23 | 23 | 
 | 
| 24 |  | -  file_packager TARGET [--preload A [B..]] [--embed C [D..]] [--exclude E [F..]]] [--js-output=OUTPUT.js] [--no-force] [--use-preload-cache] [--indexedDB-name=EM_PRELOAD_CACHE] [--separate-metadata] [--lz4] [--use-preload-plugins] [--no-node] | 
|  | 24 | +  file_packager TARGET [--preload A [B..]] [--embed C [D..]] [--exclude E [F..]] [--js-output=OUTPUT.js] [--no-force] [--use-preload-cache] [--indexedDB-name=EM_PRELOAD_CACHE] [--separate-metadata] [--lz4] [--use-preload-plugins] [--no-node] [--help] | 
| 25 | 25 | 
 | 
| 26 | 26 |   --preload  , | 
| 27 | 27 |   --embed    See emcc --help for more details on those options. | 
|  | 
| 84 | 84 | sys.path.insert(0, __rootdir__) | 
| 85 | 85 | 
 | 
| 86 | 86 | from tools import shared, utils, js_manipulation | 
|  | 87 | +from tools.response_file import substitute_response_files | 
| 87 | 88 | 
 | 
| 88 | 89 | 
 | 
| 89 | 90 | DEBUG = os.environ.get('EMCC_DEBUG') | 
| @@ -128,7 +129,6 @@ def __init__(self): | 
| 128 | 129 |     self.use_preload_plugins = False | 
| 129 | 130 |     self.support_node = True | 
| 130 | 131 |     self.wasm64 = False | 
| 131 |  | -    self.modularize = False | 
| 132 | 132 | 
 | 
| 133 | 133 | 
 | 
| 134 | 134 | class DataFile: | 
| @@ -158,8 +158,7 @@ def has_hidden_attribute(filepath): | 
| 158 | 158 |     return False | 
| 159 | 159 | 
 | 
| 160 | 160 |   try: | 
| 161 |  | -    attrs = ctypes.windll.kernel32.GetFileAttributesW( | 
| 162 |  | -        '%s' % filepath) | 
|  | 161 | +    attrs = ctypes.windll.kernel32.GetFileAttributesW(filepath) | 
| 163 | 162 |     assert attrs != -1 | 
| 164 | 163 |     result = bool(attrs & 2) | 
| 165 | 164 |   except Exception: | 
| @@ -319,8 +318,6 @@ def generate_object_file(data_files): | 
| 319 | 318 |       # A list of triples of: | 
| 320 | 319 |       # (file_name_ptr, file_data_size, file_data_ptr) | 
| 321 | 320 |       # The list in null terminate with a single 0 | 
| 322 |  | -      .globl __emscripten_embedded_file_data | 
| 323 |  | -      .export_name __emscripten_embedded_file_data, __emscripten_embedded_file_data | 
| 324 | 321 |       .section .rodata.__emscripten_embedded_file_data,"",@ | 
| 325 | 322 |       __emscripten_embedded_file_data: | 
| 326 | 323 |       .p2align {align} | 
| @@ -365,16 +362,26 @@ def main():  # noqa: C901, PLR0912, PLR0915 | 
| 365 | 362 |   To revalidate these numbers, run `ruff check --select=C901,PLR091`. | 
| 366 | 363 |   """ | 
| 367 | 364 |   if len(sys.argv) == 1: | 
| 368 |  | -    err('''Usage: file_packager TARGET [--preload A [B..]] [--embed C [D..]] [--exclude E [F..]]] [--js-output=OUTPUT.js] [--no-force] [--use-preload-cache] [--indexedDB-name=EM_PRELOAD_CACHE] [--separate-metadata] [--lz4] [--use-preload-plugins] [--no-node] | 
| 369 |  | -  See the source for more details.''') | 
|  | 365 | +    err('''Usage: file_packager TARGET [--preload A [B..]] [--embed C [D..]] [--exclude E [F..]] [--js-output=OUTPUT.js] [--no-force] [--use-preload-cache] [--indexedDB-name=EM_PRELOAD_CACHE] [--separate-metadata] [--lz4] [--use-preload-plugins] [--no-node] [--help] | 
|  | 366 | +  Try 'file_packager --help' for more details.''') | 
| 370 | 367 |     return 1 | 
| 371 | 368 | 
 | 
| 372 |  | -  data_target = sys.argv[1] | 
|  | 369 | +  # read response files very early on | 
|  | 370 | +  try: | 
|  | 371 | +    args = substitute_response_files(sys.argv[1:]) | 
|  | 372 | +  except OSError as e: | 
|  | 373 | +    shared.exit_with_error(e) | 
|  | 374 | + | 
|  | 375 | +  if '--help' in args: | 
|  | 376 | +    print(__doc__.strip()) | 
|  | 377 | +    return 0 | 
|  | 378 | + | 
|  | 379 | +  data_target = args[0] | 
| 373 | 380 |   data_files = [] | 
| 374 | 381 |   plugins = [] | 
| 375 | 382 |   leading = '' | 
| 376 | 383 | 
 | 
| 377 |  | -  for arg in sys.argv[2:]: | 
|  | 384 | +  for arg in args[1:]: | 
| 378 | 385 |     if arg == '--preload': | 
| 379 | 386 |       leading = 'preload' | 
| 380 | 387 |     elif arg == '--embed': | 
| @@ -623,19 +630,19 @@ def generate_js(data_target, data_files, metadata): | 
| 623 | 630 |       ret = ''' | 
| 624 | 631 |   var Module = typeof %(EXPORT_NAME)s != 'undefined' ? %(EXPORT_NAME)s : {};\n''' % {"EXPORT_NAME": options.export_name} | 
| 625 | 632 | 
 | 
| 626 |  | -  ret +=  ''' | 
|  | 633 | +  ret += ''' | 
| 627 | 634 |   Module['expectedDataFileDownloads'] ??= 0; | 
| 628 | 635 |   Module['expectedDataFileDownloads']++;''' | 
| 629 | 636 | 
 | 
| 630 | 637 |   if not options.modularize: | 
| 631 |  | -    ret +=  ''' | 
|  | 638 | +    ret += ''' | 
| 632 | 639 |   (() => {''' | 
| 633 | 640 | 
 | 
| 634 |  | -  ret +=  ''' | 
| 635 |  | -  // Do not attempt to redownload the virtual filesystem data when in a pthread or a Wasm Worker context. | 
| 636 |  | -  var isPthread = typeof ENVIRONMENT_IS_PTHREAD != 'undefined' && ENVIRONMENT_IS_PTHREAD; | 
| 637 |  | -  var isWasmWorker = typeof ENVIRONMENT_IS_WASM_WORKER != 'undefined' && ENVIRONMENT_IS_WASM_WORKER; | 
| 638 |  | -  if (isPthread || isWasmWorker) return;\n''' | 
|  | 641 | +  ret += ''' | 
|  | 642 | +    // Do not attempt to redownload the virtual filesystem data when in a pthread or a Wasm Worker context. | 
|  | 643 | +    var isPthread = typeof ENVIRONMENT_IS_PTHREAD != 'undefined' && ENVIRONMENT_IS_PTHREAD; | 
|  | 644 | +    var isWasmWorker = typeof ENVIRONMENT_IS_WASM_WORKER != 'undefined' && ENVIRONMENT_IS_WASM_WORKER; | 
|  | 645 | +    if (isPthread || isWasmWorker) return;\n''' | 
| 639 | 646 | 
 | 
| 640 | 647 |   if options.support_node: | 
| 641 | 648 |     ret += "    var isNode = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';\n" | 
| @@ -816,13 +823,7 @@ def generate_js(data_target, data_files, metadata): | 
| 816 | 823 |               return errback(); | 
| 817 | 824 |             }''' | 
| 818 | 825 |       code += ''' | 
| 819 |  | -          var indexedDB; | 
| 820 |  | -          if (typeof window === 'object') { | 
| 821 |  | -            indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; | 
| 822 |  | -          } else if (typeof location !== 'undefined') { | 
| 823 |  | -            // worker | 
| 824 |  | -            indexedDB = self.indexedDB; | 
| 825 |  | -          } else { | 
|  | 826 | +          if (typeof indexedDB == 'undefined') { | 
| 826 | 827 |             throw 'using IndexedDB to cache data can only be done on a web page or in a web worker'; | 
| 827 | 828 |           } | 
| 828 | 829 |           try { | 
|  | 
0 commit comments