Generate USING_BINARY{32,64} - blind - suckless command-line video editing utility
 (HTM) git clone git://git.suckless.org/blind
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 48ca891887e8260be43ae641b35c4129fd4d2093
 (DIR) parent f3cde9060c57320c9ed7a9b4bcb494bd411fb1f4
 (HTM) Author: Mattias Andrée <maandree@kth.se>
       Date:   Sat, 15 Jul 2017 03:19:46 +0200
       
       Generate USING_BINARY{32,64}
       
       Signed-off-by: Mattias Andrée <maandree@kth.se>
       
       Diffstat:
         M .gitignore                          |       2 ++
         M Makefile                            |      12 +++++++++---
         M TODO                                |       1 -
         M src/blind-from-portable.c           |       3 ---
         M src/blind-to-portable.c             |       3 ---
         M src/common.h                        |       1 +
         A src/generate-macros.c               |      22 ++++++++++++++++++++++
       
       7 files changed, 34 insertions(+), 10 deletions(-)
       ---
 (DIR) diff --git a/.gitignore b/.gitignore
       @@ -7,6 +7,8 @@
        *.swp
        *.o
        *.out
       +/platform.h
       +/generate-macros
        /blind-*
        !/blind-rotate-90
        !/blind-rotate-180
 (DIR) diff --git a/Makefile b/Makefile
       @@ -155,9 +155,15 @@ all: $(BIN)
        %: %.o $(COMMON_OBJ)
                $(CC) -o $@ $^ $(LDFLAGS)
        
       -%.o: src/%.c src/*.h src/*/*.h
       +%.o: src/%.c src/*.h src/*/*.h platform.h
                $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
        
       +generate-macros: src/generate-macros.c
       +        $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
       +
       +platform.h: generate-macros
       +        ./generate-macros > platform.h
       +
        install: all
                mkdir -p -- "$(DESTDIR)$(PREFIX)/bin"
                cp -f -- $(BIN) "$(DESTDIR)$(PREFIX)/bin"
       @@ -196,9 +202,9 @@ dist:
                rm -rf "blind-$(VERSION)"
        
        clean:
       -        -rm -f $(BIN) *.o blind-$(VERSION).tar.gz
       +        -rm -f $(BIN) *.o blind-$(VERSION).tar.gz platform.h generate-macros
                -rm -rf "blind-$(VERSION)"
        
        
        .PHONY: all install uninstall dist clean
       -.PRECIOUS: $(COMMON_OBJ)
       +.PRECIOUS: $(COMMON_OBJ) platform.h
 (DIR) diff --git a/TODO b/TODO
       @@ -56,7 +56,6 @@ blind-arithm: add support for multiple streams
        
        Add [-j jobs] to blind-from-video and blind-to-video.
        
       -Generate a header file with the appropriate values for USING_BINARY32, USING_BINARY64.
        long double is slightly faster than long.
        long double (xyza q) could be added as another format.
        unsigned char (xyza 8) could be added as another format, it's probably good for previewing
 (DIR) diff --git a/src/blind-from-portable.c b/src/blind-from-portable.c
       @@ -3,9 +3,6 @@
        
        USAGE("[-s]")
        
       -#define USING_BINARY32 0
       -#define USING_BINARY64 0
       -
        #define CONV(ITYPE, SITYPE, OTYPE, EXPONENT, HA2EXPONENT, FRACTION)\
                do {\
                        static int cache_i = 0;\
 (DIR) diff --git a/src/blind-to-portable.c b/src/blind-to-portable.c
       @@ -9,9 +9,6 @@
        
        USAGE("[-s]")
        
       -#define USING_BINARY32 0
       -#define USING_BINARY64 0
       -
        #define CONV(ITYPE, OTYPE, SOTYPE, EXPONENT, HA2EXPONENT, FRACTION)\
                do {\
                        static int cache_i = 0;\
 (DIR) diff --git a/src/common.h b/src/common.h
       @@ -17,6 +17,7 @@
        # pragma GCC diagnostic ignored "-Wfloat-conversion"
        #endif
        
       +#include "../platform.h"
        #include "stream.h"
        #include "util.h"
        #include "video-math.h"
 (DIR) diff --git a/src/generate-macros.c b/src/generate-macros.c
       @@ -0,0 +1,22 @@
       +#include <stdint.h>
       +#include <stdio.h>
       +
       +int
       +main(void)
       +{
       +        if (sizeof(float) == 4) {
       +                unsigned long int a, b;
       +                a = (unsigned long int)*(uint32_t *)&(float){  (float)(1. / 12.) };
       +                b = (unsigned long int)*(uint32_t *)&(float){ -(float)(1. / 12.) };
       +                printf("#define USING_BINARY32 %i\n",
       +                       a == 0x3daaaaabUL && b == 0xbdaaaaabUL);
       +        }
       +        if (sizeof(double) == 8) {
       +                unsigned long long int a, b;
       +                a = (unsigned long long int)*(uint64_t *)&(double){  1. / 12. };
       +                b = (unsigned long long int)*(uint64_t *)&(double){ -1. / 12. };
       +                printf("#define USING_BINARY64 %i\n",
       +                       a == 0x3fb5555555555555ULL && b == 0xbfb5555555555555ULL);
       +        }
       +        return 0;
       +}