<?xml version="1.0" encoding="UTF-8"?>
<!--
 * SPDX-FileCopyrightText: Copyright (c) 2016-2026 Objectionary.com
 * SPDX-License-Identifier: MIT
-->
<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.eolang</groupId>
    <artifactId>eo-parent</artifactId>
    <version>0.61.1</version>
  </parent>
  <artifactId>eo-runtime</artifactId>
  <packaging>jar</packaging>
  <name>eo-runtime</name>
  <description>EO runtime library</description>
  <properties>
    <!--  This is required for later correct replacement of argline  -->
    <argLine/>
  </properties>
  <dependencies>
    <dependency>
      <!--
      This dependency is required by the javadoc plugin. In the eo-runtime,
      we use classes from this JAR, but can't have it as a normal dependency.
      That's why the scope is "provided" here: it won't become a transitive
      one, but at the same time will satisfy javadoc plugin.
      -->
      <groupId>net.java.dev.jna</groupId>
      <artifactId>jna</artifactId>
      <version>5.18.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jul-to-slf4j</artifactId>
      <version>2.0.17</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>2.0.17</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.5.34</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eolang</groupId>
      <artifactId>xax</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.yegor256</groupId>
      <artifactId>jaxec</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.yegor256</groupId>
      <artifactId>jhome</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.jcabi</groupId>
      <artifactId>jcabi-log</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.jcabi</groupId>
      <artifactId>jcabi-xml</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.jcabi</groupId>
      <artifactId>jcabi-manifests</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.cactoos</groupId>
      <artifactId>cactoos</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.llorllale</groupId>
      <artifactId>cactoos-matchers</artifactId>
      <version>0.25</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-params</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit-pioneer</groupId>
      <artifactId>junit-pioneer</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.yegor256</groupId>
      <artifactId>jping</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>net.sf.saxon</groupId>
      <artifactId>Saxon-HE</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.yegor256</groupId>
      <artifactId>farea</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.yegor256</groupId>
      <artifactId>mktmp</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.yegor256</groupId>
      <artifactId>together</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.yegor256</groupId>
      <artifactId>maybeslow</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eolang</groupId>
      <artifactId>jucs</artifactId>
      <!-- version from parent POM -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.github.artsok</groupId>
      <artifactId>rerunner-jupiter</artifactId>
      <version>2.1.6</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <skipTests>${skipUTs}</skipTests>
          <runOrder>random</runOrder>
          <argLine>
            @{argLine} -Xmx${heap-size} -Xss${stack-size} -Duser.language=ru -Duser.region=RU
          </argLine>
          <systemPropertyVariables>
            <eo.version>${project.version}</eo.version>
            <java.util.logging.config.file>
              ${project.basedir}/src/test/resources/jul.properties
            </java.util.logging.config.file>
          </systemPropertyVariables>
          <!-- Default surefire plugin corrupts native stdout. It means the text that was
          printed in native method will not be printed in 'mvn clean install'. This configuration
           switches surefire communication channel from default to TCP/IP and solves the bug.
           More detailed: https://stackoverflow.com/questions/55272870/surefire-maven-plugin-corrupted-stdout-by-directly-writing-to-native-stream-in
           and https://maven.apache.org/surefire/maven-surefire-plugin/examples/process-communication.html-->
          <forkNode implementation="org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory"/>
          <properties>
            <configurationParameters>
              junit.jupiter.execution.parallel.enabled = true
              junit.jupiter.execution.parallel.mode.default = concurrent
              junit.jupiter.execution.parallel.mode.classes.default = concurrent
            </configurationParameters>
          </properties>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.eolang</groupId>
        <artifactId>eo-maven-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <foreign>${project.build.directory}/eo-foreign.csv</foreign>
          <foreignFormat>csv</foreignFormat>
          <failOnWarning>false</failOnWarning>
          <offline>true</offline>
          <ignoreRuntime>true</ignoreRuntime>
        </configuration>
        <executions>
          <execution>
            <id>compile</id>
            <goals>
              <goal>register</goal>
              <goal>compile</goal>
              <goal>transpile</goal>
              <goal>unplace</goal>
              <goal>unspile</goal>
            </goals>
            <configuration>
              <skipSourceLints>
                <!-- Required to be skipped, since we in runtime origin library. -->
                <lint>prohibited-package</lint>
                <!--
                @todo #4148:30min. Enable `unused-void-attr` lint.
                      We should enable this lint after the following issue with magic
                      voids will be resolved: https://github.com/objectionary/lints/issues/574.
                      Don't forget to enable `unused-void-attr` in the `test–compile`
                      execution as well.
                -->
                <lint>unused-void-attr</lint>
                <!--
                @todo #4148:30min. Enable `duplicate-names-in-diff-context` lint.
                      For now its too pedantic.
                      See this: https://github.com/objectionary/lints/issues/578.
                      Also, we should fix the bug with false positives with lambda object
                      names in the atoms, in order to enable this lint.
                -->
                <lint>duplicate-names-in-diff-context</lint>
                <!--
                @todo #4096:30min. Enable `sparse-decoration` lint.
                      After we merged EO tests together with their source objects, and removed
                      `+tests` meta, we have complains about sparse-decoration. Let's adjust and
                      enable it.
                -->
                <lint>sparse-decoration</lint>
                <!--
                @todo #4935:30min. Enable `comment-not-capitalized` lint.
                      The lint incorrectly flags comments starting with `@to-do` as not capitalized.
                      We should enable it after the lints repo fixes the issue to
                      ignore @to-do markers. See: https://github.com/objectionary/lints/issues/805
                -->
                <lint>comment-not-capitalized</lint>
                <!--
                @todo #4538:30min. Enable `object-has-data` lint.
                      The lint incorrectly flags all objects with bytes inside because they
                      don't have @base='Φ.org.eolang.bytes'. It was changed in
                      https://github.com/objectionary/eo/issues/4538. Right now we have just Φ.bytes
                -->
                <lint>object-has-data</lint>
                <!--
                @todo #5078:30min. Remove `idempotent-attribute-is-not-first` skip.
                      The lint relies on the `xi🌵` positional marker that the legacy
                      ANTLR parser emitted; the new spec-driven parser does not produce
                      this marker, so the lint now fires on every formation. Drop this
                      skip entry entirely once the lint is removed from the lints repo.
                -->
                <lint>idempotent-attribute-is-not-first</lint>
                <!--
                @todo #5078:30min. Remove `empty-object` skip.
                      The lint flags formations whose `<o>` has no @base/@name
                      and no children — the canonical empty anonymous formation.
                      The new spec parser emits this shape verbatim for `[]`
                      and similar; the lint disagrees. Drop this skip when the
                      lint is updated or removed upstream.
                -->
                <lint>empty-object</lint>
                <!--
                @todo #5183:30min. Enable `ascii-only` lint once objectionary/lints#927 is fixed.
                      The lint flags characters with code < 32, which includes newlines
                      embedded in multi-line XMIR <comment> elements. Newlines are valid
                      ASCII control characters, so this is a false positive.
                -->
                <lint>ascii-only</lint>
              </skipSourceLints>
              <skipProgramLints>
                <lint>inconsistent-args</lint>
                <!--
                @todo #5078:30min. Remove `incorrect-number-of-attributes` skip.
                      WPA miscounts calls of the form `list *` (compact-tuple
                      head with no vertical children, which synthesises a
                      `Φ.tuple.empty` argument) — it reports 0 args provided
                      while 1 (the synthesised tuple) is the actual shape.
                      Drop this skip once the WPA lint understands the
                      compact-tuple-with-zero-children synthesis (R-3.9.2 in
                      the spec).
                -->
                <lint>incorrect-number-of-attributes</lint>
              </skipProgramLints>
              <keepBinaries>
                <glob>org/eolang/EOfs/package-info.class</glob>
                <glob>org/eolang/EOms/package-info.class</glob>
                <glob>org/eolang/EOsm/package-info.class</glob>
                <glob>org/eolang/EOtt/package-info.class</glob>
                <glob>org/eolang/package-info.class</glob>
              </keepBinaries>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <executions>
          <execution>
            <id>snippet-test</id>
            <phase>integration-test</phase>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
            <configuration>
              <argLine>
                @{argLine} -Xmx${heap-size} -Xss${stack-size} -Duser.language=ru -Duser.region=RU
              </argLine>
              <systemPropertyVariables combine.children="append">
                <java.class.path>${project.build.outputDirectory}</java.class.path>
                <xmir.xsd>${project.basedir}/../eo-parser/src/main/resources/XMIR.xsd</xmir.xsd>
              </systemPropertyVariables>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>jacoco</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>jacoco-initialize</id>
                <goals>
                  <goal>prepare-agent</goal>
                </goals>
              </execution>
              <execution>
                <id>jacoco-check</id>
                <phase>test</phase>
                <goals>
                  <goal>check</goal>
                  <goal>report</goal>
                </goals>
                <configuration>
                  <rules>
                    <rule>
                      <element>BUNDLE</element>
                      <limits>
                        <limit>
                          <counter>INSTRUCTION</counter>
                          <value>COVEREDRATIO</value>
                          <minimum>0.14</minimum>
                        </limit>
                        <limit>
                          <counter>LINE</counter>
                          <value>COVEREDRATIO</value>
                          <minimum>0.13</minimum>
                        </limit>
                        <limit>
                          <counter>BRANCH</counter>
                          <value>COVEREDRATIO</value>
                          <minimum>0.03</minimum>
                        </limit>
                        <limit>
                          <counter>COMPLEXITY</counter>
                          <value>COVEREDRATIO</value>
                          <minimum>0.08</minimum>
                        </limit>
                        <limit>
                          <counter>METHOD</counter>
                          <value>COVEREDRATIO</value>
                          <minimum>0.12</minimum>
                        </limit>
                        <limit>
                          <counter>CLASS</counter>
                          <value>MISSEDCOUNT</value>
                          <maximum>1514</maximum>
                        </limit>
                      </limits>
                    </rule>
                  </rules>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>qulice</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.eolang</groupId>
            <artifactId>eo-maven-plugin</artifactId>
            <configuration>
              <skipLinting>false</skipLinting>
            </configuration>
          </plugin>
          <plugin>
            <groupId>com.qulice</groupId>
            <artifactId>qulice-maven-plugin</artifactId>
            <configuration>
              <excludes>
                <exclude>dependencies:org.eolang:eo-maven-plugin</exclude>
              </excludes>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>groovy-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>project-validate</id>
                <phase>verify</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <source>${project.basedir}/src/test/groovy/verify.groovy</source>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>org.codehaus.groovy</groupId>
                <artifactId>groovy-xml</artifactId>
                <version>3.0.25</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>hone</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.eolang</groupId>
            <artifactId>hone-maven-plugin</artifactId>
            <version>0.26.2</version>
            <executions>
              <execution>
                <goals>
                  <goal>pull</goal>
                  <goal>optimize</goal>
                  <goal>rmi</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
