<!--
 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 Examples: Build</name>
  <artifactId>upnp.examples.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>binarylight</module>
          <module>clock</module>
          <module>tv</module>
      </modules>
    </profile>
    <profile>
      <id>default</id>
      <activation>
        <property>
          <name>!packaging</name>
        </property>
      </activation>
      <modules>
          <module>binarylight</module>
          <module>clock</module>
          <module>tv</module>
      </modules>
    </profile>
  </profiles>
</project>
