bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

new modules 'uname', 'sys_utsname'


From: Bruno Haible
Subject: new modules 'uname', 'sys_utsname'
Date: Sun, 2 Aug 2009 16:57:15 +0200
User-agent: KMail/1.9.9

Now that gethostname is supported on all platforms, it's easy to add
support for the uname() function on all platforms.

Here is a proposed module 'sys_utsname', and a proposed module 'uname'
in the next mail.


2009-08-02  Bruno Haible  <address@hidden>

        New module 'sys_utsname'.
        * lib/sys_utsname.in.h: New file, based on glibc's <sys/utsname.h>.
        * m4/sys_utsname_h.m4: New file.
        * modules/sys_utsname: New file.
        * doc/posix-headers/sys_utsname.texi: Mention the new module.

============================ lib/sys_utsname.in.h ============================
/* Substitute for <sys/utsname.h>.
   Copyright (C) 2009 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software Foundation,
   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */

#ifndef _GL_SYS_UTSNAME_H
#define _GL_SYS_UTSNAME_H

/* The definition of GL_LINK_WARNING is copied here.  */


#ifdef __cplusplus
extern "C" {
#endif


/* Length of the entries in 'struct utsname' is 256.  */
#define _UTSNAME_LENGTH 256

#ifndef _UTSNAME_NODENAME_LENGTH
# define _UTSNAME_NODENAME_LENGTH _UTSNAME_LENGTH
#endif
#ifndef _UTSNAME_SYSNAME_LENGTH
# define _UTSNAME_SYSNAME_LENGTH _UTSNAME_LENGTH
#endif
#ifndef _UTSNAME_RELEASE_LENGTH
# define _UTSNAME_RELEASE_LENGTH _UTSNAME_LENGTH
#endif
#ifndef _UTSNAME_VERSION_LENGTH
# define _UTSNAME_VERSION_LENGTH _UTSNAME_LENGTH
#endif
#ifndef _UTSNAME_MACHINE_LENGTH
# define _UTSNAME_MACHINE_LENGTH _UTSNAME_LENGTH
#endif

/* Structure describing the system and machine.  */
struct utsname
  {
    /* Name of this node on the network.  */
    char nodename[_UTSNAME_NODENAME_LENGTH];

    /* Name of the implementation of the operating system.  */
    char sysname[_UTSNAME_SYSNAME_LENGTH];
    /* Current release level of this implementation.  */
    char release[_UTSNAME_RELEASE_LENGTH];
    /* Current version level of this release.  */
    char version[_UTSNAME_VERSION_LENGTH];

    /* Name of the hardware type the system is running on.  */
    char machine[_UTSNAME_MACHINE_LENGTH];
  };


#if @GNULIB_UNAME@
# if address@hidden@
extern int uname (struct utsname *buf);
# endif
#elif defined GNULIB_POSIXCHECK
# undef uname
# define uname(b) \
    (GL_LINK_WARNING ("uname is unportable - " \
                      "use gnulib module uname for portability"), \
     uname (b))
#endif


#ifdef __cplusplus
}
#endif


#endif /* _GL_SYS_UTSNAME_H */
============================= m4/sys_utsname_h.m4 =============================
# sys_utsname_h.m4 serial 1
dnl Copyright (C) 2009 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 Bruno Haible.

AC_DEFUN([gl_SYS_UTSNAME_H],
[
  dnl Use AC_REQUIRE here, so that the default behavior below is expanded
  dnl once only, before all statements that occur in other macros.
  AC_REQUIRE([gl_SYS_UTSNAME_H_DEFAULTS])

  AC_CHECK_HEADERS_ONCE([sys/utsname.h])
  if test $ac_cv_header_sys_utsname_h != yes; then
    SYS_UTSNAME_H='sys/utsname.h'
  fi
])

AC_DEFUN([gl_SYS_UTSNAME_MODULE_INDICATOR],
[
  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
  AC_REQUIRE([gl_SYS_UTSNAME_H_DEFAULTS])
  
GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
])

AC_DEFUN([gl_SYS_UTSNAME_H_DEFAULTS],
[
  GNULIB_UNAME=0;   AC_SUBST([GNULIB_UNAME])
  dnl Assume proper GNU behavior unless another module says otherwise.
  HAVE_UNAME=1;     AC_SUBST([HAVE_UNAME])
  SYS_UTSNAME_H=''; AC_SUBST([SYS_UTSNAME_H])
])
============================= modules/sys_utsname =============================
Description:
A <sys/utsname.h> for systems which lack it.

Files:
lib/sys_utsname.in.h
m4/sys_utsname_h.m4

Depends-on:
link-warning

configure.ac:
gl_SYS_UTSNAME_H
AC_PROG_MKDIR_P

Makefile.am:
BUILT_SOURCES += $(SYS_UTSNAME_H)

# We need the following in order to create <sys/utsname.h> when the system
# does not have one.
sys/utsname.h: sys_utsname.in.h
        @MKDIR_P@ sys
        rm -f address@hidden $@
        { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
          sed -e 's|@''GNULIB_UNAME''@|$(GNULIB_UNAME)|g' \
              -e 's|@''HAVE_UNAME''@|$(HAVE_UNAME)|g' \
              -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
              < $(srcdir)/sys_utsname.in.h; \
        } > address@hidden
        mv address@hidden $@
MOSTLYCLEANFILES += sys/utsname.h sys/utsname.h-t
MOSTLYCLEANDIRS += sys

Include:
#include <sys/utsname.h>

License:
LGPLv2+

Maintainer:
Bruno Haible




reply via email to

[Prev in Thread] Current Thread [Next in Thread]