← Back to team overview

maria-developers team mailing list archive

Re: [Commits] Rev 3227: Fix embedded build on Windows. in file:///H:/bzr/5.5/

 

Hi, Vladislav!

On Jan 20, Vladislav Vaintroub wrote:
> > -----Original Message-----
> > From: Sergei Golubchik [mailto:serg@xxxxxxxxxxxx]
> > Sent: Freitag, 20. Januar 2012 17:23
> > To: maria-developers@xxxxxxxxxxxxxxxxxxx; wlad@xxxxxxxxxxxx
> > Subject: Re: [Commits] Rev 3227: Fix embedded build on Windows. in
> > file:///H:/bzr/5.5/
> > 
> > On Jan 20, Vladislav Vaintroub wrote:
> > > revno: 3227
> > > revision-id: wlad@xxxxxxxxxxxxxxxx-20120120155435-y8tyd01st3fpbq1e
> > > parent: wlad@xxxxxxxxxxxxxxxx-20120120113906-f6wcj47dyo6jyt45
> > > committer: Vladislav Vaintroub <wlad@xxxxxxxxxxxxxxxx>
> > > branch nick: 5.5
> > > timestamp: Fri 2012-01-20 16:54:35 +0100
> > > message:
> > >   Fix embedded build on Windows.
> > 
> > > === modified file 'mysys/CMakeLists.txt'
> > > --- a/mysys/CMakeLists.txt	2012-01-20 00:57:58 +0000
> > > +++ b/mysys/CMakeLists.txt	2012-01-20 15:54:35 +0000
> > > @@ -46,7 +46,7 @@
> > >   SET (MYSYS_SOURCES ${MYSYS_SOURCES} my_addr_resolve.c)
> > >  ENDIF()
> > >
> > > -IF(WITH_SAFEMALLOC OR NOT HAVE_CXX_NEW)
> > > +IF(NOT HAVE_CXX_NEW)
> > >   ADD_DEFINITIONS( -DUSE_MYSYS_NEW)
> > 
> > Why is that?
> Well, when I added WITH_SAFEMALLOC , build started to fail. Thus I removed
> it again. The build started to fail because I forgot that WITH_SAFEMALLOC is
> no more Boolean, and is set AUTO on Windows, so it was compiled in.
> 
> I'm not surprised that embedded build failed, yet I'm surprised that normal
> server was built on Windows. On Windows, one cannot have multiply defined
> symbols, and since there is already one "new" in C runtime library, it
> actually had to fail.
> 
> > Note, that we should always use mysys/new.cc when safemalloc is enabled.
> This was my thought exactly, when I added it. But I guess, in this case
> my_new.cc might need some smarter tricks in order to replace system new().If
> I'm not mistaken, the old MySQL version of this file used "weak" attributes
> or something similar.

I thought that it was me who added WITH_SAFEMALLOC to that IF(). But now
I've checked and indeed, I did not. I did it in the top-level
CMakeLists.txt:

193  # force -DUSE_MYSYS_NEW unless already done by HAVE_CXX_NEW
194  IF(HAVE_CXX_NEW)
195    SET(DUSE_MYSYS_NEW "-DUSE_MYSYS_NEW")
196  ENDIF()
197
198  IF(WITH_SAFEMALLOC MATCHES "ON")
199    ADD_DEFINITIONS( -DSAFEMALLOC ${DUSE_MYSYS_NEW})
200  ELSEIF(WITH_SAFEMALLOC MATCHES "AUTO" AND NOT WIN32)
201    SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC")
202    SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC ${DUSE_MYSYS_NEW"}
203  ENDIF()

which is supposed to add -DUSE_MYSYS_NEW to the debug flags if
safemalloc is used and HAVE_CXX_NEW is set (is HAVE_CXX_NEW is unset,
-DUSE_MYSYS_NEW is added in mysys, independently from safemalloc).

This should be enough and no additional safemalloc checks in
mysys/CMakeLists.txt should be needed, as far as I understand it.

Regards,
Sergei



References