[ https://issues.apache.org/jira/browse/HADOOP-8569?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13415584#comment-13415584 ]
Andy Isaacson commented on HADOOP-8569: --------------------------------------- The downside to defining {{_GNU_SOURCE}} everywhere -- in both code that is known to need it, and in code that is intended to be portable -- is that it makes it very easy to accidentally break compilation on non-GNU platforms by unintentionally changing code from "portable" to "gnu-specific". Suppose we have a project with {{foo-linux.c}} containing nonportable code, and {{generic.c}} containing POSIX portable code. If I define {{_GNU_SOURCE}} in {{CFLAGS}} then unintentionally adding a call to {{sync_file_range}} to {{generic.c}} will silently work on Linux, and won't break the build until you try building on Darwin or Solaris or whatever. If instead the project puts {{#define _GNU_SOURCE}} at the top of files intended to be platform-specific, then such portability breakage will be noticed immediately. The argument doesn't extend to LFS support -- it's entirely reasonable to use 64-bit-{{off_t}} everywhere including Linux-32. {code} +# note: can't enable -D_FILE_OFFSET_BITS=64: see MAPREDUCE-4258 +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_REENTRANT -D_GNU_SOURCE") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LARGEFILE_SOURCE") {code} If we don't have FILE_OFFSET_BITS=64, then shouldn't we also leave out LARGEFILE_SOURCE? (This is a serious question, I don't know how those two defines interact, I just vaguely remember that there's a complicated rule about how they should be used.) In summary -- I'd slightly prefer to limit the GNU_SOURCE to a {{#define}} in the files that we intend to be Linux-specific. The rest of this patch is good though, cleaning up the LFS defines and adding that comment about MAPREDUCE-4258. > CMakeLists.txt: define _GNU_SOURCE and _LARGEFILE_SOURCE > -------------------------------------------------------- > > Key: HADOOP-8569 > URL: https://issues.apache.org/jira/browse/HADOOP-8569 > Project: Hadoop Common > Issue Type: Bug > Reporter: Colin Patrick McCabe > Assignee: Colin Patrick McCabe > Priority: Minor > Attachments: HADOOP-8569.001.patch > > > In the native code, we should define _GNU_SOURCE and _LARGEFILE_SOURCE so > that all of the functions on Linux are available. > _LARGEFILE enables fseeko and ftello; _GNU_SOURCE enables a variety of > Linux-specific functions from glibc, including sync_file_range. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira