Opened 2 years ago

Closed 2 years ago

#6447 closed defect (fixed)

[macOS] Building Spidermonkey fails

Reported by: Langbart Owned by: wraitii
Priority: Should Have Milestone: Alpha 26
Component: Core engine Keywords:
Cc: Patch: Phab:D4542

Description (last modified by 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 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 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 virtualenv/#history). Commit [26208] added a line of code to upgrade to the latest module.

  • ps/trunk/libraries/source/spidermonkey/patch.sh

     
    22# Apply patches if needed
    33# This script gets called from build.sh.
    44
     5# SM78 fails to create virtual envs on macs with python > 3.7
     6# Unfortunately, 3.7 is mostly unavailable on ARM macs.
     7# Therefore, replace the custom script with a more up-to-date version from pip
     8# if python is detected to be newer than 3.7.
     9if [ "$(uname -s)" = "Darwin" ];
     10then
     11    PYTHON_MINOR_VERSION="$(python3 -c 'import sys; print(sys.version_info.minor)')"
     12    if [ "$PYTHON_MINOR_VERSION" -gt 7 ];
     13    then
     14        # SM actually uses features from the full-fledged virtualenv package
     15        # and not just venv, so install it to be safe.
     16        # Install it locally to not pollute anything.
     17        pip3 install --upgrade -t virtualenv virtualenv
     18        export PYTHONPATH="$(pwd)/virtualenv:$PYTHONPATH"
     19        patch -p1 < ../FixVirtualEnv.diff
     20    fi
     21fi
     22
    523# Mozglue symbols need to be linked against static builds.
    624# https://bugzilla.mozilla.org/show_bug.cgi?id=1588340
    725patch -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.

Change History (4)

comment:1 by Langbart, 2 years ago

Description: modified (diff)

workaround

comment:2 by Langbart, 2 years ago

virtualenv==20.13.3 has been released (see virtualenv/#history), but the problem persists.

Adding a link to this ticket in the wiki article. wiki/BuildInstructions#macOSTroubleshooting

comment:3 by wraitii, 2 years ago

Patch: Phab:D4542

Should be fixed by Phab:D4542

comment:4 by wraitii, 2 years ago

Owner: set to wraitii
Resolution: fixed
Status: newclosed

In 26648:

Fix SM compilation error caused by newer virtualenv versions.

Install a version known to work. Up-to-date 3.7, 3.8, 3.9 and 3.10 are confirmed to work, though versions shipped with older mac systems might not.

Reported by: Langbart

Tested By: Langbart

Fixes #6447

Differential Revision: https://code.wildfiregames.com/D4542

Note: See TracTickets for help on using tickets.