Add MRI 1.8 Support #163

Open
Ghabry wants to merge 3 commits from Ghabry/mri-1.8 into master
Ghabry commented 2017-05-12 00:37:38 +00:00 (Migrated from github.com)

This allows compiling of mkxp against Ruby 1.8.7 (tested with p374).

To test that it works simply start a RPG Maker XP game. If you get "Win32Api not found" instead of "Syntax error" it works ;).

This is mostly implemented by providing wrapper functions and macros (mostly copy-pasted from ruby 2.4) in binding-util.h.

Known issues:

  • Everything encoding related is no-op by now. Includes the UTF8-Marhsaller. Guess I need to use the iconv-module here. I know that ruby reworked the whole encoding code in Ruby 2 but my Ruby knowledge is almost zero so I'm a bit lost here :(
  • ruby_option (like ruby_sysinit) segfaults when called. call removed for now
  • rb_check_typeddata not implemented
  • rb_typeddata_is_kind_of not implemented
  • rb_hash_lookup2 not implemented but this is only in a RGSS3 codepath, so not relevant
  • rb_str_catf not implemented (so no stacktrace printed in error case)
  • raiseDisposedAccess will never raise

That typed data stuff was a bit tricky to fake because Ruby 1.8 does not have this typed data struct. But is good enough to launch games. Though some sanity checks are missing (see issues above)

To The Moon (Windows version) with 2.4 MRI:
screenshot_20170512_023350

With 1.8 MRI:
screenshot_20170512_023314

With 1.8 MRI and some WinApi emulation (Mouse cursor is stuck):
screenshot_20170512_023212

This allows compiling of mkxp against Ruby 1.8.7 (tested with p374). To test that it works simply start a RPG Maker XP game. If you get "Win32Api not found" instead of "Syntax error" it works ;). This is mostly implemented by providing wrapper functions and macros (mostly copy-pasted from ruby 2.4) in binding-util.h. Known issues: - Everything encoding related is no-op by now. Includes the UTF8-Marhsaller. Guess I need to use the iconv-module here. I know that ruby reworked the whole encoding code in Ruby 2 but my Ruby knowledge is almost zero so I'm a bit lost here :( - ~~ruby_option (like ruby_sysinit) segfaults when called.~~ call removed for now - rb_check_typeddata not implemented - rb_typeddata_is_kind_of not implemented - ~~rb_hash_lookup2 not implemented but this is only in a RGSS3 codepath, so not relevant~~ - ~~rb_str_catf not implemented (so no stacktrace printed in error case)~~ - ~~raiseDisposedAccess will never raise~~ That typed data stuff was a bit tricky to fake because Ruby 1.8 does not have this typed data struct. But is good enough to launch games. Though some sanity checks are missing (see issues above) To The Moon (Windows version) with 2.4 MRI: ![screenshot_20170512_023350](https://cloud.githubusercontent.com/assets/1331889/25977362/7a2ca61e-36bb-11e7-96db-786f7854b737.png) With 1.8 MRI: ![screenshot_20170512_023314](https://cloud.githubusercontent.com/assets/1331889/25977364/7a40b924-36bb-11e7-9221-e87105d4e977.png) With 1.8 MRI and some WinApi emulation (Mouse cursor is stuck): ![screenshot_20170512_023212](https://cloud.githubusercontent.com/assets/1331889/25977363/7a3a9080-36bb-11e7-9942-47a9b7762b4b.png)
Ghabry commented 2017-05-12 10:33:50 +00:00 (Migrated from github.com)

Also fixed compile for MRI 1.9, but this crashes with
"[BUG] object allocation during garbage collection phase"
on startup >.>

Also fixed compile for MRI 1.9, but this crashes with "[BUG] object allocation during garbage collection phase" on startup >.>
Ancurio (Migrated from github.com) requested changes 2017-05-19 18:13:03 +00:00
Ancurio (Migrated from github.com) left a comment

Other than the minor formatting, I can't comment too much on the 1.8 since I'm not familiar with the differences to 2.x, but I'd really like to get this merged to start the effort even if not everything is working yet.

Thanks for your work!

Other than the minor formatting, I can't comment too much on the 1.8 since I'm not familiar with the differences to 2.x, but I'd really like to get this merged to start the effort even if not everything is working yet. Thanks for your work!
Ancurio (Migrated from github.com) commented 2017-05-19 17:56:29 +00:00

dead code comment?

dead code comment?
Ancurio (Migrated from github.com) commented 2017-05-19 17:57:24 +00:00

Is there an issue with implementing this in 1.8? Does 1.8 not allow raising exceptions from C?

Edit: Oh it probably has to do with getting the class name from the typed data object, I see.

Is there an issue with implementing this in 1.8? Does 1.8 not allow raising exceptions from C? Edit: Oh it probably has to do with getting the class name from the typed data object, I see.
Ancurio (Migrated from github.com) commented 2017-05-19 17:59:13 +00:00

Please use /* */ for documentative comments

Please use /* */ for documentative comments
Ancurio (Migrated from github.com) commented 2017-05-19 17:59:38 +00:00

The rest of the code base puts opening braces on a new line

The rest of the code base puts opening braces on a new line
Ancurio (Migrated from github.com) commented 2017-05-19 18:09:06 +00:00

What is the equivalent 1.8 function for this?

What is the equivalent 1.8 function for this?
Ancurio (Migrated from github.com) commented 2017-05-19 18:06:59 +00:00

random whitespace change?

random whitespace change?
Ancurio (Migrated from github.com) reviewed 2017-05-19 18:16:12 +00:00
@ -32,7 +32,9 @@
#include "boost-hash.h"
#include <ruby.h>
#ifndef RUBY_LEGACY_VERSION
Ancurio (Migrated from github.com) commented 2017-05-19 18:16:07 +00:00

If this defined by a ruby header, or do we define it?

If this defined by a ruby header, or do we define it?
@ -322,0 +388,4 @@
void rb_enc_set_default_external(VALUE)
{
// not relevant
Ancurio (Migrated from github.com) commented 2017-05-19 18:14:34 +00:00

missing newline at end

missing newline at end
Ghabry (Migrated from github.com) reviewed 2017-05-22 16:09:50 +00:00
Ghabry (Migrated from github.com) commented 2017-05-22 16:09:50 +00:00

Calling this somehow segfaults Ruby and I have no idea why. Will remove it.

Calling this somehow segfaults Ruby and I have no idea why. Will remove it.
Ghabry (Migrated from github.com) reviewed 2017-05-22 16:11:04 +00:00
@ -32,7 +32,9 @@
#include "boost-hash.h"
#include <ruby.h>
#ifndef RUBY_LEGACY_VERSION
Ghabry (Migrated from github.com) commented 2017-05-22 16:11:04 +00:00

I define it. Problem is that checking for 1.8 vs. 1.9 is ugly to write so I introduced a new macro for 1.8 only. You can suggest a better macro name :D

I define it. Problem is that checking for 1.8 vs. 1.9 is ugly to write so I introduced a new macro for 1.8 only. You can suggest a better macro name :D
Ghabry commented 2017-05-22 17:28:15 +00:00 (Migrated from github.com)

I can't comment too much on the 1.8 since I'm not familiar with the differences to 2.x

I'm also coding blind because the documentation for MRI 1.8 is basicly non-existent :D

Added raiseDisposedAccess (though the reported classname will be quite useless, just some internal class(#12345678). Though the bookkeeping for storing the "emulated typed data classname" somewhere is not worth the afford imho. So the sanity checks will also not work (they always return true) but I guess they bomb a bit later then. Or do you have any ideas to solve this with not too much work?

rb_str_catf and rb_hash_lookup2 are implemented. hash_lookup is quite useless, only used in VX Ace codepath.

The stacktrace somehow only always contains one element in my tests and I have no idea why o.O

> I can't comment too much on the 1.8 since I'm not familiar with the differences to 2.x I'm also coding blind because the documentation for MRI 1.8 is basicly non-existent :D Added raiseDisposedAccess (though the reported classname will be quite useless, just some internal class(#12345678). Though the bookkeeping for storing the "emulated typed data classname" somewhere is not worth the afford imho. So the sanity checks will also not work (they always return true) but I guess they bomb a bit later then. Or do you have any ideas to solve this with not too much work? rb_str_catf and rb_hash_lookup2 are implemented. hash_lookup is quite useless, only used in VX Ace codepath. The stacktrace somehow only always contains one element in my tests and I have no idea why o.O
Ghabry commented 2017-09-16 12:19:28 +00:00 (Migrated from github.com)

Rebased my changes but I can't test if I failed with my rebase because I can't get mkxp to compile because PhysFS changed the API >.>. I also applied @carstene1ns PR, but I still get

rgssad.cpp:507:1: error: conversión no válida de ‘int (*)(void*, const char*, PHYSFS_EnumerateCallback, const char*, void*) {aka int (*)(void*, const char*, PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*), const char*, void*)}’ a ‘PHYSFS_EnumerateCallbackResult (*)(void*, const char*, PHYSFS_EnumerateCallback, const char*, void*) {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*), const char*, void*)}’ [-fpermissive]
 };
 ^
rgssad.cpp:528:1: error: conversión no válida de ‘int (*)(void*, const char*, PHYSFS_EnumerateCallback, const char*, void*) {aka int (*)(void*, const char*, PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*), const char*, void*)}’ a ‘PHYSFS_EnumerateCallbackResult (*)(void*, const char*, PHYSFS_EnumerateCallback, const char*, void*) {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*), const char*, void*)}’ [-fpermissive]
 };
 ^
src/rgssad.cpp:638:1: error: conversión no válida de ‘int (*)(void*, const char*, PHYSFS_EnumerateCallback, const char*, void*) {aka int (*)(void*, const char*, PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*), const char*, void*)}’ a ‘PHYSFS_EnumerateCallbackResult (*)(void*, const char*, PHYSFS_EnumerateCallback, const char*, void*) {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*), const char*, void*)}’ [-fpermissive]
 };
 ^
make[2]: *** [CMakeFiles/mkxp.dir/build.make:983: CMakeFiles/mkxp.dir/src/rgssad.cpp.o] Error 1
make[2]: *** Se espera a que terminen otras tareas....
filesystem.cpp: En la función ‘int cacheEnumCB(void*, const char*, const char*)’:
filesystem.cpp:429:44: error: conversión no válida de ‘int (*)(void*, const char*, const char*)’ a ‘PHYSFS_EnumerateCallback {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*)}’ [-fpermissive]
   PHYSFS_enumerate(fullPath, cacheEnumCB, d);
                                            ^
In file included from src/rgssad.h:25:0,
                 from src/filesystem.cpp:24:
/usr/include/physfs.h:2746:17: nota:   argumento de inicialización 2 de ‘int PHYSFS_enumerate(const char*, PHYSFS_EnumerateCallback, void*)’
 PHYSFS_DECL int PHYSFS_enumerate(const char *dir, PHYSFS_EnumerateCallback c,
                 ^~~~~~~~~~~~~~~~
src/filesystem.cpp: En la función miembro ‘void FileSystem::createPathCache()’:
src/filesystem.cpp:452:41: error: conversión no válida de ‘int (*)(void*, const char*, const char*)’ a ‘PHYSFS_EnumerateCallback {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*)}’ [-fpermissive]
  PHYSFS_enumerate("", cacheEnumCB, &data);
                                         ^
In file included from src/rgssad.h:25:0,
                 from src/filesystem.cpp:24:
/usr/include/physfs.h:2746:17: nota:   argumento de inicialización 2 de ‘int PHYSFS_enumerate(const char*, PHYSFS_EnumerateCallback, void*)’
 PHYSFS_DECL int PHYSFS_enumerate(const char *dir, PHYSFS_EnumerateCallback c,
                 ^~~~~~~~~~~~~~~~
src/filesystem.cpp: En la función ‘int findFontsFolderCB(void*, const char*, const char*)’:
src/filesystem.cpp:517:46: error: conversión no válida de ‘int (*)(void*, const char*, const char*)’ a ‘PHYSFS_EnumerateCallback {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*)}’ [-fpermissive]
   PHYSFS_enumerate(fname, fontSetEnumCB, data);
                                              ^
In file included from src/rgssad.h:25:0,
                 from src/filesystem.cpp:24:
/usr/include/physfs.h:2746:17: nota:   argumento de inicialización 2 de ‘int PHYSFS_enumerate(const char*, PHYSFS_EnumerateCallback, void*)’
 PHYSFS_DECL int PHYSFS_enumerate(const char *dir, PHYSFS_EnumerateCallback c,
                 ^~~~~~~~~~~~~~~~
src/filesystem.cpp: En la función miembro ‘void FileSystem::initFontSets(SharedFontState&)’:
src/filesystem.cpp:526:45: error: conversión no válida de ‘int (*)(void*, const char*, const char*)’ a ‘PHYSFS_EnumerateCallback {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*)}’ [-fpermissive]
  PHYSFS_enumerate(".", findFontsFolderCB, &d);
                                             ^
In file included from src/rgssad.h:25:0,
                 from src/filesystem.cpp:24:
/usr/include/physfs.h:2746:17: nota:   argumento de inicialización 2 de ‘int PHYSFS_enumerate(const char*, PHYSFS_EnumerateCallback, void*)’
 PHYSFS_DECL int PHYSFS_enumerate(const char *dir, PHYSFS_EnumerateCallback c,
                 ^~~~~~~~~~~~~~~~
src/filesystem.cpp: En la función miembro ‘void FileSystem::openRead(FileSystem::OpenHandler&, const char*)’:
src/filesystem.cpp:663:46: error: conversión no válida de ‘int (*)(void*, const char*, const char*)’ a ‘PHYSFS_EnumerateCallback {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*)}’ [-fpermissive]
   PHYSFS_enumerate(dir, openReadEnumCB, &data);
                                              ^
In file included from src/rgssad.h:25:0,
                 from src/filesystem.cpp:24:
/usr/include/physfs.h:2746:17: nota:   argumento de inicialización 2 de ‘int PHYSFS_enumerate(const char*, PHYSFS_EnumerateCallback, void*)’
 PHYSFS_DECL int PHYSFS_enumerate(const char *dir, PHYSFS_EnumerateCallback c,
                 ^~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/mkxp.dir/build.make:263: CMakeFiles/mkxp.dir/src/filesystem.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/mkxp.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

Any idea?

Rebased my changes but I can't test if I failed with my rebase because I can't get mkxp to compile because PhysFS changed the API >.>. I also applied @carstene1ns PR, but I still get ``` rgssad.cpp:507:1: error: conversión no válida de ‘int (*)(void*, const char*, PHYSFS_EnumerateCallback, const char*, void*) {aka int (*)(void*, const char*, PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*), const char*, void*)}’ a ‘PHYSFS_EnumerateCallbackResult (*)(void*, const char*, PHYSFS_EnumerateCallback, const char*, void*) {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*), const char*, void*)}’ [-fpermissive] }; ^ rgssad.cpp:528:1: error: conversión no válida de ‘int (*)(void*, const char*, PHYSFS_EnumerateCallback, const char*, void*) {aka int (*)(void*, const char*, PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*), const char*, void*)}’ a ‘PHYSFS_EnumerateCallbackResult (*)(void*, const char*, PHYSFS_EnumerateCallback, const char*, void*) {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*), const char*, void*)}’ [-fpermissive] }; ^ src/rgssad.cpp:638:1: error: conversión no válida de ‘int (*)(void*, const char*, PHYSFS_EnumerateCallback, const char*, void*) {aka int (*)(void*, const char*, PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*), const char*, void*)}’ a ‘PHYSFS_EnumerateCallbackResult (*)(void*, const char*, PHYSFS_EnumerateCallback, const char*, void*) {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*), const char*, void*)}’ [-fpermissive] }; ^ make[2]: *** [CMakeFiles/mkxp.dir/build.make:983: CMakeFiles/mkxp.dir/src/rgssad.cpp.o] Error 1 make[2]: *** Se espera a que terminen otras tareas.... filesystem.cpp: En la función ‘int cacheEnumCB(void*, const char*, const char*)’: filesystem.cpp:429:44: error: conversión no válida de ‘int (*)(void*, const char*, const char*)’ a ‘PHYSFS_EnumerateCallback {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*)}’ [-fpermissive] PHYSFS_enumerate(fullPath, cacheEnumCB, d); ^ In file included from src/rgssad.h:25:0, from src/filesystem.cpp:24: /usr/include/physfs.h:2746:17: nota: argumento de inicialización 2 de ‘int PHYSFS_enumerate(const char*, PHYSFS_EnumerateCallback, void*)’ PHYSFS_DECL int PHYSFS_enumerate(const char *dir, PHYSFS_EnumerateCallback c, ^~~~~~~~~~~~~~~~ src/filesystem.cpp: En la función miembro ‘void FileSystem::createPathCache()’: src/filesystem.cpp:452:41: error: conversión no válida de ‘int (*)(void*, const char*, const char*)’ a ‘PHYSFS_EnumerateCallback {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*)}’ [-fpermissive] PHYSFS_enumerate("", cacheEnumCB, &data); ^ In file included from src/rgssad.h:25:0, from src/filesystem.cpp:24: /usr/include/physfs.h:2746:17: nota: argumento de inicialización 2 de ‘int PHYSFS_enumerate(const char*, PHYSFS_EnumerateCallback, void*)’ PHYSFS_DECL int PHYSFS_enumerate(const char *dir, PHYSFS_EnumerateCallback c, ^~~~~~~~~~~~~~~~ src/filesystem.cpp: En la función ‘int findFontsFolderCB(void*, const char*, const char*)’: src/filesystem.cpp:517:46: error: conversión no válida de ‘int (*)(void*, const char*, const char*)’ a ‘PHYSFS_EnumerateCallback {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*)}’ [-fpermissive] PHYSFS_enumerate(fname, fontSetEnumCB, data); ^ In file included from src/rgssad.h:25:0, from src/filesystem.cpp:24: /usr/include/physfs.h:2746:17: nota: argumento de inicialización 2 de ‘int PHYSFS_enumerate(const char*, PHYSFS_EnumerateCallback, void*)’ PHYSFS_DECL int PHYSFS_enumerate(const char *dir, PHYSFS_EnumerateCallback c, ^~~~~~~~~~~~~~~~ src/filesystem.cpp: En la función miembro ‘void FileSystem::initFontSets(SharedFontState&)’: src/filesystem.cpp:526:45: error: conversión no válida de ‘int (*)(void*, const char*, const char*)’ a ‘PHYSFS_EnumerateCallback {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*)}’ [-fpermissive] PHYSFS_enumerate(".", findFontsFolderCB, &d); ^ In file included from src/rgssad.h:25:0, from src/filesystem.cpp:24: /usr/include/physfs.h:2746:17: nota: argumento de inicialización 2 de ‘int PHYSFS_enumerate(const char*, PHYSFS_EnumerateCallback, void*)’ PHYSFS_DECL int PHYSFS_enumerate(const char *dir, PHYSFS_EnumerateCallback c, ^~~~~~~~~~~~~~~~ src/filesystem.cpp: En la función miembro ‘void FileSystem::openRead(FileSystem::OpenHandler&, const char*)’: src/filesystem.cpp:663:46: error: conversión no válida de ‘int (*)(void*, const char*, const char*)’ a ‘PHYSFS_EnumerateCallback {aka PHYSFS_EnumerateCallbackResult (*)(void*, const char*, const char*)}’ [-fpermissive] PHYSFS_enumerate(dir, openReadEnumCB, &data); ^ In file included from src/rgssad.h:25:0, from src/filesystem.cpp:24: /usr/include/physfs.h:2746:17: nota: argumento de inicialización 2 de ‘int PHYSFS_enumerate(const char*, PHYSFS_EnumerateCallback, void*)’ PHYSFS_DECL int PHYSFS_enumerate(const char *dir, PHYSFS_EnumerateCallback c, ^~~~~~~~~~~~~~~~ make[2]: *** [CMakeFiles/mkxp.dir/build.make:263: CMakeFiles/mkxp.dir/src/filesystem.cpp.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/mkxp.dir/all] Error 2 make: *** [Makefile:84: all] Error 2 ``` Any idea?
carstene1ns commented 2017-09-16 12:24:56 +00:00 (Migrated from github.com)
My PR is not yet updated with the change @Ancurio requested... https://hg.icculus.org/icculus/physfs/rev/22c7dd45c588 https://hg.icculus.org/icculus/physfs/rev/97d3641bfba3
Ghabry commented 2017-09-16 13:15:22 +00:00 (Migrated from github.com)

Thanks. https://gist.github.com/Ghabry/001c7e920b4a62089220866e7ce68a09 compiles for me now and can confirm that the rebase was successful 👍

Thanks. https://gist.github.com/Ghabry/001c7e920b4a62089220866e7ce68a09 compiles for me now and can confirm that the rebase was successful 👍
carstene1ns commented 2017-09-16 20:29:28 +00:00 (Migrated from github.com)

Thank you for fixing my PR! =)

Thank you for fixing my PR! =)
KuromeSan commented 2021-12-22 01:15:33 +00:00 (Migrated from github.com)

do you know if this works with ruby 1.8.1 specifically? iirc, the mkxp-z bindings dont

do you know if this works with ruby 1.8.1 specifically? iirc, the mkxp-z bindings dont
Ghabry commented 2021-12-22 01:48:43 +00:00 (Migrated from github.com)

Not tested. Because it is a minor update I assumed it does not have any breaking changes. Is there any game that does not work with 1.8.7?

Not tested. Because it is a minor update I assumed it does not have any breaking changes. Is there any game that does not work with 1.8.7?
KuromeSan commented 2021-12-22 02:00:50 +00:00 (Migrated from github.com)

Not tested. Because it is a minor update I assumed it does not have any breaking changes. Is there any game that does not work with 1.8.7?

yeah ive found one thats throwing some subclass error or some shit,

anyway tried on ruby 1.8.1,
got

root@Silica-Ubuntu:/home/silica/mkxp-ruby18/build# make
[  1%] Linking CXX executable mkxp.bin.x86_64
/usr/bin/ld: CMakeFiles/mkxp.dir/binding-mri/binding-util.cpp.o: in function `rb_hash_lookup2(unsigned long, unsigned long, unsigned long)':
binding-util.cpp:(.text+0x11ef): undefined reference to `rb_hash_lookup'

> Not tested. Because it is a minor update I assumed it does not have any breaking changes. Is there any game that does not work with 1.8.7? yeah ive found one thats throwing some subclass error or some shit, anyway tried on ruby 1.8.1, got ``` root@Silica-Ubuntu:/home/silica/mkxp-ruby18/build# make [ 1%] Linking CXX executable mkxp.bin.x86_64 /usr/bin/ld: CMakeFiles/mkxp.dir/binding-mri/binding-util.cpp.o: in function `rb_hash_lookup2(unsigned long, unsigned long, unsigned long)': binding-util.cpp:(.text+0x11ef): undefined reference to `rb_hash_lookup' ```
Ghabry commented 2021-12-22 02:07:40 +00:00 (Migrated from github.com)

Is this the only error?

Replace the content of my rb_hash_lookup2 function with return def

Should be fine because it is only used by rgss3 code

Is this the only error? Replace the content of my rb_hash_lookup2 function with ``return def`` Should be fine because it is only used by rgss3 code
KuromeSan commented 2021-12-22 02:10:11 +00:00 (Migrated from github.com)

maybe add like ifdef RUBY_API_VERSION_TEENY == 1

anyway it built, but does not seem to work, even with a basic RTP project :D
Screenshot from 2021-12-22 15-10-49

maybe add like ifdef RUBY_API_VERSION_TEENY == 1 anyway it built, but does not seem to work, even with a basic RTP project :D ![Screenshot from 2021-12-22 15-10-49](https://user-images.githubusercontent.com/39113159/147023297-4c264f63-50b6-46b8-bd92-7c6730c8b9ca.png)
Ghabry commented 2021-12-22 02:16:21 +00:00 (Migrated from github.com)

Well no idea then.
Needs more work to find the underlying issue first

Well no idea then. Needs more work to find the underlying issue first
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
You can also view command line instructions.

Step 1:

From your project repository, check out a new branch and test the changes.
git checkout -b Ghabry/mri-1.8 master
git pull origin Ghabry/mri-1.8

Step 2:

Merge the changes and update on Forgejo.
git checkout master
git merge --no-ff Ghabry/mri-1.8
git push origin master
Sign in to join this conversation.
No reviewers
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: MapleShrine/mkxp#163
No description provided.