aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xkerl115
1 files changed, 78 insertions, 37 deletions
diff --git a/kerl b/kerl
index 6c9b39c..023e424 100755
--- a/kerl
+++ b/kerl
@@ -378,23 +378,6 @@ show_logfile()
echo "Please see $2 for full details."
}
-download_patch()
-{
- TMPFILE=$(mktemp) || exit 1
- curl -sL "$OTP_GITHUB_URL/commit/$1" > "$TMPFILE"
- if [ $? -ne 0 ]; then
- echo "ERROR: Couldn't download patch $OTP_GITHUB_URL/commit/$1"
- rm "$TMPFILE"
- exit 1
- fi
- echo "$TMPFILE"
-}
-
-apply_patch()
-{
- patch -p1 < "$1" >> "$LOGFILE"
-}
-
maybe_patch()
{
# $1 = OS platform e.g., Darwin, etc
@@ -403,14 +386,11 @@ maybe_patch()
case "$1" in
Darwin)
maybe_patch_darwin "$2"
- maybe_patch_all "$2"
;;
SunOS)
maybe_patch_sunos "$2"
- maybe_patch_all "$2"
;;
*)
- maybe_patch_all "$2"
;;
esac
}
@@ -419,9 +399,7 @@ maybe_patch_darwin()
{
release=$(get_otp_version "$1")
if [ "$release" -le 14 ]; then
- filename=$(download_patch "687dfb57c61ef9a777f706b73b14da93aa3ea448.patch")
- apply_patch "$filename"
- rm "$filename"
+ apply_darwin_patch >> "$LOGFILE"
fi
}
@@ -429,19 +407,7 @@ maybe_patch_sunos()
{
release=$(get_otp_version "$1")
if [ "$release" -le 14 ]; then
- filename=$(download_patch "8e5ef86ee21cb6491287710606a7525f45cc50fc.patch")
- apply_patch "$filename"
- rm "$filename"
- fi
-}
-
-maybe_patch_all()
-{
- release=$(get_otp_version "$1")
- if [ "$release" -le 16 ]; then
- filename=$(download_patch "21ca6d3a137034f19862db769a5b7f1c5528dbc4.patch")
- apply_patch "$filename"
- rm "$filename"
+ apply_solaris_networking_patch >> "$LOGFILE"
fi
}
@@ -551,7 +517,7 @@ _do_build()
fi
done
fi
- ./otp_build boot -a $KERL_CONFIGURE_OPTIONS > "$LOGFILE" 2>&1
+ ./otp_build boot -a $KERL_CONFIGURE_OPTIONS >> "$LOGFILE" 2>&1
if [ $? -ne 0 ]; then
show_logfile "Build failed." "$LOGFILE"
list_remove builds "$1 $2"
@@ -1078,6 +1044,81 @@ tarball_download()
echo "Checksum verified ($SUM)"
}
+apply_solaris_networking_patch()
+{
+ patch -p1 <<_END_PATCH
+--- otp-a/erts/emulator/drivers/common/inet_drv.c
++++ otp-b/erts/emulator/drivers/common/inet_drv.c
+@@ -4166,16 +4166,7 @@
+ break;
+
+ case INET_IFOPT_HWADDR: {
+-#ifdef SIOCGIFHWADDR
+- if (ioctl(desc->s, SIOCGIFHWADDR, (char *)&ifreq) < 0)
+- break;
+- buf_check(sptr, s_end, 1+2+IFHWADDRLEN);
+- *sptr++ = INET_IFOPT_HWADDR;
+- put_int16(IFHWADDRLEN, sptr); sptr += 2;
+- /* raw memcpy (fix include autoconf later) */
+- sys_memcpy(sptr, (char*)(&ifreq.ifr_hwaddr.sa_data), IFHWADDRLEN);
+- sptr += IFHWADDRLEN;
+-#elif defined(SIOCGENADDR)
++#if defined(SIOCGENADDR)
+ if (ioctl(desc->s, SIOCGENADDR, (char *)&ifreq) < 0)
+ break;
+ buf_check(sptr, s_end, 1+2+sizeof(ifreq.ifr_enaddr));
+_END_PATCH
+}
+
+apply_darwin_patch()
+{
+ patch -p0 <<_END_PATCH
+--- erts/emulator/beam/beam_bp.c.orig 2011-10-03 13:12:07.000000000 -0500
++++ erts/emulator/beam/beam_bp.c 2013-10-04 13:42:03.000000000 -0500
+@@ -496,7 +496,8 @@
+ }
+
+ /* bp_hash */
+-ERTS_INLINE Uint bp_sched2ix() {
++#ifndef ERTS_DO_INCL_GLB_INLINE_FUNC_DEF
++ERTS_GLB_INLINE Uint bp_sched2ix() {
+ #ifdef ERTS_SMP
+ ErtsSchedulerData *esdp;
+ esdp = erts_get_scheduler_data();
+@@ -505,6 +506,7 @@
+ return 0;
+ #endif
+ }
++#endif
+ static void bp_hash_init(bp_time_hash_t *hash, Uint n) {
+ Uint size = sizeof(bp_data_time_item_t)*n;
+ Uint i;
+--- erts/emulator/beam/beam_bp.h.orig 2011-10-03 13:12:07.000000000 -0500
++++ erts/emulator/beam/beam_bp.h 2013-10-04 13:42:08.000000000 -0500
+@@ -144,7 +144,19 @@
+ #define ErtsSmpBPUnlock(BDC)
+ #endif
+
+-ERTS_INLINE Uint bp_sched2ix(void);
++ERTS_GLB_INLINE Uint bp_sched2ix(void);
++
++#ifdef ERTS_DO_INCL_GLB_INLINE_FUNC_DEF
++ERTS_GLB_INLINE Uint bp_sched2ix() {
++#ifdef ERTS_SMP
++ ErtsSchedulerData *esdp;
++ esdp = erts_get_scheduler_data();
++ return esdp->no - 1;
++#else
++ return 0;
++#endif
++}
++#endif
+
+ #ifdef ERTS_SMP
+ #define bp_sched2ix_proc(p) ((p)->scheduler_data->no - 1)
+_END_PATCH
+}
+
case "$1" in
build)
if [ "$2" = "git" ]; then