File tree Expand file tree Collapse file tree 3 files changed +15
-14
lines changed Expand file tree Collapse file tree 3 files changed +15
-14
lines changed Original file line number Diff line number Diff line change @@ -65,7 +65,9 @@ class XcodeSDK {
6565 // / parameter. For example, "MacOSX.10.14.sdk".
6666 XcodeSDK (std::string &&name) : m_name(std::move(name)) {}
6767 XcodeSDK (std::string name, FileSpec sysroot)
68- : m_name(std::move(name)), m_sysroot(std::move(sysroot)) {}
68+ : m_name(std::move(name)), m_sysroot(std::move(sysroot)) {
69+ assert (!m_sysroot || m_name == m_sysroot.GetFilename ().GetStringRef ());
70+ }
6971 static XcodeSDK GetAnyMacOS () { return XcodeSDK (" MacOSX.sdk" ); }
7072
7173 // / The merge function follows a strict order to maintain monotonicity:
Original file line number Diff line number Diff line change @@ -155,10 +155,6 @@ bool XcodeSDK::Info::operator==(const Info &other) const {
155155}
156156
157157void XcodeSDK::Merge (const XcodeSDK &other) {
158- auto add_internal_sdk_suffix = [](llvm::StringRef sdk) {
159- return (sdk.substr (0 , sdk.size () - 3 ) + " Internal.sdk" ).str ();
160- };
161-
162158 // The "bigger" SDK always wins.
163159 auto l = Parse ();
164160 auto r = other.Parse ();
@@ -168,12 +164,14 @@ void XcodeSDK::Merge(const XcodeSDK &other) {
168164 // The Internal flag always wins.
169165 if (!l.internal && r.internal ) {
170166 if (llvm::StringRef (m_name).ends_with (" .sdk" ))
171- m_name = add_internal_sdk_suffix (m_name);
172-
173- if (m_sysroot.GetFileNameExtension () == " .sdk" )
174- m_sysroot.SetFilename (add_internal_sdk_suffix (m_sysroot.GetFilename ()));
167+ m_name =
168+ m_name.substr (0 , m_name.size () - 3 ) + std::string (" Internal.sdk" );
175169 }
176170 }
171+
172+ // We changed the SDK name. Adjust the sysroot accordingly.
173+ if (m_sysroot && m_sysroot.GetFilename ().GetStringRef () != m_name)
174+ m_sysroot.SetFilename (m_name);
177175}
178176
179177std::string XcodeSDK::GetCanonicalName (XcodeSDK::Info info) {
Original file line number Diff line number Diff line change @@ -66,13 +66,14 @@ TEST(XcodeSDKTest, MergeTest) {
6666 empty.Merge (XcodeSDK (" MacOSX10.14.Internal.sdk" ));
6767 EXPECT_EQ (empty.GetString (), llvm::StringRef (" MacOSX10.14.Internal.sdk" ));
6868 EXPECT_FALSE (empty.GetSysroot ());
69- empty.Merge (XcodeSDK (" MacOSX9.5.Internal.sdk" , FileSpec{" /Path/To/9.5.sdk" }));
69+ empty.Merge (XcodeSDK (" MacOSX9.5.Internal.sdk" ,
70+ FileSpec{" /Path/To/MacOSX9.5.Internal.sdk" }));
7071 EXPECT_FALSE (empty.GetSysroot ());
71- empty.Merge (XcodeSDK (" MacOSX12.5.sdk" , FileSpec{" /Path/To/12 .5.sdk" }));
72- EXPECT_EQ (empty.GetSysroot (), FileSpec{" /Path/To/12 .5.sdk" });
72+ empty.Merge (XcodeSDK (" MacOSX12.5.sdk" , FileSpec{" /Path/To/MacOSX12 .5.sdk" }));
73+ EXPECT_EQ (empty.GetSysroot (), FileSpec{" /Path/To/MacOSX12 .5.sdk" });
7374 empty.Merge (XcodeSDK (" MacOSX11.5.Internal.sdk" ,
74- FileSpec{" /Path/To/12 .5.Internal.sdk" }));
75- EXPECT_EQ (empty.GetSysroot (), FileSpec{" /Path/To/12 .5.Internal.sdk" });
75+ FileSpec{" /Path/To/MacOSX11 .5.Internal.sdk" }));
76+ EXPECT_EQ (empty.GetSysroot (), FileSpec{" /Path/To/MacOSX12 .5.Internal.sdk" });
7677}
7778
7879#ifndef _WIN32
You can’t perform that action at this time.
0 commit comments