Makefile: -lpthread may still be necessary when libc has only pthread stubs

Without this patch, systems that provide stubs for pthread functions
in libc, but which still require libpthread for full the pthread
implementation are not detected correctly.

Also, some systems require -pthread in CFLAGS for each compilation
unit for a successful link of an mt binary, which is also addressed by
this patch.

Signed-off-by: Gary V. Vaughan <gary@thewrittenword.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Gary V. Vaughan 2010-05-14 09:31:34 +00:00 коммит произвёл Junio C Hamano
Родитель 66dbfd55e3
Коммит 48793cf46a
3 изменённых файлов: 20 добавлений и 2 удалений

Просмотреть файл

@ -294,6 +294,7 @@ RPMBUILD = rpmbuild
TCL_PATH = tclsh TCL_PATH = tclsh
TCLTK_PATH = wish TCLTK_PATH = wish
PTHREAD_LIBS = -lpthread PTHREAD_LIBS = -lpthread
PTHREAD_CFLAGS =
export TCL_PATH TCLTK_PATH export TCL_PATH TCLTK_PATH
@ -898,6 +899,8 @@ ifeq ($(uname_S),AIX)
BASIC_CFLAGS += -D_LARGE_FILES BASIC_CFLAGS += -D_LARGE_FILES
ifeq ($(shell expr "$(uname_V)" : '[1234]'),1) ifeq ($(shell expr "$(uname_V)" : '[1234]'),1)
NO_PTHREADS = YesPlease NO_PTHREADS = YesPlease
else
PTHREAD_LIBS = -lpthread
endif endif
endif endif
ifeq ($(uname_S),GNU) ifeq ($(uname_S),GNU)
@ -1349,6 +1352,7 @@ endif
ifdef NO_PTHREADS ifdef NO_PTHREADS
BASIC_CFLAGS += -DNO_PTHREADS BASIC_CFLAGS += -DNO_PTHREADS
else else
BASIC_CFLAGS += $(PTHREAD_CFLAGS)
EXTLIBS += $(PTHREAD_LIBS) EXTLIBS += $(PTHREAD_LIBS)
LIB_OBJS += thread-utils.o LIB_OBJS += thread-utils.o
endif endif

Просмотреть файл

@ -57,4 +57,5 @@ NO_DEFLATE_BOUND=@NO_DEFLATE_BOUND@
FREAD_READS_DIRECTORIES=@FREAD_READS_DIRECTORIES@ FREAD_READS_DIRECTORIES=@FREAD_READS_DIRECTORIES@
SNPRINTF_RETURNS_BOGUS=@SNPRINTF_RETURNS_BOGUS@ SNPRINTF_RETURNS_BOGUS=@SNPRINTF_RETURNS_BOGUS@
NO_PTHREADS=@NO_PTHREADS@ NO_PTHREADS=@NO_PTHREADS@
PTHREAD_CFLAGS=@PTHREAD_CFLAGS@
PTHREAD_LIBS=@PTHREAD_LIBS@ PTHREAD_LIBS=@PTHREAD_LIBS@

Просмотреть файл

@ -802,7 +802,11 @@ AC_DEFUN([PTHREADTEST_SRC], [
int main(void) int main(void)
{ {
pthread_mutex_t test_mutex; pthread_mutex_t test_mutex;
return (0); int retcode = 0;
retcode |= pthread_mutex_init(&test_mutex,(void *)0);
retcode |= pthread_mutex_lock(&test_mutex);
retcode |= pthread_mutex_unlock(&test_mutex);
return retcode;
} }
]) ])
@ -819,7 +823,8 @@ if test -n "$USER_NOPTHREAD"; then
# handle these separately since PTHREAD_CFLAGS could be '-lpthreads # handle these separately since PTHREAD_CFLAGS could be '-lpthreads
# -D_REENTRANT' or some such. # -D_REENTRANT' or some such.
elif test -z "$PTHREAD_CFLAGS"; then elif test -z "$PTHREAD_CFLAGS"; then
for opt in -pthread -lpthread; do threads_found=no
for opt in -mt -pthread -lpthread; do
old_CFLAGS="$CFLAGS" old_CFLAGS="$CFLAGS"
CFLAGS="$opt $CFLAGS" CFLAGS="$opt $CFLAGS"
AC_MSG_CHECKING([Checking for POSIX Threads with '$opt']) AC_MSG_CHECKING([Checking for POSIX Threads with '$opt'])
@ -827,11 +832,18 @@ elif test -z "$PTHREAD_CFLAGS"; then
[AC_MSG_RESULT([yes]) [AC_MSG_RESULT([yes])
NO_PTHREADS= NO_PTHREADS=
PTHREAD_LIBS="$opt" PTHREAD_LIBS="$opt"
PTHREAD_CFLAGS="$opt"
threads_found=yes
break break
], ],
[AC_MSG_RESULT([no])]) [AC_MSG_RESULT([no])])
CFLAGS="$old_CFLAGS" CFLAGS="$old_CFLAGS"
done done
if test $threads_found != yes; then
AC_CHECK_LIB([pthread], [pthread_create],
[PTHREAD_LIBS="-lpthread"],
[NO_PTHREADS=UnfortunatelyYes])
fi
else else
old_CFLAGS="$CFLAGS" old_CFLAGS="$CFLAGS"
CFLAGS="$PTHREAD_CFLAGS $CFLAGS" CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
@ -848,6 +860,7 @@ fi
CFLAGS="$old_CFLAGS" CFLAGS="$old_CFLAGS"
AC_SUBST(PTHREAD_CFLAGS)
AC_SUBST(PTHREAD_LIBS) AC_SUBST(PTHREAD_LIBS)
AC_SUBST(NO_PTHREADS) AC_SUBST(NO_PTHREADS)