bug-gnulib@gnu.org mirror (unofficial)
 help / color / mirror / Atom feed
* threads-h: Fix compilation errors in C++ mode on Android
@ 2023-01-09 20:33 Bruno Haible
  0 siblings, 0 replies; only message in thread
From: Bruno Haible @ 2023-01-09 20:33 UTC (permalink / raw)
  To: bug-gnulib

[-- Attachment #1: Type: text/plain, Size: 1578 bytes --]

In a testdir on Android, I see compilation errors like this one:

clang++ -ferror-limit=0 -DHAVE_CONFIG_H -DEXEEXT=\"\" -DEXEEXT=\"\" -I. -I../../gltests -I..  -DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I. -I../../gltests -I.. -I../../gltests/.. -I../gllib -I../../gltests/../gllib -I/data/data/com.termux/files/home/local/include -Wall  -Wno-error -g -O2 -c -o test-threads-c++.o ../../gltests/test-threads-c++.cc

In file included from ../../gltests/test-threads-c++.cc:22:
In file included from ../gllib/threads.h:28:
In file included from /data/data/com.termux/files/usr/include/threads.h:229:
In file included from /data/data/com.termux/files/usr/include/android/legacy_threads_inlines.h:36:
In file included from /data/data/com.termux/files/usr/include/bits/threads_inlines.h:31:
../gllib/threads.h:699:19: error: no member named 'thrd_create' in the global namespace; did you mean 'pthread_create'?
_GL_CXXALIAS_SYS (thrd_create, int, (thrd_t *, thrd_start_t, void *));
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The first patch fixes them. The second patch is merely a portability
improvement.


2023-01-09  Bruno Haible  <bruno@clisp.org>

	threads-h: Improve portability.
	* lib/threads.in.h: Use INCLUDE_NEXT_AS_FIRST_DIRECTIVE when possible.
	* modules/threads-h (Makefile.am): Substitute
	INCLUDE_NEXT_AS_FIRST_DIRECTIVE and NEXT_AS_FIRST_DIRECTIVE_THREADS_H.

2023-01-09  Bruno Haible  <bruno@clisp.org>

	threads-h: Fix compilation errors in C++ mode on Android.
	* lib/threads.in.h (_GL_ALREADY_INCLUDING_THREADS_H): New macro.


[-- Attachment #2: 0001-threads-h-Fix-compilation-errors-in-C-mode-on-Androi.patch --]
[-- Type: text/x-patch, Size: 1929 bytes --]

From ede58b7442f9ff1e63cb5e6c391a039d8f00dc79 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@clisp.org>
Date: Mon, 9 Jan 2023 19:12:49 +0100
Subject: [PATCH 1/2] threads-h: Fix compilation errors in C++ mode on Android.

* lib/threads.in.h (_GL_ALREADY_INCLUDING_THREADS_H): New macro.
---
 ChangeLog        |  5 +++++
 lib/threads.in.h | 18 ++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 7554f5ba03..84226bb5e7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2023-01-09  Bruno Haible  <bruno@clisp.org>
+
+	threads-h: Fix compilation errors in C++ mode on Android.
+	* lib/threads.in.h (_GL_ALREADY_INCLUDING_THREADS_H): New macro.
+
 2023-01-09  Bruno Haible  <bruno@clisp.org>
 
 	aligned-malloc: Don't disturb the module aligned_alloc.
diff --git a/lib/threads.in.h b/lib/threads.in.h
index b1e213fd2c..5786101d82 100644
--- a/lib/threads.in.h
+++ b/lib/threads.in.h
@@ -20,13 +20,30 @@
 #endif
 @PRAGMA_COLUMNS@
 
+#if defined _GL_ALREADY_INCLUDING_THREADS_H
+/* Special invocation convention:
+   - On Android we have a sequence of nested includes
+     <threads.h> -> <android/legacy_threads_inlines.h>
+     -> <bits/threads_inlines.h> -> "threads.h"
+     In this situation, the functions are not yet declared, therefore we cannot
+     provide the C++ aliases.  */
+
+#@INCLUDE_NEXT@ @NEXT_THREADS_H@
+
+#else
+/* Normal invocation convention.  */
+
 #ifndef _@GUARD_PREFIX@_THREADS_H
 
+#define _GL_ALREADY_INCLUDING_THREADS_H
+
 /* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_THREADS_H@
 # @INCLUDE_NEXT@ @NEXT_THREADS_H@
 #endif
 
+#undef _GL_ALREADY_INCLUDING_THREADS_H
+
 #ifndef _@GUARD_PREFIX@_THREADS_H
 #define _@GUARD_PREFIX@_THREADS_H
 
@@ -662,3 +679,4 @@ _GL_WARN_ON_USE (tss_delete, "tss_delete is unportable - "
 
 #endif /* _@GUARD_PREFIX@_THREADS_H */
 #endif /* _@GUARD_PREFIX@_THREADS_H */
+#endif
-- 
2.34.1


[-- Attachment #3: 0002-threads-h-Improve-portability.patch --]
[-- Type: text/x-patch, Size: 2690 bytes --]

From 7937757f4d37856e8d65f3da5f301c3c28cef532 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@clisp.org>
Date: Mon, 9 Jan 2023 21:31:52 +0100
Subject: [PATCH 2/2] threads-h: Improve portability.

* lib/threads.in.h: Use INCLUDE_NEXT_AS_FIRST_DIRECTIVE when possible.
* modules/threads-h (Makefile.am): Substitute
INCLUDE_NEXT_AS_FIRST_DIRECTIVE and NEXT_AS_FIRST_DIRECTIVE_THREADS_H.
---
 ChangeLog         | 7 +++++++
 lib/threads.in.h  | 4 ++--
 modules/threads-h | 2 ++
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 84226bb5e7..92c89d730b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2023-01-09  Bruno Haible  <bruno@clisp.org>
+
+	threads-h: Improve portability.
+	* lib/threads.in.h: Use INCLUDE_NEXT_AS_FIRST_DIRECTIVE when possible.
+	* modules/threads-h (Makefile.am): Substitute
+	INCLUDE_NEXT_AS_FIRST_DIRECTIVE and NEXT_AS_FIRST_DIRECTIVE_THREADS_H.
+
 2023-01-09  Bruno Haible  <bruno@clisp.org>
 
 	threads-h: Fix compilation errors in C++ mode on Android.
diff --git a/lib/threads.in.h b/lib/threads.in.h
index 5786101d82..e34c39de3f 100644
--- a/lib/threads.in.h
+++ b/lib/threads.in.h
@@ -28,7 +28,7 @@
      In this situation, the functions are not yet declared, therefore we cannot
      provide the C++ aliases.  */
 
-#@INCLUDE_NEXT@ @NEXT_THREADS_H@
+#@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_THREADS_H@
 
 #else
 /* Normal invocation convention.  */
@@ -39,7 +39,7 @@
 
 /* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_THREADS_H@
-# @INCLUDE_NEXT@ @NEXT_THREADS_H@
+# @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_THREADS_H@
 #endif
 
 #undef _GL_ALREADY_INCLUDING_THREADS_H
diff --git a/modules/threads-h b/modules/threads-h
index 1cde2afc9f..e35a5e265b 100644
--- a/modules/threads-h
+++ b/modules/threads-h
@@ -43,10 +43,12 @@ threads.h: threads.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H
 @NMD@	$(AM_V_GEN)$(MKDIR_P) '%reldir%'
 	$(gl_V_at)$(SED_HEADER_STDOUT) \
 	      -e 's|@''GUARD_PREFIX''@|${gl_include_guard_prefix}|g' \
+	      -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \
 	      -e 's|@''HAVE_THREADS_H''@|$(HAVE_THREADS_H)|g' \
 	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
 	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
 	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_AS_FIRST_DIRECTIVE_THREADS_H''@|$(NEXT_AS_FIRST_DIRECTIVE_THREADS_H)|g' \
 	      -e 's|@''NEXT_THREADS_H''@|$(NEXT_THREADS_H)|g' \
 	      -e 's/@''GNULIB_CND''@/$(GNULIB_CND)/g' \
 	      -e 's/@''GNULIB_MTX''@/$(GNULIB_MTX)/g' \
-- 
2.34.1


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2023-01-09 20:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-09 20:33 threads-h: Fix compilation errors in C++ mode on Android Bruno Haible

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).