[MacPorts] #63033: Notes on Godot 3.3.2 and legacy OS's.

MacPorts noreply at macports.org
Sun Jun 6 16:03:05 UTC 2021


#63033: Notes on Godot 3.3.2 and legacy OS's.
------------------------------------+--------------------
  Reporter:  Wowfunhappy            |      Owner:  (none)
      Type:  enhancement            |     Status:  new
  Priority:  Low                    |  Milestone:
 Component:  ports                  |    Version:  2.7.1
Resolution:                         |   Keywords:
      Port:  godot macports-libcxx  |
------------------------------------+--------------------
Description changed by Wowfunhappy:

Old description:

> As of this writing, MacPorts's Godot port is still on version 3.2.3. The
> latest upstream version, 3.3.2, has officially dropped support for OS's
> older than 10.12, but it can still work at least as far back as 10.9 with
> some tweaks, and with the help of macports-libcxx.
>
> I wanted to document what I'd discovered for future users.
>

> ----------
> == 1.
>
> In the Portfile, the line:
>
> {{{
> reinplace s|${sconstruct_default_mp_clang}\.0|${selected_clang_v}|g \
>     ${worksrcpath}/SConstruct
> }}}
>
> needs to be replaced with
>
> {{{
> reinplace s|${sconstruct_default_mp_clang}\.0|${selected_clang_v}|g \
>     ${worksrcpath}/platform/osx/detect.py
> }}}
>
> Because SConstruct was factored out into separate, per-platform files.
>

> ----------
> == 2.
>
> For a reason I wasn't able to track down, the lines:
>
> {{{
> #if MAC_OS_X_VERSION_MAX_ALLOWED < 101200
> #if MAC_OS_X_VERSION_MAX_ALLOWED >= 101200
> }}}
>
> in `platform/osx/os_osx.mm` no longer have the desired effect; the
> compiler is convinced MAX_ALLOWED is always above 101200. I had to
> manually comment out the relevant blocks of code.
>
> There is probably a better way to fix this.
>

> ----------
> == 3.
>
> As mentioned above, Godot needs to be compiled against MacPorts-libcxx. I
> tried various ways of setting this nicely via flags and environment
> variables in the Portfile, but the only thing that seemed to work was
> editing `/platform/osx/detect.py`. Below line 108, which reads
> `env.Append(LINKFLAGS=["-isysroot", "$MACOS_SDK_PATH"])`, I added:
>
> {{{
> env.Append(CCXFLAGS=["-nostdinc++", "-I/opt/local/include/libcxx/v1"])
> env.Append(LINKFLAGS=["-L/opt/local/lib/libcxx"])
> }}}
>

> ----------
> == 4.
>
> After the port has been installed, edit Godot's `info.plist` to change
> `LSMinimumSystemVersion` from 10.12 to whatever OS you're running.
>

> ----------
>
> == Addenda
>
> === Addendum A.
>
> I set the compiler to Clang 11 for possibly-better compatibility with
> macports-libcxx. I do not know if this was actually necessary. In the
> Portfile:
>
> `set clang_versions {5.0 6.0 7.0 8.0 9.0 11}`
>
> === Addendum B.
>
> To make Godot itself produce binaries (games) that are compatible with
> 10.11 and below, you need to also recompile the export templates.
> Reinstall Godot twice, with one of the below lines added to your portfile
> for the debug and release templates, respectively:
>
> {{{
> build.env-append tools=no
> build.env-append tools=no target=release
> }}}
>
> After each build, make sure the binary is linked to macports-libcxx via a
> relative path, such as via:
>
> {{{
> sudo port install dylibbundler
> dylibbundler -p '@executable_path/../Frameworks' -d ../Frameworks -b -x
> Godot
> }}}
>

> Then replace the debug and release binaries in the OSX template with your
> versions, and copy over the Frameworks folder with the macports-libcxx
> libraries. Don't forget to change the minimum OS in info.plist!
>
> ----------
>
> Because of the level of non-optimal hackery involved (esp point 2), I
> don't personally intend to submit a pull request for any of this; these
> are just notes! 🙂 Let me know if there's a better place than trac for
> such things in the future.

New description:

 As of this writing, MacPorts's Godot port is still on version 3.2.3. The
 latest upstream version, 3.3.2, has officially dropped support for OS's
 older than 10.12, but it can still work at least as far back as 10.9 with
 some tweaks, and with the help of macports-libcxx.

 I wanted to document what I'd discovered for future users.


 ----------
 == 1.

 In the Portfile, the line:

 {{{
 reinplace s|${sconstruct_default_mp_clang}\.0|${selected_clang_v}|g \
     ${worksrcpath}/SConstruct
 }}}

 needs to be replaced with

 {{{
 reinplace s|${sconstruct_default_mp_clang}\.0|${selected_clang_v}|g \
     ${worksrcpath}/platform/osx/detect.py
 }}}

 Because SConstruct was factored out into separate, per-platform files.


 ----------
 == 2.

 For a reason I wasn't able to track down, the lines:

 {{{
 #if MAC_OS_X_VERSION_MAX_ALLOWED < 101200
 #if MAC_OS_X_VERSION_MAX_ALLOWED >= 101200
 }}}

 in `platform/osx/os_osx.mm` no longer have the desired effect; the
 compiler is convinced MAX_ALLOWED is always above 101200. I had to
 manually comment out the relevant blocks of code.

 There is probably a better way to fix this.


 ----------
 == 3.

 As mentioned above, Godot needs to be compiled against MacPorts-libcxx. I
 tried various ways of setting this nicely via flags and environment
 variables in the Portfile, but the only thing that seemed to work was
 editing `/platform/osx/detect.py`. Below line 108, which reads
 `env.Append(LINKFLAGS=["-isysroot", "$MACOS_SDK_PATH"])`, I added:

 {{{
 env.Append(CCXFLAGS=["-nostdinc++", "-I/opt/local/include/libcxx/v1"])
 env.Append(LINKFLAGS=["-L/opt/local/lib/libcxx"])
 }}}


 ----------
 == 4.

 After the port has been installed, edit Godot's `info.plist` to change
 `LSMinimumSystemVersion` from 10.12 to whatever OS you're running.


 ----------

 == Addenda

 === Addendum A.

 I set the compiler to Clang 11 for possibly-better compatibility with
 macports-libcxx. I do not know if this was actually necessary. In the
 Portfile:

 `set clang_versions {5.0 6.0 7.0 8.0 9.0 11}`

 === Addendum B.

 To make Godot itself produce binaries (games) that are compatible with
 10.11 and below, you need to also recompile the export templates.
 Reinstall Godot twice, with the below added to your portfile:

 {{{
 build.env-append tools=no
 }}}

 After each build, make sure the binary is linked to macports-libcxx via a
 relative path, such as via:

 {{{
 sudo port install dylibbundler
 dylibbundler -p '@executable_path/../Frameworks' -d ../Frameworks -b -x
 Godot
 }}}


 Then replace the debug binary in the OSX template with your versions, and
 copy over the Frameworks folder with the macports-libcxx libraries. I
 can't figure out how to build a non-debug binary for the template.

 ----------

 Because of the level of non-optimal hackery involved (esp point 2), I
 don't personally intend to submit a pull request for any of this; these
 are just notes! 🙂 Let me know if there's a better place than trac for
 such things in the future.

--

-- 
Ticket URL: <https://trac.macports.org/ticket/63033#comment:3>
MacPorts <https://www.macports.org/>
Ports system for macOS


More information about the macports-tickets mailing list