summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2008-10-27 19:46:50 +0100
committerLennart Poettering <lennart@poettering.net>2008-10-27 19:46:50 +0100
commitab1ecd3c9a303765f5158a9d4692f6fcbea02540 (patch)
tree99ba1f6f3b481146f895706a7cdcdcbce511d6c6
parent4e8c8252476aaaaa826104362557c084a5d5b978 (diff)
autoconfization
-rw-r--r--.gitignore23
-rw-r--r--Makefile32
-rw-r--r--Makefile.am51
-rwxr-xr-xbootstrap.sh66
-rw-r--r--configure.ac76
-rw-r--r--doc/.gitignore2
-rw-r--r--doc/Makefile.am38
-rw-r--r--doc/README.html.in158
-rw-r--r--doc/style.css25
-rw-r--r--m4/attributes.m4258
-rw-r--r--m4/zp_lynx_doc.m424
-rw-r--r--nss-myhostname.c5
12 files changed, 725 insertions, 33 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8f31d72
--- /dev/null
+++ b/.gitignore
@@ -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
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
index 0000000..9b1dcab
--- /dev/null
+++ b/Makefile.am
@@ -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
index 0000000..d224f31
--- /dev/null
+++ b/bootstrap.sh
@@ -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
index 0000000..e1fbb79
--- /dev/null
+++ b/configure.ac
@@ -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
index 0000000..bc63974
--- /dev/null
+++ b/doc/.gitignore
@@ -0,0 +1,2 @@
+README
+README.html
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..4f773ac
--- /dev/null
+++ b/doc/Makefile.am
@@ -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
index 0000000..4721c4d
--- /dev/null
+++ b/doc/README.html.in
@@ -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
index 0000000..5cc21fd
--- /dev/null
+++ b/doc/style.css
@@ -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
index 0000000..9c4a0c8
--- /dev/null
+++ b/m4/attributes.m4
@@ -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
index 0000000..955a6ca
--- /dev/null
+++ b/m4/zp_lynx_doc.m4
@@ -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])
+])
diff --git a/nss-myhostname.c b/nss-myhostname.c
index d3404de..758a185 100644
--- a/nss-myhostname.c
+++ b/nss-myhostname.c
@@ -1,6 +1,5 @@
/*-*- Mode: C; c-basic-offset: 8 -*-*/
-
/***
This file is part of nss-myhostname.
@@ -21,6 +20,10 @@
<http://www.gnu.org/licenses/>.
***/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <limits.h>
#include <nss.h>
#include <sys/types.h>