summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2014-06-18 11:23:43 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2014-06-18 11:23:43 +0000
commitc594597e3480253f361154c71491adf03bc896d3 (patch)
tree4f656c0861c6ccf00118df41fc5e224bfc4e31b9
parent352dcc581b20e25d7cc394cf602b3617cd305369 (diff)
LuaTeX: Somewhat better handling of Lua52/LuaJIT
git-svn-id: svn://tug.org/texlive/trunk@34278 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-cmap-table.hh380
-rw-r--r--Build/source/libs/lua52/ChangeLog4
-rw-r--r--Build/source/libs/lua52/Makefile.am8
-rw-r--r--Build/source/libs/lua52/Makefile.in3
-rwxr-xr-xBuild/source/libs/lua52/configure2
-rw-r--r--Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/ChangeLog6
-rw-r--r--Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/patch-05-LuaJITTeX16
-rw-r--r--Build/source/libs/luajit/LuaJIT-2.0.3/src/lj_str.c10
-rw-r--r--Build/source/libs/luajit/Makefile.am4
-rwxr-xr-xBuild/source/libs/luajit/configure18
-rw-r--r--Build/source/libs/luajit/configure.ac13
-rw-r--r--Build/source/libs/luajit/native/Makefile.in1
-rw-r--r--Build/source/libs/luajit/native/aclocal.m41
-rwxr-xr-xBuild/source/libs/luajit/native/configure6
-rw-r--r--Build/source/libs/luajit/native/configure.ac9
-rw-r--r--Build/source/texk/web2c/luatexdir/ChangeLog12
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/lstatslib.c6
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/luainit.w57
-rw-r--r--Build/source/texk/web2c/luatexdir/lua/luatex-api.h11
-rw-r--r--Build/source/texk/web2c/luatexdir/luatex.c6
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/printing.w30
21 files changed, 477 insertions, 126 deletions
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-cmap-table.hh b/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-cmap-table.hh
new file mode 100644
index 00000000000..b0f01e120fc
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.29/src/hb-ot-cmap-table.hh
@@ -0,0 +1,380 @@
+/*
+ * Copyright © 2014 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_CMAP_TABLE_HH
+#define HB_OT_CMAP_TABLE_HH
+
+#include "hb-open-type-private.hh"
+
+
+namespace OT {
+
+
+/*
+ * cmap -- Character To Glyph Index Mapping Table
+ */
+
+#define HB_OT_TAG_cmap HB_TAG('c','m','a','p')
+
+
+struct CmapSubtableFormat0
+{
+ friend struct CmapSubtable;
+
+ private:
+ inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+ {
+ hb_codepoint_t gid = codepoint < 256 ? glyphIdArray[codepoint] : 0;
+ if (!gid)
+ return false;
+ *glyph = gid;
+ return true;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) {
+ TRACE_SANITIZE (this);
+ return TRACE_RETURN (c->check_struct (this));
+ }
+
+ protected:
+ USHORT format; /* Format number is set to 0. */
+ USHORT length; /* Byte length of this subtable. */
+ USHORT language; /* Ignore. */
+ BYTE glyphIdArray[256];/* An array that maps character
+ * code to glyph index values. */
+ public:
+ DEFINE_SIZE_STATIC (6 + 256);
+};
+
+struct CmapSubtableFormat4
+{
+ friend struct CmapSubtable;
+
+ private:
+ inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+ {
+ unsigned int segCount;
+ const USHORT *endCount;
+ const USHORT *startCount;
+ const USHORT *idDelta;
+ const USHORT *idRangeOffset;
+ const USHORT *glyphIdArray;
+ unsigned int glyphIdArrayLength;
+
+ segCount = this->segCountX2 / 2;
+ endCount = this->values;
+ startCount = endCount + segCount + 1;
+ idDelta = startCount + segCount;
+ idRangeOffset = idDelta + segCount;
+ glyphIdArray = idRangeOffset + segCount;
+ glyphIdArrayLength = (this->length - 16 - 8 * segCount) / 2;
+
+ /* Custom bsearch. */
+ int min = 0, max = (int) segCount - 1;
+ unsigned int i;
+ while (min <= max)
+ {
+ int mid = (min + max) / 2;
+ if (codepoint < startCount[mid])
+ max = mid - 1;
+ else if (codepoint > endCount[mid])
+ min = mid + 1;
+ else
+ {
+ i = mid;
+ goto found;
+ }
+ }
+ return false;
+
+ found:
+ hb_codepoint_t gid;
+ unsigned int rangeOffset = idRangeOffset[i];
+ if (rangeOffset == 0)
+ gid = codepoint + idDelta[i];
+ else
+ {
+ /* Somebody has been smoking... */
+ unsigned int index = rangeOffset / 2 + (codepoint - startCount[i]) + i - segCount;
+ if (unlikely (index >= glyphIdArrayLength))
+ return false;
+ gid = glyphIdArray[index];
+ if (unlikely (!gid))
+ return false;
+ gid += idDelta[i];
+ }
+
+ *glyph = gid & 0xFFFF;
+ return true;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) {
+ TRACE_SANITIZE (this);
+ return TRACE_RETURN (c->check_struct (this) &&
+ c->check_range (this, length) &&
+ 16 + 4 * (unsigned int) segCountX2 < length);
+ }
+
+ protected:
+ USHORT format; /* Format number is set to 4. */
+ USHORT length; /* This is the length in bytes of the
+ * subtable. */
+ USHORT language; /* Ignore. */
+ USHORT segCountX2; /* 2 x segCount. */
+ USHORT searchRange; /* 2 * (2**floor(log2(segCount))) */
+ USHORT entrySelector; /* log2(searchRange/2) */
+ USHORT rangeShift; /* 2 x segCount - searchRange */
+
+ USHORT values[VAR];
+#if 0
+ USHORT endCount[segCount]; /* End characterCode for each segment,
+ * last=0xFFFF. */
+ USHORT reservedPad; /* Set to 0. */
+ USHORT startCount[segCount]; /* Start character code for each segment. */
+ SHORT idDelta[segCount]; /* Delta for all character codes in segment. */
+ USHORT idRangeOffset[segCount];/* Offsets into glyphIdArray or 0 */
+ USHORT glyphIdArray[VAR]; /* Glyph index array (arbitrary length) */
+#endif
+
+ public:
+ DEFINE_SIZE_ARRAY (14, values);
+};
+
+struct CmapSubtableLongGroup
+{
+ friend struct CmapSubtableFormat12;
+ friend struct CmapSubtableFormat13;
+
+ int cmp (hb_codepoint_t codepoint) const
+ {
+ if (codepoint < startCharCode) return -1;
+ if (codepoint > endCharCode) return +1;
+ return 0;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) {
+ TRACE_SANITIZE (this);
+ return TRACE_RETURN (c->check_struct (this));
+ }
+
+ private:
+ ULONG startCharCode; /* First character code in this group. */
+ ULONG endCharCode; /* Last character code in this group. */
+ ULONG glyphID; /* Glyph index; interpretation depends on
+ * subtable format. */
+ public:
+ DEFINE_SIZE_STATIC (12);
+};
+
+template <typename UINT>
+struct CmapSubtableTrimmed
+{
+ friend struct CmapSubtable;
+
+ private:
+ inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+ {
+ /* Rely on our implicit array bound-checking. */
+ hb_codepoint_t gid = glyphIdArray[codepoint - startCharCode];
+ if (!gid)
+ return false;
+ *glyph = gid;
+ return true;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) {
+ TRACE_SANITIZE (this);
+ return TRACE_RETURN (c->check_struct (this) && glyphIdArray.sanitize (c));
+ }
+
+ protected:
+ UINT formatReserved; /* Subtable format and (maybe) padding. */
+ UINT length; /* Byte length of this subtable. */
+ UINT language; /* Ignore. */
+ UINT startCharCode; /* First character code covered. */
+ GenericArrayOf<UINT, GlyphID>
+ glyphIdArray; /* Array of glyph index values for character
+ * codes in the range. */
+ public:
+ DEFINE_SIZE_ARRAY (5 * sizeof (UINT), glyphIdArray);
+};
+
+struct CmapSubtableFormat6 : CmapSubtableTrimmed<USHORT> {};
+struct CmapSubtableFormat10 : CmapSubtableTrimmed<ULONG > {};
+
+template <typename T>
+struct CmapSubtableLongSegmented
+{
+ friend struct CmapSubtable;
+
+ private:
+ inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+ {
+ int i = groups.search (codepoint);
+ if (i == -1)
+ return false;
+ *glyph = T::group_get_glyph (groups[i], codepoint);
+ return true;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) {
+ TRACE_SANITIZE (this);
+ return TRACE_RETURN (c->check_struct (this) && groups.sanitize (c));
+ }
+
+ protected:
+ USHORT format; /* Subtable format; set to 12. */
+ USHORT reserved; /* Reserved; set to 0. */
+ ULONG length; /* Byte length of this subtable. */
+ ULONG language; /* Ignore. */
+ LongArrayOf<CmapSubtableLongGroup>
+ groups; /* Groupings. */
+ public:
+ DEFINE_SIZE_ARRAY (16, groups);
+};
+
+struct CmapSubtableFormat12 : CmapSubtableLongSegmented<CmapSubtableFormat12>
+{
+ static inline hb_codepoint_t group_get_glyph (const CmapSubtableLongGroup &group,
+ hb_codepoint_t u)
+ { return group.glyphID + (u - group.startCharCode); }
+};
+
+struct CmapSubtableFormat13 : CmapSubtableLongSegmented<CmapSubtableFormat13>
+{
+ static inline hb_codepoint_t group_get_glyph (const CmapSubtableLongGroup &group,
+ hb_codepoint_t u HB_UNUSED)
+ { return group.glyphID; }
+};
+
+struct CmapSubtable
+{
+ /* Note: We intentionally do NOT implement subtable formats 2 and 8. */
+
+ inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
+ {
+ switch (u.format) {
+ case 0: return u.format0 .get_glyph(codepoint, glyph);
+ case 4: return u.format4 .get_glyph(codepoint, glyph);
+ case 6: return u.format6 .get_glyph(codepoint, glyph);
+ case 10: return u.format10.get_glyph(codepoint, glyph);
+ case 12: return u.format12.get_glyph(codepoint, glyph);
+ case 13: return u.format13.get_glyph(codepoint, glyph);
+ default:return false;
+ }
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) {
+ TRACE_SANITIZE (this);
+ if (!u.format.sanitize (c)) return TRACE_RETURN (false);
+ switch (u.format) {
+ case 0: return TRACE_RETURN (u.format0 .sanitize (c));
+ case 4: return TRACE_RETURN (u.format4 .sanitize (c));
+ case 6: return TRACE_RETURN (u.format6 .sanitize (c));
+ case 10: return TRACE_RETURN (u.format10.sanitize (c));
+ case 12: return TRACE_RETURN (u.format12.sanitize (c));
+ case 13: return TRACE_RETURN (u.format13.sanitize (c));
+ default:return TRACE_RETURN (true);
+ }
+ }
+
+ protected:
+ union {
+ USHORT format; /* Format identifier */
+ CmapSubtableFormat0 format0;
+ CmapSubtableFormat4 format4;
+ CmapSubtableFormat6 format6;
+ CmapSubtableFormat10 format10;
+ CmapSubtableFormat12 format12;
+ CmapSubtableFormat13 format13;
+ } u;
+ public:
+ DEFINE_SIZE_UNION (2, format);
+};
+
+
+struct EncodingRecord
+{
+ int cmp (const EncodingRecord &other) const
+ {
+ int ret;
+ ret = other.platformID.cmp (platformID);
+ if (ret) return ret;
+ ret = other.encodingID.cmp (encodingID);
+ if (ret) return ret;
+ return 0;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c, void *base) {
+ TRACE_SANITIZE (this);
+ return TRACE_RETURN (c->check_struct (this) &&
+ subtable.sanitize (c, base));
+ }
+
+ USHORT platformID; /* Platform ID. */
+ USHORT encodingID; /* Platform-specific encoding ID. */
+ LongOffsetTo<CmapSubtable>
+ subtable; /* Byte offset from beginning of table to the subtable for this encoding. */
+ public:
+ DEFINE_SIZE_STATIC (8);
+};
+
+struct cmap
+{
+ static const hb_tag_t tableTag = HB_OT_TAG_cmap;
+
+ inline const CmapSubtable *find_subtable (unsigned int platform_id,
+ unsigned int encoding_id) const
+ {
+ EncodingRecord key;
+ key.platformID.set (platform_id);
+ key.encodingID.set (encoding_id);
+
+ int result = encodingRecord.search (key);
+ if (result == -1)
+ return NULL;
+
+ return &(this+encodingRecord[result].subtable);
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) {
+ TRACE_SANITIZE (this);
+ return TRACE_RETURN (c->check_struct (this) &&
+ likely (version == 0) &&
+ encodingRecord.sanitize (c, this));
+ }
+
+ USHORT version; /* Table version number (0). */
+ ArrayOf<EncodingRecord> encodingRecord; /* Encoding tables. */
+ public:
+ DEFINE_SIZE_ARRAY (4, encodingRecord);
+};
+
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_CMAP_TABLE_HH */
diff --git a/Build/source/libs/lua52/ChangeLog b/Build/source/libs/lua52/ChangeLog
index 1098c44d2dc..cb0a43c5918 100644
--- a/Build/source/libs/lua52/ChangeLog
+++ b/Build/source/libs/lua52/ChangeLog
@@ -1,3 +1,7 @@
+2014-06-02 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * Makefile.am (AM_CPPFLAGS): Drop LUAI_HASHLIMIT.
+
2014-03-21 Peter Breitenlohner <peb@mppmu.mpg.de>
* configure.ac: Add -DHAVE_UNISTD_H to LUA52_DEFINES because
diff --git a/Build/source/libs/lua52/Makefile.am b/Build/source/libs/lua52/Makefile.am
index 7b53e991372..3eb696515d6 100644
--- a/Build/source/libs/lua52/Makefile.am
+++ b/Build/source/libs/lua52/Makefile.am
@@ -1,4 +1,4 @@
-## Proxy Makefile.am to build lua52 for TeX Live.
+## Proxy Makefile.am to build Lua52 for TeX Live.
##
## Copyright (C) 2013, 2014 Peter Breitenlohner <tex-live@tug.org>
##
@@ -6,9 +6,7 @@
## gives unlimited permission to copy and/or distribute it,
## with or without modifications, as long as this notice is preserved.
##
-ACLOCAL_AMFLAGS = -I ../../m4
-
-## We want to re-distribute the whole original zlib source tree.
+## We want to re-distribute the whole Lua52 source tree.
##
EXTRA_DIST = $(LUA52_TREE)
@@ -22,7 +20,7 @@ dist-hook:
SUBDIRS = . include
-AM_CPPFLAGS = -I$(top_srcdir)/$(LUA52_TREE)/src $(LUA52_DEFINES) -DLUAI_HASHLIMIT=6
+AM_CPPFLAGS = -I$(top_srcdir)/$(LUA52_TREE)/src $(LUA52_DEFINES)
AM_CFLAGS = $(WARNING_CFLAGS)
noinst_LIBRARIES = liblua52.a
diff --git a/Build/source/libs/lua52/Makefile.in b/Build/source/libs/lua52/Makefile.in
index e85871336dd..c15bfae71af 100644
--- a/Build/source/libs/lua52/Makefile.in
+++ b/Build/source/libs/lua52/Makefile.in
@@ -574,10 +574,9 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-ACLOCAL_AMFLAGS = -I ../../m4
EXTRA_DIST = $(LUA52_TREE) $(LUA52_TREE)-PATCHES error.exp
SUBDIRS = . include
-AM_CPPFLAGS = -I$(top_srcdir)/$(LUA52_TREE)/src $(LUA52_DEFINES) -DLUAI_HASHLIMIT=6
+AM_CPPFLAGS = -I$(top_srcdir)/$(LUA52_TREE)/src $(LUA52_DEFINES)
AM_CFLAGS = $(WARNING_CFLAGS)
noinst_LIBRARIES = liblua52.a
nodist_liblua52_a_SOURCES = \
diff --git a/Build/source/libs/lua52/configure b/Build/source/libs/lua52/configure
index bdb379d9a7c..c7e30434d3d 100755
--- a/Build/source/libs/lua52/configure
+++ b/Build/source/libs/lua52/configure
@@ -5170,7 +5170,7 @@ fi
done
-LUA52_DEFINES=-DLUA_COMPAT_MODULE
+LUA52_DEFINES='-DLUA_COMPAT_MODULE -DLUAI_HASHLIMIT=6'
if test "x$kpse_cv_have_win32" = xno; then
LUA52_DEFINES="$LUA52_DEFINES -DLUA_USE_POSIX"
diff --git a/Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/ChangeLog b/Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/ChangeLog
index f57e15b4b73..0fa9944f9df 100644
--- a/Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/ChangeLog
+++ b/Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/ChangeLog
@@ -1,3 +1,9 @@
+2014-06-01 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * patch-05-LuaJITTeX (lj_str_new): Replace '6' by LUAI_HASHLIMIT
+ and use '#define LUAI_HASHLIMIT 5' as default as in
+ ../../libs/lua52/lua-5.2.3/src/lstring.c.
+
2014-03-14 Peter Breitenlohner <peb@mppmu.mpg.de>
Import LuaJIT-2.0.3.
diff --git a/Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/patch-05-LuaJITTeX b/Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/patch-05-LuaJITTeX
index d1e95b59f06..a33bf70ea4e 100644
--- a/Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/patch-05-LuaJITTeX
+++ b/Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/patch-05-LuaJITTeX
@@ -12,17 +12,25 @@ diff -ur -x lbitlib.c LuaJIT-2.0.3.orig/src/lj_def.h LuaJIT-2.0.3/src/lj_def.h
#define LJ_STACK_EXTRA 5 /* Extra stack space (metamethods). */
diff -ur -x lbitlib.c LuaJIT-2.0.3.orig/src/lj_str.c LuaJIT-2.0.3/src/lj_str.c
--- LuaJIT-2.0.3.orig/src/lj_str.c 2014-03-12 13:10:00.000000000 +0100
-+++ LuaJIT-2.0.3/src/lj_str.c 2014-03-14 10:04:14.540946490 +0100
-@@ -90,6 +90,8 @@
++++ LuaJIT-2.0.3/src/lj_str.c 2014-06-02 14:10:04.000000000 +0200
+@@ -90,6 +90,16 @@
g->strhash = newhash;
}
++/*
++** Lua will use at most ~(2^LUAI_HASHLIMIT) bytes from a string to
++** compute its hash
++*/
++#if !defined(LUAI_HASHLIMIT)
++#define LUAI_HASHLIMIT 5
++#endif
++
+#define cast(t, exp) ((t)(exp))
+int luajittex_choose_hash_function = 0 ;
/* Intern a string and return string object. */
GCstr *lj_str_new(lua_State *L, const char *str, size_t lenx)
{
-@@ -98,27 +100,44 @@
+@@ -98,27 +108,44 @@
GCobj *o;
MSize len = (MSize)lenx;
MSize a, b, h = len;
@@ -37,7 +45,7 @@ diff -ur -x lbitlib.c LuaJIT-2.0.3.orig/src/lj_str.c LuaJIT-2.0.3/src/lj_str.c
+ if (luajittex_choose_hash_function==0) {
+ /* Lua 5.1.5 hash function */
+ /* for 5.2 max methods we also need to patch the vm eq */
-+ step = (len>>6)+1; /* if string is too long, don't hash all its chars Was 5, we try 6*/
++ step = (len>>LUAI_HASHLIMIT)+1; /* if string is too long, don't hash all its chars */
+ for (l1=len; l1>=step; l1-=step) /* compute hash */
+ h = h ^ ((h<<5)+(h>>2)+cast(unsigned char, str[l1-1]));
+ } else {
diff --git a/Build/source/libs/luajit/LuaJIT-2.0.3/src/lj_str.c b/Build/source/libs/luajit/LuaJIT-2.0.3/src/lj_str.c
index 62ad5e891f5..b5fd45e5004 100644
--- a/Build/source/libs/luajit/LuaJIT-2.0.3/src/lj_str.c
+++ b/Build/source/libs/luajit/LuaJIT-2.0.3/src/lj_str.c
@@ -90,6 +90,14 @@ void lj_str_resize(lua_State *L, MSize newmask)
g->strhash = newhash;
}
+/*
+** Lua will use at most ~(2^LUAI_HASHLIMIT) bytes from a string to
+** compute its hash
+*/
+#if !defined(LUAI_HASHLIMIT)
+#define LUAI_HASHLIMIT 5
+#endif
+
#define cast(t, exp) ((t)(exp))
int luajittex_choose_hash_function = 0 ;
/* Intern a string and return string object. */
@@ -111,7 +119,7 @@ GCstr *lj_str_new(lua_State *L, const char *str, size_t lenx)
if (luajittex_choose_hash_function==0) {
/* Lua 5.1.5 hash function */
/* for 5.2 max methods we also need to patch the vm eq */
- step = (len>>6)+1; /* if string is too long, don't hash all its chars Was 5, we try 6*/
+ step = (len>>LUAI_HASHLIMIT)+1; /* if string is too long, don't hash all its chars */
for (l1=len; l1>=step; l1-=step) /* compute hash */
h = h ^ ((h<<5)+(h>>2)+cast(unsigned char, str[l1-1]));
} else {
diff --git a/Build/source/libs/luajit/Makefile.am b/Build/source/libs/luajit/Makefile.am
index 344e7f60f45..e32186a5f79 100644
--- a/Build/source/libs/luajit/Makefile.am
+++ b/Build/source/libs/luajit/Makefile.am
@@ -1,10 +1,10 @@
-## Makefile.am for the TeX Live subdirectory libs/luajit/native/
+## Proxy Makefile.am to build LuaJIT for TeX Live.
##
## Copyright (C) 2014 Luigi Scarso <luigi.scarso@gmail.com>
## Copyright (C) 2014 Peter Breitenlohner <tex-live@tug.org>
## You may freely use, modify and/or distribute this file.
##
-## We want to re-distribute the whole original luajit source tree.
+## We want to re-distribute the whole original LuaJIT source tree.
##
EXTRA_DIST = $(LUAJIT_TREE)
diff --git a/Build/source/libs/luajit/configure b/Build/source/libs/luajit/configure
index 1f36913ba1f..a2ae6dde03b 100755
--- a/Build/source/libs/luajit/configure
+++ b/Build/source/libs/luajit/configure
@@ -3767,6 +3767,11 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+if test "x$host_alias" != x && test "x$build_alias" = x; then :
+ as_fn_error $? "when cross-compiling you must specify both --host and --build." "$LINENO" 5
+fi
+eval kpse_build_alias=\${build_alias-$build}
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -4844,7 +4849,7 @@ if test "$ac_res" != no; then :
fi
-LUAJIT_DEFINES=-DLUAJIT_ENABLE_LUA52COMPAT
+LUAJIT_DEFINES='-DLUAJIT_ENABLE_LUA52COMPAT -DLUAI_HASHLIMIT=6'
case $host_os:$host_cpu in #(
*darwin*:x86_64) :
@@ -5465,6 +5470,7 @@ ac_config_files="$ac_config_files Makefile include/Makefile"
+
subdirs="$subdirs native"
@@ -6921,10 +6927,12 @@ test $ac_write_fail = 0 ||
ac_configure_args="$ac_configure_args DASM_ARCH=$DASM_ARCH"
if test "x$cross_compiling" = xyes; then :
- cache_file=/dev/null
- ac_configure_args="$ac_configure_args --host='$kpse_build_alias' \
- CC='$BUILDCC' CPPFLAGS='$BUILDCPPFLAGS'\
- CFLAGS='$BUILDCFLAGS' LDFLAGS='$BUILDLDFLAGS'"
+ if test "x$cache_file" != x/dev/null; then :
+ cache_file=config.cache
+fi
+ac_configure_args="$ac_configure_args --host='$kpse_build_alias' \
+CC='$BUILDCC' CFLAGS='$BUILDCFLAGS' \
+CPPFLAGS='$BUILDCPPFLAGS' LDFLAGS='$BUILDLDFLAGS'"
fi
# configure is writing to config.log, and then calls config.status.
diff --git a/Build/source/libs/luajit/configure.ac b/Build/source/libs/luajit/configure.ac
index 38ba43f560e..9d3f891d75d 100644
--- a/Build/source/libs/luajit/configure.ac
+++ b/Build/source/libs/luajit/configure.ac
@@ -15,7 +15,7 @@ AC_CONFIG_MACRO_DIRS([../../m4 m4])
KPSE_BASIC([luajit])
-AC_CANONICAL_HOST
+KPSE_CANONICAL_HOST
AC_PROG_CC
AM_PROG_AS
@@ -62,16 +62,9 @@ AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile include/Makefile])
-AC_CONFIG_SUBDIRS([native])
-
dnl Pass DASM_ARCH to the subdirectory native,
dnl which must be configured for the build system.
-dnl When cross compiling, can not share the cache file with the subdirectory!
-AC_CONFIG_COMMANDS_POST([ac_configure_args="$ac_configure_args DASM_ARCH=$DASM_ARCH"
-AS_IF([test "x$cross_compiling" = xyes],
- [cache_file=/dev/null
- ac_configure_args="$ac_configure_args --host='$kpse_build_alias' \
- CC='$BUILDCC' CPPFLAGS='$BUILDCPPFLAGS'\
- CFLAGS='$BUILDCFLAGS' LDFLAGS='$BUILDLDFLAGS'"])])
+AC_CONFIG_COMMANDS_POST([ac_configure_args="$ac_configure_args DASM_ARCH=$DASM_ARCH"])
+KPSE_NATIVE_SUBDIRS([native])
AC_OUTPUT
diff --git a/Build/source/libs/luajit/native/Makefile.in b/Build/source/libs/luajit/native/Makefile.in
index b0b90971f21..0da973b5ca1 100644
--- a/Build/source/libs/luajit/native/Makefile.in
+++ b/Build/source/libs/luajit/native/Makefile.in
@@ -95,6 +95,7 @@ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../../../m4/kpse-common.m4 \
$(top_srcdir)/../../../m4/kpse-luajit-flags.m4 \
+ $(top_srcdir)/../../../m4/kpse-search-libs.m4 \
$(top_srcdir)/../../../m4/kpse-warnings.m4 \
$(top_srcdir)/../version.ac $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
diff --git a/Build/source/libs/luajit/native/aclocal.m4 b/Build/source/libs/luajit/native/aclocal.m4
index 62977e15511..6da5fe3f569 100644
--- a/Build/source/libs/luajit/native/aclocal.m4
+++ b/Build/source/libs/luajit/native/aclocal.m4
@@ -1185,4 +1185,5 @@ AC_SUBST([am__untar])
m4_include([../../../m4/kpse-common.m4])
m4_include([../../../m4/kpse-luajit-flags.m4])
+m4_include([../../../m4/kpse-search-libs.m4])
m4_include([../../../m4/kpse-warnings.m4])
diff --git a/Build/source/libs/luajit/native/configure b/Build/source/libs/luajit/native/configure
index 5dd00401042..0a943985893 100755
--- a/Build/source/libs/luajit/native/configure
+++ b/Build/source/libs/luajit/native/configure
@@ -4444,7 +4444,7 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-LUAJIT_DEFINES=-DLUAJIT_ENABLE_LUA52COMPAT
+LUAJIT_DEFINES='-DLUAJIT_ENABLE_LUA52COMPAT -DLUAI_HASHLIMIT=6'
case $host_os:$host_cpu in #(
*darwin*:x86_64) :
@@ -4455,7 +4455,7 @@ esac
-lj_save_LIBS=$LIBS
+kpse_search_save_LIBS=$LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pow" >&5
$as_echo_n "checking for library containing pow... " >&6; }
if ${ac_cv_search_pow+:} false; then :
@@ -4512,7 +4512,7 @@ if test "$ac_res" != no; then :
fi
-LIBS=$lj_save_LIBS
+LIBS=$kpse_search_save_LIBS
case $ac_cv_search_pow in #(
"none required") :
;; #(
diff --git a/Build/source/libs/luajit/native/configure.ac b/Build/source/libs/luajit/native/configure.ac
index f023c94b15e..0eee8bb1b0e 100644
--- a/Build/source/libs/luajit/native/configure.ac
+++ b/Build/source/libs/luajit/native/configure.ac
@@ -20,14 +20,7 @@ AC_PROG_LN_S
KPSE_LUAJIT_DEFINES
-lj_save_LIBS=$LIBS
-AC_SEARCH_LIBS([pow], [m])
-LIBS=$lj_save_LIBS
-AS_CASE([$ac_cv_search_pow],
- ["none required"], [],
- [no], [AC_MSG_ERROR([Sorry, did not find pow()])],
- [MATH_LIB=$ac_cv_search_pow])
-AC_SUBST([MATH_LIB])
+KPSE_SEARCH_LIBS([MATH_LIB], [pow], [m])
AC_SUBST([DASM_ARCH])
diff --git a/Build/source/texk/web2c/luatexdir/ChangeLog b/Build/source/texk/web2c/luatexdir/ChangeLog
index accf5a718fa..845a1dd3ed2 100644
--- a/Build/source/texk/web2c/luatexdir/ChangeLog
+++ b/Build/source/texk/web2c/luatexdir/ChangeLog
@@ -1,3 +1,15 @@
+2014-06-02 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * lua/luatex-api.h: Use '#define LUAI_HASHLIMIT 5' as default,
+ as in ../../libs/lua52/lua-5.2.3/src/lstring.c and in
+ ../../libs/luajit/LuaJIT-2.0.3/src/lj_str.c.
+ * lua/lstatslib.c, tex/printing.w: Use LUAI_HASHLIMIT instead of
+ LUATEX_HASHCHARS and LUAJITTEX_HASHCHARS.
+
+ * lua/luatex-api.h: Define MyName as "LuajitTeX"/"LuaTeX" and
+ my_name as "luajittex"/"luatex".
+ * lua/luainit.w, luatex.c, tex/printing.w: Use MyName, my_name.
+
2014-05-14 Peter Breitenlohner <peb@mppmu.mpg.de>
* tex/filename.w: Avoid redefinition of promptfilenamehelpmsg,
diff --git a/Build/source/texk/web2c/luatexdir/lua/lstatslib.c b/Build/source/texk/web2c/luatexdir/lua/lstatslib.c
index eae0bcb98f4..2d301d7369f 100644
--- a/Build/source/texk/web2c/luatexdir/lua/lstatslib.c
+++ b/Build/source/texk/web2c/luatexdir/lua/lstatslib.c
@@ -89,11 +89,7 @@ static const char *luatexrevision(void)
static lua_Number get_luatexhashchars(void)
{
-#ifdef LuajitTeX
- return (lua_Number) LUAJITTEX_HASHCHARS;
-#else
- return (lua_Number) LUATEX_HASHCHARS;
-#endif
+ return (lua_Number) LUAI_HASHLIMIT;
}
static const char *get_luatexhashtype(void)
diff --git a/Build/source/texk/web2c/luatexdir/lua/luainit.w b/Build/source/texk/web2c/luatexdir/lua/luainit.w
index c95ecb43867..dbf49093516 100644
--- a/Build/source/texk/web2c/luatexdir/lua/luainit.w
+++ b/Build/source/texk/web2c/luatexdir/lua/luainit.w
@@ -53,25 +53,14 @@ and five environment variables:
@c
const_string LUATEX_IHELP[] = {
-#ifdef LuajitTeX
- "Usage: luajittex --lua=FILE [OPTION]... [TEXNAME[.tex]] [COMMANDS]",
- " or: luajittex --lua=FILE [OPTION]... \\FIRST-LINE",
- " or: luajittex --lua=FILE [OPTION]... &FMT ARGS",
- " Run LuajitTeX on TEXNAME, usually creating TEXNAME.pdf.",
-#else
- "Usage: luatex --lua=FILE [OPTION]... [TEXNAME[.tex]] [COMMANDS]",
- " or: luatex --lua=FILE [OPTION]... \\FIRST-LINE",
- " or: luatex --lua=FILE [OPTION]... &FMT ARGS",
- " Run LuaTeX on TEXNAME, usually creating TEXNAME.pdf.",
-#endif
+ "Usage: " my_name " --lua=FILE [OPTION]... [TEXNAME[.tex]] [COMMANDS]",
+ " or: " my_name " --lua=FILE [OPTION]... \\FIRST-LINE",
+ " or: " my_name " --lua=FILE [OPTION]... &FMT ARGS",
+ " Run " MyName " on TEXNAME, usually creating TEXNAME.pdf.",
" Any remaining COMMANDS are processed as luatex input, after TEXNAME is read.",
"",
" Alternatively, if the first non-option argument begins with a backslash,",
-#ifdef LuajitTeX
- " luajittex interprets all non-option arguments as an input line.",
-#else
- " luatex interprets all non-option arguments as an input line.",
-#endif
+ " " my_name " interprets all non-option arguments as an input line.",
"",
" Alternatively, if the first non-option argument begins with a &, the",
" next word is taken as the FMT to read, overriding all else. Any",
@@ -94,11 +83,7 @@ const_string LUATEX_IHELP[] = {
" --fmt=FORMAT load the format file FORMAT",
" --halt-on-error stop processing at the first error",
" --help display help and exit",
-#ifdef LuajitTeX
- " --ini be iniluajittex, for dumping formats",
-#else
- " --ini be iniluatex, for dumping formats",
-#endif
+ " --ini be ini" my_name ", for dumping formats",
" --interaction=STRING set interaction mode (STRING=batchmode/nonstopmode/scrollmode/errorstopmode)",
" --jobname=STRING set the job name to STRING",
" --kpathsea-debug=NUMBER set path searching debugging flags according to the bits of NUMBER",
@@ -419,11 +404,7 @@ static void parse_options(int ac, char **av)
} else if (ARGUMENT_IS("version")) {
print_version_banner();
/* *INDENT-OFF* */
-#ifdef LuajitTeX
- puts("\n\nExecute 'luajittex --credits' for credits and version details.\n\n"
-#else
- puts("\n\nExecute 'luatex --credits' for credits and version details.\n\n"
-#endif
+ puts("\n\nExecute '" my_name " --credits' for credits and version details.\n\n"
"There is NO warranty. Redistribution of this software is covered by\n"
"the terms of the GNU General Public License, version 2 or (at your option)\n"
"any later version. For more information about these matters, see the file\n"
@@ -442,11 +423,7 @@ static void parse_options(int ac, char **av)
print_version_banner();
/* *INDENT-OFF* */
puts("\n\nThe LuaTeX team is Hans Hagen, Hartmut Henkel, Taco Hoekwater.\n"
-#ifdef LuajitTex
- "LuajitTeX merges and builds upon (parts of) the code from these projects:\n\n"
-#else
- "LuaTeX merges and builds upon (parts of) the code from these projects:\n\n"
-#endif
+ MyName " merges and builds upon (parts of) the code from these projects:\n\n"
"tex by Donald Knuth\n"
"etex by Peter Breitenlohner, Phil Taylor and friends\n"
"omega by John Plaice and Yannis Haralambous\n"
@@ -872,33 +849,21 @@ void lua_initialize(int ac, char **av)
static char LC_CTYPE_C[] = "LC_CTYPE=C";
static char LC_COLLATE_C[] = "LC_COLLATE=C";
static char LC_NUMERIC_C[] = "LC_NUMERIC=C";
-#ifdef LuajitTeX
- static char engine_luatex[] = "engine=luajittex";
-#else
- static char engine_luatex[] = "engine=luatex";
-#endif
+ static char engine_luatex[] = "engine=" my_name;
/* Save to pass along to topenin. */
argc = ac;
argv = av;
if (luatex_svn < 0) {
-#ifdef LuajitTeX
- const char *fmt = "This is LuajitTeX, Version %s" WEB2CVERSION;
-#else
- const char *fmt = "This is LuaTeX, Version %s" WEB2CVERSION;
-#endif
+ const char *fmt = "This is " MyName ", Version %s" WEB2CVERSION;
size_t len;
len = strlen(fmt) + strlen(luatex_version_string) ;
banner = xmalloc(len);
sprintf(banner, fmt, luatex_version_string);
} else {
-#ifdef LuajitTeX
- const char *fmt = "This is LuajitTeX, Version %s" WEB2CVERSION " (rev %d)";
-#else
- const char *fmt = "This is LuaTeX, Version %s" WEB2CVERSION " (rev %d)";
-#endif
+ const char *fmt = "This is " MyName ", Version %s" WEB2CVERSION " (rev %d)";
size_t len;
len = strlen(fmt) + strlen(luatex_version_string) + 6;
banner = xmalloc(len);
diff --git a/Build/source/texk/web2c/luatexdir/lua/luatex-api.h b/Build/source/texk/web2c/luatexdir/lua/luatex-api.h
index 77792e94b4d..a42b147c301 100644
--- a/Build/source/texk/web2c/luatexdir/lua/luatex-api.h
+++ b/Build/source/texk/web2c/luatexdir/lua/luatex-api.h
@@ -30,6 +30,11 @@
# include "lualib.h"
#ifdef LuajitTeX
# include "luajit.h"
+# define MyName "LuajitTeX"
+# define my_name "luajittex"
+#else
+# define MyName "LuaTeX"
+# define my_name "luatex"
#endif
#ifdef __cplusplus
@@ -135,10 +140,8 @@ extern char *jithash_hashname ;
#endif
-#ifdef LuajitTeX
-#define LUAJITTEX_HASHCHARS 6 /* todo: It must be like that one on lj_str.c */
-#else
-#define LUATEX_HASHCHARS 6 /* todo: It must be LUAI_HASHLIMIT! */
+#if !defined(LUAI_HASHLIMIT)
+#define LUAI_HASHLIMIT 5
#endif
extern unsigned char show_luahashchars ;
diff --git a/Build/source/texk/web2c/luatexdir/luatex.c b/Build/source/texk/web2c/luatexdir/luatex.c
index fb655167849..b98c250493b 100644
--- a/Build/source/texk/web2c/luatexdir/luatex.c
+++ b/Build/source/texk/web2c/luatexdir/luatex.c
@@ -26,11 +26,7 @@ int luatex_version = 79; /* \.{\\luatexversion} */
int luatex_revision = '1'; /* \.{\\luatexrevision} */
int luatex_date_info = 2014040100; /* the compile date is now hardwired */
const char *luatex_version_string = "beta-0.79.1";
-#ifdef LuajitTeX
-const char *engine_name = "luajittex"; /* the name of this engine */
-#else
-const char *engine_name = "luatex"; /* the name of this engine */
-#endif
+const char *engine_name = my_name; /* the name of this engine */
#include <kpathsea/c-ctype.h>
#include <kpathsea/line.h>
diff --git a/Build/source/texk/web2c/luatexdir/tex/printing.w b/Build/source/texk/web2c/luatexdir/tex/printing.w
index 53bd0c79a8a..9b2404c0196 100644
--- a/Build/source/texk/web2c/luatexdir/tex/printing.w
+++ b/Build/source/texk/web2c/luatexdir/tex/printing.w
@@ -462,28 +462,16 @@ void print_banner(const char *v, int ver)
callback_id = callback_defined(start_run_callback);
if (callback_id == 0) {
if (ver < 0)
-#ifdef LuajitTeX
- fprintf(term_out, "This is LuajitTeX, Version %s ", v);
-#else
- fprintf(term_out, "This is LuaTeX, Version %s ", v);
-#endif
+ fprintf(term_out, "This is " MyName ", Version %s ", v);
else
-#ifdef LuajitTeX
- fprintf(term_out, "This is LuajitTeX, Version %s%s (rev %d) ", v,
-#else
- fprintf(term_out, "This is LuaTeX, Version %s%s (rev %d) ", v,
-#endif
+ fprintf(term_out, "This is " MyName ", Version %s%s (rev %d) ", v,
WEB2CVERSION, ver);
if (format_ident > 0)
print(format_ident);
print_ln();
if (show_luahashchars){
wterm(' ');
-#ifdef LuajitTeX
- fprintf(term_out,"Number of bits used by the hash function (luajittex): %d",LUAJITTEX_HASHCHARS);
-#else
- fprintf(term_out,"Number of bits used by the hash function (luatex): %d",LUATEX_HASHCHARS);
-#endif
+ fprintf(term_out,"Number of bits used by the hash function (" my_name "): %d",LUAI_HASHLIMIT);
print_ln();
}
if (shellenabledp) {
@@ -508,17 +496,9 @@ void log_banner(const char *v, int ver)
if (month > 12)
month = 0;
if (ver < 0)
-#ifdef LuajitTeX
- fprintf(log_file, "This is LuajitTeX, Version %s ", v);
-#else
- fprintf(log_file, "This is LuaTeX, Version %s ", v);
-#endif
+ fprintf(log_file, "This is " MyName ", Version %s ", v);
else
-#ifdef LuajitTeX
- fprintf(log_file, "This is LuajitTeX, Version %s%s (rev %d) ", v,
-#else
- fprintf(log_file, "This is LuaTeX, Version %s%s (rev %d) ", v,
-#endif
+ fprintf(log_file, "This is " MyName ", Version %s%s (rev %d) ", v,
WEB2CVERSION, ver);
print(format_ident);
print_char(' ');