From ab1ecd3c9a303765f5158a9d4692f6fcbea02540 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 27 Oct 2008 19:46:50 +0100 Subject: autoconfization --- .gitignore | 23 +++++ Makefile | 32 ------- Makefile.am | 51 +++++++++++ bootstrap.sh | 66 ++++++++++++++ configure.ac | 76 ++++++++++++++++ doc/.gitignore | 2 + doc/Makefile.am | 38 ++++++++ doc/README.html.in | 158 ++++++++++++++++++++++++++++++++ doc/style.css | 25 ++++++ m4/attributes.m4 | 258 +++++++++++++++++++++++++++++++++++++++++++++++++++++ m4/zp_lynx_doc.m4 | 24 +++++ nss-myhostname.c | 5 +- 12 files changed, 725 insertions(+), 33 deletions(-) create mode 100644 .gitignore delete mode 100644 Makefile create mode 100644 Makefile.am create mode 100755 bootstrap.sh create mode 100644 configure.ac create mode 100644 doc/.gitignore create mode 100644 doc/Makefile.am create mode 100644 doc/README.html.in create mode 100644 doc/style.css create mode 100644 m4/attributes.m4 create mode 100644 m4/zp_lynx_doc.m4 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 +# . + +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 +# . + +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 +# . + +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 +# . + +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 @@ + + + + + +nss-myhostname @PACKAGE_VERSION@ + + + + +

nss-myhostname @PACKAGE_VERSION@

+ +

Copyright 2005-2008 Lennart Poettering <@PACKAGE_BUGREPORT@>

+ + + +

License

+ +

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.

+ +

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.

+ +

News

+ +
Mon Oct 27 2008:
+ +

Version 0.2 +released. Changes include: Update for IPv6 and newest glibc NSS interfaces

+ +
Sat Nov 19 2005:
+ +

Version 0.1 +released. Initial release.

+ +

Overview

+ +

nss-myhostname is a plugin for the GNU Name Service Switch +(NSS) functionality of the GNU C Library (glibc) providing +host name resolution for the locally configured system hostname as +returned by gethostname(2). 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 /etc/hosts which however is suboptimal since it +requires a writable /etc file system and is fragile because +the file might also be edited by the +administrator. nss-myhostname simply returns the IPv4 +address 127.0.0.2 (wich is on the local loopback) and the +IPv6 address ::1 (which is the local host) for whatever +system hostname is configured locally. Patching /etc/hostname is thus no longer necessary.

+ +

Current Status

+ +

It works!

+ +

Documentation

+ +

After compiling and installing nss-myhostname you'll find a +new NSS modules in /lib:

+
    +
  • libnss_myhostname.so.2
  • +
+ +

To activate the NSS modules you have to edit +/etc/nsswitch.conf and add myhostname to the +line starting with "hosts:". On Debian this looks like +this:

+ +
# /etc/nsswitch.conf
+
+passwd:         compat
+group:          compat
+shadow:         compat
+
+hosts:          files dns myhostname
+networks:       files
+
+protocols:      db files
+services:       db files
+ethers:         db files
+rpc:            db files
+
+netgroup:       nis
+ +

That's it. You should now always be able to resolve your local +system hostname. For a quick check +use glibc's getent tool: + +

$ 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
+
+ +

In this case the local host name is omega.

+ +

It is recommended to put myhostname last in +the nsswitch.conf line to make sure that this mapping is only +used as fallback, and any DNS or /etc/hosts based mapping takes +precedence.

+ +

Requirements

+ +

nss-myhostname uses NSS interfaces that are specific to modern glibc's.

+ +

nss-myhostname 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.

+ +

Installation

+ +

As this package is made with the GNU autotools you should run +./configure inside the distribution directory for configuring +the source tree. After that you should run make for +compilation and make install (as root) for installation of +nss-myhostname.

+ +

Acknowledgements

+ +

None so far.

+ +

Download

+ +

The newest release is always available from @PACKAGE_URL@

+ +

The current release is @PACKAGE_VERSION@

+ +

Get nss-myhostname's development sources from the GIT repository (gitweb):

+ +
git clone git://git.0pointer.de/nss-myhostname
+ +
+
Lennart Poettering <@PACKAGE_BUGREPORT@>, October 2008
+ + + 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 + . +***/ + +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ò +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 @@ . ***/ +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include #include -- cgit