Skip to content

Commit ea8a053

Browse files
committed
Drop package-name if needed in SaveModuleInterfaceArgs
1 parent e5b4655 commit ea8a053

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
@@ -485,6 +485,13 @@ static bool ShouldIncludeModuleInterfaceArg(const Arg *A) {
485485
return true;
486486
}
487487

488+
static bool ShouldIncludeArgInPackageInterfaceOnly(const Arg *A,
489+
ArgList &Args) {
490+
return A->getOption().matches(options::OPT_package_name) &&
491+
Args.hasArg(
492+
options::OPT_disable_print_package_name_for_non_package_interface);
493+
}
494+
488495
/// Save a copy of any flags marked as ModuleInterfaceOption, if running
489496
/// in a mode that is going to emit a .swiftinterface file.
490497
static void SaveModuleInterfaceArgs(ModuleInterfaceOptions &Opts,
@@ -493,8 +500,10 @@ static void SaveModuleInterfaceArgs(ModuleInterfaceOptions &Opts,
493500
if (!FOpts.InputsAndOutputs.hasModuleInterfaceOutputPath())
494501
return;
495502
ArgStringList RenderedArgs;
503+
ArgStringList RenderedArgsForPackageOnly;
496504
ArgStringList RenderedArgsIgnorable;
497505
ArgStringList RenderedArgsIgnorablePrivate;
506+
498507
for (auto A : Args) {
499508
if (!ShouldIncludeModuleInterfaceArg(A))
500509
continue;
@@ -504,7 +513,10 @@ static void SaveModuleInterfaceArgs(ModuleInterfaceOptions &Opts,
504513
} else if (A->getOption().hasFlag(options::ModuleInterfaceOptionIgnorable)) {
505514
A->render(Args, RenderedArgsIgnorable);
506515
} else if (A->getOption().hasFlag(options::ModuleInterfaceOption)) {
507-
A->render(Args, RenderedArgs);
516+
if (ShouldIncludeArgInPackageInterfaceOnly(A, Args))
517+
A->render(Args, RenderedArgsForPackageOnly);
518+
else
519+
A->render(Args, RenderedArgs);
508520
}
509521
}
510522
{
@@ -513,6 +525,13 @@ static void SaveModuleInterfaceArgs(ModuleInterfaceOptions &Opts,
513525
[&](const char *Argument) { PrintArg(OS, Argument, StringRef()); },
514526
[&] { OS << " "; });
515527
}
528+
{
529+
llvm::raw_string_ostream OS(Opts.FlagsForPackageOnly);
530+
interleave(
531+
RenderedArgsForPackageOnly,
532+
[&](const char *Argument) { PrintArg(OS, Argument, StringRef()); },
533+
[&] { OS << " "; });
534+
}
516535
{
517536
llvm::raw_string_ostream OS(Opts.IgnorablePrivateFlags);
518537
interleave(RenderedArgsIgnorablePrivate,

lib/Frontend/ModuleInterfaceSupport.cpp

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

93+
// Adding package-name can be disabled in non-package
94+
// swiftinterfaces; add only to package.swiftinterface
95+
// in such case.
96+
if (Opts.printPackageInterface() &&
97+
!Opts.FlagsForPackageOnly.empty())
98+
out << " " << Opts.FlagsForPackageOnly;
99+
93100
// Insert additional -module-alias flags
94101
if (Opts.AliasModuleNames) {
95102
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)