components/lua/patches/solaris-64-bit.patch
author Rich Burridge <rich.burridge@oracle.com>
Mon, 22 Sep 2014 08:30:56 -0700
changeset 2104 72ce614559ff
permissions -rw-r--r--
19065730 64-bit lua doesn't have a separate path to find native modules 19636481 The lua binaries in /usr/bin should be 64-bit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2104
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     1
When looking for lua shared objects, dynamically adjust the pathnames to
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     2
include "64/", when running a 64-bit lua executable.
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     3
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     4
For example:
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     5
  /usr/lib/lua/5.2/gv.so
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     6
becomes:
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     7
  /usr/lib/lua/5.2/64/gv.so
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     8
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     9
The lua maintainers are not interested in this patch.
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    10
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    11
--- src/loadlib.c.orig	2014-09-19 06:57:40.032464104 -0700
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    12
+++ src/loadlib.c	2014-09-19 16:39:01.502592411 -0700
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    13
@@ -346,29 +346,94 @@
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    14
 }
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    15
 
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    16
 
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    17
+/*
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    18
+** Return 1 if template is a shared object (has an extension of ".so"),
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    19
+** otherwise 0.
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    20
+*/
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    21
+static int
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    22
+issharedobj(const char *template) {
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    23
+  const char *ext;
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    24
+  if (strlen(template) < 3)
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    25
+    return 0;
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    26
+  ext = template + strlen(template) - 3;
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    27
+  return strcmp(ext, ".so") == 0;
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    28
+}
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    29
+
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    30
+/*
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    31
+** Return 1 if this is a 64-bit executable, otherwise 0.
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    32
+*/
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    33
+static int is64bit() {
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    34
+  return sizeof(void *) == 8;
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    35
+}
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    36
+
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    37
 static const char *searchpath (lua_State *L, const char *name,
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    38
                                              const char *path,
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    39
                                              const char *sep,
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    40
                                              const char *dirsep) {
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    41
   luaL_Buffer msg;  /* to build error message */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    42
+  char *name64;
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    43
   luaL_buffinit(L, &msg);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    44
   if (*sep != '\0')  /* non-empty separator? */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    45
     name = luaL_gsub(L, name, sep, dirsep);  /* replace it by 'dirsep' */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    46
+  if (is64bit()) {
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    47
+    name64 = calloc(strlen(name) + 4, 1);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    48
+    strcpy(name64, "64/");
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    49
+    strcat(name64, name);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    50
+  } else
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    51
+    name64 = strdup(name);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    52
   while ((path = pushnexttemplate(L, path)) != NULL) {
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    53
-    const char *filename = luaL_gsub(L, lua_tostring(L, -1),
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    54
-                                     LUA_PATH_MARK, name);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    55
+    char *filename;
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    56
+    const char *item = lua_tostring(L, -1);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    57
+
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    58
+    if (is64bit() && issharedobj(item)) {
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    59
+      name = name64;
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    60
+      if (strstr(item, LUA_PATH_MARK))
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    61
+        filename = (char *)luaL_gsub(L, item, LUA_PATH_MARK, name);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    62
+      else {
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    63
+        /*
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    64
+         * There's nothing to substitute, so we have to go digging through the
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    65
+         * path to find where to put the 64-bit directory.  Search for "/" in
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    66
+         * the template element until we can't find any more, replace that with
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    67
+         * "?", and replace that with "/64/".
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    68
+         */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    69
+        char *p1, *p2;
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    70
+        char *s = strdup(item);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    71
+        for (p1 = s; p1; p1 = strstr(p1 + 1, "/"))
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    72
+          p2 = p1;
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    73
+        if (p2 != s)
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    74
+          *p2 = '?';
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    75
+        else {
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    76
+          /*
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    77
+           * We didn't find any slashes; that either means there aren't any, or
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    78
+           * item is in the root directory.
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    79
+           */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    80
+          free(s);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    81
+          s = calloc(strlen(item) + 3, 1);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    82
+          if (item[0] == '/')
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    83
+            strcpy(s, "/64");
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    84
+          else
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    85
+            strcpy(s, "64/");
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    86
+          strcat(s, item);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    87
+        }
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    88
+        filename = (char *)luaL_gsub(L, s, LUA_PATH_MARK, "/64/");
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    89
+        free(s);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    90
+      }
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    91
+    } else
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    92
+      filename = (char *)luaL_gsub(L, item, LUA_PATH_MARK, name);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    93
     lua_remove(L, -2);  /* remove path template */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    94
-    if (readable(filename))  /* does file exist and is readable? */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    95
+    if (readable(filename)) {  /* does file exist and is readable? */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    96
+      free(name64);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    97
       return filename;  /* return that file name */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    98
+    }
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    99
     lua_pushfstring(L, "\n\tno file " LUA_QS, filename);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
   100
     lua_remove(L, -2);  /* remove file name */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
   101
     luaL_addvalue(&msg);  /* concatenate error msg. entry */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
   102
   }
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
   103
   luaL_pushresult(&msg);  /* create error message */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
   104
+  free(name64);
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
   105
   return NULL;  /* not found */
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
   106
 }
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
   107
 
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
   108
-
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
   109
 static int ll_searchpath (lua_State *L) {
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
   110
   const char *f = searchpath(L, luaL_checkstring(L, 1),
72ce614559ff 19065730 64-bit lua doesn't have a separate path to find native modules
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
   111
                                 luaL_checkstring(L, 2),