chiark / gitweb /
autoconfization
authorLennart Poettering <lennart@poettering.net>
Mon, 27 Oct 2008 18:46:50 +0000 (19:46 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 27 Oct 2008 18:46:50 +0000 (19:46 +0100)
12 files changed:
.gitignore [new file with mode: 0644]
Makefile [deleted file]
Makefile.am [new file with mode: 0644]
bootstrap.sh [new file with mode: 0755]
configure.ac [new file with mode: 0644]
doc/.gitignore [new file with mode: 0644]
doc/Makefile.am [new file with mode: 0644]
doc/README.html.in [new file with mode: 0644]
doc/style.css [new file with mode: 0644]
m4/attributes.m4 [new file with mode: 0644]
m4/zp_lynx_doc.m4 [new file with mode: 0644]
nss-myhostname.c

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..8f31d72
--- /dev/null
@@ -0,0 +1,23 @@
+.deps
+.libs
+*.cache
+configure
+Makefile
+stamp-*
+*.la
+*.lo
+*.log
+*.so.2
+Makefile.in
+aclocal.m4
+config.guess
+config.h
+config.h.in
+config.rpath
+config.status
+config.sub
+depcomp
+install-sh
+libtool
+ltmain.sh
+missing
diff --git a/Makefile b/Makefile
deleted file mode 100644 (file)
index b0cd511..0000000
--- a/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-# $Id$
-
-CFLAGS=-Wall -pipe -W -O2 -Wextra -Wno-unused-parameter -fPIC
-VERSION=0.1
-
-libnss_myhostname.so.2: nss-myhostname.o
-       $(CC) $(CFLAGS) -shared -o $@ -Wl,-soname,$@ $^
-       strip $@
-
-install:
-       install -D -g root -m 644 -o root -v libnss_myhostname.so.2 /lib/libnss_myhostname.so.2
-
-clean:
-       rm -f *.o *~ libnss_myhostname.so.2
-
-nss-myhostname-$(VERSION).tar.gz:
-       rm -rf "nss-myhostname-$(VERSION)"
-       mkdir "nss-myhostname-$(VERSION)"
-       cp Makefile LICENSE README *.c "nss-myhostname-$(VERSION)"/
-       rm -f "nss-myhostname-$(VERSION).tar.gz"
-       tar czf "nss-myhostname-$(VERSION).tar.gz" "nss-myhostname-$(VERSION)"/
-       rm -rf "nss-myhostname-$(VERSION)"
-
-tar: nss-myhostname-$(VERSION).tar.gz
-
-homepage: tar
-       test -d $$HOME/homepage/private
-       mkdir -p $$HOME/homepage/private/projects/nss-myhostname
-       cp nss-myhostname-$(VERSION).tar.gz README $$HOME/homepage/private/projects/nss-myhostname
-       ln -sf README $$HOME/homepage/private/projects/nss-myhostname/README.txt
-
-.PHONY: clean install tar homepage
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..9b1dcab
--- /dev/null
@@ -0,0 +1,51 @@
+# This file is part of nss-myhostname.
+#
+# Copyright 2008 Lennart Poettering
+#
+# nss-myhostname is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# as published by the Free Software Foundation, either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# nss-myhostname 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with nss-myhostname. If not, If not, see
+# <http://www.gnu.org/licenses/>.
+
+ACLOCAL_AMFLAGS = -I m4
+
+lib_LTLIBRARIES = libnss_myhostname.la
+
+EXTRA_DIST=bootstrap.sh README LICENSE
+SUBDIRS=doc
+
+MAINTAINERCLEANFILES=README
+noinst_DATA = README
+
+README:
+       rm -f README
+       $(MAKE) -C doc README
+       cd $(srcdir) && ln -s doc/README README
+
+homepage: all dist
+       test -d $$HOME/homepage/private
+       mkdir -p $$HOME/homepage/private/projects/nss-myhostname
+       cp nss-myhostname-@PACKAGE_VERSION@.tar.gz doc/README.html doc/style.css $$HOME/homepage/private/projects/nss-myhostname
+       ln -sf README.html $$HOME/homepage/private/projects/nss-myhostname/index.html
+
+.PHONY: homepage
+
+libnss_myhostname_la_SOURCES = nss-myhostname.c
+libnss_myhostname_la_LDFLAGS = -avoid-version -module -export-dynamic -shrext .so.2
+
+install-exec-hook:
+       rm -f $(DESTDIR)$(libdir)/libnss_myhostname.la
+       rm -f $(DESTDIR)$(libdir)/libnss_myhostname_minimal.la
+
+uninstall-hook:
+       rm -f $(DESTDIR)$(libdir)/libnss_myhostname.so.2
+       rm -f $(DESTDIR)$(libdir)/libnss_myhostname_minimal.so.2
diff --git a/bootstrap.sh b/bootstrap.sh
new file mode 100755 (executable)
index 0000000..d224f31
--- /dev/null
@@ -0,0 +1,66 @@
+#!/bin/bash
+
+# This file is part of nss-myhostname.
+#
+# Copyright 2008 Lennart Poettering
+#
+# nss-myhostname is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# as published by the Free Software Foundation, either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# nss-myhostname 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with nss-myhostname. If not, If not, see
+# <http://www.gnu.org/licenses/>.
+
+VERSION=1.9
+
+run_versioned() {
+    local P
+    local V
+
+    V=$(echo "$2" | sed -e 's,\.,,g')
+
+    if [ -e "`which $1$V 2> /dev/null`" ] ; then
+        P="$1$V"
+    else
+        if [ -e "`which $1-$2 2> /dev/null`" ] ; then
+            P="$1-$2"
+        else
+            P="$1"
+        fi
+    fi
+
+    shift 2
+    "$P" "$@"
+}
+
+set -ex
+
+if [ "x$1" = "xam" ] ; then
+    run_versioned automake "$VERSION" -a -c --foreign
+    ./config.status
+else
+    rm -rf autom4te.cache
+    rm -f config.cache
+
+    touch config.rpath
+    test "x$LIBTOOLIZE" = "x" && LIBTOOLIZE=libtoolize
+
+    mkdir -p m4
+    "$LIBTOOLIZE" -c --force
+    run_versioned aclocal "$VERSION" -I m4
+    run_versioned autoconf 2.59 -Wall
+    run_versioned autoheader 2.59
+    run_versioned automake "$VERSION" --copy --foreign --add-missing
+
+    if test "x$NOCONFIGURE" = "x"; then
+        CFLAGS="-g -O0" ./configure --sysconfdir=/etc --localstatedir=/var "$@"
+        make clean
+    fi
+fi
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..e1fbb79
--- /dev/null
@@ -0,0 +1,76 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+# This file is part of nss-myhostname.
+#
+# Copyright 2008 Lennart Poettering
+#
+# nss-myhostname is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# as published by the Free Software Foundation, either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# nss-myhostname 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with nss-myhostname. If not, If not, see
+# <http://www.gnu.org/licenses/>.
+
+AC_PREREQ(2.62)
+AC_INIT([nss-myhostname],[0.2],[mzzlubfganzr (at) 0pointer (dot) de])
+AC_CONFIG_SRCDIR([nss-myhostname.c])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR(m4)
+
+AM_INIT_AUTOMAKE([foreign 1.9 -Wall])
+
+AC_SUBST(PACKAGE_URL, [http://0pointer.de/lennart/projects/nss-myhostname/])
+
+ac_default_prefix="/"
+
+# Checks for programs.
+AC_PROG_CC
+AC_PROG_CC_C99
+AC_USE_SYSTEM_EXTENSIONS
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+
+# GCC flags
+
+DESIRED_FLAGS="-Wall -W -Wextra -pedantic -pipe -Wformat -Wold-style-definition -Wdeclaration-after-statement -Wfloat-equal -Wmissing-declarations -Wmissin
+g-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-noreturn -Wshadow -Wendif-labels -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wno-un
+used-parameter -ffast-math"
+
+for flag in $DESIRED_FLAGS ; do
+  CC_CHECK_CFLAGS([$flag], [CFLAGS="$CFLAGS $flag"])
+done
+
+# libtool stuff
+AC_DISABLE_STATIC
+AC_PROG_LIBTOOL
+
+# Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h nss.h sys/ioctl.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_TYPE_SIZE_T
+AC_HEADER_TIME
+
+# Checks for library functions.
+AC_FUNC_MALLOC
+AC_FUNC_SELECT_ARGTYPES
+AC_CHECK_FUNCS([gethostbyaddr gethostbyname gettimeofday inet_ntoa memset select socket strcspn strdup strerror strncasecmp strcasecmp strspn])
+
+# LYNX documentation generation
+ZP_LYNX_DOC
+
+AC_CONFIG_FILES([Makefile doc/Makefile doc/README.html ])
+
+AC_OUTPUT
diff --git a/doc/.gitignore b/doc/.gitignore
new file mode 100644 (file)
index 0000000..bc63974
--- /dev/null
@@ -0,0 +1,2 @@
+README
+README.html
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644 (file)
index 0000000..4f773ac
--- /dev/null
@@ -0,0 +1,38 @@
+# This file is part of nss-myhostname.
+#
+# Copyright 2008 Lennart Poettering
+#
+# nss-myhostname is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# as published by the Free Software Foundation, either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# nss-myhostname 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with nss-myhostname. If not, If not, see
+# <http://www.gnu.org/licenses/>.
+
+dist_html_DATA = README.html style.css
+EXTRA_DIST = README.html.in
+
+MAINTAINERCLEANFILES = README.html
+CLEANFILES =
+
+if USE_LYNX
+dist_doc_DATA = README
+MAINTAINERCLEANFILES += README
+
+README: README.html
+       lynx --dump $^ | sed 's,file://localhost/.*/doc/README.html,README,' > $@
+
+CLEANFILES += README
+endif
+
+tidy: README.html
+       tidy -qe < README.html ; true
+
+.PHONY: tidy
diff --git a/doc/README.html.in b/doc/README.html.in
new file mode 100644 (file)
index 0000000..4721c4d
--- /dev/null
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="iso-8859-1"?> <!-- -*-html-helper-*- -->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<title>nss-myhostname @PACKAGE_VERSION@</title>
+<link rel="stylesheet" type="text/css" href="style.css" />
+</head>
+
+<body>
+<h1><a name="top">nss-myhostname @PACKAGE_VERSION@</a></h1>
+
+<p><i>Copyright 2005-2008 Lennart Poettering &lt;@PACKAGE_BUGREPORT@&gt;</i></p>
+
+<ul class="toc">
+    <li><a href="#license">License</a></li>
+    <li><a href="#news">News</a></li>
+    <li><a href="#overview">Overview</a></li>
+    <li><a href="#status">Current Status</a></li>
+    <li><a href="#documentation">Documentation</a></li>
+    <li><a href="#requirements">Requirements</a></li>
+    <li><a href="#installation">Installation</a></li>
+    <li><a href="#acks">Acknowledgements</a></li>
+    <li><a href="#download">Download</a></li>
+</ul>
+
+<h2><a name="license">License</a></h2>
+
+<p>This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public License as
+published by the Free Software Foundation, either version 2.1 of the
+License, or (at your option) any later version.</p>
+
+<p>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
+Lesser General Public License for more details.</p>
+
+<h2><a name="news">News</a></h2>
+
+<div class="news-date">Mon Oct 27 2008: </div>
+
+<p class="news-text"><a
+href="@PACKAGE_URL@nss-myhostname-0.2.tar.gz">Version 0.2</a>
+released. Changes include: Update for IPv6 and newest glibc NSS interfaces</p>
+
+<div class="news-date">Sat Nov 19 2005: </div>
+
+<p class="news-text"><a
+href="@PACKAGE_URL@nss-myhostname-0.1.tar.gz">Version 0.1</a>
+released. Initial release.</p>
+
+<h2><a name="overview">Overview</a></h2>
+
+<p><tt>nss-myhostname</tt> is a plugin for the GNU Name Service Switch
+(NSS) functionality of the GNU C Library (<tt>glibc</tt>) providing
+host name resolution for the locally configured system hostname as
+returned by <tt>gethostname(2)</tt>. A lot of software relies on that the
+local host name is resolvable via DNS to an IPv4 or IPv6 address. When
+using dynamic hostnames this is usually achieved by
+patching <tt>/etc/hosts</tt> which however is suboptimal since it
+requires a writable <tt>/etc</tt> file system and is fragile because
+the file might also be edited by the
+administrator. <tt>nss-myhostname</tt> simply returns the IPv4
+address <tt>127.0.0.2</tt> (wich is on the local loopback) and the
+IPv6 address <tt>::1</tt> (which is the local host) for whatever
+system hostname is configured locally. Patching <tt>/etc/hostname</tt> is thus no longer necessary.</p>
+
+<h2><a name="status">Current Status</a></h2>
+
+<p>It works!</p>
+
+<h2><a name="documentation">Documentation</a></h2>
+
+<p>After compiling and installing <tt>nss-myhostname</tt> you'll find a
+new NSS modules in <tt>/lib</tt>:</p>
+<ul>
+<li><tt>libnss_myhostname.so.2</tt></li>
+</ul>
+
+<p>To activate the NSS modules you have to edit
+<tt>/etc/nsswitch.conf</tt> and add <tt>myhostname</tt> to the
+line starting with "<tt>hosts:</tt>". On Debian this looks like
+this:</p>
+
+<pre># /etc/nsswitch.conf
+
+passwd:         compat
+group:          compat
+shadow:         compat
+
+hosts:          files dns <b>myhostname</b>
+networks:       files
+
+protocols:      db files
+services:       db files
+ethers:         db files
+rpc:            db files
+
+netgroup:       nis</pre>
+
+<p>That's it. You should now always be able to resolve your local
+system hostname. For a quick check
+use <tt>glibc</tt>'s <tt>getent</tt> tool:
+
+<pre>$ getent ahosts `hostname`
+::1             STREAM omega
+::1             DGRAM
+::1             RAW
+127.0.0.2       STREAM
+127.0.0.2       DGRAM
+127.0.0.2       RAW
+</pre>
+
+<p>In this case the local host name is <i>omega</i>.</p>
+
+<p>It is recommended to put <tt>myhostname</tt> last in
+the <tt>nsswitch.conf</tt> line to make sure that this mapping is only
+used as fallback, and any DNS or <tt>/etc/hosts</tt> based mapping takes
+precedence.</p>
+
+<h2><a name="requirements">Requirements</a></h2>
+
+<p><tt>nss-myhostname</tt> uses NSS interfaces that are specific to modern <tt>glibc</tt>'s.</p>
+
+<p><tt>nss-myhostname</tt> was developed and tested on Fedora 10
+from October 2008, it should work on most other Linux
+distributions since it uses GNU autoconf and
+GNU libtool for source code configuration and shared library
+management.</p>
+
+<h2><a name="installation">Installation</a></h2>
+
+<p>As this package is made with the GNU autotools you should run
+<tt>./configure</tt> inside the distribution directory for configuring
+the source tree. After that you should run <tt>make</tt> for
+compilation and <tt>make install</tt> (as root) for installation of
+<tt>nss-myhostname</tt>.</p>
+
+<h2><a name="acks">Acknowledgements</a></h2>
+
+<p>None so far.</p>
+
+<h2><a name="download">Download</a></h2>
+
+<p>The newest release is always available from <a href="@PACKAGE_URL@">@PACKAGE_URL@</a></p>
+
+<p>The current release is <a href="@PACKAGE_URL@nss-myhostname-@PACKAGE_VERSION@.tar.gz">@PACKAGE_VERSION@</a></p>
+
+<p>Get <tt>nss-myhostname</tt>'s development sources from the <a href="http://git.or.cz/">GIT</a> <a href="git://git.0pointer.de/nss-myhostname">repository</a> (<a href="http://git.0pointer.de/?p=nss-myhostname.git">gitweb</a>): </p>
+
+<pre>git clone git://git.0pointer.de/nss-myhostname</pre>
+
+<hr/>
+<address class="grey">Lennart Poettering &lt;@PACKAGE_BUGREPORT@&gt;, October 2008</address>
+
+</body>
+</html>
diff --git a/doc/style.css b/doc/style.css
new file mode 100644 (file)
index 0000000..5cc21fd
--- /dev/null
@@ -0,0 +1,25 @@
+/***
+    This file is part of nss-myhostname.
+
+    Copyright 2008 Lennart Poettering
+
+    nss-myhostname is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public License
+    as published by the Free Software Foundation, either version 2.1
+    of the License, or (at your option) any later version.
+
+    nss-myhostname 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
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with nss-myhostname. If not, If not, see
+    <http://www.gnu.org/licenses/>.
+***/
+
+body { color: black; background-color: white; }
+a:link, a:visited { color: #900000; }
+div.news-date { font-size: 80%; font-style: italic; }
+pre { background-color: #f0f0f0; padding: 0.4cm; }
+.grey { color: #8f8f8f; font-size: 80%; }
diff --git a/m4/attributes.m4 b/m4/attributes.m4
new file mode 100644 (file)
index 0000000..9c4a0c8
--- /dev/null
@@ -0,0 +1,258 @@
+dnl Macros to check the presence of generic (non-typed) symbols.
+dnl Copyright (c) 2006-2007 Diego Pettenò <flameeyes@gmail.com>
+dnl Copyright (c) 2006-2007 xine project
+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, or (at your option)
+dnl 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 the
+dnl 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., 51 Franklin Street, Fifth Floor, Boston, MA
+dnl 02110-1301, USA.
+dnl
+dnl As a special exception, the copyright owners of the
+dnl macro gives unlimited permission to copy, distribute and modify the
+dnl configure scripts that are the output of Autoconf when processing the
+dnl Macro. You need not follow the terms of the GNU General Public
+dnl License when using or distributing such scripts, even though portions
+dnl of the text of the Macro appear in them. The GNU General Public
+dnl License (GPL) does govern all other use of the material that
+dnl constitutes the Autoconf Macro.
+dnl 
+dnl This special exception to the GPL applies to versions of the
+dnl Autoconf Macro released by this project. When you make and
+dnl distribute a modified version of the Autoconf Macro, you may extend
+dnl this special exception to the GPL to apply to your modified version as
+dnl well.
+
+AC_DEFUN([CC_CHECK_CFLAGS_SILENT], [
+  AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]),
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $1"
+     AC_COMPILE_IFELSE([int a;],
+       [eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"],
+       [eval "AS_TR_SH([cc_cv_cflags_$1])='no'"])
+     CFLAGS="$ac_save_CFLAGS"
+    ])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
+    [$2], [$3])
+])
+
+AC_DEFUN([CC_CHECK_CFLAGS], [
+  AC_CACHE_CHECK([if $CC supports $1 flag],
+    AS_TR_SH([cc_cv_cflags_$1]),
+    CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here!
+  )
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
+    [$2], [$3])
+])
+
+AC_DEFUN([CC_CHECK_LDFLAGS], [
+  AC_CACHE_CHECK([if $CC supports $1 flag],
+    AS_TR_SH([cc_cv_ldflags_$1]),
+    [ac_save_LDFLAGS="$LDFLAGS"
+     LDFLAGS="$LDFLAGS $1"
+     AC_LINK_IFELSE([int main() { return 1; }],
+       [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"],
+       [eval "AS_TR_SH([cc_cv_ldflags_$1])="])
+     LDFLAGS="$ac_save_LDFLAGS"
+    ])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes],
+    [$2], [$3])
+])
+
+dnl Check for a -Werror flag or equivalent. -Werror is the GCC
+dnl and ICC flag that tells the compiler to treat all the warnings
+dnl as fatal. We usually need this option to make sure that some
+dnl constructs (like attributes) are not simply ignored.
+dnl
+dnl Other compilers don't support -Werror per se, but they support
+dnl an equivalent flag:
+dnl  - Sun Studio compiler supports -errwarn=%all
+AC_DEFUN([CC_CHECK_WERROR], [
+  AC_CACHE_CHECK(
+    [for $CC way to treat warnings as errors],
+    [cc_cv_werror],
+    [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror],
+      [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])])
+    ])
+])
+
+AC_DEFUN([CC_CHECK_ATTRIBUTE], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))],
+    AS_TR_SH([cc_cv_attribute_$1]),
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     AC_COMPILE_IFELSE([$3],
+       [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
+       [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
+     CFLAGS="$ac_save_CFLAGS"
+    ])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes],
+    [AC_DEFINE(
+       AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1,
+         [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))]
+         )
+     $4],
+    [$5])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [
+  CC_CHECK_ATTRIBUTE(
+    [constructor],,
+    [void __attribute__((constructor)) ctor() { int a; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT], [
+  CC_CHECK_ATTRIBUTE(
+    [format], [format(printf, n, n)],
+    [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [
+  CC_CHECK_ATTRIBUTE(
+    [format_arg], [format_arg(printf)],
+    [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [
+  CC_CHECK_ATTRIBUTE(
+    [visibility_$1], [visibility("$1")],
+    [void __attribute__((visibility("$1"))) $1_function() { }],
+    [$2], [$3])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_NONNULL], [
+  CC_CHECK_ATTRIBUTE(
+    [nonnull], [nonnull()],
+    [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_UNUSED], [
+  CC_CHECK_ATTRIBUTE(
+    [unused], ,
+    [void some_function(void *foo, __attribute__((unused)) void *bar);],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [
+  CC_CHECK_ATTRIBUTE(
+    [sentinel], ,
+    [void some_function(void *foo, ...) __attribute__((sentinel));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [
+  CC_CHECK_ATTRIBUTE(
+    [deprecated], ,
+    [void some_function(void *foo, ...) __attribute__((deprecated));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIAS], [
+  CC_CHECK_ATTRIBUTE(
+    [alias], [weak, alias],
+    [void other_function(void *foo) { }
+     void some_function(void *foo) __attribute__((weak, alias("other_function")));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_MALLOC], [
+  CC_CHECK_ATTRIBUTE(
+    [malloc], ,
+    [void * __attribute__((malloc)) my_alloc(int n);],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_PACKED], [
+  CC_CHECK_ATTRIBUTE(
+    [packed], ,
+    [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONST], [
+  CC_CHECK_ATTRIBUTE(
+    [const], ,
+    [int __attribute__((const)) twopow(int n) { return 1 << n; } ],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_FLAG_VISIBILITY], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if $CC supports -fvisibility=hidden],
+    [cc_cv_flag_visibility],
+    [cc_flag_visibility_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden],
+       cc_cv_flag_visibility='yes',
+       cc_cv_flag_visibility='no')
+     CFLAGS="$cc_flag_visibility_save_CFLAGS"])
+  
+  AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
+    [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1,
+       [Define this if the compiler supports the -fvisibility flag])
+     $1],
+    [$2])
+])
+
+AC_DEFUN([CC_FUNC_EXPECT], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if compiler has __builtin_expect function],
+    [cc_cv_func_expect],
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     AC_COMPILE_IFELSE(
+       [int some_function() {
+        int a = 3;
+        return (int)__builtin_expect(a, 3);
+       }],
+       [cc_cv_func_expect=yes],
+       [cc_cv_func_expect=no])
+     CFLAGS="$ac_save_CFLAGS"
+    ])
+
+  AS_IF([test "x$cc_cv_func_expect" = "xyes"],
+    [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1,
+     [Define this if the compiler supports __builtin_expect() function])
+     $1],
+    [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported],
+    [cc_cv_attribute_aligned],
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     for cc_attribute_align_try in 64 32 16 8 4 2; do
+        AC_COMPILE_IFELSE([
+          int main() {
+            static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0;
+            return c;
+          }], [cc_cv_attribute_aligned=$cc_attribute_align_try; break])
+     done
+     CFLAGS="$ac_save_CFLAGS"
+  ])
+
+  if test "x$cc_cv_attribute_aligned" != "x"; then
+     AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned],
+       [Define the highest alignment supported])
+  fi
+])
diff --git a/m4/zp_lynx_doc.m4 b/m4/zp_lynx_doc.m4
new file mode 100644 (file)
index 0000000..955a6ca
--- /dev/null
@@ -0,0 +1,24 @@
+dnl Macro for enabling LYNX-based documentation generation
+
+AC_DEFUN([ZP_LYNX_DOC], [
+  AC_ARG_ENABLE(lynx,
+     AS_HELP_STRING([--disable-lynx],
+        [Turn off lynx usage for documentation generation]),,
+     [enable_lynx=yes])
+
+  case "${enable_lynx}" in
+    yes)
+      AC_CHECK_PROG(have_lynx, lynx, yes, no)
+
+      if test x$have_lynx = xno ; then
+         AC_MSG_WARN([*** lynx not found, plain text README will not be built ***])
+      fi
+      ;;
+    no)
+      have_lynx=no ;;
+    *)
+      AC_MSG_ERROR(bad value ${enableval} for --disable-lynx) ;;
+  esac
+
+  AM_CONDITIONAL([USE_LYNX], [test "x$have_lynx" = xyes])
+])
index d3404de..758a185 100644 (file)
@@ -1,6 +1,5 @@
 /*-*- Mode: C; c-basic-offset: 8 -*-*/
 
-
 /***
     This file is part of nss-myhostname.
 
     <http://www.gnu.org/licenses/>.
 ***/
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <limits.h>
 #include <nss.h>
 #include <sys/types.h>