Fix a problem if CFLAGS is too long cversion.c fails to compile when config
authorMatt Caswell <matt@openssl.org>
Fri, 19 Dec 2014 10:55:54 +0000 (10:55 +0000)
committerMatt Caswell <matt@openssl.org>
Fri, 19 Dec 2014 14:02:15 +0000 (14:02 +0000)
is run with --strict-warnings.

Reviewed-by: Richard Levitte <levitte@openssl.org>
crypto/Makefile
crypto/cversion.c
util/mkbuildinf.pl [new file with mode: 0755]

index 0029b1b..d4c7712 100644 (file)
@@ -64,12 +64,7 @@ fips: cryptlib.o thr_id.o uid.o $(CPUID_OBJ)
                done;
 
 buildinf.h: ../Makefile
-       ( echo "#ifndef MK1MF_BUILD"; \
-       echo '  /* auto-generated by crypto/Makefile for crypto/cversion.c */'; \
-       echo '  #define CFLAGS "$(CC) $(CFLAG)"'; \
-       echo '  #define PLATFORM "$(PLATFORM)"'; \
-       echo "  #define DATE \"`LC_ALL=C LC_TIME=C date`\""; \
-       echo '#endif' ) >buildinf.h
+       $(PERL) $(TOP)/util/mkbuildinf.pl "$(CFLAGS)" "$(PLATFORM)" >buildinf.h
 
 x86cpuid.s:    x86cpuid.pl perlasm/x86asm.pl
        $(PERL) x86cpuid.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
index ea9f25f..0336ada 100644 (file)
@@ -69,10 +69,7 @@ const char *SSLeay_version(int t)
        if (t == SSLEAY_BUILT_ON)
                {
 #ifdef DATE
-               static char buf[sizeof(DATE)+11];
-
-               BIO_snprintf(buf,sizeof buf,"built on: %s",DATE);
-               return(buf);
+               return(DATE);
 #else
                return("built on: date not available");
 #endif
@@ -80,10 +77,7 @@ const char *SSLeay_version(int t)
        if (t == SSLEAY_CFLAGS)
                {
 #ifdef CFLAGS
-               static char buf[sizeof(CFLAGS)+11];
-
-               BIO_snprintf(buf,sizeof buf,"compiler: %s",CFLAGS);
-               return(buf);
+               return(cflags);
 #else
                return("compiler: information not available");
 #endif
@@ -91,10 +85,7 @@ const char *SSLeay_version(int t)
        if (t == SSLEAY_PLATFORM)
                {
 #ifdef PLATFORM
-               static char buf[sizeof(PLATFORM)+11];
-
-               BIO_snprintf(buf,sizeof buf,"platform: %s", PLATFORM);
-               return(buf);
+               return(PLATFORM);
 #else
                return("platform: information not available");
 #endif
diff --git a/util/mkbuildinf.pl b/util/mkbuildinf.pl
new file mode 100755 (executable)
index 0000000..ca02d7b
--- /dev/null
@@ -0,0 +1,35 @@
+#!/usr/local/bin/perl
+
+my ($cflags, $platform) = @ARGV;
+
+$cflags = "compiler: $cflags";
+$date = localtime();
+print <<"END_OUTPUT";
+#ifndef MK1MF_BUILD
+    /* auto-generated by util/mkbuildinf.pl for crypto/cversion.c */
+    #define CFLAGS
+    /*
+     * Generate CFLAGS as an array of individual characters. This is a
+     * workaround for the situation where CFLAGS gets too long for a C90 string
+     * literal
+     */
+    static const char cflags[] = {
+END_OUTPUT
+my $ctr = 0;
+foreach my $c (split //, $cflags) {
+    # Max 18 characters per line
+    if  (($ctr++ % 18) == 0) {
+        if ($ctr != 0) {
+            print "\n";
+        }
+        print "        ";
+    }
+    print "'$c',";
+}
+print <<"END_OUTPUT";
+'\\0'
+    };
+    #define PLATFORM "platform: $platform"
+    #define DATE "built on: $date"
+#endif
+END_OUTPUT