Skip to content

Commit d314668

Browse files
elshtshortli
authored andcommitted
Drop package-name if needed in SaveModuleInterfaceArgs
1 parent 575ff30 commit d314668

File tree

4 files changed

+38
-7
lines changed

4 files changed

+38
-7
lines changed

include/swift/Frontend/ModuleInterfaceSupport.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ struct ModuleInterfaceOptions {
4747
/// back .swiftinterface and reconstructing .swiftmodule.
4848
std::string Flags;
4949

50+
/// Keep track of flags to be printed in package.swiftinterface only.
51+
/// If -disable-print-package-name-for-non-package-interface is passed,
52+
/// package-name flag should only be printed in package.swiftinterface.
53+
std::string FlagsForPackageOnly;
54+
5055
/// Flags that should be emitted to the .swiftinterface file but are OK to be
5156
/// ignored by the earlier version of the compiler.
5257
std::string IgnorableFlags;

lib/Frontend/CompilerInvocation.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,13 @@ static bool ShouldIncludeModuleInterfaceArg(const Arg *A) {
445445
return true;
446446
}
447447

448+
static bool ShouldIncludeArgInPackageInterfaceOnly(const Arg *A,
449+
ArgList &Args) {
450+
return A->getOption().matches(options::OPT_package_name) &&
451+
Args.hasArg(
452+
options::OPT_disable_print_package_name_for_non_package_interface);
453+
}
454+
448455
/// Save a copy of any flags marked as ModuleInterfaceOption, if running
449456
/// in a mode that is going to emit a .swiftinterface file.
450457
static void SaveModuleInterfaceArgs(ModuleInterfaceOptions &Opts,
@@ -453,8 +460,10 @@ static void SaveModuleInterfaceArgs(ModuleInterfaceOptions &Opts,
453460
if (!FOpts.InputsAndOutputs.hasModuleInterfaceOutputPath())
454461
return;
455462
ArgStringList RenderedArgs;
463+
ArgStringList RenderedArgsForPackageOnly;
456464
ArgStringList RenderedArgsIgnorable;
457465
ArgStringList RenderedArgsIgnorablePrivate;
466+
458467
for (auto A : Args) {
459468
if (!ShouldIncludeModuleInterfaceArg(A))
460469
continue;
@@ -464,7 +473,10 @@ static void SaveModuleInterfaceArgs(ModuleInterfaceOptions &Opts,
464473
} else if (A->getOption().hasFlag(options::ModuleInterfaceOptionIgnorable)) {
465474
A->render(Args, RenderedArgsIgnorable);
466475
} else if (A->getOption().hasFlag(options::ModuleInterfaceOption)) {
467-
A->render(Args, RenderedArgs);
476+
if (ShouldIncludeArgInPackageInterfaceOnly(A, Args))
477+
A->render(Args, RenderedArgsForPackageOnly);
478+
else
479+
A->render(Args, RenderedArgs);
468480
}
469481
}
470482
{
@@ -473,6 +485,13 @@ static void SaveModuleInterfaceArgs(ModuleInterfaceOptions &Opts,
473485
[&](const char *Argument) { PrintArg(OS, Argument, StringRef()); },
474486
[&] { OS << " "; });
475487
}
488+
{
489+
llvm::raw_string_ostream OS(Opts.FlagsForPackageOnly);
490+
interleave(
491+
RenderedArgsForPackageOnly,
492+
[&](const char *Argument) { PrintArg(OS, Argument, StringRef()); },
493+
[&] { OS << " "; });
494+
}
476495
{
477496
llvm::raw_string_ostream OS(Opts.IgnorablePrivateFlags);
478497
interleave(RenderedArgsIgnorablePrivate,

lib/Frontend/ModuleInterfaceSupport.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,13 @@ static void printToolVersionAndFlagsComment(raw_ostream &out,
8989
out << "// " SWIFT_MODULE_FLAGS_KEY ": "
9090
<< flagsStr;
9191

92+
// Adding package-name can be disabled in non-package
93+
// swiftinterfaces; add only to package.swiftinterface
94+
// in such case.
95+
if (Opts.printPackageInterface() &&
96+
!Opts.FlagsForPackageOnly.empty())
97+
out << " " << Opts.FlagsForPackageOnly;
98+
9299
// Insert additional -module-alias flags
93100
if (Opts.AliasModuleNames) {
94101
StringRef moduleName = M->getNameStr();

test/ModuleInterface/package_interface_disable_package_name.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
// CHECK-PRIVATE-NOT: -package-name foopkg
2020
// CHECK-PRIVATE-NOT: -package-name barpkg
2121
// CHECK-PACKAGE-NOT: -package-name foopkg
22-
// CHECK-PACKAGE: -package-name barpkg
2322

24-
// CHECK-PUBLIC: -module-name Bar
25-
// CHECK-PRIVATE: -module-name Bar
26-
// CHECK-PACKAGE: -module-name Bar
23+
// CHECK-PUBLIC: -enable-library-evolution -swift-version 6 -disable-print-package-name-for-non-package-interface -module-name Bar
24+
// CHECK-PRIVATE: -enable-library-evolution -swift-version 6 -disable-print-package-name-for-non-package-interface -module-name Bar
25+
// CHECK-PACKAGE: -enable-library-evolution -swift-version 6 -disable-print-package-name-for-non-package-interface -module-name Bar -package-name barpkg
2726

27+
/// Verify building modules from non-package interfaces succeeds without the package-name flag.
2828
// RUN: %target-swift-frontend -compile-module-from-interface %t/Bar.swiftinterface -o %t/Bar.swiftmodule -module-name Bar
2929
// RUN: rm -rf %t/Bar.swiftmodule
3030
// RUN: %target-swift-frontend -compile-module-from-interface %t/Bar.private.swiftinterface -o %t/Bar.swiftmodule -module-name Bar
@@ -48,9 +48,9 @@
4848
// RUN: %FileCheck %s < %t/Bar.private.swiftinterface
4949
// RUN: %FileCheck %s < %t/Bar.package.swiftinterface
5050

51-
// CHECK: -package-name barpkg
52-
// CHECK: -module-name Bar
51+
// CHECK: -enable-library-evolution -package-name barpkg -swift-version 6 -module-name Bar
5352

53+
/// Building modules from non-package interfaces with package-name (default mode) should succeed.
5454
// RUN: %target-swift-frontend -compile-module-from-interface %t/Bar.swiftinterface -o %t/Bar.swiftmodule -module-name Bar
5555
// RUN: rm -rf %t/Bar.swiftmodule
5656
// RUN: %target-swift-frontend -compile-module-from-interface %t/Bar.private.swiftinterface -o %t/Bar.swiftmodule -module-name Bar

0 commit comments

Comments
 (0)