setup_mpatch_cffi.py
changeset 29871 90af59b40d8a
equal deleted inserted replaced
29870:6d11ae3c4c4b 29871:90af59b40d8a
       
     1 from __future__ import absolute_import
       
     2 
       
     3 import cffi
       
     4 import os
       
     5 
       
     6 ffi = cffi.FFI()
       
     7 mpatch_c = os.path.join(os.path.join(os.path.dirname(__file__), 'mercurial',
       
     8                                      'mpatch.c'))
       
     9 ffi.set_source("_mpatch_cffi", open(mpatch_c).read(),
       
    10                include_dirs=["mercurial"])
       
    11 ffi.cdef("""
       
    12 
       
    13 struct mpatch_frag {
       
    14        int start, end, len;
       
    15        const char *data;
       
    16 };
       
    17 
       
    18 struct mpatch_flist {
       
    19        struct mpatch_frag *base, *head, *tail;
       
    20 };
       
    21 
       
    22 extern "Python" struct mpatch_flist* cffi_get_next_item(void*, ssize_t);
       
    23 
       
    24 int mpatch_decode(const char *bin, ssize_t len, struct mpatch_flist** res);
       
    25 ssize_t mpatch_calcsize(size_t len, struct mpatch_flist *l);
       
    26 void mpatch_lfree(struct mpatch_flist *a);
       
    27 static int mpatch_apply(char *buf, const char *orig, size_t len,
       
    28                         struct mpatch_flist *l);
       
    29 struct mpatch_flist *mpatch_fold(void *bins,
       
    30                        struct mpatch_flist* (*get_next_item)(void*, ssize_t),
       
    31                        ssize_t start, ssize_t end);
       
    32 """)
       
    33 
       
    34 if __name__ == '__main__':
       
    35     ffi.compile()