| Bug #93744 | Can't compile mysql-5.7 source in the git repository | ||
|---|---|---|---|
| Submitted: | 26 Dec 2018 18:57 | Modified: | 28 Dec 2018 13:06 |
| Reporter: | Justin Swanhart | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Compiling | Severity: | S1 (Critical) |
| Version: | 5.7.24 | OS: | Debian (9.6) |
| Assigned to: | CPU Architecture: | Other (amd64) | |
[27 Dec 2018 0:04]
Justin Swanhart
Here is a patch to fix two issues with building, but others remain.
diff --git a/rapid/plugin/group_replication/configure.cmake b/rapid/plugin/group_replication/configure.cmake
index 16544429543..851b2ef9e7f 100644
--- a/rapid/plugin/group_replication/configure.cmake
+++ b/rapid/plugin/group_replication/configure.cmake
@@ -76,8 +76,9 @@ CHECK_STRUCT_HAS_MEMBER("struct ifreq" ifr_name net/if.h
CHECK_STRUCT_HAS_MEMBER("struct xdr_ops" x_putint32 rpc/xdr.h
HAVE_XDR_OPS_X_PUTINT32)
+
CHECK_STRUCT_HAS_MEMBER("struct xdr_ops" x_getint32 rpc/xdr.h
- HAVE_XDR_OPS_X_GETINT32)
+ HAVE_XDR_OPS_X_GETINT32)
CHECK_C_SOURCE_COMPILES(
"
@@ -110,7 +111,7 @@ IF(NOT APPLE
CHECK_C_SOURCE_COMPILES(
"
#include <rpc/xdr.h>
- int main() { XDR xdr; xdr.x_handy = -1; return (int)xdr.x_handy; }
+ int main() { XDR xdr; xdr.x_handy = -1ul; return (int)xdr.x_handy; }
"
OLD_XDR)
@@ -140,8 +141,8 @@ IF(NOT APPLE
CHECK_C_SOURCE_COMPILES(
"
#include <rpc/xdr.h>
- bool_t putlong(XDR* xdr, long *longp)
- { return (bool_t)(*longp + xdr->x_handy); }
+ bool_t putlong(XDR* __xdrs, const long *__lp)
+ { return (bool_t)(*__lp + __xdrs->x_handy); }
int main() {
XDR xdr;
struct xdr_ops ops;
[27 Dec 2018 9:58]
Terje Røsten
hi! Thanks for your report! Are you using MySQL 8.0 or MySQL 5.7? The wolfSSL option is only present in MySQL 8.0 I think? Any special reason you want wolfSSL and not OpenSSL (the default)?
[27 Dec 2018 12:16]
Tor Didriksen
the xdr/rpc warning is a red herring, something else must have gone wrong during the configure step (like wolfssl not being supported in 5.7) The putlong test is *supposed* to fail on debian, note the result variable is called X_PUTLONG_NOT_USE_CONST, and see the corresponding usage of the C macro in xcom_transport.c
[27 Dec 2018 14:25]
Justin Swanhart
Oops, I guess you don’t build 5.7 with wolfSSL. That is just a typo. 8.0 can’t find OpenSSL on my box, or it doesn’t work with the version I have. I didn’t dig into the issue further, and instead used wolfSSL. 5.7 works with th my OpenSSL though.
[27 Dec 2018 14:25]
Justin Swanhart
Oops, I guess you don’t build 5.7 with wolfSSL. That is just a typo. 8.0 can’t find OpenSSL on my box, or it doesn’t work with the version I have. I didn’t dig into the issue further, and instead used wolfSSL. 5.7 works with th my OpenSSL though.
[27 Dec 2018 18:05]
Justin Swanhart
I am not using wolfSSL with 5.7. This is my steps: 1) clone mysql-server 2) checkout 5.7 branch 3) mkdir build 4) cd build/ 5) cmake .. -DDOWNLOAD_BOOST -DWITH_BOOST=../boost 6) make -j32
[27 Dec 2018 18:12]
Justin Swanhart
Tor, apparently my Debian stretch requires const even though that apparently wasn’t the case the case before.
[27 Dec 2018 21:47]
MySQL Verification Team
Then there isn't bug here regarding 5.7 and wolfssl, right?.
[27 Dec 2018 22:53]
Justin Swanhart
The problem is building from source causing errors in cmake. There are type conversion errors and problems with pointer conversion. WolfSSL is not involved.
[27 Dec 2018 22:58]
Justin Swanhart
updated debian version and CPU architecture
[28 Dec 2018 9:37]
Tor Didriksen
That particular cmake check (and many others) is expected to fail on Debian 9.
You end up with file ./rapid/plugin/group_replication/include/xcom/xcom.h
which contains this:
/*Definitions*/
/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */
#define HAVE_STRUCT_IFREQ_IFR_NAME 1
/* #undef HAVE_RPC_INLINE_T */
#define HAVE_XDR_OPS_X_PUTINT32 1
#define HAVE_XDR_OPS_X_GETINT32 1
/* #undef OLD_XDR */
#define X_GETPOSTN_NOT_USE_CONST 1
/* #undef X_PUTLONG_NOT_USE_CONST */
And you will use the last alternative int this #if #elif code, i.e.
'const long *longp'
/* ARGSUSED */
static bool_t
x_putlong (XDR *xdrs,
#if defined(__APPLE__) && defined(__LP64__)
const int *intp MY_ATTRIBUTE((unused))
#elif defined(X_PUTLONG_NOT_USE_CONST)
long *longp MY_ATTRIBUTE((unused))
#else
const long *longp MY_ATTRIBUTE((unused))
#endif
So 'tail CMakeFiles/CMakeError.log is a red herring.
What *other* cmake warnings/errors are you getting?
[28 Dec 2018 9:52]
Terje Røsten
> 8.0 can’t find OpenSSL on my box, or it doesn’t work with the version I have. Please make sure libssl-dev is installed, do: $ apt install libssl-dev You should then get: $ dpkg -l libssl-dev | tail -1 ii libssl-dev:amd64 1.1.0f-3+deb9u2 amd64 Secure Sockets Layer toolkit - development files Remove previous build/ directory and try again: $ mkdir build && cd build $ cmake .. -DWITH_SSL=system $ make -j32 If this fails, run: $ make -j1 and post error messages here.
[28 Dec 2018 13:06]
Justin Swanhart
I pulled a brand new copy of the source repo and now I can't reproduce the problem. Closing.

Description: I am trying to build MySQL from source, but the CMake script generates a test resulting in a type conversion error. error: -- Configuring incomplete, errors occurred! See also "/root/mysql-server/build/CMakeFiles/CMakeOutput.log". See also "/root/mysql-server/build/CMakeFiles/CMakeError.log". root@debian-c-32-64gib-nyc1-01:~/mysql-server/build# tail /root/mysql-server/build/CMakeFiles/CMakeError.log -n20 CMakeFiles/cmTC_81983.dir/build.make:65: recipe for target 'CMakeFiles/cmTC_81983.dir/src.c.o' failed make[1]: *** [CMakeFiles/cmTC_81983.dir/src.c.o] Error 1 make[1]: Leaving directory '/root/mysql-server/build/CMakeFiles/CMakeTmp' Makefile:126: recipe for target 'cmTC_81983/fast' failed make: *** [cmTC_81983/fast] Error 2 Source file was: #include <rpc/xdr.h> bool_t putlong(XDR* xdr, long *longp) { return (bool_t)(*longp + xdr->x_handy); } int main() { XDR xdr; struct xdr_ops ops; long l; ops.x_putlong = putlong; return (int)ops.x_putlong(&xdr, &l); } How to repeat: Follow the directions and place wolfSSL in the extra/ directory. mkdir build/ cd build/ cmake .. -D cmake .. -DDOWNLOAD_BOOST=1 -DWITH_BOOST=../boost -DWITH_SSL=wolfssl Suggested fix: Cast the pointer in the test?