In metaconfig.git, the branch master has been updated

<http://perl5.git.perl.org/metaconfig.git/commitdiff/907a968f1883e76eea71816c9428d036dcfff971?hp=77c2680569463db30f6f345116c033112495ccc8>

- Log -----------------------------------------------------------------
commit 907a968f1883e76eea71816c9428d036dcfff971
Author: Andy Dougherty <[email protected]>
Date:   Fri Jul 9 14:56:45 2010 -0400

    Add probe for C99-style static inline.
    Since perl's cflags.SH script tries to add in -ansi for gcc, but gcc
    will only accept '__inline__', and not 'inline' in -ansi mode, try
    __inline__ first if we're using gcc.  Also, might as well document the
    MSVC versions that will end up getting used in Windows, even if they
    never run Configure.

M       U/compline/d_static_inline.U

commit bed4b4c1ddba06b9f4653f7769acf6c91b9cba58
Author: Andy Dougherty <[email protected]>
Date:   Thu Jul 8 12:51:58 2010 -0400

    First pass at d_static_inline.U.  Needs to be revised
    to address different flavors:  inline, __inline__, and __inline.

A       U/compline/d_static_inline.U
-----------------------------------------------------------------------

Summary of changes:
 U/compline/d_static_inline.U |  165 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 165 insertions(+), 0 deletions(-)
 create mode 100644 U/compline/d_static_inline.U

diff --git a/U/compline/d_static_inline.U b/U/compline/d_static_inline.U
new file mode 100644
index 0000000..86565bc
--- /dev/null
+++ b/U/compline/d_static_inline.U
@@ -0,0 +1,165 @@
+?RCS: $Id: d_static_inline.U,v $
+?RCS:
+?RCS: Copyright (c) 2010 Andrew Dougherty
+?RCS: 
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 3.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <[email protected]>
+?RCS:
+?MAKE:d_static_inline perl_static_inline: Compile Setvar gccversion \
+       cat echo run hint rm rm_try
+?MAKE: -pick add $@ %<
+?S:d_static_inline:
+?S:    This variable conditionally defines the HAS_STATIC_INLINE symbol,
+?S:    which indicates that the C compiler supports C99-style static
+?S:    inline.  That is, the function can't be called from another
+?S:    translation unit.
+?S:.
+?S:perl_static_inline:
+?S:    This variable defines the PERL_STATIC_INLINE symbol to
+?S:    the best-guess incantation to use for static inline functions.
+?S:    Possibilities include
+?S:            static inline       (c99)
+?S:            static __inline__   (gcc -ansi)
+?S:            static __inline     (MSVC)
+?S:            static _inline      (older MSVC)
+?S:            static              (c89 compilers)
+?S:.
+?C:HAS_STATIC_INLINE :
+?C:    This symbol, if defined, indicates that the C compiler supports
+?C:    C99-style static inline.  That is, the function can't be called
+?C:    from another translation unit.
+?C:.
+?C:PERL_STATIC_INLINE:
+?C:    This symbol gives the best-guess incantation to use for static
+?C:    inline functions.  If HAS_STATIC_INLINE is defined, this will
+?C:    give C99-style inline.  If HAS_STATIC_INLINE is not defined,
+?C:    this will give a plain 'static'.  It will always be defined
+?C:    to something that gives static linkage.
+?C:    Possibilities include
+?C:            static inline       (c99)
+?C:            static __inline__   (gcc -ansi)
+?C:            static __inline     (MSVC)
+?C:            static _inline      (older MSVC)
+?C:            static              (c89 compilers)
+?C:.
+?H:#$d_static_inline HAS_STATIC_INLINE                         /**/
+?H:#define PERL_STATIC_INLINE $perl_static_inline      /**/
+?H:.
+?LINT:set d_static_inline
+?T:inline xxx
+?F:!try
+: see what flavor, if any, of static inline is supported
+echo " "
+echo "Checking to see if your system supports static inline..."
+?X:    Build two programs.  The first uses static inline in file a.c and
+?X:    should work.  The second also includes b.c which tries to link against
+?X:    the static function in a.c.  This should fail.
+?X:.
+$cat > try.c <<'EOCP'
+#include <stdlib.h>
+extern int f_via_a(int x);
+extern int f_via_b(int x);
+int main(int argc, char **argv)
+{
+    int y;
+
+    y = f_via_a(0);
+#ifdef USE_B
+    y = f_via_b(0);
+#endif
+    if (y == 42) {
+        return EXIT_SUCCESS;
+    }
+    else {
+        return EXIT_FAILURE;
+    }
+}
+EOCP
+$cat > a.c <<'EOCP'
+static INLINE int f(int x) {
+    int y;
+    y = x + 42;
+    return y;
+}
+
+int f_via_a(int x)
+{
+    return f(x);
+}
+EOCP
+$cat > b.c <<'EOCP'
+extern int f(int x);
+
+int f_via_b(int x)
+{
+    return f(x);
+}
+EOCP
+
+# Respect a hint (or previous) value for perl_static_inline, if there is one.
+case "$perl_static_inline" in
+'')    # Check the various possibilities, and break out on success.
+       # For gcc, prefer __inline__, which will still permit 
+       # cflags.SH to add in -ansi.
+       case "$gccversion" in
+               '') xxx="inline __inline__ __inline _inline";;
+               *)  xxx="__inline__ inline __inline _inline";;
+       esac
+       for inline in $xxx; do
+               set try -DINLINE=$inline a.c
+               if eval $compile && $run ./try; then
+                       # Now make sure there is no external linkage of static
+                       # functions
+                       set try -DINLINE=$inline -DUSE_B a.c b.c
+                       if eval $compile && $run ./try; then
+                               $echo "Your compiler supports static $inline, " 
>&4
+                               $echo "but it also creates an external 
definition," >&4
+                               $echo "so I won't use it." >&4
+                               val=$undef
+                       else
+                               $echo "Your compiler supports static $inline." 
>&4
+                               val=$define
+                               perl_static_inline="static $inline";
+                               break;
+                       fi
+               else
+                       $echo "Your compiler does NOT support static $inline." 
>&4
+                       val="$undef"
+               fi
+       done
+       ;;
+*inline*) # Some variant of inline exists.
+       echo "Keeping your $hint value of $perl_static_inline."
+       val=$define
+       ;;
+static)  # No inline capabilities
+       echo "Keeping your $hint value of $perl_static_inline."
+       val=$undef
+       ;;
+*)  # Unrecognized previous value -- blindly trust the supplied
+       # value and hope it makes sense.  Use old value for
+       # d_static_inline, if there is one.
+       echo "Keeping your $hint value of $perl_static_inline."
+       case "$d_static_inline" in
+               '') val=$define ;;
+               *)  val=$d_static_inline ;;
+       esac
+       ;;
+esac
+# Fallback to plain 'static' if nothing worked.
+case "$perl_static_inline" in
+'')
+       perl_static_inline="static"
+       val=$undef
+       ;;
+esac
+set d_static_inline
+eval $setvar
+$rm -f a.[co] b.[co]
+$rm_try
+

--
perl5 metaconfig repository

Reply via email to