gitlab.com/thomasboni/go-enry/v2@v2.8.3-0.20220418031202-30b0d7a3de98/python/build_enry.py (about)

     1  from cffi import FFI
     2  import os
     3  from pathlib import Path
     4  
     5  ffibuilder = FFI()
     6  
     7  # cdef() expects a single string declaring the C types, functions and
     8  # globals needed to use the shared object. It must be in valid C syntax.
     9  # Taken from java/shared/libenry.h
    10  ffibuilder.cdef(
    11      """
    12  typedef unsigned char GoUint8;
    13  typedef long long GoInt64;
    14  typedef GoInt64 GoInt;
    15  
    16  typedef struct { const char *p; ptrdiff_t n; } _GoString_;
    17  typedef _GoString_ GoString;
    18  
    19  typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;
    20  
    21  
    22  extern GoString GetLanguage(GoString p0, GoSlice p1);
    23  
    24  /* Return type for GetLanguageByContent */
    25  struct GetLanguageByContent_return {
    26      GoString r0; /* language */
    27      GoUint8 r1; /* safe */
    28  };
    29  
    30  extern struct GetLanguageByContent_return GetLanguageByContent(GoString p0, GoSlice p1);
    31  
    32  /* Return type for GetLanguageByEmacsModeline */
    33  struct GetLanguageByEmacsModeline_return {
    34      GoString r0; /* language */
    35      GoUint8 r1; /* safe */
    36  };
    37  
    38  extern struct GetLanguageByEmacsModeline_return GetLanguageByEmacsModeline(GoSlice p0);
    39  
    40  /* Return type for GetLanguageByExtension */
    41  struct GetLanguageByExtension_return {
    42      GoString r0; /* language */
    43      GoUint8 r1; /* safe */
    44  };
    45  
    46  extern struct GetLanguageByExtension_return GetLanguageByExtension(GoString p0);
    47  
    48  /* Return type for GetLanguageByFilename */
    49  struct GetLanguageByFilename_return {
    50      GoString r0; /* language */
    51      GoUint8 r1; /* safe */
    52  };
    53  
    54  extern struct GetLanguageByFilename_return GetLanguageByFilename(GoString p0);
    55  
    56  /* Return type for GetLanguageByModeline */
    57  struct GetLanguageByModeline_return {
    58      GoString r0; /* language */
    59      GoUint8 r1; /* safe */
    60  };
    61  
    62  extern struct GetLanguageByModeline_return GetLanguageByModeline(GoSlice p0);
    63  
    64  /* Return type for GetLanguageByShebang */
    65  struct GetLanguageByShebang_return {
    66      GoString r0; /* language */
    67      GoUint8 r1; /* safe */
    68  };
    69  
    70  extern struct GetLanguageByShebang_return GetLanguageByShebang(GoSlice p0);
    71  
    72  /* Return type for GetLanguageByVimModeline */
    73  struct GetLanguageByVimModeline_return {
    74      GoString r0; /* language */
    75      GoUint8 r1; /* safe */
    76  };
    77  
    78  extern struct GetLanguageByVimModeline_return GetLanguageByVimModeline(GoSlice p0);
    79  
    80  extern void GetLanguageExtensions(GoString p0, GoSlice* p1);
    81  
    82  extern void GetLanguages(GoString p0, GoSlice p1, GoSlice* p2);
    83  
    84  extern void GetLanguagesByContent(GoString p0, GoSlice p1, GoSlice p2, GoSlice* p3);
    85  
    86  extern void GetLanguagesByEmacsModeline(GoString p0, GoSlice p1, GoSlice p2, GoSlice* p3);
    87  
    88  extern void GetLanguagesByExtension(GoString p0, GoSlice p1, GoSlice p2, GoSlice* p3);
    89  
    90  extern void GetLanguagesByFilename(GoString p0, GoSlice p1, GoSlice p2, GoSlice* p3);
    91  
    92  extern void GetLanguagesByModeline(GoString p0, GoSlice p1, GoSlice p2, GoSlice* p3);
    93  
    94  extern void GetLanguagesByShebang(GoString p0, GoSlice p1, GoSlice p2, GoSlice* p3);
    95  
    96  extern void GetLanguagesByVimModeline(GoString p0, GoSlice p1, GoSlice p2, GoSlice* p3);
    97  
    98  extern GoString GetMimeType(GoString p0, GoString p1);
    99  
   100  extern GoUint8 IsBinary(GoSlice p0);
   101  
   102  extern GoUint8 IsConfiguration(GoString p0);
   103  
   104  extern GoUint8 IsDocumentation(GoString p0);
   105  
   106  extern GoUint8 IsDotFile(GoString p0);
   107  
   108  extern GoUint8 IsImage(GoString p0);
   109  
   110  extern GoUint8 IsVendor(GoString p0);
   111  
   112  extern GoUint8 IsGenerated(GoString p0, GoSlice p1);
   113  
   114  extern GoString GetColor(GoString p0);
   115  """
   116  )
   117  
   118  # set_source() gives the name of the python extension module to
   119  # produce, and some C source code as a string.  This C code needs
   120  # to make the declarated functions, types and globals available,
   121  # so it is often just the "#include".
   122  lib_dir = Path(__file__).resolve().parent.parent / ".shared"
   123  lib_header = lib_dir / "libenry.h"
   124  
   125  ffibuilder.set_source(
   126      "_c_enry",
   127      f'#include "{lib_header.absolute()}"',
   128      libraries=["enry"],
   129      library_dirs=[str(lib_dir.absolute())],
   130  )  # library name, for the linker
   131  
   132  
   133  if __name__ == "__main__":
   134      ffibuilder.compile(verbose=True)