From cb0af4057e78defd12822092c6fd9bf074b60164 Mon Sep 17 00:00:00 2001 From: comex Date: Wed, 29 Oct 2014 00:01:41 -0400 Subject: [PATCH 1/2] Link Foundation/CoreServices into unit tests so they build with DISABLE_WX. --- CMakeLists.txt | 1 + Source/UnitTests/CMakeLists.txt | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 96c326166f..e039121ac4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -278,6 +278,7 @@ if(APPLE) find_library(COREAUDIO_LIBRARY CoreAudio) find_library(COREFUND_LIBRARY CoreFoundation) find_library(CORESERV_LIBRARY CoreServices) + find_library(FOUNDATION_LIBRARY foundation) find_library(IOB_LIBRARY IOBluetooth) find_library(IOK_LIBRARY IOKit) find_library(QUICKTIME_LIBRARY QuickTime) diff --git a/Source/UnitTests/CMakeLists.txt b/Source/UnitTests/CMakeLists.txt index e625f5ffe9..bfe197fcfb 100644 --- a/Source/UnitTests/CMakeLists.txt +++ b/Source/UnitTests/CMakeLists.txt @@ -1,3 +1,7 @@ +set(LIBS core gtest) +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + list(APPEND LIBS ${FOUNDATION_LIBRARY} ${CORESERV_LIBRARY}) +endif() macro(add_dolphin_test target srcs) # Since this is a Core dependency, it can't be linked as a library and has # to be linked as an object file. Otherwise CMake inserts the library after @@ -9,7 +13,7 @@ macro(add_dolphin_test target srcs) add_custom_command(TARGET Test_${target} PRE_LINK COMMAND mkdir -p ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Tests) - target_link_libraries(Test_${target} core gtest) + target_link_libraries(Test_${target} ${LIBS}) add_dependencies(unittests Test_${target}) add_test(NAME ${target} COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Tests/${target}) endmacro(add_dolphin_test) From efb2f361aa1d93cf1772ece2f672ddf367d0dc19 Mon Sep 17 00:00:00 2001 From: comex Date: Wed, 29 Oct 2014 00:11:57 -0400 Subject: [PATCH 2/2] Don't murder the default PATH and CMAKE_SYSTEM_PREFIX_PATH on OS X. Just prioritize /usr. Changing PATH basically screws everything up, and while the attempt to avoid MacPorts copies of system libraries was well-intentioned, it made the OS X buildbot unable to pick up ffmpeg and libusb. It's sufficient to put /usr first to make sure we use the system copies of duplicated libraries. --- CMakeLists.txt | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e039121ac4..08dce87c62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,9 @@ option(ENABLE_QT "Enable Qt (use the experimental Qt interface)" OFF) option(ENABLE_PCH "Use PCH to speed up compilation" ON) option(ENABLE_LTO "Enables Link Time Optimization" OFF) option(ENABLE_GENERIC "Enables generic build that should run on any little-endian host" OFF) +if(APPLE) + option(OSX_USE_DEFAULT_SEARCH_PATH "Don't prioritize system library paths" OFF) +endif() option(ENCODE_FRAMEDUMPS "Encode framedumps in AVI format" ON) @@ -219,10 +222,18 @@ if(ENABLE_LTO) endif() if(APPLE) - # Ignore MacPorts and Fink and any other locally installed packages that - # might prevent building a distributable binary. - set(CMAKE_SYSTEM_PREFIX_PATH /usr) - set(ENV{PATH} /usr/bin:/bin:/usr/sbin:/sbin) + if(NOT OSX_USE_DEFAULT_SEARCH_PATH) + # Hack up the path to prioritize the path to built-in OS libraries to + # increase the chance of not depending on a bunch of copies of them + # installed by MacPorts, Fink, Homebrew, etc, and ending up copying + # them into the bundle. Since we optionally depend on libraries which + # are not part of OS X (ffmpeg, libusb, etc.), however, don't remove + # the default path entirely as was done in a previous version of this + # file. This is still kinda evil, since it defeats the user's path + # settings... + # See http://www.cmake.org/cmake/help/v3.0/command/find_program.html + set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};/usr") + endif() # Some of our code contains Objective C constructs. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -x objective-c -stdlib=libc++")