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 <br...@clisp.org> 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 !...@have_uname@ 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 $...@-t $@ { 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; \ } > $...@-t mv $...@-t $@ MOSTLYCLEANFILES += sys/utsname.h sys/utsname.h-t MOSTLYCLEANDIRS += sys Include: #include <sys/utsname.h> License: LGPLv2+ Maintainer: Bruno Haible