Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortherzok <marius.ungureanu@xamarin.com>2018-01-23 17:48:38 +0300
committertherzok <marius.ungureanu@xamarin.com>2018-02-08 13:44:27 +0300
commit5559c98459fb43d28115b16863032618fd6ad2fe (patch)
tree91c395a795e911154dd73b407a40ca6bab8994eb
parent4daa08a2f8305b11dc944b512658aea0a59b5a34 (diff)
[Launcher] Statically link in libxammac-system.a
This avoids shipping libxammac.dylib and uses a xammac static lib which works with a system wide mono. Thus, most of monostub code is now obsolete. To clean up later once other users of monostub don't use this file anymore
-rw-r--r--.gitignore1
-rw-r--r--main/build/MacOSX/Makefile.am10
-rw-r--r--main/build/MacOSX/monostub.mm108
-rw-r--r--main/external/Makefile.am4
-rw-r--r--main/src/addins/MacPlatform/MacPlatform.cs3
-rw-r--r--main/src/addins/MacPlatform/MacPlatform.csproj6
6 files changed, 73 insertions, 59 deletions
diff --git a/.gitignore b/.gitignore
index 367c96c9ee..75964db98f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -76,6 +76,7 @@ Thumbs.db
/main/external/Xamarin.Mac.registrar.full.a
/main/external/Xamarin.Mac.dll*
/main/external/libxammac.dylib
+/main/external/libxammac-system.a
# Autogenerated stuff
/local-config/
diff --git a/main/build/MacOSX/Makefile.am b/main/build/MacOSX/Makefile.am
index fb0277af8f..1836b55a7f 100644
--- a/main/build/MacOSX/Makefile.am
+++ b/main/build/MacOSX/Makefile.am
@@ -8,8 +8,8 @@ EXTRAS=$(top_srcdir)/../extras
ARTIFACTS=$(top_srcdir)/../../artifacts
MD_CONFIGURE=$(top_srcdir)/../scripts/configure.sh
EXTERNAL=../../external
-MONOSTUB_DEFINES=-DXM_REGISTRAR
-MONOSTUB_STATIC_LINK=$(EXTERNAL)/Xamarin.Mac.registrar.full.a
+MONOSTUB_DEFINES=-DXM_REGISTRAR -DXM_SYSTEM -DDYNAMIC_MONO_RUNTIME
+MONOSTUB_STATIC_LINK=$(EXTERNAL)/Xamarin.Mac.registrar.full.a $(EXTERNAL)/libxammac-system.a
EXTERN_C_XM_REGISTRAR_DEFINE=$(shell ./check-xm-extern.sh)
#SDK_PATH=$(shell xcrun --sdk macosx10.8 --show-sdk-path)
@@ -35,13 +35,15 @@ System_Native.o: System_Native.cpp
g++ -std=c++14 -c -Wall -mmacosx-version-min=10.10 -o $@ $^
monostub.o: monostub.mm $(MONOSTUB_EXTRA_SOURCES)
- g++ $(EXTERN_C_XM_REGISTRAR_DEFINE) $(MONOSTUB_DEFINES) -c -Wall -mmacosx-version-min=10.10 -m$(MONOSTUB_ARCH) -o $@ monostub.mm
+ g++ -g $(EXTERN_C_XM_REGISTRAR_DEFINE) $(MONOSTUB_DEFINES) -c -Wall -mmacosx-version-min=10.10 -m$(MONOSTUB_ARCH) -o $@ monostub.mm -I/Library/Frameworks/Xamarin.Mac.framework/Versions/Current/include/xamarin
monostub: monostub.o System_Native.o $(MONOSTUB_STATIC_LINK)
- clang++ -Wall -mmacosx-version-min=10.10 -m$(MONOSTUB_ARCH) -o $@ $^ -framework AppKit -framework Quartz -undefined dynamic_lookup
+ clang++ -g -Wall -mmacosx-version-min=10.10 -m$(MONOSTUB_ARCH) -o $@ -Wl,-all_load $^ -framework AppKit -framework Quartz -undefined dynamic_lookup
# gcc -Wall -mmacosx-version-min=10.10 -m$(MONOSTUB_ARCH) -o $@ monostub.m -framework AppKit -isysroot $(SDK_PATH)
cp monostub ../bin/MonoDevelop
cp monostub ../bin/mdtool
+ mkdir -p ../bin/Contents
+ ln -sfh .. "../bin/Contents/MonoBundle"
monostub-test: monostub-test.m $(MONOSTUB_EXTRA_SOURCES)
gcc -g -Wall -mmacosx-version-min=10.10 -m$(MONOSTUB_ARCH) -o $@ monostub-test.m -framework AppKit
diff --git a/main/build/MacOSX/monostub.mm b/main/build/MacOSX/monostub.mm
index db58b5f57a..bc24d663d1 100644
--- a/main/build/MacOSX/monostub.mm
+++ b/main/build/MacOSX/monostub.mm
@@ -12,15 +12,21 @@
#include <ctype.h>
#include <time.h>
-#include "monostub-utils.h"
-
-#import <Foundation/Foundation.h>
-
+#if XM_SYSTEM
+#include <main.h>
+#include <launch.h>
+#include <runtime.h>
+#else
typedef int (* mono_main) (int argc, char **argv);
typedef void (* mono_free) (void *ptr);
typedef char * (* mono_get_runtime_build_info) (void);
+#endif
typedef void (* gobject_tracker_init) (void *libmono);
+#include "monostub-utils.h"
+
+#import <Foundation/Foundation.h>
+
#if XM_REGISTRAR
extern
#if EXTERN_C
@@ -37,7 +43,7 @@ extern
void xamarin_create_classes ();
#endif
-void *libmono, *libxammac;
+void *libmono;
static void
exit_with_message (const char *reason, char *argv0)
@@ -269,6 +275,56 @@ try_load_gobject_tracker (void *libmono, char *entry_executable)
}
}
+static void
+run_md_bundle_if_needed(NSString *appDir, int argc, char **argv)
+{
+ // if we are running inside an app bundle and --start-app-bundle has been passed
+ // run the actual bundle and exit.
+ if (![appDir isEqualToString:@"."] && argc > 1 && !strcmp(argv[1], "--start-app-bundle")) {
+ NSArray *arguments = [NSArray array];
+ if (argc > 2) {
+ NSString *strings[argc-2];
+ for (int i = 0; i < argc-2; i++)
+ strings [i] = [[NSString alloc] initWithUTF8String:argv[i+2]];
+ arguments = [NSArray arrayWithObjects:strings count:argc-2];
+ }
+ run_md_bundle (appDir, arguments);
+ }
+}
+
+static void
+init_registrar()
+{
+#if XM_REGISTRAR
+ xamarin_create_classes_Xamarin_Mac ();
+#elif STATIC_REGISTRAR
+ xamarin_create_classes ();
+#endif
+}
+
+#ifdef XM_SYSTEM
+extern "C"
+void xamarin_app_initialize(xamarin_initialize_data *data)
+{
+ setenv ("MONO_GC_PARAMS", "major=marksweep-conc,nursery-size=8m", 0);
+
+ run_md_bundle_if_needed(data->app_dir, data->argc, data->argv);
+
+ data->requires_relaunch = update_environment ([[data->app_dir stringByAppendingPathComponent:@"Contents"] UTF8String], true);
+
+ if (data->requires_relaunch)
+ return;
+
+ correct_locale();
+}
+
+extern "C" int
+xammac_setup ()
+{
+ init_registrar();
+ return 0;
+}
+#else
int main (int argc, char **argv)
{
//clock_t start = clock();
@@ -286,18 +342,7 @@ int main (int argc, char **argv)
NSString *appDir = [[NSBundle mainBundle] bundlePath];
- // if we are running inside an app bundle and --start-app-bundle has been passed
- // run the actual bundle and exit.
- if (![appDir isEqualToString:@"."] && argc > 1 && !strcmp(argv[1],"--start-app-bundle")) {
- NSArray *arguments = [NSArray array];
- if (argc > 2) {
- NSString *strings[argc-2];
- for (int i = 0; i < argc-2; i++)
- strings [i] = [[NSString alloc] initWithUTF8String:argv[i+2]];
- arguments = [NSArray arrayWithObjects:strings count:argc-2];
- }
- run_md_bundle (appDir, arguments);
- }
+ run_md_bundle_if_needed(appDir, argc, argv);
// can be overridden with plist string MonoMinVersion
NSString *req_mono_version = @"5.2.0.171";
@@ -368,33 +413,7 @@ int main (int argc, char **argv)
exit_with_message ((char *)[msg UTF8String], argv[0]);
}
-#if XM_REGISTRAR
- libxammac = dlopen ("@loader_path/libxammac.dylib", RTLD_LAZY);
- if (!libxammac) {
- libxammac = dlopen ("@loader_path/../Resources/lib/monodevelop/bin/libxammac.dylib", RTLD_LAZY);
- if (!libxammac) {
- fprintf (stderr, "Failed to load libxammac.dylib: %s\n", dlerror ());
- NSString *msg = @"This application requires Xamarin.Mac native library side-by-side.";
- exit_with_message ((char *)[msg UTF8String], argv[0]);
- }
- }
-
- xamarin_create_classes_Xamarin_Mac ();
-#endif
-
-#if STATIC_REGISTRAR
- libxammac = dlopen ("@loader_path/libxammac.dylib", RTLD_LAZY);
- if (!libxammac) {
- libxammac = dlopen ("@loader_path/../Resources/lib/monodevelop/bin/libxammac.dylib", RTLD_LAZY);
- if (!libxammac) {
- fprintf (stderr, "Failed to load libxammac.dylib: %s\n", dlerror ());
- NSString *msg = @"This application requires Xamarin.Mac native library side-by-side.";
- exit_with_message ((char *)[msg UTF8String], argv[0]);
- }
- }
-
- xamarin_create_classes ();
-#endif
+ init_registrar();
try_load_gobject_tracker (libmono, argv [0]);
@@ -449,3 +468,4 @@ int main (int argc, char **argv)
return _mono_main (argc + extra_argc + injected, new_argv);
}
+#endif
diff --git a/main/external/Makefile.am b/main/external/Makefile.am
index da5d48f480..28249b5b21 100644
--- a/main/external/Makefile.am
+++ b/main/external/Makefile.am
@@ -5,7 +5,7 @@ all:
clean:
if ENABLE_MACPLATFORM
-all: Xamarin.Mac.dll Xamarin.Mac.registrar.full.a libxammac.dylib
+all: Xamarin.Mac.dll Xamarin.Mac.registrar.full.a libxammac-system.a
$(MAKE) -C monomac/src
Xamarin.Mac.dll: $(XAMMAC_PATH)/@MAC_ARCHITECTURE@/full/Xamarin.Mac.dll
@@ -15,7 +15,7 @@ Xamarin.Mac.dll: $(XAMMAC_PATH)/@MAC_ARCHITECTURE@/full/Xamarin.Mac.dll
Xamarin.Mac.registrar.full.a: $(XAMMAC_PATH)/mmp/Xamarin.Mac.registrar.full.a
cp -p $< $@
-libxammac.dylib: $(XAMMAC_PATH)/libxammac.dylib
+libxammac-system.a: $(XAMMAC_PATH)/libxammac-system.a
cp -p $< $@
clean:
diff --git a/main/src/addins/MacPlatform/MacPlatform.cs b/main/src/addins/MacPlatform/MacPlatform.cs
index 6d521ef2c3..bd49bc9743 100644
--- a/main/src/addins/MacPlatform/MacPlatform.cs
+++ b/main/src/addins/MacPlatform/MacPlatform.cs
@@ -144,9 +144,6 @@ namespace MonoDevelop.MacIntegration
var dir = Path.GetDirectoryName (typeof(MacPlatformService).Assembly.Location);
- if (ObjCRuntime.Dlfcn.dlopen (Path.Combine (dir, "libxammac.dylib"), 0) == IntPtr.Zero)
- LoggingService.LogFatalError ("Unable to load libxammac");
-
mimemap = new Lazy<Dictionary<string, string>> (LoadMimeMapAsync);
//make sure the menu app name is correct even when running Mono 2.6 preview, or not running from the .app
diff --git a/main/src/addins/MacPlatform/MacPlatform.csproj b/main/src/addins/MacPlatform/MacPlatform.csproj
index 98d8dfabb2..a3d39e25b5 100644
--- a/main/src/addins/MacPlatform/MacPlatform.csproj
+++ b/main/src/addins/MacPlatform/MacPlatform.csproj
@@ -236,10 +236,4 @@
<ItemGroup>
<InternalsVisibleTo Include="MacPlatform.Tests" />
</ItemGroup>
- <ItemGroup>
- <LibXammac Include="..\..\..\external\libxammac.dylib" />
- </ItemGroup>
- <Target Name="AfterBuild">
- <Copy SourceFiles="@(LibXammac)" DestinationFiles="$(OutputPath)\libxammac.dylib" SkipUnchangedFiles="true" />
- </Target>
</Project>