CPack/NSIS: Add support for 64-bit NSIS (#13203)

This commit is contained in:
David Golub 2012-05-09 15:33:44 -04:00 committed by David Cole
parent 51da766a6d
commit 6ff730a498
3 changed files with 25 additions and 2 deletions

View File

@ -61,6 +61,8 @@ cmCPackGeneratorFactory::cmCPackGeneratorFactory()
{ {
this->RegisterGenerator("NSIS", "Null Soft Installer", this->RegisterGenerator("NSIS", "Null Soft Installer",
cmCPackNSISGenerator::CreateGenerator); cmCPackNSISGenerator::CreateGenerator);
this->RegisterGenerator("NSIS64", "Null Soft Installer (64-bit)",
cmCPackNSISGenerator::CreateGenerator64);
} }
#ifdef __CYGWIN__ #ifdef __CYGWIN__
if (cmCPackCygwinBinaryGenerator::CanGenerate()) if (cmCPackCygwinBinaryGenerator::CanGenerate())

View File

@ -33,8 +33,9 @@
#endif #endif
//---------------------------------------------------------------------- //----------------------------------------------------------------------
cmCPackNSISGenerator::cmCPackNSISGenerator() cmCPackNSISGenerator::cmCPackNSISGenerator(bool nsis64)
{ {
Nsis64 = nsis64;
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -359,6 +360,21 @@ int cmCPackNSISGenerator::InitializeInternal()
bool gotRegValue = false; bool gotRegValue = false;
#ifdef _WIN32 #ifdef _WIN32
if (Nsis64)
{
if ( !gotRegValue && cmsys::SystemTools::ReadRegistryValue(
"HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS\\Unicode", nsisPath,
cmsys::SystemTools::KeyWOW64_64) )
{
gotRegValue = true;
}
if ( !gotRegValue && cmsys::SystemTools::ReadRegistryValue(
"HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS", nsisPath,
cmsys::SystemTools::KeyWOW64_64) )
{
gotRegValue = true;
}
}
if ( !gotRegValue && cmsys::SystemTools::ReadRegistryValue( if ( !gotRegValue && cmsys::SystemTools::ReadRegistryValue(
"HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS\\Unicode", nsisPath, "HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS\\Unicode", nsisPath,
cmsys::SystemTools::KeyWOW64_32) ) cmsys::SystemTools::KeyWOW64_32) )

View File

@ -27,10 +27,13 @@ class cmCPackNSISGenerator : public cmCPackGenerator
public: public:
cmCPackTypeMacro(cmCPackNSISGenerator, cmCPackGenerator); cmCPackTypeMacro(cmCPackNSISGenerator, cmCPackGenerator);
static cmCPackGenerator* CreateGenerator64()
{ return new cmCPackNSISGenerator(true); }
/** /**
* Construct generator * Construct generator
*/ */
cmCPackNSISGenerator(); cmCPackNSISGenerator(bool nsis64 = false);
virtual ~cmCPackNSISGenerator(); virtual ~cmCPackNSISGenerator();
protected: protected:
@ -77,6 +80,8 @@ protected:
/// Translations any newlines found in the string into \\r\\n, so that the /// Translations any newlines found in the string into \\r\\n, so that the
/// resulting string can be used within NSIS. /// resulting string can be used within NSIS.
static std::string TranslateNewlines(std::string str); static std::string TranslateNewlines(std::string str);
bool Nsis64;
}; };
#endif #endif