From 4e4b2cbb3cfecf2faeb82442655b44bf306d1cce Mon Sep 17 00:00:00 2001 From: Sergey Elin Date: Thu, 28 Sep 2017 12:13:20 +0300 Subject: Fix point arithmetic in wx_impl.cpp for Erlang < 20.0 --- kerl | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/kerl b/kerl index b292ea3..f9297e8 100755 --- a/kerl +++ b/kerl @@ -482,6 +482,12 @@ maybe_patch_all() 15) apply_r15_beam_makeops_patch >> "$LOGFILE" ;; + 16) + apply_r16_wx_ptr_patch >> "$LOGFILE" + ;; + 17|18|19) + apply_wx_ptr_patch >> "$LOGFILE" + ;; *) ;; esac @@ -1478,6 +1484,63 @@ apply_r15_beam_makeops_patch() _END_PATCH } +#https://github.com/erlang/otp/commit/a64c4d806fa54848c35632114585ad82b98712e8.diff +apply_wx_ptr_patch() +{ + patch -p1 <<'_END_PATCH' +diff --git a/lib/wx/c_src/wxe_impl.cpp b/lib/wx/c_src/wxe_impl.cpp +index 0d2da5d4a79..8118136d30e 100644 +--- a/lib/wx/c_src/wxe_impl.cpp ++++ b/lib/wx/c_src/wxe_impl.cpp +@@ -666,7 +666,7 @@ void * WxeApp::getPtr(char * bp, wxeMemEnv *memenv) { + throw wxe_badarg(index); + } + void * temp = memenv->ref2ptr[index]; +- if((index < memenv->next) && ((index == 0) || (temp > NULL))) ++ if((index < memenv->next) && ((index == 0) || (temp != (void *)NULL))) + return temp; + else { + throw wxe_badarg(index); +@@ -678,7 +678,7 @@ void WxeApp::registerPid(char * bp, ErlDrvTermData pid, wxeMemEnv * memenv) { + if(!memenv) + throw wxe_badarg(index); + void * temp = memenv->ref2ptr[index]; +- if((index < memenv->next) && ((index == 0) || (temp > NULL))) { ++ if((index < memenv->next) && ((index == 0) || (temp != (void *) NULL))) { + ptrMap::iterator it; + it = ptr2ref.find(temp); + if(it != ptr2ref.end()) { +_END_PATCH +} + +apply_r16_wx_ptr_patch() +{ + patch -p1 <<'_END_PATCH' +diff --git a/lib/wx/c_src/wxe_impl.cpp b/lib/wx/c_src/wxe_impl.cpp +index cc9bcc995..1b1912630 100644 +--- a/lib/wx/c_src/wxe_impl.cpp ++++ b/lib/wx/c_src/wxe_impl.cpp +@@ -757,7 +757,7 @@ void * WxeApp::getPtr(char * bp, wxeMemEnv *memenv) { + throw wxe_badarg(index); + } + void * temp = memenv->ref2ptr[index]; +- if((index < memenv->next) && ((index == 0) || (temp > NULL))) ++ if((index < memenv->next) && ((index == 0) || (temp != (void *)NULL))) + return temp; + else { + throw wxe_badarg(index); +@@ -769,7 +769,7 @@ void WxeApp::registerPid(char * bp, ErlDrvTermData pid, wxeMemEnv * memenv) { + if(!memenv) + throw wxe_badarg(index); + void * temp = memenv->ref2ptr[index]; +- if((index < memenv->next) && ((index == 0) || (temp > NULL))) { ++ if((index < memenv->next) && ((index == 0) || (temp != (void *)NULL))) { + ptrMap::iterator it; + it = ptr2ref.find(temp); + if(it != ptr2ref.end()) { +_END_PATCH +} + case "$1" in version) echo "$KERL_VERSION" -- cgit v1.2.3 From 6c06e60016cbf3990e6a40ab89c06fabb2635084 Mon Sep 17 00:00:00 2001 From: Mark Allen Date: Mon, 2 Oct 2017 17:18:00 -0500 Subject: Rework how the wx patch is applied Make sure it's focused on macOS and doesn't rely on a newer perl installation to trigger. --- kerl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/kerl b/kerl index f9297e8..56c3dd7 100755 --- a/kerl +++ b/kerl @@ -482,12 +482,6 @@ maybe_patch_all() 15) apply_r15_beam_makeops_patch >> "$LOGFILE" ;; - 16) - apply_r16_wx_ptr_patch >> "$LOGFILE" - ;; - 17|18|19) - apply_wx_ptr_patch >> "$LOGFILE" - ;; *) ;; esac @@ -506,9 +500,15 @@ maybe_patch_all() maybe_patch_darwin() { + # Reminder: $1 = OTP release version if [ "$1" -le 14 ]; then CFLAGS="-DERTS_DO_INCL_GLB_INLINE_FUNC_DEF" apply_darwin_compiler_patch >> "$LOGFILE" + elif [ "$1" -eq 16 ]; then + # TODO: Maybe check if clang version == 9 + apply_r16_wx_ptr_patch >> "$LOGFILE" + elif [ "$1" -ge 17 -a "$1" -le 19 ]; then + apply_wx_ptr_patch >> "$LOGFILE" fi } -- cgit v1.2.3