Update Driver to generate package interface only if package-name is passed

Resolves rdar://119275771
This commit is contained in:
Ellie Shin
2023-12-06 14:26:29 -08:00
parent 0ec84e7bce
commit 3f71ebb5a6
2 changed files with 42 additions and 2 deletions

View File

@@ -2348,7 +2348,8 @@ void Driver::buildActions(SmallVectorImpl<const Action *> &TopLevelActions,
C.createAction<VerifyModuleInterfaceJobAction>(MergeModuleAction,
file_types::TY_PrivateSwiftModuleInterfaceFile));
}
if (Args.hasArgNoClaim(options::OPT_emit_package_module_interface_path)) {
if (Args.hasArg(options::OPT_package_name) &&
Args.hasArgNoClaim(options::OPT_emit_package_module_interface_path)) {
TopLevelActions.push_back(
C.createAction<VerifyModuleInterfaceJobAction>(MergeModuleAction,
file_types::TY_PackageSwiftModuleInterfaceFile));
@@ -2995,7 +2996,8 @@ Job *Driver::buildJobsForAction(Compilation &C, const JobAction *JA,
chooseModuleInterfacePath(C, JA, workingDirectory, Buf,
file_types::TY_PrivateSwiftModuleInterfaceFile, Output.get());
if (C.getArgs().hasArg(options::OPT_emit_package_module_interface_path))
if (C.getArgs().hasArg(options::OPT_package_name) &&
C.getArgs().hasArg(options::OPT_emit_package_module_interface_path))
chooseModuleInterfacePath(C, JA, workingDirectory, Buf,
file_types::TY_PackageSwiftModuleInterfaceFile, Output.get());

View File

@@ -0,0 +1,38 @@
// RUN: %empty-directory(%t)
// RUN: split-file %s %t
/// A package swiftinterface should be generated only if -package-name is passed.
// RUN: %target-build-swift -emit-module %t/Bar.swift -I %t \
// RUN: -module-name Bar -package-name foopkg \
// RUN: -enable-library-evolution -swift-version 5 \
// RUN: -emit-module-interface-path %t/Bar.swiftinterface \
// RUN: -emit-package-module-interface-path %t/Bar.package.swiftinterface
// RUN: %FileCheck %s < %t/Bar.package.swiftinterface
// CHECK: -package-name foopkg
// CHECK: public struct PubStruct
// CHECK: package struct PkgStruct
/// If -package-name is not passed, a package interface should not be generated even if
/// `-emit-package-module-interface-path` is passed.
// RUN: %target-build-swift -emit-module %t/Baz.swift -I %t \
// RUN: -module-name Baz \
// RUN: -enable-library-evolution -swift-version 5 \
// RUN: -emit-module-interface-path %t/Baz.swiftinterface \
// RUN: -emit-package-module-interface-path %t/Baz.package.swiftinterface
// RUN: ls %t | not grep "Baz.package.swiftinterface"
//--- Bar.swift
public struct PubStruct {
}
package struct PkgStruct {
}
//--- Baz.swift
public struct PubStruct {
}