Create and use _stdint.h
authorHans Ulrich Niedermann <hun@n-dimensional.de>
Tue, 6 Apr 2004 19:31:55 +0000 (21:31 +0200)
committerHans Ulrich Niedermann <hun@n-dimensional.de>
Tue, 6 Apr 2004 19:31:55 +0000 (21:31 +0200)
Makefile.am
autogen.sh
configure.in
libexif/Makefile.am
libexif/exif-utils.h
m4/Makefile.am [new file with mode: 0644]
m4/stdint.m4 [new file with mode: 0644]

index 3c1380d..cf2a6ca 100644 (file)
@@ -1,3 +1,15 @@
-SUBDIRS = libexif libjpeg test po
+SUBDIRS = libexif libjpeg test po m4
 
 EXTRA_DIST = @PACKAGE@.spec
+
+########################################################################
+# The following default options for aclocal and automake
+# are required in the top level Makefile.am for the automatic 
+# re-building of the build system files (only if configured with
+# --enable-maintainer-mode). 
+#
+# It is not sufficient to have these options somewhere in autogen.sh!
+
+ACLOCAL_AMFLAGS = -I m4
+AUTOMAKE_OPTIONS = gnu
+
index 6a2db2f..e8168c9 100755 (executable)
@@ -83,6 +83,8 @@ case "$CC" in
 *xlc | *xlc\ * | *lcc | *lcc\ *) am_opt=--include-deps;;
 esac
 
+ACLOCAL_FLAGS="-I ${srcdir}/m4 ${ACLOCAL_FLAGS}"
+
 gettext_version=`gettextize --version 2>&1 | sed -n 's/^.*GNU gettext.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
 case $gettext_version in
 0.10.*)
index 86f0f0a..a240521 100644 (file)
@@ -25,6 +25,11 @@ AC_SUBST(LIBEXIF_VERSION_INFO)
 
 AM_PROG_LIBTOOL
 
+dnl Create a stdint.h-like file containing size-specific integer definitions
+dnl that will always be available
+AC_NEED_STDINT_H(libexif/_stdint.h)
+
+
 dnl ---------------------------------------------------------------------------
 dnl i18n support
 dnl ---------------------------------------------------------------------------
@@ -43,6 +48,7 @@ else
 fi
 AM_GNU_GETTEXT
 
+
 dnl ---------------------------------------------------------------------------
 dnl Warnings
 dnl ---------------------------------------------------------------------------
@@ -62,6 +68,7 @@ AC_OUTPUT([
   libexif/pentax/Makefile
   libjpeg/Makefile
   test/Makefile
+  m4/Makefile
   libexif/libexif.pc
 ])
 
index 3851e1b..690e001 100644 (file)
@@ -45,3 +45,5 @@ pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libexif.pc
 EXTRA_DIST = libexif.pc.in
 
+clean-generic:
+       rm -f _stdint.h
index 45a1094..40f105e 100644 (file)
 extern "C" {
 #endif /* __cplusplus */
 
-#include <libexif/exif-byte-order.h>
+#include "libexif/exif-byte-order.h"
+#include "libexif/_stdint.h"
 
-/* Works correct only on machines with a stdint.h, otherwise it assumes
- * sizeof(long) == 4                                                    */
-  
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
+
+/* If these definitions don't work for you, please let us fix the 
+ * macro generating _stdint.h */
+       
 typedef char           ExifByte;          /* 1 byte  */
 typedef char *         ExifAscii;
 typedef uint16_t       ExifShort;         /* 2 bytes */
@@ -41,16 +41,6 @@ typedef char         ExifUndefined;     /* 1 byte  */
 typedef int32_t                ExifSLong;         /* 4 bytes */
 typedef struct {ExifSLong numerator; ExifSLong denominator;} ExifSRational;
 
-#else
-typedef char           ExifByte;          /* 1 byte  */
-typedef char *         ExifAscii;
-typedef unsigned short ExifShort;         /* 2 bytes */
-typedef unsigned long  ExifLong;          /* 4 bytes */
-typedef struct {ExifLong numerator; ExifLong denominator;} ExifRational;
-typedef char           ExifUndefined;     /* 1 byte  */
-typedef signed long    ExifSLong;         /* 4 bytes */
-typedef struct {ExifSLong numerator; ExifSLong denominator;} ExifSRational;
-#endif
 
 ExifShort     exif_get_short     (const unsigned char *b, ExifByteOrder order);
 ExifLong      exif_get_long      (const unsigned char *b, ExifByteOrder order);
diff --git a/m4/Makefile.am b/m4/Makefile.am
new file mode 100644 (file)
index 0000000..6c50d82
--- /dev/null
@@ -0,0 +1 @@
+EXTRA_DIST = stdint.m4
diff --git a/m4/stdint.m4 b/m4/stdint.m4
new file mode 100644 (file)
index 0000000..053966e
--- /dev/null
@@ -0,0 +1,92 @@
+dnl AC_NEED_STDINT_H ( HEADER-TO-GENERATE )
+dnl $Id: stdint.m4,v 1.4 2002/03/23 18:49:26 dfandrich Exp $
+dnl Copyright 2001-2002 by Dan Fandrich <dan@coneharvesters.com>
+dnl This file may be copied and used freely without restrictions.  No warranty
+dnl is expressed or implied.
+dnl
+dnl Look for a header file that defines size-specific integer types like the
+dnl ones recommended to be in stdint.h in the C99 standard (e.g. uint32_t).
+dnl This is a dumbed-down version of the macro of the same name in the file
+dnl ac_need_stdint_h.m4 which is part of the ac-archive, available at
+dnl <URL:http://ac-archive.sourceforge.net/> (also, another macro
+dnl AC_CREATE_STDINT_H by the same author).  This version is not as smart,
+dnl but works on older autoconf versions and has a different license.
+
+dnl AC_CHECK_DEFINED_TYPE ( TYPE, FILE, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND )
+dnl This is similar to _AC_CHECK_TYPE_NEW (a.k.a. new syntax version of
+dnl AC_CHECK_TYPE) in autoconf 2.50 but works on older versions
+AC_DEFUN(AC_CHECK_DEFINED_TYPE,
+[AC_MSG_CHECKING([for $1 in $2])
+AC_EGREP_CPP(changequote(<<,>>)dnl
+<<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl
+changequote([,]), [#include <$2>],
+ac_cv_type_$1=yes, ac_cv_type_$1=no)dnl
+AC_MSG_RESULT($ac_cv_type_$1)
+if test $ac_cv_type_$1 = yes; then
+  $3
+else
+  $4
+fi
+])
+
+dnl Look for a header file that defines size-specific integer types
+AC_DEFUN(AC_NEED_STDINT_H,
+[
+changequote(, )dnl
+ac_dir=`echo "$1"|sed 's%/[^/][^/]*$%%'`
+changequote([, ])dnl
+if test "$ac_dir" != "$1" && test "$ac_dir" != .; then
+  # The file is in a subdirectory.
+  test ! -d "$ac_dir" && mkdir "$ac_dir"
+fi
+
+AC_CHECK_DEFINED_TYPE(uint8_t,
+stdint.h,
+[
+cat > "$1" <<EOF
+/* This file is generated automatically by configure */
+#include <stdint.h>
+EOF],
+[AC_CHECK_DEFINED_TYPE(uint8_t,
+inttypes.h,
+[cat > "$1" <<EOF
+/* This file is generated automatically by configure */
+#include <inttypes.h>
+EOF],
+[AC_CHECK_DEFINED_TYPE(uint8_t,
+sys/types.h,
+[cat > "$1" <<EOF
+/* This file is generated automatically by configure */
+#include <sys/types.h>
+EOF],
+[AC_CHECK_DEFINED_TYPE(u_int8_t,
+sys/types.h,
+[cat > "$1" <<EOF
+/* This file is generated automatically by configure */
+#ifndef __STDINT_H
+#define __STDINT_H
+#include <sys/types.h>
+typedef u_int8_t uint8_t;
+typedef u_int16_t uint16_t;
+typedef u_int32_t uint32_t;
+EOF
+
+AC_CHECK_DEFINED_TYPE(u_int64_t,
+sys/types.h,
+[cat >> "$1" <<EOF
+typedef u_int64_t uint64_t;
+#endif /*!__STDINT_H*/
+EOF],
+[cat >> "$1" <<EOF
+/* 64-bit types are not available on this system */
+/* typedef u_int64_t uint64_t; */
+#endif /*!__STDINT_H*/
+EOF])
+
+],
+[AC_MSG_WARN([I can't find size-specific integer definitions on this system])
+if test -e "$1" ; then
+       rm -f "$1"
+fi
+])])])])dnl
+])