mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
This is a major redesign a modernization of Sysprof. The core data structures and design are largely the same, but it has been ported to Gtk3 and has lots of additions that should make your profiling experience smoother. Especially for those that are new to profiling. There are some very simple help docs added, but we really need the experts to come in and write some documentation here.
135 lines
4.6 KiB
Plaintext
135 lines
4.6 KiB
Plaintext
# fcntl-o.m4 serial 4
|
|
dnl Copyright (C) 2006, 2009-2015 Free Software Foundation, Inc.
|
|
dnl This file is free software; the Free Software Foundation
|
|
dnl gives unlimited permission to copy and/or distribute it,
|
|
dnl with or without modifications, as long as this notice is preserved.
|
|
|
|
dnl Written by Paul Eggert.
|
|
|
|
# Test whether the flags O_NOATIME and O_NOFOLLOW actually work.
|
|
# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise.
|
|
# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise.
|
|
AC_DEFUN([gl_FCNTL_O_FLAGS],
|
|
[
|
|
dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW.
|
|
dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
|
|
dnl AC_GNU_SOURCE.
|
|
m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
|
|
[AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
|
|
[AC_REQUIRE([AC_GNU_SOURCE])])
|
|
|
|
AC_CHECK_HEADERS_ONCE([unistd.h])
|
|
AC_CHECK_FUNCS_ONCE([symlink])
|
|
AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
|
|
[AC_RUN_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#if HAVE_UNISTD_H
|
|
# include <unistd.h>
|
|
#else /* on Windows with MSVC */
|
|
# include <io.h>
|
|
# include <stdlib.h>
|
|
# defined sleep(n) _sleep ((n) * 1000)
|
|
#endif
|
|
#include <fcntl.h>
|
|
#ifndef O_NOATIME
|
|
#define O_NOATIME 0
|
|
#endif
|
|
#ifndef O_NOFOLLOW
|
|
#define O_NOFOLLOW 0
|
|
#endif
|
|
static int const constants[] =
|
|
{
|
|
O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
|
|
O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
|
|
};
|
|
]],
|
|
[[
|
|
int result = !constants;
|
|
#if HAVE_SYMLINK
|
|
{
|
|
static char const sym[] = "conftest.sym";
|
|
if (symlink ("/dev/null", sym) != 0)
|
|
result |= 2;
|
|
else
|
|
{
|
|
int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
|
|
if (fd >= 0)
|
|
{
|
|
close (fd);
|
|
result |= 4;
|
|
}
|
|
}
|
|
if (unlink (sym) != 0 || symlink (".", sym) != 0)
|
|
result |= 2;
|
|
else
|
|
{
|
|
int fd = open (sym, O_RDONLY | O_NOFOLLOW);
|
|
if (fd >= 0)
|
|
{
|
|
close (fd);
|
|
result |= 4;
|
|
}
|
|
}
|
|
unlink (sym);
|
|
}
|
|
#endif
|
|
{
|
|
static char const file[] = "confdefs.h";
|
|
int fd = open (file, O_RDONLY | O_NOATIME);
|
|
if (fd < 0)
|
|
result |= 8;
|
|
else
|
|
{
|
|
struct stat st0;
|
|
if (fstat (fd, &st0) != 0)
|
|
result |= 16;
|
|
else
|
|
{
|
|
char c;
|
|
sleep (1);
|
|
if (read (fd, &c, 1) != 1)
|
|
result |= 24;
|
|
else
|
|
{
|
|
if (close (fd) != 0)
|
|
result |= 32;
|
|
else
|
|
{
|
|
struct stat st1;
|
|
if (stat (file, &st1) != 0)
|
|
result |= 40;
|
|
else
|
|
if (st0.st_atime != st1.st_atime)
|
|
result |= 64;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return result;]])],
|
|
[gl_cv_header_working_fcntl_h=yes],
|
|
[case $? in #(
|
|
4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
|
|
64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
|
|
68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
|
|
*) gl_cv_header_working_fcntl_h='no';;
|
|
esac],
|
|
[gl_cv_header_working_fcntl_h=cross-compiling])])
|
|
|
|
case $gl_cv_header_working_fcntl_h in #(
|
|
*O_NOATIME* | no | cross-compiling) ac_val=0;; #(
|
|
*) ac_val=1;;
|
|
esac
|
|
AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val],
|
|
[Define to 1 if O_NOATIME works.])
|
|
|
|
case $gl_cv_header_working_fcntl_h in #(
|
|
*O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
|
|
*) ac_val=1;;
|
|
esac
|
|
AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val],
|
|
[Define to 1 if O_NOFOLLOW works.])
|
|
])
|