<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.libkperf.tracex</groupId>
    <artifactId>trace-java-parent</artifactId>
    <version>1.0.0</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <artifactId>trace_agent</artifactId>
  <packaging>jar</packaging>

  <name>trace java agent</name>

  <dependencies>
    <dependency>
      <groupId>org.ow2.asm</groupId>
      <artifactId>asm</artifactId>
      <version>${asm.version}</version>
    </dependency>
    <dependency>
      <groupId>org.ow2.asm</groupId>
      <artifactId>asm-commons</artifactId>
      <version>${asm.version}</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>trace_agent</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>3.2.0</version>
        <executions>
          <execution>
            <id>build-native-threadinfo</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>bash</executable>
              <workingDirectory>${project.basedir}</workingDirectory>
              <arguments>
                <argument>-c</argument>
                <argument>
                  set -e
                  native_src="${project.basedir}/src/main/native/tracex_threadinfo.c"
                  native_out="${project.build.directory}/native"
                  java_home="${java.home}"
                  if [ ! -d "$java_home/include" ] &amp;&amp; [ -d "$java_home/../include" ]; then
                    java_home="$(cd "$java_home/.." &amp;&amp; pwd)"
                  fi
                  mkdir -p "$native_out"
                  gcc -shared -fPIC -D_GNU_SOURCE -Wl,-z,relro,-z,now -ftrapv \
                    -fstack-protector-all -D_FORTIFY_SOURCE=2 -O2 -s \
                    -I"$java_home/include" \
                    -I"$java_home/include/linux" \
                    "$native_src" \
                    -o "$native_out/libtracex_threadinfo.so"
                </argument>
              </arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>${maven.shade.plugin.version}</version>
        <executions>
          <execution>
            <id>shade-agent</id>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <minimizeJar>false</minimizeJar>
              <createDependencyReducedPom>false</createDependencyReducedPom>
              <shadedArtifactAttached>false</shadedArtifactAttached>
              <!-- avoid conflict with application, ASM and spring ASM -->
              <relocations>
                <relocation>
                  <pattern>org.objectweb.asm</pattern>
                  <shadedPattern>com.libkperf.tracex.shaded.asm</shadedPattern>
                </relocation>
              </relocations>

              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <manifestEntries>
                    <Premain-Class>com.libkperf.tracex.agent.TraceAgent</Premain-Class>
                    <Agent-Class>com.libkperf.tracex.agent.TraceAgent</Agent-Class>
                    <Can-Retransform-Classes>true</Can-Retransform-Classes>
                    <Can-Redefine-Classes>true</Can-Redefine-Classes>
                  </manifestEntries>
                </transformer>
              </transformers>

              <filters>
                <filter>
                  <artifact>*:*</artifact>
                  <excludes>
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                  </excludes>
                </filter>
              </filters>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <execution>
            <id>copy-native-lib</id>
            <phase>package</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <copy file="${project.build.directory}/native/libtracex_threadinfo.so"
                      tofile="${libkperf.java.out.dir}/libtracex_threadinfo.so"
                      overwrite="true"/>
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>