* add amalgamation option to eet (disabled by default,
authorcaro <caro>
Mon, 2 Nov 2009 08:41:43 +0000 (08:41 +0000)
committercaro <caro@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 2 Nov 2009 08:41:43 +0000 (08:41 +0000)
   as no real gain is seen (compilation time, size))
 * add namespace for words_bigendian, to make amalagamation happy
 * don't redefine macros, for the same purpose

git-svn-id: http://svn.enlightenment.org/svn/e/trunk/eet@43409 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

configure.ac
src/lib/Makefile.am
src/lib/eet_data.c
src/lib/eet_image.c
src/lib/eet_node.c

index 264d134..d992783 100644 (file)
@@ -51,6 +51,18 @@ requirement_eet=""
 
 ### Additional options to configure
 
+AC_ARG_ENABLE([amalgamation],
+   [AC_HELP_STRING([--enable-amalgamation], [enable generation of one single file with all source code in it, helps compiler optimizations.])],
+   [if test "x${enableval}" = "xyes"; then
+       do_amalgamation="yes"
+    else
+       do_amalgamation="no"
+    fi
+   ],
+   [do_amalgamation="no"]
+)
+AM_CONDITIONAL(EET_AMALGAMATION, test "x${do_amalgamation}" = "xyes")
+
 # Old eet file format support
 
 old_eet_file_format="yes"
@@ -401,6 +413,7 @@ echo "  Openssl..............: ${have_openssl}"
 echo "    Cipher support.....: ${have_cipher}"
 echo "    Signature..........: ${have_signature}"
 echo
+echo "  Amalgamation.........: ${do_amalgamation}"
 echo "  Documentation........: ${build_doc}"
 echo "  Tests................: ${enable_tests}"
 echo "  Coverage.............: ${enable_coverage}"
index 42cbe3f..560b609 100644 (file)
@@ -20,7 +20,7 @@ include_HEADERS = Eet.h
 
 lib_LTLIBRARIES = libeet.la
 
-libeet_la_SOURCES  = \
+base_sources = \
 eet_lib.c \
 eet_data.c \
 eet_image.c \
@@ -29,6 +29,127 @@ eet_dictionary.c \
 eet_node.c \
 eet_utils.c
 
+if EET_AMALGAMATION
+eet_sources_used = eet_amalgamation.c
+BUILT_SOURCES = eet_amalgamation.c
+
+eet_amalgamation.c: $(base_sources) Makefile
+       -rm -f eet_amalgamation.c
+
+       @echo "#ifdef HAVE_CONFIG_H" >> eet_amalgamation.c
+       @echo "# include \"config.h\"" >> eet_amalgamation.c
+       @echo "#endif" >> eet_amalgamation.c
+
+       @echo "#ifdef HAVE_ALLOCA_H" >> eet_amalgamation.c
+       @echo "# include <alloca.h>" >> eet_amalgamation.c
+       @echo "#elif defined __GNUC__" >> eet_amalgamation.c
+       @echo "# define alloca __builtin_alloca" >> eet_amalgamation.c
+       @echo "#elif defined _AIX" >> eet_amalgamation.c
+       @echo "# define alloca __alloca" >> eet_amalgamation.c
+       @echo "#elif defined _MSC_VER" >> eet_amalgamation.c
+       @echo "# include <malloc.h>" >> eet_amalgamation.c
+       @echo "# define alloca _alloca" >> eet_amalgamation.c
+       @echo "#else" >> eet_amalgamation.c
+       @echo "# include <stddef.h>" >> eet_amalgamation.c
+       @echo "# ifdef __cplusplus" >> eet_amalgamation.c
+       @echo "#extern \"C\"" >> eet_amalgamation.c
+       @echo "# endif" >> eet_amalgamation.c
+       @echo "#void *alloca (size_t);" >> eet_amalgamation.c
+       @echo "#endif" >> eet_amalgamation.c
+
+       @echo "#include <stdio.h>" >> eet_amalgamation.c
+       @echo "#include <string.h>" >> eet_amalgamation.c
+       @echo "#include <math.h>" >> eet_amalgamation.c
+       @echo "#include <ctype.h>" >> eet_amalgamation.c
+       @echo "#include <limits.h>" >> eet_amalgamation.c
+       @echo "#include <sys/types.h>" >> eet_amalgamation.c
+       @echo "#include <sys/stat.h>" >> eet_amalgamation.c
+       @echo "#include <sys/mman.h>" >> eet_amalgamation.c
+       @echo "#include <setjmp.h>" >> eet_amalgamation.c
+       @echo "#include <errno.h>" >> eet_amalgamation.c
+       @echo "#include <time.h>" >> eet_amalgamation.c
+       @echo "#include <fnmatch.h>" >> eet_amalgamation.c
+       @echo "#include <fcntl.h>" >> eet_amalgamation.c
+
+       @echo "#ifdef _WIN32" >> eet_amalgamation.c
+       @echo "# include <winsock2.h>" >> eet_amalgamation.c
+       @echo "#endif" >> eet_amalgamation.c
+
+       @echo "#ifndef _MSC_VER" >> eet_amalgamation.c
+       @echo "# include <unistd.h>" >> eet_amalgamation.c
+       @echo "#endif" >> eet_amalgamation.c
+
+       @echo "#ifdef HAVE_NETINET_IN_H" >> eet_amalgamation.c
+       @echo "# include <netinet/in.h>" >> eet_amalgamation.c
+       @echo "#endif" >> eet_amalgamation.c
+
+       @echo "#ifdef HAVE_GNUTLS" >> eet_amalgamation.c
+       @echo "# include <gnutls/gnutls.h>" >> eet_amalgamation.c
+       @echo "# include <gcrypt.h>" >> eet_amalgamation.c
+       @echo "#endif" >> eet_amalgamation.c
+
+       @echo "#ifdef HAVE_OPENSSL" >> eet_amalgamation.c
+       @echo "# include <openssl/err.h>" >> eet_amalgamation.c
+       @echo "# include <openssl/evp.h>" >> eet_amalgamation.c
+       @echo "# include <openssl/sha.h>" >> eet_amalgamation.c
+       @echo "#endif" >> eet_amalgamation.c
+
+       @echo "#ifdef HAVE_SIGNATURE" >> eet_amalgamation.c
+       @echo "# ifdef HAVE_GNUTLS" >> eet_amalgamation.c
+       @echo "#  include <gnutls/gnutls.h>" >> eet_amalgamation.c
+       @echo "#  include <gnutls/x509.h>" >> eet_amalgamation.c
+       @echo "# else" >> eet_amalgamation.c
+       @echo "#  include <openssl/rsa.h>" >> eet_amalgamation.c
+       @echo "#  include <openssl/objects.h>" >> eet_amalgamation.c
+       @echo "#  include <openssl/err.h>" >> eet_amalgamation.c
+       @echo "#  include <openssl/ssl.h>" >> eet_amalgamation.c
+       @echo "#  include <openssl/dh.h>" >> eet_amalgamation.c
+       @echo "#  include <openssl/dsa.h>" >> eet_amalgamation.c
+       @echo "#  include <openssl/evp.h>" >> eet_amalgamation.c
+       @echo "#  include <openssl/x509.h>" >> eet_amalgamation.c
+       @echo "#  include <openssl/pem.h>" >> eet_amalgamation.c
+       @echo "# endif" >> eet_amalgamation.c
+       @echo "#endif" >> eet_amalgamation.c
+
+       @echo "#ifdef HAVE_CIPHER" >> eet_amalgamation.c
+       @echo "# ifdef HAVE_GNUTLS" >> eet_amalgamation.c
+       @echo "#  include <gnutls/x509..h>" >> eet_amalgamation.c
+       @echo "#  include <gcrypt.h>" >> eet_amalgamation.c
+       @echo "# else" >> eet_amalgamation.c
+       @echo "#  include <openssl/evp.h>" >> eet_amalgamation.c
+       @echo "#  include <openssl/hmac.h>" >> eet_amalgamation.c
+       @echo "#  include <openssl/rand.h>" >> eet_amalgamation.c
+       @echo "# endif" >> eet_amalgamation.c
+       @echo "#endif" >> eet_amalgamation.c
+
+       @echo "#include <zlib.h>" >> eet_amalgamation.c
+       @echo "#include <jpeglib.h>" >> eet_amalgamation.c
+
+       @echo "#ifdef HAVE_EVIL" >> eet_amalgamation.c
+       @echo "# include <Evil.h>" >> eet_amalgamation.c
+       @echo "#endif" >> eet_amalgamation.c
+
+       @echo "#include <Eet.h>" >> eet_amalgamation.c
+
+       @echo "#include \"Eet_private.h\"" >> eet_amalgamation.c
+       @echo "#include \"Eet.h\"" >> eet_amalgamation.c
+
+       @for f in $(base_sources); do \
+          if [ `expr substr $$f 1 1` != '/' ]; then \
+                 file="$(srcdir)/$$f" ; \
+          else \
+                 file="$$f" ; \
+          fi ; \
+          echo "/* file: $$file */" >> eet_amalgamation.c; \
+          grep -v -e '^# *include \+.\(config\|\|Evil\|Eina\|stdio\|string\|math\|ctype\|limits\|types\|stat\|mman\|setjmp\|errno\|time\|fnmatch\|fcntl\|winsowk2\|unistd\|in\|gnutls\|gcrypt\|x509\|rsa\|objects\|err\|ssl\|dh\|dsa\|evp\|pem\|sha\|hmac\|rand\|zlib\|jpeglib\|Eet_private\|Eet\)[.]h.*' $$file >> eet_amalgamation.c; \
+       done
+       @echo "eet_amalgamation.c generated"
+
+else
+eet_sources_used = $(base_sources)
+endif
+
+libeet_la_SOURCES = $(eet_sources_used)
 libeet_la_CFLAGS = @EET_CFLAGS@ @DEBUG_CFLAGS@
 libeet_la_LIBADD = @GNUTLS_LIBS@ @OPENSSL_LIBS@ @EFL_COVERAGE_LIBS@ @EET_LIBS@ @EINA_LIBS@ @EVIL_LIBS@ -lz -ljpeg -lm
 libeet_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@
@@ -36,4 +157,4 @@ libeet_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version
 EXTRA_DIST = Eet_private.h
 
 clean-local:
-       @rm -rf *.gcno
+       @rm -rf *.gcno eet_amalgamation.c
index 8479023..32878a6 100644 (file)
@@ -7,9 +7,9 @@
 #endif
 
 #if HAVE___ATTRIBUTE__
-#define __UNUSED__ __attribute__((unused))
+# define __UNUSED__ __attribute__((unused))
 #else
-#define __UNUSED__
+# define __UNUSED__
 #endif
 
 #include <stdio.h>
@@ -292,7 +292,7 @@ static const Eet_Data_Group_Type_Codec eet_group_codec[] =
      { eet_data_get_hash,     eet_data_put_hash }
 };
 
-static int words_bigendian = -1;
+static int _eet_data_words_bigendian = -1;
 
 /*---*/
 
@@ -314,10 +314,23 @@ static int words_bigendian = -1;
    ((((short)(x) & 0x00ff ) << 8) |\
        (((short)(x) & 0xff00 ) >> 8))
 
+#ifdef CONV8
+# undef CONV8
+#endif
+#ifdef CONV16
+# undef CONV16
+#endif
+#ifdef CONV32
+# undef CONV32
+#endif
+#ifdef CONV64
+# undef CONV64
+#endif
+
 #define CONV8(x)
-#define CONV16(x) {if (words_bigendian) SWAP16(x);}
-#define CONV32(x) {if (words_bigendian) SWAP32(x);}
-#define CONV64(x) {if (words_bigendian) SWAP64(x);}
+#define CONV16(x) {if (_eet_data_words_bigendian) SWAP16(x);}
+#define CONV32(x) {if (_eet_data_words_bigendian) SWAP32(x);}
+#define CONV64(x) {if (_eet_data_words_bigendian) SWAP64(x);}
 
 #define IS_SIMPLE_TYPE(Type)    (Type > EET_T_UNKNOW && Type < EET_T_LAST)
 
@@ -1814,13 +1827,13 @@ _eet_data_dump_encode(Eet_Dictionary *ed,
    int csize, size;
    Eet_Node *n;
 
-   if (words_bigendian == -1)
+   if (_eet_data_words_bigendian == -1)
      {
        unsigned long int v;
 
        v = htonl(0x12345678);
-       if (v == 0x12345678) words_bigendian = 1;
-       else words_bigendian = 0;
+       if (v == 0x12345678) _eet_data_words_bigendian = 1;
+       else _eet_data_words_bigendian = 0;
      }
 
    if (node == NULL) return NULL;
@@ -2335,13 +2348,13 @@ _eet_data_descriptor_decode(Eet_Free_Context *context,
    int size, i, dump;
    Eet_Data_Chunk chnk;
 
-   if (words_bigendian == -1)
+   if (_eet_data_words_bigendian == -1)
      {
        unsigned long int v;
 
        v = htonl(0x12345678);
-       if (v == 0x12345678) words_bigendian = 1;
-       else words_bigendian = 0;
+       if (v == 0x12345678) _eet_data_words_bigendian = 1;
+       else _eet_data_words_bigendian = 0;
      }
 
    if (edd)
@@ -2808,6 +2821,10 @@ eet_data_dump_simple_type(int type, const char *name, void *dd,
    _eet_data_dump_string_escape(dumpdata, dumpfunc, name);
    dumpfunc(dumpdata, "\" ");
 
+#ifdef EET_T_TYPE
+# undef EET_T_TYPE
+#endif
+
 #define EET_T_TYPE(Eet_Type, Type)                                     \
    case Eet_Type:                                                      \
      {                                                                 \
@@ -3257,13 +3274,13 @@ _eet_data_descriptor_encode(Eet_Dictionary *ed,
    int                   csize;
    int                   i;
 
-   if (words_bigendian == -1)
+   if (_eet_data_words_bigendian == -1)
      {
        unsigned long int v;
 
        v = htonl(0x12345678);
-       if (v == 0x12345678) words_bigendian = 1;
-       else words_bigendian = 0;
+       if (v == 0x12345678) _eet_data_words_bigendian = 1;
+       else _eet_data_words_bigendian = 0;
      }
 
    ds = eet_data_stream_new();
index 1f89bcd..3615072 100644 (file)
@@ -217,7 +217,7 @@ static void *eet_data_image_jpeg_alpha_convert(int *size, const void *data, unsi
 
 /*---*/
 
-static int words_bigendian = -1;
+static int _eet_image_words_bigendian = -1;
 
 /*---*/
 
@@ -239,10 +239,23 @@ static int words_bigendian = -1;
    ((((short)(x) & 0x00ff ) << 8) |\
        (((short)(x) & 0xff00 ) >> 8))
 
+#ifdef CONV8
+# undef CONV8
+#endif
+#ifdef CONV16
+# undef CONV16
+#endif
+#ifdef CONV32
+# undef CONV32
+#endif
+#ifdef CONV64
+# undef CONV64
+#endif
+
 #define CONV8(x)
-#define CONV16(x) {if (words_bigendian) SWAP16(x);}
-#define CONV32(x) {if (words_bigendian) SWAP32(x);}
-#define CONV64(x) {if (words_bigendian) SWAP64(x);}
+#define CONV16(x) {if (_eet_image_words_bigendian) SWAP16(x);}
+#define CONV32(x) {if (_eet_image_words_bigendian) SWAP32(x);}
+#define CONV64(x) {if (_eet_image_words_bigendian) SWAP64(x);}
 
 /*---*/
 
@@ -546,13 +559,13 @@ eet_data_image_jpeg_alpha_decode(const void *data, int size, unsigned int src_x,
 static void *
 eet_data_image_lossless_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha)
 {
-   if (words_bigendian == -1)
+   if (_eet_image_words_bigendian == -1)
      {
        unsigned long int v;
 
        v = htonl(0x12345678);
-       if (v == 0x12345678) words_bigendian = 1;
-       else words_bigendian = 0;
+       if (v == 0x12345678) _eet_image_words_bigendian = 1;
+       else _eet_image_words_bigendian = 0;
      }
      {
        unsigned char *d;
@@ -571,7 +584,7 @@ eet_data_image_lossless_convert(int *size, const void *data, unsigned int w, uns
 
        memcpy(d + 32, data, w * h * 4);
 
-       if (words_bigendian)
+       if (_eet_image_words_bigendian)
          {
             unsigned int i;
 
@@ -585,13 +598,13 @@ eet_data_image_lossless_convert(int *size, const void *data, unsigned int w, uns
 static void *
 eet_data_image_lossless_compressed_convert(int *size, const void *data, unsigned int w, unsigned int h, int alpha, int compression)
 {
-   if (words_bigendian == -1)
+   if (_eet_image_words_bigendian == -1)
      {
        unsigned long int v;
 
        v = htonl(0x12345678);
-       if (v == 0x12345678) words_bigendian = 1;
-       else words_bigendian = 0;
+       if (v == 0x12345678) _eet_image_words_bigendian = 1;
+       else _eet_image_words_bigendian = 0;
      }
 
      {
@@ -620,7 +633,7 @@ eet_data_image_lossless_compressed_convert(int *size, const void *data, unsigned
        header[4] = compression;
        memcpy(d + 32, data, w * h * 4);
 
-       if (words_bigendian)
+       if (_eet_image_words_bigendian)
          {
             unsigned int i;
 
@@ -725,13 +738,13 @@ eet_data_image_jpeg_alpha_convert(int *size, const void *data, unsigned int w, u
 
    (void) alpha; /* unused */
 
-   if (words_bigendian == -1)
+   if (_eet_image_words_bigendian == -1)
      {
        unsigned long int v;
 
        v = htonl(0x12345678);
-       if (v == 0x12345678) words_bigendian = 1;
-       else words_bigendian = 0;
+       if (v == 0x12345678) _eet_image_words_bigendian = 1;
+       else _eet_image_words_bigendian = 0;
      }
 
      {
@@ -876,7 +889,7 @@ eet_data_image_jpeg_alpha_convert(int *size, const void *data, unsigned int w, u
    header[0] = 0xbeeff00d;
    header[1] = sz1;
    header[2] = sz2;
-   if (words_bigendian)
+   if (_eet_image_words_bigendian)
      {
        int i;
 
@@ -1090,19 +1103,19 @@ eet_data_image_header_decode_cipher(const void *data, const char *key, int size,
         if (deciphered_d) free(deciphered_d);
      }
 
-   if (words_bigendian == -1)
+   if (_eet_image_words_bigendian == -1)
      {
        unsigned long int v;
 
        v = htonl(0x12345678);
-       if (v == 0x12345678) words_bigendian = 1;
-       else words_bigendian = 0;
+       if (v == 0x12345678) _eet_image_words_bigendian = 1;
+       else _eet_image_words_bigendian = 0;
      }
 
    if (size < 32) return 0;
 
    memcpy(header, data, 32);
-   if (words_bigendian)
+   if (_eet_image_words_bigendian)
      {
        int i;
 
@@ -1239,7 +1252,7 @@ _eet_data_image_decode_inside(const void *data, int size, unsigned int src_x, un
          }
 
        /* Fix swapiness. */
-       if (words_bigendian)
+       if (_eet_image_words_bigendian)
          {
             unsigned int x;
 
@@ -1255,7 +1268,7 @@ _eet_data_image_decode_inside(const void *data, int size, unsigned int src_x, un
             int sz1, sz2;
 
             memcpy(header, data, 32);
-            if (words_bigendian)
+            if (_eet_image_words_bigendian)
               {
                  int i;
 
index d91d10b..e0592df 100644 (file)
@@ -316,6 +316,10 @@ eet_node_dump_simple_type(Eet_Node *n, int level,
    eet_node_dump_string_escape(dumpdata, dumpfunc, n->name);
    dumpfunc(dumpdata, "\" ");
 
+#ifdef EET_T_TYPE
+# undef EET_T_TYPE
+#endif
+
 #define EET_T_TYPE(Eet_Type, Type)                                     \
    case Eet_Type:                                                      \
      {                                                                 \