diff options
author | Adriaan de Groot <groot@kde.org> | 2022-07-05 14:00:43 (GMT) |
---|---|---|
committer | Adriaan de Groot <groot@kde.org> | 2022-07-05 14:00:43 (GMT) |
commit | 2655605261fc3cbf3e951b0f17f137bddf2dcaac (patch) | |
tree | 0e3505197b519ed7491f21fec03a3ddc74c11a5f | |
parent | 50580af6456ce178fc8ad69ec3aa19371c25be1e (diff) | |
download | CMake-2655605261fc3cbf3e951b0f17f137bddf2dcaac.zip CMake-2655605261fc3cbf3e951b0f17f137bddf2dcaac.tar.gz CMake-2655605261fc3cbf3e951b0f17f137bddf2dcaac.tar.bz2 |
FreeBSD: follow CPACK_PACKAGE_FILE_NAME, if set
The underlying pkg library always produces a <name>-<version>.pkg
file, so to follow CPACK_PACKAGE_FILE_NAME we need to detect
that and rename appropriately.
FIXES #23034
-rw-r--r-- | Source/CPack/cmCPackFreeBSDGenerator.cxx | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/Source/CPack/cmCPackFreeBSDGenerator.cxx b/Source/CPack/cmCPackFreeBSDGenerator.cxx index 4f07ad4..162dfc7 100644 --- a/Source/CPack/cmCPackFreeBSDGenerator.cxx +++ b/Source/CPack/cmCPackFreeBSDGenerator.cxx @@ -408,7 +408,8 @@ int cmCPackFreeBSDGenerator::PackageFiles() return 0; } - std::string output_dir = cmSystemTools::CollapseFullPath("../", toplevel); + const std::string output_dir = + cmSystemTools::CollapseFullPath("../", toplevel); PkgCreate package(output_dir, toplevel, manifestname); if (package.isValid()) { if (!package.Create()) { @@ -434,5 +435,23 @@ int cmCPackFreeBSDGenerator::PackageFiles() } } + const std::string packageFileName = + var_lookup("CPACK_PACKAGE_FILE_NAME") + FreeBSDPackageSuffix_17; + if (packageFileNames.size() == 1 && !packageFileName.empty() && + packageFileNames[0] != packageFileName) { + // Since libpkg always writes <name>-<version>.<suffix>, + // if there is a CPACK_PACKAGE_FILE_NAME set, we need to + // rename, and then re-set the name. + const std::string sourceFile = packageFileNames[0]; + const std::string packageSubDirectory = + cmSystemTools::GetParentDirectory(sourceFile); + const std::string targetFileName = + packageSubDirectory + '/' + packageFileName; + if (cmSystemTools::RenameFile(sourceFile, targetFileName)) { + this->packageFileNames.clear(); + this->packageFileNames.emplace_back(targetFileName); + } + } + return 1; } |