diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-08-08 15:03:41 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-08-08 15:03:41 -0700 |
commit | 634bac9e1ed719c5779d3116a3797b3aef4b2012 (patch) | |
tree | ea6e3e39584431f09992e5637a750cd05f75b782 | |
parent | fef6f254c305db507904d1068af4f9e25ce5769a (diff) | |
parent | 47c1d35c944c8ef954aa3d8de9686e35c2858a24 (diff) |
Merge pull request #1470 from inolen/preload_path_fixes
file preload path fixes
-rw-r--r-- | src/library.js | 4 | ||||
-rw-r--r-- | src/library_browser.js | 13 | ||||
-rw-r--r-- | src/library_sdl.js | 8 | ||||
-rwxr-xr-x | tests/runner.py | 29 | ||||
-rw-r--r-- | tests/sdl_image.c | 8 | ||||
-rw-r--r-- | tests/sdl_image_jpeg.c | 45 | ||||
-rw-r--r-- | tools/file_packager.py | 13 |
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) |