Explorar o código

Add some mono root dir hints to the build script

This enhancement is specially noticeable in OSX, since it includes Mono's install location (both official and homebrew). This makes it possible to build Godot with Mono on OSX without pkg-config (pkg-config is bundled with Mono, but it's not added to PATH, so finding it would require finding the Mono root directory first).
Ignacio Etcheverry %!s(int64=7) %!d(string=hai) anos
pai
achega
b032738a51
Modificáronse 1 ficheiros con 16 adicións e 1 borrados
  1. 16 1
      modules/mono/config.py

+ 16 - 1
modules/mono/config.py

@@ -99,6 +99,8 @@ def configure(env):
         if not mono_root:
         if not mono_root:
             raise RuntimeError('Mono installation directory not found')
             raise RuntimeError('Mono installation directory not found')
 
 
+        print('Found Mono root directory: ' + mono_root)
+
         mono_version = mono_root_try_find_mono_version(mono_root)
         mono_version = mono_root_try_find_mono_version(mono_root)
         configure_for_mono_version(env, mono_version)
         configure_for_mono_version(env, mono_version)
 
 
@@ -164,6 +166,14 @@ def configure(env):
             if os.getenv('MONO64_PREFIX'):
             if os.getenv('MONO64_PREFIX'):
                 mono_root = os.getenv('MONO64_PREFIX')
                 mono_root = os.getenv('MONO64_PREFIX')
 
 
+        if not mono_root and sys.platform == 'darwin':
+            # Try with some known directories under OSX
+            hint_dirs = ['/Library/Frameworks/Mono.framework/Versions/Current', '/usr/local/var/homebrew/linked/mono']
+            for hint_dir in hint_dirs:
+                if os.path.isdir(hint_dir):
+                    mono_root = hint_dir
+                    break
+
         # We can't use pkg-config to link mono statically,
         # We can't use pkg-config to link mono statically,
         # but we can still use it to find the mono root directory
         # but we can still use it to find the mono root directory
         if not mono_root and mono_static:
         if not mono_root and mono_static:
@@ -172,6 +182,8 @@ def configure(env):
                 raise RuntimeError('Building with mono_static=yes, but failed to find the mono prefix with pkg-config. Specify one manually')
                 raise RuntimeError('Building with mono_static=yes, but failed to find the mono prefix with pkg-config. Specify one manually')
 
 
         if mono_root:
         if mono_root:
+            print('Found Mono root directory: ' + mono_root)
+
             mono_version = mono_root_try_find_mono_version(mono_root)
             mono_version = mono_root_try_find_mono_version(mono_root)
             configure_for_mono_version(env, mono_version)
             configure_for_mono_version(env, mono_version)
 
 
@@ -216,6 +228,9 @@ def configure(env):
         else:
         else:
             assert not mono_static
             assert not mono_static
 
 
+            # TODO: Add option to force using pkg-config
+            print('Mono root directory not found. Using pkg-config instead')
+
             mono_version = pkgconfig_try_find_mono_version()
             mono_version = pkgconfig_try_find_mono_version()
             configure_for_mono_version(env, mono_version)
             configure_for_mono_version(env, mono_version)
 
 
@@ -248,7 +263,7 @@ def configure(env):
 def configure_for_mono_version(env, mono_version):
 def configure_for_mono_version(env, mono_version):
     if mono_version is None:
     if mono_version is None:
         raise RuntimeError('Mono JIT compiler version not found')
         raise RuntimeError('Mono JIT compiler version not found')
-    print('Mono JIT compiler version: ' + str(mono_version))
+    print('Found Mono JIT compiler version: ' + str(mono_version))
     if mono_version >= LooseVersion("5.12.0"):
     if mono_version >= LooseVersion("5.12.0"):
         env.Append(CPPFLAGS=['-DHAS_PENDING_EXCEPTIONS'])
         env.Append(CPPFLAGS=['-DHAS_PENDING_EXCEPTIONS'])