﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	resolution	keywords	cc	phab_field
6447	[macOS] Building Spidermonkey fails	Langbart		"Current version [26557], even after I uninstalled Python@3.9 and Python@3.10 from my system, I could not build Spidermonkey.

=== to reproduce
* Try to build Spidermonkey 

=== bisect
The first commit which allows me to build Spidermonkey is [26207], at [26208] it fails. \\
* Commit [26208] refers to [https://code.wildfiregames.com/D4424#188855 D4424], on the **9/Jan/22** I could build Spidermonkey. \\
* I was also able to build Spidermonkey on the **15/Jan/22** as described  on patch [https://code.wildfiregames.com/D4437#189356 D4437].


=== Traceback (most recent call last):

{{{
File ""../js/src/../../configure.py"", line 181, in <module>
    sys.exit(main(sys.argv))
  File ""../js/src/../../configure.py"", line 52, in main
    sandbox.run(os.path.join(os.path.dirname(__file__), 'moz.configure'))
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 445, in run
    self.include_file(path)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 436, in include_file
    exec_(code, self)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/util.py"", line 53, in exec_
    exec(object, globals, locals)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/moz.configure"", line 7, in <module>
    include('build/moz.configure/init.configure')
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 773, in include_impl
    self.include_file(what)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 436, in include_file
    exec_(code, self)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/util.py"", line 53, in exec_
    exec(object, globals, locals)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/build/moz.configure/init.configure"", line 254, in <module>
    def virtualenv_python3(env_python, build_env, mozconfig, help):
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 756, in decorator
    depends = DependsFunction(self, func, dependencies, when=when)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 129, in __init__
    sandbox._value_for(self)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 542, in _value_for
    return self._value_for_depends(obj)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/util.py"", line 1018, in method_call
    cache[args] = self.func(instance, *args)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 551, in _value_for_depends
    value = obj.result()
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/util.py"", line 1018, in method_call
    cache[args] = self.func(instance, *args)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 155, in result
    return self._func(*resolved_args)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 1161, in wrapped
    return new_func(*args, **kwargs)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/build/moz.configure/init.configure"", line 324, in virtualenv_python3
    found_python = find_program(python)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 1160, in wrapped
    self._apply_imports(func, glob)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 883, in _apply_imports
    glob[what] = self._get_one_import('%s%s' % (_from, what))
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/configure/__init__.py"", line 963, in _get_one_import
    exec_(import_line, {}, glob)
  File ""/Users/paria/0ad/libraries/source/spidermonkey/mozjs-78.6.0/python/mozbuild/mozbuild/util.py"", line 53, in exec_
    exec(object, globals, locals)
  File ""<string>"", line 1, in <module>
ModuleNotFoundError: No module named 'mozfile'
ERROR: Error building spidermonkey
}}}

=== Workaround
The module `virtualenv==20.13.1` works. The issue lies in `virtualenv==20.13.2`, which was released on 24/Feb/22 and is currently the latest version (see [https://pypi.org/project/virtualenv/#history virtualenv/#history]). Commit [26208] added a line of code to upgrade to the latest module.


{{{#!diff
Index: ps/trunk/libraries/source/spidermonkey/patch.sh
===================================================================
--- ps/trunk/libraries/source/spidermonkey/patch.sh
+++ ps/trunk/libraries/source/spidermonkey/patch.sh
@@ -2,6 +2,24 @@
 # Apply patches if needed
 # This script gets called from build.sh.
 
+# SM78 fails to create virtual envs on macs with python > 3.7
+# Unfortunately, 3.7 is mostly unavailable on ARM macs.
+# Therefore, replace the custom script with a more up-to-date version from pip
+# if python is detected to be newer than 3.7.
+if [ ""$(uname -s)"" = ""Darwin"" ];
+then
+    PYTHON_MINOR_VERSION=""$(python3 -c 'import sys; print(sys.version_info.minor)')""
+    if [ ""$PYTHON_MINOR_VERSION"" -gt 7 ];
+    then
+        # SM actually uses features from the full-fledged virtualenv package
+        # and not just venv, so install it to be safe.
+        # Install it locally to not pollute anything.
+        pip3 install --upgrade -t virtualenv virtualenv
+        export PYTHONPATH=""$(pwd)/virtualenv:$PYTHONPATH""
+        patch -p1 < ../FixVirtualEnv.diff
+    fi
+fi
+
 # Mozglue symbols need to be linked against static builds.
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1588340
 patch -p1 < ../FixMozglue.diff
}}}

* I can build Spidermoneky by installing python@3.9 with the specific `virtualenv==20.13.1` module and remove the line of upgrading your virtualenv from the `patch.sh` file."	defect	new	Should Have	Alpha 26	Core engine				
