[Libreoffice-commits] libvisio.git: 3 commits - configure.ac m4/ax_gcc_func_attribute.m4 src/lib

David Tardon dtardon at redhat.com
Sat Apr 15 16:28:55 UTC 2017


 configure.ac                |    2 
 m4/ax_gcc_func_attribute.m4 |  226 ++++++++++++++++++++++++++++++++++++++++++++
 src/lib/libvisio_utils.h    |   52 ++--------
 3 files changed, 240 insertions(+), 40 deletions(-)

New commits:
commit d414b1f2dbe40a460c56a0c9e327c98bfe7d45a8
Author: David Tardon <dtardon at redhat.com>
Date:   Sat Apr 15 18:26:50 2017 +0200

    add __attribute__((format)) to debugPrint
    
    Change-Id: I3bf566dee03fb7f2f15ecae14ac0001e4f26ba72

diff --git a/configure.ac b/configure.ac
index d515afc..d92da9b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -39,6 +39,7 @@ AC_PROG_EGREP
 AC_PROG_SED
 
 AX_CXX_COMPILE_STDCXX_11([noext])
+AX_GCC_FUNC_ATTRIBUTE([format])
 
 dnl ===================================================================
 dnl Check for gperf
diff --git a/m4/ax_gcc_func_attribute.m4 b/m4/ax_gcc_func_attribute.m4
new file mode 100644
index 0000000..008bee9
--- /dev/null
+++ b/m4/ax_gcc_func_attribute.m4
@@ -0,0 +1,226 @@
+# ===========================================================================
+#  https://www.gnu.org/software/autoconf-archive/ax_gcc_func_attribute.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_GCC_FUNC_ATTRIBUTE(ATTRIBUTE)
+#
+# DESCRIPTION
+#
+#   This macro checks if the compiler supports one of GCC's function
+#   attributes; many other compilers also provide function attributes with
+#   the same syntax. Compiler warnings are used to detect supported
+#   attributes as unsupported ones are ignored by default so quieting
+#   warnings when using this macro will yield false positives.
+#
+#   The ATTRIBUTE parameter holds the name of the attribute to be checked.
+#
+#   If ATTRIBUTE is supported define HAVE_FUNC_ATTRIBUTE_<ATTRIBUTE>.
+#
+#   The macro caches its result in the ax_cv_have_func_attribute_<attribute>
+#   variable.
+#
+#   The macro currently supports the following function attributes:
+#
+#    alias
+#    aligned
+#    alloc_size
+#    always_inline
+#    artificial
+#    cold
+#    const
+#    constructor
+#    constructor_priority for constructor attribute with priority
+#    deprecated
+#    destructor
+#    dllexport
+#    dllimport
+#    error
+#    externally_visible
+#    flatten
+#    format
+#    format_arg
+#    gnu_inline
+#    hot
+#    ifunc
+#    leaf
+#    malloc
+#    noclone
+#    noinline
+#    nonnull
+#    noreturn
+#    nothrow
+#    optimize
+#    pure
+#    unused
+#    used
+#    visibility
+#    warning
+#    warn_unused_result
+#    weak
+#    weakref
+#
+#   Unsuppored function attributes will be tested with a prototype returning
+#   an int and not accepting any arguments and the result of the check might
+#   be wrong or meaningless so use with care.
+#
+# LICENSE
+#
+#   Copyright (c) 2013 Gabriele Svelto <gabriele.svelto at gmail.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.  This file is offered as-is, without any
+#   warranty.
+
+#serial 5
+
+AC_DEFUN([AX_GCC_FUNC_ATTRIBUTE], [
+    AS_VAR_PUSHDEF([ac_var], [ax_cv_have_func_attribute_$1])
+
+    AC_CACHE_CHECK([for __attribute__(($1))], [ac_var], [
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([
+            m4_case([$1],
+                [alias], [
+                    int foo( void ) { return 0; }
+                    int bar( void ) __attribute__(($1("foo")));
+                ],
+                [aligned], [
+                    int foo( void ) __attribute__(($1(32)));
+                ],
+                [alloc_size], [
+                    void *foo(int a) __attribute__(($1(1)));
+                ],
+                [always_inline], [
+                    inline __attribute__(($1)) int foo( void ) { return 0; }
+                ],
+                [artificial], [
+                    inline __attribute__(($1)) int foo( void ) { return 0; }
+                ],
+                [cold], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [const], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [constructor_priority], [
+                    int foo( void ) __attribute__((__constructor__(65535/2)));
+                ],
+                [constructor], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [deprecated], [
+                    int foo( void ) __attribute__(($1("")));
+                ],
+                [destructor], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [dllexport], [
+                    __attribute__(($1)) int foo( void ) { return 0; }
+                ],
+                [dllimport], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [error], [
+                    int foo( void ) __attribute__(($1("")));
+                ],
+                [externally_visible], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [flatten], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [format], [
+                    int foo(const char *p, ...) __attribute__(($1(printf, 1, 2)));
+                ],
+                [format_arg], [
+                    char *foo(const char *p) __attribute__(($1(1)));
+                ],
+                [gnu_inline], [
+                    inline __attribute__(($1)) int foo( void ) { return 0; }
+                ],
+                [hot], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [ifunc], [
+                    int my_foo( void ) { return 0; }
+                    static int (*resolve_foo(void))(void) { return my_foo; }
+                    int foo( void ) __attribute__(($1("resolve_foo")));
+                ],
+                [leaf], [
+                    __attribute__(($1)) int foo( void ) { return 0; }
+                ],
+                [malloc], [
+                    void *foo( void ) __attribute__(($1));
+                ],
+                [noclone], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [noinline], [
+                    __attribute__(($1)) int foo( void ) { return 0; }
+                ],
+                [nonnull], [
+                    int foo(char *p) __attribute__(($1(1)));
+                ],
+                [noreturn], [
+                    void foo( void ) __attribute__(($1));
+                ],
+                [nothrow], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [optimize], [
+                    __attribute__(($1(3))) int foo( void ) { return 0; }
+                ],
+                [pure], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [returns_nonnull], [
+                    void *foo( void ) __attribute__(($1));
+                ],
+                [unused], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [used], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [visibility], [
+                    int foo_def( void ) __attribute__(($1("default")));
+                    int foo_hid( void ) __attribute__(($1("hidden")));
+                    int foo_int( void ) __attribute__(($1("internal")));
+                    int foo_pro( void ) __attribute__(($1("protected")));
+                ],
+                [warning], [
+                    int foo( void ) __attribute__(($1("")));
+                ],
+                [warn_unused_result], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [weak], [
+                    int foo( void ) __attribute__(($1));
+                ],
+                [weakref], [
+                    static int foo( void ) { return 0; }
+                    static int bar( void ) __attribute__(($1("foo")));
+                ],
+                [
+                 m4_warn([syntax], [Unsupported attribute $1, the test may fail])
+                 int foo( void ) __attribute__(($1));
+                ]
+            )], [])
+            ],
+            dnl GCC doesn't exit with an error if an unknown attribute is
+            dnl provided but only outputs a warning, so accept the attribute
+            dnl only if no warning were issued.
+            [AS_IF([test -s conftest.err],
+                [AS_VAR_SET([ac_var], [no])],
+                [AS_VAR_SET([ac_var], [yes])])],
+            [AS_VAR_SET([ac_var], [no])])
+    ])
+
+    AS_IF([test yes = AS_VAR_GET([ac_var])],
+        [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_FUNC_ATTRIBUTE_$1), 1,
+            [Define to 1 if the system has the `$1' function attribute])], [])
+
+    AS_VAR_POPDEF([ac_var])
+])
diff --git a/src/lib/libvisio_utils.h b/src/lib/libvisio_utils.h
index bbe6691..ec576d6 100644
--- a/src/lib/libvisio_utils.h
+++ b/src/lib/libvisio_utils.h
@@ -27,6 +27,12 @@
 #include <librevenge-stream/librevenge-stream.h>
 #include <unicode/utypes.h>
 
+#if defined(HAVE_FUNC_ATTRIBUTE_FORMAT)
+#define VSD_ATTRIBUTE_PRINTF(fmt, arg) __attribute__((format(printf, fmt, arg)))
+#else
+#define VSD_ATTRIBUTE_PRINTF(fmt, arg)
+#endif
+
 // do nothing with debug messages in a release compile
 #ifdef DEBUG
 #define VSD_DEBUG_MSG(M) libvisio::debugPrint M
@@ -58,7 +64,7 @@ unsigned long getRemainingLength(librevenge::RVNGInputStream *input);
 
 void appendUCS4(librevenge::RVNGString &text, UChar32 ucs4Character);
 
-void debugPrint(const char *format, ...);
+void debugPrint(const char *format, ...) VSD_ATTRIBUTE_PRINTF(1, 2);
 
 class EndOfStreamException
 {
commit 377f9c9da04f204afce4fd186d76ac0dcd85d96e
Author: David Tardon <dtardon at redhat.com>
Date:   Sat Apr 15 18:24:46 2017 +0200

    drop verbose debug
    
    Change-Id: I5c0e4880124deae64b9dd436767d09e372860842

diff --git a/src/lib/libvisio_utils.h b/src/lib/libvisio_utils.h
index afeecc1..bbe6691 100644
--- a/src/lib/libvisio_utils.h
+++ b/src/lib/libvisio_utils.h
@@ -27,18 +27,10 @@
 #include <librevenge-stream/librevenge-stream.h>
 #include <unicode/utypes.h>
 
-// debug message includes source file and line number
-//#define VERBOSE_DEBUG 1
-
 // do nothing with debug messages in a release compile
 #ifdef DEBUG
-#ifdef VERBOSE_DEBUG
-#define VSD_DEBUG_MSG(M) libvisio::debugPrint("%15s:%5d: ", __FILE__, __LINE__); libvisio::debugPrint M
-#define VSD_DEBUG(M) M
-#else
 #define VSD_DEBUG_MSG(M) libvisio::debugPrint M
 #define VSD_DEBUG(M) M
-#endif
 #else
 #define VSD_DEBUG_MSG(M)
 #define VSD_DEBUG(M)
commit 98f452861b27bfe33252badf3c81e56d7ae3c1e6
Author: David Tardon <dtardon at redhat.com>
Date:   Sat Apr 15 18:23:14 2017 +0200

    replace manual def. of int types by boost
    
    Change-Id: I65693186fbb77df00feded3b9b62568f95830046

diff --git a/configure.ac b/configure.ac
index 93bc784..d515afc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -84,6 +84,7 @@ AC_SUBST(ICU_LIBS)
 
 AC_CHECK_HEADERS(
 	boost/algorithm/string.hpp \
+	boost/cstdint.hpp \
 	boost/lexical_cast.hpp \
 	boost/optional.hpp \
 	boost/spirit/include/classic.hpp,
diff --git a/src/lib/libvisio_utils.h b/src/lib/libvisio_utils.h
index 7857068..afeecc1 100644
--- a/src/lib/libvisio_utils.h
+++ b/src/lib/libvisio_utils.h
@@ -10,44 +10,18 @@
 #ifndef __LIBVISIO_UTILS_H__
 #define __LIBVISIO_UTILS_H__
 
-#include <memory>
-
-#include "VSDTypes.h"
-
-#define VSD_EPSILON 1E-6
-#define VSD_ALMOST_ZERO(m) (fabs(m) <= VSD_EPSILON)
-
-#ifdef _MSC_VER
-
-typedef unsigned char uint8_t;
-typedef unsigned short uint16_t;
-typedef short int16_t;
-typedef unsigned uint32_t;
-typedef int int32_t;
-typedef unsigned __int64 uint64_t;
-
-#else /* !defined _MSC_VER */
-
 #ifdef HAVE_CONFIG_H
-
-#include <config.h>
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
+#include "config.h"
 #endif
 
-#else /* !defined HAVE_CONFIG_H */
+#include <memory>
 
-#include <stdint.h>
-#include <inttypes.h>
+#include <boost/cstdint.hpp>
 
-#endif /* HAVE_CONFIG_H */
+#include "VSDTypes.h"
 
-#endif /* _MSC_VER */
+#define VSD_EPSILON 1E-6
+#define VSD_ALMOST_ZERO(m) (fabs(m) <= VSD_EPSILON)
 
 #include <librevenge/librevenge.h>
 #include <librevenge-stream/librevenge-stream.h>


More information about the Libreoffice-commits mailing list