#
# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

#####################################################################################
#                                                                                   #
# This properties file allows for a developer to override various properties used   #
# when building JavaFX. Any settings you configure in the gradle.properties file    #
# will have precedence over any values specified in the build script itself.        #
#                                                                                   #
#####################################################################################

# By default, the build will 'fail fast' if the version of gradle is incompatible.
# Set this flag to false to have it print a warning and try to build anyway.

#GRADLE_VERSION_CHECK = false

# These properties give developers the chance to skip building WebKit and/or
# GStreamer. WebKit takes a fair amount of time to build (more than 50% of the
# overall full build time is taken by WebKit), so allowing a developer to
# selectively enable building of WebKit is important. To build WebKit or
# GStreamer, uncomment the appropriate lines below.

#COMPILE_WEBKIT = true
#COMPILE_MEDIA = true

#To disable building support for JRockit Flight Recorder, uncomment the line below

#COMPILE_JFR = false

# The building of JavaDoc takes time. By default we disable the building of JavaDoc
# so as to speed up the time in incremental builds. Uncomment this flag in order to
# build all the JavaDoc

#BUILD_JAVADOC = true

# The building of the javafx-src bundle takes time. By default we disable the
# building of javafx-src so as to speed up the time in incremental builds.
# Uncomment this flag in order to build javafx-src.zip

#BUILD_SRC_ZIP = true

# Specifies whether to build SDK for running unit tests
# By default, it is set to true and the tests are running of the fresh-built SDK
# If set to false, this flag removes main sources complication tasks and building
# the whole SDK and jfxrt.jar and jars from TEST_SDK are used
# Setting TEST_SDK is recommended

#BUILD_SDK_FOR_TEST = false

# Specifies SDK for running tests with when BUILD_SDK_FOR_TEST is set to false
# By default, it is set to JDK_HOME
# Developer builds are preferred, in other case systemTests would fail to compile and run
# jfxrt.jar should be located at $TEST_SDK/rt/lib/ext/jfxrt.jar or $TEST_SDK/jre/lib/ext/jfxrt.jar
# ant-javafx.jar and javafx-mx.jar should be located at $TEST_SDK/lib/

#TEST_SDK = /path/to/sdk

# Specifies whether to do a full test run or a "smoke test" run. By default we
# do a smoke test run which excludes all tests that show a window or play media.
# Certain long running tests might also be excluded when this is not set.

#FULL_TEST = true

# Specifies whether to enable robot-based visual tests when running a full test.
# This flag is ignored if FULL_TEST is false.

#USE_ROBOT = true

# Specifies whether to run system tests that depend on AWT.
# This flag is ignored if FULL_TEST is false.

#AWT_TEST = false

# Specifies whether or not the results of the packager tests should be
# retained.  If not they will be automatically deleted.

#RETAIN_PACKAGER_TESTS = false

# Specifies whether or not Packager DMG tests should be run.
# Mac OSX 10.7 tends to hang on automated builds with hdiutil is run,
# hence the default is false.

#TEST_PACKAGER_DMG = false

# Specify the COMPILE_TARGETS when performing cross compiles. A Cross-Compile is
# when you build for a platform other than the one you are building on. For example,
# to build for Apple iOS, you would specify ios as one of the COMPILE_TARGETS.
# The case is not significant. Valid cross build targets for each OS include:
#
#   OS             Target
#  ------------------------------
#   Mac             mac
#   Mac             ios
#   Mac             swt
#   Mac             android
#   Linux           linux
#   Linux           armv6hf
#   Linux           armv6sf
#   Linux           swt
#   Linux           android
#   Windows         win
#   Windows         swt
#   Window          android
#
# The compile targets are listed as a comma separated list. Alternatively,
# you can set COMPILE_TARGETS to "all" and every appropriate compile target
# for your current machine configuration will be used. We will look up and
# determine whether, for example, you have the Android tools installed and
# only build Android if those tools are installed.
#
# If you manually specify a compile target which cannot be built, then the
# build will fail. If you specify "all" then only those targets which can
# be built will be attempted. For example, if your system is missing the
# required toolchains for embedded builds, then armv6 builds would not
# even be attempted when "all" is set.

#COMPILE_TARGETS = all

# The JDK_HOME must either be specified or will be inferred based on the JDK / JRE used to
# execute Gradle. From the JDK_HOME are derived the JAVA, JAVAC, JAVAH, JAVADOC, and STUB_RUNTIME
# properties, although each of these may be specified individually. In addition, the LIBRARY_STUB
# property is derived from STUB_RUNTIME. Normally the gradle build
# will work based on whatever "java" is being used to run gradle. It does this by looking for
# a JDK relative to the bin/java location. However if you want to build with a different JDK than
# what is used to execute Gradle, or to fix a failed attempt by the build script to locate the
# JDK_HOME, you may want to specify it manually here.

#JDK_HOME = /path/to/the/jdk
#JAVA = /path/to/the/jdk/bin/java
#JAVAC = /path/to/the/jdk/bin/javac
#JAVAH = /path/to/the/jdk/bin/javah
#JAVADOC = /path/to/the/jdk/bin/javadoc
#STUB_RUNTIME = /path/to/the/jdk/jre
#LIBRARY_STUB = /path/to/the/jdk/jre/xxx (different location depending on platform)

# The generated JavaDocs contain many references to core JDK classes such as java.lang.String
# and java.util.concurrent.Executor. These references are resolved via the JDK_DOCS property,
# which should point to the JDK API documentation. You can override which JDK to point to here.
# This follows the rules specified in the JavaDoc tool documentation. Examples are below.

#JDK_DOCS = https://docs.oracle.com/javase/8/docs/api
#JDK_DOCS = file:///Library/Java/JavaVirtualMachines/jdk1.8.0/Content/Home/docs/api
#JDK_DOCS = relative/path/to/docs/api

# Specify the build configuration: Release, Debug, or DebugNative. The default setting is Debug.

#CONF = Release

# Gradle 1.x incremental compilation
#
# Enables the use of the "use depend" feature. This speeds up incremental builds, but at the
# cost of accuracy. Under normal circumstances, if you modify a single source file in the
# "base" project, a near-complete recompile of the entire project is required for correctness
# since that change *may* have caused other files to no longer compile / link correctly.
# However, in many cases this is just additional compilation overhead because you may have
# only added comments or performed some other work that didn't change the public API in any
# way. By setting "use depend" to true, the build system will do more extensive analysis to
# only recompile those classes directly impacted by your change. In some cases this will miss
# compiling some classes that really do require recompilation and your build will be faulty.
# This flag is enabled by default for command line builds. Uncomment to turn it off "use depend"

#USE_DEPEND = false

# Gradle 2.x incremental compilation
#
# Enables the use of the (still incubating) incremental Java compilation feature. This
# should speed up incremental builds of the Java classes, but is not yet working correctly.
#
# This flag is disabled by default. Uncomment this to turn it on.

#INCREMENTAL = true

# Specify compiler LINT arguments. These values are defined by the javac compiler. You can
# study the list of available options here https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/javac.html
# If LINT is empty, then no warning are generated. Otherwise, LINT should be a space or comma separated
# list of names. If the name is prefixed with a '-' then that warning is removed (not used). For example:
#
# LINT = static try -varags
#
# This command would turn on the "static" and "try" warnings, but turn off the "varargs" warnings. The
# special values "all" and "none" are used to turn on all recommended warnings, or turn them all off, respectively.
# The default (for now) is "none" but as we clean up our warnings, we will likely change this to "all".

#LINT = all

# The following flag specifies whether to generate code coverage
# statistics when running tests

#JCOV = true

# Define the number of threads to use when compiling native code. This value must be
# > 0, or the build system will default to 1. If not specified, the number of compile
# threads is determined based on the number of CPU cores on the machine. If this value
# is too high, the amount of time servicing the threads will start slowing down your
# build. Likely the optimal value is somewhat larger than the number of cores on the
# machine, and playing with this value may improve build time performance.

#NUM_COMPILE_THREADS = 12

# When you are working from behind a proxy and attempting to access public libraries, you need
# to set the proxy host and port.

#systemProp.http.proxyHost=proxy.my.com
#systemProp.http.proxyPort=80

# In order to enable Android builds, you must specify the paths to the Android SDK and NDK.
# Uncomment the two lines below and configure them to point to the right location on your system

#ANDROID_SDK = /path/to/android/sdk
#ANDROID_NDK = /path/to/android/ndk

# The COMPILE_FLAGS_FILES defines the native compilation flags to use. Each native project
# defines a pair of flags, XXX_CC_FLAGS and XXX_LINK_FLAGS as defined below:
#
#   Project         Flags
#  -----------------------------------
#   Glass           GLASS_CC_FLAGS, GLASS_LINK_FLAGS
#   Decora          DECORA_CC_FLAGS, DECORA_LINK_FLAGS
#   Prism           PRISM_CC_FLAGS, PRISM_LINK_FLAGS
#   Prism SW        PRISM_SW_CC_FLAGS, PRISM_SW_LINK_FLAGS
#   Launcher        LAUNCHER_CC_FLAGS, LAUNCHER_LINK_FLAGS
#
# Other projects may use CC_FLAGS and LINK_FLAGS, or may not be fully abstracted out yet.
# As such, the set of flags a COMPILE_FLAGS_FILES must support will change as time goes on.
# Setting a custom COMPILE_FLAGS_FILE should be something rarely done, usually by
# somebody who is setting up builds for a new compile target.
#
# The COMPILE_FLAGS_FILES is a gradle file and is applied directly by build.gradle.
# This means that the file can implement logic (if / loop / etc) and has access to all of
# the properties defined for the build.
#
# If not specified, the appropriate COMPILE_FLAGS_FILES for the designated COMPILE_TARGETS
# will be chosen automatically. For example, win.gradle will be used when compiling on
# windows, and armhf.gradle will be picked up when compiling for armhf (such as for
# the Raspberry PI).
#
# Paths for those properties that take a path should be absolute or relative paths, or they
# should be full URLs. For example:
#
#       COMPILE_FLAGS_FILES = foo.gradle
#       COMPILE_FLAGS_FILES = ../foo.gradle
#       COMPILE_FLAGS_FILES = bar/foo.gradle
#       COMPILE_FLAGS_FILES = file:///path/to/foo.gradle
#

#COMPILE_FLAGS_FILES = path/to/flags/file.gradle, path/to/flags/file2.gradle

# Define settings used when creating the VersionInfo. These settings are generally left alone
# by developers and set only from Hudson.

#HUDSON_JOB_NAME = not_hudson
#HUDSON_BUILD_NUMBER = 0000
#PROMOTED_BUILD_NUMBER = 00
#PRODUCT_NAME = OpenJFX

# Define the default SDK path on Mac. This should need to be rarely, if ever set.

# MACOSX_SDK_PATH = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk
