[prev in list] [next in list] [prev in thread] [next in thread]
List: ltp-list
Subject: [LTP] Introdocing autoconf to signalfd test case
From: Masatake YAMATO <yamato () redhat ! com>
Date: 2008-10-31 6:39:26
Message-ID: 20081031.153926.67495329.yamato () redhat ! com
[Download RAW message or body]
Hi,
I've clean my signalfd test case up with autoconf.
After applying the patch, do at ltp/
autoconf
autoheader
./configure
make (or cd testcases/kernel/syscalls/signalfd; make)
Benefits are:
- signalfd01.c doesn't depends on kernel version
(it used KERNEL_VERSION macro.)
- Makefile becomes simple.
- #ifdef/#endif of signalfd01.c becomes readable.
- signalfd.m4 can use other program than ltp.
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..977b49b
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,9 @@
+AC_INIT([ltp])
+AC_CONFIG_HEADERS([include/config.h])
+
+
+m4_include([m4/signalfd.m4])
+LTP_CHECK_SYSCALL_SIGNALFD
+
+
+AC_OUTPUT
\ No newline at end of file
diff --git a/m4/signalfd.m4 b/m4/signalfd.m4
new file mode 100644
index 0000000..ca8a715
--- /dev/null
+++ b/m4/signalfd.m4
@@ -0,0 +1,91 @@
+dnl
+dnl Copyright (c) Red Hat Inc., 2008
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+dnl the GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+dnl
+dnl Author: Masatake YAMATO <yamato@redhat.com>
+dnl
+
+dnl
+dnl LTP_CHECK_SYSCALL_SIGNALFD
+dnl --------------------------
+dnl
+dnl * Checking the existence of the libc wrapper for signalfd.
+dnl If it exists, a shell variable LTP_SYSCALL_SIGNALFD_FUNCTION is set to "yes".
+dnl
+dnl * Checking the existence of signalfd.h.
+dnl If it exists, a shell variable LTP_SYSCALL_SIGNALFD_HEADER is set to "yes".
+dnl
+dnl * Checking the prefix used in fileds for signalfd_siginfo structure.
+dnl If it exists, a shell variable LTP_SYSCALL_SIGNALFD_FIELD_PREFIX is set to \
"given". +dnl
+dnl About cpp macros defined in this macro,
+dnl see testcases/kernel/syscalls/signalfd/signalfd01.c of ltp.
+dnl
+
+AC_DEFUN([LTP_CHECK_SYSCALL_SIGNALFD],
+[dnl
+_LTP_CHECK_SYSCALL_SIGNALFD_FUNCTION
+_LTP_CHECK_SYSCALL_SIGNALFD_HEADER
+
+if test "$LTP_SYSCALL_SIGNALFD_HEADER" = yes; then
+ _LTP_CHECK_SYSCALL_SIGNALFD_FIELD_PREFIX
+fi]dnl
+)dnl
+
+dnl _LTP_CHECK_SYSCALL_SIGNALFD_FUNCTION
+dnl ------------------------------------
+dnl
+dnl
+AC_DEFUN([_LTP_CHECK_SYSCALL_SIGNALFD_FUNCTION],[dnl
+AC_CHECK_FUNCS(signalfd,[LTP_SYSCALL_SIGNALFD_FUNCTION=yes])])
+
+dnl _LTP_CHECK_SYSCALL_SIGNALFD_HEADER
+dnl ----------------------------------
+dnl
+dnl
+AC_DEFUN([_LTP_CHECK_SYSCALL_SIGNALFD_HEADER],
+[dnl
+AC_CHECK_HEADERS([linux/types.h])
+AC_CHECK_HEADERS(sys/signalfd.h linux/signalfd.h signalfd.h,[dnl
+LTP_SYSCALL_SIGNALFD_HEADER=yes],[],[dnl
+#ifdef HAVE_LINUX_TYPES_H
+#include <linux/types.h>
+#endif)
+]dnl
+)dnl
+]dnl
+)dnl
+
+dnl _LTP_CHECK_SYSCALL_SIGNALFD_FIELD_PREFIX
+dnl ----------------------------------------
+dnl
+dnl
+AC_DEFUN([_LTP_CHECK_SYSCALL_SIGNALFD_FIELD_PREFIX],
+[dnl
+AC_CHECK_MEMBERS([struct signalfd_siginfo.ssi_signo, struct \
signalfd_siginfo.signo],[dnl +LTP_SYSCALL_SIGNALFD_FIELD_PREFIX=given],[],[dnl
+#ifdef HAVE_LINUX_TYPES_H
+#include <linux/types.h>
+#endif
+#if defined HAVE_SYS_SIGNALFD_H
+#include <sys/signalfd.h>
+#elif defined HAVE_LINUX_SIGNALFD_H
+#include <linux/signalfd.h>
+#elif defined HAVE_SIGNALFD_H
+#include <signalfd.h>
+#endif])
+]dnl
+)dnl
diff --git a/testcases/kernel/containers/netns/container_ftp.pl \
b/testcases/kernel/containers/netns/container_ftp.pl old mode 100644
new mode 100755
diff --git a/testcases/kernel/syscalls/signalfd/Makefile \
b/testcases/kernel/syscalls/signalfd/Makefile index 93517da..cf5a156 100644
--- a/testcases/kernel/syscalls/signalfd/Makefile
+++ b/testcases/kernel/syscalls/signalfd/Makefile
@@ -15,15 +15,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-
-include ../utils/cond.mk
-
-
-CFLAGS += -I../../../../include \
- $(call check_header,sys/signalfd.h, -DHAS_SYS_SIGNALFD_H -DHAS_SIGNALFD, ) \
- $(call check_header,linux/signalfd.h, -DHAS_LINUX_SIGNALFD_H -DHAS_SIGNALFD, ) \
- $(call check_header,signalfd.h, -DHAS_SIGNALFD_H -DHAS_SIGNALFD, ) \
- -Wall
+CFLAGS += -I../../../../include -Wall
LDLIBS += -L../../../../lib -lltp
SRCS = $(wildcard *.c)
diff --git a/testcases/kernel/syscalls/signalfd/signalfd01.c \
b/testcases/kernel/syscalls/signalfd/signalfd01.c index f4ac38f..3011a76 100644
--- a/testcases/kernel/syscalls/signalfd/signalfd01.c
+++ b/testcases/kernel/syscalls/signalfd/signalfd01.c
@@ -35,6 +35,8 @@
*/
# define _GNU_SOURCE
+#include "config.h"
+
#include "test.h"
#include "usctest.h"
@@ -50,42 +52,52 @@ TCID_DEFINE(signalfd01);
int TST_TOTAL = 1;
extern int Tst_count;
-#ifdef HAS_SIGNALFD
-#include <linux/version.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
-#define SSI_SIGNO signo
-#else
-#define SSI_SIGNO ssi_signo
-#endif
-
-
-#ifdef HAS_SYS_SIGNALFD_H
-
-#include <sys/signalfd.h>
-
-#elif HAS_LINUX_SIGNALFD_H || HAS_SIGNALFD_H
+#ifdef HAVE_LINUX_TYPES_H
#include <linux/types.h>
+#endif
-#ifdef HAS_LINUX_SIGNALFD_H
+#if defined HAVE_SYS_SIGNALFD_H
+#include <sys/signalfd.h>
+#elif defined HAVE_LINUX_SIGNALFD_H
#include <linux/signalfd.h>
-#else
+#elif defined HAVE_SIGNALFD_H
#include <signalfd.h>
-#endif /* HAS_LINUX_SIGNALFD_H */
+#else
+#define USE_STUB
+#endif
+#ifndef HAVE_SIGNALFD
#include "linux_syscall_numbers.h"
#ifndef __NR_signalfd
#define __NR_signalfd 0
#endif
-
int
signalfd(int fd, const sigset_t *mask, int flags)
{
/* Taken from GLIBC. */
return (syscall(__NR_signalfd, fd, mask, _NSIG / 8));
}
+#endif
+
+#if defined HAVE_SIGNALFD_SIGINFO_SSI_SIGNO
+#define LTP_SYSCALL_SIGNALFD_FIELD_PREFIX(FIELD) ssi_##FIELD
+#elif defined HAVE_SIGNALFD_SIGINFO_SIGNO
+#define LTP_SYSCALL_SIGNALFD_FIELD_PREFIX(FIELD) FIELD
+#else
+#define USE_STUB
+#endif
+
+#ifdef USE_STUB
+int
+main(int argc, char** argv)
+{
+ tst_resm(TCONF,
+ "System doesn't support execution of the test");
+ return 0;
+}
+#else
-#endif /* HAS_SYS_SIGNALFD_H */
void cleanup(void);
void setup(void);
@@ -177,15 +189,15 @@ do_test1(int ntst, int sig)
goto out;
}
- if (fdsi.SSI_SIGNO == sig) {
+ if (fdsi.LTP_SYSCALL_SIGNALFD_FIELD_PREFIX(signo) == sig) {
tst_resm(TPASS, "got expected signal");
sfd_for_next = sfd;
goto out;
}
else {
tst_resm(TFAIL, "got unexpected signal: signal=%d : %s",
- fdsi.SSI_SIGNO,
- strsignal(fdsi.SSI_SIGNO));
+ fdsi.LTP_SYSCALL_SIGNALFD_FIELD_PREFIX(signo),
+ strsignal(fdsi.LTP_SYSCALL_SIGNALFD_FIELD_PREFIX(signo)));
sfd_for_next = -1;
close(sfd);
goto out;
@@ -271,14 +283,14 @@ do_test2(int ntst, int fd, int sig)
goto out;
}
- if (fdsi.SSI_SIGNO == sig) {
+ if (fdsi.LTP_SYSCALL_SIGNALFD_FIELD_PREFIX(signo) == sig) {
tst_resm(TPASS, "got expected signal");
goto out;
}
else {
tst_resm(TFAIL, "got unexpected signal: signal=%d : %s",
- fdsi.SSI_SIGNO,
- strsignal(fdsi.SSI_SIGNO));
+ fdsi.LTP_SYSCALL_SIGNALFD_FIELD_PREFIX(signo),
+ strsignal(fdsi.LTP_SYSCALL_SIGNALFD_FIELD_PREFIX(signo)));
goto out;
}
out:
@@ -348,16 +360,5 @@ cleanup(void)
tst_exit();
}
+#endif
-#else /* !HAS_SIGNALFD */
-
-int
-main(int argc, char** argv)
-{
- tst_resm(TCONF,
- "System doesn't support execution of the test");
- return 0;
-}
-
-
-#endif /* !HAS_SIGNALFD */
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic