aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeonard Kugis <leonard@kug.is>2025-10-02 17:57:20 +0200
committerLeonard Kugis <leonard@kug.is>2025-10-02 17:57:20 +0200
commit0b693eca087419554361df06c66664a3c651fe74 (patch)
tree9fb0c363e446308561d9b478d2fe2515ede2963f
parent65e1d31000f6a31c882134277758b03cb980581a (diff)
downloadbindfs-0b693eca087419554361df06c66664a3c651fe74.tar.gz
Adjusted meson config for android compatibility
-rw-r--r--meson.build135
-rw-r--r--meson/android28-aarch6432
-rw-r--r--src/bindfs.c7
-rw-r--r--src/meson.build15
4 files changed, 122 insertions, 67 deletions
diff --git a/meson.build b/meson.build
index 7f2adef..bcef245 100644
--- a/meson.build
+++ b/meson.build
@@ -1,78 +1,95 @@
-project(
- 'bindfs',
- 'c',
- version: '0.0.0',
- default_options: ['warning_level=2', 'c_std=gnu11']
+project('bindfs', 'c',
+ version: '1.18.2',
+ default_options: [
+ 'c_std=gnu11', # wie configure.ac für FUSE3
+ 'warning_level=2'
+ ]
)
+# --- config.h erzeugen (Ersatz für AC_CONFIG_HEADERS + Checks) ---
cc = meson.get_compiler('c')
+conf = configuration_data()
+
+# Entspricht PACKAGE_STRING aus configure.ac
+conf.set('PACKAGE_STRING', '"@0@ @1@"'.format(meson.project_name(), meson.project_version()))
-# ---- Abhängigkeiten ----
-# Bevorzuge FUSE2 (alte API), falle auf FUSE3 zurück.
-fuse_dep = dependency('fuse', required: false) # pkg-config: fuse (FUSE2)
-if fuse_dep.found()
- add_project_arguments('-DFUSE_USE_VERSION=26', language: 'c') # FUSE2 API
-else
- fuse_dep = dependency('fuse3', required: true)
- add_project_arguments('-DFUSE_USE_VERSION=30', language: 'c') # FUSE3 API
- add_project_arguments('-DBINDFS_USE_FUSE3', language: 'c')
+# Header-/Funktions-Checks wie in configure.ac
+if cc.has_header('sys/file.h')
+ conf.set('HAVE_SYS_FILE_H', 1)
endif
-threads_dep = dependency('threads', required: true)
-dl_dep = cc.find_library('dl', required: true)
-rt_dep = cc.find_library('rt', required: false)
-iconv_dep = dependency('iconv', required: false)
+# utimensat / lutimes / futimesat
+if cc.has_function('utimensat', prefix: '''
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+''')
+ conf.set('HAVE_UTIMENSAT', 1)
+endif
-deps = [fuse_dep, threads_dep, dl_dep]
-if rt_dep.found()
- deps += rt_dep
+if cc.has_function('lutimes', prefix: '#include <sys/time.h>')
+ conf.set('HAVE_LUTIMES', 1)
endif
-if iconv_dep.found()
- deps += iconv_dep
+
+if cc.has_function('futimesat', prefix: '''
+ #include <sys/time.h>
+ #include <fcntl.h>
+''')
+ conf.set('HAVE_FUTIMESAT', 1)
endif
-# ---- Allgemeine Compiler-Flags ----
-# GNU-Extensions (pipe2 etc.) & große Offsets.
-add_project_arguments(
- '-D_GNU_SOURCE',
- '-D_FILE_OFFSET_BITS=64',
- # S_ISDIR etc.: stellt sicher, dass <sys/stat.h> überall drin ist
- '-include', 'sys/stat.h',
- language: 'c'
-)
+# xattr-Funktionen
+foreach f : ['setxattr','getxattr','listxattr','removexattr',
+ 'lsetxattr','lgetxattr','llistxattr','lremovexattr']
+ if cc.has_function(f, prefix: '#include <sys/xattr.h>')
+ conf.set('HAVE_@0@'.format(f.to_upper()), 1)
+ endif
+endforeach
+
+# struct stat ... tv_nsec vorhanden?
+have_stat_nsec = cc.compiles('''
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
+ int main(void){ struct stat st; st.st_mtim.tv_nsec = 123; return 0; }
+''')
+if have_stat_nsec
+ conf.set('HAVE_STAT_NANOSEC', 1)
+endif
-# ---- Feature-Checks (ersetzt configure.ac) ----
-# Achtung: passende Includes pro Funktion setzen.
-have_pipe2 = cc.has_function('pipe2', prefix: '#include <unistd.h>')
-have_posix_spawn = cc.has_function('posix_spawn', prefix: '#include <spawn.h>')
-have_copy_file_range = cc.has_function('copy_file_range', prefix: '#include <unistd.h>')
+# config.h in der Build-Root erzeugen
+configure_file(output: 'config.h', configuration: conf)
-# Utimens-Varianten – bindfs.c entscheidet anhand dieser Makros:
-have_utimensat = cc.has_function('utimensat', prefix: '#define _GNU_SOURCE\n#include <sys/stat.h>\n#include <fcntl.h>')
-have_lutimes = cc.has_function('lutimes', prefix: '#include <sys/time.h>')
-have_futimesat = cc.has_function('futimesat', prefix: '#include <sys/time.h>\n#include <fcntl.h>\n#include <unistd.h>')
+# Dependencies
+fuse3_dep = dependency('fuse3', version: '>=3.4.0', required: true)
+#threads = dependency('threads')
+dl_dep = cc.find_library('dl', required: true)
+iconv_dep = dependency('iconv', required: false) # Android: yes; Linux: ja nach System
-conf = configuration_data()
-conf.set('HAVE_PIPE2', have_pipe2)
-conf.set('HAVE_POSIX_SPAWN', have_posix_spawn)
-conf.set('HAVE_COPY_FILE_RANGE', have_copy_file_range)
+# Entspricht my_CPPFLAGS in configure.ac
+add_project_arguments(
+ [
+ '-D_REENTRANT',
+ '-D_FILE_OFFSET_BITS=64',
+ '-D_XOPEN_SOURCE=700',
+ '-D__BSD_VISIBLE=1',
+ '-D_BSD_SOURCE',
+ '-D_DEFAULT_SOURCE',
+ # Autotools bei FUSE3:
+ '-DHAVE_FUSE_3=1',
+ '-DFUSE_USE_VERSION=34', # genau wie CHECK_FUSE3 in configure.ac
+ ],
+ language: 'c'
+)
-# Diese drei sind wichtig, damit der #error in bindfs_utimens nicht triggert:
-conf.set('HAVE_UTIMENSAT', have_utimensat)
-conf.set('HAVE_LUTIMES', have_lutimes)
-conf.set('HAVE_FUTIMESAT', have_futimesat)
+add_project_arguments(['-include', 'sys/stat.h'], language: 'c') # required for S_ISDIR
-# Autotools-kompatible Makros, die der Code nutzt
-conf.set_quoted('PACKAGE_NAME', meson.project_name())
-conf.set_quoted('PACKAGE_VERSION', meson.project_version())
-conf.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + meson.project_version())
+# Entspricht my_CFLAGS / my_LDFLAGS
+add_project_arguments(['-Wall','-Wextra','-Wpedantic','-fno-common'], language: 'c')
-# Exakt "config.h" erzeugen (liegt im Build-Root)
-configure_file(output: 'config.h', configuration: conf)
+add_project_arguments(['-pthread'], language: 'c')
+add_project_link_arguments(['-pthread'], language: 'c')
-# ---- Unterverzeichnisse ----
subdir('src')
-# ---- Manpage installieren ----
-install_data('src/bindfs.1', install_dir: get_option('mandir') / 'man1')
-
diff --git a/meson/android28-aarch64 b/meson/android28-aarch64
new file mode 100644
index 0000000..160eac2
--- /dev/null
+++ b/meson/android28-aarch64
@@ -0,0 +1,32 @@
+[binaries]
+c = '/opt/android-ndk/android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang'
+cpp = '/opt/android-ndk/android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang++'
+ar = '/opt/android-ndk/android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar'
+strip = '/opt/android-ndk/android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip'
+pkg-config = 'pkg-config'
+
+[host_machine]
+system = 'linux'
+cpu_family = 'aarch64'
+cpu = 'aarch64'
+endian = 'little'
+
+[properties]
+sys_root = '/opt/android-ndk/android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/sysroot'
+pkg_config_libdir = '/home/lk/.local/src/sysroot-bindfs-libfuse-android28-aarch64/usr/local/lib/pkgconfig'
+pkg_config_sysroot_dir = '/home/lk/.local/src/sysroot-bindfs-libfuse-android28-aarch64'
+
+[built-in options]
+c_args = [
+ '-D_GNU_SOURCE','-D__ANDROID__','-D_FILE_OFFSET_BITS=64',
+ '--sysroot=/opt/android-ndk/android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/sysroot',
+ '-I/home/lk/.local/src/sysroot-bindfs-libfuse-android28-aarch64/usr/local/include',
+ '-I/home/lk/.local/src/sysroot-bindfs-libfuse-android28-aarch64/usr/local/include/fuse3']
+cpp_args = [
+ '-D_GNU_SOURCE','-D__ANDROID__','-D_FILE_OFFSET_BITS=64',
+ '--sysroot=/opt/android-ndk/android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/sysroot',
+ '-I/home/lk/.local/src/sysroot-bindfs-libfuse-android28-aarch64/usr/local/include',
+ '-I/home/lk/.local/src/sysroot-bindfs-libfuse-android28-aarch64/usr/local/include/fuse3']
+c_link_args = ['--sysroot=/opt/android-ndk/android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/sysroot',
+ '-L/home/lk/.local/src/sysroot-bindfs-libfuse-android28-aarch64/usr/local/lib']
+cpp_link_args = ['--sysroot=/opt/android-ndk/android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64/sysroot']
diff --git a/src/bindfs.c b/src/bindfs.c
index 15e3c46..4394b4f 100644
--- a/src/bindfs.c
+++ b/src/bindfs.c
@@ -81,7 +81,12 @@
#endif
#endif
-#include <fuse.h>
+#if defined(BINDFS_USE_FUSE3) || (defined(__has_include) && __has_include(<fuse3/fuse.h>))
+ #include <fuse3/fuse.h>
+#else
+ #include <fuse.h>
+#endif
+
#include <fuse_opt.h>
#include "arena.h"
diff --git a/src/meson.build b/src/meson.build
index 4e72ffa..ab09095 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -9,15 +9,16 @@ srcs = files(
'rate_limiter.c',
)
-# Wichtig: relative Includes!
-# '.' -> src/ (Source + Build von src/)
-# '..' -> Projekt-Root (Source + Build-Root -> dort liegt build/config.h)
-inc = include_directories('.', '..')
+inc = include_directories('..', '.')
-executable('bindfs',
- sources: srcs,
+executable('bindfs', srcs,
include_directories: inc,
- dependencies: deps,
+ dependencies: [
+ fuse3_dep,
+ #threads,
+ dl_dep,
+ iconv_dep
+ ],
install: true
)