<?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">
	<parent>
		<groupId>org.cryptomator</groupId>
		<artifactId>jfuse-parent</artifactId>
		<version>0.3.2</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	<artifactId>jfuse-win</artifactId>
	<name>jFUSE Windows</name>
	<description>Java FUSE bindings for Windows x86_64 and arm64</description>
	<url>https://github.com/cryptomator/jfuse/tree/develop/jfuse-win</url>

	<properties>
		<win.ucrtHeaderPath>C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt</win.ucrtHeaderPath>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.cryptomator</groupId>
			<artifactId>jfuse-api</artifactId>
			<version>${project.version}</version>
		</dependency>
	</dependencies>

	<profiles>
		<profile>
			<id>jextract-win</id>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-enforcer-plugin</artifactId>
						<executions>
							<execution>
								<id>check-preconditions</id>
								<goals>
									<goal>enforce</goal>
								</goals>
								<configuration>
									<rules>
										<requireFilesExist>
											<files>
												<file>${win.ucrtHeaderPath}</file>
											</files>
											<message>Windows UCRT headers not found.</message>
										</requireFilesExist>
									</rules>
								</configuration>
							</execution>
						</executions>
					</plugin>
					<plugin>
						<artifactId>maven-clean-plugin</artifactId>
						<configuration>
							<filesets>
								<fileset>
									<directory>${project.build.sourceDirectory}/org/cryptomator/jfuse/win/extr</directory>
									<includes>
										<include>*.java</include>
									</includes>
									<followSymlinks>false</followSymlinks>
								</fileset>
							</filesets>
						</configuration>
					</plugin>

					<plugin>
						<groupId>io.github.coffeelibs</groupId>
						<artifactId>jextract-maven-plugin</artifactId>
						<version>0.2.0</version>
						<configuration>
							<executable>C:\Users\Arbeit\Programs\jextract-19\bin\jextract.bat</executable>
							<headerSearchPaths>${win.ucrtHeaderPath}</headerSearchPaths>
							<outputDirectory>${project.build.sourceDirectory}</outputDirectory>
							<targetPackage>org.cryptomator.jfuse.win.extr</targetPackage>
						</configuration>
						<executions>
							<execution>
								<id>jextract-fuse</id>
								<goals>
									<goal>sources</goal>
								</goals>
								<configuration>
									<headerFile>${project.parent.basedir}/winfsp/inc/fuse3/fuse.h</headerFile>
									<headerClassName>fuse_h</headerClassName>
									<cPreprocessorMacros>
										<cPreprocessorMacro>WINFSP_DLL_INTERNAL</cPreprocessorMacro>
										<cPreprocessorMacro>FUSE_USE_VERSION=31</cPreprocessorMacro>
									</cPreprocessorMacros>
									<includeFunctions>
										<includeFunction>fuse3_lib_help</includeFunction>
										<includeFunction>fuse3_new</includeFunction>
										<includeFunction>fuse3_mount</includeFunction>
										<includeFunction>fuse3_get_session</includeFunction>
										<includeFunction>fuse3_loop</includeFunction>
										<includeFunction>fuse3_loop_mt_31</includeFunction>
										<includeFunction>fuse3_exit</includeFunction>
										<includeFunction>fuse3_unmount</includeFunction>
										<includeFunction>fuse3_destroy</includeFunction>
									</includeFunctions>
									<includeTypedefs>
										<includeTypedef>fuse3_fill_dir_t</includeTypedef>
									</includeTypedefs>
									<includeStructs>
										<includeStruct>fuse3_operations</includeStruct>
										<includeStruct>fuse3_file_info</includeStruct>
										<includeStruct>fuse_stat</includeStruct>
										<includeStruct>fuse_statvfs</includeStruct>
										<includeStruct>fuse_timespec</includeStruct>
										<includeStruct>fuse3_config</includeStruct>
										<includeStruct>fuse3_conn_info</includeStruct>
									</includeStructs>
								</configuration>
							</execution>
							<!-- winfsp does not support fuse_lowlevel.h. fuse_parse_cmdline is taken from fuse2.h -->
							<execution>
								<id>jextract-fuse-parse-cmdline</id>
								<goals>
									<goal>sources</goal>
								</goals>
								<configuration>
									<targetPackage>org.cryptomator.jfuse.win.extr.fuse2</targetPackage>
									<headerFile>${project.parent.basedir}/winfsp/inc/fuse/fuse_common.h</headerFile>
									<headerClassName>fuse2_h</headerClassName>
									<includeFunctions>
										<includeFunction>fuse_parse_cmdline</includeFunction>
									</includeFunctions>
									<includeStructs>
										<includeStruct>fuse_args</includeStruct>
									</includeStructs>
								</configuration>
							</execution>
							<execution>
								<id>jextract-errno</id>
								<goals>
									<goal>sources</goal>
								</goals>
								<configuration>
									<headerFile>${win.ucrtHeaderPath}/errno.h</headerFile>
									<headerClassName>errno_h</headerClassName>
									<includeMacros>
										<includeMacro>ENOENT</includeMacro>
										<includeMacro>ENOSYS</includeMacro>
										<includeMacro>ENOMEM</includeMacro>
										<includeMacro>EACCES</includeMacro>
										<includeMacro>EIO</includeMacro>
										<includeMacro>EROFS</includeMacro>
										<includeMacro>EBADF</includeMacro>
										<includeMacro>EEXIST</includeMacro>
										<includeMacro>ENOTDIR</includeMacro>
										<includeMacro>EISDIR</includeMacro>
										<includeMacro>ENOTEMPTY</includeMacro>
										<includeMacro>EINVAL</includeMacro>
									</includeMacros>
								</configuration>
							</execution>
							<execution>
								<id>jextract-fcntl</id>
								<goals>
									<goal>sources</goal>
								</goals>
								<configuration>
									<headerFile>${win.ucrtHeaderPath}/fcntl.h</headerFile>
									<headerClassName>fcntl_h</headerClassName>
									<includeMacros>
										<includeMacro>O_RDONLY</includeMacro>
										<includeMacro>O_WRONLY</includeMacro>
										<includeMacro>O_RDWR</includeMacro>
										<includeMacro>O_APPEND</includeMacro>
										<includeMacro>O_CREAT</includeMacro>
										<includeMacro>O_TRUNC</includeMacro>
										<includeMacro>O_EXCL</includeMacro>
									</includeMacros>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>

</project>