Bug #91114 Missing files in SLES mysql-community-devel
Submitted: 3 Jun 2018 10:21 Modified: 6 Jun 2018 12:35
Reporter: Peter VARGA Email Updates:
Status: Not a Bug Impact on me:
None 
Category:MySQL Server: C API (client library) Severity:S1 (Critical)
Version:8.0.11 OS:SUSE
Assigned to: CPU Architecture:Any

[3 Jun 2018 10:21] Peter VARGA
Description:
The RPM package mysql-community-devel-8.0.11-1.sles12.x86_64.rpm doesn't contain essential include files. See below the content.
I had to copy the missing include files from the server.
With the current files the project doesn't compile.

/usr/bin/mysql_config
/usr/include/mysql
/usr/include/mysql/binary_log_types.h
/usr/include/mysql/errmsg.h
/usr/include/mysql/my_command.h
/usr/include/mysql/my_list.h
/usr/include/mysql/mysql
/usr/include/mysql/mysql.h
/usr/include/mysql/mysql/client_plugin.h
/usr/include/mysql/mysql/plugin_auth_common.h
/usr/include/mysql/mysql/udf_registration_types.h
/usr/include/mysql/mysql_com.h
/usr/include/mysql/mysql_time.h
/usr/include/mysql/mysql_version.h
/usr/include/mysql/mysqld_error.h
/usr/include/mysql/mysqlx_ername.h
/usr/include/mysql/mysqlx_error.h
/usr/include/mysql/mysqlx_version.h
/usr/lib64/mysql/libmysqlclient.a
/usr/lib64/mysql/libmysqlclient.so
/usr/lib64/mysql/libmysqlservices.a
/usr/lib64/pkgconfig/mysqlclient.pc
/usr/share/aclocal/mysql.m4
/usr/share/doc/packages/mysql-community-devel
/usr/share/doc/packages/mysql-community-devel/LICENSE
/usr/share/doc/packages/mysql-community-devel/README
/usr/share/man/man1/comp_err.1.gz
/usr/share/man/man1/mysql_config.1.gz

Version 5.7.22 mysql-community-devel-5.7.22-1.sles12.x86_64.rpm is OK:
/usr/bin/mysql_config
/usr/include/mysql
/usr/include/mysql/big_endian.h
/usr/include/mysql/binary_log_types.h
/usr/include/mysql/byte_order_generic.h
/usr/include/mysql/byte_order_generic_x86.h
/usr/include/mysql/decimal.h
/usr/include/mysql/errmsg.h
/usr/include/mysql/keycache.h
/usr/include/mysql/little_endian.h
/usr/include/mysql/m_ctype.h
/usr/include/mysql/m_string.h
/usr/include/mysql/my_alloc.h
/usr/include/mysql/my_byteorder.h
/usr/include/mysql/my_command.h
/usr/include/mysql/my_compiler.h
/usr/include/mysql/my_config.h
/usr/include/mysql/my_config_x86_64.h
/usr/include/mysql/my_dbug.h
/usr/include/mysql/my_dir.h
/usr/include/mysql/my_getopt.h
/usr/include/mysql/my_global.h
/usr/include/mysql/my_list.h
/usr/include/mysql/my_sys.h
/usr/include/mysql/my_thread.h
/usr/include/mysql/my_thread_local.h
/usr/include/mysql/my_xml.h
/usr/include/mysql/mysql
/usr/include/mysql/mysql.h
/usr/include/mysql/mysql/client_authentication.h
/usr/include/mysql/mysql/client_plugin.h
/usr/include/mysql/mysql/client_plugin.h.pp
/usr/include/mysql/mysql/com_data.h
/usr/include/mysql/mysql/get_password.h
/usr/include/mysql/mysql/group_replication_priv.h
/usr/include/mysql/mysql/innodb_priv.h
/usr/include/mysql/mysql/mysql_lex_string.h
/usr/include/mysql/mysql/plugin.h
/usr/include/mysql/mysql/plugin_audit.h
/usr/include/mysql/mysql/plugin_audit.h.pp
/usr/include/mysql/mysql/plugin_auth.h
/usr/include/mysql/mysql/plugin_auth.h.pp
/usr/include/mysql/mysql/plugin_auth_common.h
/usr/include/mysql/mysql/plugin_ftparser.h
/usr/include/mysql/mysql/plugin_ftparser.h.pp
/usr/include/mysql/mysql/plugin_group_replication.h
/usr/include/mysql/mysql/plugin_keyring.h
/usr/include/mysql/mysql/plugin_keyring.h.pp
/usr/include/mysql/mysql/plugin_trace.h
/usr/include/mysql/mysql/plugin_validate_password.h
/usr/include/mysql/mysql/psi
/usr/include/mysql/mysql/psi/mysql_file.h
/usr/include/mysql/mysql/psi/mysql_idle.h
/usr/include/mysql/mysql/psi/mysql_mdl.h
/usr/include/mysql/mysql/psi/mysql_memory.h
/usr/include/mysql/mysql/psi/mysql_ps.h
/usr/include/mysql/mysql/psi/mysql_socket.h
/usr/include/mysql/mysql/psi/mysql_sp.h
/usr/include/mysql/mysql/psi/mysql_stage.h
/usr/include/mysql/mysql/psi/mysql_statement.h
/usr/include/mysql/mysql/psi/mysql_table.h
/usr/include/mysql/mysql/psi/mysql_thread.h
/usr/include/mysql/mysql/psi/mysql_transaction.h
/usr/include/mysql/mysql/psi/psi.h
/usr/include/mysql/mysql/psi/psi_base.h
/usr/include/mysql/mysql/psi/psi_memory.h
/usr/include/mysql/mysql/service_command.h
/usr/include/mysql/mysql/service_locking.h
/usr/include/mysql/mysql/service_my_plugin_log.h
/usr/include/mysql/mysql/service_my_snprintf.h
/usr/include/mysql/mysql/service_mysql_alloc.h
/usr/include/mysql/mysql/service_mysql_keyring.h
/usr/include/mysql/mysql/service_mysql_password_policy.h
/usr/include/mysql/mysql/service_mysql_string.h
/usr/include/mysql/mysql/service_parser.h
/usr/include/mysql/mysql/service_rpl_transaction_ctx.h
/usr/include/mysql/mysql/service_rpl_transaction_write_set.h
/usr/include/mysql/mysql/service_rules_table.h
/usr/include/mysql/mysql/service_security_context.h
/usr/include/mysql/mysql/service_srv_session.h
/usr/include/mysql/mysql/service_srv_session_info.h
/usr/include/mysql/mysql/service_ssl_wrapper.h
/usr/include/mysql/mysql/service_thd_alloc.h
/usr/include/mysql/mysql/service_thd_engine_lock.h
/usr/include/mysql/mysql/service_thd_wait.h
/usr/include/mysql/mysql/service_thread_scheduler.h
/usr/include/mysql/mysql/services.h
/usr/include/mysql/mysql/services.h.pp
/usr/include/mysql/mysql/thread_pool_priv.h
/usr/include/mysql/mysql/thread_type.h
/usr/include/mysql/mysql_com.h
/usr/include/mysql/mysql_com_server.h
/usr/include/mysql/mysql_embed.h
/usr/include/mysql/mysql_time.h
/usr/include/mysql/mysql_version.h
/usr/include/mysql/mysqld_ername.h
/usr/include/mysql/mysqld_error.h
/usr/include/mysql/mysqlx_ername.h
/usr/include/mysql/mysqlx_error.h
/usr/include/mysql/mysqlx_version.h
/usr/include/mysql/plugin.h
/usr/include/mysql/plugin_audit.h
/usr/include/mysql/plugin_ftparser.h
/usr/include/mysql/plugin_group_replication.h
/usr/include/mysql/plugin_keyring.h
/usr/include/mysql/plugin_validate_password.h
/usr/include/mysql/sql_common.h
/usr/include/mysql/sql_state.h
/usr/include/mysql/sslopt-case.h
/usr/include/mysql/sslopt-longopts.h
/usr/include/mysql/sslopt-vars.h
/usr/include/mysql/thr_cond.h
/usr/include/mysql/thr_mutex.h
/usr/include/mysql/thr_rwlock.h
/usr/include/mysql/typelib.h
/usr/lib64/mysql/libmysqlclient.a
/usr/lib64/mysql/libmysqlclient.so
/usr/lib64/mysql/libmysqlservices.a
/usr/lib64/pkgconfig/mysqlclient.pc
/usr/share/aclocal/mysql.m4
/usr/share/doc/packages/mysql-community-devel
/usr/share/doc/packages/mysql-community-devel/COPYING
/usr/share/doc/packages/mysql-community-devel/README
/usr/share/man/man1/comp_err.1.gz
/usr/share/man/man1/mysql_config.1.gz

How to repeat:
Extract the RPM package.

Suggested fix:
Add the missing include files.
[3 Jun 2018 20:36] Terje Røsten
Hi!

Thanks for your report!

The -devel rpm packages are meant for building MySQL C API client applications:

 https://dev.mysql.com/doc/refman/8.0/en/c-api.html

During development of MySQL 8.0 header files have been cleaned up, hence
a much smaller set of header files are shipped, however building client
applications with such set is fully supported.
[4 Jun 2018 8:14] Peter VARGA
Hi,

may be I am blind but I don't find in the provided link any suggestion what I have to include.

How ever, the "cleaned-up" version - as you called it - break the whole project because all 'my_*' typedef's don't work any more like "my_bool".

It would be nice when the documentation in the link would mention at least with one word what should be included and what changed.

Can you provide me this information?
[6 Jun 2018 12:12] Chiranjeevi Battula
Hello  Peter VARGA,

Thank you for your feedback.
I fully agree with Terje as he rightly mentioned “During development of MySQL 8.0 header files have been cleaned up, hence a much smaller set of header files are shipped, however building client applications with such set is fully supported.“

Moreover, this is documented for example please take a look here https://dev.mysql.com/doc/refman/8.0/en/c-api-data-structures.html

my_bool
A boolean type, for values that are true (nonzero) or false (zero). The my_bool type was used before MySQL 8.0. As of MySQL 8.0, use the bool or int C type instead.
Note
The change from my_bool to bool means that the mysql.h header file requires a C++ or C99 compiler to compile.

This was mentioned in the change log as well - Work was done to clean up the source code base, including: Removing unneeded CMake checks; removing unused macros from source files; reorganizing header files to reduce the number of dependencies and make them more modular, removing function declarations without definitions, replacing locally written functions with equivalent functions from industry-standard libraries. - https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-4.html#mysqld-8-0-4-compiling

Thank you for your interest!

Thanks,
Chiranjeevi.
[6 Jun 2018 12:35] Peter VARGA
Thank you Chiranjeevi very much for your further links.

Even it is nowhere mentioned, I realized that the include file my_global.h has been removed.

Also your statement regarding my_* confirmed my conclusion which lead to change these types to the C/C++ equivalent which I already have done in order it compiles successfully.

Kind regards, Peter
[17 Sep 2018 5:22] rose boey
Hi, the missing my_global.h (and other my_XXX.h header files) are also affecting my UDF installation for MySQL 8.0.11. May i know what is the workaround if these header files are not shipped with this RPM release?