From f93956db82f2d478b1a3dfd34d3fe024d4afd636 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Sat, 27 Apr 2013 08:23:32 +0000 Subject: [PATCH] asynchronous ws call for flagging article as read --- Makefile | 5 +-- Makefile.in | 1 + config.status | 6 ++-- configure | 50 +++++++++++++++++++++++++++ configure.ac | 5 +++ src/Makefile.am | 6 +++- src/Makefile.in | 14 ++++++-- src/glade/Makefile.in | 1 + src/list.c | 62 ++++++++++++++++++++++++++++++++++ src/list.h | 27 +++++++++++++++ src/ttrss.c | 4 +-- src/ttrss_model.c | 35 +------------------ src/ttrss_ws.c | 19 ++++++++--- src/ttrss_ws.h | 1 + src/ttrss_wsasync.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/ttrss_wsasync.h | 27 +++++++++++++++ tests/Makefile.in | 1 + 17 files changed, 308 insertions(+), 49 deletions(-) create mode 100644 src/list.c create mode 100644 src/list.h create mode 100644 src/ttrss_wsasync.c create mode 100644 src/ttrss_wsasync.h diff --git a/Makefile b/Makefile index 5c37ab8..b4cca47 100644 --- a/Makefile +++ b/Makefile @@ -171,7 +171,7 @@ CPPFLAGS = CURL_CFLAGS = CURL_LIBS = -lcurl CYGPATH_W = echo -DEFS = -DPACKAGE_NAME=\"prss\" -DPACKAGE_TARNAME=\"prss\" -DPACKAGE_VERSION=\"0.0.x\" -DPACKAGE_STRING=\"prss\ 0.0.x\" -DPACKAGE_BUGREPORT=\"jeanfi@gmail.com\" -DPACKAGE_URL=\"http://wpitchoune.net/prss\" -DPACKAGE=\"prss\" -DVERSION=\"0.0.x\" -DENABLE_NLS=1 -DHAVE_GETTEXT=1 -DHAVE_DCGETTEXT=1 +DEFS = -DPACKAGE_NAME=\"prss\" -DPACKAGE_TARNAME=\"prss\" -DPACKAGE_VERSION=\"0.0.x\" -DPACKAGE_STRING=\"prss\ 0.0.x\" -DPACKAGE_BUGREPORT=\"jeanfi@gmail.com\" -DPACKAGE_URL=\"http://wpitchoune.net/prss\" -DPACKAGE=\"prss\" -DVERSION=\"0.0.x\" -DENABLE_NLS=1 -DHAVE_GETTEXT=1 -DHAVE_DCGETTEXT=1 -DHAVE_LIBPTHREAD=1 DEPDIR = .deps ECHO_C = ECHO_N = -n @@ -201,7 +201,7 @@ LDFLAGS = LIBICONV = -liconv LIBINTL = LIBOBJS = -LIBS = +LIBS = -lpthread LTLIBICONV = -liconv LTLIBINTL = LTLIBOBJS = @@ -223,6 +223,7 @@ PKG_CONFIG = /usr/bin/pkg-config PKG_CONFIG_LIBDIR = PKG_CONFIG_PATH = POSUB = po +PTHREAD_LIBS = -pthread SET_MAKE = SHELL = /bin/bash STRIP = diff --git a/Makefile.in b/Makefile.in index fa16eb6..df3003b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -223,6 +223,7 @@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ +PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ diff --git a/config.status b/config.status index ef4001c..efd405b 100755 --- a/config.status +++ b/config.status @@ -616,6 +616,7 @@ S["CPPCHECK_FALSE"]="#" S["CPPCHECK_TRUE"]="" S["HAVE_CPPCHECK"]="yes" S["HELP2MAN"]="help2man" +S["PTHREAD_LIBS"]="-pthread" S["WEBKIT_LIBS"]="-lwebkitgtk-3.0 -lgtk-3 -lsoup-2.4 -ljavascriptcoregtk-3.0 -lgdk-3 -latk-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -"\ "lgio-2.0 -lgobject-2.0 -lglib-2.0 " S["WEBKIT_CFLAGS"]="-pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gtk-3.0 -I/usr/include/libsoup-2.4 -I/usr/include/atk-1"\ @@ -754,12 +755,13 @@ S["INSTALL_PROGRAM"]="${INSTALL}" S["target_alias"]="" S["host_alias"]="" S["build_alias"]="" -S["LIBS"]="" +S["LIBS"]="-lpthread " S["ECHO_T"]="" S["ECHO_N"]="-n" S["ECHO_C"]="" S["DEFS"]="-DPACKAGE_NAME=\\\"prss\\\" -DPACKAGE_TARNAME=\\\"prss\\\" -DPACKAGE_VERSION=\\\"0.0.x\\\" -DPACKAGE_STRING=\\\"prss\\ 0.0.x\\\" -DPACKAGE_BUGREPORT=\\\"jeanfi@gmail.c"\ -"om\\\" -DPACKAGE_URL=\\\"http://wpitchoune.net/prss\\\" -DPACKAGE=\\\"prss\\\" -DVERSION=\\\"0.0.x\\\" -DENABLE_NLS=1 -DHAVE_GETTEXT=1 -DHAVE_DCGETTEXT=1" +"om\\\" -DPACKAGE_URL=\\\"http://wpitchoune.net/prss\\\" -DPACKAGE=\\\"prss\\\" -DVERSION=\\\"0.0.x\\\" -DENABLE_NLS=1 -DHAVE_GETTEXT=1 -DHAVE_DCGETTEXT=1 -DHAVE_L"\ +"IBPTHREAD=1" S["mandir"]="${datarootdir}/man" S["localedir"]="${datarootdir}/locale" S["libdir"]="${exec_prefix}/lib" diff --git a/configure b/configure index 1ddc893..1b4332d 100755 --- a/configure +++ b/configure @@ -595,6 +595,7 @@ CPPCHECK_FALSE CPPCHECK_TRUE HAVE_CPPCHECK HELP2MAN +PTHREAD_LIBS WEBKIT_LIBS WEBKIT_CFLAGS GSETTINGS_RULES @@ -7129,6 +7130,55 @@ fi +# Checks pthread +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 +$as_echo_n "checking for pthread_create in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); +int +main () +{ +return pthread_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_create=yes +else + ac_cv_lib_pthread_pthread_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } +if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPTHREAD 1 +_ACEOF + + LIBS="-lpthread $LIBS" + +fi + +PTHREAD_LIBS=-pthread + + ac_config_files="$ac_config_files Makefile po/Makefile.in src/Makefile src/glade/Makefile tests/Makefile" diff --git a/configure.ac b/configure.ac index 923900b..0a49cd2 100644 --- a/configure.ac +++ b/configure.ac @@ -59,6 +59,11 @@ PKG_CHECK_MODULES(WEBKIT, webkitgtk-3.0) AC_SUBST(WEBKIT_CFLAGS) AC_SUBST(WEBKIT_LIBS) +# Checks pthread +AC_CHECK_LIB(pthread, pthread_create) +PTHREAD_LIBS=-pthread +AC_SUBST(PTHREAD_LIBS) + AC_CONFIG_FILES([ Makefile po/Makefile.in diff --git a/src/Makefile.am b/src/Makefile.am index 348772c..45e583c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -7,7 +7,7 @@ AM_CPPFLAGS = -Wall -Werror $(CURL_CFLAGS) $(GTK_CFLAGS) $(JSON_CFLAGS) $(WEBKIT DEFS = -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" -DLOCALEDIR=\"$(localedir)\" @DEFS@ -LIBS = $(CURL_LIBS) $(JSON_LIBS) $(GTK_LIBS) $(WEBKIT_LIBS) +LIBS = $(CURL_LIBS) $(JSON_LIBS) $(GTK_LIBS) $(PTHREAD_LIBS) $(WEBKIT_LIBS) bin_PROGRAMS = prss @@ -16,6 +16,8 @@ prss_SOURCES = main.c \ http.h \ io.c \ io.h \ + list.c \ + list.h \ log.c \ log.h \ ttrss.c \ @@ -24,6 +26,8 @@ prss_SOURCES = main.c \ ttrss_model.h \ ttrss_ws.c \ ttrss_ws.h \ + ttrss_wsasync.c \ + ttrss_wsasync.h \ url.c \ url.h \ webbrowser.c \ diff --git a/src/Makefile.in b/src/Makefile.in index 47d4df3..e2373f5 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -65,8 +65,9 @@ CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am_prss_OBJECTS = main.$(OBJEXT) http.$(OBJEXT) io.$(OBJEXT) \ - log.$(OBJEXT) ttrss.$(OBJEXT) ttrss_model.$(OBJEXT) \ - ttrss_ws.$(OBJEXT) url.$(OBJEXT) webbrowser.$(OBJEXT) + list.$(OBJEXT) log.$(OBJEXT) ttrss.$(OBJEXT) \ + ttrss_model.$(OBJEXT) ttrss_ws.$(OBJEXT) \ + ttrss_wsasync.$(OBJEXT) url.$(OBJEXT) webbrowser.$(OBJEXT) prss_OBJECTS = $(am_prss_OBJECTS) prss_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ @@ -199,7 +200,7 @@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ -LIBS = $(CURL_LIBS) $(JSON_LIBS) $(GTK_LIBS) $(WEBKIT_LIBS) +LIBS = $(CURL_LIBS) $(JSON_LIBS) $(GTK_LIBS) $(PTHREAD_LIBS) $(WEBKIT_LIBS) LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ @@ -221,6 +222,7 @@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ +PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ @@ -297,6 +299,8 @@ prss_SOURCES = main.c \ http.h \ io.c \ io.h \ + list.c \ + list.h \ log.c \ log.h \ ttrss.c \ @@ -305,6 +309,8 @@ prss_SOURCES = main.c \ ttrss_model.h \ ttrss_ws.c \ ttrss_ws.h \ + ttrss_wsasync.c \ + ttrss_wsasync.h \ url.c \ url.h \ webbrowser.c \ @@ -399,11 +405,13 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttrss.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttrss_model.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttrss_ws.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttrss_wsasync.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/url.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webbrowser.Po@am__quote@ diff --git a/src/glade/Makefile.in b/src/glade/Makefile.in index 4469ed8..07fa23e 100644 --- a/src/glade/Makefile.in +++ b/src/glade/Makefile.in @@ -163,6 +163,7 @@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ +PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ diff --git a/src/list.c b/src/list.c new file mode 100644 index 0000000..d4c4806 --- /dev/null +++ b/src/list.c @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2010-2013 jeanfi@gmail.com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +#include +#include + +#include "list.h" + +int list_length(void **list) +{ + int n; + + if (!list) + return 0; + + n = 0; + while (*list) { + n++; + list++; + } + + return n; +} + +void **list_add(void **list, void *item) +{ + int n; + void **result; + + n = list_length(list); + + result = malloc((n + 1 + 1) * sizeof(void *)); + + if (list) + memcpy(result, list, n * sizeof(void *)); + + result[n] = item; + result[n + 1] = NULL; + + return result; +} + +void list_free(void **list) +{ + free(list); +} diff --git a/src/list.h b/src/list.h new file mode 100644 index 0000000..fd1c962 --- /dev/null +++ b/src/list.h @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2010-2013 jeanfi@gmail.com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +#ifndef _TTRSS_LIST_H_ +#define _TTRSS_LIST_H_ + +int list_length(void **list); +void **list_add(void **list, void *item); +void list_free(void **list); + +#endif diff --git a/src/ttrss.c b/src/ttrss.c index 6d4ebd6..d01aac4 100644 --- a/src/ttrss.c +++ b/src/ttrss.c @@ -27,7 +27,7 @@ #include "http.h" #include "io.h" #include "log.h" -#include "ttrss_ws.h" +#include "ttrss_wsasync.h" #include "url.h" static struct feed **data; @@ -104,7 +104,7 @@ void ttrss_set_article_unread(int id, int unread) { log_debug("ttrss_set_article_unread(%d,%d)", id, unread); - ws_set_article_unread(id, unread); + ws_async_set_article_unread(id, unread); log_debug("ttrss_set_article_unread(%d,%d)", id, unread); } diff --git a/src/ttrss_model.c b/src/ttrss_model.c index 3cba736..5753256 100644 --- a/src/ttrss_model.c +++ b/src/ttrss_model.c @@ -21,42 +21,9 @@ #include #include +#include "list.h" #include "ttrss_model.h" -static int list_length(void **list) -{ - int n; - - if (!list) - return 0; - - n = 0; - while (*list) { - n++; - list++; - } - - return n; -} - -static void **list_add(void **list, void *item) -{ - int n; - void **result; - - n = list_length(list); - - result = malloc((n + 1 + 1) * sizeof(void *)); - - if (list) - memcpy(result, list, n * sizeof(void *)); - - result[n] = item; - result[n + 1] = NULL; - - return result; -} - struct headline **headlines_add(struct headline **list, struct headline *h) { return (struct headline **)list_add((void **)list, (void *)h); diff --git a/src/ttrss_ws.c b/src/ttrss_ws.c index 8ec1746..267b129 100644 --- a/src/ttrss_ws.c +++ b/src/ttrss_ws.c @@ -199,6 +199,7 @@ int ws_open_session() if (session_id) free(session_id); + session_id = NULL; session_id = ws_login(); if (session_id) { @@ -348,18 +349,26 @@ struct feed **ws_update_feeds(struct feed **feeds) return feeds; } -void ws_set_article_unread(int id, int unread) +struct json_object *ws_request_new_set_article_unread(int id, int unread) { - struct json_object *rp, *rq; - - - log_debug("ws_set_article_unread(%d,%d)", id, unread); + struct json_object *rq; rq = ws_request_new("updateArticle"); json_object_object_add(rq, "article_ids", json_object_new_int(id)); json_object_object_add(rq, "field", json_object_new_int(2)); json_object_object_add(rq, "mode", json_object_new_int(unread)); + return rq; +} + +void ws_set_article_unread(int id, int unread) +{ + struct json_object *rp, *rq; + + log_debug("ws_set_article_unread(%d,%d)", id, unread); + + rq = ws_request_new_set_article_unread(id, unread); + rp = ws_execute(rq); json_object_put(rq); diff --git a/src/ttrss_ws.h b/src/ttrss_ws.h index a6d7e92..2902434 100644 --- a/src/ttrss_ws.h +++ b/src/ttrss_ws.h @@ -32,5 +32,6 @@ struct feed **ws_update_feeds(struct feed **feeds); int ws_update_headlines(struct feed *feed); char *ws_get_article_content(int id); void ws_set_article_unread(int id, int unread); +struct json_object *ws_request_new_set_article_unread(int id, int unread); #endif diff --git a/src/ttrss_wsasync.c b/src/ttrss_wsasync.c new file mode 100644 index 0000000..7002404 --- /dev/null +++ b/src/ttrss_wsasync.c @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2010-2013 jeanfi@gmail.com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +#include + +#include + +#include + +#include "list.h" +#include "log.h" +#include "ttrss_ws.h" +#include "ttrss_wsasync.h" + +static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; + +static struct json_object **requests; + +static pthread_t *thread; + +void *loop() +{ + struct json_object **tmp, **cur, *rp, *rq; + + while (1) { + log_debug("loop()"); + + pthread_mutex_lock(&lock); + if (requests) { + tmp = requests; + requests = NULL; + } else { + tmp = NULL; + } + pthread_mutex_unlock(&lock); + + if (tmp) { + cur = tmp; + while (*cur) { + rq = *cur; + rp = ws_execute(rq); + json_object_put(rq); + if (rp) + json_object_put(rp); + cur++; + } + free(tmp); + } + + log_debug("loop() done"); + sleep(1); + } + + pthread_exit(NULL); +} + +void ws_async_set_article_unread(int id, int unread) +{ + struct json_object *rq, **tmp; + + log_debug("ws_async_set_article_unread(%d,%d)", id, unread); + + rq = ws_request_new_set_article_unread(id, unread); + + pthread_mutex_lock(&lock); + if (!thread) { + thread = malloc(sizeof(pthread_t)); + pthread_create(thread, NULL, loop, NULL); + } + + tmp = (struct json_object **)list_add((void **)requests, rq); + list_free((void **)requests); + requests = tmp; + pthread_mutex_unlock(&lock); + + log_debug("ws_async_set_article_unread(%d,%d) done", id, unread); +} diff --git a/src/ttrss_wsasync.h b/src/ttrss_wsasync.h new file mode 100644 index 0000000..40835c7 --- /dev/null +++ b/src/ttrss_wsasync.h @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2010-2013 jeanfi@gmail.com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +#ifndef _TTRSS_MODEL_WS_ASYNC_H_ +#define _TTRSS_MODEL_WS_ASYNC_H_ + +#include "ttrss_ws.h" + +void ws_async_set_article_unread(int id, int unread); + +#endif diff --git a/tests/Makefile.in b/tests/Makefile.in index c3a3085..402bdaa 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -136,6 +136,7 @@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ +PTHREAD_LIBS = @PTHREAD_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ -- 2.7.4