Skip to content

Gem install fails on MacOS #1429

@kride

Description

@kride

Just recently upgraded some Homebrew packages, including MySQL@8.0, and thus required a reinstall for mysql2-gem.

Compilation of extension fails with following error:

compiling client.c
In file included from client.c:15:
./mysql_enc_name_to_ruby.h:43:35: error: unknown type name 'str'
   43 | mysql2_mysql_enc_name_to_rb_hash (str, len)
      |                                   ^
./mysql_enc_name_to_ruby.h:43:40: error: unknown type name 'len'
   43 | mysql2_mysql_enc_name_to_rb_hash (str, len)
      |                                        ^
./mysql_enc_name_to_ruby.h:43:44: error: expected ';' after top level declarator
   43 | mysql2_mysql_enc_name_to_rb_hash (str, len)
      |                                            ^
      |                                            ;
./mysql_enc_name_to_ruby.h:44:27: error: illegal storage class on file-scoped variable
   44 |      register const char *str;
      |                           ^
./mysql_enc_name_to_ruby.h:45:28: error: illegal storage class on file-scoped variable
   45 |      register unsigned int len;
      |                            ^
./mysql_enc_name_to_ruby.h:46:1: error: expected identifier or '('
   46 | {
      | ^
./mysql_enc_name_to_ruby.h:86:30: error: unknown type name 'str'
   86 | mysql2_mysql_enc_name_to_rb (str, len)
      |                              ^
./mysql_enc_name_to_ruby.h:86:35: error: unknown type name 'len'
   86 | mysql2_mysql_enc_name_to_rb (str, len)
      |                                   ^
./mysql_enc_name_to_ruby.h:86:39: error: expected ';' after top level declarator
   86 | mysql2_mysql_enc_name_to_rb (str, len)
      |                                       ^
      |                                       ;
./mysql_enc_name_to_ruby.h:87:27: error: illegal storage class on file-scoped variable
   87 |      register const char *str;
      |                           ^
./mysql_enc_name_to_ruby.h:88:28: error: illegal storage class on file-scoped variable
   88 |      register unsigned int len;
      |                            ^
./mysql_enc_name_to_ruby.h:89:1: error: expected identifier or '('
   89 | {
      | ^
12 errors generated.
make: *** [client.o] Error 1

make failed, exit code 2

AI proposed following patch which worked on a forked branch

--- a/ext/mysql2/mysql_enc_name_to_ruby.h
+++ b/ext/mysql2/mysql_enc_name_to_ruby.h
@@ -40,9 +40,7 @@ inline
 #endif
 #endif
 static unsigned int
-mysql2_mysql_enc_name_to_rb_hash (str, len)
-     register const char *str;
-     register unsigned int len;
+mysql2_mysql_enc_name_to_rb_hash (const char *str, unsigned int len)
 {
   static const unsigned char asso_values[] =
     {
@@ -83,9 +81,7 @@ __attribute__ ((__gnu_inline__))
 #endif
 #endif
 const struct mysql2_mysql_enc_name_to_rb_map *
-mysql2_mysql_enc_name_to_rb (str, len)
-     register const char *str;
-     register unsigned int len;
+mysql2_mysql_enc_name_to_rb (const char *str, unsigned int len)
 {
   enum
     {

Currently using:
mysql2-gem 0.5.7
MacOS 26.4 (also on 26.3)
ruby 3.4.9 (also on 3.4.7)
MySQL 8.0.45 (tried also with 8.4 and with just mysql-client@8.0)
XCode 26.4 (also 26.2)
clang 21.0.0 (also 17.0.0)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions