/
generate-ffi
executable file
·68 lines (61 loc) · 2.32 KB
/
generate-ffi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/bin/sh
die() {
echo "ERROR: $*"
exit 1
}
is_installed() {
type $1 > /dev/null 2>&1 || die "'$1' tool has not been found. Install it and try again"
}
is_installed bindgen
basedir=$(dirname $(readlink -f $0))/..
# Generate temporary wrapper, so we can include the required headers
cat <<EOF > $basedir/wrapper.h
#include <archive.h>
#include <archive_entry.h>
EOF
bindgen \
\
--size_t-is-usize \
\
--raw-line "#![allow(non_camel_case_types)]" \
--raw-line "pub const ARCHIVE_EOF: i32 = 1;" \
--raw-line "pub const ARCHIVE_OK: i32 = 0;" \
\
--whitelist-var "ARCHIVE_EXTRACT_TIME" \
--whitelist-var "ARCHIVE_EXTRACT_PERM" \
--whitelist-var "ARCHIVE_EXTRACT_ACL" \
--whitelist-var "ARCHIVE_EXTRACT_FFLAGS" \
--whitelist-var "ARCHIVE_EXTRACT_OWNER" \
--whitelist-var "ARCHIVE_EXTRACT_FFLAGS" \
--whitelist-var "ARCHIVE_EXTRACT_XATTR" \
--whitelist-function "archive_read_new" \
--whitelist-function "archive_read_set_seek_callback" \
--whitelist-function "archive_read_support_filter_all" \
--whitelist-function "archive_read_support_format_all" \
--whitelist-function "archive_read_support_format_raw" \
--whitelist-function "archive_read_close" \
--whitelist-function "archive_read_free" \
--whitelist-function "archive_read_data_block" \
--whitelist-function "archive_read_next_header" \
--whitelist-function "archive_read_open" \
--whitelist-function "archive_write_disk_new" \
--whitelist-function "archive_write_disk_set_options" \
--whitelist-function "archive_write_disk_set_standard_lookup" \
--whitelist-function "archive_write_header" \
--whitelist-function "archive_write_finish_entry" \
--whitelist-function "archive_write_data_block" \
--whitelist-function "archive_write_close" \
--whitelist-function "archive_write_free" \
--whitelist-function "archive_entry_pathname" \
--whitelist-function "archive_entry_free" \
--whitelist-function "archive_entry_set_pathname" \
--whitelist-function "archive_entry_set_hardlink" \
--whitelist-function "archive_entry_hardlink" \
--whitelist-function "archive_set_error" \
--whitelist-function "archive_error_string" \
--whitelist-function "archive_errno" \
\
--output $basedir/src/ffi.rs \
\
$basedir/wrapper.h
rm $basedir/wrapper.h