Wireshark mailing list archives

Re: Mac Build Error


From: Guy Harris <guy () alum mit edu>
Date: Tue, 26 Jan 2016 00:33:29 -0800

On Jan 25, 2016, at 4:39 PM, David Morsberger <dave () morsberger com> wrote:

After a detailed analysis of cmake, I believe this is the solution and not just fixing the symptom. 

cmake uses /usr/bin/xcodebuild when using -G Xcode. The internal behavior of cmake is significantly different when 
using xcodebuild in contrast to generating Unix makefiles. Specifically, try_run used by CHECK_C_SOURCE_RUNS and 
try_compile used by CHECK_C_SOURCE_COMPILES do not use the environment variables in the same way when using the Xcode 
Generator.

To which environment variables are you referring?  When I was looking at this, I wasn't setting *any* environment 
variables; are you saying that CMake passes some flags to the build tools by setting environment variables rather than 
by passing them on the command line? (CMAKE_REQUIRED_FLAGS is a CMake variable, not an environment variable; that, or 
something constructed from that such as the COMPILE_DEFINITIONS parameter, appears to be what's being handled 
differently by different generators. It *is* handled correctly by try_compile, and by the compile stage of try_run - 
i.e., the flags are passed to the compiler driver in that stage - but not by the link stage of try_run for Xcode, 
although it is passed to the compiler driver by the link stage of try_run for Unix makefiles.)

Guy, the normal behavior of CHECK_C_SOURCE_RUNS for Unix makefiles will check linker flags because it does attempt to 
link and run the resulting executable.

The normal behavior of CHECK_C_SOURCE_RUNS for *all* generators attempts to link and run the resulting executable 
(except when cross-compiling, obviously); that's not a difference between Unix makefiles and Xcode.  That's why the 
name ends with "_RUNS".

The problem is that the flags specified by CMAKE_REQUIRED_FLAGS aren't being passed to the compiler driver in the link 
stage with the Xcode generator, so they're not *getting* tested by the link-and-run stage.

This is why ‘—-as-needed' fails when using basic make.

The underlying problem is

        https://public.kitware.com/Bug/view.php?id=15934

I have not yet looked deeply enough into the CMake source to see why setting CMAKE_REQUIRED_FLAGS affects the link 
stage with the Unix makefile generator but not with the Xcode generator.  I've given up on waiting for anybody from 
Kitware or anybody else to answer the email I sent to the list, so I filed the bug in question and will wait for 
somebody to answer the bug (hopefully with something more useful than "you're holding it wrong").

For now, I've removed all the code that attempts to find out whether a given linker flag works, as there doesn't appear 
to be a generator-independent way of testing linker flags (i.e., there doesn't appear to be a way to do it in a fashion 
that works in the use case of CMake - if all you have to support is Unix makefiles, there's already a fine set of tools 
for that:

        http://www.gnu.org/software/autoconf/manual/autoconf.html

        https://www.gnu.org/software/automake/manual/automake.html

What makes CMake interesting is its ability to handle *other* build systems, such as nmake, Xcode, Visual Studio, etc.).
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev () wireshark org>
Archives:    https://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-request () wireshark org?subject=unsubscribe

Current thread: