[libdispatch-dev] [PATCH 02/17] move __private_extern__ detection to an autoconf macro

Robert Watson robert at fledge.watson.org
Tue Oct 27 16:32:17 PDT 2009


On Sun, 18 Oct 2009, Paolo Bonzini wrote:

> Starting to move less-than-obvious configure code into external macros.  At 
> the same time I add support for the GCC visibility attribute.

I've committed this, but left out the AUTOMAKE_OPTIONS line as using the 
AM_INIT_AUTOMAKE from Love seems to make that unnecessary (let me know if I'm 
wrong).

Thanks,

Robert N M Watson
Computer Laboratory
University of Cambridge


> ---
> Makefile.am             |    2 ++
> compat/private_extern.h |   26 --------------------------
> configure.ac            |   11 ++---------
> m4/private-extern.m4    |   31 +++++++++++++++++++++++++++++++
> src/internal.h          |    3 ---
> 5 files changed, 35 insertions(+), 38 deletions(-)
> delete mode 100644 compat/private_extern.h
> create mode 100644 m4/private-extern.m4
>
> diff --git a/Makefile.am b/Makefile.am
> index 26baf7a..5f6e393 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -1,6 +1,8 @@
> #
> #
> #
> +ACLOCAL_AMFLAGS = -I m4
> +AUTOMAKE_OPTIONS = foreign
>
> SUBDIRS=		\
> 	dispatch	\
> diff --git a/compat/private_extern.h b/compat/private_extern.h
> deleted file mode 100644
> index 5d2d858..0000000
> --- a/compat/private_extern.h
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -/*
> - * Copyright (c) 2009 Apple Inc. All rights reserved.
> - *
> - * @APPLE_APACHE_LICENSE_HEADER_START@
> - *
> - * Licensed under the Apache License, Version 2.0 (the "License");
> - * you may not use this file except in compliance with the License.
> - * You may obtain a copy of the License at
> - *
> - *     http://www.apache.org/licenses/LICENSE-2.0
> - *
> - * Unless required by applicable law or agreed to in writing, software
> - * distributed under the License is distributed on an "AS IS" BASIS,
> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> - * See the License for the specific language governing permissions and
> - * limitations under the License.
> - *
> - * @APPLE_APACHE_LICENSE_HEADER_END@
> - */
> -
> -#ifndef __COMPAT_PRIVATE_EXTERN_H__
> -#define __COMPAT_PRIVATE_EXTERN_H__
> -
> -#define	__private_extern__	extern
> -
> -#endif /* __COMPAT_PRIVATE_EXTERN_H__ */
> diff --git a/configure.ac b/configure.ac
> index 83c0236..90d13d0 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -7,6 +7,7 @@ AC_INIT([libdispatch], [1.0], [libdispatch at macosforge.org], [libdispatch])
> AC_REVISION([$$])
> AC_CONFIG_AUX_DIR(config)
> AC_CONFIG_HEADER([config/config.h])
> +AC_CONFIG_MACRO_DIR([m4])
> AM_MAINTAINER_MODE
>
> #
> @@ -181,15 +182,7 @@ AC_CHECK_DECLS([SIGEMT], [], [], [[#include <signal.h>]])
> AC_CHECK_DECLS([VQ_UPDATE, VQ_VERYLOWDISK], [], [], [[#include <sys/mount.h>]])
> AC_CHECK_FUNCS([pthread_key_init_np pthread_main_np mach_absolute_time malloc_create_zone sem_init])
>
> -#
> -# Does the platform support __private_extern__?  There is surely a better way
> -# to check this.
> -#
> -AC_TRY_LINK([], [
> -	__private_extern__ int foo;
> -], [
> -  AC_DEFINE(HAVE_PRIVATE_EXTERN,, Define if __private_extern__ present)
> -])
> +DISPATCH_C_PRIVATE_EXTERN
>
> #
> # Detect compiler support for Blocks; perhaps someday -fblocks won't be
> diff --git a/m4/private-extern.m4 b/m4/private-extern.m4
> new file mode 100644
> index 0000000..f227eb6
> --- /dev/null
> +++ b/m4/private-extern.m4
> @@ -0,0 +1,31 @@
> +#
> +# Does the platform support __private_extern__?  There is surely a better way
> +# to check this.
> +#
> +AC_DEFUN([DISPATCH_C_PRIVATE_EXTERN], [
> +
> +AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
> +    dispatch_cv_hidden_visibility_attribute, [
> +        AC_TRY_LINK([],
> +                    [extern __attribute__ ((visibility ("hidden"))) int foo;],
> +                    [dispatch_cv_hidden_visibility_attribute=yes],
> +                    [dispatch_cv_hidden_visibility_attribute=no])])
> +
> +AC_CACHE_CHECK([for __private_extern__],
> +    dispatch_cv_private_extern, [
> +        AC_TRY_LINK([], [__private_extern__ int foo;],
> +                    [dispatch_cv_private_extern=yes],
> +                    [dispatch_cv_private_extern=no])])
> +
> +if test $dispatch_cv_private_extern = yes; then
> +  AC_DEFINE(HAVE_PRIVATE_EXTERN,, Define if __private_extern__ present)
> +elif test $dispatch_cv_hidden_visibility_attribute = yes; then
> +  AC_DEFINE(HAVE_PRIVATE_EXTERN,, Define if __private_extern__ present)
> +  AC_DEFINE([__private_extern__], [extern __attribute__ ((visibility ("hidden")))],
> +	    [Define to a replacement for __private_extern])
> +else
> +  AC_DEFINE([__private_extern__], [extern],
> +	    [Define to a replacement for __private_extern])
> +fi
> +
> +])
> diff --git a/src/internal.h b/src/internal.h
> index 1e84165..6e2f6e5 100644
> --- a/src/internal.h
> +++ b/src/internal.h
> @@ -39,9 +39,6 @@
> #ifdef HAVE_AVAILABILITY_H
> #include <Availability.h>
> #endif
> -#ifndef HAVE_PRIVATE_EXTERN
> -#include <compat/private_extern.h>
> -#endif
> #if !HAVE_DECL_FD_COPY
> #include <compat/fd_copy.h>
> #endif
> -- 
> 1.6.2.5
>
>
> _______________________________________________
> libdispatch-dev mailing list
> libdispatch-dev at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/libdispatch-dev
>



More information about the libdispatch-dev mailing list