From d2c2319d6479d4319ef298f6178b00e953a9b179 Mon Sep 17 00:00:00 2001 From: Gregor Jasny Date: Thu, 20 Aug 2015 22:29:49 +0200 Subject: Replace CMAKE_XCODE_EFFECTIVE_PLATFORMS with call to PlatformIsAppleIos Currently the CMAKE_XCODE_EFFECTIVE_PLATFORMS property acts only as a kind of toggle switch to enable iOS project layout features. But instead of relying on this undocumented property, better detect the presence of an iOS SDK directly. --- Source/cmTarget.cxx | 5 ++--- Tests/RunCMake/XcodeProject/XcodeBundles.cmake | 1 - Tests/iOSNavApp/CMakeLists.txt | 1 - 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 49b3239..da314a6 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -3566,10 +3566,9 @@ bool cmTarget::ComputeOutputDir(const std::string& config, // The generator may add the configuration's subdirectory. if(!conf.empty()) { - const char *platforms = this->Makefile->GetDefinition( - "CMAKE_XCODE_EFFECTIVE_PLATFORMS"); + bool iosPlatform = this->Makefile->PlatformIsAppleIos(); std::string suffix = - usesDefaultOutputDir && platforms ? "$(EFFECTIVE_PLATFORM_NAME)" : ""; + usesDefaultOutputDir && iosPlatform ? "$(EFFECTIVE_PLATFORM_NAME)" : ""; this->Makefile->GetGlobalGenerator()-> AppendDirectoryForConfig("/", conf, suffix, out); } diff --git a/Tests/RunCMake/XcodeProject/XcodeBundles.cmake b/Tests/RunCMake/XcodeProject/XcodeBundles.cmake index d5cb51f..2cbccfa 100644 --- a/Tests/RunCMake/XcodeProject/XcodeBundles.cmake +++ b/Tests/RunCMake/XcodeProject/XcodeBundles.cmake @@ -6,7 +6,6 @@ enable_language(C) if(TEST_IOS) set(CMAKE_OSX_SYSROOT iphoneos) set(CMAKE_OSX_ARCHITECTURES "armv7") - set(CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos;-iphonesimulator") set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "NO") endif(TEST_IOS) diff --git a/Tests/iOSNavApp/CMakeLists.txt b/Tests/iOSNavApp/CMakeLists.txt index 12c3ada..1fc33e0 100644 --- a/Tests/iOSNavApp/CMakeLists.txt +++ b/Tests/iOSNavApp/CMakeLists.txt @@ -3,7 +3,6 @@ project(NavApp3) set(CMAKE_OSX_SYSROOT iphoneos4.3) set(CMAKE_OSX_ARCHITECTURES "armv6;armv7;i386") -set(CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos;-iphonesimulator") include_directories( ${CMAKE_CURRENT_SOURCE_DIR} -- cgit v0.12 From 48fe617e667d2e6b1e471cfb56346de51f984ba5 Mon Sep 17 00:00:00 2001 From: Gregor Jasny Date: Thu, 13 Aug 2015 13:03:02 +0300 Subject: Fix installation of iOS targets (#12506) Since cmTarget::ComputeOutputDir results can be used in CMake code of script cmake_install.cmake and in Xcode internals, string ${EFFECTIVE_PLATFORM_NAME} should be used instead of $(EFFECTIVE_PLATFORM_NAME) because it works for both. Value of CMAKE_CFG_INTDIR can't be used in BUILD_TYPE argument of install command since it contains $(EFFECTIVE_PLATFORM_NAME) (e.g. equals to `Release-iphoneos`, `Debug-iphoneos`, etc.). --- Source/cmGlobalGenerator.cxx | 12 +++++++++++- Source/cmTarget.cxx | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 503c455..40f1fcf 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -2427,7 +2427,17 @@ void cmGlobalGenerator::CreateDefaultGlobalTargets(cmTargets* targets) if ( cmakeCfgIntDir && *cmakeCfgIntDir && cmakeCfgIntDir[0] != '.' ) { std::string cfgArg = "-DBUILD_TYPE="; - cfgArg += mf->GetDefinition("CMAKE_CFG_INTDIR"); + bool iosPlatform = mf->PlatformIsAppleIos(); + if(iosPlatform) + { + cfgArg += "$(CONFIGURATION)"; + singleLine.push_back(cfgArg); + cfgArg = "-DEFFECTIVE_PLATFORM_NAME=$(EFFECTIVE_PLATFORM_NAME)"; + } + else + { + cfgArg += mf->GetDefinition("CMAKE_CFG_INTDIR"); + } singleLine.push_back(cfgArg); } singleLine.push_back("-P"); diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index da314a6..d6d509c 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -3568,7 +3568,7 @@ bool cmTarget::ComputeOutputDir(const std::string& config, { bool iosPlatform = this->Makefile->PlatformIsAppleIos(); std::string suffix = - usesDefaultOutputDir && iosPlatform ? "$(EFFECTIVE_PLATFORM_NAME)" : ""; + usesDefaultOutputDir && iosPlatform ? "${EFFECTIVE_PLATFORM_NAME}" : ""; this->Makefile->GetGlobalGenerator()-> AppendDirectoryForConfig("/", conf, suffix, out); } -- cgit v0.12 From ad262917d96aa4d6faeff3c9dfecf684cebbe123 Mon Sep 17 00:00:00 2001 From: Gregor Jasny Date: Sat, 15 Aug 2015 22:37:35 +0200 Subject: Xcode: Add unit test for iOS project install (#12506) --- Tests/RunCMake/XcodeProject/RunCMakeTest.cmake | 14 ++++++++++++++ .../XcodeProject/XcodeInstallIOS-install-stdout.txt | 2 ++ Tests/RunCMake/XcodeProject/XcodeInstallIOS.cmake | 12 ++++++++++++ Tests/RunCMake/XcodeProject/foo.cpp | 1 + 4 files changed, 29 insertions(+) create mode 100644 Tests/RunCMake/XcodeProject/XcodeInstallIOS-install-stdout.txt create mode 100644 Tests/RunCMake/XcodeProject/XcodeInstallIOS.cmake create mode 100644 Tests/RunCMake/XcodeProject/foo.cpp diff --git a/Tests/RunCMake/XcodeProject/RunCMakeTest.cmake b/Tests/RunCMake/XcodeProject/RunCMakeTest.cmake index ef81739..382c990 100644 --- a/Tests/RunCMake/XcodeProject/RunCMakeTest.cmake +++ b/Tests/RunCMake/XcodeProject/RunCMakeTest.cmake @@ -11,6 +11,20 @@ endif() # Use a single build tree for a few tests without cleaning. if(NOT XCODE_VERSION VERSION_LESS 5) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeInstallIOS-build) + set(RunCMake_TEST_NO_CLEAN 1) + set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_BINARY_DIR}/ios_install") + + file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + + run_cmake(XcodeInstallIOS) + run_cmake_command(XcodeInstallIOS-install ${CMAKE_COMMAND} --build . --target install) + + unset(RunCMake_TEST_BINARY_DIR) + unset(RunCMake_TEST_NO_CLEAN) + unset(RunCMake_TEST_OPTIONS) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesOSX-build) set(RunCMake_TEST_NO_CLEAN 1) set(RunCMake_TEST_OPTIONS "-DTEST_IOS=OFF") diff --git a/Tests/RunCMake/XcodeProject/XcodeInstallIOS-install-stdout.txt b/Tests/RunCMake/XcodeProject/XcodeInstallIOS-install-stdout.txt new file mode 100644 index 0000000..f2478be --- /dev/null +++ b/Tests/RunCMake/XcodeProject/XcodeInstallIOS-install-stdout.txt @@ -0,0 +1,2 @@ +-- Install configuration: .* +-- Installing: .*/ios_install/lib/libfoo.a diff --git a/Tests/RunCMake/XcodeProject/XcodeInstallIOS.cmake b/Tests/RunCMake/XcodeProject/XcodeInstallIOS.cmake new file mode 100644 index 0000000..a797410 --- /dev/null +++ b/Tests/RunCMake/XcodeProject/XcodeInstallIOS.cmake @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 2.8.5) + +project(XcodeInstallIOS) + +set(CMAKE_OSX_SYSROOT iphoneos) +set(XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") +set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "NO") + +set(CMAKE_OSX_ARCHITECTURES "armv7;i386") + +add_library(foo STATIC foo.cpp) +install(TARGETS foo ARCHIVE DESTINATION lib) diff --git a/Tests/RunCMake/XcodeProject/foo.cpp b/Tests/RunCMake/XcodeProject/foo.cpp new file mode 100644 index 0000000..2fb55ee --- /dev/null +++ b/Tests/RunCMake/XcodeProject/foo.cpp @@ -0,0 +1 @@ +void foo() { } -- cgit v0.12