Bug 1217111

Summary: add -pthread to pkg-config
Product: Red Hat Enterprise Linux 7 Reporter: Petr Pisar <ppisar>
Component: pcreAssignee: Petr Pisar <ppisar>
Status: CLOSED ERRATA QA Contact: Jan Kepler <jkejda>
Severity: high Docs Contact:
Priority: unspecified    
Version: 7.1CC: jkejda, jorton, pbokoc
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
URL: http://bugs.exim.org/show_bug.cgi?id=1620
Whiteboard:
Fixed In Version: pcre-8.32-15.el7 Doc Type: Bug Fix
Doc Text:
Linking an application to the static PCRE library using the libpcre module for pkg-config was failing due to missing pthread symbols. The pkg-config modules for PCRE libraries have been updated to declare private libraries properly, and the "pkg-config --static --libs libpcre" command can now be used to link the static pcre library to an application.
Story Points: ---
Clone Of: 1214494 Environment:
Last Closed: 2015-11-19 05:15:22 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
Upstream fix none

Description Petr Pisar 2015-04-29 14:57:17 UTC
Created attachment 1020220 [details]
Upstream fix

+++ This bug was initially created as a clone of Bug #1214494 +++

+++ This bug was initially created as a clone of Bug #1185266 +++

pcre.pc is incomplete and static builds against pcre are broken

Actual results:

$ pkg-config --static --libs libpcre
-lpcre

$ cat test_pcre.c 
#include <pcre.h>

int main() {
        pcre_jit_free_unused_memory();
        return 0;
}

$ gcc -static test_pcre.c `pkg-config --static --libs libpcre`               
/usr/lib/gcc/x86_64-redhat-linux/5.0.1/../../../../lib64/libpcre.a(libpcre_la-pcre_jit_compile.o): In function `sljit_generate_code':
(.text+0x6b1): undefined reference to `pthread_mutex_lock'
/usr/lib/gcc/x86_64-redhat-linux/5.0.1/../../../../lib64/libpcre.a(libpcre_la-pcre_jit_compile.o): In function `sljit_generate_code':
(.text+0x7a6): undefined reference to `pthread_mutex_unlock'
/usr/lib/gcc/x86_64-redhat-linux/5.0.1/../../../../lib64/libpcre.a(libpcre_la-pcre_jit_compile.o): In function `sljit_generate_code':
(.text+0xb31): undefined reference to `pthread_mutex_unlock'
...


Expected results:

$ pkg-config --static --libs libpcre
-lpcre -pthread 

$ gcc -static test_pcre.c `pkg-config --static --libs libpcre`

$

--- Additional comment from Petr Pisar on 2015-04-23 12:44:02 GMT ---

This patch fixes it.

The `-static' gcc patch forces searching for static libpthread library which is provided by glibc-static. I could add glibc-static to run-time dependencies of pcre-static, however it's not really necessary because one can link against /usr/lib64/libpcre.a directly without the -static option (and pkg-config), and then the glibc-static package is not needed. Also with -static, one needs static libc because of the main program entry point. So the dependency can bee seen as a dependency of the compiled program, not pcre-static. I'm not sure about the dependency.

[...]
----

pcre-static-8.32-14.el7.x86_64 is affected.

You can use this code to compile because the original example uses a symbol not yet provided by this PCRE version:

#include <pcre.h>
int main() {
        pcre_jit_stack *stack;
        stack = pcre_jit_stack_alloc(64, 64);
        pcre_jit_stack_free(stack);
        return 0;
}

Comment 7 errata-xmlrpc 2015-11-19 05:15:22 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHBA-2015-2142.html