Skip to content

Commit b3776b2

Browse files
committed
Merge pull request #597 from bhamail/maven-phase1-native-dan-squash
Mavenize the build process - Phase 1: building the native code via Maven Fixes # #582
2 parents 0864d49 + 5e23f54 commit b3776b2

File tree

7 files changed

+998
-1
lines changed

7 files changed

+998
-1
lines changed

.gitignore

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
build
1+
target/
2+
.project
3+
.classpath
4+
build/
25
build-d64
36
build.eclipse
47
build.number
@@ -21,3 +24,6 @@ native/libffi/doc/libffi.info
2124
junit-*
2225
pom-jna.xml.asc
2326
pom-jna-platform.xml.asc
27+
# IntelliJ IDEA
28+
.idea
29+
*.iml

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ Features
3636
* [#583](https://github.com/java-native-access/jna/pull/583): Added printer attributes and status - [@IvanRF](https://github.com/IvanRF).
3737
* [#589](https://github.com/java-native-access/jna/pull/589): Use MethodResultContext in direct mapping (as done in interface mapping) - [@marco2357](https://github.com/marco2357).
3838
* [#595](https://github.com/java-native-access/jna/pull/595): Allow calling COM methods/getters requiring hybrid calling (METHOD+PROPERTYGET) - [@matthiasblaesing](https://github.com/matthiasblaesing).
39+
* [#582](https://github.com/java-native-access/jna/pull/582): Mavenize the build process - Phase 1: building the native code via Maven [@lgoldstein](https://github.com/lgoldstein)
3940

4041
Bug Fixes
4142
---------

native/build.xml

Lines changed: 385 additions & 0 deletions
Large diffs are not rendered by default.

native/pom.xml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!-- Super POM included by all other sub-POM(s)-->
3+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns="http://maven.apache.org/POM/4.0.0"
5+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
6+
<modelVersion>4.0.0</modelVersion>
7+
<artifactId>native</artifactId>
8+
<packaging>pom</packaging>
9+
<name>net.java.dev.jna:native</name>
10+
11+
<parent>
12+
<groupId>net.java.dev.jna</groupId>
13+
<artifactId>parent</artifactId>
14+
<version>4.3.0-SNAPHSOT</version>
15+
<relativePath>../parent</relativePath>
16+
</parent>
17+
18+
<build>
19+
<plugins>
20+
<plugin>
21+
<artifactId>maven-antrun-plugin</artifactId>
22+
<executions>
23+
<execution>
24+
<id>compile-native-library</id>
25+
<phase>package</phase>
26+
<goals>
27+
<goal>run</goal>
28+
</goals>
29+
<configuration>
30+
<target>
31+
<ant dir="${project.basedir}" target="install" inheritRefs="true" useNativeBasedir="true">
32+
<!-- see http://stackoverflow.com/questions/2022622/java-home-gets-mangled-by-maven -->
33+
<!-- property name="build.compiler" value="extJavac"/ -->
34+
</ant>
35+
</target>
36+
</configuration>
37+
</execution>
38+
</executions>
39+
</plugin>
40+
<plugin> <!-- do not install the POM or artifacts since they are embedded inside the JAR -->
41+
<artifactId>maven-install-plugin</artifactId>
42+
<configuration> <!-- TODO consider installing the DLL(s) and using their settings.localRepository location -->
43+
<skip>true</skip>
44+
</configuration>
45+
</plugin>
46+
<plugin> <!-- do not deploy the POM or artifacts since they are embedded inside the JAR -->
47+
<artifactId>maven-deploy-plugin</artifactId>
48+
<configuration>
49+
<skip>true</skip>
50+
</configuration>
51+
</plugin>
52+
</plugins>
53+
</build>
54+
</project>

parent/build-base.xml

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project name="workspace-base" default="workspace-base">
3+
<description>
4+
Holds common imported definitions for ANT build.xml file(s)
5+
</description>
6+
7+
<dirname property="module.root.folder" file="${ant.file}" />
8+
<basename property="module.artifact.name" file="${module.root.folder}" />
9+
<property name="jna.parent.folder" value="${module.root.folder}" />
10+
<dirname property="jna.root.folder" file="${jna.parent.folder}" />
11+
<property name="workspace.root.folder" value="${jna.root.folder}" />
12+
13+
<!-- user-specific overrides - not part of version control system -->
14+
<property name="build.local.properties.filename" value="build.local.properties" />
15+
<property file="${jna.parent.folder}${file.separator}${build.local.properties.filename}" />
16+
17+
<!-- version control system settings for the specific version -->
18+
<property name="build.version.properties.filename" value="build.version.properties" />
19+
<property file="${jna.parent.folder}${file.separator}${build.version.properties.filename}" />
20+
21+
<!-- import the environment -->
22+
<property environment="env"/>
23+
<!-- NOTE: must match the parent super-POM version -->
24+
<property name="project.version" value="4.3.0-SNAPHSOT" />
25+
26+
<!-- detect type of O/S -->
27+
<condition property="win32.local.shell" value="true" else="false">
28+
<contains string="${os.name}" substring="windows" casesensitive="false" />
29+
</condition>
30+
<condition property="linux.local.shell" value="true" else="false">
31+
<isfalse value="${win32.local.shell}" />
32+
</condition>
33+
<condition property="shell.script.suffix" value="sh" else="bat">
34+
<isfalse value="${win32.local.shell}" />
35+
</condition>
36+
37+
<!-- some useful general sub-folders names -->
38+
<property name="lib.sub.folder.name" value="lib"/>
39+
<property name="bin.sub.folder.name" value="bin"/>
40+
<property name="metainf.sub.folder.name" value="META-INF"/>
41+
<property name="webinf.sub.folder.name" value="WEB-INF"/>
42+
43+
<!-- default name of manifest file -->
44+
<property name="manifest.file.name" value="MANIFEST.MF"/>
45+
46+
<!-- useful file(s) suffixes -->
47+
<property name="jar.file.suffix" value="jar"/>
48+
<property name="zip.file.suffix" value="zip"/>
49+
<property name="war.file.suffix" value="war"/>
50+
51+
<property name="module.artifact.version" value="${project.version}" />
52+
<property name="module.artifact.jar.name" value="${module.artifact.name}-${module.artifact.version}.${jar.file.suffix}" />
53+
<property name="module.artifact.zip.name" value="${module.artifact.name}-${module.artifact.version}.${zip.file.suffix}" />
54+
55+
<!-- some useful module(s) sub-folders names -->
56+
<property name="target.sub.folder.name" value="target" />
57+
<property name="src.sub.folder.name" value="src" />
58+
<property name="main.sub.folder.name" value="main" />
59+
<property name="resources.sub.folder.name" value="resources" />
60+
<property name="classes.sub.folder.name" value="classes" />
61+
<property name="java.sub.folder.name" value="java" />
62+
<property name="webapp.sub.folder.name" value="webapp" />
63+
<property name="test.sub.folder.name" value="test"/>
64+
<property name="test.classes.sub.folder.name" value="${test.sub.folder.name}-${classes.sub.folder.name}" />
65+
<property name="lib.sub.folder.name" value="lib" />
66+
67+
<!-- specific module/project relative locations to the build.xml file -->
68+
<property name="module.main.sub.folder.path" value="${src.sub.folder.name}${file.separator}${main.sub.folder.name}" />
69+
<property name="module.java.sub.folder.path" value="${module.main.sub.folder.path}${file.separator}${java.sub.folder.name}" />
70+
<property name="module.resources.sub.folder.path" value="${module.main.sub.folder.path}${file.separator}${resources.sub.folder.name}" />
71+
<property name="module.webapp.sub.folder.path" value="${module.main.sub.folder.path}${file.separator}${webapp.sub.folder.name}" />
72+
<property name="module.webinf.sub.folder.path" value="${module.webapp.sub.folder.path}${file.separator}${webinf.sub.folder.name}" />
73+
<property name="module.test.sub.folder.path" value="${src.sub.folder.name}${file.separator}${test.sub.folder.name}" />
74+
<property name="module.test.java.sub.folder" value="${module.test.sub.folder.path}${file.separator}${java.sub.folder.name}" />
75+
<property name="module.test.resources.sub.folder" value="${module.test.sub.folder.path}${file.separator}${resources.sub.folder.name}" />
76+
<property name="module.test.webapp.sub.folder" value="${module.test.sub.folder.path}${file.separator}${webapp.sub.folder.name}" />
77+
<property name="module.test.webinf.sub.folder" value="${module.test.webapp.sub.folder}${file.separator}${webinf.sub.folder.name}" />
78+
79+
<!-- specific module/project absolute locations -->
80+
<property name="module.src.folder" value="${module.root.folder}${file.separator}${src.sub.folder.name}" />
81+
<property name="module.main.folder" value="${module.root.folder}${file.separator}${module.main.sub.folder.path}" />
82+
<property name="module.java.folder" value="${module.root.folder}${file.separator}${module.java.sub.folder.path}" />
83+
<property name="module.resources.folder" value="${module.root.folder}${file.separator}${module.resources.sub.folder.path}" />
84+
<property name="module.webapp.folder" value="${module.root.folder}${file.separator}${module.webapp.sub.folder.path}" />
85+
<property name="module.webinf.folder" value="${module.webapp.folder}${file.separator}${webinf.sub.folder.name}" />
86+
87+
<property name="module.test.folder" value="${module.root.folder}${file.separator}${module.test.sub.folder.path}" />
88+
<property name="module.test.java" value="${module.root.folder}${file.separator}${module.test.java.sub.folder}" />
89+
<property name="module.test.resources" value="${module.root.folder}${file.separator}${module.test.resources.sub.folder}" />
90+
91+
<!-- useful sub-folder - under which the module's classes and META-INF sub-folder(s) reside -->
92+
<property name="module.target.folder" value="${module.root.folder}${file.separator}${target.sub.folder.name}" />
93+
<property name="module.target.classes" value="${module.target.folder}${file.separator}${classes.sub.folder.name}" />
94+
95+
<property name="module.artifact.jar.path" value="${module.target.folder}${file.separator}${module.artifact.jar.name}" />
96+
<property name="module.artifact.zip.path" value="${module.target.folder}${file.separator}${module.artifact.zip.name}" />
97+
98+
<target name="workspace-base" />
99+
</project>

parent/build-compile.xml

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project name="compile-base" default="compile-base">
3+
<description>
4+
Holds common imported definitions for ANT build.xml file(s)
5+
that build/generate artifacts
6+
</description>
7+
8+
<dirname property="module.root.folder" file="${ant.file}"/>
9+
<property name="jna.parent.folder" value="${module.root.folder}"/>
10+
<import file="${jna.parent.folder}${file.separator}build-base.xml"/>
11+
12+
<tstamp>
13+
<format property="year" pattern="yyyy" locale="en,US"/>
14+
</tstamp>
15+
<property name="copyright" value="Copyright &amp;copy; 2007-${year} Timothy Wall. All Rights Reserved."/>
16+
<buildnumber/>
17+
18+
<!-- JNA library release version - NOTE: this MUST match Maven -->
19+
<property name="jna.major" value="4"/>
20+
<property name="jna.minor" value="3"/>
21+
<property name="jna.revision" value="0"/>
22+
<property name="jna.build" value="0"/> <!--${build.number}-->
23+
<condition property="version.suffix" value="" else="-SNAPSHOT">
24+
<or>
25+
<isset property="release"/>
26+
<isset property="maven-release"/>
27+
</or>
28+
</condition>
29+
<property name="jna.version" value="${jna.major}.${jna.minor}.${jna.revision}${version.suffix}"/>
30+
31+
<property name="spec.title" value="Java Native Access (JNA)"/>
32+
<property name="spec.vendor" value="JNA Development Team"/>
33+
<property name="spec.version" value="${jna.major}"/>
34+
<property name="impl.title" value="com.sun.jna"/>
35+
<property name="impl.vendor" value="${spec.vendor}"/>
36+
<property name="impl.version" value="${jna.version} (b${jna.build})"/>
37+
38+
<!-- +++++++++++++++ Supported platforms - Add other supported platforms here ++++++++++++++++ -->
39+
<condition property="jre.arch" value="x86">
40+
<matches pattern="(i[3456]86|pentium)" string="${os.arch}"/>
41+
</condition>
42+
<condition property="jre.arch" value="x86-64">
43+
<matches pattern="(x86_64|amd64|em64t)" string="${os.arch}"/>
44+
</condition>
45+
<condition property="jre.arch" value="ppc">
46+
<matches pattern="(powerpc|power)" string="${os.arch}"/>
47+
</condition>
48+
<condition property="jre.arch" value="ppc64le">
49+
<or>
50+
<matches pattern="(powerpc64le|power64le|ppc64le)" string="${os.arch}"/>
51+
<and>
52+
<matches pattern="(powerpc64|power64|ppc64)" string="${os.arch}"/>
53+
<matches pattern="little" string="${sun.cpu.endian}"/>
54+
</and>
55+
</or>
56+
</condition>
57+
<condition property="jre.arch" value="ppc64">
58+
<matches pattern="(powerpc64|power64)" string="${os.arch}"/>
59+
</condition>
60+
<property name="jre.arch" value="${os.arch}"/>
61+
62+
<!-- ++++++++++++ Maven related properties definitions +++++++++++++ -->
63+
<property name="maven.base.name" value="maven"/>
64+
<property name="maven.archiver.sub.folder.name" value="${maven.base.name}-archiver"/>
65+
<property name="maven.repository.root.folder.name" value=".m2"/>
66+
<property name="maven.repository.sub.folder.name" value="repository"/>
67+
<property name="maven.settings.file.name" value="settings.xml"/>
68+
<property name="maven.pom.file.name" value="pom.xml"/>
69+
<property name="maven.sources.classifier" value="sources"/>
70+
<property name="maven.install.location" value="${env.M2_HOME}"/>
71+
<condition property="mvn.exe.script.name" value="mvn.cmd" else="mvn">
72+
<istrue value="${win32.local.shell}"/>
73+
</condition>
74+
75+
<property name="mvn.executable"
76+
value="${maven.install.location}${file.separator}bin${file.separator}${mvn.exe.script.name}"/>
77+
<property name="maven.settings.file.path" value="${jna.parent.folder}${file.separator}${maven.settings.file.name}"/>
78+
<property name="maven.opts" value="-Xmx512m"/>
79+
<condition property="maven.local.repository.folder"
80+
value="${env.M2_REPO}"
81+
else="${user.home}${file.separator}${maven.repository.root.folder.name}${file.separator}${maven.repository.sub.folder.name}">
82+
<isset property="env.M2_REPO"/>
83+
</condition>
84+
85+
<!-- Procedure to execute the Maven script - SYNPOSIS:
86+
87+
<antcall target='run-mvn'>
88+
<param name='mvn.run.dir' value='wwww' />
89+
<param name='mvn.run.opts' value='xxxxxx'/>
90+
<param name='mvn.arg.line' value='yyyyy'/>
91+
</antcall>
92+
93+
Where:
94+
95+
mvn.run.dir - folder to be used as CWD when running the script
96+
mvn.run.opts - options to be set to MAVEN_OPTS (e.g., -Xmx128)
97+
mvn.arg.line - line to be passed as argument to the invocation
98+
-->
99+
<target name="run-mvn">
100+
<fail message="Cannot find ${mvn.executable} - check that M2_HOME environment variable set">
101+
<condition>
102+
<not>
103+
<available file="${mvn.executable}" type="file"/>
104+
</not>
105+
</condition>
106+
</fail>
107+
108+
<echo message="mvn ${mvn.arg.line}" level="info"/>
109+
<exec executable="${mvn.executable}" failonerror="true" dir="${mvn.run.dir}">
110+
<env key="MAVEN_OPTS" value="${mvn.run.opts}"/>
111+
<!-- arg line="-s ${maven.settings.file.path}" / -->
112+
<arg line="${mvn.arg.line}"/>
113+
</exec>
114+
</target>
115+
116+
<property name="maven.module.options" value="-Xmx728m"/>
117+
<property name="maven.full.test.options"
118+
value="-Dmaven.test.haltafterfailure=true -Dmaven.test.failure.ignore=false -Dmaven.test.error.ignore=false"/>
119+
120+
<property name="maven.install.options" value="${maven.full.test.options} install"/>
121+
<target name="run-module-mvn">
122+
<antcall target='run-mvn'>
123+
<param name='mvn.run.dir' value='${module.root.folder}'/>
124+
<param name='mvn.run.opts' value='${maven.module.options}'/>
125+
<param name='mvn.arg.line' value='${maven.install.options}'/>
126+
</antcall>
127+
</target>
128+
129+
<property name="maven.clean.options" value="build-helper:remove-project-artifact -DremoveAll=true clean"/>
130+
<target name="clean-module-mvn">
131+
<antcall target='run-mvn'>
132+
<param name='mvn.run.dir' value='${module.root.folder}'/>
133+
<param name='mvn.run.opts' value='${maven.module.options}'/>
134+
<param name='mvn.arg.line' value='${maven.clean.options}'/>
135+
</antcall>
136+
</target>
137+
138+
<target name="compile-base" depends="workspace-base"/>
139+
<target name="compile" depends="run-module-mvn"
140+
description="Runs the mvn install command - including all the tests"/>
141+
<target name="uncompile" depends="clean-module-mvn"
142+
description="Runs the mvn clean command - including un-install the artifact from Maven local repository"/>
143+
<target name="recompile" depends="uncompile,compile" description="Re-compiles the module"/>
144+
</project>

0 commit comments

Comments
 (0)