#    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.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)',\
	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'

-runblacklist: \
	osgi.identity;filter:='(osgi.identity=*owb*)'

-runbundles: \
	jboss-classfilewriter;version='[1.2.4,1.2.5)',\
	org.apache.aries.cdi.extender;version='[1.1.4,1.1.5)',\
	org.apache.aries.cdi.extension.spi;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.spifly.dynamic.framework.extension;version='[1.3.2,1.3.3)',\
	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.0,1.1.1)',\
	org.apache.felix.gogo.runtime;version='[1.1.2,1.1.3)',\
	org.apache.felix.gogo.shell;version='[1.1.2,1.1.3)',\
	org.apache.geronimo.specs.geronimo-atinject_1.0_spec;version='[1.1.0,1.1.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-jcdi_2.0_spec;version='[1.3.0,1.3.1)',\
	org.jboss.logging.jboss-logging;version='[3.4.2,3.4.3)',\
	org.jboss.weld.osgi-bundle;version='[3.1.7,3.1.8)',\
	org.osgi.service.cdi;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)'
