[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: NDEBUG when building packages?



On Fri, Jun 7, 2013 at 7:35 PM, Hendrik Sattler <post@hendrik-sattler.de> wrote:
>
>
> Mathieu Malaterre <malat@debian.org> schrieb:
>
>>On Sat, Feb 23, 2013 at 11:09 AM, Vincent Cheng
>><vincentc1208@gmail.com> wrote:
>>> On Sat, Feb 23, 2013 at 1:39 AM, Mathieu Malaterre <malat@debian.org>
>>wrote:
>>>> On Fri, Feb 22, 2013 at 9:52 PM, Russ Allbery <rra@debian.org>
>>wrote:
>>>>> Ian Jackson <ijackson@chiark.greenend.org.uk> writes:
>>>>>> Mathieu Malaterre writes ("Re: NDEBUG when building packages?"):
>>>>>
>>>>>>> In that case, this should really be clarified. A lot of
>>debian/cmake
>>>>>>> packages are actually doing:
>>>>>
>>>>>>> -DCMAKE_BUILD_TYPE:STRING=Release
>>>>>
>>>>>>> within there debian/rules files. This settings by default
>>compiles
>>>>>>> with: `-O3 -DNDEBUG`
>>>>>
>>>>>> OMG WTF BBQ
>>>>>
>>>>>> Certainly -DNDEBUG should never be used unless upstream explicitly
>>say
>>>>>> that it's intended to be supported, and usually not even then.
>>>>>
>>>>> Also, -O3 is generally considered rather iffy.  It's not very
>>well-tested
>>>>> and in various versions of GCC it tended to make the code slower,
>>not
>>>>> faster (usually because it unrolled loops too far and blew the CPU
>>cache).
>>>>> It's also had various code generation bugs from time to time.
>>>>>
>>>>> I wouldn't use -O3 without benchmarking of that specific code to
>>confirm
>>>>> that it really improves matters.
>>>>
>>>> Seems like everyone agreed. I'll report a bug to lintian package to
>>>> have it check for this string in d/rules:
>>>>
>>>>
>>http://codesearch.debian.net/search?q=DCMAKE_BUILD_TYPE:STRING%3DRelease
>>>
>>> We should also suggest that packages use
>>> -DCMAKE_BUILD_TYPE=RelWithDebInfo instead (-g -O2). In fact, I think
>>> that this would be a sensible default for packages using debhelper's
>>> cmake integration. Sounds like another wishlist bug for debhelper...
>>
>>cmake from sid makes it even harder. RelWithDebInfo now contains
>>-DNDEBUG ... I have to source-upload all my packages :(
>>
>>$ grep NDEBUG ChangeLog.manual
>> Add -DNDEBUG to RelWithDebInfo flags where where Release flags had it.
>>
>>
>>The solution (backward compat) is now:
>>
>>Either do *not* define CMAKE_BUILD_TYPE, or define CMAKE_BUILD_TYPE to
>>Debug (and hope -DNDEBUG does not creep in ever)
>>
>>2cts
>
> Or just define CMAKE_C_FLAGS properly and don't rely on the default values. It's not that hard, actually.

CMAKE_C_FLAGS gets popullated with whatever is set from ${CFLAGS}. So
this is the right behavior, there is not need to change anything to
that value.
However CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE} get appended to the
compilation line. Therefore we are back to what I previously stated:

>Either do *not* define CMAKE_BUILD_TYPE, or define CMAKE_BUILD_TYPE to
>Debug (and hope -DNDEBUG does not creep in ever)

2cts


Reply to: