aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2014-12-19 10:55:54 +0000
committerMatt Caswell <matt@openssl.org>2014-12-19 14:02:15 +0000
commit488f16e31b8f5ec2513410929325d0830d76762d (patch)
tree35e4c59165bd00bdc762601b26c4d9f37066955f
parentc0fc27f88ea0933a3e201325fc683b52fe55d848 (diff)
downloadopenssl-488f16e31b8f5ec2513410929325d0830d76762d.tar.gz
Fix a problem if CFLAGS is too long cversion.c fails to compile when config
is run with --strict-warnings. Reviewed-by: Richard Levitte <levitte@openssl.org>
-rw-r--r--crypto/Makefile7
-rw-r--r--crypto/cversion.c15
-rwxr-xr-xutil/mkbuildinf.pl35
3 files changed, 39 insertions, 18 deletions
diff --git a/crypto/Makefile b/crypto/Makefile
index 0029b1b5bd..d4c7712ffd 100644
--- a/crypto/Makefile
+++ b/crypto/Makefile
@@ -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) > $@
diff --git a/crypto/cversion.c b/crypto/cversion.c
index ea9f25fd16..0336adaa57 100644
--- a/crypto/cversion.c
+++ b/crypto/cversion.c
@@ -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
index 0000000000..ca02d7b0b2
--- /dev/null
+++ b/util/mkbuildinf.pl
@@ -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