<!--
 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.
-->
<project>
  <parent>
    <groupId>org.apache.felix</groupId>
    <artifactId>felix</artifactId>
    <version>1.0.4</version>
    <relativePath>../pom/pom.xml</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <packaging>pom</packaging>
  <name>Apache Felix UPnP: Root POM</name>
  <artifactId>upnp</artifactId>
  <version>1.0.0</version>

  <profiles>
    <profile>
      <id>packaging-bundle</id>
      <activation>
        <property>
          <name>packaging</name>
          <value>bundle</value>
        </property>
      </activation>
      <modules>
          <module>extra</module>
          <module>basedriver</module>
          <module>tester</module>
          <module>samples</module>
      </modules>
    </profile>
    <profile>
      <id>default</id>
      <activation>
        <property>
          <name>!packaging</name>
        </property>
      </activation>
      <modules>
          <module>extra</module>
          <module>basedriver</module>
          <module>tester</module>
          <module>samples</module>
      </modules>
    </profile>
  </profiles>

  <build>
    <plugins>  
      <plugin>
        <groupId>org.ops4j</groupId>
        <artifactId>maven-pax-plugin</artifactId>
        <configuration>
          <noDependencies>true</noDependencies>
          <provision>
            <provision>mvn:org.apache.felix/org.apache.felix.upnp.basedriver@nostart</provision>
            <provision>mvn:org.apache.felix/org.apache.felix.upnp.tester</provision>
            <provision>mvn:org.apache.felix/org.apache.felix.upnp.extra</provision>
            <provision>mvn:org.apache.felix/org.apache.felix.upnp.sample.binaryLight</provision>
            <provision>mvn:org.apache.felix/org.apache.felix.upnp.sample.clock</provision>
            <provision>mvn:org.apache.felix/org.apache.felix.upnp.sample.tv</provision>
            <provision>mvn:org.apache.felix/javax.servlet</provision>
            <provision>mvn:org.apache.felix/org.apache.felix.http.jetty@nostart</provision>
          </provision>
        </configuration>
      </plugin>
    </plugins>
  </build>  
</project>
