| #!/bin/sh |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| # |
| # resolve symlinks |
| # |
| |
| PRG=$0 |
| |
| while [ -h "$PRG" ]; do |
| ls=`ls -ld "$PRG"` |
| link=`expr "$ls" : '^.*-> \(.*\)$' 2>/dev/null` |
| if expr "$link" : '^/' 2> /dev/null >/dev/null; then |
| PRG="$link" |
| else |
| PRG="`dirname "$PRG"`/$link" |
| fi |
| done |
| |
| progdir=`dirname "$PRG"` |
| old=`pwd` |
| cd "$progdir"/.. |
| basedir=`pwd` |
| cd "$old" |
| |
| case "`uname`" in |
| Darwin*) |
| # set default userdir and cachedir on Mac OS X |
| DEFAULT_USERDIR_ROOT="${HOME}/Library/Application Support/NetBeans" |
| DEFAULT_CACHEDIR_ROOT=${HOME}/Library/Caches/NetBeans |
| ;; |
| *) |
| # set default userdir and cachedir on unix systems |
| DEFAULT_USERDIR_ROOT=${HOME}/.netbeans |
| DEFAULT_CACHEDIR_ROOT=${HOME}/.cache/netbeans |
| ;; |
| esac |
| |
| |
| if [ -f "$basedir"/etc/netbeans.conf ] ; then |
| . "$basedir"/etc/netbeans.conf |
| fi |
| |
| # following should be done just in RPM or Solaris Launcher |
| # if [ -f /etc/netbeans.conf ] ; then |
| # . /etc/netbeans.conf |
| # fi |
| |
| export DEFAULT_USERDIR_ROOT |
| |
| # #68373: look for userdir, but do not modify "$@" |
| userdir="${netbeans_default_userdir}" |
| cachedir="${netbeans_default_cachedir}" |
| |
| founduserdir="" |
| for opt in "$@"; do |
| if [ "${founduserdir}" = "yes" ]; then |
| userdir="$opt" |
| break |
| elif [ "$opt" = "--userdir" ]; then |
| founduserdir="yes" |
| fi |
| done |
| foundcachedir="" |
| for opt in "$@"; do |
| if [ "${foundcachedir}" = "yes" ]; then |
| cachedir="$opt" |
| break |
| elif [ "$opt" = "--cachedir" ]; then |
| foundcachedir="yes" |
| fi |
| done |
| |
| if [ -f "${userdir}"/etc/netbeans.conf ] ; then |
| . "${userdir}"/etc/netbeans.conf |
| fi |
| |
| |
| if [ ! -f "$basedir"/etc/netbeans.clusters ]; then |
| echo Cannot read cluster file: "$basedir"/etc/netbeans.clusters 1>&2 |
| exit 1 |
| fi |
| |
| readClusters() { |
| grep -v "^#" "$basedir"/etc/netbeans.clusters | grep -v "^$" | grep -v platform | while read X; do |
| if expr "$X" : "/.*" >/dev/null; then |
| echo "$X" |
| else |
| echo "$basedir/$X" |
| fi |
| done |
| } |
| |
| absolutize_paths() { |
| while read path; do |
| if [ -d "$path" ]; then |
| (cd "$path" 2>/dev/null && pwd) |
| else |
| echo "$path" |
| fi |
| done |
| } |
| |
| netbeans_clusters=`readClusters | absolutize_paths | tr '\012' ':'` |
| |
| if [ ! -z "$netbeans_extraclusters" ] ; then |
| netbeans_clusters="$netbeans_clusters:$netbeans_extraclusters" |
| fi |
| |
| launchNbexec() { |
| nbexec=`grep -v "^#" "$basedir"/etc/netbeans.clusters | grep -v "^$" | grep platform | while read X; do |
| if expr "$X" : "/.*" >/dev/null; then |
| echo $X/lib/nbexec |
| elif [ -f "$basedir"/$X/lib/nbexec ]; then |
| echo "$basedir"/$X/lib/nbexec |
| fi |
| done | head -n 1` |
| sh=sh |
| # #73162: Ubuntu uses the ancient Bourne shell, which does not implement trap well. |
| if [ -x /bin/bash ] |
| then |
| sh=/bin/bash |
| fi |
| if [ "${founduserdir}" = "yes" ]; then |
| exec $sh "$nbexec" "$@" |
| else |
| if [ "${foundcachedir}" = "yes" ]; then |
| exec $sh "$nbexec" --userdir "${userdir}" "$@" |
| else |
| exec $sh "$nbexec" --userdir "${userdir}" --cachedir "${cachedir}" "$@" |
| fi |
| fi |
| } |
| |
| # in case of macosx, the apple.laf.useScreenMenuBar property should be ideally in the Info.plist file |
| # but it doesn't get propagated into the executed java VM. |
| case "`uname`" in |
| Darwin*) |
| eval launchNbexec \ |
| --jdkhome '"$netbeans_jdkhome"' \ |
| -J-Xdock:name=NetBeans \ |
| '"-J-Xdock:icon=$basedir/nb/netbeans.icns"' \ |
| --branding nb \ |
| --clusters '"$netbeans_clusters"' \ |
| -J-Dnetbeans.importclass=org.netbeans.upgrade.AutoUpgrade \ |
| ${netbeans_default_options} \ |
| '"$@"' |
| ;; |
| *) |
| # Support 2x HiDPI scaling on Linux systems that have configured this via Xft.dpi but not via |
| # GDK_SCALE, notably Ubuntu as of 20.04.1. Xft.dpi technically relates to the size of fonts |
| # only, but Ubuntu sets it when the "Scaling" setting is changed in the "Displays" settings |
| # UI. OpenJDK supports the GDK_SCALE setting at the GraphicsConfiguration level, but not |
| # Xft.dpi (as of 2020-11-22 and LTS 11.0.9). Individual LAFs may react to the latter, though |
| # FlatLAF in particular works correctly even both are set at the same time. |
| # |
| # OpenJDK does not support fractional scalings in GDK_SCALE, so we only handle the 2x case |
| # here. OpenJDK also does not query the separate GDK_DPI_SCALE variable. |
| # |
| # We do not attempt to support per-monitor DPI scalings here. OpenJDK might support this |
| # through the ubuntu.user-interface/scale-factor setting, but as of Ubuntu 20.04.1, the |
| # Displays setting UI does not appear to touch this setting at all, and does in fact appear |
| # to force all monitors to use the same scaling. JetBrains mentions the scale-factor setting, |
| # saying it is "not well supported yet" (presumably in their own OpenJDK fork). |
| # https://intellij-support.jetbrains.com/hc/en-us/articles/360007994999-HiDPI-configuration |
| |
| # If the xrdb command does not exist, no action will be taken here. |
| if [ "`command xrdb -query 2> /dev/null | grep Xft.dpi | cut -d ':' -f2 | xargs`" = 192 ] |
| then |
| echo "Detected 2x HiDPI scaling in Xft.dpi setting; setting GDK_SCALE=2" |
| export GDK_SCALE=2 |
| fi |
| |
| # Handle another case that indicates a need for 2x HiDPI scaling, observed on openSUSE |
| # Tumbleweed (see NETBEANS-2360). A user with a HiDPI monitor and 2x HiDPI scaling |
| # enabled reported that "xdpyinfo | grep -B 2 resolution" yielded the following: |
| # |
| # screen #0: |
| # dimensions: 3840x2160 pixels (508x285 millimeters) |
| # resolution: 192x193 dots per inch |
| # |
| # Xft.dpi was not set in this case, however. In the following test, we |
| # set GDK_SCALE=2 if _all_ monitors report a resolution of "192x" |
| # something (ignoring the odd "193" figure observed above). |
| if [ "`command xdpyinfo 2> /dev/null | grep 'resolution:.*dots per inch' | cut -d ':' -f2 | cut -d 'x' -f1 | sort -u | xargs`" = 192 ] |
| then |
| echo "Detected 192 DPI on all screens in xdpyinfo; setting GDK_SCALE=2" |
| export GDK_SCALE=2 |
| fi |
| |
| extra_automatic_options="" |
| |
| # Java/AWT/Swing will correctly detect text anti-aliasing settings on |
| # GNOME, but not on KDE. Force anti-aliasing on in this case using the |
| # "awt.useSystemAAFontSettings" property, as recommended in |
| # https://bugs.openjdk.java.net/browse/JDK-6408759 . Said bug is old, |
| # but the relevant logic (in sun.awt.X11.XToolkit.initXSettingsIfNeeded , |
| # and fontpath.c ) seems not to have changed significantly since then. |
| # Don't set the "swing.aatext" property; it was "an interim property |
| # strictly for testing" that has been removed from the JDK and |
| # superseded by awt.useSystemAAFontSettings (see |
| # https://bugs.openjdk.java.net/browse/JDK-6391267 ). |
| |
| # "If you plan on using this variable to detect a running KDE session, |
| # check if the value is not empty instead of seeing if it equals true. |
| # The value might be changed in the future to include KDE version |
| # information." |
| # https://userbase.kde.org/KDE_System_Administration/Environment_Variables |
| if [ ! -z "$KDE_FULL_SESSION" ] ; then |
| echo "Detected KDE; adding awt.useSystemAAFontSettings=on" |
| extra_automatic_options="-J-Dawt.useSystemAAFontSettings=on" |
| fi |
| |
| # Add extra_automatic_options before default_options, to allow system |
| # property definitions from the configuration file to take precedence. |
| eval launchNbexec \ |
| --jdkhome '"$netbeans_jdkhome"' \ |
| --branding nb \ |
| --clusters '"$netbeans_clusters"' \ |
| -J-Dnetbeans.importclass=org.netbeans.upgrade.AutoUpgrade \ |
| ${extra_automatic_options} \ |
| ${netbeans_default_options} \ |
| '"$@"' |
| ;; |
| esac |