aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/file_packager.py36
-rw-r--r--tools/shared.py20
2 files changed, 48 insertions, 8 deletions
diff --git a/tools/file_packager.py b/tools/file_packager.py
index 64a21386..ac984cd1 100644
--- a/tools/file_packager.py
+++ b/tools/file_packager.py
@@ -318,18 +318,46 @@ if has_preloaded:
});
''' % use_data
- code += '''
+ code += r'''
+ if (!Module.expectedDataFileDownloads) {
+ Module.expectedDataFileDownloads = 0;
+ Module.finishedDataFileDownloads = 0;
+ }
+ Module.expectedDataFileDownloads++;
+
var dataFile = new XMLHttpRequest();
dataFile.onprogress = function(event) {
+ var url = '%s';
if (event.loaded && event.total) {
- Module.setStatus('Downloading data... (' + event.loaded + '/' + event.total + ')');
- } else {
+ if (!dataFile.addedTotal) {
+ dataFile.addedTotal = true;
+ if (!Module.dataFileDownloads) Module.dataFileDownloads = {};
+ Module.dataFileDownloads[url] = {
+ loaded: event.loaded,
+ total: event.total
+ };
+ } else {
+ Module.dataFileDownloads[url].loaded = event.loaded;
+ }
+ var total = 0;
+ var loaded = 0;
+ var num = 0;
+ for (var download in Module.dataFileDownloads) {
+ var data = Module.dataFileDownloads[download];
+ total += data.total;
+ loaded += data.loaded;
+ num++;
+ }
+ total = Math.ceil(total * Module.expectedDataFileDownloads/num);
+ Module.setStatus('Downloading data... (' + loaded + '/' + total + ')');
+ } else if (!Module.dataFileDownloads) {
Module.setStatus('Downloading data...');
}
}
dataFile.open('GET', '%s', true);
dataFile.responseType = 'arraybuffer';
dataFile.onload = function() {
+ Module.finishedDataFileDownloads++;
var arrayBuffer = dataFile.response;
assert(arrayBuffer, 'Loading data file failed.');
var byteArray = new Uint8Array(arrayBuffer);
@@ -339,7 +367,7 @@ if has_preloaded:
Module['addRunDependency']('datafile_%s');
dataFile.send(null);
if (Module['setStatus']) Module['setStatus']('Downloading...');
- ''' % (os.path.basename(Compression.compressed_name(data_target) if Compression.on else data_target), use_data, data_target) # use basename because from the browser's point of view, we need to find the datafile in the same dir as the html file
+ ''' % (data_target, os.path.basename(Compression.compressed_name(data_target) if Compression.on else data_target), use_data, data_target) # use basename because from the browser's point of view, we need to find the datafile in the same dir as the html file
if pre_run:
print '''
diff --git a/tools/shared.py b/tools/shared.py
index 8adff34a..9f51f008 100644
--- a/tools/shared.py
+++ b/tools/shared.py
@@ -550,9 +550,16 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)''' % { 'winfix': '' if not WINDOWS e
if configure: # Useful in debugging sometimes to comment this out (and the lines below up to and including the |link| call)
Building.configure(configure + configure_args, stdout=open(os.path.join(project_dir, 'configure_'), 'w'),
stderr=open(os.path.join(project_dir, 'configure_err'), 'w'), env=env)
- for i in range(2): # workaround for some build systems that need to be run twice to succeed (e.g. poppler)
- Building.make(make + make_args, stdout=open(os.path.join(project_dir, 'make_' + str(i)), 'w'),
- stderr=open(os.path.join(project_dir, 'make_err' + str(i)), 'w'), env=env)
+ def open_make_out(i, mode='r'):
+ return open(os.path.join(project_dir, 'make_' + str(i)), mode)
+
+ def open_make_err(i, mode='r'):
+ return open(os.path.join(project_dir, 'make_err' + str(i)), mode)
+
+ for i in range(2): # FIXME: Sad workaround for some build systems that need to be run twice to succeed (e.g. poppler)
+ with open_make_out(i, 'w') as make_out, open_make_err(i, 'w') as make_err:
+ Building.make(make + make_args, stdout=make_out,
+ stderr=make_err, env=env)
try:
if cache is not None:
cache[cache_name] = []
@@ -561,7 +568,12 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)''' % { 'winfix': '' if not WINDOWS e
cache[cache_name].append((basename, open(f, 'rb').read()))
break
except:
- if i > 0: raise Exception('could not build library ' + name)
+ if i > 0:
+ # Due to the ugly hack above our best guess is to output the first run
+ with open_make_err(0) as ferr:
+ for line in ferr:
+ sys.stderr.write(line)
+ raise Exception('could not build library ' + name)
if old_dir:
os.chdir(old_dir)
return generated_libs