Commit Graph

88 Commits

Author SHA1 Message Date
Brad King c403f27a2d Add $<TARGET_OBJECTS:...> expression to use an object library
For now do not allow an OBJECT library to reference other object
libraries.  Teach cmTarget::ComputeLinkImplementation to include the
languages of object libraries used by a target.
2012-03-16 10:12:15 -04:00
Brad King 3a53005f7d Build object library targets in VS
Treat OBJECT libraries as STATIC libraries.  The VS project file format
provides no way to avoid running the librarian so hide the resulting
.lib away next to the object files as it should never be referenced.
The object files will be left behind for reference by other targets
later.
2012-03-13 14:38:02 -04:00
Brad King d57047de33 Pre-compute object file names before VS project generation
Implement cmGlobalGenerator::ComputeTargetObjects in the VS generator
to pre-compute all the object file names.  Use the results during
generation instead of re-computing it later.
2012-03-09 15:16:02 -05:00
Brad King 62a841b80b Simplify cmVisualStudio10TargetGenerator using cmGeneratorTarget
Use CustomCommands and ModuleDefinitionFile computed in the latter
instead of recomputing them from the original target source files.
2012-03-09 15:16:02 -05:00
Brad King 51b67366ed Merge branch 'cleanup-object-file-names' into object-library 2012-03-09 15:15:37 -05:00
David Cole f55119e63b Merge topic 'fix-12189-support-SBCS-in-VS'
b28e7fa VS6: Avoid SBCS test on VS6 (#12189)
df19b9c VS6: Avoid _MBCS define when _SBCS is defined (#12189)
ba89e92 Visual Studio: Allow setting Single Byte Character Set (#12189)
2012-03-08 15:14:03 -05:00
Brad King 67734be8cf VS: Simplify object name computation
Simplify cmLocalVisualStudioGenerator::ComputeObjectNameRequirements to
loop over the original vector of source files instead of recursively
traversing source groups just to find the same files.  Drop from
cmVisualStudio10TargetGenerator::ComputeObjectNames temporary source
group calculation now that it is not needed for computing object names.
2012-03-06 13:30:19 -05:00
Stephen Kelly 9106b564ae Extract and use the INCLUDE_DIRECTORIES target properties.
Eliminate callers of cmMakefile::GetIncludeDirectories.

All callers of GetIncludeDirectories should go through the local generator
object.

Only the local generator calls cmTarget::GetIncludeDirectories directly.
2012-02-22 06:31:50 -05:00
Aaron C. Meadows ba89e92ba6 Visual Studio: Allow setting Single Byte Character Set (#12189)
For Visual Studio using the Preprocessor Define _SBCS. This behavior
is similar to the way that _UNICODE and _MBCS work already.

Added tests to confirm this behavior.
2012-02-17 11:30:23 -05:00
Brad King a03447b3df VS: Simplify ;-separated attribute value parsing
An implementation ;-separated list parsing was added by commit a1f976ce
(VS: Add support for three new project properties, 2011-11-23) and again
by commit 9e01aefd (VS: Add support for WinRT project properties,
2012-02-03).  Refactor both instances to use ExpandListArgument.
2012-02-03 14:35:35 -05:00
Eugene Golushkov 9e01aefd24 VS: Add support for WinRT project properties (#12930)
VS_WINRT_EXTENSIONS: Boolean property that correspond to "Enable
Tailored Features" in Visual Studio 11 IDE.

VS_WINRT_REFERENCES: Semicolon-delimited list of *.winmd references to
add to the project, which creates a new <ItemGroup>.
2012-02-03 09:26:24 -05:00
Brad King 655a7dd1d4 VS10: Fix /pdb option vcxproj element name (#12328)
The compiler tool uses "ProgramDataBaseFileName" but the linker tool
uses just "ProgramDataBaseFile".  Fix the generator accordingly.
2012-01-09 14:54:45 -05:00
Aaron Ten Clay a1f976ce0e VS: Add support for three new project properties (#12586)
VS_GLOBAL_PROJECT_TYPES: A string containing UUIDs to embed in the
Visual Studio project file under <ProjectTypes>.

VS_GLOBAL_KEYWORD: Allows specification of a keyword like "ManagedCProj"
instead of the default "Win32Proj", under <Keyword>

VS_DOTNET_REFERENCES: Semicolon-delimited list of .NET references to add
to the project, which creates a new <ItemGroup>.
2011-11-28 11:44:04 -05:00
David Cole 7efd93cd72 Merge topic 'vs-version-ivar'
c92ffec Enumerate VS11 version explicitly in local generators
1be4b6f Order VS local generator Version ivar values consistently
2011-11-15 14:39:25 -05:00
David Cole f1197ff0da Merge topic 'fix-11213-vs10-mfc-support'
537020f Tests: Nudge MFC test to pass on VS 6 dashboards (#11213)
51f442e VS11: Update InstallRequiredSystemLibraries.cmake for VS11 (#11213)
d85ab7a Tests: Add environment logging to the MFC test (#11213)
011694c VS10: Use expected values for UseOfMfc (#11213)
a2e6d24 Tests: Fix MFC test to work with VS 10 and later (#11213)
2011-11-15 14:38:56 -05:00
Brad King 1be4b6f463 Order VS local generator Version ivar values consistently
Move the Version member to the top cmLocalVisualStudioGenerator class
and set it consistently for instances created by all the global
generator versions.  Use an enumeration type with values scaled by a
factor of 10 so we can handle VS 7.1 without out-of-order numbers.

VS 7.1 support for SuppressStartupBanner was broken by commit 25116a3c
(Fix CMAKE_VERBOSE_MAKEFILE for VS10 vcxproj files, 2011-10-11) because
it assumed comparison of VS version numbers works.  Now it does.
2011-11-14 09:47:31 -05:00
David Cole 011694c269 VS10: Use expected values for UseOfMfc (#11213)
Use expected values for the UseOfMfc xml element in
VS 10 .vcxproj files.

  CMAKE_MFC_FLAG=1 maps to "Static"
  CMAKE_MFC_FLAG=2 maps to "Dynamic"
  all other values map to "false"

Thanks to Randy Schott and McBen for their patches which
served as inspiration and motivation for getting this done.

See also http://public.kitware.com/Bug/view.php?id=11224
2011-11-04 13:29:41 -04:00
Robert Dailey b0f0b3e440 VS: Add VS_SCC_AUXPATH target property (#12549)
Maps to SccAuxPath tag in VCPROJ files.
2011-11-01 11:29:08 -04:00
David Cole eb02acb695 VS10: Avoid unnecessary rebuilds for custom commands
Thanks to James Bigler for pointing this out on the
cmake-developers mailing list...
2011-08-18 16:51:52 -04:00
David Cole a772f21a7d Merge topic 'intel_fortran_vs2010'
3c53fbb Fix custom commands in VS2010 Fortran projects using CFG_INTDIR and test.
2011-08-16 17:01:33 -04:00
Bill Hoffman 3c53fbb1f0 Fix custom commands in VS2010 Fortran projects using CFG_INTDIR and test.
For custom commands in VS2010 Fortran projects the INTDIR variable
is different than in the rest of the solution because Intel
fortran still uses the old VS project files even in VS2010. So,
we replace $(Configuration) directly in the project files. I have also
added a FortranOnly test that tests this feature and is run on any
generator that has Fortran abilities.
2011-08-03 17:24:43 -04:00
Steven Velez 05ddfbfe95 VS10: Add SCC support
Honor the properties that were added for earlier versions
of visual studio.
2011-07-29 14:06:28 -04:00
Brad King 4ccf44bcb2 Merge topic 'use_devenv_forvs2010'
8555c2b Look for VCExpress as a possible build tool as well as devenv.
ed0075b Use relative paths for custom command inputs.
38368d5 Revert "With very long file names, VS 2010 was unable to compile files."
8cd66dc Use devenv instead of msbuild for vs2010.
2011-06-24 17:32:03 -04:00
Bill Hoffman ed0075bdb7 Use relative paths for custom command inputs.
For source files we use full paths.  This allows for longer directory
names with VS2010. However, the use of full paths causes the GUI
to not display the custom commands.
2011-06-22 11:52:15 -04:00
Bill Hoffman 38368d52f3 Revert "With very long file names, VS 2010 was unable to compile files."
This reverts commit 945f2c2214.
2011-06-21 16:00:31 -04:00
Bill Hoffman 9d406cdb65 Fix for bug #11927, external project git clone step always runs vs10.
In cmMakefile.cxx GetCMakeCFGInitDirectory is replaced with
GetCMakeFilesDirectory for .rule files.  In some cases with
external projects, that directory will not exist.  With vs10
the .rule files must exist or the rule will run with every build.
This fix creates the path that the .rule file is in.  In addition,
it is now a CMake error if the .rule file can not be created.
2011-06-07 08:59:03 -04:00
David Cole a6b52bd8ef VS10: Write header-only files in correct xml element (#11925) 2011-05-23 17:30:23 -04:00
Bill Hoffman 9a6ff95072 Fix for bug where VS2010 did not use .obj files as part of the build.
For VS2010 if a precompiled .obj file was the output of a custom commad,
it was used as part of the build.  If it was not, then VS did not
use it as part of the build.  This commit updates the test to check
for this issue, and fixes the problem. This fixes bugs #0011891 and
2011-04-01 16:28:41 -04:00
Bill Hoffman 945f2c2214 With very long file names, VS 2010 was unable to compile files.
At some point in the past VS 2010 failed some tests with custom commands when
relative paths were not used.  It seems that those problems have been fixed.
However, the relative paths apparently are appended to the current working
directoy before vs accesses the file. So, with a long path, relative paths
cause it to create a combined path that is too long.
2011-03-23 15:06:44 -04:00
David Cole 98b448ee9e VS2010: Fixed GenerateManifest flag (#10704)
Thanks to "McBen <viertelvor12@gmx.net>" for the patch.

(Did not preserve original commit author information because
we have a push check for first and last name, and do not
accept authors with only an alias...)
2011-02-09 13:01:19 -05:00
David Cole 662756036e VS10: Escape double quote chars in defines for rc files (#11695)
To get rc defines to work in the VS10 IDE requires \" when
constructing PreprocessorDefinitions strings. This is different
than defines for cl.

Also, per-file rc defines were not being generated. Fix that, too.
2011-01-25 19:01:13 -05:00
David Cole 0cde56dda4 VS10: Load projects with obj "source" files (#11147)
WriteCLSources should skip source files with "obj" extensions
since WriteObjSources has already written them into the vcxproj
file. Likewise, WriteGroupSources should skip source files with
"obj" extensions to avoid receiving "item ... already exists under
the filter" project-load-time error messages from Visual Studio.
2011-01-21 10:57:34 -05:00
Brad King 13cc4bb628 Merge topic 'fix_source_groups_for_custom_targets_vs10'
7bbab25 Add support for source files in custom targets for VS 10 (Bug#11330).
2011-01-11 15:51:46 -05:00
Brad King af94289f5a Merge topic 'fix-11461-add-midl-vs10'
e33cbda VSMidl Test: Use correct include_directories with VS6 (#11461)
262da91 Prohibit space in HOME value for VSMidl test.
13caaa3 VS10: Finish Midl support (#11461)
2011-01-11 15:51:08 -05:00
Bill Hoffman 7bbab25961 Add support for source files in custom targets for VS 10 (Bug#11330).
In VS10, CMake was not adding the source files that were in the SOURCES
list for add_custom_target.  This patch fixes that issue.
2011-01-06 16:48:46 -05:00
David Cole 13caaa3eb7 VS10: Finish Midl support (#11461)
This commit addresses all of the following:
  http://public.kitware.com/Bug/view.php?id=8165
  http://public.kitware.com/Bug/view.php?id=10687
  http://public.kitware.com/Bug/view.php?id=11311
  http://public.kitware.com/Bug/view.php?id=11461

With this commit, the midl support for VS10 is as
complete as midl support ever was for VS9 and earlier.
The VSMidl test should run on all Visual Studio
generator based dashboards.

CMake no longer sends C++ compiler /D flag values
to the midl compiler in Visual Studio generated
projects. I think if we want to add that in the
future, we should add a way to pass midl compiler
specific flags and perhaps an optional way to add
in the C++ definitions, too. For now, not sending
them along gets past the immediate problem wherein
idl files in a CMake VS generated project just didn't
work at all.

The VSMidl test added in this commit was inspired by
the patch attached to 8165.

The test had to be modified such that it will run in
a directory whose name contains no spaces. There is an
existing bug filed against VS10's midl asking Microsoft
to fix that problem. But for now, the test added in this
commit works by copying the source directory to a location
that avoids spaces in the directory names.

Inspired-By: Robert Lenhardt
2011-01-05 10:37:14 -05:00
Brad King f1d7a5600f Merge topic 'add_preprocessor_def_vs2010_resources'
8c7b19d Only run resource test for MSVC compilers.
753e208 Disable incremental testing for this test, it crashes vs9 linker.
16e7d4b Add flags to resource builds on vs 2010 with a test.
2011-01-04 15:44:01 -05:00
Brad King 533f5a2037 Merge topic 'custom-command-refactor'
53ea8b3 Merge branch 'imported-target-dependencies' into custom-command-refactor
1a29cca Remove cmLocalGenerator::GetRealLocation
542b517 Factor out common custom command generator
6fe5b3d Simplify VS generator ConstructScript interface
2010-12-21 14:03:02 -05:00
Bill Hoffman 16e7d4ba2c Add flags to resource builds on vs 2010 with a test. 2010-12-21 09:20:57 -05:00
Bill Hoffman f578381e66 Fix vs2010 project generation error when HEADER_FILE_ONLY is set.
In vs2010 a bad project file could be generated if a .c or .cxx file
was marked with HEADER_FILE_ONLY, if it was in a library that contained
both c and c++ code.  This fixes the error in the code, and adds a test
for this case.
2010-12-20 15:25:16 -05:00
Brad King f7036a1603 Merge topic 'custom-command-depend'
ced1d5e Skip file-level dependencies on custom targets (#11332)
e30a775 Improve signature of cmLocalGenerator::GetRealDependency
2010-12-14 14:38:48 -05:00
Brad King 6fe5b3db0b Simplify VS generator ConstructScript interface
Pass to cmLocalVisualStudioGenerator::ConstructScript a cmCustomCommand
instance instead of extracting arguments at all call sites.
2010-12-08 17:29:20 -05:00
Brad King e30a775f68 Improve signature of cmLocalGenerator::GetRealDependency
Allow file-level custom command dependencies to be skipped.
2010-12-08 17:14:14 -05:00
Brad King fb97ba6293 Enable 64-bit tools with VS 2010 Express (#9981, #10722)
The Express Edition does not come with 64-bit tools, but one can install
the "Microsoft Windows SDK v7.1" to get them.  Detect this case and
check for the SDK.  If found, set PlatformToolset to use the SDK tools.
Otherwise, fail with a concise and informative error.
2010-12-01 12:48:32 -05:00
Brad King 973df7c0e9 VS10: Order .vcxproj dependencies deterministically (#10502)
This avoids needless modification of the project files during
regeneration.
2010-10-07 09:54:24 -04:00
Brad King 51047564bf Merge topic 'vs10-custom-comments'
2596e16 VS10: Encode custom command comments for echo (#11283)
2010-10-05 15:31:03 -04:00
Brad King 2596e16c8f VS10: Encode custom command comments for echo (#11283)
VS10 uses MSBuild underneath.  The <Message></Message> CDATA are just
appended to "echo" and executed as a single command.  Encode the message
such that it can be passed to echo.  Convert newlines to tabs since they
cannot be printed this way.
2010-10-01 16:12:00 -04:00
Brad King 448661fbe5 VS10: Skip targets with no linker language (#11230)
In targets with no non-header files the linker language cannot be
determined.  Since the target project file cannot be generated at all in
this case, give up as soon as it is detected.  Otherwise the generation
code may try to run with uninitialized information.
2010-09-30 08:48:38 -04:00
Brad King 7ef659fcc3 VS10: Use $(IntDir) for per-source output directory (#11270)
The original implementation of this generator accidentally used
"$(Configuration)/" for source-specific object file names.  Correct it
to use "$(IntDir)/" just like the generators for all previous VS
versions.  The target-wide output directory is "$(IntDir)/" already.
2010-09-27 08:37:00 -04:00
David Cole ed37fc3ea3 VS2010: Set IntDir for utility and global targets.
VS2010 uses IntDir as the location for writing log files for
what happens during custom build steps. With no IntDir settings,
all ExternalProject usage within the same CMakeLists.txt file
would result in multiple utility targets all trying to use the
same custom build log files.

With parallel builds, they would try to use them simultaneously
and result in file access errors, preventing the builds from
completing successfully.

Now each utility target has its own IntDir setting, and so, its
own custom build rule log files.
2010-09-13 15:22:15 -04:00