Merge topic 'MakeDefaultInstallComponentNameConfigurable'

b71e731 -add docs for ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
7ced073 make default install component name configurable
b6fba35 -strip trailing whitespace
This commit is contained in:
David Cole 2012-05-24 13:37:54 -04:00 committed by CMake Topic Stage
commit 59bdb879e8
9 changed files with 111 additions and 79 deletions

View File

@ -12,7 +12,7 @@
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
SET(CMAKE_SHARED_LIBRARY_C_FLAGS "") # -pic
SET(CMAKE_SHARED_LIBRARY_C_FLAGS "") # -pic
SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared") # -shared
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # +s, flag for exe link to use shared lib
SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "") # -rpath
@ -42,7 +42,7 @@ SET (CMAKE_SKIP_RPATH "NO" CACHE BOOL
SET (CMAKE_SKIP_INSTALL_RPATH "NO" CACHE BOOL
"If set, runtime paths are not added when installing shared libraries, but are added when building.")
SET(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make. This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo.")
SET(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make. This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo.")
IF(CMAKE_GENERATOR MATCHES "Makefiles")
SET(CMAKE_COLOR_MAKEFILE ON CACHE BOOL
@ -170,6 +170,10 @@ ELSE(CMAKE_HOST_UNIX)
SET(CMAKE_GENERIC_PROGRAM_FILES)
ENDIF(CMAKE_HOST_UNIX)
# Set a variable which will be used as component name in install() commands
# where no COMPONENT has been given:
SET(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "Unspecified")
MARK_AS_ADVANCED(
CMAKE_SKIP_RPATH
CMAKE_SKIP_INSTALL_RPATH

View File

@ -522,6 +522,16 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
false,
"Variables That Change Behavior");
cm->DefineProperty
("CMAKE_INSTALL_DEFAULT_COMPONENT_NAME", cmProperty::VARIABLE,
"Default component used in install() commands.",
"If an install() command is used without the COMPONENT argument, "
"these files will be grouped into a default component. The name of this "
"default install component will be taken from this variable. "
"It defaults to \"Unspecified\". ",
false,
"Variables That Change Behavior");
cm->DefineProperty
("CMAKE_FIND_LIBRARY_PREFIXES", cmProperty::VARIABLE,
"Prefixes to prepend when looking for libraries.",

View File

@ -23,25 +23,25 @@
static cmInstallTargetGenerator* CreateInstallTargetGenerator(cmTarget& target,
const cmInstallCommandArguments& args, bool impLib, bool forceOpt = false)
{
return new cmInstallTargetGenerator(target, args.GetDestination().c_str(),
impLib, args.GetPermissions().c_str(),
return new cmInstallTargetGenerator(target, args.GetDestination().c_str(),
impLib, args.GetPermissions().c_str(),
args.GetConfigurations(), args.GetComponent().c_str(),
args.GetOptional() || forceOpt);
}
static cmInstallFilesGenerator* CreateInstallFilesGenerator(
const std::vector<std::string>& absFiles,
const std::vector<std::string>& absFiles,
const cmInstallCommandArguments& args, bool programs)
{
return new cmInstallFilesGenerator(absFiles, args.GetDestination().c_str(),
programs, args.GetPermissions().c_str(),
return new cmInstallFilesGenerator(absFiles, args.GetDestination().c_str(),
programs, args.GetPermissions().c_str(),
args.GetConfigurations(), args.GetComponent().c_str(),
args.GetRename().c_str(), args.GetOptional());
}
// cmInstallCommand
bool cmInstallCommand::InitialPass(std::vector<std::string> const& args,
bool cmInstallCommand::InitialPass(std::vector<std::string> const& args,
cmExecutionStatus &)
{
// Allow calling with no arguments so that arguments may be built up
@ -55,6 +55,13 @@ bool cmInstallCommand::InitialPass(std::vector<std::string> const& args,
this->Makefile->GetLocalGenerator()
->GetGlobalGenerator()->EnableInstallTarget();
this->DefaultComponentName = this->Makefile->GetSafeDefinition(
"CMAKE_INSTALL_DEFAULT_COMPONENT_NAME");
if (this->DefaultComponentName.empty())
{
this->DefaultComponentName = "Unspecified";
}
// Switch among the command modes.
if(args[0] == "SCRIPT")
{
@ -95,7 +102,7 @@ bool cmInstallCommand::InitialPass(std::vector<std::string> const& args,
//----------------------------------------------------------------------------
bool cmInstallCommand::HandleScriptMode(std::vector<std::string> const& args)
{
std::string component("Unspecified");
std::string component = this->DefaultComponentName;
int componentCount = 0;
bool doing_script = false;
bool doing_code = false;
@ -190,7 +197,7 @@ bool cmInstallCommand::HandleScriptMode(std::vector<std::string> const& args)
/*struct InstallPart
{
InstallPart(cmCommandArgumentsHelper* helper, const char* key,
InstallPart(cmCommandArgumentsHelper* helper, const char* key,
cmCommandArgumentGroup* group);
cmCAStringVector argVector;
cmInstallCommandArguments args;
@ -222,7 +229,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// ARCHIVE, RUNTIME etc. (see above)
// These generic args also contain the targets and the export stuff
std::vector<std::string> unknownArgs;
cmInstallCommandArguments genericArgs;
cmInstallCommandArguments genericArgs(this->DefaultComponentName);
cmCAStringVector targetList(&genericArgs.Parser, "TARGETS");
cmCAString exports(&genericArgs.Parser,"EXPORT", &genericArgs.ArgumentGroup);
targetList.Follows(0);
@ -230,16 +237,16 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
genericArgs.Parse(&genericArgVector.GetVector(), &unknownArgs);
bool success = genericArgs.Finalize();
cmInstallCommandArguments archiveArgs;
cmInstallCommandArguments libraryArgs;
cmInstallCommandArguments runtimeArgs;
cmInstallCommandArguments frameworkArgs;
cmInstallCommandArguments bundleArgs;
cmInstallCommandArguments privateHeaderArgs;
cmInstallCommandArguments publicHeaderArgs;
cmInstallCommandArguments resourceArgs;
cmInstallCommandArguments archiveArgs(this->DefaultComponentName);
cmInstallCommandArguments libraryArgs(this->DefaultComponentName);
cmInstallCommandArguments runtimeArgs(this->DefaultComponentName);
cmInstallCommandArguments frameworkArgs(this->DefaultComponentName);
cmInstallCommandArguments bundleArgs(this->DefaultComponentName);
cmInstallCommandArguments privateHeaderArgs(this->DefaultComponentName);
cmInstallCommandArguments publicHeaderArgs(this->DefaultComponentName);
cmInstallCommandArguments resourceArgs(this->DefaultComponentName);
// now parse the args for specific parts of the target (e.g. LIBRARY,
// now parse the args for specific parts of the target (e.g. LIBRARY,
// RUNTIME, ARCHIVE etc.
archiveArgs.Parse (&archiveArgVector.GetVector(), &unknownArgs);
libraryArgs.Parse (&libraryArgVector.GetVector(), &unknownArgs);
@ -345,7 +352,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
this->Makefile->IsOn("CYGWIN") ||
this->Makefile->IsOn("MINGW"));
for(std::vector<std::string>::const_iterator
for(std::vector<std::string>::const_iterator
targetIt=targetList.GetVector().begin();
targetIt!=targetList.GetVector().end();
++targetIt)
@ -422,7 +429,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
case cmTarget::SHARED_LIBRARY:
{
// Shared libraries are handled differently on DLL and non-DLL
// platforms. All windows platforms are DLL platforms including
// platforms. All windows platforms are DLL platforms including
// cygwin. Currently no other platform is a DLL platform.
if(dll_platform)
{
@ -436,13 +443,13 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
if(!archiveArgs.GetDestination().empty())
{
// The import library uses the ARCHIVE properties.
archiveGenerator = CreateInstallTargetGenerator(target,
archiveGenerator = CreateInstallTargetGenerator(target,
archiveArgs, true);
}
if(!runtimeArgs.GetDestination().empty())
{
// The DLL uses the RUNTIME properties.
runtimeGenerator = CreateInstallTargetGenerator(target,
runtimeGenerator = CreateInstallTargetGenerator(target,
runtimeArgs, false);
}
if ((archiveGenerator==0) && (runtimeGenerator==0))
@ -467,7 +474,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// Use the FRAMEWORK properties.
if (!frameworkArgs.GetDestination().empty())
{
frameworkGenerator = CreateInstallTargetGenerator(target,
frameworkGenerator = CreateInstallTargetGenerator(target,
frameworkArgs, false);
}
else
@ -484,7 +491,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// The shared library uses the LIBRARY properties.
if (!libraryArgs.GetDestination().empty())
{
libraryGenerator = CreateInstallTargetGenerator(target,
libraryGenerator = CreateInstallTargetGenerator(target,
libraryArgs, false);
libraryGenerator->SetNamelinkMode(namelinkMode);
namelinkOnly =
@ -507,7 +514,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// Static libraries use ARCHIVE properties.
if (!archiveArgs.GetDestination().empty())
{
archiveGenerator = CreateInstallTargetGenerator(target, archiveArgs,
archiveGenerator = CreateInstallTargetGenerator(target, archiveArgs,
false);
}
else
@ -525,7 +532,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// Modules use LIBRARY properties.
if (!libraryArgs.GetDestination().empty())
{
libraryGenerator = CreateInstallTargetGenerator(target, libraryArgs,
libraryGenerator = CreateInstallTargetGenerator(target, libraryArgs,
false);
libraryGenerator->SetNamelinkMode(namelinkMode);
namelinkOnly =
@ -548,7 +555,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// Application bundles use the BUNDLE properties.
if (!bundleArgs.GetDestination().empty())
{
bundleGenerator = CreateInstallTargetGenerator(target, bundleArgs,
bundleGenerator = CreateInstallTargetGenerator(target, bundleArgs,
false);
}
else if(!runtimeArgs.GetDestination().empty())
@ -580,7 +587,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// Executables use the RUNTIME properties.
if (!runtimeArgs.GetDestination().empty())
{
runtimeGenerator = CreateInstallTargetGenerator(target,
runtimeGenerator = CreateInstallTargetGenerator(target,
runtimeArgs, false);
}
else
@ -600,7 +607,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
target.IsExecutableWithExports())
{
// The import library uses the ARCHIVE properties.
archiveGenerator = CreateInstallTargetGenerator(target,
archiveGenerator = CreateInstallTargetGenerator(target,
archiveArgs, true, true);
}
}
@ -710,7 +717,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
installsRuntime = installsRuntime || runtimeGenerator != 0;
installsFramework = installsFramework || frameworkGenerator != 0;
installsBundle = installsBundle || bundleGenerator != 0;
installsPrivateHeader = installsPrivateHeader
installsPrivateHeader = installsPrivateHeader
|| privateHeaderGenerator != 0;
installsPublicHeader = installsPublicHeader || publicHeaderGenerator != 0;
installsResource = installsResource || resourceGenerator;
@ -729,7 +736,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
if(!exports.GetString().empty() && !namelinkOnly)
{
this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
->AddTargetToExports(exports.GetCString(), &target,
->AddTargetToExports(exports.GetCString(), &target,
archiveGenerator, runtimeGenerator,
libraryGenerator, frameworkGenerator,
bundleGenerator, publicHeaderGenerator);
@ -788,7 +795,7 @@ bool cmInstallCommand::HandleFilesMode(std::vector<std::string> const& args)
{
// This is the FILES mode.
bool programs = (args[0] == "PROGRAMS");
cmInstallCommandArguments ica;
cmInstallCommandArguments ica(this->DefaultComponentName);
cmCAStringVector files(&ica.Parser, programs ? "PROGRAMS" : "FILES");
files.Follows(0);
ica.ArgumentGroup.Follows(&files);
@ -803,7 +810,7 @@ bool cmInstallCommand::HandleFilesMode(std::vector<std::string> const& args)
this->SetError(e.str().c_str());
return false;
}
// Check if there is something to do.
if(files.GetVector().empty())
{
@ -865,7 +872,7 @@ cmInstallCommand::HandleDirectoryMode(std::vector<std::string> const& args)
std::string permissions_file;
std::string permissions_dir;
std::vector<std::string> configurations;
std::string component = "Unspecified";
std::string component = this->DefaultComponentName;
std::string literal_args;
for(unsigned int i=1; i < args.size(); ++i)
{
@ -1179,7 +1186,7 @@ cmInstallCommand::HandleDirectoryMode(std::vector<std::string> const& args)
bool cmInstallCommand::HandleExportMode(std::vector<std::string> const& args)
{
// This is the EXPORT mode.
cmInstallCommandArguments ica;
cmInstallCommandArguments ica(this->DefaultComponentName);
cmCAString exp(&ica.Parser, "EXPORT");
cmCAString name_space(&ica.Parser, "NAMESPACE", &ica.ArgumentGroup);
cmCAString filename(&ica.Parser, "FILE", &ica.ArgumentGroup);

View File

@ -337,10 +337,12 @@ private:
bool HandleFilesMode(std::vector<std::string> const& args);
bool HandleDirectoryMode(std::vector<std::string> const& args);
bool HandleExportMode(std::vector<std::string> const& args);
bool MakeFilesFullPath(const char* modeName,
bool MakeFilesFullPath(const char* modeName,
const std::vector<std::string>& relFiles,
std::vector<std::string>& absFiles);
bool CheckCMP0006(bool& failure);
std::string DefaultComponentName;
};

View File

@ -23,7 +23,8 @@ const char* cmInstallCommandArguments::PermissionsTable[] =
const std::string cmInstallCommandArguments::EmptyString;
cmInstallCommandArguments::cmInstallCommandArguments()
cmInstallCommandArguments::cmInstallCommandArguments(
const std::string& defaultComponent)
:Parser()
,ArgumentGroup()
,Destination (&Parser, "DESTINATION" , &ArgumentGroup)
@ -35,7 +36,9 @@ cmInstallCommandArguments::cmInstallCommandArguments()
,NamelinkOnly (&Parser, "NAMELINK_ONLY" , &ArgumentGroup)
,NamelinkSkip (&Parser, "NAMELINK_SKIP" , &ArgumentGroup)
,GenericArguments(0)
{}
{
this->Component.SetDefaultString(defaultComponent.c_str());
}
const std::string& cmInstallCommandArguments::GetDestination() const
{
@ -130,7 +133,7 @@ bool cmInstallCommandArguments::GetNamelinkSkip() const
return false;
}
const std::vector<std::string>&
const std::vector<std::string>&
cmInstallCommandArguments::GetConfigurations() const
{
if (!this->Configurations.GetVector().empty())
@ -156,7 +159,7 @@ bool cmInstallCommandArguments::Finalize()
return true;
}
void cmInstallCommandArguments::Parse(const std::vector<std::string>* args,
void cmInstallCommandArguments::Parse(const std::vector<std::string>* args,
std::vector<std::string>* unconsumedArgs)
{
this->Parser.Parse(args, unconsumedArgs);
@ -166,9 +169,9 @@ void cmInstallCommandArguments::Parse(const std::vector<std::string>* args,
bool cmInstallCommandArguments::CheckPermissions()
{
this->PermissionsString = "";
for(std::vector<std::string>::const_iterator
permIt = this->Permissions.GetVector().begin();
permIt != this->Permissions.GetVector().end();
for(std::vector<std::string>::const_iterator
permIt = this->Permissions.GetVector().begin();
permIt != this->Permissions.GetVector().end();
++permIt)
{
if (!this->CheckPermissions(*permIt, this->PermissionsString))
@ -183,7 +186,7 @@ bool cmInstallCommandArguments::CheckPermissions(
const std::string& onePermission, std::string& permissions)
{
// Check the permission against the table.
for(const char** valid = cmInstallCommandArguments::PermissionsTable;
for(const char** valid = cmInstallCommandArguments::PermissionsTable;
*valid; ++valid)
{
if(onePermission == *valid)

View File

@ -19,10 +19,10 @@
class cmInstallCommandArguments
{
public:
cmInstallCommandArguments();
void SetGenericArguments(cmInstallCommandArguments* args)
cmInstallCommandArguments(const std::string& defaultComponent);
void SetGenericArguments(cmInstallCommandArguments* args)
{this->GenericArguments = args;}
void Parse(const std::vector<std::string>* args,
void Parse(const std::vector<std::string>* args,
std::vector<std::string>* unconsumedArgs);
// Compute destination path.and check permissions
@ -37,14 +37,15 @@ class cmInstallCommandArguments
bool GetNamelinkOnly() const;
bool GetNamelinkSkip() const;
// once HandleDirectoryMode() is also switched to using
// once HandleDirectoryMode() is also switched to using
// cmInstallCommandArguments then these two functions can become non-static
// private member functions without arguments
static bool CheckPermissions(const std::string& onePerm,
static bool CheckPermissions(const std::string& onePerm,
std::string& perm);
cmCommandArgumentsHelper Parser;
cmCommandArgumentGroup ArgumentGroup;
private:
cmInstallCommandArguments(); // disabled
cmCAString Destination;
cmCAString Component;
cmCAString Rename;

View File

@ -34,7 +34,7 @@ bool cmInstallFilesCommand
if((args.size() > 1) && (args[1] == "FILES"))
{
this->IsFilesForm = true;
this->IsFilesForm = true;
for(std::vector<std::string>::const_iterator s = args.begin()+2;
s != args.end(); ++s)
{
@ -53,45 +53,46 @@ bool cmInstallFilesCommand
this->FinalArgs.push_back(*s);
}
}
this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
->AddInstallComponent("Unspecified");
->AddInstallComponent(this->Makefile->GetSafeDefinition(
"CMAKE_INSTALL_DEFAULT_COMPONENT_NAME"));
return true;
}
void cmInstallFilesCommand::FinalPass()
void cmInstallFilesCommand::FinalPass()
{
// No final pass for "FILES" form of arguments.
if(this->IsFilesForm)
{
return;
}
std::string testf;
std::string ext = this->FinalArgs[0];
// two different options
if (this->FinalArgs.size() > 1)
{
// now put the files into the list
std::vector<std::string>::iterator s = this->FinalArgs.begin();
++s;
// for each argument, get the files
// for each argument, get the files
for (;s != this->FinalArgs.end(); ++s)
{
// replace any variables
std::string temps = *s;
if (cmSystemTools::GetFilenamePath(temps).size() > 0)
{
testf = cmSystemTools::GetFilenamePath(temps) + "/" +
testf = cmSystemTools::GetFilenamePath(temps) + "/" +
cmSystemTools::GetFilenameWithoutLastExtension(temps) + ext;
}
else
{
testf = cmSystemTools::GetFilenameWithoutLastExtension(temps) + ext;
}
// add to the result
this->Files.push_back(this->FindInstallSource(testf.c_str()));
}
@ -102,9 +103,9 @@ void cmInstallFilesCommand::FinalPass()
std::string regex = this->FinalArgs[0].c_str();
cmSystemTools::Glob(this->Makefile->GetCurrentDirectory(),
regex.c_str(), files);
std::vector<std::string>::iterator s = files.begin();
// for each argument, get the files
// for each argument, get the files
for (;s != files.end(); ++s)
{
this->Files.push_back(this->FindInstallSource(s->c_str()));
@ -128,13 +129,14 @@ void cmInstallFilesCommand::CreateInstallGenerator() const
// Use a file install generator.
const char* no_permissions = "";
const char* no_rename = "";
const char* no_component = "Unspecified";
std::string no_component = this->Makefile->GetSafeDefinition(
"CMAKE_INSTALL_DEFAULT_COMPONENT_NAME");
std::vector<std::string> no_configurations;
this->Makefile->AddInstallGenerator(
new cmInstallFilesGenerator(this->Files,
destination.c_str(), false,
no_permissions, no_configurations,
no_component, no_rename));
no_component.c_str(), no_rename));
}
@ -151,7 +153,7 @@ std::string cmInstallFilesCommand::FindInstallSource(const char* name) const
// This is a full path.
return name;
}
// This is a relative path.
std::string tb = this->Makefile->GetCurrentOutputDirectory();
tb += "/";
@ -159,7 +161,7 @@ std::string cmInstallFilesCommand::FindInstallSource(const char* name) const
std::string ts = this->Makefile->GetCurrentDirectory();
ts += "/";
ts += name;
if(cmSystemTools::FileExists(tb.c_str()))
{
// The file exists in the binary tree. Use it.

View File

@ -31,26 +31,27 @@ bool cmInstallProgramsCommand
for (++s;s != args.end(); ++s)
{
this->FinalArgs.push_back(*s);
}
}
this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
->AddInstallComponent("Unspecified");
->AddInstallComponent(this->Makefile->GetSafeDefinition(
"CMAKE_INSTALL_DEFAULT_COMPONENT_NAME"));
return true;
}
void cmInstallProgramsCommand::FinalPass()
void cmInstallProgramsCommand::FinalPass()
{
bool files_mode = false;
if(!this->FinalArgs.empty() && this->FinalArgs[0] == "FILES")
{
files_mode = true;
}
// two different options
if (this->FinalArgs.size() > 1 || files_mode)
{
// for each argument, get the programs
// for each argument, get the programs
std::vector<std::string>::iterator s = this->FinalArgs.begin();
if(files_mode)
{
@ -68,9 +69,9 @@ void cmInstallProgramsCommand::FinalPass()
std::vector<std::string> programs;
cmSystemTools::Glob(this->Makefile->GetCurrentDirectory(),
this->FinalArgs[0].c_str(), programs);
std::vector<std::string>::iterator s = programs.begin();
// for each argument, get the programs
// for each argument, get the programs
for (;s != programs.end(); ++s)
{
this->Files.push_back(this->FindInstallSource(s->c_str()));
@ -89,13 +90,14 @@ void cmInstallProgramsCommand::FinalPass()
// Use a file install generator.
const char* no_permissions = "";
const char* no_rename = "";
const char* no_component = "Unspecified";
std::string no_component = this->Makefile->GetSafeDefinition(
"CMAKE_INSTALL_DEFAULT_COMPONENT_NAME");
std::vector<std::string> no_configurations;
this->Makefile->AddInstallGenerator(
new cmInstallFilesGenerator(this->Files,
destination.c_str(), true,
no_permissions, no_configurations,
no_component, no_rename));
no_component.c_str(), no_rename));
}
/**
@ -112,7 +114,7 @@ std::string cmInstallProgramsCommand
// This is a full path.
return name;
}
// This is a relative path.
std::string tb = this->Makefile->GetCurrentOutputDirectory();
tb += "/";
@ -120,7 +122,7 @@ std::string cmInstallProgramsCommand
std::string ts = this->Makefile->GetCurrentDirectory();
ts += "/";
ts += name;
if(cmSystemTools::FileExists(tb.c_str()))
{
// The file exists in the binary tree. Use it.

View File

@ -58,7 +58,8 @@ bool cmInstallTargetsCommand
}
this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
->AddInstallComponent("Unspecified");
->AddInstallComponent(this->Makefile->GetSafeDefinition(
"CMAKE_INSTALL_DEFAULT_COMPONENT_NAME"));
return true;
}