SHA256
1
0
forked from pool/tvheadend
tvheadend/fix_configure_checks_with_LTO.patch
Martin Pluskal d1ab614007 Accepting request 736746 from home:StefanBruens:branches:multimedia:apps
- Fix configure checks when compiling with LTO. Due to the broken
  checks, linking fails.
  + Add fix_configure_checks_with_LTO.patch
- Some spec file cleanup (license macro).

OBS-URL: https://build.opensuse.org/request/show/736746
OBS-URL: https://build.opensuse.org/package/show/multimedia:apps/tvheadend?expand=0&rev=36
2019-10-10 08:15:48 +00:00

81 lines
2.1 KiB
Diff

From 77ef695f0e76a5f989febfccdc19972ec438fa37 Mon Sep 17 00:00:00 2001
From: StefanBruens <stefan.bruens@rwth-aachen.de>
Date: Wed, 9 Oct 2019 01:52:50 +0200
Subject: [PATCH] Avoid configure checks being optimized away with LTO
In case the checks are compiled with CFLAGS including "-O1 -flto" (or any
other optimization level), a "test()" function not referenced by by main
will be optimized away and discarded prior to the final linking step, and
there will be no undefined symbols, thus the checks always succeeds.
This at least affects the "strlcpy"/"strlcat" checks, but may affects other
checks as well.
---
configure | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/configure b/configure
index e5f6f593b6..e76760479a 100755
--- a/configure
+++ b/configure
@@ -177,27 +177,31 @@ else
fi
check_cc_snippet strlcat '#include <string.h>
-int test(int argc, char **argv) {
+#define TEST test
+int test() {
char dst[10];
strlcat("test", dst, sizeof(dst));
return 0;
}'
check_cc_snippet strlcpy '#include <string.h>
-int test(int argc, char **argv) {
+#define TEST test
+int test() {
char dst[10];
strlcpy("test", dst, sizeof(dst));
return 0;
}'
check_cc_snippet fdatasync '#include <unistd.h>
-int test(int argc, char **argv) {
+#define TEST test
+int test() {
fdatasync(0);
return 0;
}'
check_cc_snippet getloadavg '#include <stdlib.h>
-void test() { getloadavg(NULL,0); }'
+#define TEST test
+int test() { return getloadavg(NULL,0); }'
check_cc_snippet atomic32 '#include <stdint.h>
int test(int *ptr){
@@ -222,6 +226,7 @@ return __sync_fetch_and_add(ptr, (void *)1);
}'
check_cc_snippet bitops64 '#include <stdint.h>
+#define TEST test
int test(void){
int l = sizeof(long);
return l == 8 ? 0 : 1;
@@ -312,6 +317,7 @@ int test(void)
# note that iconv routines are mandatory
check_cc_snippet libiconv '
#include <iconv.h>
+#define TEST test
int test(void)
{
iconv_t ic = iconv_open("ASCII", "ASCII");
@@ -327,6 +333,7 @@ fi
check_cc_snippet ifnames '
#include <net/if.h>
+#define TEST test
int test(void)
{
struct if_nameindex *ifnames = if_nameindex();