<!--

    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>2.11.0-SNAPSHOT</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>
