<?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.3</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	<artifactId>jfuse-linux-amd64</artifactId>
	<name>jFUSE Linux x86_64</name>
	<description>Java FUSE bindings for Linux x86_64</description>
	<url>https://github.com/cryptomator/jfuse/tree/develop/jfuse-linux-amd64</url>

	<properties>
		<linux.headerSearchPath>/Users/sebastian/Documents/inc/x86_64-linux-gnu/include</linux.headerSearchPath> <!-- debian package libc6-dev-amd64-cross -->
	</properties>

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

	<profiles>
		<profile>
			<id>jextract-linux-amd64</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>${linux.headerSearchPath}</file>
											</files>
											<message>libc6 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/linux/amd64/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>${user.home}/.sdkman/candidates/java/19.ea.jextract/bin/jextract</executable>
							<headerSearchPaths>${linux.headerSearchPath}</headerSearchPaths>
							<outputDirectory>${project.build.sourceDirectory}</outputDirectory>
							<targetPackage>org.cryptomator.jfuse.linux.amd64.extr</targetPackage>
						</configuration>
						<executions>
							<execution>
								<id>jextract-fuse</id>
								<goals>
									<goal>sources</goal>
								</goals>
								<configuration>
									<headerFile>${project.parent.basedir}/libfuse3/include/fuse.h</headerFile>
									<headerClassName>fuse_h</headerClassName>
									<cPreprocessorMacros>
										<cPreprocessorMacro>_FILE_OFFSET_BITS=64</cPreprocessorMacro>
										<cPreprocessorMacro>FUSE_USE_VERSION=312</cPreprocessorMacro>
									</cPreprocessorMacros>
									<includeFunctions>
										<includeFunction>fuse_version</includeFunction>
										<includeFunction>fuse_lib_help</includeFunction>
										<includeFunction>fuse_new</includeFunction>
										<includeFunction>fuse_mount</includeFunction>
										<includeFunction>fuse_get_session</includeFunction>
										<includeFunction>fuse_loop</includeFunction>
										<includeFunction>fuse_loop_cfg_create</includeFunction>
										<includeFunction>fuse_loop_cfg_set_clone_fd</includeFunction>
										<includeFunction>fuse_loop_cfg_set_max_threads</includeFunction>
										<includeFunction>fuse_loop_cfg_destroy</includeFunction>
										<includeFunction>fuse_loop_mt</includeFunction>
										<includeFunction>fuse_exit</includeFunction>
										<includeFunction>fuse_unmount</includeFunction>
										<includeFunction>fuse_destroy</includeFunction>
									</includeFunctions>
									<includeTypedefs>
										<includeTypedef>fuse_fill_dir_t</includeTypedef>
									</includeTypedefs>
									<includeStructs>
										<includeStruct>fuse_operations</includeStruct>
										<includeStruct>fuse_file_info</includeStruct>
										<includeStruct>stat</includeStruct>
										<includeStruct>statvfs</includeStruct>
										<includeStruct>timespec</includeStruct>
										<includeStruct>fuse_conn_info</includeStruct>
										<includeStruct>fuse_config</includeStruct>
										<includeStruct>fuse_args</includeStruct>
										<includeStruct>fuse_loop_config_v1</includeStruct>
									</includeStructs>
								</configuration>
							</execution>
							<execution>
								<id>jextract-fuse-lowlevel</id>
								<goals>
									<goal>sources</goal>
								</goals>
								<configuration>
									<headerFile>${project.parent.basedir}/libfuse3/include/fuse_lowlevel.h</headerFile>
									<targetPackage>org.cryptomator.jfuse.linux.amd64.extr</targetPackage>
									<headerClassName>fuse_lowlevel_h</headerClassName>
									<cPreprocessorMacros>
										<cPreprocessorMacro>_FILE_OFFSET_BITS=64</cPreprocessorMacro>
										<cPreprocessorMacro>FUSE_USE_VERSION=312</cPreprocessorMacro>
									</cPreprocessorMacros>
									<includeStructs>
										<includeStruct>fuse_cmdline_opts</includeStruct>
									</includeStructs>
								</configuration>
							</execution>
							<execution>
								<id>jextract-errno</id>
								<goals>
									<goal>sources</goal>
								</goals>
								<configuration>
									<headerFile>${linux.headerSearchPath}/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-stat</id>
								<goals>
									<goal>sources</goal>
								</goals>
								<configuration>
									<headerFile>${linux.headerSearchPath}/sys/stat.h</headerFile>
									<headerClassName>stat_h</headerClassName>
									<includeMacros>
										<includeMacro>UTIME_NOW</includeMacro>
										<includeMacro>UTIME_OMIT</includeMacro>
									</includeMacros>
								</configuration>
							</execution>
							<execution>
								<id>jextract-fcntl</id>
								<goals>
									<goal>sources</goal>
								</goals>
								<configuration>
									<headerFile>${linux.headerSearchPath}/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>
										<includeMacro>O_DSYNC</includeMacro>
										<includeMacro>O_SYNC</includeMacro>
									</includeMacros>
								</configuration>
							</execution>
							<execution>
								<id>jextract-stdio</id>
								<goals>
									<goal>sources</goal>
								</goals>
								<configuration>
									<headerFile>${linux.headerSearchPath}/stdio.h</headerFile>
									<headerClassName>stdio_h</headerClassName>
									<cPreprocessorMacros>
										<cPreprocessorMacro>_GNU_SOURCE=1</cPreprocessorMacro>
									</cPreprocessorMacros>
									<includeMacros>
										<!-- GNU-specific flags for rename: -->
										<includeMacro>RENAME_NOREPLACE</includeMacro>
										<includeMacro>RENAME_EXCHANGE</includeMacro>
										<includeMacro>RENAME_WHITEOUT</includeMacro>
									</includeMacros>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>

</project>