mirror of git://gcc.gnu.org/git/gcc.git
messages_members.cc (Catalog_info, Catalogs): Move...
2015-09-30 François Dumont <fdumont@gcc.gnu.org> Jonathan Wakely <jwakely@redhat.com> * config/locale/gnu/messages_members.cc (Catalog_info, Catalogs): Move... * config/locale/gnu/c++locale_internal.h: ...here in std namespace. * config/locale/gnu/c_locale.cc: Move implementation of latter here. * src/c++98/Makefile.am: Compile c++locale.cc with -fimplicit-templates. * src/c++98/Makefile.in: Regenerate. * config/abi/pre/gnu.ver: Adjust. Co-Authored-By: Jonathan Wakely <jwakely@redhat.com> From-SVN: r228305
This commit is contained in:
parent
94829f87ca
commit
9702ee6a6f
|
|
@ -1,3 +1,14 @@
|
||||||
|
2015-09-30 François Dumont <fdumont@gcc.gnu.org>
|
||||||
|
Jonathan Wakely <jwakely@redhat.com>
|
||||||
|
|
||||||
|
* config/locale/gnu/messages_members.cc (Catalog_info, Catalogs):
|
||||||
|
Move...
|
||||||
|
* config/locale/gnu/c++locale_internal.h: ...here in std namespace.
|
||||||
|
* config/locale/gnu/c_locale.cc: Move implementation of latter here.
|
||||||
|
* src/c++98/Makefile.am: Compile c++locale.cc with -fimplicit-templates.
|
||||||
|
* src/c++98/Makefile.in: Regenerate.
|
||||||
|
* config/abi/pre/gnu.ver: Adjust.
|
||||||
|
|
||||||
2015-09-30 Matthias Klose <doko@ubuntu.com>
|
2015-09-30 Matthias Klose <doko@ubuntu.com>
|
||||||
|
|
||||||
* config/cpu/alpha, config/cpu/ia64: Remove empty directories.
|
* config/cpu/alpha, config/cpu/ia64: Remove empty directories.
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ GLIBCXX_3.4 {
|
||||||
# Names inside the 'extern' block are demangled names.
|
# Names inside the 'extern' block are demangled names.
|
||||||
extern "C++"
|
extern "C++"
|
||||||
{
|
{
|
||||||
std::[A-Z]*;
|
std::[ABD-Z]*;
|
||||||
std::a[a-c]*;
|
std::a[a-c]*;
|
||||||
std::ad[a-n]*;
|
std::ad[a-n]*;
|
||||||
std::ad[p-z]*;
|
std::ad[p-z]*;
|
||||||
|
|
@ -106,7 +106,7 @@ GLIBCXX_3.4 {
|
||||||
# std::istringstream*;
|
# std::istringstream*;
|
||||||
std::istrstream*;
|
std::istrstream*;
|
||||||
std::i[t-z]*;
|
std::i[t-z]*;
|
||||||
std::[A-Zj-k]*;
|
std::[j-k]*;
|
||||||
# std::length_error::l*;
|
# std::length_error::l*;
|
||||||
# std::length_error::~l*;
|
# std::length_error::~l*;
|
||||||
std::locale::[A-Za-e]*;
|
std::locale::[A-Za-e]*;
|
||||||
|
|
@ -132,9 +132,8 @@ GLIBCXX_3.4 {
|
||||||
# std::logic_error::l*;
|
# std::logic_error::l*;
|
||||||
std::logic_error::what*;
|
std::logic_error::what*;
|
||||||
# std::logic_error::~l*;
|
# std::logic_error::~l*;
|
||||||
# std::[A-Zm-r]*;
|
# std::[m-r]*;
|
||||||
# std::[A-Zm]*;
|
# std::[m]*;
|
||||||
std::[A-Z]*;
|
|
||||||
std::messages[^_]*;
|
std::messages[^_]*;
|
||||||
# std::messages_byname*;
|
# std::messages_byname*;
|
||||||
std::money_*;
|
std::money_*;
|
||||||
|
|
@ -175,11 +174,13 @@ GLIBCXX_3.4 {
|
||||||
# std::t[i-n]*;
|
# std::t[i-n]*;
|
||||||
std::tr1::h[^a]*;
|
std::tr1::h[^a]*;
|
||||||
std::t[s-z]*;
|
std::t[s-z]*;
|
||||||
# std::[A-Zu-z]*;
|
# std::[u-z]*;
|
||||||
# std::underflow_error::u*;
|
# std::underflow_error::u*;
|
||||||
# std::underflow_error::~u*;
|
# std::underflow_error::~u*;
|
||||||
std::unexpected*;
|
std::unexpected*;
|
||||||
std::[A-Zv-z]*;
|
std::valarray*;
|
||||||
|
# std::vector*
|
||||||
|
std::[w-z]*;
|
||||||
std::_List_node_base::hook*;
|
std::_List_node_base::hook*;
|
||||||
std::_List_node_base::swap*;
|
std::_List_node_base::swap*;
|
||||||
std::_List_node_base::unhook*;
|
std::_List_node_base::unhook*;
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,13 @@
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <langinfo.h>
|
#include <langinfo.h>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <string.h> // ::strdup
|
||||||
|
|
||||||
|
#include <ext/concurrence.h>
|
||||||
|
|
||||||
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
|
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
|
||||||
|
|
||||||
extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
|
extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
|
||||||
extern "C" __typeof(strcoll_l) __strcoll_l;
|
extern "C" __typeof(strcoll_l) __strcoll_l;
|
||||||
extern "C" __typeof(strftime_l) __strftime_l;
|
extern "C" __typeof(strftime_l) __strftime_l;
|
||||||
|
|
@ -61,3 +66,55 @@ extern "C" __typeof(wctype_l) __wctype_l;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // GLIBC 2.3 and later
|
#endif // GLIBC 2.3 and later
|
||||||
|
|
||||||
|
namespace std _GLIBCXX_VISIBILITY(default)
|
||||||
|
{
|
||||||
|
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
|
|
||||||
|
struct Catalog_info
|
||||||
|
{
|
||||||
|
Catalog_info(messages_base::catalog __id, const char* __domain,
|
||||||
|
locale __loc)
|
||||||
|
: _M_id(__id), _M_domain(strdup(__domain)), _M_locale(__loc)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
~Catalog_info()
|
||||||
|
{ free(_M_domain); }
|
||||||
|
|
||||||
|
messages_base::catalog _M_id;
|
||||||
|
char* _M_domain;
|
||||||
|
locale _M_locale;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Catalog_info(const Catalog_info&);
|
||||||
|
|
||||||
|
Catalog_info&
|
||||||
|
operator=(const Catalog_info&);
|
||||||
|
};
|
||||||
|
|
||||||
|
class Catalogs
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Catalogs() : _M_catalog_counter(0) { }
|
||||||
|
~Catalogs();
|
||||||
|
|
||||||
|
messages_base::catalog
|
||||||
|
_M_add(const char* __domain, locale __l);
|
||||||
|
|
||||||
|
void
|
||||||
|
_M_erase(messages_base::catalog __c);
|
||||||
|
|
||||||
|
const Catalog_info*
|
||||||
|
_M_get(messages_base::catalog __c) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
mutable __gnu_cxx::__mutex _M_mutex;
|
||||||
|
messages_base::catalog _M_catalog_counter;
|
||||||
|
vector<Catalog_info*> _M_infos;
|
||||||
|
};
|
||||||
|
|
||||||
|
Catalogs&
|
||||||
|
get_catalogs();
|
||||||
|
|
||||||
|
_GLIBCXX_END_NAMESPACE_VERSION
|
||||||
|
} // namespace
|
||||||
|
|
|
||||||
|
|
@ -31,9 +31,12 @@
|
||||||
#include <locale>
|
#include <locale>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
#include <algorithm>
|
||||||
#include <langinfo.h>
|
#include <langinfo.h>
|
||||||
#include <bits/c++locale_internal.h>
|
#include <bits/c++locale_internal.h>
|
||||||
|
|
||||||
|
#include <backward/auto_ptr.h>
|
||||||
|
|
||||||
namespace std _GLIBCXX_VISIBILITY(default)
|
namespace std _GLIBCXX_VISIBILITY(default)
|
||||||
{
|
{
|
||||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
|
|
@ -170,6 +173,85 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
return __changed;
|
return __changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct _CatalogIdComp
|
||||||
|
{
|
||||||
|
bool
|
||||||
|
operator()(messages_base::catalog __cat, const Catalog_info* __info) const
|
||||||
|
{ return __cat < __info->_M_id; }
|
||||||
|
|
||||||
|
bool
|
||||||
|
operator()(const Catalog_info* __info, messages_base::catalog __cat) const
|
||||||
|
{ return __info->_M_id < __cat; }
|
||||||
|
};
|
||||||
|
|
||||||
|
Catalogs::~Catalogs()
|
||||||
|
{
|
||||||
|
for (vector<Catalog_info*>::iterator __it = _M_infos.begin();
|
||||||
|
__it != _M_infos.end(); ++__it)
|
||||||
|
delete *__it;
|
||||||
|
}
|
||||||
|
|
||||||
|
messages_base::catalog
|
||||||
|
Catalogs::_M_add(const char* __domain, locale __l)
|
||||||
|
{
|
||||||
|
__gnu_cxx::__scoped_lock lock(_M_mutex);
|
||||||
|
|
||||||
|
// The counter is not likely to roll unless catalogs keep on being
|
||||||
|
// opened/closed which is consider as an application mistake for the
|
||||||
|
// moment.
|
||||||
|
if (_M_catalog_counter == numeric_limits<messages_base::catalog>::max())
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
auto_ptr<Catalog_info> info(new Catalog_info(_M_catalog_counter++,
|
||||||
|
__domain, __l));
|
||||||
|
|
||||||
|
// Check if we managed to allocate memory for domain.
|
||||||
|
if (!info->_M_domain)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
_M_infos.push_back(info.get());
|
||||||
|
return info.release()->_M_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Catalogs::_M_erase(messages_base::catalog __c)
|
||||||
|
{
|
||||||
|
__gnu_cxx::__scoped_lock lock(_M_mutex);
|
||||||
|
|
||||||
|
vector<Catalog_info*>::iterator __res =
|
||||||
|
lower_bound(_M_infos.begin(), _M_infos.end(), __c, _CatalogIdComp());
|
||||||
|
if (__res == _M_infos.end() || (*__res)->_M_id != __c)
|
||||||
|
return;
|
||||||
|
|
||||||
|
delete *__res;
|
||||||
|
_M_infos.erase(__res);
|
||||||
|
|
||||||
|
// Just in case closed catalog was the last open.
|
||||||
|
if (__c == _M_catalog_counter - 1)
|
||||||
|
--_M_catalog_counter;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Catalog_info*
|
||||||
|
Catalogs::_M_get(messages_base::catalog __c) const
|
||||||
|
{
|
||||||
|
__gnu_cxx::__scoped_lock lock(_M_mutex);
|
||||||
|
|
||||||
|
vector<Catalog_info*>::const_iterator __res =
|
||||||
|
lower_bound(_M_infos.begin(), _M_infos.end(), __c, _CatalogIdComp());
|
||||||
|
|
||||||
|
if (__res != _M_infos.end() && (*__res)->_M_id == __c)
|
||||||
|
return *__res;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Catalogs&
|
||||||
|
get_catalogs()
|
||||||
|
{
|
||||||
|
static Catalogs __catalogs;
|
||||||
|
return __catalogs;
|
||||||
|
}
|
||||||
|
|
||||||
_GLIBCXX_END_NAMESPACE_VERSION
|
_GLIBCXX_END_NAMESPACE_VERSION
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,115 +31,13 @@
|
||||||
#include <locale>
|
#include <locale>
|
||||||
#include <bits/c++locale_internal.h>
|
#include <bits/c++locale_internal.h>
|
||||||
|
|
||||||
#include <limits>
|
|
||||||
#include <algorithm>
|
|
||||||
#include <vector>
|
|
||||||
#include <cstdlib> // std::free
|
#include <cstdlib> // std::free
|
||||||
#include <string.h> // ::strdup
|
#include <string.h> // ::strdup
|
||||||
|
|
||||||
#include <backward/auto_ptr.h>
|
|
||||||
#include <ext/concurrence.h>
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
typedef messages_base::catalog catalog;
|
|
||||||
|
|
||||||
struct Catalog_info
|
|
||||||
{
|
|
||||||
Catalog_info(catalog __id, const string& __domain, locale __loc)
|
|
||||||
: _M_id(__id), _M_domain(__domain), _M_locale(__loc)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
catalog _M_id;
|
|
||||||
string _M_domain;
|
|
||||||
locale _M_locale;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Catalogs
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Catalogs() : _M_catalog_counter(0) { }
|
|
||||||
|
|
||||||
~Catalogs()
|
|
||||||
{
|
|
||||||
for (vector<Catalog_info*>::iterator __it = _M_infos.begin();
|
|
||||||
__it != _M_infos.end(); ++__it)
|
|
||||||
delete *__it;
|
|
||||||
}
|
|
||||||
|
|
||||||
catalog
|
|
||||||
_M_add(const string& __domain, locale __l)
|
|
||||||
{
|
|
||||||
__gnu_cxx::__scoped_lock lock(_M_mutex);
|
|
||||||
|
|
||||||
// The counter is not likely to roll unless catalogs keep on being
|
|
||||||
// opened/closed which is consider as an application mistake for the
|
|
||||||
// moment.
|
|
||||||
if (_M_catalog_counter == numeric_limits<catalog>::max())
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
std::auto_ptr<Catalog_info> info(new Catalog_info(_M_catalog_counter++,
|
|
||||||
__domain, __l));
|
|
||||||
_M_infos.push_back(info.get());
|
|
||||||
return info.release()->_M_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
_M_erase(catalog __c)
|
|
||||||
{
|
|
||||||
__gnu_cxx::__scoped_lock lock(_M_mutex);
|
|
||||||
|
|
||||||
vector<Catalog_info*>::iterator __res =
|
|
||||||
lower_bound(_M_infos.begin(), _M_infos.end(), __c, _Comp());
|
|
||||||
if (__res == _M_infos.end() || (*__res)->_M_id != __c)
|
|
||||||
return;
|
|
||||||
|
|
||||||
delete *__res;
|
|
||||||
_M_infos.erase(__res);
|
|
||||||
|
|
||||||
// Just in case closed catalog was the last open.
|
|
||||||
if (__c == _M_catalog_counter - 1)
|
|
||||||
--_M_catalog_counter;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Catalog_info*
|
|
||||||
_M_get(catalog __c) const
|
|
||||||
{
|
|
||||||
__gnu_cxx::__scoped_lock lock(_M_mutex);
|
|
||||||
|
|
||||||
vector<Catalog_info*>::const_iterator __res =
|
|
||||||
lower_bound(_M_infos.begin(), _M_infos.end(), __c, _Comp());
|
|
||||||
|
|
||||||
if (__res != _M_infos.end() && (*__res)->_M_id == __c)
|
|
||||||
return *__res;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
struct _Comp
|
|
||||||
{
|
|
||||||
bool operator()(catalog __cat, const Catalog_info* __info) const
|
|
||||||
{ return __cat < __info->_M_id; }
|
|
||||||
|
|
||||||
bool operator()(const Catalog_info* __info, catalog __cat) const
|
|
||||||
{ return __info->_M_id < __cat; }
|
|
||||||
};
|
|
||||||
|
|
||||||
mutable __gnu_cxx::__mutex _M_mutex;
|
|
||||||
catalog _M_catalog_counter;
|
|
||||||
std::vector<Catalog_info*> _M_infos;
|
|
||||||
};
|
|
||||||
|
|
||||||
Catalogs&
|
|
||||||
get_catalogs()
|
|
||||||
{
|
|
||||||
static Catalogs __catalogs;
|
|
||||||
return __catalogs;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char*
|
const char*
|
||||||
get_glibc_msg(__c_locale __locale_messages __attribute__((unused)),
|
get_glibc_msg(__c_locale __locale_messages __attribute__((unused)),
|
||||||
const char* __name_messages __attribute__((unused)),
|
const char* __name_messages __attribute__((unused)),
|
||||||
|
|
@ -180,7 +78,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
|
|
||||||
bind_textdomain_codeset(__s.c_str(),
|
bind_textdomain_codeset(__s.c_str(),
|
||||||
__nl_langinfo_l(CODESET, __codecvt._M_c_locale_codecvt));
|
__nl_langinfo_l(CODESET, __codecvt._M_c_locale_codecvt));
|
||||||
return get_catalogs()._M_add(__s, __l);
|
return get_catalogs()._M_add(__s.c_str(), __l);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
|
@ -202,7 +100,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
return __dfault;
|
return __dfault;
|
||||||
|
|
||||||
return get_glibc_msg(_M_c_locale_messages, _M_name_messages,
|
return get_glibc_msg(_M_c_locale_messages, _M_name_messages,
|
||||||
__cat_info->_M_domain.c_str(),
|
__cat_info->_M_domain,
|
||||||
__dfault.c_str());
|
__dfault.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -218,7 +116,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
bind_textdomain_codeset(__s.c_str(),
|
bind_textdomain_codeset(__s.c_str(),
|
||||||
__nl_langinfo_l(CODESET, __codecvt._M_c_locale_codecvt));
|
__nl_langinfo_l(CODESET, __codecvt._M_c_locale_codecvt));
|
||||||
|
|
||||||
return get_catalogs()._M_add(__s, __l);
|
return get_catalogs()._M_add(__s.c_str(), __l);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
|
@ -248,7 +146,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
__builtin_memset(&__state, 0, sizeof(mbstate_t));
|
__builtin_memset(&__state, 0, sizeof(mbstate_t));
|
||||||
{
|
{
|
||||||
const wchar_t* __wdfault_next;
|
const wchar_t* __wdfault_next;
|
||||||
size_t __mb_size = __wdfault.size() * __conv.max_length();;
|
size_t __mb_size = __wdfault.size() * __conv.max_length();
|
||||||
char* __dfault =
|
char* __dfault =
|
||||||
static_cast<char*>(__builtin_alloca(sizeof(char) * (__mb_size + 1)));
|
static_cast<char*>(__builtin_alloca(sizeof(char) * (__mb_size + 1)));
|
||||||
char* __dfault_next;
|
char* __dfault_next;
|
||||||
|
|
@ -260,7 +158,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
// Make sure string passed to dgettext is \0 terminated.
|
// Make sure string passed to dgettext is \0 terminated.
|
||||||
*__dfault_next = '\0';
|
*__dfault_next = '\0';
|
||||||
__translation = get_glibc_msg(_M_c_locale_messages, _M_name_messages,
|
__translation = get_glibc_msg(_M_c_locale_messages, _M_name_messages,
|
||||||
__cat_info->_M_domain.c_str(), __dfault);
|
__cat_info->_M_domain, __dfault);
|
||||||
|
|
||||||
// If we end up getting default value back we can simply return original
|
// If we end up getting default value back we can simply return original
|
||||||
// default value.
|
// default value.
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,12 @@ vpath % $(top_srcdir)/src/c++98
|
||||||
|
|
||||||
libc__98convenience_la_SOURCES = $(sources)
|
libc__98convenience_la_SOURCES = $(sources)
|
||||||
|
|
||||||
|
# Use special rules to compile with -fimplicit-templates.
|
||||||
|
c++locale.lo: c++locale.cc
|
||||||
|
$(LTCXXCOMPILE) -fimplicit-templates -c $<
|
||||||
|
c++locale.o: c++locale.cc
|
||||||
|
$(CXXCOMPILE) -fimplicit-templates -c $<
|
||||||
|
|
||||||
if ENABLE_DUAL_ABI
|
if ENABLE_DUAL_ABI
|
||||||
GLIBCXX_ABI_FLAGS = -D_GLIBCXX_USE_CXX11_ABI=@glibcxx_cxx98_abi@
|
GLIBCXX_ABI_FLAGS = -D_GLIBCXX_USE_CXX11_ABI=@glibcxx_cxx98_abi@
|
||||||
# Use special rules to compile with the non-default string ABI.
|
# Use special rules to compile with the non-default string ABI.
|
||||||
|
|
|
||||||
|
|
@ -776,6 +776,12 @@ basic_file.cc: ${glibcxx_srcdir}/$(BASIC_FILE_CC)
|
||||||
$(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true
|
$(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true
|
||||||
|
|
||||||
vpath % $(top_srcdir)/src/c++98
|
vpath % $(top_srcdir)/src/c++98
|
||||||
|
|
||||||
|
# Use special rules to compile with -fimplicit-templates.
|
||||||
|
c++locale.lo: c++locale.cc
|
||||||
|
$(LTCXXCOMPILE) -fimplicit-templates -c $<
|
||||||
|
c++locale.o: c++locale.cc
|
||||||
|
$(CXXCOMPILE) -fimplicit-templates -c $<
|
||||||
# Use special rules to compile with the non-default string ABI.
|
# Use special rules to compile with the non-default string ABI.
|
||||||
@ENABLE_DUAL_ABI_TRUE@collate_members_cow.lo: collate_members_cow.cc
|
@ENABLE_DUAL_ABI_TRUE@collate_members_cow.lo: collate_members_cow.cc
|
||||||
@ENABLE_DUAL_ABI_TRUE@ $(LTCXXCOMPILE) $(GLIBCXX_ABI_FLAGS) -fimplicit-templates -c $<
|
@ENABLE_DUAL_ABI_TRUE@ $(LTCXXCOMPILE) $(GLIBCXX_ABI_FLAGS) -fimplicit-templates -c $<
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue