<?xml version="1.0" encoding="UTF-8"?>

<!--
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.
-->

<profilesXml>
  <activeProfiles>
    <activeProfile>profile-default</activeProfile>
  </activeProfiles>
  <profiles>
    <!-- check activation by default -->
    <profile>
      <id>profile-default</id>
      <properties>
        <defaultProperty>DEFAULT-ACTIVATION</defaultProperty>
      </properties>
    </profile>

    <!-- check activation by OS family -->
    <profile>
      <id>profile-os-a</id>
      <activation>
        <os>
          <family>winDOWS</family>
        </os>
      </activation>
      <properties>
        <osFamilyProperty>OS-FAMILY-ACTIVATION</osFamilyProperty>
      </properties>
    </profile>
    <profile>
      <id>profile-os-b</id>
      <activation>
        <os>
          <family>unIX</family>
        </os>
      </activation>
      <properties>
        <osFamilyProperty>OS-FAMILY-ACTIVATION</osFamilyProperty>
      </properties>
    </profile>
    <profile>
      <id>profile-os-c</id>
      <activation>
        <os>
          <family>mAC</family>
        </os>
      </activation>
      <properties>
        <osFamilyProperty>OS-FAMILY-ACTIVATION</osFamilyProperty>
      </properties>
    </profile>

    <!-- check activation by JDK version -->
    <profile>
      <id>profile-jdk</id>
      <activation>
        <jdk>!1.0</jdk>
      </activation>
      <properties>
        <jdkProperty>JDK-ACTIVATION</jdkProperty>
      </properties>
    </profile>

    <!-- check non-activation by JDK version -->
    <profile>
      <id>profile-jdk-inactive</id>
      <activation>
        <jdk>1.0.0.0</jdk>
      </activation>
      <properties>
        <jdkPropertyMissing>JDK-ACTIVATION</jdkPropertyMissing>
      </properties>
    </profile>

    <!-- check activation by ordinary system property -->
    <profile>
      <id>profile-sys-prop</id>
      <activation>
        <property>
          <name>maven.profile.activator</name>
          <value>test</value>
        </property>
      </activation>
      <properties>
        <sysProperty>SYS-PROP-ACTIVATION</sysProperty>
      </properties>
    </profile>

    <!-- check non-activation by absent system property -->
    <profile>
      <id>profile-sys-prop-inactive</id>
      <activation>
        <property>
          <name>maven.profile.inactive</name>
        </property>
      </activation>
      <properties>
        <sysPropertyMissing>SYS-PROP-ACTIVATION</sysPropertyMissing>
      </properties>
    </profile>

    <!-- check activation by environment variable -->
    <profile>
      <id>profile-env-prop</id>
      <activation>
        <property>
          <name>env.MAVEN_PROFILE</name>
          <value>test</value>
        </property>
      </activation>
      <properties>
        <envProperty>ENV-PROP-ACTIVATION</envProperty>
      </properties>
    </profile>

    <!-- check non-activation by environment variable -->
    <profile>
      <id>profile-env-prop-inactive</id>
      <activation>
        <property>
          <name>env.MAVEN_CORE_IT</name>
          <value>missing</value>
        </property>
      </activation>
      <properties>
        <envPropertyMissing>ENV-PROP-ACTIVATION</envPropertyMissing>
      </properties>
    </profile>

    <!-- check activation by missing file -->
    <profile>
      <id>profile-file-missing</id>
      <activation>
        <file>
          <missing>a-funky-file-name-that-most-likely-does-not-exist-on-an-ordinary-box</missing>
        </file>
      </activation>
      <properties>
        <fileProperty>MISSING-FILE-ACTIVATION</fileProperty>
      </properties>
    </profile>

    <!-- check non-activation by missing file -->
    <profile>
      <id>profile-file-missing-inactive</id>
      <activation>
        <file>
          <exists>a-funky-file-name-that-most-likely-does-not-exist-on-an-ordinary-box</exists>
        </file>
      </activation>
      <properties>
        <filePropertyMissing>MISSING-FILE-ACTIVATION</filePropertyMissing>
      </properties>
    </profile>
  </profiles>
</profilesXml>
