<!--
 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.2</version>
    <relativePath>../pom/pom.xml</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <packaging>pom</packaging>
  <name>Apache Felix UPnP: Build</name>
  <artifactId>upnp.build</artifactId>
  <version>0.9.0-SNAPSHOT</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>
</project>
