You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by ge...@apache.org on 2021/04/01 16:39:01 UTC
[netbeans] branch master updated: [NETBEANS-5004] Update macOS
native launchers to call launcher shell script rather than nbexec
This is an automated email from the ASF dual-hosted git repository.
geertjan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 00944c4 [NETBEANS-5004] Update macOS native launchers to call launcher shell script rather than nbexec
new f0e5245 Merge pull request #2717 from oyarzun/mac-launchers-v2
00944c4 is described below
commit 00944c46b81f56a69ce9cb831ea10b57ab4458f8
Author: Christian Oyarzun <oy...@apache.org>
AuthorDate: Thu Jan 28 16:14:42 2021 -0500
[NETBEANS-5004] Update macOS native launchers to call launcher shell script rather than nbexec
---
.../Sources/AppLauncher/main.swift | 145 +------------------
.../apisupport.harness/release/launchers/app.sh | 6 +-
.../macosx/Sources/NetBeansLauncher/main.swift | 156 +--------------------
3 files changed, 14 insertions(+), 293 deletions(-)
diff --git a/harness/apisupport.harness/macosx-launcher-src/Sources/AppLauncher/main.swift b/harness/apisupport.harness/macosx-launcher-src/Sources/AppLauncher/main.swift
index 222919b..57942d7 100644
--- a/harness/apisupport.harness/macosx-launcher-src/Sources/AppLauncher/main.swift
+++ b/harness/apisupport.harness/macosx-launcher-src/Sources/AppLauncher/main.swift
@@ -19,150 +19,11 @@
import Foundation
-func getDefaultDir(for directory: FileManager.SearchPathDirectory) -> String {
- let urls = FileManager.default.urls(for: directory, in: .userDomainMask)
- let defaultDir = URL(string: brandingToken!, relativeTo: urls[0])
-
- return defaultDir!.path
-}
-
-func processClusters(file: String) -> String {
- let appDir = Bundle.main.path(forResource: brandingToken, ofType: "")
- var clusters = String()
- do {
- let contents = try String(contentsOfFile: file)
- let lines = contents.components(separatedBy: .newlines)
- for line in lines {
- if (line.starts(with: "#")) {
- continue;
- }
- clusters = clusters + appDir! + "/" + line + ":"
- }
- } catch {
- print("error reading" + brandingToken! + ".clusters")
- }
-
- return clusters
-}
-
-func processConf(confFile: String, confDict: inout Dictionary<String, String> ) {
- //set default userdir and cachedir
- let userdir_root = getDefaultDir(for: .applicationSupportDirectory)
- let cachedir_root = getDefaultDir(for: .cachesDirectory)
-
- do {
- let contents = try String(contentsOfFile: confFile)
- let lines = contents.components(separatedBy: .newlines)
- for line in lines {
- if (line.starts(with: "#")) {
- continue;
- }
-
- if let idx = line.firstIndex(of: "=") {
- let varRange = line.startIndex..<idx
- let idx2 = line.index(after: idx)
- let valRange = idx2..<line.endIndex
- let nbvar = String(line[varRange])
- let nbval = String(line[valRange])
-
- // strip quotes
- let start = nbval.index(after: nbval.startIndex)
- let end = nbval.index(before: nbval.endIndex)
- let val = nbval[start..<end]
-
- switch nbvar {
- case "default_userdir":
- confDict["default_userdir"] = val.replacingOccurrences(of: "${DEFAULT_USERDIR_ROOT}", with: userdir_root)
- case "default_cachedir":
- confDict["default_cachedir"] = val.replacingOccurrences(of: "${DEFAULT_CACHEDIR_ROOT}", with: cachedir_root)
- case "default_options":
- confDict["default_options"] = String(val)
- case "jdkhome":
- confDict["jdkhome"] = String(val)
- case "extra_clusters":
- confDict["extra_clusters"] = String(val)
- default:
- print("Unknown " + confFile + " variable: " + nbvar + "=" + nbval)
- }
- }
- }
- } catch {
- print("error reading " + confFile)
- }
-}
-
let brandingToken = Bundle.main.object(forInfoDictionaryKey: "CFBundleExecutable") as? String
let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String
-let confFile = Bundle.main.path(forResource: brandingToken, ofType: "conf", inDirectory: brandingToken! + "/etc")
-let clustersFile = Bundle.main.path(forResource: brandingToken, ofType: "clusters", inDirectory: brandingToken! + "/etc")
-let iconFile = Bundle.main.path(forResource: brandingToken, ofType: "icns")
-let nbexecURL = Bundle.main.url(forResource: "nbexec", withExtension: "", subdirectory: brandingToken! + "/platform/lib")
-
-var confDict = Dictionary<String, String>()
-var clusters = processClusters(file: clustersFile!)
-var foundUserDir = false
-var foundCacheDir = false
-
-// process app.conf file
-processConf(confFile: confFile!, confDict: &confDict)
-
-// process user's app.conf
-if let userDir = confDict["default_userdir"] {
- let userConfFile = userDir + "/etc/" + brandingToken! + ".conf"
- if FileManager.default.fileExists(atPath: userConfFile) {
- processConf(confFile: userConfFile, confDict: &confDict)
- }
-}
-
-// check command line arguments for userdir or cachedir
-for argument in CommandLine.arguments {
- switch argument {
- case "--userdir":
- foundUserDir = true
- case "--cachedir":
- foundCacheDir = true
- default:
- break
- }
-}
+let launcherURL = Bundle.main.url(forResource: brandingToken, withExtension: "", subdirectory: brandingToken! + "/bin")
var args = [String]()
-args.append("-J-Xdock:icon=" + iconFile!)
-args.append("-J-Xdock:name=" + appName!)
-
-
-// convert conf variables to command line arguments
-for (key, val) in confDict {
- switch key {
- case "default_userdir":
- if (!foundUserDir) {
- args.append("--userdir")
- args.append(val)
- }
- case "default_cachedir":
- if (!foundUserDir) {
- args.append("--cachedir")
- args.append(val)
- }
- case "default_options":
- let nbargs = val.components(separatedBy: " ")
- for arg in nbargs {
- if !arg.trimmingCharacters(in: .whitespaces).isEmpty {
- args.append(arg)
- }
- }
- case "jdkhome":
- args.append("--jdkhome")
- args.append(val)
- case "extra_clusters":
- clusters = clusters + val
- default:
- print("Unknown netbeans.conf variable: " + key + "=" + val)
- }
-}
-
-args.append("--clusters")
-args.append(clusters)
// add user's command line arguments
for argument in Array(CommandLine.arguments.dropFirst()) {
@@ -172,10 +33,10 @@ for argument in Array(CommandLine.arguments.dropFirst()) {
let launchNbexec = Process()
var env = ProcessInfo.processInfo.environment
-env["DEFAULT_USERDIR_ROOT"] = getDefaultDir(for: .applicationSupportDirectory)
+env["APP_DOCK_NAME"] = appName
launchNbexec.environment = env
launchNbexec.arguments = args
-launchNbexec.executableURL = nbexecURL
+launchNbexec.executableURL = launcherURL
try launchNbexec.run()
// needed to keep Dock name based on CFBundleName from Info.plist
diff --git a/harness/apisupport.harness/release/launchers/app.sh b/harness/apisupport.harness/release/launchers/app.sh
index 71aa054..b547bbf 100644
--- a/harness/apisupport.harness/release/launchers/app.sh
+++ b/harness/apisupport.harness/release/launchers/app.sh
@@ -35,6 +35,10 @@ done
progdir=`dirname "$PRG"`
APPNAME=`basename "$PRG"`
+if [ -z "$APP_DOCK_NAME" ] ; then
+ APP_DOCK_NAME="$APPNAME"
+fi
+
case "`uname`" in
Darwin*)
# set default userdir and cachedir on Mac OS X
@@ -123,7 +127,7 @@ case "`uname`" in
Darwin*)
eval exec sh '"$nbexec"' \
--jdkhome '"$jdkhome"' \
- -J-Xdock:name='"$APPNAME"' \
+ -J-Xdock:name='"$APP_DOCK_NAME"' \
'"-J-Xdock:icon=$progdir/../../$APPNAME.icns"' \
--clusters '"$clusters"' \
--userdir '"${userdir}"' \
diff --git a/nb/ide.launcher/macosx/Sources/NetBeansLauncher/main.swift b/nb/ide.launcher/macosx/Sources/NetBeansLauncher/main.swift
index 8b68239..923952a 100644
--- a/nb/ide.launcher/macosx/Sources/NetBeansLauncher/main.swift
+++ b/nb/ide.launcher/macosx/Sources/NetBeansLauncher/main.swift
@@ -19,164 +19,20 @@
import Foundation
-func getDefaultDir(for directory: FileManager.SearchPathDirectory) -> String {
- let urls = FileManager.default.urls(for: directory, in: .userDomainMask)
- let defaultDir = URL(string: "NetBeans", relativeTo: urls[0])
-
- return defaultDir!.path
-}
-
-func processClusters(file: String) -> String {
- var clusters = String()
- do {
- let contents = try String(contentsOfFile: file)
- let lines = contents.components(separatedBy: .newlines)
- for line in lines {
- if (line.starts(with: "#") || line == "platform") {
- continue;
- }
- clusters = clusters + netBeansDir! + "/" + line + ":"
- }
- } catch {
- print("error reading netbeans.clusters")
- }
- return clusters
-}
-
-func processConf(confFile: String, confDict: inout Dictionary<String, String> ) {
- //set default userdir and cachedir
- let userdir_root = getDefaultDir(for: .applicationSupportDirectory)
- let cachedir_root = getDefaultDir(for: .cachesDirectory)
-
- do {
- let contents = try String(contentsOfFile: confFile)
- let lines = contents.components(separatedBy: .newlines)
- for line in lines {
- if (line.starts(with: "#")) {
- continue;
- }
-
- if let idx = line.firstIndex(of: "=") {
- let varRange = line.startIndex..<idx
- let idx2 = line.index(after: idx)
- let valRange = idx2..<line.endIndex
- let nbvar = String(line[varRange])
- let nbval = String(line[valRange])
-
- // strip quotes
- let start = nbval.index(after: nbval.startIndex)
- let end = nbval.index(before: nbval.endIndex)
- let val = nbval[start..<end]
-
- switch nbvar {
- case "netbeans_default_userdir":
- confDict["netbeans_default_userdir"] = val.replacingOccurrences(of: "${DEFAULT_USERDIR_ROOT}", with: userdir_root)
- case "netbeans_default_cachedir":
- confDict["netbeans_default_cachedir"] = val.replacingOccurrences(of: "${DEFAULT_CACHEDIR_ROOT}", with: cachedir_root)
- case "netbeans_default_options":
- confDict["netbeans_default_options"] = String(val)
- case "netbeans_jdkhome":
- confDict["netbeans_jdkhome"] = String(val)
- case "netbeans_extraclusters":
- confDict["netbeans_extraclusters"] = String(val)
- default:
- print("Unknown " + confFile + " variable: " + nbvar + "=" + nbval)
- }
- }
- }
- } catch {
- print("error reading " + confFile)
- }
-}
-
-let netBeansDir = Bundle.main.path(forResource: "netbeans", ofType: "", inDirectory: "NetBeans")
-let confFile = Bundle.main.path(forResource: "netbeans", ofType: "conf", inDirectory: "NetBeans/netbeans/etc")
-let clustersFile = Bundle.main.path(forResource: "netbeans", ofType: "clusters", inDirectory: "NetBeans/netbeans/etc")
-let iconFile = Bundle.main.path(forResource: "netbeans", ofType: "icns")
-let nbexecURL = Bundle.main.url(forResource: "nbexec", withExtension: "", subdirectory: "NetBeans/netbeans/platform/lib")
-
-var confDict = Dictionary<String, String>()
-var clusters = processClusters(file: clustersFile!)
-var foundUserDir = false
-var foundCacheDir = false
-
-// process netbeans.conf file
-processConf(confFile: confFile!, confDict: &confDict)
-
-// process user's netbeans.conf
-if let userDir = confDict["netbeans_default_userdir"] {
- let userConfFile = userDir + "/etc/netbeans.conf"
- if FileManager.default.fileExists(atPath: userConfFile) {
- processConf(confFile: userConfFile, confDict: &confDict)
- }
-}
-
-// check command line arguments for userdir or cachedir
-for argument in CommandLine.arguments {
- switch argument {
- case "--userdir":
- foundUserDir = true
- case "--cachedir":
- foundCacheDir = true
- default:
- break
- }
-}
+let netbeansURL = Bundle.main.url(forResource: "netbeans", withExtension: "", subdirectory: "NetBeans/netbeans/bin")
var args = [String]()
-args.append("-J-Xdock:icon=" + iconFile!)
-args.append("-J-Xdock:name=Apache NetBeans")
-args.append("--branding")
-args.append("nb")
-args.append("-J-Dnetbeans.importclass=org.netbeans.upgrade.AutoUpgrade")
-
-// convert conf variables to command line arguments
-for (key, val) in confDict {
- switch key {
- case "netbeans_default_userdir":
- if (!foundUserDir) {
- args.append("--userdir")
- args.append(val)
- }
- case "netbeans_default_cachedir":
- if (!foundUserDir) {
- args.append("--cachedir")
- args.append(val)
- }
- case "netbeans_default_options":
- let nbargs = val.components(separatedBy: " ")
- for arg in nbargs {
- if !arg.trimmingCharacters(in: .whitespaces).isEmpty {
- args.append(arg)
- }
- }
- case "netbeans_jdkhome":
- args.append("--jdkhome")
- args.append(val)
- case "netbeans_extraclusters":
- clusters = clusters + val
- default:
- print("Unknown netbeans.conf variable: " + key + "=" + val)
- }
-}
-
-args.append("--clusters")
-args.append(clusters)
// add user's command line arguments
for argument in Array(CommandLine.arguments.dropFirst()) {
args.append(argument)
}
-
-let launchNbexec = Process()
-var env = ProcessInfo.processInfo.environment
-env["DEFAULT_USERDIR_ROOT"] = getDefaultDir(for: .applicationSupportDirectory)
-launchNbexec.environment = env
-launchNbexec.arguments = args
-launchNbexec.executableURL = nbexecURL
-try launchNbexec.run()
+let launchNetbeans = Process()
+launchNetbeans.arguments = args
+launchNetbeans.executableURL = netbeansURL
+try launchNetbeans.run()
// needed to keep Dock name based on CFBundleName from Info.plist
// does not work if called from command line.
-launchNbexec.waitUntilExit()
+launchNetbeans.waitUntilExit()
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists