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

-->
<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>
    <parent>
        <groupId>org.apache</groupId>
        <artifactId>apache</artifactId>
        <version>33</version>
    </parent>
    <groupId>org.apache.tsfile</groupId>
    <artifactId>tsfile-parent</artifactId>
    <version>2.4.0</version>
    <packaging>pom</packaging>
    <name>Apache TsFile Project Parent POM</name>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <maven.compiler.release>17</maven.compiler.release>
        <argLine/>
        <spotless.skip>false</spotless.skip>
        <cmake.version>3.30.2-b1</cmake.version>
        <spotless.version>2.44.3</spotless.version>
        <google.java.format.version>1.28.0</google.java.format.version>
        <clang.format.version>17.0.6</clang.format.version>
        <black.version>26.3.1</black.version>
        <drill.freemarker.maven.plugin.version>1.21.1</drill.freemarker.maven.plugin.version>
        <groovy.version>4.0.22</groovy.version>
        <!--
            C++ Windows toolchain selection. By default Windows builds use the
            MinGW generator (see the .os-windows-* profiles). Passing
            -Dcpp.toolchain=msvc activates the cpp-msvc profile, which switches
            the CMake generator to Visual Studio. The msvc.generator value may
            be overridden, e.g. -Dmsvc.generator="Visual Studio 15 2017", to
            match the Visual Studio version installed on the build machine.

            msvc.toolset optionally pins the MSVC toolset, e.g. -Dmsvc.toolset=v141
            builds with the Visual Studio 2017 compiler while still using a
            Visual Studio 2022 generator (useful on machines / CI runners that
            only ship VS 2022 but need to verify VS 2017 compatibility).
            When unset, CMake uses the generator's default toolset.
        -->
        <msvc.generator>Visual Studio 17 2022</msvc.generator>
        <msvc.platform>x64</msvc.platform>
    </properties>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>3.8.0</version>
                    <configuration>
                        <!--
                            This will suppress the generation of a hidden timestamp at the top of each generated html page
                            and hopefully let the site generation nod to too big updates every time.
                        -->
                        <notimestamp>true</notimestamp>
                        <!--Don't fail the build, just because there were issues in the JavaDoc generation.-->
                        <failOnError>false</failOnError>
                    </configuration>
                </plugin>
                <!--
                    We need to increase the memory available to tests as we were
                    getting out-of-memory errors when building on Windows machines.
                -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.5.0</version>
                    <configuration>
                        <argLine>${argLine}</argLine>
                    </configuration>
                </plugin>
                <!--
                    Plugin for doing the code analysis.
                -->
                <plugin>
                    <groupId>org.sonarsource.scanner.maven</groupId>
                    <artifactId>sonar-maven-plugin</artifactId>
                    <version>5.0.0.4389</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.rat</groupId>
                    <artifactId>apache-rat-plugin</artifactId>
                    <version>0.16.1</version>
                    <configuration>
                        <consoleOutput>true</consoleOutput>
                        <excludes>
                            <!-- Git related files -->
                            <exclude>**/.git/**</exclude>
                            <exclude>**/.mvn/**</exclude>
                            <exclude>**/.gitignore</exclude>
                            <!-- Maven related files -->
                            <exclude>**/target/**</exclude>
                            <!-- Eclipse related files -->
                            <exclude>**/.project</exclude>
                            <exclude>**/.settings/**</exclude>
                            <exclude>**/.classpath</exclude>
                            <!-- IntelliJ related files -->
                            <exclude>**/.idea/**</exclude>
                            <exclude>**/*.iml</exclude>
                            <!-- Runtime log -->
                            <exclude>**/*.log</exclude>
                            <!-- Exclude CVS files -->
                            <exclude>**/*.cvs</exclude>
                            <!-- generated by Github -->
                            <exclude>**/.github/**</exclude>
                            <!-- figures -->
                            <exclude>**/.eps</exclude>
                            <exclude>**/.png</exclude>
                            <exclude>**/.jpg</exclude>
                            <exclude>**/.jpeg</exclude>
                            <!--Generated by Apache Release -->
                            <exclude>local-snapshots-dir/**</exclude>
                            <!-- visualization plans -->
                            <exclude>**/*.plan</exclude>
                            <exclude>**/NOTICE-binary</exclude>
                            <exclude>**/LICENSE-binary</exclude>
                            <!-- json does not support comments-->
                            <exclude>**/*.json</exclude>
                            <!-- Exclude website build files-->
                            <exclude>docs/src/zh/README.md</exclude>
                            <exclude>docs/src/README.md</exclude>
                            <exclude>docs/pnpm-lock.yaml</exclude>
                            <!-- generated by make tool-->
                            <exclude>**/cmake/**</exclude>
                            <exclude>**/build/**</exclude>
                            <exclude>**/.clang-format</exclude>
                            <!-- generated by cython-->
                            <exclude>**/tsfile/**.cpp</exclude>
                            <exclude>**/tsfile/**.h</exclude>
                            <exclude>**/venv/**</exclude>
                            <!-- generated by wheel-->
                            <exclude>**/tsfile.egg-info/**</exclude>
                            <!-- Exclude third_party-->
                            <exclude>**/third_party/**</exclude>
                            <exclude>**/.python-version</exclude>
                            <exclude>**/**venv-py**/**</exclude>
                            <exclude>AGENTS.md</exclude>
                            <exclude>cpp/AGENTS.md</exclude>
                            <exclude>python/AGENTS.md</exclude>
                        </excludes>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.eluder.coveralls</groupId>
                    <artifactId>coveralls-maven-plugin</artifactId>
                    <version>4.3.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <version>3.5.0</version>
                </plugin>
                <plugin>
                    <groupId>net.revelc.code.formatter</groupId>
                    <artifactId>formatter-maven-plugin</artifactId>
                    <version>2.24.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <version>3.4.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <!--DO NOT UPDATE to 3.3.x, the release will fail-->
                    <version>3.2.1</version>
                </plugin>
                <plugin>
                    <groupId>au.com.acegi</groupId>
                    <artifactId>xml-format-maven-plugin</artifactId>
                    <version>4.0.1</version>
                </plugin>
                <plugin>
                    <groupId>org.antlr</groupId>
                    <artifactId>antlr4-maven-plugin</artifactId>
                    <version>4.13.2</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>3.6.0</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>3.5.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>maven-bundle-plugin</artifactId>
                    <version>5.1.9</version>
                </plugin>
                <plugin>
                    <groupId>com.googlecode.cmake-maven-project</groupId>
                    <artifactId>cmake-maven-plugin</artifactId>
                    <version>${cmake.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.diffplug.spotless</groupId>
                <artifactId>spotless-maven-plugin</artifactId>
                <version>${spotless.version}</version>
                <configuration>
                    <skip>${spotless.skip}</skip>
                </configuration>
            </plugin>
            <!--
                Strange things usually happen if you run with a too low Java version.
                This plugin not only checks the minimum java version of 17, but also
                checks all dependencies (and transitive dependencies) for reported CVEs.
            -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.sonatype.ossindex.maven</groupId>
                        <artifactId>ossindex-maven-enforcer-rules</artifactId>
                        <version>3.2.0</version>
                    </dependency>
                    <dependency>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>extra-enforcer-rules</artifactId>
                        <version>1.8.0</version>
                    </dependency>
                    <dependency>
                        <groupId>org.apache.maven.shared</groupId>
                        <artifactId>maven-dependency-tree</artifactId>
                        <version>3.2.1</version>
                    </dependency>
                </dependencies>
                <executions>
                    <!-- Ensure we're not mixing dependency versions -->
                    <execution>
                        <id>enforce-version-convergence</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <phase>validate</phase>
                        <configuration>
                            <rules>
                                <dependencyConvergence/>
                            </rules>
                        </configuration>
                    </execution>
                    <!--
                        Fails the build if classes are included from multiple
                        artifacts and these are not identical.
                    -->
                    <execution>
                        <id>enforce-ban-duplicate-classes</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <banDuplicateClasses>
                                    <scopes>
                                        <scope>compile</scope>
                                        <scope>provided</scope>
                                    </scopes>
                                    <findAllDuplicates>true</findAllDuplicates>
                                    <ignoreWhenIdentical>true</ignoreWhenIdentical>
                                </banDuplicateClasses>
                            </rules>
                            <fail>true</fail>
                        </configuration>
                    </execution>
                    <!-- Ensure dependencies are compatible with Java 17 -->
                    <execution>
                        <id>enforce-java17-compatibility</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <enforceBytecodeVersion>
                                    <maxJdkVersion>17</maxJdkVersion>
                                </enforceBytecodeVersion>
                            </rules>
                        </configuration>
                    </execution>
                    <!-- Make sure no dependencies are used for which known vulnerabilities exist. -->
                    <execution>
                        <id>vulnerability-checks</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <phase>validate</phase>
                        <configuration>
                            <!-- Just generate warnings for now -->
                            <fail>true</fail>
                            <rules>
                                <requireJavaVersion>
                                    <version>[17,)</version>
                                </requireJavaVersion>
                                <banVulnerable implementation="org.sonatype.ossindex.maven.enforcer.BanVulnerableDependencies">
                                    <excludeCoordinates>
                                        <!-- TODO: For this CVE no fix exists yet (Keep an eye on it) -->
                                        <exclude>
                                            <groupId>io.netty</groupId>
                                            <artifactId>netty-handler</artifactId>
                                            <version>4.1.97.Final</version>
                                        </exclude>
                                        <!--
                                            CVE-2016-1000027 seems to effect the HTTP Invoker, which we are not using.
                                            These are marked deprecated anyway and are removed in Spring 6.x. Unfortunately,
                                            we are still stuck at 5.x due to the javax-namespace issues.
                                        -->
                                        <exclude>
                                            <groupId>org.springframework</groupId>
                                            <artifactId>spring-web</artifactId>
                                            <version>5.3.30</version>
                                        </exclude>
                                        <!--
                                            For this CVE no fix exists and will probably never exist
                                            (We should discuss dropping 2.11 anyway)
                                        -->
                                        <exclude>
                                            <groupId>org.apache.spark</groupId>
                                            <artifactId>spark-core_2.11</artifactId>
                                            <version>2.4.8</version>
                                        </exclude>
                                        <!--
                                            We can't update to a fixed version as we're stuck with this version
                                            as it was the last to support the javax namespace.
                                        -->
                                        <exclude>
                                            <groupId>org.glassfish.jersey.core</groupId>
                                            <artifactId>jersey-common</artifactId>
                                            <version>2.4.8</version>
                                        </exclude>
                                        <!--
                                            TODO: For this CVE no fix exists yet, however we should keep an eye on this:
                                            https://docs.google.com/presentation/d/1W5KU7ffh4dheR8iD54ulABImi6byAhSI-OhEKw2adRo/edit#slide=id.gaf11915f86_0_0
                                        -->
                                        <exclude>
                                            <groupId>io.atomix</groupId>
                                            <artifactId>atomix-raft</artifactId>
                                            <version>3.1.12</version>
                                        </exclude>
                                        <exclude>
                                            <groupId>ch.netty</groupId>
                                            <artifactId>netty-handler</artifactId>
                                            <version>4.1.97.Final</version>
                                        </exclude>
                                    </excludeCoordinates>
                                </banVulnerable>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!--
                Even if Maven transitively pulls in dependencies, relying on these can
                quite often cause hard to find problems. So it's a good practice to make
                sure everything directly required is also directly added as a dependency.
                On the other side adding unused dependency only over-complicates the
                dependency graph, so the maven-dependency-plugin checks we depend on
                what we need and only that and that runtime dependencies are correctly
                imported with runtime scope.
            -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>check-dependencies</id>
                        <goals>
                            <goal>analyze-only</goal>
                        </goals>
                        <phase>verify</phase>
                        <configuration>
                            <failOnWarning>true</failOnWarning>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>net.revelc.code.formatter</groupId>
                <artifactId>formatter-maven-plugin</artifactId>
            </plugin>
            <!--for code style check -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <configuration>
                    <configLocation>checkstyle.xml</configLocation>
                    <includeTestSourceDirectory>true</includeTestSourceDirectory>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>com.puppycrawl.tools</groupId>
                        <artifactId>checkstyle</artifactId>
                        <version>9.3</version>
                        <!-- Starting with version 10, checkstyle requires Java 11 -->
                        <!--version>10.12.3</version-->
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>validate</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <phase>validate</phase>
                        <configuration>
                            <outputFile>target/checkstyle-report.xml</outputFile>
                            <configLocation>checkstyle.xml</configLocation>
                            <propertyExpansion>baseDir=${project.basedir}</propertyExpansion>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!--
                Check if all files contain Apache headers in them.
                Ignore this plugin, we use license-maven-plugin to check apache header.
            -->
            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <executions>
                    <execution>
                        <id>license-check</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <phase>verify</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>au.com.acegi</groupId>
                <artifactId>xml-format-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>xml-format</id>
                        <goals>
                            <goal>xml-format</goal>
                        </goals>
                        <phase>compile</phase>
                        <configuration>
                            <!-- configure your formatting preferences here (see link below) -->
                            <indentSize>4</indentSize>
                            <excludes>
                                <exclude>**/target/**</exclude>
                                <exclude>python/.python-version</exclude>
                                <exclude>**/.python-version</exclude>
                            </excludes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!--
                Generate the legally required text files in the jars
            -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-remote-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>process-resource-bundles</id>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <resourceBundles>
                                <!-- Will generate META-INF/{DEPENDENCIES,LICENSE,NOTICE} -->
                                <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
                            </resourceBundles>
                            <!-- Content in this directory will be appended to generated resources -->
                            <appendedResourcesDirectory>${basedir}/src/remote-resources</appendedResourcesDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- Separates the unit tests from the integration tests. -->
            <!-- TODO: Integration-Tests should be executed by the failsafe plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <executions>
                    <execution>
                        <id>unit-tests</id>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <phase>test</phase>
                        <configuration>
                            <includes>
                                <!-- Include unit tests within integration-test phase. -->
                                <include>src/test/**/*Test.java</include>
                            </includes>
                            <excludes>
                                <!-- Exclude integration tests within (unit) test phase. -->
                                <exclude>src/test/**/*IT.java</exclude>
                            </excludes>
                        </configuration>
                    </execution>
                    <execution>
                        <id>integration-tests</id>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <phase>integration-test</phase>
                        <configuration>
                            <includes>
                                <!-- Include integration tests within integration-test phase. -->
                                <include>src/test/**/*IT.java</include>
                            </includes>
                            <excludes>
                                <!-- Exclude unit tests within (unit) test phase. -->
                                <exclude>src/test/**/*Test.java</exclude>
                            </excludes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- Also package the sources as jar -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>create-source-package</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <phase>package</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.drill.tools</groupId>
                <artifactId>drill-fmpp-maven-plugin</artifactId>
                <version>${drill.freemarker.maven.plugin.version}</version>
            </plugin>
        </plugins>
    </build>
    <licenses>
        <license>
            <name>The Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>
    <mailingLists>
        <mailingList>
            <name>Apache TsFile Developer List</name>
            <subscribe>mailto:dev-subscribe@tsfile.apache.org</subscribe>
            <unsubscribe>mailto:dev-unsubscribe@tsfile.apache.org</unsubscribe>
            <post>mailto:dev@tsfile.apache.org</post>
            <archive>https://mail-archives.apache.org/mod_mbox/tsfile-dev/</archive>
        </mailingList>
        <mailingList>
            <name>Apache TsFile Commits List</name>
            <subscribe>mailto:commit-subscribe@tsfile.apache.org</subscribe>
            <unsubscribe>mailto:commits-unsubscribe@tsfile.apache.org</unsubscribe>
            <post>mailto:commits@tsfile.apache.org</post>
            <archive>https://mail-archives.apache.org/mod_mbox/tsfile-commits/</archive>
        </mailingList>
    </mailingLists>
    <scm>
        <connection>scm:git:ssh://git@github.com/apache/tsfile.git</connection>
        <developerConnection>scm:git:ssh://git@github.com/apache/tsfile.git</developerConnection>
        <url>ssh://git@github.com:apache/tsfile.git</url>
        <tag>v2.4.0</tag>
    </scm>
    <issueManagement>
        <system>GitHub Issues</system>
        <url>https://github.com/apache/tsfile/issues</url>
    </issueManagement>
    <profiles>
        <!-- Build the java version of TsFile -->
        <profile>
            <id>with-java</id>
            <modules>
                <module>java</module>
            </modules>
        </profile>
        <!-- Build the c++ version of TsFile -->
        <profile>
            <id>with-cpp</id>
            <modules>
                <module>cpp</module>
            </modules>
        </profile>
        <!-- Build the python version of TsFile -->
        <profile>
            <id>with-python</id>
            <modules>
                <module>cpp</module>
                <module>python</module>
            </modules>
        </profile>
        <profile>
            <id>.java-17-and-above</id>
            <activation>
                <jdk>[17,)</jdk>
            </activation>
            <properties>
                <!--
                    Add argLine for Java 17 and above, due to
                    [JEP 260: Encapsulate Most Internal APIs],
                    [JEP 396: Strongly Encapsulate JDK Internals by Default],
                    [JEP 403: Strongly Encapsulate JDK Internals]
                -->
                <argLine><![CDATA[
                        --add-opens=java.base/java.lang=ALL-UNNAMED
                        --add-opens=java.base/java.util=ALL-UNNAMED
                        --add-opens=java.base/java.nio=ALL-UNNAMED
                        --add-opens=java.base/java.io=ALL-UNNAMED
                        --add-opens=java.base/java.net=ALL-UNNAMED
                        --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
                        --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
                        --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
                        --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
                        --add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
                        --add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
                      ]]></argLine>
            </properties>
        </profile>
        <!-- Profile for linux x86_64 (mainly Intel Processors) (Self-Enabling) -->
        <profile>
            <id>.os-linux-x86_64</id>
            <activation>
                <os>
                    <family>unix</family>
                    <name>Linux</name>
                    <arch>x86_64</arch>
                </os>
            </activation>
            <properties>
                <os.suffix>linux</os.suffix>
                <os.classifier>linux-x86_64</os.classifier>
                <cmake.generator>Unix Makefiles</cmake.generator>
                <python.venv.bin>venv/bin/</python.venv.bin>
                <python.exe.bin>python3</python.exe.bin>
            </properties>
        </profile>
        <!-- Profile for linux amd64 (mainly AMD Processors) (Self-Enabling) -->
        <profile>
            <id>.os-linux-amd64</id>
            <activation>
                <os>
                    <family>unix</family>
                    <name>Linux</name>
                    <arch>amd64</arch>
                </os>
            </activation>
            <properties>
                <os.suffix>linux</os.suffix>
                <os.classifier>linux-amd64</os.classifier>
                <cmake.generator>Unix Makefiles</cmake.generator>
                <python.venv.bin>venv/bin/</python.venv.bin>
                <python.exe.bin>python3</python.exe.bin>
            </properties>
        </profile>
        <!-- Profile for linux aarch64 (mainly ARM64 Processors) (Self-Enabling) -->
        <profile>
            <id>.os-linux-aarch64</id>
            <activation>
                <os>
                    <family>unix</family>
                    <name>Linux</name>
                    <arch>aarch64</arch>
                </os>
            </activation>
            <properties>
                <os.suffix>linux</os.suffix>
                <os.classifier>linux-${os.arch}</os.classifier>
                <cmake.generator>Unix Makefiles</cmake.generator>
                <python.venv.bin>venv/bin/</python.venv.bin>
                <python.exe.bin>python3</python.exe.bin>
            </properties>
        </profile>
        <!-- Profile for mac x86_64 (mainly Intel Processors) (Self-Enabling) -->
        <profile>
            <id>.os-mac-x86_64</id>
            <activation>
                <os>
                    <family>mac</family>
                    <arch>x86_64</arch>
                </os>
            </activation>
            <properties>
                <os.suffix>mac</os.suffix>
                <os.classifier>mac-x86_64</os.classifier>
                <cmake.generator>Unix Makefiles</cmake.generator>
                <python.venv.bin>venv/bin/</python.venv.bin>
                <python.exe.bin>python3</python.exe.bin>
            </properties>
        </profile>
        <!-- Profile for mac aarch64 (mainly new Mac Processors) (Self-Enabling) -->
        <profile>
            <id>.os-mac-aarch64</id>
            <activation>
                <os>
                    <family>mac</family>
                    <arch>aarch64</arch>
                </os>
            </activation>
            <properties>
                <os.suffix>mac</os.suffix>
                <os.classifier>mac-aarch64</os.classifier>
                <cmake.generator>Unix Makefiles</cmake.generator>
                <python.venv.bin>venv/bin/</python.venv.bin>
                <python.exe.bin>python3</python.exe.bin>
            </properties>
        </profile>
        <!-- profile for windows x86_64 (mainly Intel Processors) (Self-Enabling) -->
        <profile>
            <id>.os-windows-x86_64</id>
            <activation>
                <os>
                    <family>windows</family>
                    <arch>x86_64</arch>
                </os>
            </activation>
            <properties>
                <os.suffix>win</os.suffix>
                <os.classifier>windows-x86_64</os.classifier>
                <cmake.generator>MinGW Makefiles</cmake.generator>
                <python.venv.bin>venv/Scripts/</python.venv.bin>
                <python.exe.bin>python</python.exe.bin>
            </properties>
        </profile>
        <!-- profile for windows amd64 (mainly AMD Processors) (Self-Enabling) -->
        <profile>
            <id>.os-windows-amd64</id>
            <activation>
                <os>
                    <family>windows</family>
                    <arch>amd64</arch>
                </os>
            </activation>
            <properties>
                <os.suffix>win</os.suffix>
                <os.classifier>windows-amd64</os.classifier>
                <cmake.generator>MinGW Makefiles</cmake.generator>
                <python.venv.bin>venv/Scripts/</python.venv.bin>
                <python.exe.bin>python</python.exe.bin>
            </properties>
        </profile>
        <!-- profile for windows aarch64 (mainly VM on newer Mac) (Self-Enabling) -->
        <profile>
            <id>.os-windows-aarch64</id>
            <activation>
                <os>
                    <family>windows</family>
                    <arch>aarch64</arch>
                </os>
            </activation>
            <properties>
                <os.suffix>win</os.suffix>
                <os.classifier>windows-aarch64</os.classifier>
                <cmake.generator>MinGW Makefiles</cmake.generator>
                <python.venv.bin>venv/Scripts/</python.venv.bin>
                <python.exe.bin>python</python.exe.bin>
            </properties>
        </profile>
        <!--
            C++ Windows toolchain: MinGW (explicit form of the default).
            Activate with -Dcpp.toolchain=mingw or -P cpp-mingw. This keeps the
            MinGW Makefiles generator that the .os-windows-* profiles already
            select, and exists mainly as the explicit counterpart to cpp-msvc.
        -->
        <profile>
            <id>cpp-mingw</id>
            <activation>
                <property>
                    <name>cpp.toolchain</name>
                    <value>mingw</value>
                </property>
            </activation>
            <properties>
                <cmake.generator>MinGW Makefiles</cmake.generator>
            </properties>
        </profile>
        <!--
            C++ Windows toolchain: MSVC (Visual Studio generator).
            Activate with -Dcpp.toolchain=msvc or -P cpp-msvc. Declared after
            the .os-windows-* profiles so its cmake.generator value wins.
            The Visual Studio generator is multi-config, so cpp/pom.xml passes
            <config>${build.type}</config> to the compile and test goals.
        -->
        <profile>
            <id>cpp-msvc</id>
            <activation>
                <property>
                    <name>cpp.toolchain</name>
                    <value>msvc</value>
                </property>
            </activation>
            <properties>
                <cmake.generator>${msvc.generator}</cmake.generator>
            </properties>
        </profile>
        <!-- Little helper profile that will disable running the cmake tests when the maven tests are being skipped -->
        <profile>
            <id>.skipTests</id>
            <activation>
                <property>
                    <name>skipTests</name>
                </property>
            </activation>
            <properties>
                <ctest.skip.tests>true</ctest.skip.tests>
            </properties>
        </profile>
        <!-- Make sure the source assembly has the right name -->
        <profile>
            <id>apache-release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>source-release-assembly</id>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <phase>package</phase>
                                <!--
                                  heads up: combine.self in the following is highlighted
                                  as an error in Eclipse's xml editor view.
                                  Just ignore that.
                                  See  https://issues.apache.org/jira/browse/MNG-5454  sigh.
                                -->
                                <configuration combine.self="append">
                                    <finalName>apache-tsfile-${project.version}</finalName>
                                    <archive>
                                        <manifest>
                                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                        </manifest>
                                    </archive>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <!--
                        Generate an SBOM for the project
                    -->
                    <plugin>
                        <groupId>org.cyclonedx</groupId>
                        <artifactId>cyclonedx-maven-plugin</artifactId>
                        <!-- Only run this in the root module of the project -->
                        <inherited>false</inherited>
                        <configuration>
                            <outputName>apache-${project.artifactId}-${project.version}-sbom</outputName>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>makeAggregateBom</goal>
                                </goals>
                                <phase>package</phase>
                            </execution>
                        </executions>
                    </plugin>
                    <!--
                        Create SHA512 checksum files for the release artifacts.
                    -->
                    <plugin>
                        <groupId>net.nicoulaj.maven.plugins</groupId>
                        <artifactId>checksum-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>sign-source-release</id>
                                <goals>
                                    <goal>files</goal>
                                </goals>
                                <phase>package</phase>
                                <configuration>
                                    <algorithms>
                                        <algorithm>SHA-512</algorithm>
                                    </algorithms>
                                    <fileSets>
                                        <fileSet>
                                            <directory>${project.build.directory}</directory>
                                            <includes>
                                                <include>apache-tsfile-${project.version}-source-release.zip</include>
                                            </includes>
                                        </fileSet>
                                    </fileSets>
                                    <failIfNoFiles>false</failIfNoFiles>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>with-code-coverage</id>
            <build>
                <plugins>
                    <!--
            Jacoco is a code coverage analysis plugin when tests run.
            (not a static code analysis tool)
          -->
                    <plugin>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                        <version>0.8.12</version>
                        <configuration>
                            <rules>
                                <rule implementation="org.jacoco.maven.RuleConfiguration">
                                    <element>BUNDLE</element>
                                    <limits>　　
                                        <!-- Cover methods >=30%. (the plugin does not support
                                        ignore getter and setter and toString etc..) -->
                                        <limit implementation="org.jacoco.report.check.Limit">
                                            <counter>METHOD</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>0.00</minimum>
                                        </limit>
                                        <!-- if-else, switch etc.. >=70% -->
                                        <limit implementation="org.jacoco.report.check.Limit">
                                            <counter>BRANCH</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>0.00</minimum>
                                        </limit>
                                        <!-- class files >=95% -->
                                        <limit implementation="org.jacoco.report.check.Limit">
                                            <counter>CLASS</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>0.00</minimum>
                                        </limit>
                                    </limits>
                                </rule>
                            </rules>
                        </configuration>
                        <executions>
                            <!-- For UT-->
                            <execution>
                                <id>prepare-ut</id>
                                <goals>
                                    <goal>prepare-agent</goal>
                                </goals>
                                <configuration>
                                    <destFile>${project.build.directory}/${project.build.finalName}-jacoco-unit-tests.exec</destFile>
                                    <propertyName>surefire.jacoco.args</propertyName>
                                </configuration>
                            </execution>
                            <!-- attached to Maven test phase -->
                            <execution>
                                <id>ut-report</id>
                                <goals>
                                    <goal>report</goal>
                                    <goal>check</goal>
                                </goals>
                                <phase>test</phase>
                                <configuration>
                                    <dataFile>${project.build.directory}/${project.build.finalName}-jacoco-unit-tests.exec</dataFile>
                                    <outputDirectory>${project.build.directory}/jacoco-unit-reports</outputDirectory>
                                </configuration>
                            </execution>
                            <!-- For IT-->
                            <execution>
                                <id>before-integration-test-execution</id>
                                <goals>
                                    <goal>prepare-agent</goal>
                                </goals>
                                <phase>pre-integration-test</phase>
                                <configuration>
                                    <destFile>${project.build.directory}/${project.build.finalName}-jacoco-integration-tests.exec</destFile>
                                    <propertyName>failsafe.jacoco.args</propertyName>
                                </configuration>
                            </execution>
                            <execution>
                                <id>after-integration-test-execution</id>
                                <goals>
                                    <goal>report</goal>
                                    <goal>check</goal>
                                </goals>
                                <phase>integration-test</phase>
                                <configuration>
                                    <dataFile>${project.build.directory}/${project.build.finalName}-jacoco-integration-tests.exec</dataFile>
                                    <outputDirectory>${project.build.directory}/jacoco-integration-reports</outputDirectory>
                                </configuration>
                            </execution>
                            <execution>
                                <id>merge-unit-and-integration</id>
                                <goals>
                                    <goal>merge</goal>
                                </goals>
                                <phase>post-integration-test</phase>
                                <configuration>
                                    <fileSets>
                                        <fileSet>
                                            <directory>${project.build.directory}/</directory>
                                            <includes>
                                                <include>*.exec</include>
                                            </includes>
                                        </fileSet>
                                    </fileSets>
                                    <destFile>${project.build.directory}/${project.build.finalName}-merged.exec</destFile>
                                </configuration>
                            </execution>
                            <execution>
                                <id>create-merged-report</id>
                                <goals>
                                    <goal>report</goal>
                                    <goal>check</goal>
                                </goals>
                                <phase>post-integration-test</phase>
                                <configuration>
                                    <dataFile>${project.build.directory}/${project.build.finalName}-merged.exec</dataFile>
                                    <outputDirectory>${project.build.directory}/jacoco-merged-reports</outputDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- overwrite argLine-->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <argLine>${argLine} @{surefire.jacoco.args}</argLine>
                        </configuration>
                    </plugin>
                    <!-- for IT-->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <argLine>${argLine} @{failsafe.jacoco.args} -Xmx1024m</argLine>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>integration-test</goal>
                                    <goal>verify</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>enforce</id>
            <properties>
                <enforcer.skip>false</enforcer.skip>
            </properties>
        </profile>
        <!--
            This profile is intended to help when having problems with Maven.
            When enabled, it automatically generates an "effective.pom" in the target directory.
            This version is the fully expanded version where all inherited configuration is in
            place and all variables are resolved and profile configuration is included.
        -->
        <profile>
            <id>debug-pom</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-help-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>generate-effective-pom</id>
                                <phase>validate</phase>
                                <goals>
                                    <goal>effective-pom</goal>
                                </goals>
                                <configuration>
                                    <output>${project.build.directory}/effective.pom</output>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
