aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/library.js4
-rw-r--r--src/library_browser.js13
-rw-r--r--src/library_sdl.js8
-rwxr-xr-xtests/runner.py29
-rw-r--r--tests/sdl_image.c8
-rw-r--r--tests/sdl_image_jpeg.c45
-rw-r--r--tools/file_packager.py13
7 files changed, 45 insertions, 75 deletions
diff --git a/src/library.js b/src/library.js
index a6a38cfe..591d4350 100644
--- a/src/library.js
+++ b/src/library.js
@@ -874,7 +874,9 @@ LibraryManager.library = {
// result of an XHR that you did manually.
createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile) {
Browser.init();
- var fullname = FS.joinPath([parent, name], true);
+ // TODO we should allow people to just pass in a complete filename instead
+ // of parent and name being that we just join them anyways
+ var fullname = PATH.resolve(PATH.join(parent, name));
function processData(byteArray) {
function finish(byteArray) {
if (!dontCreateFile) {
diff --git a/src/library_browser.js b/src/library_browser.js
index 571ed96c..f65791e4 100644
--- a/src/library_browser.js
+++ b/src/library_browser.js
@@ -3,6 +3,7 @@
// Utilities for browser environments
mergeInto(LibraryManager.library, {
+ $Browser__deps: ['$PATH'],
$Browser__postset: 'Module["requestFullScreen"] = function(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };\n' + // exports
'Module["requestAnimationFrame"] = function(func) { Browser.requestAnimationFrame(func) };\n' +
'Module["pauseMainLoop"] = function() { Browser.mainLoop.pause() };\n' +
@@ -549,10 +550,9 @@ mergeInto(LibraryManager.library, {
emscripten_async_wget: function(url, file, onload, onerror) {
var _url = Pointer_stringify(url);
var _file = Pointer_stringify(file);
- var index = _file.lastIndexOf('/');
FS.createPreloadedFile(
- _file.substr(0, index),
- _file.substr(index +1),
+ PATH.dirname(_file),
+ PATH.basename(_file),
_url, true, true,
function() {
if (onload) Runtime.dynCall('vi', onload, [file]);
@@ -627,10 +627,9 @@ mergeInto(LibraryManager.library, {
var _file = Pointer_stringify(file);
var data = FS.analyzePath(_file);
if (!data.exists) return -1;
- var index = _file.lastIndexOf('/');
FS.createPreloadedFile(
- _file.substr(0, index),
- _file.substr(index +1),
+ PATH.dirname(_file),
+ PATH.basename(_file),
new Uint8Array(data.object.contents), true, true,
function() {
if (onload) Runtime.dynCall('vi', onload, [file]);
@@ -650,7 +649,7 @@ mergeInto(LibraryManager.library, {
var cname = _malloc(name.length+1);
writeStringToMemory(name, cname);
FS.createPreloadedFile(
- '',
+ '/',
name,
{{{ makeHEAPView('U8', 'data', 'data + size') }}},
true, true,
diff --git a/src/library_sdl.js b/src/library_sdl.js
index 19152646..64984628 100644
--- a/src/library_sdl.js
+++ b/src/library_sdl.js
@@ -10,7 +10,7 @@
// or otherwise).
var LibrarySDL = {
- $SDL__deps: ['$FS', '$Browser'],
+ $SDL__deps: ['$FS', '$PATH', '$Browser'],
$SDL: {
defaults: {
width: 320,
@@ -1291,11 +1291,7 @@ var LibrarySDL = {
}
if (!raw) {
- filename = FS.standardizePath(filename);
- if (filename[0] == '/') {
- // Convert the path to relative
- filename = filename.substr(1);
- }
+ filename = PATH.resolve(filename);
var raw = Module["preloadedImages"][filename];
if (!raw) {
if (raw === null) Module.printErr('Trying to reuse preloaded image, but freePreloadedMediaOnUse is set!');
diff --git a/tests/runner.py b/tests/runner.py
index b662632d..8196053d 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -13107,13 +13107,21 @@ Press any key to continue.'''
open(os.path.join(self.get_dir(), 'sdl_image.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_image.c')).read()))
for mem in [0, 1]:
- Popen([PYTHON, EMCC, os.path.join(self.get_dir(), 'sdl_image.c'), '-O2', '--preload-file', 'screenshot.jpg', '-o', 'page.html', '--memory-init-file', str(mem)]).communicate()
- self.run_browser('page.html', '', '/report_result?600')
+ for dest, dirname, basename in [('screenshot.jpg', '/', 'screenshot.jpg'),
+ ('screenshot.jpg@/assets/screenshot.jpg', '/assets', 'screenshot.jpg')]:
+ Popen([
+ PYTHON, EMCC, os.path.join(self.get_dir(), 'sdl_image.c'), '-o', 'page.html', '-O2', '--memory-init-file', str(mem),
+ '--preload-file', dest, '-DSCREENSHOT_DIRNAME="' + dirname + '"', '-DSCREENSHOT_BASENAME="' + basename + '"'
+ ]).communicate()
+ self.run_browser('page.html', '', '/report_result?600')
def test_sdl_image_jpeg(self):
shutil.copyfile(path_from_root('tests', 'screenshot.jpg'), os.path.join(self.get_dir(), 'screenshot.jpeg'))
- open(os.path.join(self.get_dir(), 'sdl_image_jpeg.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_image_jpeg.c')).read()))
- Popen([PYTHON, EMCC, os.path.join(self.get_dir(), 'sdl_image_jpeg.c'), '--preload-file', 'screenshot.jpeg', '-o', 'page.html']).communicate()
+ open(os.path.join(self.get_dir(), 'sdl_image_jpeg.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_image.c')).read()))
+ Popen([
+ PYTHON, EMCC, os.path.join(self.get_dir(), 'sdl_image_jpeg.c'), '-o', 'page.html',
+ '--preload-file', 'screenshot.jpeg', '-DSCREENSHOT_DIRNAME="/"', '-DSCREENSHOT_BASENAME="screenshot.jpeg"'
+ ]).communicate()
self.run_browser('page.html', '', '/report_result?600')
def test_sdl_image_compressed(self):
@@ -13124,13 +13132,16 @@ Press any key to continue.'''
basename = os.path.basename(image)
shutil.copyfile(image, os.path.join(self.get_dir(), basename))
- open(os.path.join(self.get_dir(), 'sdl_image.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_image.c')).read()).replace('screenshot.jpg', basename))
+ open(os.path.join(self.get_dir(), 'sdl_image.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_image.c')).read()))
self.build_native_lzma()
- Popen([PYTHON, EMCC, os.path.join(self.get_dir(), 'sdl_image.c'), '--preload-file', basename, '-o', 'page.html',
- '--compression', '%s,%s,%s' % (path_from_root('third_party', 'lzma.js', 'lzma-native'),
- path_from_root('third_party', 'lzma.js', 'lzma-decoder.js'),
- 'LZMA.decompress')]).communicate()
+ Popen([
+ PYTHON, EMCC, os.path.join(self.get_dir(), 'sdl_image.c'), '-o', 'page.html',
+ '--preload-file', basename, '-DSCREENSHOT_DIRNAME="/"', '-DSCREENSHOT_BASENAME="' + basename + '"',
+ '--compression', '%s,%s,%s' % (path_from_root('third_party', 'lzma.js', 'lzma-native'),
+ path_from_root('third_party', 'lzma.js', 'lzma-decoder.js'),
+ 'LZMA.decompress')
+ ]).communicate()
shutil.move(os.path.join(self.get_dir(), basename), basename + '.renamedsoitcannotbefound');
self.run_browser('page.html', '', '/report_result?' + str(width))
diff --git a/tests/sdl_image.c b/tests/sdl_image.c
index 9d8c36f2..523f8903 100644
--- a/tests/sdl_image.c
+++ b/tests/sdl_image.c
@@ -3,6 +3,7 @@
#include <SDL/SDL_image.h>
#include <assert.h>
#include <emscripten.h>
+#include <unistd.h>
int testImage(SDL_Surface* screen, const char* fileName) {
SDL_Surface *image = IMG_Load(fileName);
@@ -27,9 +28,12 @@ int main() {
SDL_Surface *screen = SDL_SetVideoMode(600, 450, 32, SDL_SWSURFACE);
int result = 0;
- result = testImage(screen, "screenshot.jpg"); // relative path
+
+ result |= testImage(screen, SCREENSHOT_DIRNAME "/" SCREENSHOT_BASENAME); // absolute path
assert(result != 0);
- result |= testImage(screen, "/screenshot.jpg"); // absolute path
+
+ chdir(SCREENSHOT_DIRNAME);
+ result = testImage(screen, "./" SCREENSHOT_BASENAME); // relative path
assert(result != 0);
SDL_Flip(screen);
diff --git a/tests/sdl_image_jpeg.c b/tests/sdl_image_jpeg.c
deleted file mode 100644
index 10619dad..00000000
--- a/tests/sdl_image_jpeg.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <stdio.h>
-#include <SDL/SDL.h>
-#include <SDL/SDL_image.h>
-#include <assert.h>
-#include <emscripten.h>
-
-int testImage(SDL_Surface* screen, const char* fileName) {
- SDL_Surface *image = IMG_Load(fileName);
- if (!image)
- {
- printf("IMG_Load: %s\n", IMG_GetError());
- return 0;
- }
- assert(image->format->BitsPerPixel == 32);
- assert(image->format->BytesPerPixel == 4);
- assert(image->pitch == 4*image->w);
- int result = image->w;
-
- SDL_BlitSurface (image, NULL, screen, NULL);
- SDL_FreeSurface (image);
-
- return result;
-}
-
-int main() {
- SDL_Init(SDL_INIT_VIDEO);
- SDL_Surface *screen = SDL_SetVideoMode(600, 450, 32, SDL_SWSURFACE);
-
- int result = 0;
- result = testImage(screen, "screenshot.jpeg"); // relative path
- assert(result != 0);
- result |= testImage(screen, "/screenshot.jpeg"); // absolute path
- assert(result != 0);
-
- SDL_Flip(screen);
-
- printf("you should see an image.\n");
-
- SDL_Quit();
-
- REPORT_RESULT();
-
- return 0;
-}
-
diff --git a/tools/file_packager.py b/tools/file_packager.py
index 1a9d925b..9861e330 100644
--- a/tools/file_packager.py
+++ b/tools/file_packager.py
@@ -216,7 +216,8 @@ for file_ in data_files:
file_['dstpath'] = file_['dstpath'].replace(os.path.sep, '/') # name in the filesystem, native and emulated
if file_['dstpath'].endswith('/'): # If user has submitted a directory name as the destination but omitted the destination filename, use the filename from source file
file_['dstpath'] = file_['dstpath'] + os.path.basename(file_['srcpath'])
- if file_['dstpath'].startswith('./'): file_['dstpath'] = file_['dstpath'][2:] # remove redundant ./ prefix
+ # make destination path always relative to the root
+ file_['dstpath'] = os.path.normpath(os.path.join('/', file_['dstpath']))
if DEBUG:
print >> sys.stderr, 'Packaging file "' + file_['srcpath'] + '" to VFS in path "' + file_['dstpath'] + '".'
@@ -341,6 +342,8 @@ if has_preloaded:
counter = 0
for file_ in data_files:
filename = file_['dstpath']
+ dirname = os.path.dirname(filename)
+ basename = os.path.basename(filename)
if file_['mode'] == 'embed':
# Embed
data = map(ord, open(file_['srcpath'], 'rb').read())
@@ -356,7 +359,7 @@ for file_ in data_files:
str_data = str(chunk)
else:
str_data += '.concat(' + str(chunk) + ')'
- code += '''Module['FS_createDataFile']('/%s', '%s', %s, true, true);\n''' % (os.path.dirname(filename), os.path.basename(filename), str_data)
+ code += '''Module['FS_createDataFile']('%s', '%s', %s, true, true);\n''' % (dirname, basename, str_data)
elif file_['mode'] == 'preload':
# Preload
varname = 'filePreload%d' % counter
@@ -389,7 +392,7 @@ for file_ in data_files:
assert(arrayBuffer, 'Loading file %(filename)s failed.');
var byteArray = !arrayBuffer.subarray ? new Uint8Array(arrayBuffer) : arrayBuffer;
%(prepare)s
- Module['FS_createPreloadedFile']('/%(dirname)s', '%(basename)s', byteArray, true, true, function() {
+ Module['FS_createPreloadedFile']('%(dirname)s', '%(basename)s', byteArray, true, true, function() {
%(finish)s
}%(fail)s);
};
@@ -399,8 +402,8 @@ for file_ in data_files:
'request': 'DataRequest', # In the past we also supported XHRs here
'varname': varname,
'filename': filename,
- 'dirname': os.path.dirname(filename),
- 'basename': os.path.basename(filename),
+ 'dirname': dirname,
+ 'basename': basename,
'prepare': prepare,
'finish': finish,
'fail': '' if filename[-4:] not in AUDIO_SUFFIXES else ''', function() { Module['removeRunDependency']('fp %s') }''' % filename # workaround for chromium bug 124926 (still no audio with this, but at least we don't hang)