--- platform/lib/nbexec.orig 1970-01-01 01:00:00.000000000 +0100 +++ platform/lib/nbexec 2013-02-26 10:40:18.000000000 +0100 @@ -0,0 +1,600 @@ +#!/bin/sh +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. +# +# Copyright 1997-2012 Oracle and/or its affiliates. All rights reserved. +# +# Oracle and Java are registered trademarks of Oracle and/or its affiliates. +# Other names may be trademarks of their respective owners. +# +# The contents of this file are subject to the terms of either the GNU +# General Public License Version 2 only ("GPL") or the Common +# Development and Distribution License("CDDL") (collectively, the +# "License"). You may not use this file except in compliance with the +# License. You can obtain a copy of the License at +# http://www.netbeans.org/cddl-gplv2.html +# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the +# specific language governing permissions and limitations under the +# License. When distributing the software, include this License Header +# Notice in each file and include the License file at +# nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the GPL Version 2 section of the License file that +# accompanied this code. If applicable, add the following below the +# License Header, with the fields enclosed by brackets [] replaced by +# your own identifying information: +# "Portions Copyrighted [year] [name of copyright owner]" +# +# Contributor(s): +# +# The Original Software is NetBeans. The Initial Developer of the Original +# Software is Sun Microsystems, Inc. Portions Copyright 1997-2011 Sun +# Microsystems, Inc. All Rights Reserved. +# +# If you wish your version of this file to be governed by only the CDDL +# or only the GPL Version 2, indicate your decision by adding +# "[Contributor] elects to include this software in this distribution +# under the [CDDL or GPL Version 2] license." If you do not indicate a +# single choice of license, a recipient has the option to distribute +# your version of this file under either the CDDL, the GPL Version 2 or +# to extend the choice of license to its licensees as provided above. +# However, if you add GPL Version 2 code and therefore, elected the GPL +# Version 2 license, then the option applies only if the new code is +# made subject to such option by the copyright holder. + + +PRG=$0 + + +resolve_symlink () { + file="$1" + while [ -h "$file" ]; do + ls=`ls -ld "$file"` + link=`expr "$ls" : '^.*-> \(.*\)$' 2>/dev/null` + if expr "$link" : '^/' 2> /dev/null >/dev/null; then + file="$link" + else + file=`dirname "$1"`"/$link" + fi + done + echo "$file" +} + +absolutize_path () { + oldpwd=`pwd` + cd "$1" + abspath=`pwd` + cd "${oldpwd}" + echo "$abspath" +} + +PRG=`resolve_symlink "$PRG"` +progdir=`dirname "$PRG"` +plathome=`absolutize_path "$progdir/.."` + +jargs=${jreflags} +jargs="$jargs -Dnetbeans.home=\"$plathome\"" + +args="" + +prefixcp="" +postfixcp="" + +updater_class=org.netbeans.updater.UpdaterFrame + +# +# parse arguments +# + +parse_args() { +while [ $# -gt 0 ] ; do + case "$1" in + -h|-\?|-help|--help) cat >&2 < path to Java(TM) 2 SDK, Standard Edition + -J pass to JVM + + --cp:p prepend to classpath + --cp:a append to classpath +EOF + # go on and print IDE options as well + args="$args --help" + ;; + --jdkhome) shift; if [ $# -gt 0 ] ; then jdkhome=$1; fi + ;; + # this has to be here for purposes of updater.jar, but it should be + # better to handle this argument inside the java launcher part + --userdir) shift; if [ $# -gt 0 ] ; then userdir="$1"; fi + ;; + -cp|-cp:a|--cp|--cp:a) + shift; + if [ $# -gt 0 ] ; then + if [ ! -z "$postfixcp" ] ; then postfixcp="$postfixcp:" ; fi + postfixcp=$postfixcp$1; + fi + ;; + + -cp:p|--cp:p) + shift; + if [ $# -gt 0 ] ; then + if [ ! -z "$prefixcp" ] ; then prefixcp="$prefixcp:" ; fi + prefixcp=$prefixcp$1; + fi + ;; + --clusters) + shift; + if [ $# -gt 0 ] ; then + clusters="$1" + fi + ;; + -psn*) + shift; + ;; + -J*) jopt=`expr "X-$1" : 'X--J\(.*\)'`; jargs="$jargs '$jopt'";; + *) args="$args \"$1\"" ;; + esac + shift +done +} # parse_args() + +# Process arguments given on the command line. +parse_args "$@" + +# +# check JDK +# + +if [ -z "$jdkhome" ] ; then + # try to find JDK + + case "`uname`" in + Darwin*) + # read Java Preferences + if [ -x "/usr/libexec/java_home" ]; then + jdkhome=`/usr/libexec/java_home --version 1.7.0_10+ --failfast` + if [ -z $jdkhome ]; then + jdkhome=`/usr/libexec/java_home --version 1.6 --failfast` + fi + + # JDK1.7 Update 10 as a fallback + elif [ -f "/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/bin/java" ] ; then + jdkhome="/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home" + + # JDK1.6 + elif [ -f "/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java" ] ; then + jdkhome="/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home" + elif [ -f "/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java" ] ; then + jdkhome="/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home" + elif [ -f "/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/bin/java" ] ; then + jdkhome="/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home" + fi + echo Found jdkhome=$jdkhome + ;; + *) javac=`which javac` + if [ -z "$javac" ] ; then + java=`which java` + if [ ! -z "$java" ] ; then + java=`resolve_symlink "$java"` + jdkhome=`dirname $java`"/.." + fi + else + javac=`resolve_symlink "$javac"` + jdkhome=`dirname $javac`"/.." + fi + ;; + esac +fi + +if [ ! -x "${jdkhome}/bin/java" ] ; then + echo "Cannot find java. Please use the --jdkhome switch." >&2 + exit 2 +fi + +# Make sure native code libraries of jdk7 are found +LD_LIBRARY_PATH=${jdkhome}/jre/lib/amd64:${jdkhome}/jre/lib/i386:${LD_LIBRARY_PATH} +export LD_LIBRARY_PATH + +# if the Java option for heap dump on OOME is supported enable it +if "${jdkhome}/bin/java" -XX:+HeapDumpOnOutOfMemoryError -cp "${progdir}/boot.jar" org.netbeans.NbExecJavaStartTry > /dev/null 2>&1 ; then + jargs="$jargs -XX:+HeapDumpOnOutOfMemoryError" + if echo $jargs | /usr/bin/grep -v -- "-XX:HeapDumpPath=" > /dev/null ; then + jargs="$jargs -XX:HeapDumpPath=\"${userdir}/var/log/heapdump.hprof\"" + fi + # rename old heap dump to .old + mv "${userdir}/var/log/heapdump.hprof" "${userdir}/var/log/heapdump.hprof.old" > /dev/null 2>&1 +fi + +jargs_without_clusters="$jargs" +jargs="-Dnetbeans.dirs=\"${clusters}\" $jargs_without_clusters" + +jdkhome=`absolutize_path "$jdkhome"` + +args="--userdir \"${userdir}\" $args" + +append_jars_to_cp() { + dir="$1" + subpath="$2" + for ex in jar zip ; do + if [ "`echo "${dir}"/*.$ex`" != "${dir}/*.$ex" ] ; then + for x in "${dir}"/*.$ex ; do + subx=`basename "$x"` + if echo "$paths" | /usr/bin/grep -v "$subpath$subx" > /dev/null ; then + if [ ! -z "$cp" ] ; then cp="$cp:" ; fi + cp="$cp$x" + if [ ! -z "$paths" ] ; then paths="$paths:" ; fi + paths="$paths$subpath$subx" + fi + done + fi + done +} + +construct_cp() { + cp="" + updatercp="" + paths="" + + build_cp "${userdir}" + build_cp "${plathome}" + + if [ -f "${userdir}/modules/ext/updater.jar" ] ; then + updatercp="${userdir}/modules/ext/updater.jar" + else + if [ -f "${plathome}/modules/ext/updater.jar" ] ; then + updatercp="${plathome}/modules/ext/updater.jar" + fi + fi + + # JDK tools + for x in "${jdkhome}/lib/dt.jar" "${jdkhome}/lib/tools.jar"; do + if [ -f "$x" ]; then + if [ ! -z "$cp" ] ; then cp="$cp:" ; fi + cp="${cp}$x" + fi + done + + # user-specified prefix and postfix CLASSPATH + + if [ ! -z "${prefixcp}" ] ; then + cp="${prefixcp}:$cp" + fi + + if [ ! -z "${postfixcp}" ] ; then + cp="$cp:${postfixcp}" + fi + + + # prepend IDE's classpath to updater's classpath + # (just xml-apis.jar and one XML parser would suffice) + if [ ! -z "$updatercp" ] ; then + updatercp=${cp}:${updatercp} + else + updatercp=${cp} + fi +} + +build_cp() { + base="$1" + append_jars_to_cp "${base}/lib/patches" "patches" + append_jars_to_cp "${base}/lib" "lib" + append_jars_to_cp "${base}/lib/locale" "locale" +} + +do_run_updater() { + eval "\"$jdkhome/bin/java\"" -classpath "\"${updatercp}\"" "$jargs" "-Dnetbeans.user=\"$userdir\"" $updater_class "$args" + construct_cp +} + +look_for_pre_runs() { + base="$1" + install_new_updater "$1" + dir="${base}/update/download" + if [ "`echo "${dir}"/*.nbm`" != "${dir}/*.nbm" -o "`echo "${dir}"/*.jar`" != "${dir}/*.jar" ] ; then + run_updater=yes + else + dir="${base}/update/deactivate" + if [ -f "${dir}/to_disable.txt" -o -f "${dir}/to_uninstall.txt" ] ; then + run_updater=yes + fi + fi +} + +look_for_post_runs() { + base="$1" + install_new_updater "$1" + dir="${base}/update/download" + if [ \! -f "${dir}/install_later.xml" ] && [ "`echo "${dir}"/*.nbm`" != "${dir}/*.nbm" -o "`echo "${dir}"/*.jar`" != "${dir}/*.jar" ] ; then + run_updater=yes + else + dir="${base}/update/deactivate" + if [ \! -f "${dir}/deactivate_later.txt" ] ; then + if [ -f "${dir}/to_disable.txt" -o -f "${dir}/to_uninstall.txt" ] ; then + run_updater=yes + fi + fi + fi +} + +look_for_new_clusters() { + base="$userdir" + dir="${base}/update/download" + newclusters="${dir}/netbeans.dirs" + if [ -f "${newclusters}" ] ; then + clusters=`cat "${newclusters}"` + jargs="-Dnetbeans.dirs=\"${clusters}\" $jargs_without_clusters" + rm -f "${newclusters}" + fi +} + +delete_new_clusters_file() { + base="$userdir" + dir="${base}/update/download" + newclusters="${dir}/netbeans.dirs" + if [ \! -f "${newclusters}" ] ; then + rm -f "${newclusters}" + fi +} + +install_new_updater() { + base="$1" + newUpdaterDir="${base}/update/new_updater" + if [ -d "${newUpdaterDir}" ]; then + mkdir -p "${base}/modules/ext/" + if [ -f "${newUpdaterDir}/updater.jar" ]; then + mv -f "${newUpdaterDir}/updater.jar" "${base}/modules/ext/" + fi + ls -l "${newUpdaterDir}/"updater_*.jar + for i in "${newUpdaterDir}/"updater_*.jar; do + mkdir -p "${base}/modules/ext/locale/" + mv -f "$i" "${base}/modules/ext/locale/" + done + rmdir "${newUpdaterDir}" + fi +} + +# detect system http proxy setting + +detect_system_proxy () { + if [ ! -z "$http_proxy" ]; then + http_proxy_tmp=$http_proxy + fi + return 0 +} + +detect_gnome_proxy () { + gconftool=%%GCONFTOOL2%% + if [ -x $gconftool ] ; then + proxy_mode=`$gconftool --get /system/proxy/mode 2>/dev/null` + if [ "$proxy_mode" = "manual" ] ; then + http_proxy_host=`$gconftool --get /system/http_proxy/host 2>/dev/null` + http_proxy_port=`$gconftool --get /system/http_proxy/port 2>/dev/null` + http_proxy_tmp=$http_proxy_host:$http_proxy_port + http_non_proxy_hosts=`$gconftool --get /system/http_proxy/ignore_hosts 2>/dev/null` + if [ $? ] ; then + http_non_proxy_hosts=`echo $http_non_proxy_hosts | /usr/bin/sed 's/\]//'` + fi + socks_proxy_host=`$gconftool --get /system/proxy/socks_host 2>/dev/null` + socks_proxy_port=`$gconftool --get /system/proxy/socks_port 2>/dev/null` + socks_proxy_tmp=$socks_proxy_host:$socks_proxy_port + + return 0 + else + if [ "$proxy_mode" = "none" ] ; then + detect_system_proxy + if [ -z "$http_proxy_tmp" ]; then + http_proxy_tmp="DIRECT" + fi + return 0 + else + if [ "$proxy_mode" = "auto" ] ; then + detect_system_proxy + pac_file=`$gconftool --get /system/proxy/autoconfig_url 2>/dev/null` + if [ ! -z "$pac_file" ]; then + http_proxy_tmp="PAC "$pac_file + fi + return 0 + fi + fi + fi + fi + return 1 +} + +detect_kde_proxy () { + kioslaverc="${HOME}/.kde/share/config/kioslaverc" + if [ -f $kioslaverc ] ; then + if /usr/bin/grep 'ProxyType=1' "$kioslaverc" >/dev/null 2>&1; then + http_proxy_tmp=`/usr/bin/grep 'httpProxy=http://' "$kioslaverc"` + if [ $? ] ; then + http_proxy_tmp=`echo $http_proxy_tmp | /usr/bin/sed 's/httpProxy=http:\/\///'` + return 0 + fi + http_non_proxy_hosts=`/usr/bin/grep 'NoProxyFor=' "$kioslaverc"` + if [ $? ] ; then + http_non_proxy_hosts=`echo $http_non_proxy_hosts | /usr/bin/sed 's/NoProxyFor=//'` + fi + else + if /usr/bin/grep 'ProxyType=0' "$kioslaverc" >/dev/null 2>&1; then + detect_system_proxy + if [ -z "$http_proxy_tmp" ]; then + http_proxy_tmp="DIRECT" + fi + return 0 + else + if /usr/bin/grep 'ProxyType=2' "$kioslaverc" >/dev/null 2>&1; then + pac_file=`/usr/bin/grep "Proxy Config Script=" $kioslaverc | cut -f 2 -d =` + http_proxy_tmp="PAC "$pac_file + return 0 + fi + fi + fi + fi + return 1 +} + +detect_macosx_proxy () { + if [ ! -x /usr/sbin/scutil ] ; then + return 1 + fi + + scutil_out=/tmp/nb-proxy-detection.$$ + cat < ${scutil_out} +open +show State:/Network/Global/Proxies +close +EOF + + if /usr/bin/grep "ProxyAuto.*: *1" ${scutil_out} >/dev/null 2>&1; then + if /usr/bin/grep "ProxyAutoConfigEnable.*: *1" ${scutil_out} >/dev/null 2>&1; then + http_proxy_tmp="PAC `/usr/bin/grep ProxyAutoConfigURLString ${scutil_out} | /usr/bin/awk 'END{print $3}'`" + rm ${scutil_out} + return 0 + fi + + rm ${scutil_out} + return 1 + fi + + if /usr/bin/grep "HTTPEnable *: *1" ${scutil_out} >/dev/null 2>&1; then + http_proxy_host=`/usr/bin/grep HTTPProxy ${scutil_out} | /usr/bin/awk 'END{print $3}'` + http_proxy_port=`/usr/bin/grep HTTPPort ${scutil_out} | /usr/bin/awk 'END{print $3} '` + http_proxy_tmp=$http_proxy_host:$http_proxy_port + rm ${scutil_out} + return 0 + fi + + http_proxy_tmp="DIRECT" + rm ${scutil_out} + return 0 +} + +unset http_proxy_tmp + +if [ `uname` = Darwin ] ; then + detect_macosx_proxy +else + if [ "$KDE_FULL_SESSION" = "true" ] ; then + detect_kde_proxy + else + if [ ! -z "$GNOME_DESKTOP_SESSION_ID" ] ; then + detect_gnome_proxy + fi + fi +fi + +# fall back to the environment-defined http_proxy if nothing found so far +if [ -z "$http_proxy_tmp" ]; then + http_proxy_tmp=$http_proxy +fi + +if [ ! -z "$http_proxy_tmp" ] ; then + jargs="-Dnetbeans.system_http_proxy=\"$http_proxy_tmp\" -Dnetbeans.system_http_non_proxy_hosts=\"$http_non_proxy_hosts\" $jargs" +fi + +if [ ! -z "$socks_proxy_tmp" ] ; then + jargs="-Dnetbeans.system_socks_proxy=\"$socks_proxy_tmp\" $jargs" +fi + +if [ ! -z "${DEFAULT_USERDIR_ROOT}" ] ; then + jargs="-Dnetbeans.default_userdir_root=\"${DEFAULT_USERDIR_ROOT}\" $jargs" + unset DEFAULT_USERDIR_ROOT +fi + +# http://java.sun.com/j2se/1.5.0/docs/guide/2d/flags.html#pixmaps +J2D_PIXMAPS=shared +export J2D_PIXMAPS + +# Check DISPLAY variable on non-Mac +if [ "no$DISPLAY" = "no" -a `uname` != Darwin ]; then + echo "$0: WARNING: environment variable DISPLAY is not set" +fi + + +# The Startup Notification Protocol Specification [1] +# recommends to unset the DESKTOP_STARTUP_ID environment variable +# to avoid possible reuse by some process started later by this +# process, e.g. when a browser will be launched by the NetBeans [2]. +# +# See: +# [1] http://standards.freedesktop.org/startup-notification-spec +# [2] http://netbeans.org/bugzilla/show_bug.cgi?id=76970 +if [ ! -z "$DESKTOP_STARTUP_ID" ] ; then + # Save a value for later using + NB_DESKTOP_STARTUP_ID="$DESKTOP_STARTUP_ID"; export NB_DESKTOP_STARTUP_ID + + unset DESKTOP_STARTUP_ID +fi + + +# +# main loop +# + +# clear to prevent loop from ending +restart="yes" +first_time_starting="yes" +restart_file="${userdir}/var/restart" + +while [ "$restart" ] ; do + + # + # build CLASSPATH + # + construct_cp + + # First check for pre-run updates. + if [ "$first_time_starting" ] ; then + run_updater="" + look_for_pre_runs "$plathome" + save="$IFS" + IFS=':' ; for oneCls in $clusters ; do + IFS="$save" + look_for_pre_runs "$oneCls" + done + IFS="$save" + look_for_pre_runs "$userdir" + if [ "$run_updater" ] ; then do_run_updater ; fi + # Do not check this after a restart, it makes no sense. + first_time_starting="" + fi + + # + # let's go + # + delete_new_clusters_file + rm -f "${restart_file}" + eval ${_NB_PROFILE_CMD} "\"${jdkhome}/bin/java\"" -Djdk.home="\"${jdkhome}\"" -classpath "\"$cp\"" \ + "$jargs" org.netbeans.Main "$args" '<&0' '&' + PID=$! + trap "kill $PID" EXIT + wait $PID + exitcode=$? + trap '' EXIT + look_for_new_clusters + # If we should update anything, do it and restart IDE. + run_updater="" + look_for_post_runs "$plathome" + + save="$IFS" + IFS=':' ; for oneCls in $clusters ; do + IFS="$save" + look_for_post_runs "$oneCls" + done + IFS="$save" + look_for_post_runs "$userdir" + if [ "$run_updater" ] ; then + do_run_updater + restart="yes" + else + if [ ! -f "${restart_file}" ] ; then + # will fall thru loop and exit + restart="" + fi + fi + +done + +# and we exit. +exit $exitcode