<?xml version="1.0" encoding="UTF-8"?>
<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>com.github.fommil.netlib</groupId>
        <artifactId>parent</artifactId>
        <version>1.1</version>
    </parent>

    <artifactId>native_ref</artifactId>
    <packaging>pom</packaging>

    <modules>
        <module>java</module>
        <module>osx-x86_64</module>
        <module>win-i686</module>
        <module>win-x86_64</module>
        <!-- cross compiles are built separately on a Linux box... -->
    </modules>

    <properties>
        <natives>netlib-native_ref</natives>
        <!-- GEES etc needs an ill-defined callback -->
        <lapacke.callback>([ds](gees|gges|geesx|ggesx))</lapacke.callback>
        <!-- LSAME, SECOND etc are more efficient on the JVM -->
        <jvm.better>lsame|lsamen|second|dsecnd</jvm.better>
        <!-- LAPACK routines that do not have a named ARPACKE equivalent -->
        <lapacke.unsupported>(ieeeck|ilaenv|ilaver|iparmq|([sd](gbtf2|gebd2|gbtf2|gebd2|gegs|gegv|gehd2|gelsx|geql2|gerq2|gesc2|getc2|gtts2|isnan|labad|labrd|lacn2|lacon|ladiv|lae2|laebz|laed0|laed1|laed2|laed3|laed4|laed5|laed6|laed7|laed8|laed9|laeda|laein|laev2|laexc|lag2|lags2|lagtf|lagtm|lagts|lagv2|lahqr|lahr2|lahrd|laic1|laisnan|laln2|lals0|lalsa|lalsd|lamc1|lamc2|lamc3|lamc4|lamc5|lamrg|laneg|langb|langt|lanhs|lansb|lansp|lanst|lantb|lantp|lanv2|lapll|lapmt|laqgb|laqge|laqp2|laqps|laqr0|laqr1|laqr2|laqr3|laqr4|laqr5|laqsb|laqsp|laqsy|laqtr|lar1v|lar2v|larf|largv|larra|larrb|larrc|larrd|larre|larrf|larrj|larrk|larrr|larrv|lartg|lartv|laruv|larz|larzb|larzt|las2|lascl|lasd0|lasd1|lasd2|lasd3|lasd4|lasd5|lasd6|lasd7|lasd8|lasda|lasdq|lasdt|lasq1|lasq2|lasq3|lasq4|lasq5|lasq6|lasr|lassq|lasv2|lasy2|lasyf|latbs|latdf|latps|latrd|latrs|latrz|latzm|lauu2|lazq3|lazq4|org2l|org2r|orgl2|orgr2|orm2l|orm2r|orml2|ormr2|ormr3|pbtf2|potf2|ptts2|rscl|sygs2|sytd2|sytf2|tgex2|tgsy2|trti2|tzrqf)))</lapacke.unsupported>
        <arpack.noprototypes>(dgetv0|dlaqrb|dmout|dnaitr|dnapps|dnaup2|dnconv|dneigh|dngets|dsaitr|dsapps|dsaup2|dsconv|dseigt|dsesrt|dsgets|dsortc|dsortr|dstatn|dstats|dstqrb|dvout|icnteq|icopy|iset|iswap|ivout|second|sgetv0|slaqrb|smout|snaitr|snapps|snaup2|snconv|sneigh|sngets|ssaitr|ssapps|ssaup2|ssconv|sseigt|ssesrt|ssgets|ssortc|ssortr|sstatn|sstats|sstqrb|svout)</arpack.noprototypes>
        <prefer.f2j>(${lapacke.callback}|${jvm.better}|${lapacke.unsupported}|${arpack.noprototypes})</prefer.f2j>
    </properties>

    <dependencies>
        <dependency>
            <groupId>net.sourceforge.f2j</groupId>
            <artifactId>arpack_combined_all</artifactId>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.f2j</groupId>
            <artifactId>arpack_combined_all</artifactId>
            <classifier>javadoc</classifier>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>com.github.fommil.netlib</groupId>
                    <artifactId>generator</artifactId>
                    <executions>
                        <execution>
                            <id>blas</id>
                            <goals>
                                <goal>native-jni</goal>
                            </goals>
                            <configuration>
                                <implementing>com.github.fommil.netlib.NativeRefBLAS</implementing>
                                <outputDir>${project.build.directory}/netlib-native</outputDir>
                                <outputName>com_github_fommil_netlib_NativeRefBLAS.c</outputName>
                                <scan>org.netlib.blas</scan>
                                <prefix>cblas_</prefix>
                                <firstParam>CblasColMajor</firstParam>
                                <noFirstParam>.*(dot|nrm2|asum|amax|swap|copy|rot|xpy|cal).*</noFirstParam>
                                <exclude>${prefer.f2j}</exclude>
                                <cblas_hack>true</cblas_hack>
                                <includes>
                                    <param>cblas.h</param>
                                </includes>
                            </configuration>
                        </execution>
                        <execution>
                            <id>lapack</id>
                            <goals>
                                <goal>native-jni</goal>
                            </goals>
                            <configuration>
                                <implementing>com.github.fommil.netlib.NativeRefLAPACK</implementing>
                                <outputDir>${project.build.directory}/netlib-native</outputDir>
                                <outputName>com_github_fommil_netlib_NativeRefLAPACK.c</outputName>
                                <scan>org.netlib.lapack</scan>
                                <prefix>LAPACKE_</prefix>
                                <suffix>_work</suffix>
                                <firstParam>LAPACK_COL_MAJOR</firstParam>
                                <noFirstParam>
                                    [sd](disna|gtcon|gttrf|lapy[23]|larfg|larnv|lasrt|ptcon|pttrf|stebz|sterf|lamch)
                                </noFirstParam>
                                <exclude>${prefer.f2j}</exclude>
                                <extractChar>true</extractChar>
                                <lapacke_hack>true</lapacke_hack>
                                <includes>
                                    <param>lapacke.h</param>
                                </includes>
                            </configuration>
                        </execution>
                        <execution>
                            <id>arpack</id>
                            <goals>
                                <goal>native-jni</goal>
                            </goals>
                            <configuration>
                                <implementing>com.github.fommil.netlib.NativeRefARPACK</implementing>
                                <outputDir>${project.build.directory}/netlib-native</outputDir>
                                <outputName>com_github_fommil_netlib_NativeRefARPACK.c</outputName>
                                <scan>org.netlib.arpack</scan>
                                <suffix>_</suffix>
                                <exclude>${prefer.f2j}</exclude>
                                <extractChar>true</extractChar>
                                <exclude>${prefer.f2j}</exclude>
                                <fortran_hack>true</fortran_hack>
                                <includes>
                                    <param>arpack.h</param>
                                </includes>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>native-maven-plugin</artifactId>
                    <configuration>
                        <!-- numberOfConcurrentCompilation would be nice, but always fails :-( -->
                        <!-- http://jira.codehaus.org/browse/MOJO-1955 -->
                        <javahVerbose>true</javahVerbose>
                        <javahClassNames>
                            <javahClassName>com.github.fommil.netlib.NativeRefBLAS</javahClassName>
                            <javahClassName>com.github.fommil.netlib.NativeRefLAPACK</javahClassName>
                            <javahClassName>com.github.fommil.netlib.NativeRefARPACK</javahClassName>
                        </javahClassNames>
                        <compilerStartOptions>
                            <compilerStartOption>-O3</compilerStartOption>
                        </compilerStartOptions>
                        <compilerMiddleOptions>
                            <compilerMiddleOption>-Wall -fPIC -DADD_</compilerMiddleOption>
                            <compilerMiddleOption>-fdata-sections</compilerMiddleOption>
                            <compilerMiddleOption>-ffunction-sections</compilerMiddleOption>
                        </compilerMiddleOptions>
                        <linkerStartOptions>
                            <linkerStartOption>-O3</linkerStartOption>
                        </linkerStartOptions>
                        <sources>
                            <source>
                                <directory>${project.build.directory}/netlib-native</directory>
                                <includes>
                                    <include>*.c</include>
                                </includes>
                            </source>
                            <source>
                                <directory>${netlib.src}/JNI</directory>
                                <includes>
                                    <include>*.c</include>
                                </includes>
                            </source>
                            <source>
                                <directory>${netlib.src}/BLAS</directory>
                                <includes>
                                    <include>*.f</include>
                                </includes>
                            </source>
                            <source>
                                <directory>${netlib.src}/CBLAS</directory>
                                <includes>
                                    <include>*.f</include>
                                    <include>*.c</include>
                                </includes>
                            </source>
                            <source>
                                <directory>${netlib.src}/LAPACK</directory>
                                <includes>
                                    <include>*.f</include>
                                </includes>
                            </source>
                            <source>
                                <directory>${netlib.src}/LAPACKE</directory>
                                <includes>
                                    <include>*.f</include>
                                    <include>*.c</include>
                                </includes>
                            </source>
                            <source>
                                <directory>${netlib.src}/ARPACK</directory>
                                <includes>
                                    <include>*.f</include>
                                </includes>
                            </source>
                        </sources>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>runtime</id>
                            <phase>package</phase>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                            <configuration>
                                <classesDirectory>${project.build.directory}</classesDirectory>
                                <includes>
                                    <include>${project.artifactId}.*</include>
                                </includes>
                                <classifier>natives</classifier>
                            </configuration>
                        </execution>
                        <execution>
                            <id>source</id>
                            <phase>package</phase>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                            <configuration>
                                <classesDirectory>${project.build.directory}</classesDirectory>
                                <includes>
                                    <include>netlib-native/**/*</include>
                                    <include>native/**/*</include>
                                </includes>
                                <classifier>sources</classifier>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>
