CPack: Detect more URLs in CPACK_NSIS_MENU_LINKS (#10644)
Previously, only strings containing "http:" qualified as URLs when found in CPACK_NSIS_MENU_LINKS. Now, we use a regex to detect strings beginning with any of the following: ftp:// ftps:// http:// https:// news:// mailto: This commit also moves the caller of CreateMenuLinks outside the "if (cpackPackageExecutables)" block, allowing clients to use CPACK_NSIS_MENU_LINKS without also having CPACK_PACKAGE_EXECUTABLES defined. That bit of this commit fixes the remainder of the issue described in http://public.kitware.com/Bug/view.php?id=7828 Also, added a set(CPACK_NSIS_MENU_LINKS ...) to the CPackComponents test to enable verifying that all of this actually works.
This commit is contained in:
parent
4b05a21302
commit
1bbe4e6917
|
@ -440,12 +440,14 @@ int cmCPackNSISGenerator::InitializeInternal()
|
|||
cmCPackLogger(cmCPackLog::LOG_DEBUG, "CPACK_CREATE_DESKTOP_LINKS: "
|
||||
<< "not set" << std::endl);
|
||||
}
|
||||
|
||||
cmOStringStream str;
|
||||
cmOStringStream deleteStr;
|
||||
|
||||
if ( cpackPackageExecutables )
|
||||
{
|
||||
cmCPackLogger(cmCPackLog::LOG_DEBUG, "The cpackPackageExecutables: "
|
||||
<< cpackPackageExecutables << "." << std::endl);
|
||||
cmOStringStream str;
|
||||
cmOStringStream deleteStr;
|
||||
std::vector<std::string> cpackPackageExecutablesVector;
|
||||
cmSystemTools::ExpandListArgument(cpackPackageExecutables,
|
||||
cpackPackageExecutablesVector);
|
||||
|
@ -486,11 +488,13 @@ int cmCPackNSISGenerator::InitializeInternal()
|
|||
<< ".lnk\"" << std::endl;
|
||||
}
|
||||
}
|
||||
this->CreateMenuLinks(str, deleteStr);
|
||||
this->SetOptionIfNotSet("CPACK_NSIS_CREATE_ICONS", str.str().c_str());
|
||||
this->SetOptionIfNotSet("CPACK_NSIS_DELETE_ICONS",
|
||||
deleteStr.str().c_str());
|
||||
}
|
||||
|
||||
this->CreateMenuLinks(str, deleteStr);
|
||||
this->SetOptionIfNotSet("CPACK_NSIS_CREATE_ICONS", str.str().c_str());
|
||||
this->SetOptionIfNotSet("CPACK_NSIS_DELETE_ICONS",
|
||||
deleteStr.str().c_str());
|
||||
|
||||
this->SetOptionIfNotSet("CPACK_NSIS_COMPRESSOR", "lzma");
|
||||
|
||||
return this->Superclass::InitializeInternal();
|
||||
|
@ -519,22 +523,25 @@ void cmCPackNSISGenerator::CreateMenuLinks( cmOStringStream& str,
|
|||
"<icon name>." << std::endl);
|
||||
return;
|
||||
}
|
||||
|
||||
cmsys::RegularExpression urlRegex;
|
||||
urlRegex.compile("^(mailto:|(ftps?|https?|news)://).*$");
|
||||
|
||||
std::vector<std::string>::iterator it;
|
||||
for ( it = cpackMenuLinksVector.begin();
|
||||
it != cpackMenuLinksVector.end();
|
||||
++it )
|
||||
{
|
||||
std::string sourceName = *it;
|
||||
bool url = false;
|
||||
if(sourceName.find("http:") == 0)
|
||||
{
|
||||
url = true;
|
||||
}
|
||||
/* convert / to \\ */
|
||||
const bool url = urlRegex.find(sourceName);
|
||||
|
||||
// Convert / to \ in filenames, but not in urls:
|
||||
//
|
||||
if(!url)
|
||||
{
|
||||
cmSystemTools::ReplaceString(sourceName, "/", "\\");
|
||||
}
|
||||
|
||||
++ it;
|
||||
std::string linkName = *it;
|
||||
if(!url)
|
||||
|
|
|
@ -68,6 +68,16 @@ set(CPACK_PACKAGE_VERSION_MINOR "0")
|
|||
set(CPACK_PACKAGE_VERSION_PATCH "0")
|
||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CPack Component Example")
|
||||
|
||||
# Settings used when building NSIS installers
|
||||
set(CPACK_NSIS_MENU_LINKS
|
||||
"ftp://ftpserver" "Test Ftp Link"
|
||||
"ftps://ftpsserver" "Test Ftps Link"
|
||||
"http://www.cmake.org" "CMake Web Site"
|
||||
"https://github.com/" "Test Https Link"
|
||||
"mailto:kitware@kitware.com" "Test MailTo Link"
|
||||
"news://newsserver" "Test News Link"
|
||||
)
|
||||
|
||||
# Include CPack to introduce the appropriate targets
|
||||
include(CPack)
|
||||
|
||||
|
|
Loading…
Reference in New Issue