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

# XXX Should be fixed by jsfcl
#cp.extra=\
#${cluster}/modules/ext/jsfcl.jar:\
#${cluster}/modules/ext/html-dt.jar:\
#${cluster}/modules/ext/jsfcl-dt.jar:\

#${ravelibs/jsf.dir}/${nb.modules.dir}/ext/jsf-api.jar

javac.compilerargs=-Xlint:unchecked
javac.source=1.6
test.qa-functional.cp.extra=\
    ${web.jsf.dir}/modules/org-netbeans-modules-web-jsf-navigation.jar:\
    ${projectapi.dir}/modules/org-netbeans-modules-projectapi.jar:\
    ${editor.completion.dir}/modules/org-netbeans-modules-editor-completion.jar:\
    ${editor.lib.dir}/modules/org-netbeans-modules-editor-lib.jar:\
    ${options.editor.dir}/modules/org-netbeans-modules-editor.jar:\
    ${openide.util.dir}/lib/org-openide-util.jar:\
    ${openide.util.ui.dir}/lib/org-openide-util-ui.jar:\
    ${openide.actions.dir}/modules/org-openide-actions.jar:\
    ${openide.text.dir}/modules/org-openide-text.jar:\
    ${openide.nodes.dir}/modules/org-openide-nodes.jar:\
    ${openide.loaders.dir}/modules/org-openide-loaders.jar:\
    ${openide.filesystems.dir}/core/org-openide-filesystems.jar
test.unit.cp.extra=\
    ${web.jsf.dir}/modules/org-netbeans-modules-web-jsf.jar:\
    ${projectapi.dir}/modules/org-netbeans-modules-projectapi.jar:\
    ${editor.completion.dir}/modules/org-netbeans-modules-editor-completion.jar:\
    ${editor.lib.dir}/modules/org-netbeans-modules-editor-lib.jar:\
    ${options.editor.dir}/modules/org-netbeans-modules-editor.jar:\
    ${openide.util.dir}/lib/org-openide-util.jar:\
    ${openide.actions.dir}/modules/org-openide-actions.jar:\
    ${openide.text.dir}/modules/org-openide-text.jar:\
    ${openide.nodes.dir}/modules/org-openide-nodes.jar:\
    ${openide.loaders.dir}/modules/org-openide-loaders.jar:\
    ${openide.filesystems.dir}/core/org-openide-filesystems.jar
