atomic: check if -latomic is required for std::atomic

* configure.ac,
m4/l_atomic.m4,
python/Makefile.am,
tests/Makefile.am: Here.
This commit is contained in:
Etienne Renault 2020-05-20 13:43:18 +02:00
parent 6e0e6b923d
commit e564dd1263
4 changed files with 50 additions and 7 deletions

View file

@ -79,6 +79,9 @@ AX_CHECK_COMPILE_FLAG([-std=c11], [CFLAGS="$CFLAGS -std=c11"])
gl_INIT gl_INIT
dnl Check if -latomic is required for <std::atomic>
CHECK_ATOMIC
# Use -Werror since using -fvisibility under MinGW is only a warning. # Use -Werror since using -fvisibility under MinGW is only a warning.
# (The option is ignored anyway since this does not make sense under windows). # (The option is ignored anyway since this does not make sense under windows).
AX_CHECK_COMPILE_FLAG([-Werror -fvisibility=hidden], AX_CHECK_COMPILE_FLAG([-Werror -fvisibility=hidden],

40
m4/l_atomic.m4 Normal file
View file

@ -0,0 +1,40 @@
dnl Copyright (c) 2015 Tim Kosse <tim.kosse@filezilla-project.org>
dnl Copying and distribution of this file, with or without modification, are
dnl permitted in any medium without royalty provided the copyright notice
dnl and this notice are preserved. This file is offered as-is, without any
dnl warranty.
# Some versions of gcc/libstdc++ require linking with -latomic if
# using the C++ atomic library.
#
# Sourced from http://bugs.debian.org/797228
m4_define([_CHECK_ATOMIC_testbody], [[
#include <atomic>
#include <cstdint>
int main() {
std::atomic<int64_t> a{};
int64_t v = 5;
int64_t r = a.fetch_add(v);
return static_cast<int>(r);
}
]])
AC_DEFUN([CHECK_ATOMIC], [
AC_LANG_PUSH(C++)
AC_MSG_CHECKING([whether std::atomic can be used without link library])
AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_ATOMIC_testbody])],[
AC_MSG_RESULT([yes])
],[
AC_MSG_RESULT([no])
LIBS="$LIBS -latomic"
AC_MSG_CHECKING([whether std::atomic needs -latomic])
AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_ATOMIC_testbody])],[
AC_MSG_RESULT([yes])
],[
AC_MSG_RESULT([no])
AC_MSG_FAILURE([cannot figure out how to use std::atomic])
])
])
AC_LANG_POP
])

View file

@ -23,7 +23,7 @@
AUTOMAKE_OPTIONS = subdir-objects AUTOMAKE_OPTIONS = subdir-objects
AM_CPPFLAGS = -I$(PYTHONINC) -I$(top_builddir) -I$(top_srcdir) \ AM_CPPFLAGS = -I$(PYTHONINC) -I$(top_builddir) -I$(top_srcdir) \
$(BUDDY_CPPFLAGS) -lpthread -latomic -DSWIG_TYPE_TABLE=spot $(BUDDY_CPPFLAGS) -lpthread -DSWIG_TYPE_TABLE=spot
SWIGFLAGS = -c++ -python -py3 -O -MD SWIGFLAGS = -c++ -python -py3 -O -MD
@ -71,7 +71,7 @@ am__depfiles_remade = ./$(DEPDIR)/buddy_wrap.Plo \
spot__impl_la_SOURCES = spot/impl_wrap.cxx spot__impl_la_SOURCES = spot/impl_wrap.cxx
spot__impl_la_LDFLAGS = -avoid-version -module $(SYMBOLIC_LDFLAGS) spot__impl_la_LDFLAGS = -avoid-version -module $(SYMBOLIC_LDFLAGS)
spot__impl_la_LIBADD = $(top_builddir)/spot/libspot.la -lpthread -latomic spot__impl_la_LIBADD = $(top_builddir)/spot/libspot.la -lpthread
am__depfiles_remade += ./spot/$(DEPDIR)/impl_wrap.Pcxx am__depfiles_remade += ./spot/$(DEPDIR)/impl_wrap.Pcxx
@AMDEP_TRUE@@am__include@ @am__quote@./spot/$(DEPDIR)/impl_wrap.Pcxx@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./spot/$(DEPDIR)/impl_wrap.Pcxx@am__quote@ # am--include-marker
@ -92,7 +92,7 @@ spot__ltsmin_la_SOURCES = spot/ltsmin_wrap.cxx
spot__ltsmin_la_LDFLAGS = -avoid-version -module $(SYMBOLIC_LDFLAGS) spot__ltsmin_la_LDFLAGS = -avoid-version -module $(SYMBOLIC_LDFLAGS)
spot__ltsmin_la_LIBADD = $(top_builddir)/spot/libspot.la \ spot__ltsmin_la_LIBADD = $(top_builddir)/spot/libspot.la \
$(top_builddir)/spot/ltsmin/libspotltsmin.la \ $(top_builddir)/spot/ltsmin/libspotltsmin.la \
-lpthread -latomic -lpthread
am__depfiles_remade += ./spot/$(DEPDIR)/ltsmin_wrap.Pcxx am__depfiles_remade += ./spot/$(DEPDIR)/ltsmin_wrap.Pcxx
@AMDEP_TRUE@@am__include@ @am__quote@./spot/$(DEPDIR)/ltsmin_wrap.Pcxx@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./spot/$(DEPDIR)/ltsmin_wrap.Pcxx@am__quote@ # am--include-marker
@ -111,7 +111,7 @@ spot__gen_la_SOURCES = spot/gen_wrap.cxx
spot__gen_la_LDFLAGS = -avoid-version -module $(SYMBOLIC_LDFLAGS) spot__gen_la_LDFLAGS = -avoid-version -module $(SYMBOLIC_LDFLAGS)
spot__gen_la_LIBADD = $(top_builddir)/spot/libspot.la \ spot__gen_la_LIBADD = $(top_builddir)/spot/libspot.la \
$(top_builddir)/spot/gen/libspotgen.la \ $(top_builddir)/spot/gen/libspotgen.la \
-lpthread -latomic -lpthread
am__depfiles_remade += ./spot/$(DEPDIR)/gen_wrap.Pcxx am__depfiles_remade += ./spot/$(DEPDIR)/gen_wrap.Pcxx
@AMDEP_TRUE@@am__include@ @am__quote@./spot/$(DEPDIR)/gen_wrap.Pcxx@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./spot/$(DEPDIR)/gen_wrap.Pcxx@am__quote@ # am--include-marker

View file

@ -27,7 +27,7 @@ AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) $(BUDDY_CPPFLAGS) \
AM_CXXFLAGS = $(WARNING_CXXFLAGS) AM_CXXFLAGS = $(WARNING_CXXFLAGS)
LDADD = $(top_builddir)/spot/libspot.la \ LDADD = $(top_builddir)/spot/libspot.la \
$(top_builddir)/buddy/src/libbddx.la \ $(top_builddir)/buddy/src/libbddx.la \
$(LIBLTDL) -lpthread -latomic $(LIBLTDL) -lpthread
# Explicitely set it to avoid default value ".test" # Explicitely set it to avoid default value ".test"
TEST_EXTENSIONS = TEST_EXTENSIONS =
@ -461,7 +461,7 @@ check_PROGRAMS += ltsmin/modelcheck
check_PROGRAMS += ltsmin/testconvert check_PROGRAMS += ltsmin/testconvert
ltsmin_modelcheck_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) \ ltsmin_modelcheck_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) \
$(BUDDY_CPPFLAGS) \-I$(top_builddir)/lib -I$(top_srcdir)/lib $(BUDDY_CPPFLAGS) \-I$(top_builddir)/lib -I$(top_srcdir)/lib
ltsmin_modelcheck_CXXFLAGS = $(CXXFLAGS) -pthread -latomic ltsmin_modelcheck_CXXFLAGS = $(CXXFLAGS) -pthread
ltsmin_modelcheck_SOURCES = ltsmin/modelcheck.cc ltsmin_modelcheck_SOURCES = ltsmin/modelcheck.cc
ltsmin_modelcheck_LDADD = \ ltsmin_modelcheck_LDADD = \
$(top_builddir)/bin/libcommon.a \ $(top_builddir)/bin/libcommon.a \
@ -471,7 +471,7 @@ ltsmin_modelcheck_LDADD = \
ltsmin_testconvert_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) \ ltsmin_testconvert_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) \
$(BUDDY_CPPFLAGS) \-I$(top_builddir)/lib -I$(top_srcdir)/lib $(BUDDY_CPPFLAGS) \-I$(top_builddir)/lib -I$(top_srcdir)/lib
ltsmin_testconvert_CXXFLAGS = $(CXXFLAGS) -pthread -latomic ltsmin_testconvert_CXXFLAGS = $(CXXFLAGS) -pthread
ltsmin_testconvert_SOURCES = ltsmin/testconvert.cc ltsmin_testconvert_SOURCES = ltsmin/testconvert.cc
ltsmin_testconvert_LDADD = \ ltsmin_testconvert_LDADD = \
$(top_builddir)/bin/libcommon.a \ $(top_builddir)/bin/libcommon.a \