text: #define _GNU_SOURCE
  
  #include <limits.h>
  #include <stdlib.h>
  #include "ocaml_utils.h"
  
  /* Pathname resolution */
  
  /* Seems like a sane approach to getting a reasonable bound for the
     maximum path length */
  #ifdef PATH_MAX
  #define JANE_PATH_MAX ((PATH_MAX <= 0 || PATH_MAX > 65536) ? 65536 : PATH_MAX)
  #else
  #define JANE_PATH_MAX (65536)
  #endif
  
  #ifdef __GLIBC__
  CAMLprim value core_unix_realpath(value v_path)
  {
    const char *path = String_val(v_path);
    char *res = realpath(path, NULL);
    if (res == NULL) uerror("realpath", v_path);
    else {
      value v_res = caml_copy_string(res);
      free(res);
      return v_res;
    }
  }
  #else
  CAMLprim value core_unix_realpath(value v_path)
  {
    char *path = String_val(v_path);
    /* [realpath] is inherently broken without GNU-extension, and this
       seems like a reasonable thing to do if we do not build against
       GLIBC. */
    char resolved_path[JANE_PATH_MAX];
    if (realpath(path, resolved_path) == NULL) uerror("realpath", v_path);
    return caml_copy_string(resolved_path);
  }
  #endif
  