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

-include: base-itest.bndrun

#-runjdb: 8000

_runee.version: ${substring;${-runee};7}
_java.opens: "--add-opens", "java.base/java.lang=ALL-UNNAMED"

-runvm.weld: ${if;${ncompare;${_runee.version};1.8};${list;_java.opens}}
-runsystemcapabilities.weld: \
	osgi.contract;\
		osgi.contract=JavaAnnotation;\
		uses:="javax.annotation,javax.annotation.sql,javax.annotation.security";\
		version:List<Version>="1.3,1.2,1.1,1.0"
-runpath.weld: \
	org.apache.geronimo.specs.geronimo-annotation_1.3_spec,\
	org.jboss.spec.javax.ejb.jboss-ejb-api_3.2_spec

-runrequires: \
	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.weld)'

-runblacklist: \
	osgi.identity;filter:='(osgi.identity=*owb*)'
-runbundles: \
	assertj-core;version='[3.19.0,3.19.1)',\
	com.fasterxml.woodstox.woodstox-core;version='[6.2.4,6.2.5)',\
	com.sun.xml.bind.jaxb-impl;version='[2.3.2,2.3.3)',\
	jboss-classfilewriter;version='[1.2.5,1.2.6)',\
	jcl.over.slf4j;version='[1.7.31,1.7.32)',\
	junit-jupiter-api;version='[5.8.0,5.8.1)',\
	junit-jupiter-engine;version='[5.8.0,5.8.1)',\
	junit-jupiter-params;version='[5.8.0,5.8.1)',\
	junit-platform-commons;version='[1.8.0,1.8.1)',\
	junit-platform-engine;version='[1.8.0,1.8.1)',\
	junit-platform-launcher;version='[1.8.0,1.8.1)',\
	org.apache.aries.cdi.extender;version='[1.1.4,1.1.5)',\
	org.apache.aries.cdi.extension.jaxrs;version='[1.1.4,1.1.5)',\
	org.apache.aries.cdi.extension.jndi;version='[1.1.4,1.1.5)',\
	org.apache.aries.cdi.extension.servlet.common;version='[1.1.4,1.1.5)',\
	org.apache.aries.cdi.extension.servlet.weld;version='[1.1.4,1.1.5)',\
	org.apache.aries.cdi.extension.spi;version='[1.1.4,1.1.5)',\
	org.apache.aries.cdi.extra;version='[1.1.4,1.1.5)',\
	org.apache.aries.cdi.itests;version='[1.1.4,1.1.5)',\
	org.apache.aries.cdi.spi;version='[1.1.4,1.1.5)',\
	org.apache.aries.cdi.weld;version='[1.1.4,1.1.5)',\
	org.apache.aries.component-dsl.component-dsl;version='[1.2.2,1.2.3)',\
	org.apache.aries.jax.rs.whiteboard;version='[2.0.0,2.0.1)',\
	org.apache.aries.jndi.api;version='[1.1.0,1.1.1)',\
	org.apache.aries.jndi.core;version='[1.0.2,1.0.3)',\
	org.apache.aries.spifly.dynamic.framework.extension;version='[1.3.4,1.3.5)',\
	org.apache.aries.util;version='[1.0.0,1.0.1)',\
	org.apache.cxf.cxf-core;version='[3.4.3,3.4.4)',\
	org.apache.cxf.cxf-rt-frontend-jaxrs;version='[3.4.3,3.4.4)',\
	org.apache.cxf.cxf-rt-rs-client;version='[3.4.3,3.4.4)',\
	org.apache.cxf.cxf-rt-rs-sse;version='[3.4.3,3.4.4)',\
	org.apache.cxf.cxf-rt-security;version='[3.4.3,3.4.4)',\
	org.apache.cxf.cxf-rt-transports-http;version='[3.4.3,3.4.4)',\
	org.apache.felix.configadmin;version='[1.9.22,1.9.23)',\
	org.apache.felix.converter;version='[1.0.14,1.0.15)',\
	org.apache.felix.gogo.command;version='[1.1.2,1.1.3)',\
	org.apache.felix.gogo.runtime;version='[1.1.4,1.1.5)',\
	org.apache.felix.gogo.shell;version='[1.1.4,1.1.5)',\
	org.apache.felix.http.jetty;version='[4.1.4,4.1.5)',\
	org.apache.felix.http.servlet-api;version='[1.1.2,1.1.3)',\
	org.apache.geronimo.specs.geronimo-atinject_1.0_spec;version='[1.2.0,1.2.1)',\
	org.apache.geronimo.specs.geronimo-el_2.2_spec;version='[1.1.0,1.1.1)',\
	org.apache.geronimo.specs.geronimo-interceptor_1.2_spec;version='[1.2.0,1.2.1)',\
	org.apache.geronimo.specs.geronimo-jaxrs_2.1_spec;version='[1.1.0,1.1.1)',\
	org.apache.geronimo.specs.geronimo-jcdi_2.0_spec;version='[1.3.0,1.3.1)',\
	org.apache.httpcomponents.httpclient;version='[4.5.13,4.5.14)',\
	org.apache.httpcomponents.httpcore;version='[4.4.14,4.4.15)',\
	org.apache.ws.xmlschema.core;version='[2.2.5,2.2.6)',\
	org.jboss.logging.jboss-logging;version='[3.4.2,3.4.3)',\
	org.jboss.weld.osgi-bundle;version='[3.1.8,3.1.9)',\
	org.opentest4j;version='[1.2.0,1.2.1)',\
	org.osgi.service.cdi;version='[1.0.0,1.0.1)',\
	org.osgi.service.jaxrs;version='[1.0.0,1.0.1)',\
	org.osgi.test.common;version='[1.0.0,1.0.1)',\
	org.osgi.test.junit5;version='[1.0.0,1.0.1)',\
	org.osgi.util.function;version='[1.1.0,1.1.1)',\
	org.osgi.util.promise;version='[1.1.1,1.1.2)',\
	stax2-api;version='[4.2.1,4.2.2)'
