aboutsummaryrefslogtreecommitdiff
path: root/lang/libobjc2
diff options
context:
space:
mode:
authorDavid Chisnall <theraven@FreeBSD.org>2014-01-15 19:10:16 +0000
committerDavid Chisnall <theraven@FreeBSD.org>2014-01-15 19:10:16 +0000
commit257af15518ae8f78489c7392e09dd5ef1c47cfa3 (patch)
treef247ecf7e4c0f3782048df7b99f4aa190990767e /lang/libobjc2
parent38ae3c049d601f3635ce2c50cdc328f6b1366e78 (diff)
Backport bug fix from r37605 upstream. This fixes crashing when
Objective-C++ programs use Objective-C types in static constructors. Approved by: bapt (mentor)
Notes
Notes: svn path=/head/; revision=339807
Diffstat (limited to 'lang/libobjc2')
-rw-r--r--lang/libobjc2/Makefile1
-rw-r--r--lang/libobjc2/files/patch-arc.m30
2 files changed, 31 insertions, 0 deletions
diff --git a/lang/libobjc2/Makefile b/lang/libobjc2/Makefile
index 3e686b637694..edc9fc170270 100644
--- a/lang/libobjc2/Makefile
+++ b/lang/libobjc2/Makefile
@@ -3,6 +3,7 @@
PORTNAME= libobjc2
PORTVERSION= 1.7
+PORTREVISION= 1
CATEGORIES= lang devel gnustep
MASTER_SITES= http://download.gna.org/gnustep/
diff --git a/lang/libobjc2/files/patch-arc.m b/lang/libobjc2/files/patch-arc.m
new file mode 100644
index 000000000000..1dc141a73067
--- /dev/null
+++ b/lang/libobjc2/files/patch-arc.m
@@ -0,0 +1,30 @@
+--- ./arc.m.orig 2013-03-12 08:51:59.000000000 +0000
++++ ./arc.m 2014-01-13 15:04:54.000000000 +0000
+@@ -219,15 +219,18 @@
+ }
+ else
+ {
+- [AutoreleasePool class];
+- useARCAutoreleasePool = class_respondsToSelector(AutoreleasePool,
+- SELECTOR(_ARCCompatibleAutoreleasePool));
+- NewAutoreleasePool = class_getMethodImplementation(object_getClass(AutoreleasePool),
+- SELECTOR(new));
+- DeleteAutoreleasePool = class_getMethodImplementation(AutoreleasePool,
+- SELECTOR(release));
+- AutoreleaseAdd = class_getMethodImplementation(object_getClass(AutoreleasePool),
+- SELECTOR(addObject:));
++ useARCAutoreleasePool = (0 != class_getInstanceMethod(AutoreleasePool,
++ SELECTOR(_ARCCompatibleAutoreleasePool)));
++ if (!useARCAutoreleasePool)
++ {
++ [AutoreleasePool class];
++ NewAutoreleasePool = class_getMethodImplementation(object_getClass(AutoreleasePool),
++ SELECTOR(new));
++ DeleteAutoreleasePool = class_getMethodImplementation(AutoreleasePool,
++ SELECTOR(release));
++ AutoreleaseAdd = class_getMethodImplementation(object_getClass(AutoreleasePool),
++ SELECTOR(addObject:));
++ }
+ }
+ }
+ }