Add a test for very-long-filename support. NFC
diff --git a/emsdk.py b/emsdk.py
index 64d2714..f527860 100644
--- a/emsdk.py
+++ b/emsdk.py
@@ -574,14 +574,13 @@
 
       unzip_to_dir = dest_dir
       if common_subdir:
-        debug_print(f'common_subdir: {common_subdir}')
         unzip_to_dir = os.path.join(os.path.dirname(dest_dir), 'unzip_temp')
 
       # Now do the actual decompress.
-      target_dir = fix_potentially_long_windows_pathname(unzip_to_dir)
+      unzip_to_dir = fix_potentially_long_windows_pathname(unzip_to_dir)
       for member in zf.infolist():
-        zf.extract(member, target_dir)
-        dst_filename = os.path.join(unzip_to_dir, member.filename)
+        zf.extract(member, unzip_to_dir)
+        dst_filename = os.path.join(unzip_to_dir, os.path.normpath(member.filename))
 
         # See: https://stackoverflow.com/questions/42326428/zipfile-in-python-file-permission
         unix_attributes = member.external_attr >> 16
diff --git a/test/test.py b/test/test.py
index a1b871c..47602fb 100755
--- a/test/test.py
+++ b/test/test.py
@@ -32,6 +32,12 @@
   return [x]
 
 
+def copy_emsdk_to(targetdir):
+  for filename in os.listdir('.'):
+    if not filename.startswith('.') and not os.path.isdir(filename):
+      shutil.copy2(filename, os.path.join(targetdir, filename))
+
+
 def check_call(cmd, **kwargs):
   if type(cmd) is not list:
     cmd = cmd.split()
@@ -79,6 +85,16 @@
   return name
 
 
+def get_longest_path_in_dir(dirname):
+  longest = ''
+  for root, _dirs, files in os.walk(dirname):
+    for f in files:
+      fullname = os.path.join(root, f)
+      if len(fullname) > len(longest):
+        longest = fullname
+  return longest
+
+
 # Set up
 
 TAGS = json.loads(open('emscripten-releases-tags.json').read())
@@ -137,6 +153,46 @@
     run_emsdk('install latest')
     run_emsdk('activate latest')
 
+  def test_extrememly_long_filenames(self):
+    # We have special support for filenames longer than 256 on windows. This
+    # test installs emsdk in path that exceeds this limit in order to test
+    # this handling.
+    longpath = os.path.abspath('very_long_filename_indeed')
+
+    additional = 140 - len(longpath)
+    longpath += 'x' * additional
+    if os.path.exists(longpath):
+      # shutil.rmtree requires the special long path prefix
+      longpath_with_prefix = '\\\\?\\' + longpath
+      assert os.path.exists(longpath_with_prefix)
+      shutil.rmtree(longpath_with_prefix)
+
+    os.makedirs(longpath)
+    copy_emsdk_to(longpath)
+
+    emsdk = os.path.join(longpath, 'emsdk')
+    if WINDOWS:
+      emsdk += '.bat'
+    self.assertTrue(os.path.exists(emsdk))
+
+    check_call([emsdk, 'install', 'latest'])
+    check_call([emsdk, 'activate', 'latest'])
+
+    # Check that emcc exists in the expected location
+    emcc = os.path.join(longpath, 'upstream', 'emscripten', 'emcc')
+    if WINDOWS:
+      emcc += '.bat'
+    print(emcc)
+    self.assertTrue(os.path.exists(emcc))
+
+    # Find the longest installed path and assert this is longer than 256
+    longest_path = get_longest_path_in_dir(longpath)
+    print(f'longest ({len(longest_path)}: {longest_path})')
+    self.assertGreater(len(longest_path), 256)
+
+    # Finally make sure we can actaully compile something
+    check_call([emcc, 'hello_world.c'])
+
   def test_unknown_arch(self):
     env = os.environ.copy()
     env['EMSDK_ARCH'] = 'mips'
@@ -236,9 +292,7 @@
     print('test non-git update')
 
     temp_dir = tempfile.mkdtemp()
-    for filename in os.listdir('.'):
-      if not filename.startswith('.') and not os.path.isdir(filename):
-        shutil.copy2(filename, os.path.join(temp_dir, filename))
+    copy_emsdk_to(temp_dir)
 
     olddir = os.getcwd()
     try: