ENH: for all custom commands that can not be given to a target, add them to all targets in the current makefile
This commit is contained in:
parent
aa9734ab6c
commit
a91947039a
|
@ -19,6 +19,7 @@
|
|||
//----------------------------------------------------------------------------
|
||||
cmCustomCommand::cmCustomCommand()
|
||||
{
|
||||
m_Used = false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -28,6 +29,7 @@ cmCustomCommand::cmCustomCommand(const cmCustomCommand& r):
|
|||
m_CommandLines(r.m_CommandLines),
|
||||
m_Comment(r.m_Comment)
|
||||
{
|
||||
m_Used = false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -40,6 +42,7 @@ cmCustomCommand::cmCustomCommand(const char* output,
|
|||
m_CommandLines(commandLines),
|
||||
m_Comment(comment?comment:"")
|
||||
{
|
||||
m_Used = false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
|
|
@ -49,11 +49,16 @@ public:
|
|||
/** Get the comment string for the command. */
|
||||
const char* GetComment() const;
|
||||
|
||||
/** set get the used status of the command */
|
||||
void Used() { m_Used = true;};
|
||||
bool IsUsed() { return m_Used;};
|
||||
|
||||
private:
|
||||
std::string m_Output;
|
||||
std::vector<std::string> m_Depends;
|
||||
cmCustomCommandLines m_CommandLines;
|
||||
std::string m_Comment;
|
||||
bool m_Used;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -80,9 +80,60 @@ void cmLocalVisualStudio6Generator::OutputDSPFile()
|
|||
|
||||
// clear project names
|
||||
m_CreatedProjectNames.clear();
|
||||
|
||||
// Call TraceVSDependencies on all targets
|
||||
cmTargets &tgts = m_Makefile->GetTargets();
|
||||
for(cmTargets::iterator l = tgts.begin();
|
||||
l != tgts.end(); l++)
|
||||
{
|
||||
// INCLUDE_EXTERNAL_MSPROJECT command only affects the workspace
|
||||
// so don't build a projectfile for it
|
||||
if ((l->second.GetType() != cmTarget::INSTALL_FILES)
|
||||
&& (l->second.GetType() != cmTarget::INSTALL_PROGRAMS)
|
||||
&& (strncmp(l->first.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) != 0))
|
||||
{
|
||||
cmTarget& target = l->second;
|
||||
target.TraceVSDependencies(target.GetName(), m_Makefile);
|
||||
}
|
||||
}
|
||||
// now for all custom commands that are not used directly in a
|
||||
// target, add them to all targets in the current directory or
|
||||
// makefile
|
||||
std::vector<cmSourceFile*> & classesmf = m_Makefile->GetSourceFiles();
|
||||
for(std::vector<cmSourceFile*>::const_iterator i = classesmf.begin();
|
||||
i != classesmf.end(); i++)
|
||||
{
|
||||
if(cmCustomCommand* cc = (*i)->GetCustomCommand())
|
||||
{
|
||||
if(!cc->IsUsed())
|
||||
{
|
||||
for(cmTargets::iterator l = tgts.begin();
|
||||
l != tgts.end(); l++)
|
||||
{
|
||||
if ((l->second.GetType() != cmTarget::INSTALL_FILES)
|
||||
&& (l->second.GetType() != cmTarget::INSTALL_PROGRAMS)
|
||||
&& (strncmp(l->first.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) != 0))
|
||||
{
|
||||
cmTarget& target = l->second;
|
||||
bool sameAsTarget = false;
|
||||
// make sure we don't add a custom command that depends on
|
||||
// this target
|
||||
for(unsigned int k =0; k < cc->GetDepends().size(); k++)
|
||||
{
|
||||
if(cmSystemTools::GetFilenameName(cc->GetDepends()[k]) == target.GetFullName())
|
||||
{
|
||||
sameAsTarget = true;
|
||||
}
|
||||
}
|
||||
if(!sameAsTarget)
|
||||
{
|
||||
target.GetSourceFiles().push_back(*i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// build any targets
|
||||
cmTargets &tgts = m_Makefile->GetTargets();
|
||||
for(cmTargets::iterator l = tgts.begin();
|
||||
l != tgts.end(); l++)
|
||||
{
|
||||
|
@ -266,7 +317,6 @@ void cmLocalVisualStudio6Generator::WriteDSPFile(std::ostream& fout,
|
|||
// trace the visual studio dependencies
|
||||
std::string name = libName;
|
||||
name += ".dsp.cmake";
|
||||
target.TraceVSDependencies(name, m_Makefile);
|
||||
|
||||
// We may be modifying the source groups temporarily, so make a copy.
|
||||
std::vector<cmSourceGroup> sourceGroups = m_Makefile->GetSourceGroups();
|
||||
|
|
|
@ -92,8 +92,82 @@ void cmLocalVisualStudio7Generator::OutputVCProjFile()
|
|||
// clear project names
|
||||
m_CreatedProjectNames.clear();
|
||||
|
||||
// build any targets
|
||||
cmTargets &tgts = m_Makefile->GetTargets();
|
||||
// Call TraceVSDependencies on all targets
|
||||
cmTargets &tgts = m_Makefile->GetTargets();
|
||||
for(cmTargets::iterator l = tgts.begin();
|
||||
l != tgts.end(); l++)
|
||||
{
|
||||
// INCLUDE_EXTERNAL_MSPROJECT command only affects the workspace
|
||||
// so don't build a projectfile for it
|
||||
if ((l->second.GetType() != cmTarget::INSTALL_FILES)
|
||||
&& (l->second.GetType() != cmTarget::INSTALL_PROGRAMS)
|
||||
&& (strncmp(l->first.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) != 0))
|
||||
{
|
||||
cmTarget& target = l->second;
|
||||
target.TraceVSDependencies(target.GetName(), m_Makefile);
|
||||
}
|
||||
}
|
||||
// now for all custom commands that are not used directly in a
|
||||
// target, add them to all targets in the current directory or
|
||||
// makefile
|
||||
std::vector<cmSourceFile*> & classesmf = m_Makefile->GetSourceFiles();
|
||||
for(std::vector<cmSourceFile*>::const_iterator i = classesmf.begin();
|
||||
i != classesmf.end(); i++)
|
||||
{
|
||||
if(cmCustomCommand* cc = (*i)->GetCustomCommand())
|
||||
{
|
||||
// while we are at it, if it is a .rule file then for visual studio 7 we
|
||||
// must generate it so that depend information works correctly
|
||||
if ((*i)->GetSourceExtension() == "rule")
|
||||
{
|
||||
std::string source = (*i)->GetFullPath();
|
||||
if(!cmSystemTools::FileExists(source.c_str()))
|
||||
{
|
||||
cmSystemTools::ReplaceString(source, "$(IntDir)/", "");
|
||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
||||
std::ofstream fout(source.c_str(),
|
||||
std::ios::binary | std::ios::out | std::ios::trunc);
|
||||
#else
|
||||
std::ofstream fout(source.c_str(),
|
||||
std::ios::out | std::ios::trunc);
|
||||
#endif
|
||||
if(fout)
|
||||
{
|
||||
fout.write("# generated from CMake",22);
|
||||
fout.flush();
|
||||
fout.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!cc->IsUsed())
|
||||
{
|
||||
for(cmTargets::iterator l = tgts.begin();
|
||||
l != tgts.end(); l++)
|
||||
{
|
||||
if ((l->second.GetType() != cmTarget::INSTALL_FILES)
|
||||
&& (l->second.GetType() != cmTarget::INSTALL_PROGRAMS)
|
||||
&& (strncmp(l->first.c_str(), "INCLUDE_EXTERNAL_MSPROJECT", 26) != 0))
|
||||
{
|
||||
cmTarget& target = l->second;
|
||||
bool sameAsTarget = false;
|
||||
// make sure we don't add a custom command that depends on
|
||||
// this target
|
||||
for(unsigned int k =0; k < cc->GetDepends().size(); k++)
|
||||
{
|
||||
if(cmSystemTools::GetFilenameName(cc->GetDepends()[k]) == target.GetFullName())
|
||||
{
|
||||
sameAsTarget = true;
|
||||
}
|
||||
}
|
||||
if(!sameAsTarget)
|
||||
{
|
||||
target.GetSourceFiles().push_back(*i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for(cmTargets::iterator l = tgts.begin();
|
||||
l != tgts.end(); l++)
|
||||
{
|
||||
|
@ -968,7 +1042,6 @@ void cmLocalVisualStudio7Generator::WriteVCProjFile(std::ostream& fout,
|
|||
// trace the visual studio dependencies
|
||||
std::string name = libName;
|
||||
name += ".vcproj.cmake";
|
||||
target.TraceVSDependencies(name, m_Makefile);
|
||||
|
||||
// We may be modifying the source groups temporarily, so make a copy.
|
||||
std::vector<cmSourceGroup> sourceGroups = m_Makefile->GetSourceGroups();
|
||||
|
|
|
@ -192,6 +192,16 @@ void cmTarget::TraceVSDependencies(std::string projFile,
|
|||
// finished with this SF move to the next
|
||||
srcFilesToProcess.pop();
|
||||
}
|
||||
// mark all custom commands in the targets list of source files as used.
|
||||
for(std::vector<cmSourceFile*>::iterator i = m_SourceFiles.begin();
|
||||
i != m_SourceFiles.end(); ++i)
|
||||
{
|
||||
cmCustomCommand* cc = (*i)->GetCustomCommand();
|
||||
if(cc)
|
||||
{
|
||||
cc->Used();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cmTarget::GenerateSourceFilesFromSourceLists( cmMakefile &mf)
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
#
|
||||
PROJECT (CustomCommand)
|
||||
|
||||
ADD_SUBDIRECTORY(GeneratedHeader)
|
||||
|
||||
#
|
||||
# Lib and exe path
|
||||
#
|
||||
|
@ -133,8 +135,10 @@ ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.c
|
|||
# auto-object-depends feature of the Makefile generator. Currently
|
||||
# the feature does not seem to work in Visual Studio generators so
|
||||
# these dependencies are needed.
|
||||
SET_SOURCE_FILES_PROPERTIES(${PROJECT_BINARY_DIR}/foo.c PROPERTIES
|
||||
OBJECT_DEPENDS "${PROJECT_BINARY_DIR}/doc1.h;${PROJECT_BINARY_DIR}/foo.h")
|
||||
#SET_SOURCE_FILES_PROPERTIES(${PROJECT_BINARY_DIR}/foo.c
|
||||
#PROPERTIES
|
||||
# OBJECT_DEPENDS "${PROJECT_BINARY_DIR}/doc1.h;${PROJECT_BINARY_DIR}/foo.h"
|
||||
#)
|
||||
|
||||
# add the library
|
||||
ADD_EXECUTABLE(CustomCommand
|
||||
|
@ -143,6 +147,9 @@ ADD_EXECUTABLE(CustomCommand
|
|||
${PROJECT_BINARY_DIR}/generated.c
|
||||
)
|
||||
|
||||
TARGET_LINK_LIBRARIES(CustomCommand GeneratedHeader)
|
||||
|
||||
# must add a dependency on TDocument otherwise it might never build and
|
||||
# the CustomCommand executable really needs doc1.h
|
||||
ADD_DEPENDENCIES(CustomCommand TDocument)
|
||||
|
||||
|
|
|
@ -143,15 +143,18 @@ ENDIF (QT_FOUND AND QT_UIC_EXECUTABLE)
|
|||
SET (FLTK_SRCS
|
||||
fltk1.fl
|
||||
)
|
||||
ADD_EXECUTABLE(fakefluid fakefluid.cxx)
|
||||
GET_TARGET_PROPERTY(FLUID_LOC fakefluid LOCATION)
|
||||
SET (FLTK_WRAP_UI "On")
|
||||
SET (FLTK_FLUID_EXECUTABLE "echo")
|
||||
SET (FLTK_FLUID_EXECUTABLE "${FLUID_LOC}")
|
||||
FLTK_WRAP_UI (wraplibFLTK ${FLTK_SRCS})
|
||||
ADD_LIBRARY(wraplibFLTK ${wraplibFLTK_FLTK_UI_SRCS})
|
||||
CONFIGURE_FILE(
|
||||
${Wrapping_SOURCE_DIR}/fltk1.fl
|
||||
${Wrapping_BINARY_DIR}/fltk1.cxx
|
||||
COPYONLY)
|
||||
|
||||
ADD_DEPENDENCIES(wraplibFLTK fakefluid)
|
||||
ADD_DEPENDENCIES(fakefluid Wrap)
|
||||
#
|
||||
# Mangled Mesa
|
||||
#
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
int main(int ac, char** av)
|
||||
{
|
||||
for(int i =0; i < ac; ++i)
|
||||
{
|
||||
if(strcmp(av[i], "-o") == 0)
|
||||
{
|
||||
FILE* file = fopen(av[i+1], "w");
|
||||
fprintf(file, "// hello\n");
|
||||
fclose(file);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue