|
|
@ -147,6 +147,7 @@ void cmUnixMakefileGenerator::OutputMakefile(const char* file) |
|
|
|
} |
|
|
|
this->OutputCustomRules(fout); |
|
|
|
this->OutputMakeRules(fout); |
|
|
|
this->OutputInstallRules(fout); |
|
|
|
// only add the depend include if the depend file exists
|
|
|
|
if(cmSystemTools::FileExists(dependName.c_str())) |
|
|
|
{ |
|
|
@ -207,22 +208,29 @@ void cmUnixMakefileGenerator::OutputTargetRules(std::ostream& fout) |
|
|
|
l != tgts.end(); l++) |
|
|
|
{ |
|
|
|
std::vector<cmSourceFile> classes = l->second.GetSourceFiles(); |
|
|
|
fout << l->first << "_SRC_OBJS = "; |
|
|
|
for(std::vector<cmSourceFile>::iterator i = classes.begin(); |
|
|
|
i != classes.end(); i++) |
|
|
|
if (classes.begin() != classes.end()) |
|
|
|
{ |
|
|
|
if(!i->IsAHeaderFileOnly()) |
|
|
|
{ |
|
|
|
fout << "\\\n" << i->GetSourceName() << ".o "; |
|
|
|
} |
|
|
|
fout << l->first << "_SRC_OBJS = "; |
|
|
|
for(std::vector<cmSourceFile>::iterator i = classes.begin(); |
|
|
|
i != classes.end(); i++) |
|
|
|
{ |
|
|
|
if(!i->IsAHeaderFileOnly()) |
|
|
|
{ |
|
|
|
fout << "\\\n" << i->GetSourceName() << ".o "; |
|
|
|
} |
|
|
|
} |
|
|
|
fout << "\n\n"; |
|
|
|
} |
|
|
|
fout << "\n\n"; |
|
|
|
} |
|
|
|
fout << "CLEAN_OBJECT_FILES = "; |
|
|
|
for(cmTargets::const_iterator l = tgts.begin(); |
|
|
|
l != tgts.end(); l++) |
|
|
|
{ |
|
|
|
fout << "${" << l->first << "_SRC_OBJS} "; |
|
|
|
std::vector<cmSourceFile> classes = l->second.GetSourceFiles(); |
|
|
|
if (classes.begin() != classes.end()) |
|
|
|
{ |
|
|
|
fout << "${" << l->first << "_SRC_OBJS} "; |
|
|
|
} |
|
|
|
} |
|
|
|
fout << "\n"; |
|
|
|
} |
|
|
@ -525,13 +533,13 @@ OutputSubDirectoryVars(std::ostream& fout, |
|
|
|
fout << target << "_" << subdir.c_str() << ":\n"; |
|
|
|
if(target1) |
|
|
|
{ |
|
|
|
fout << "\tif test ! -d " << SubDirectories[i].c_str() << "; then ${MAKE} rebuild_cache; fi\n" |
|
|
|
fout << "\t@if test ! -d " << SubDirectories[i].c_str() << "; then ${MAKE} rebuild_cache; fi\n" |
|
|
|
"\tcd " << SubDirectories[i].c_str() |
|
|
|
<< "; ${MAKE} -${MAKEFLAGS} " << target1 << "\n"; |
|
|
|
} |
|
|
|
if(target2) |
|
|
|
{ |
|
|
|
fout << "\tcd " << SubDirectories[i].c_str() |
|
|
|
fout << "\t@cd " << SubDirectories[i].c_str() |
|
|
|
<< "; ${MAKE} -${MAKEFLAGS} " << target2 << "\n"; |
|
|
|
} |
|
|
|
} |
|
|
@ -562,6 +570,10 @@ void cmUnixMakefileGenerator::OutputSubDirectoryRules(std::ostream& fout) |
|
|
|
"depend", |
|
|
|
0, |
|
|
|
SubDirectories); |
|
|
|
this->OutputSubDirectoryVars(fout, "SUBDIR_INSTALL", "install", |
|
|
|
"install", |
|
|
|
0, |
|
|
|
SubDirectories); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -783,6 +795,86 @@ void cmUnixMakefileGenerator::OutputMakeVariables(std::ostream& fout) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void cmUnixMakefileGenerator::OutputInstallRules(std::ostream& fout) |
|
|
|
{ |
|
|
|
bool dll = cmCacheManager::GetInstance()->IsOn("BUILD_SHARED_LIBS"); |
|
|
|
const char* root |
|
|
|
= cmCacheManager::GetInstance()->GetCacheValue("CMAKE_ROOT"); |
|
|
|
fout << "INSTALL = " << root << "/Templates/install-sh -c\n"; |
|
|
|
fout << "INSTALL_PROGRAM = ${INSTALL}\n"; |
|
|
|
fout << "INSTALL_DATA = ${INSTALL} -m 644\n"; |
|
|
|
|
|
|
|
const cmTargets &tgts = m_Makefile->GetTargets(); |
|
|
|
fout << "install: ${SUBDIR_INSTALL}\n"; |
|
|
|
fout << "\t@echo \"Installing ...\"\n"; |
|
|
|
|
|
|
|
const char* prefix |
|
|
|
= cmCacheManager::GetInstance()->GetCacheValue("CMAKE_INSTALL_PREFIX"); |
|
|
|
if (!prefix) |
|
|
|
{ |
|
|
|
prefix = "/usr/local"; |
|
|
|
} |
|
|
|
|
|
|
|
for(cmTargets::const_iterator l = tgts.begin(); |
|
|
|
l != tgts.end(); l++) |
|
|
|
{ |
|
|
|
if (l->second.GetInstallPath() != "") |
|
|
|
{ |
|
|
|
// first make the directories for each target
|
|
|
|
fout << "\t@if [ ! -d " << prefix << l->second.GetInstallPath() << |
|
|
|
" ] ; then \\\n"; |
|
|
|
fout << "\t echo \"Making directory " << prefix |
|
|
|
<< l->second.GetInstallPath() << " \"; \\\n"; |
|
|
|
fout << "\t mkdir -p " << prefix << l->second.GetInstallPath() |
|
|
|
<< "; \\\n"; |
|
|
|
fout << "\t chmod 755 " << prefix << l->second.GetInstallPath() |
|
|
|
<< "; \\\n"; |
|
|
|
fout << "\t else true; \\\n"; |
|
|
|
fout << "\t fi\n"; |
|
|
|
// now install the target
|
|
|
|
switch (l->second.GetType()) |
|
|
|
{ |
|
|
|
case cmTarget::LIBRARY: |
|
|
|
fout << "\t$(INSTALL_DATA) lib" << l->first; |
|
|
|
if(dll) |
|
|
|
{ |
|
|
|
fout << m_Makefile->GetDefinition("CMAKE_SHLIB_SUFFIX"); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
fout << ".a"; |
|
|
|
} |
|
|
|
fout << " " << prefix << l->second.GetInstallPath() << "\n"; |
|
|
|
break; |
|
|
|
case cmTarget::EXECUTABLE: |
|
|
|
fout << "\t$(INSTALL_PROGRAM) " << l->first |
|
|
|
<< " " << prefix << l->second.GetInstallPath() << "\n"; |
|
|
|
break; |
|
|
|
case cmTarget::INSTALL: |
|
|
|
{ |
|
|
|
const std::vector<std::string> &sf = l->second.GetSourceLists(); |
|
|
|
std::vector<std::string>::const_iterator i; |
|
|
|
for (i = sf.begin(); i != sf.end(); ++i) |
|
|
|
{ |
|
|
|
fout << "\t@ echo \"Installing " << *i << " \"\n"; |
|
|
|
fout << "\t@if [ -e " << *i << " ] ; then \\\n"; |
|
|
|
fout << "\t $(INSTALL_DATA) " << *i |
|
|
|
<< " " << prefix << l->second.GetInstallPath() << "; \\\n"; |
|
|
|
fout << "\t elif [ -e ${srcdir}/" << *i << " ] ; then \\\n"; |
|
|
|
fout << "\t $(INSTALL_DATA) ${srcdir}/" << *i |
|
|
|
<< " " << prefix << l->second.GetInstallPath() << "; \\\n"; |
|
|
|
fout << "\telse \\\n"; |
|
|
|
fout << "\t echo \" ERROR!!! Unable to find: " << *i |
|
|
|
<< " \"; \\\n"; |
|
|
|
fout << "\t fi\n"; |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void cmUnixMakefileGenerator::OutputMakeRules(std::ostream& fout) |
|
|
|
{ |
|
|
|
this->OutputMakeRule(fout, |
|
|
@ -797,7 +889,8 @@ void cmUnixMakefileGenerator::OutputMakeRules(std::ostream& fout) |
|
|
|
"# build cplusplus file", |
|
|
|
".cxx.o", |
|
|
|
0, |
|
|
|
"${CMAKE_CXX_COMPILER} ${CMAKE_CXXFLAGS} ${INCLUDE_FLAGS} -c $< -o $@"); this->OutputMakeRule(fout, |
|
|
|
"${CMAKE_CXX_COMPILER} ${CMAKE_CXXFLAGS} ${INCLUDE_FLAGS} -c $< -o $@"); |
|
|
|
this->OutputMakeRule(fout, |
|
|
|
"Default build rule", |
|
|
|
"all", |
|
|
|
"Makefile cmake.depends ${TARGETS} ${SUBDIR_BUILD} ${CMAKE_COMMAND}", |
|
|
|