# 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.

# On Windows ${DEFAULT_USERDIR_ROOT} will be replaced by the launcher
# with a path to "<AppData>/NetBeans" folder where <AppData> is user's
# value of AppData key in Windows Registry under
#   Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
# ${DEFAULT_CACHEDIR_ROOT} will be replaced by the launcher
# with a path to "<Local AppData>/NetBeans/Cache" folder where <Local AppData>
# is user's value of Local AppData key in Windows Registry under
#   Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
#
# On Mac ${DEFAULT_USERDIR_ROOT} will be replaced by the launcher
# with a path to ~/Library/Application Support/NetBeans
# ${DEFAULT_CACHEDIR_ROOT} with a path to ~/Library/Caches/NetBeans
#
# On other systems ${DEFAULT_USERDIR_ROOT} will be replaced with
# a path to ~/.netbeans folder in user's home and
# ${DEFAULT_CACHEDIR_ROOT} with a path to ~/.cache/netbeans folder.
#
# You can also use ${HOME} which will be replaced by user.home
# system property.
#
# NOTE: If you specify a non-default userdir path, the cachedir path
# will be mapped to <userdir>/var/cache folder.
#
netbeans_default_userdir="${HOME}/.netbeans/perfdev"
netbeans_default_cachedir="${HOME}/.cache/perfdev"

# Options used by NetBeans launcher by default, can be overridden by explicit
# command line switches:
netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-Dnetbeans.logger.console=false -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dplugin.manager.check.updates=false -J-Dnetbeans.keyring.no.master=true -J-DSuspendSupport.disabled=true -J-DBrokenReferencesSupport.suppressBrokenRefAlert=true -J-Dnetbeans.full.hack=true -J-Dorg.netbeans.log.startup=print -J-Dorg.netbeans.editor.linewrap=true"
# Note that default -Xmx is selected for you automatically.
# You can find these values in var/log/messages.log file in your userdir.
# The automatically selected value can be overridden by specifying -J-Xmx
# here or on the command line.

# Default location of JDK, can be overridden by using --jdkhome <dir>
# Be careful when changing jdkhome. There are two launchers - 32-bit and 64-bit.
# Which one is used depends on JVM architecture.
netbeans_jdkhome="/space/hudson/jdks/jdk8"

# Additional module clusters, using ${path.separator} (';' on Windows or ':' on Unix):
#netbeans_extraclusters="/absolute/path/to/cluster1:/absolute/path/to/cluster2"

# If you have some problems with detect of proxy settings, you may want to enable
# detect the proxy settings provided by JDK5 or higher.
# In such case add -J-Djava.net.useSystemProxies=true to the netbeans_default_options.
