summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2006-04-17 18:01:22 (GMT)
committerBill Hoffman <bill.hoffman@kitware.com>2006-04-17 18:01:22 (GMT)
commit5ecfd3d4d332e616605a75a273921b01437cb08f (patch)
tree9deb4e3debb729a631251a2935fc77fc3f9e4f59
parent0f8603acc2f007e68a1c41a48919fd1acfc41c20 (diff)
downloadCMake-5ecfd3d4d332e616605a75a273921b01437cb08f.zip
CMake-5ecfd3d4d332e616605a75a273921b01437cb08f.tar.gz
CMake-5ecfd3d4d332e616605a75a273921b01437cb08f.tar.bz2
ENH: fix java and add OBJECT_DIR support
-rw-r--r--Modules/CMakeJavaInformation.cmake4
-rw-r--r--Source/cmLocalGenerator.cxx14
-rw-r--r--Source/cmLocalGenerator.h2
-rw-r--r--Source/cmMakefileLibraryTargetGenerator.cxx4
-rw-r--r--Source/cmMakefileTargetGenerator.cxx6
5 files changed, 27 insertions, 3 deletions
diff --git a/Modules/CMakeJavaInformation.cmake b/Modules/CMakeJavaInformation.cmake
index d7692bc..c73b7e8 100644
--- a/Modules/CMakeJavaInformation.cmake
+++ b/Modules/CMakeJavaInformation.cmake
@@ -15,14 +15,14 @@ ENDIF(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX)
# this is a place holder if java needed flags for javac they would go here.
IF(NOT CMAKE_Java_CREATE_STATIC_LIBRARY)
SET(CMAKE_Java_CREATE_STATIC_LIBRARY
- "<CMAKE_Java_ARCHIVE> -cf <TARGET> *.class")
+ "<CMAKE_Java_ARCHIVE> -cf <TARGET> -C <OBJECT_DIR> .")
# should be this <OBJECTS> but compling a java file can create more than one .class file
# so for now get all of them
ENDIF(NOT CMAKE_Java_CREATE_STATIC_LIBRARY)
# compile a Java file into an object file
IF(NOT CMAKE_Java_COMPILE_OBJECT)
SET(CMAKE_Java_COMPILE_OBJECT
- "<CMAKE_Java_COMPILER> <FLAGS> <SOURCE> -d <CMAKE_CURRENT_BINARY_DIR>")
+ "<CMAKE_Java_COMPILER> <FLAGS> <SOURCE> -d <OBJECT_DIR>")
ENDIF(NOT CMAKE_Java_COMPILE_OBJECT)
# set java include flag option and the separator for multiple include paths
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 36fed56..36a5ecc 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -457,6 +457,7 @@ void cmLocalGenerator::AddCustomCommandToCreateObject(const char* ofname,
cmSourceFile& source,
cmTarget& )
{
+ std::string objectDir = cmSystemTools::GetFilenamePath(std::string(ofname));
std::string objectFile = this->Convert(ofname,START_OUTPUT,SHELL);
std::string sourceFile =
this->Convert(source.GetFullPath().c_str(),START_OUTPUT,SHELL,true);
@@ -481,6 +482,7 @@ void cmLocalGenerator::AddCustomCommandToCreateObject(const char* ofname,
vars.Language = lang;
vars.Source = sourceFile.c_str();
vars.Object = objectFile.c_str();
+ vars.ObjectDir = objectDir.c_str();
vars.Flags = flags.c_str();
for(std::vector<std::string>::iterator i = commands.begin();
i != commands.end(); ++i)
@@ -568,6 +570,10 @@ void cmLocalGenerator::AddBuildTargetRule(const char* llang, cmTarget& target)
cmLocalGenerator::RuleVariables vars;
vars.Language = llang;
vars.Objects = objs.c_str();
+ std::string objdir = "CMakeFiles/";
+ objdir += targetName;
+ objdir += ".dir";
+ vars.ObjectDir = objdir.c_str();
vars.Target = targetName.c_str();
vars.LinkLibraries = linkLibs.c_str();
vars.Flags = flags.c_str();
@@ -583,7 +589,6 @@ void cmLocalGenerator::AddBuildTargetRule(const char* llang, cmTarget& target)
{
// Expand the full command line string.
this->ExpandRuleVariables(*i, vars);
-
// Parse the string to get the custom command line.
cmCustomCommandLine commandLine;
std::vector<cmStdString> cmd = cmSystemTools::ParseArguments(i->c_str());
@@ -710,6 +715,13 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
return replaceValues.Object;
}
}
+ if(replaceValues.ObjectDir)
+ {
+ if(variable == "OBJECT_DIR")
+ {
+ return replaceValues.ObjectDir;
+ }
+ }
if(replaceValues.Objects)
{
if(variable == "OBJECTS")
diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h
index 41c2c44..4db28f5 100644
--- a/Source/cmLocalGenerator.h
+++ b/Source/cmLocalGenerator.h
@@ -185,6 +185,7 @@ public:
this->LinkLibraries= 0;
this->Source= 0;
this->Object= 0;
+ this->ObjectDir= 0;
this->Flags= 0;
this->ObjectsQuoted= 0;
this->TargetSOName= 0;
@@ -197,6 +198,7 @@ public:
const char* LinkLibraries;
const char* Source;
const char* Object;
+ const char* ObjectDir;
const char* Flags;
const char* ObjectsQuoted;
const char* TargetSOName;
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx
index bf5d55c..9140d31 100644
--- a/Source/cmMakefileLibraryTargetGenerator.cxx
+++ b/Source/cmMakefileLibraryTargetGenerator.cxx
@@ -404,6 +404,10 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
cmLocalGenerator::RuleVariables vars;
vars.Language = linkLanguage;
vars.Objects = buildObjs.c_str();
+ std::string objdir = "CMakeFiles/";
+ objdir += this->Target->GetName();
+ objdir += ".dir";
+ vars.ObjectDir = objdir.c_str();
vars.Target = targetOutPathReal.c_str();
std::string linkString = linklibs.str();
vars.LinkLibraries = linkString.c_str();
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index 249db05..aca3d29 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -389,6 +389,12 @@ cmMakefileTargetGenerator
vars.Language = lang;
vars.Source = sourceFile.c_str();
vars.Object = relativeObj.c_str();
+ std::string objdir = this->LocalGenerator->GetHomeRelativeOutputPath();
+ objdir = this->Convert(objdir.c_str(),
+ cmLocalGenerator::START_OUTPUT,
+ cmLocalGenerator::SHELL);
+ std::string objectDir = cmSystemTools::GetFilenamePath(obj);
+ vars.ObjectDir = objectDir.c_str();
vars.Flags = flags.c_str();
// Expand placeholders in the commands.