Bug #80536 cmake problem with 5.6.x mysql_config and -fno-rtti
Submitted: 26 Feb 2016 21:01 Modified: 1 Mar 2016 5:00
Reporter: David Bennett Email Updates:
Status: Closed Impact on me:
Category:Connector / C++ Severity:S2 (Serious)
Version:1.1.7 OS:Ubuntu (15.04)
Assigned to: CPU Architecture:Any
Tags: cmake make gcc no-rtti typeid

[26 Feb 2016 21:01] David Bennett
When building on Ubuntu 15.04 using the standard system mysql_config (version 5.6.x), the resulting make will fail due to the inherited Ubuntu 15.04 mysql compile time parameter -fno-rtti

This causes a failure in the source when typeid() is used as runtime type information is required for typeid() to function.

How to repeat:
On Ubuntu 15.04 with GNU g++ 4.x

  ~/mysql-connector-cpp$ sudo apt-get install libmysqlclient-dev
  ~/mysql-connector-cpp$ git checkout 1.1.7
  ~/mysql-connector-cpp$ cmake .
  ~/mysql-connector-cpp$ make

Will result in compile failure:

In file included from /root/git/MetricBench.perclab/build/mysql-connector-cpp/cppconn/connection.h:35:0,
                 from /root/git/MetricBench.perclab/build/mysql-connector-cpp/driver/mysql_connection.h:30,
                 from /root/git/MetricBench.perclab/build/mysql-connector-cpp/driver/mysql_connection.cpp:65:
/root/git/MetricBench.perclab/build/mysql-connector-cpp/cppconn/variant.h: In member function ‘T* sql::BaseVariantImpl::get() const’:
/root/git/MetricBench.perclab/build/mysql-connector-cpp/cppconn/variant.h:59:15: error: cannot use typeid with -fno-rtti
   if (typeid(T).name() == typeid(void).name()) {

Suggested fix:
After reading the -cxxflags from mysql_config, remove the -fno-rtti compile parameter if found.
[29 Feb 2016 13:07] MySQL Verification Team
Hello David,

Thank you for the report.
I'm not seeing this issue at my end on Ubuntu 15.04/15.10 with/without -fno-rtti. Only thing I'm seeing is as reported in Bug #80539.

Any other info which help me to trigger this issue? I'll join the worklog shortly.

[29 Feb 2016 13:07] MySQL Verification Team
test results

Attachment: 80536.results (application/octet-stream, text), 9.92 KiB.

[29 Feb 2016 16:07] David Bennett

Here is the compiler command that is being generated with make VERBOSE=1 before the failure occurs, it looks as though 

/usr/bin/g++-4.9   -DCPPCONN_SO_BUILD=\"\" -DDBUG_OFF -Dmysqlcppconn_EXPORTS -fPIC -I/root/git/MetricBench.perclab/build/MetricBench_boost/include -I/usr/include/mysql -I/tmp/mysql-connector-cpp -I/tmp/mysql-connector-cpp/cppconn -I/tmp/driver/nativeapi    -Wall -fPIC -Woverloaded-virtual    -I/usr/include/mysql -DBIG_JOINS=1 -felide-constructors -fpermissive -fno-rtti  -fno-strict-aliasing   -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -o CMakeFiles/mysqlcppconn.dir/mysql_connection.cpp.o -c /tmp/mysql-connector-cpp/driver/mysql_connection.cpp
[1 Mar 2016 5:00] David Bennett
I am closing this and will delete the PR.   I believe the problem was already fixed in commit c7a14129b9cdff14797ed73753c4b1083dd51c7a
[1 Mar 2016 5:06] MySQL Verification Team
Thank you David for confirming!