<!--

    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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <packaging>pom</packaging>
  <parent>
    <groupId>org.apache.pulsar</groupId>
    <artifactId>pulsar</artifactId>
    <version>3.0.2</version>
  </parent>

  <artifactId>pulsar-functions</artifactId>
  <name>Pulsar Functions :: Parent</name>

  <profiles>
    <profile>
      <id>main</id>
      <activation>
        <property>
          <name>disableFunctionsMainProfile</name>
          <!-- always active unless true is passed as a value -->
          <value>!true</value>
        </property>
      </activation>
        <modules>
          <module>proto</module>
          <module>api-java</module>
          <module>java-examples</module>
          <module>java-examples-builtin</module>
          <module>utils</module>
          <module>instance</module>
          <module>runtime</module>
          <module>runtime-all</module>
          <module>worker</module>
          <module>secrets</module>
          <module>localrun</module>
          <module>localrun-shaded</module>
        </modules>
    </profile>

  <profile>
    <id>core-modules</id>
      <modules>
        <module>proto</module>
        <module>api-java</module>
        <module>java-examples</module>
        <module>java-examples-builtin</module>
        <module>utils</module>
        <module>instance</module>
        <module>runtime</module>
        <module>runtime-all</module>
        <module>worker</module>
        <module>secrets</module>
        <module>localrun</module>
      </modules>
  </profile>

  </profiles>

</project>
