forked from kpdyer/regex2dfa
-
Notifications
You must be signed in to change notification settings - Fork 0
/
regex2dfa_build.py
46 lines (35 loc) · 948 Bytes
/
regex2dfa_build.py
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
from os.path import abspath, dirname, join
from cffi import FFI
regex2dfa_header = abspath(join(dirname(__file__), 'src', 'regex2dfa.h'))
ffi = FFI()
ffi.cdef(
"""
const char * cffi_regex2dfa(char *regex, uint32_t len);
void free(void *ptr);
"""
)
ffi.set_source(
'_regex2dfa',
"""
#include "%s"
extern "C" {
extern const char * cffi_regex2dfa(char *regex, uint32_t len) {
const std::string input_regex = std::string(regex, len);
std::string minimized_dfa;
regex2dfa::Regex2Dfa(input_regex, &minimized_dfa);
return strdup(minimized_dfa.c_str());
}
}
""" % regex2dfa_header,
source_extension='.cpp',
library_dirs=['.libs'],
libraries=['regex2dfa'],
extra_compile_args=[
'-O3',
'-fstack-protector-all',
'-D_FORTIFY_SOURCE',
'-fPIC',
],
)
if __name__ == '__main__':
ffi.compile()