From bbb3a366246168cb85e6208223a6eae6343fb1e1 Mon Sep 17 00:00:00 2001 From: Damian Minkov Date: Fri, 1 Nov 2013 18:06:16 +0200 Subject: [PATCH] Adds option to embed jre into dmg and enables it. --- ...lib => libAEGetURLEventHandlerAgent.dylib} | Bin resources/install/ant-build-config.properties | 6 +- resources/install/build.xml | 110 ++++---- resources/install/installers.properties | 2 + resources/install/macosx/JavaApplicationStub | Bin 64532 -> 38652 bytes src/native/build.xml | 33 +++ src/native/macosx/launcher/launcher.m | 235 ++++++++++++++++++ 7 files changed, 338 insertions(+), 48 deletions(-) rename lib/native/mac/{libAEGetURLEventHandlerAgent.jnilib => libAEGetURLEventHandlerAgent.dylib} (100%) create mode 100644 src/native/macosx/launcher/launcher.m diff --git a/lib/native/mac/libAEGetURLEventHandlerAgent.jnilib b/lib/native/mac/libAEGetURLEventHandlerAgent.dylib similarity index 100% rename from lib/native/mac/libAEGetURLEventHandlerAgent.jnilib rename to lib/native/mac/libAEGetURLEventHandlerAgent.dylib diff --git a/resources/install/ant-build-config.properties b/resources/install/ant-build-config.properties index be346875d..7ffe89ec5 100644 --- a/resources/install/ant-build-config.properties +++ b/resources/install/ant-build-config.properties @@ -11,10 +11,8 @@ wix.upgrade.code=F9F09BE0-BA75-4C0D-8D64-E434D78548D4 #sign.cert.file= #sign.cert.password= application.home.dirname=.jitsi -link.download.windows=https\://download.jitsi.org/jitsi/windows/${package.name}-${sip-communicator.version}.exe link.download.windows32=https\://download.jitsi.org/jitsi/windows/${package.name}-${sip-communicator.version}-x86.exe link.download.windows64=https\://download.jitsi.org/jitsi/windows/${package.name}-${sip-communicator.version}-x64.exe -link.download.debian=https\://download.jitsi.org/jitsi/debian/${package.name}_${sip-communicator.version}_i386.deb link.download.generic=https\://download.jitsi.org/jitsi/generic/${package.name}-${sip-communicator.version}.jar link.download.linux=https\://download.jitsi.org/jitsi/linux/${package.name}-${sip-communicator.version}-linux.bin link.updates.macosx=https\://download.jitsi.org/jitsi/macosx/sparkle/updates.xml @@ -22,7 +20,7 @@ link.updates.macosx=https\://download.jitsi.org/jitsi/macosx/sparkle/updates.xml #link.sparkle.updates.index=http://download.jitsi.org/jitsi/macosx/sparkle/index.html link.update.changelog.prefix=http://bluejimp.com/jitsi/changelogs # The private_key file (sparkle_dsa_priv.pem) -#sparkle.signiture.location=/Users/damencho/dev/sparkle-files/dsa_sign/sparkle_dsa_priv.pem -#delta.history.location=/Users/damencho/dev/build-history +#sparkle.signiture.location=/path/to/key.pem +#delta.history.location=/path/to/folder #delta.history.size=10 #sparkle.delta.download.location=http\://download.jitsi.org/jitsi/macosx/ diff --git a/resources/install/build.xml b/resources/install/build.xml index 83b3c5c2c..fb37c9f5e 100644 --- a/resources/install/build.xml +++ b/resources/install/build.xml @@ -1014,7 +1014,7 @@ + link="${macosx.app.dir}/${application.name}.app/Contents/Resources/Java/libAEGetURLEventHandlerAgent.dylib"/> @@ -1064,43 +1064,6 @@ trim="true"/> - - - - - - - - - - - - - - - - - - - - @@ -1150,7 +1113,7 @@ signature="sipc" mainclass="net.java.sip.communicator.launcher.SIPCommunicator" icon="resources/images/logo/sc_logo_128x128.icns" - jvmversion="1.5+" + jvmversion="1.6+" version="${sip-communicator.version}" build="${sparkle.build}" infostring="${application.name}" @@ -1193,14 +1156,33 @@ - - - + + + + + + + + + + + CFBundleName]]> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VMOptions]]> + JVMRuntime + __jre.folder.name__ + VMOptions]]> + + + + + + diff --git a/resources/install/installers.properties b/resources/install/installers.properties index de122d67f..132c281dc 100644 --- a/resources/install/installers.properties +++ b/resources/install/installers.properties @@ -15,3 +15,5 @@ windows.jre64.file=C:\\Install\\jre-7u17-windows-x64.exe # as part of the respective setups of SIP Communicator. windows.jre.zip=C:\\Install\\jre-7u45-windows-i586.zip windows.jre64.zip=C:\\Install\\jre-7u45-windows-x64.zip + +macosx.jre=${user.home}/bin/jdk1.7.0_45.jdk diff --git a/resources/install/macosx/JavaApplicationStub b/resources/install/macosx/JavaApplicationStub index a744bf93d1bb968f48e59dcbe4505777faaa138d..c28cd5e7c44329b30cb265c00bd7a2bae3fdbce3 100755 GIT binary patch literal 38652 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 literal 64532 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 diff --git a/src/native/build.xml b/src/native/build.xml index 8943f7c9a..23cbfcfd5 100644 --- a/src/native/build.xml +++ b/src/native/build.xml @@ -941,4 +941,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/native/macosx/launcher/launcher.m b/src/native/macosx/launcher/launcher.m new file mode 100644 index 000000000..b0d106bef --- /dev/null +++ b/src/native/macosx/launcher/launcher.m @@ -0,0 +1,235 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#include +#import +#include + +#define JVM_JAVA_KEY "Java" +#define JVM_WORKING_DIR_KEY "WorkingDirectory" +#define JVM_RUNTIME_KEY "JVMRuntime" +#define JVM_MAIN_CLASS_NAME_KEY "MainClass" +#define JVM_CLASSPATH_KEY "ClassPath" +#define JVM_OPTIONS_KEY "VMOptions" +#define JVM_PROPERTIES_KEY "Properties" + +#define LAUNCH_ERROR "LaunchError" + +#define APP_PACKAGE_PREFIX "$APP_PACKAGE" +#define JAVA_ROOT_PREFIX "$JAVAROOT" + +#define LIBJLI_DYLIB "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/jli/libjli.dylib" + +typedef int (JNICALL *JLI_Launch_t)(int argc, char ** argv, + int jargc, const char** jargv, + int appclassc, const char** appclassv, + const char* fullversion, + const char* dotversion, + const char* pname, + const char* lname, + jboolean javaargs, + jboolean cpwildcard, + jboolean javaw, + jint ergo); + +void launchJitsi(int, char **); + +static int argsSupplied = 0; +// saving the original count of app arguments on the first main call +static int jargc; + +int main(int argc, char *argv[]) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + // on the first call save the arguments count, main will be called several + // times while starting some threads and initializing jvm + if(argsSupplied == 0) + { + jargc = argc - 1; + } + + @try + { + launchJitsi(argc, argv); + return 0; + } @catch (NSException *exception) + { + NSAlert *alert = [[NSAlert alloc] init]; + [alert setAlertStyle:NSCriticalAlertStyle]; + [alert setMessageText:[exception reason]]; + [alert runModal]; + + return 1; + } @finally + { + [pool drain]; + } +} + +void launchJitsi(int argMainCount, char *argMainValues[]) +{ + NSBundle *mainBundle = [NSBundle mainBundle]; + + NSDictionary *infoDictionary = [mainBundle infoDictionary]; + + // The java options + NSDictionary *javaDictionary = [infoDictionary objectForKey:@JVM_JAVA_KEY]; + + // Get the working directory options + NSString *workingDirectory = + [[javaDictionary objectForKey:@JVM_WORKING_DIR_KEY] + stringByReplacingOccurrencesOfString:@APP_PACKAGE_PREFIX + withString:[mainBundle bundlePath]]; + if (workingDirectory == nil) + { + [[NSException exceptionWithName:@LAUNCH_ERROR + reason:@"Working directory not set" + userInfo:nil] raise]; + } + else + { + chdir([workingDirectory UTF8String]); + } + + // Locate the JLI_Launch() function + NSString *runtime = [javaDictionary objectForKey:@JVM_RUNTIME_KEY]; + + const char *libjliPath = NULL; + if (runtime != nil) + { + NSString *runtimePath = + [[[NSBundle mainBundle] builtInPlugInsPath] + stringByAppendingPathComponent:runtime]; + libjliPath = + [[runtimePath stringByAppendingPathComponent:@"Contents/Home/jre/lib/jli/libjli.dylib"] + fileSystemRepresentation]; + } else { + libjliPath = LIBJLI_DYLIB; + } + + void *libJLI = dlopen(libjliPath, RTLD_LAZY); + + // if jre folder is deleted + if(libJLI == NULL) + { + libJLI = dlopen(LIBJLI_DYLIB, RTLD_LAZY); + } + + JLI_Launch_t jli_LaunchFxnPtr = NULL; + if (libJLI != NULL) + { + jli_LaunchFxnPtr = dlsym(libJLI, "JLI_Launch"); + } + + if (jli_LaunchFxnPtr == NULL) + { + [[NSException exceptionWithName:@LAUNCH_ERROR + reason:@"JRE load error" + userInfo:nil] raise]; + } + + NSString *mainClassName = + [javaDictionary objectForKey:@JVM_MAIN_CLASS_NAME_KEY]; + if (mainClassName == nil) + { + [[NSException exceptionWithName:@LAUNCH_ERROR + reason:@"Missing main class name" + userInfo:nil] raise]; + } + + NSMutableString *classPath = + [NSMutableString stringWithFormat:@"-Djava.class.path=%@", workingDirectory]; + + NSArray *jvmcp = [javaDictionary objectForKey:@JVM_CLASSPATH_KEY]; + if (jvmcp == nil) + { + [[NSException exceptionWithName:@LAUNCH_ERROR + reason:@"Missing class path entry" + userInfo:nil] raise]; + } + else + { + for (NSString *cpe in jvmcp) + { + [classPath appendFormat:@":%@", + [cpe stringByReplacingOccurrencesOfString:@JAVA_ROOT_PREFIX + withString:workingDirectory]]; + } + } + + // Get the VM options + NSString *options = [javaDictionary objectForKey:@JVM_OPTIONS_KEY]; + + // Get the system properties + NSDictionary *sprops = [javaDictionary objectForKey:@JVM_PROPERTIES_KEY]; + + // application arguments to be added, add them on first and second call + // of the main, the first one starts the second one in new thread + // no further calls + int appArgc = 0; + if(argsSupplied < 2 && jargc > 0) + appArgc = jargc; + + // Initialize the arguments to JLI_Launch() + int argc = 2 + [sprops count] + 1 + appArgc; + if(options != nil) + argc++; + + char *argv[argc + appArgc]; + + int i = 0; + argv[i++] = argMainValues[0]; + argv[i++] = strdup([classPath UTF8String]); + + if(options != nil) + { + NSString *op = + [options stringByReplacingOccurrencesOfString:@JAVA_ROOT_PREFIX + withString:workingDirectory]; + op = [op stringByTrimmingCharactersInSet: + [NSCharacterSet whitespaceAndNewlineCharacterSet]]; + argv[i++] = strdup([op UTF8String]); + } + + for( NSString *sPropKey in sprops ) + { + NSString *sPropValue = [sprops objectForKey:sPropKey]; + sPropValue = [sPropValue stringByTrimmingCharactersInSet: + [NSCharacterSet whitespaceAndNewlineCharacterSet]]; + argv[i++] = strdup( + [[NSMutableString stringWithFormat:@"-D%@=%@", sPropKey, + [sPropValue stringByReplacingOccurrencesOfString:@JAVA_ROOT_PREFIX + withString:workingDirectory]] + UTF8String]); + } + + argv[i++] = strdup([mainClassName UTF8String]); + + // copy the application parameters, the number we have saved + // the params are last in the array of arguments + for(int j = appArgc; j > 0; j--) + { + argv[i++] = strdup(argMainValues[argMainCount-j]); + } + argsSupplied++; + + NSString *pname = [infoDictionary objectForKey:@"CFBundleName"]; + + // Invoke JLI_Launch() + jli_LaunchFxnPtr(argc, argv, + 0, NULL, + 0, NULL, + "", + "", + [pname UTF8String], + [pname UTF8String], + FALSE, + FALSE, + FALSE, + 0); +}