[ 
https://issues.apache.org/jira/browse/HADOOP-11997?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14563590#comment-14563590
 ] 

Colin Patrick McCabe commented on HADOOP-11997:
-----------------------------------------------

We've had this conversation about {{_GNU_SOURCE}} a lot of times in the past.  
Portability can't be ensured by changing macros, it has to be ensured by 
actually building and running on more than one system.

What we really need is a nightly build on at least one non-Linux system.  That 
will keep people honest.  I am -1 for removing {{_GNU_SOURCE}} because removing 
it doesn't do anything helpful.  It just hides various functions and symbols, 
often things that are needed to get the best performance out of Linux.  It's 
just another hurdle that new contributors would have to climb (oh, did you know 
that you needed to set this magic flag to see dup3?  Well, too bad.)

> CMake CMAKE_C_FLAGS are non-portable
> ------------------------------------
>
>                 Key: HADOOP-11997
>                 URL: https://issues.apache.org/jira/browse/HADOOP-11997
>             Project: Hadoop Common
>          Issue Type: Sub-task
>          Components: build
>    Affects Versions: 2.7.0
>         Environment: All
>            Reporter: Alan Burlison
>            Assignee: Alan Burlison
>            Priority: Critical
>
> hadoop-common-project/hadoop-common/src/CMakeLists.txt 
> (https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/CMakeLists.txt#L110)
>  contains the following unconditional assignments to CMAKE_C_FLAGS:
> set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2")
> set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_REENTRANT -D_GNU_SOURCE")
> set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LARGEFILE_SOURCE 
> -D_FILE_OFFSET_BITS=64")
> There are several issues here:
> 1. "-D_GNU_SOURCE" globally enables the use of all Linux-only extensions in 
> hadoop-common native source. This is probably a major contributor to the poor 
> cross-platform portability of Hadoop native code to non-Linux platforms as it 
> makes it easy for developers to use non-portable Linux features without 
> realising. Use of Linux-specific features should be correctly bracketed with 
> conditional macro blocks that provide an alternative for non-Linux platforms.
> 2. "-g -Wall -O2" turns on debugging for all builds, I believe the correct 
> mechanism is to set the CMAKE_BUILD_TYPE CMake variable. If it is still 
> necessary to override CFLAGS it should probably be done conditionally 
> dependent on the value of CMAKE_BUILD_TYPE.
> 3. "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" On Solaris these flags are 
> only needed for largefile support in ILP32 applications, LP64 applications 
> are largefile by default. I believe the same is true on Linux, so these flags 
> are harmless but redundant for 64-bit compilation.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to