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

-include: build-defaults.bnd, spec-defaults.bnd

Bundle-Name: tomcat-servlet-api
Bundle-SymbolicName: org.apache.tomcat-servlet-api
Export-Package: \
    !javax.servlet.jsp.*,\
    javax.servlet.*;version=4.0

Provide-Capability: \
    osgi.contract;\
        osgi.contract=JavaServlet;\
        version:List<Version>="4.0,3.1,3,2.5";\
        uses:='${packages;NAMED;javax.servlet.*;NAMED;!javax.servlet.jsp.*}'

-includeresource.notice2: META-INF/NOTICE;literal="${replace;${cat;../META-INF/servlet-api.jar.notice};@YEAR@;${year}}\n"
-includeresource.license2: {META-INF/LICENSE=../META-INF/servlet-api.jar.license}

-namesection: javax/servlet*/;\
    Specification-Title='Java API for Servlets';\
    Specification-Version=4.0;\
    Specification-Vendor='Sun Microsystems, Inc.';\
    Implementation-Title=javax.servlet;\
    Implementation-Version=4.0.${servlet.revision};\
    Implementation-Vendor='Apache Software Foundation'

-jpms-module-info: \
    java.servlet;\
        access=32;\
        version=${servlet.spec.version}
-jpms-module-info-options: \
    java.servlet;\
        substitute=servlet-api
