docs: def find_lib_fpath(libname, root_dir, recurse_down=True, verbose=False, debug=False):
      """ Search for the library """
  
      def get_lib_fname_list(libname):
          """
          input <libname>: library name (e.g. 'hesaff', not 'libhesaff')
          returns <libnames>: list of plausible library file names
          """
          if sys.platform.startswith('win32'):
              libnames = ['lib' + libname + '.dll', libname + '.dll']
          elif sys.platform.startswith('darwin'):
              libnames = ['lib' + libname + '.dylib']
          elif sys.platform.startswith('linux'):
              libnames = ['lib' + libname + '.so']
          else:
              raise Exception('Unknown operating system: %s' % sys.platform)
          return libnames
  
      def get_lib_dpath_list(root_dir):
          """
          input <root_dir>: deepest directory to look for a library (dll, so, dylib)
          returns <libnames>: list of plausible directories to look.
          """
          'returns possible lib locations'
          get_lib_dpath_list = [root_dir,
                                join(root_dir, 'lib'),
                                join(root_dir, 'build'),
                                join(root_dir, 'build', 'lib')]
          return get_lib_dpath_list
  
      lib_fname_list = get_lib_fname_list(libname)
      tried_fpaths = []
      while root_dir is not None:
          for lib_fname in lib_fname_list:
              for lib_dpath in get_lib_dpath_list(root_dir):
                  lib_fpath = normpath(join(lib_dpath, lib_fname))
                  if exists(lib_fpath):
                      if verbose:
                          print('\n[c] Checked: '.join(tried_fpaths))
                      if debug:
                          print('using: %r' % lib_fpath)
                      return lib_fpath
                  else:
                      # Remember which candiate library fpaths did not exist
                      tried_fpaths.append(lib_fpath)
              _new_root = dirname(root_dir)
              if _new_root == root_dir:
                  root_dir = None
                  break
              else:
                  root_dir = _new_root
          if not recurse_down:
              break
  
      msg = ('\n[C!] load_clib(libname=%r root_dir=%r, recurse_down=%r, verbose=%r)' %
             (libname, root_dir, recurse_down, verbose) +
             '\n[c!] Cannot FIND dynamic library')
      print(msg)
      print('\n[c!] Checked: '.join(tried_fpaths))
      raise ImportError(msg)