Merge branch 'MakeCodeBlocksGeneratorNonVerbose2' into rule-messages

Conflicts:
	Source/cmGlobalUnixMakefileGenerator3.cxx
	Source/cmGlobalUnixMakefileGenerator3.h
This commit is contained in:
Brad King 2011-05-16 11:28:07 -04:00
commit dca304ec8d
44 changed files with 1093 additions and 697 deletions

View File

@ -418,7 +418,7 @@ ENDIF()
# The CMake version number.
SET(CMake_VERSION_MAJOR 2)
SET(CMake_VERSION_MINOR 8)
SET(CMake_VERSION_PATCH 2)
SET(CMake_VERSION_PATCH 3)
#SET(CMake_VERSION_TWEAK 0)
#SET(CMake_VERSION_RC 1)

View File

@ -1,3 +1,413 @@
No changes in CMake 2.8.3 since 2.8.3-rc4.
Changes in CMake 2.8.3-rc4 (since 2.8.3-rc3)
--------------------------------------------
Bill Hoffman (1):
When processing DartMeasurements use the tests working directory.
David Cole (2):
ExternalProject: No svn --username if empty (#11173)
Avoid problem reading jni.h on Macs.
David Partyka (5):
Fixed appending PATH to dumpbin tool from growing without bounds.
Switch to CMAKE_PATH when doing PATH comparisons on Windows.
Remove unecessary TO_CMAKE_PATH for gp_cmd_dir.
Append the gp_tool path to the system PATH using native slashes.
Fixes to GetPrerequisites for cygwin
Eric NOULARD (1):
CPackDeb Added several optional debian binary package fields
Marcus D. Hanwell (2):
ENH: Added case for Python 2.7.
Fixed parallel build for generators with EXTRA.
Changes in CMake 2.8.3-rc3 (since 2.8.3-rc2)
--------------------------------------------
Alex Neundorf (4):
Remove trailing whitespace
Add automatic variable CMAKE_CURRENT_LIST_DIR(dir of CMAKE_CURRENT_LIST_FILE)
Use absolute path to FindPackageHandleStandardArgs.cmake everywhere
CodeBlocks Generator: Do not omit files in the project file listing.
Brad King (4):
VS10: Order .vcxproj dependencies deterministically (#10502)
Document ENABLE_EXPORTS behavior on Mac (#11295)
FindHDF5: Fix typo in parallel-IO support check (#11291)
Xcode: Recognize .hh as C++ (#11307)
Clinton Stimpson (1):
Find imports dir in Qt 4.7
David Partyka (1):
Update module to locate newely released MS MPI HPC Pack R2.
Philip Lowman (1):
Remove superfluous variable Boost_COMPAT_STATIC_RUNTIME.
Rolf Eike Beer (2):
FindSubversion: Fix for German localized client (#11273)
FindSubversion: Use C locale to detect version (#11273)
Changes in CMake 2.8.3-rc2 (since 2.8.3-rc1)
--------------------------------------------
Alex Neundorf (5):
APPEND and not-APPEND mode of feature_summary() were swapped
Set a default DESCRIPTION if none is given for ALL mode of feature_summary()
Close ENDFUNCTION() properly with the same name as FUNCTION()
Make cmake-gui remember whether the "Advanced" checkbox was checked or not
Also store the required version number in the details message.
Ben Boeckel (3):
Add test that CMake errors with empty libs
Fix which string is checked for in the test
XCode generation should fail if lang isn't known
Bill Hoffman (5):
Fix the name of the variable being tested.
Fix KWStyle line length issues.
Add a delay after untar on windows to make external project work on windows 7
Add a new line to the end of the generated main.cxx for the hpux compiler.
Fix for bug #11274, VS10 custom commands that create files in INTDIR fix.
Brad King (12):
Evaluate <OBJECT_DIR> rule variable for executables
ccmake: Fix search with '/'
MinGW: Support long object file lists
Document IMPORTED_NO_SONAME target property
FindMPI: Recoginze -f flags from mpicc (#10771)
Add module-dir flag for Compaq Visual Fortran (#11248)
FindPythonInterp: Look for python2.7 interpreter
VS10: Use $(IntDir) for per-source output directory (#11270)
Reset platform/compiler info status for each language
Remove trailing whitespace from Xcode generator source
VS10: Skip targets with no linker language (#11230)
VS10: Encode custom command comments for echo (#11283)
Clinton Stimpson (1):
Fix regression in cross-compile patches with finding Qt libs.
David Cole (7):
Enable calling commands with : in argv[1] (#9963)
No extra spaces in CustomCommand test (#9963)
Avoid CustomCommand test failure on VS71 (#9963)
Update release scripts.
Avoid CustomCommand test failure on VS71 (#9963)
Honor MAKECOMMAND value saved in cache (#11026)
New USE_FOLDERS property OFF by default. (#3796)
David Gobbi (1):
Set the module prefix, updated Windows suffix.
Eric NOULARD (2):
InstallGen/CPack fix handling absolute installed file regression
CPackRPM Handle parenthesis in CPACK_SYSTEM_NAME (fix bug 10737)
James Bigler (2):
Fix for bug 0011263.
Allow -g3 for CUDA v3.0+.
Mikkel Krautz (2):
Xcode: Avoid trailing space in ARCHS list (#11244)
Xcode: Quote string values containing '$' (#11244)
Philip Lowman (12):
FindBoost.cmake fixes for issues 11204 & 8529
FindBoost.cmake: Miscellaneous changes and refactoring
FindBoost.cmake: Add Boost_NO_SYSTEM_PATHS option
FindBoost.cmake: Fix compiling against a boost source tree
FindBoost.cmake: Fixes 11246
FindBoost.cmake: Fixes 11121
FindBoost.cmake: Fixes 10436
FindBoost.cmake: Implements 11160
Fix 11136: [patch] FindThreads.cmake documents the wrong variable
FindBoost.cmake: Fix library search path glitch introduced in earlier commit
FindFLEX.cmake: Fix issue 11249
Fixes issue 11279: CMakeDetermineVSServicePack support for VS10
Yaakov Selkowitz (2):
FindFLTK*: Use Cygwin fltk on Cygwin (#11290)
Use 'uname -m' for processor on Cygwin (#10774)
Changes in CMake 2.8.3-rc1 (since 2.8.2)
----------------------------------------
Alex Neundorf (39):
fix build on SUSE 11.2 in cmcurl due to ssize_t
-add an additional name for finding libtiff on Windows
-fix typo in docs of deprecated MacroAddFileDependencies.cmake
add 2nd, more powerful mode to find_package_handle_standard_args()
-fix indentation of the documentation
Add version checking support to FindFlex and FindPerlLibs
FindSquish doesn't detect the version, remove that from the documentation
Improved version checking for FindRuby using the new mode of FPHSA()
Improved version checking for FindJava using the new FPHSA() mode
Fix DETAILS string with version number in FHPSA()
Improved version checking for FindSubversion using the new mode of FPHSA()
Improved version checking for FindCUDA using the new mode of FPHSA
Use FPHSA() in FindSWIG, including version checking.
Change documentation of Subversion_FOUND and SUBVERSION_FOUND.
Add macro CMakeParseArguments() and use it in FPHSA()
Fix ZLIB version parsing if no TWEAK version exists
Fix EclipseCDT include path parsing with spaces (#10868)
Fix EclipseCDT parsing of builtin macros with spaces (#10868)
Remove trailing spaces
Detect a COMPILER_ID also for ASM.
Add timeout to execute_process() in CMAKE_DETERMINE_COMPILER_ID().
Fix parsing of builtin macros so Eclipse handles them properly (#10868)
Log the required package version and major improvement to FeatureSummary
Improve documentation.
Improve wording of the documentation.
Add macro ADD_FEATURE_INFO() and improve docs.
Remove trailing whitespace
Make target_link_libraries() complain if bad target name is used
Just warn in case of a bad target as only argument for t_l_l()
Remove trailing whitespace
New CMP0016 for deciding whether an unknown target in TLL() is an error.
Record all considered Config files and their versions.
Improve error message in Config-mode when no appropriate version was found
Replace the two vector<string,string> with one vector<struct{string,string}>
Small cleanup of FindPackageHandleStandardArgs.cmake
Don't create an empty element at the end of Foo_CONSIDERED_CONFIGS/VERSIONS
Add option CONFIG_MODE to FPHSA()
Improve version notice in the generated message
Improve wording of the error message of find_package() in config-mode
Andrew Maclean (3):
Adding a FindPostgreSQL.cmake module
Forgot the copyright notice.
Changed ADDITIONAL_SEARCH_PATHS to PostgreSQL_ADDITIONAL_SEARCH_PATHS.
Arjen Verweij (1):
Pass objects to Intel linker using a response file
Bill Hoffman (9):
Disable gcc 33 on OpenBSD because it crashes CPack by default.
Fix for bug#10483, INCLUDE_EXTERNAL_MSPROJECT: ProjectGUID now ProjectGuid
Remove the ctest submit larget output test.
Let CMake recognize .CPP .CXX and .C++ as c++ files.
Fix for bug 10388, fix various default flags.
Only use .CPP .CXX and .C++ do not work by default with g+++.
Fix targets with . in the name for VS 10 IDE.
Only test for .CPP on Microsoft compilers which will handle .CPP as c++.
Allow testing of .CPP on WIN32 as it is a case insensitive OS and should work.
Brad King (69):
ExternalProject: Add LOG_* options to hide step output
FindMPI: Do not parse -l in middle of library name
FindMPI: Parse mpicc flags more carefully (#9093)
Fix or cast integer conversions in cmake
Begin post-2.8.2 development
FindMPI: Failure is not an error if not REQUIRED
FindMPI: Trust mpicc -showme on BlueGene/L
VS: Always separate preprocessor defs by semicolon (#10902)
KWSys: Cleanup putenv leak option implementation
KWSys: Pass ptrdiff_t check result to System.c
Fix or cast more integer conversions in cmake
Use same type in both cases of '?:' operator
FindMPI: Fix parsing of mpicc -Wl,-L link flags (#9093)
Fix signed/unsigned comparison warnings in ccmake
Fix integer conversions in cpack
bootstrap: Detect known C/C++ compiler toolchains
KWSys: Use short fallback timeout for Process tests
KWSys: Optionally suppress consistent test failures
KWSys: Avoid Clang optimizer bug in testProcess-[45]
Poison GCC 3.3 on OpenBSD a bit later
KWSys: Avoid undefined behavior in Process crash tests
Optionally use system bzip2 library (#10932)
ctest_update: Abort if Git FETCH_HEAD has no candidates
ctest_update: Support ".git file" work trees
ctest_update: Run 'git submodule' at top level
FindBoost: Search for Boost 1.42
Add FindLibArchive module (#10923)
Add option CMAKE_USE_SYSTEM_LIBARCHIVE (#10923)
Refer to self with CMake_(SOURCE|BINARY)_DIR (#10046)
ExternalProject: Fix $(MAKE) with cygpath on Windows
FindBoost: Search for Boost 1.43 and 1.44
Include headers from chosen libarchive (#10923)
No response files with GNU ld <= 2.16 (#10913)
Create class cmArchiveWrite to wrap libarchive (#11020)
Include entries for directories in tarballs (#11020)
cmArchiveWrite: Fix signed/unsigned compare/convert
cmArchiveWrite: Fix signed/unsigned again
CPack: Avoid member shadowing after API refactor
KWSys: Fix SplitPath for leading '\' on Windows
KWSys: Fix GetActualCaseForPath for UNC paths
ModuleNoticesTest: Do not require "Kitware" copyright
Modules: Fix CMakeParseArguments copyright notice
FortranCInterface: Fix doc typo FC.h -> FCMangle.h
CTest: Avoid use of old EscapeSpaces method
Remove cmSystemTools::EscapeSpaces method
Clarify install(TARGETS) docs for EXPORT option
Factor out global generator ComputeTargetDepends method
Factor out duplicate VS target dependency code
Refactor VS <= 7.1 utility-depends workaround
Restore GetTargetDirectDepends const return
Split notion of node lists and edge lists
Distinguish "strong" and "weak" target dependency edges
Honor strong intra-component target dependencies
libarchive: Remove SCHILY dev,ino,nlink attributes (#11176)
Fix unused parameter warning in VS 7.1 generator
KWSys: Avoid empty string dereference in SplitString
KWSys: Improve SplitPath method documentation
KWSys: Use SplitPath in GetActualCaseForPath
Add whitespace=tab-in-indent attribute for sources
Search MacPorts /opt/local prefix on Mac
HP-UX: Always add /usr/lib to rpath (#10571)
No CMAKE_CONFIGURATION_TYPES in single-config generators (#10202)
KWSys: Suppress -Wcast-align warning in MD5.c
Suppress -Wcast-align in curl and bzip2
libarchive: Fix purposeful crash
bootstrap: Honor CFLAGS during "make" test (#10545)
file(DOWNLOAD): Fix error message formatting
Fix line-too-long style errors
Report missing source files with context of target
Clinton Stimpson (10):
Fix performance issue with getting version from zlib.h
Fix bug 10418 - GetPrerequisites returning "not" as a dependency.
Fix regression in 5e6634fd77969433a87c150a2fb3f2079131484f for Windows.
Change Qt4ConfigDependentSettings to use more standard find modules.
Add cross-compiling support to FindQt4.cmake
Tweak for cygwin, don't convert : to ;
Fix some issues with refinding when qmake executable is changed.
Find correct Qt plugins for cross-compiling.
Fix mingw/VS warning message with cross compile re-org.
Make sure moc parameters file goes in binary directory.
David Cole (20):
CheckSourceTree test: read UpdateCommand from Update.xml.
Eliminate -Wconversion warnings.
Detect CMake warnings and errors in build output.
Activate retry code on any curl submit failure.
Add another expected output for the failed submit tests.
ExternalProject: Use $(MAKE) whenever possible.
Copy Resources in Frameworks during fixup_bundle (#10020)
Update path to git. dashmacmini2 was "upgraded."
ExternalProject: Remove 'unknown keyword' warning (#11034)
Add documentation for CPACK_PROJECT_CONFIG_FILE.
Add STEP_TARGETS to ExternalProject module.
Refine formatting for cmake --help-module output.
Improve documentation of OPTION command.
Add FOLDER target property, for IDEs (#3796)
Avoid adding self as prerequisite. (#10417)
Correct CMAKE_INSTALL_PREFIX value for Win64 apps (#9992)
Preserve timestamps on files on tar extract.
Use QUIET to avoid Java status messages.
VS2010: Honor PROJECT_LABEL target property (#10611)
VS2010: Set IntDir for utility and global targets.
David Genest (1):
Honor CMAKE_USER_MAKE_RULES_OVERRIDE in try_compile (#10902)
Eric NOULARD (20):
CPackRPM:: Replace - with _ in RPM Version (fix bug 0010934)
Provides default changelog if no file is provided
CPackRPM:: Quote every filenames in %file section (see bugs 10701,10871,10345)
CPackRPM:: [partially] support relocatable package
CPackDEB: merge wrong installed size patch. see bugs 10296 (and 10292)
CPackDeb optionally generates auto-dependency list part fix of bug 10292
Proposal for bash-completion support file
CPack: Refactor API in order to handle multi-file packages
CPack: Avoid member shadowing after API refactor (part2)
Improve cmake-completion (install doc, ctest -R completion)
Add ZIP archive format and LZMA compress support to libarchive-wrapper
Add XZ compress support to libarchive-wrapper
Add Compress compress support to libarchive-wrapper
CPack Backward-compatibly enforce DESTDIR for DEB and RPM
CPack Enable better handling of absolute installed files
CPackArchiveGenerator use cmArchiveWrite wrapper
CPackArchiveGenerator add component supports
CPackArchiveGenerator improve usability and robustness
CPack fix broken compilation for CygwinSource generator
CPack handle symlinks in CPACK_INSTALLED_DIRECTORIES fix for bug5430
James Bigler (1):
Added CUDA 3.2 directory changes. Disable emulation mode for CUDA 3.1+.
Kai Wasserbäch (1):
Fix spelling errors reported by Lintian.
Kovarththanan Rajaratnam (4):
FindZLIB: optimize zlib.h version parsing
FindCygwin: add new registry entry for Cygwin 1.7 (#10951)
FindZLIB: use the FPHSA version mode
FindSubversion: set compatibility variables based on FPHSA()
Marcel Loose (1):
Issue 10199: Fixed code documentation and now set <prefix>_WC_ROOT
Marcus D. Hanwell (1):
Bug with default library type of Python modules.
Mathieu Malaterre (3):
Add missing PATHS to find_path commands to fix openssl searching
BUG: 0009611 Fix Arch independent FindJNI.cmake on Linux
Fix 11035 : debug/release library configuration mistake
Michael Wild (2):
Improve documentation of BundleUtilities.cmake
Improve documentation of GetPrerequisites.cmake
Miguel A. Figueroa-Villanueva (7):
ENH: #9775 Added support for new wxWidgets 2.9 libraries.
BUG: #9775 Fixed patch FindwxWidgets-fixed-bug-9775.
BUG #10658: FindwxWidgets USE_FILE should not include .cmake extension.
STYLE: Clarified/Fixed documentation of UsewxWidgets.
BUG #11123: Generic include dir should come after config specific one.
BUG #8184: Fixed FindwxWidgets wrong order of default libs for MinGW.
ENH #8993: FindwxWidgets add support for wx-config custom options.
Mike McQuaid (1):
Make bundle items writable before fixup (#9284)
Modestas Vainius (1):
CTestTestFailedSubmit-xmlrpc: Pass with "Submission problem"
Patrick Gansterer (4):
VS: Convert PlatformName member to a virtual method
VS: Add more TargetMachine option values
VS: Map /ENTRY linker option to EntryPointSymbol
VS: Add ArchitectureId to VS 8 and 9 generators
Philip Lowman (7):
Fixes problem finding libraries under Boost (#9510)
Add detection for new pangommconfig.h header file
Several fixes needed to improve Windows support
11041: Improve FindCxxTest to use Python or Perl automatically; custom flags
10241: FindBISON.cmake clears wrong variable
10688: FindGTK2.cmake doesn't auto-detect macports
Merge patch for detecting gdk-pixbuf library
Pino Toscano (1):
GNU/Hurd platform support fixes (#9873)
Robert Goulet (1):
VS2010: Disable PDBs when there is no debug info
Rolf Eike Beer (2):
clean up some stuff in CPack RPM script
Set MSVC_VERSION for MSVC 6, 7, 7.1 (#7944)
Todd Gamblin (3):
Modules: Fix spelling 'To distributed' -> 'To distribute'
Teach find_* commands to ignore some paths
Add platform files for BlueGene/P systems
Zach Mullen (12):
Checksums on CTest submit files, and retry timed out submissions.
Cross-platform fixes for checksum/retry code
Fix subscript out of range crash
CTest should resubmit in the checksum failed case
Testing for CTest checksum
Mock checksum failure output for old CDash versions
Checksum test should use CMAKE_TESTS_CDASH_SERVER
Fix cycle detection for test dependencies
More robust cost-based scheduling impl
Fix hard-coded CDash URI in version query
Added CTest command --print-labels
We shouldn't ask CDash for its version info until/unless we actually need it.
No changes in CMake 2.8.2 since 2.8.2-rc4.
Changes in CMake 2.8.2-rc4 (since 2.8.2-rc3)

View File

@ -7,7 +7,7 @@
# that can modify the build.
#=============================================================================
# Copyright 2006-2009 Kitware, Inc.
# Copyright 2006-2010 Kitware, Inc.
# Copyright 2006 Alexander Neundorf <neundorf@kde.org>
#
# Distributed under the OSI-approved BSD License (the "License");
@ -29,6 +29,7 @@ MACRO (CHECK_C_COMPILER_FLAG _FLAG _RESULT)
# Some compilers do not fail with a bad flag
FAIL_REGEX "unrecognized .*option" # GNU
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "warning D9002" # MSVC, any lang
FAIL_REGEX "[Uu]nknown option" # HP
FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
FAIL_REGEX "command option .* is not recognized" # XL

View File

@ -7,7 +7,7 @@
# modify the build.
#=============================================================================
# Copyright 2006-2009 Kitware, Inc.
# Copyright 2006-2010 Kitware, Inc.
# Copyright 2006 Alexander Neundorf <neundorf@kde.org>
#
# Distributed under the OSI-approved BSD License (the "License");
@ -29,6 +29,7 @@ MACRO (CHECK_CXX_COMPILER_FLAG _FLAG _RESULT)
# Some compilers do not fail with a bad flag
FAIL_REGEX "unrecognized .*option" # GNU
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "warning D9002" # MSVC, any lang
FAIL_REGEX "[Uu]nknown option" # HP
FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
FAIL_REGEX "command option .* is not recognized" # XL

View File

@ -51,12 +51,19 @@ FIND_PROGRAM(BISON_EXECUTABLE bison DOC "path to the bison executable")
MARK_AS_ADVANCED(BISON_EXECUTABLE)
IF(BISON_EXECUTABLE)
# the bison commands should be executed with the C locale, otherwise
# the message (which are parsed) may be translated
SET(_Bison_SAVED_LC_ALL "$ENV{LC_ALL}")
SET(ENV{LC_ALL} C)
EXECUTE_PROCESS(COMMAND ${BISON_EXECUTABLE} --version
OUTPUT_VARIABLE BISON_version_output
ERROR_VARIABLE BISON_version_error
RESULT_VARIABLE BISON_version_result
OUTPUT_STRIP_TRAILING_WHITESPACE)
SET(ENV{LC_ALL} ${_Bison_SAVED_LC_ALL})
IF(NOT ${BISON_version_result} EQUAL 0)
MESSAGE(SEND_ERROR "Command \"${BISON_EXECUTABLE} --version\" failed with output:\n${BISON_version_error}")
ELSE()
@ -115,7 +122,7 @@ IF(BISON_EXECUTABLE)
IF("${ARGV5}" STREQUAL "VERBOSE")
BISON_TARGET_option_verbose(${Name} ${BisonOutput} "${ARGV6}")
ENDIF()
IF("${ARGV5}" STREQUAL "COMPILE_FLAGS")
BISON_TARGET_option_extraopts("${ARGV6}")
ENDIF()
@ -125,10 +132,10 @@ IF(BISON_EXECUTABLE)
LIST(APPEND BISON_TARGET_cmdopt "-d")
STRING(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\2" _fileext "${ARGV2}")
STRING(REPLACE "c" "h" _fileext ${_fileext})
STRING(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\1${_fileext}"
STRING(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\1${_fileext}"
BISON_${Name}_OUTPUT_HEADER "${ARGV2}")
LIST(APPEND BISON_TARGET_outputs "${BISON_${Name}_OUTPUT_HEADER}")
ADD_CUSTOM_COMMAND(OUTPUT ${BISON_TARGET_outputs}
${BISON_TARGET_extraoutputs}
COMMAND ${BISON_EXECUTABLE}
@ -136,7 +143,7 @@ IF(BISON_EXECUTABLE)
DEPENDS ${ARGV1}
COMMENT "[BISON][${Name}] Building parser with bison ${BISON_VERSION}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
# define target variables
SET(BISON_${Name}_DEFINED TRUE)
SET(BISON_${Name}_INPUT ${ARGV1})

View File

@ -916,6 +916,7 @@ ELSE (_boost_IN_CACHE)
${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}-${Boost_LIB_VERSION}
${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}
${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}-${Boost_LIB_VERSION}
${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}
${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}
${Boost_LIB_PREFIX}boost_${COMPONENT} )
if(_boost_STATIC_RUNTIME_WORKAROUND)

View File

@ -66,6 +66,10 @@
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
# Version 1.3 (11/9/2010) (CMake 2.8.4)
# * 11429: Add support for detecting GTK2 built with Visual Studio 10.
# Thanks to Vincent Levesque for the patch.
# Version 1.2 (8/30/2010) (CMake 2.8.3)
# * Merge patch for detecting gdk-pixbuf library (split off
# from core GTK in 2.21). Thanks to Vincent Untz for the patch
@ -237,15 +241,16 @@ function(_GTK2_FIND_LIBRARY _var _lib _expand_vc _append_version)
set(_library ${_lib})
if(_expand_vc)
# Add vc80/vc90 midfixes
if(_expand_vc AND MSVC)
# Add vc80/vc90/vc100 midfixes
if(MSVC80)
set(_library ${_library}-vc80)
set(_library_d ${_library}-d)
elseif(MSVC90)
set(_library ${_library}-vc90)
set(_library_d ${_library}-d)
elseif(MSVC10)
set(_library ${_library}-vc100)
endif()
set(_library_d ${_library}-d)
endif()
if(GTK2_DEBUG)

View File

@ -147,6 +147,32 @@ if (PERL_EXECUTABLE)
string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORLIB ${PERL_VENDORLIB_OUTPUT_VARIABLE})
endif (NOT PERL_VENDORLIB_RESULT_VARIABLE)
macro(perl_adjust_darwin_lib_variable varname)
string( TOUPPER PERL_${varname} FINDPERL_VARNAME )
string( TOLOWER install${varname} PERL_VARNAME )
if (NOT PERL_MINUSV_OUTPUT_VARIABLE)
execute_process(
COMMAND
${PERL_EXECUTABLE} -V
OUTPUT_VARIABLE
PERL_MINUSV_OUTPUT_VARIABLE
RESULT_VARIABLE
PERL_MINUSV_RESULT_VARIABLE
)
endif()
if (NOT PERL_MINUSV_RESULT_VARIABLE)
string(REGEX MATCH "(${PERL_VARNAME}.*points? to the Updates directory)"
PERL_NEEDS_ADJUSTMENT ${PERL_MINUSV_OUTPUT_VARIABLE})
if (PERL_NEEDS_ADJUSTMENT)
string(REGEX REPLACE "(.*)/Updates/" "/System/\\1/" ${FINDPERL_VARNAME} ${${FINDPERL_VARNAME}})
endif (PERL_NEEDS_ADJUSTMENT)
endif (NOT PERL_MINUSV_RESULT_VARIABLE)
endmacro()
### PERL_ARCHLIB
execute_process(
COMMAND
@ -158,6 +184,7 @@ if (PERL_EXECUTABLE)
)
if (NOT PERL_ARCHLIB_RESULT_VARIABLE)
string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_ARCHLIB ${PERL_ARCHLIB_OUTPUT_VARIABLE})
perl_adjust_darwin_lib_variable( ARCHLIB )
endif (NOT PERL_ARCHLIB_RESULT_VARIABLE)
### PERL_PRIVLIB
@ -171,6 +198,7 @@ if (PERL_EXECUTABLE)
)
if (NOT PERL_PRIVLIB_RESULT_VARIABLE)
string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_PRIVLIB ${PERL_PRIVLIB_OUTPUT_VARIABLE})
perl_adjust_darwin_lib_variable( PRIVLIB )
endif (NOT PERL_PRIVLIB_RESULT_VARIABLE)

View File

@ -482,7 +482,7 @@ IF (QT_QMAKE_EXECUTABLE)
_qt4_query_qmake(QT_VERSION QTVERSION)
# check for qt3 qmake and then try and find qmake4 or qmake-qt4 in the path
IF("${QTVERSION}" MATCHES "Unknown")
IF(NOT QTVERSION)
SET(QT_QMAKE_EXECUTABLE NOTFOUND CACHE FILEPATH "" FORCE)
FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake4 qmake-qt4 PATHS
"[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin"
@ -493,7 +493,7 @@ IF (QT_QMAKE_EXECUTABLE)
IF(QT_QMAKE_EXECUTABLE)
_qt4_query_qmake(QT_VERSION QTVERSION)
ENDIF(QT_QMAKE_EXECUTABLE)
ENDIF("${QTVERSION}" MATCHES "Unknown")
ENDIF(NOT QTVERSION)
# check that we found the Qt4 qmake, Qt3 qmake output won't match here
STRING(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" qt_version_tmp "${QTVERSION}")

View File

@ -196,11 +196,16 @@ MACRO (QT4_ADD_RESOURCES outfiles )
ENDIF(NOT IS_ABSOLUTE "${_RC_FILE}")
SET(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}")
ENDFOREACH(_RC_FILE)
# Since this cmake macro is doing the dependency scanning for these files,
# let's make a configured file and add it as a dependency so cmake is run
# again when dependencies need to be recomputed.
QT4_MAKE_OUTPUT_FILE("${infile}" "" "qrc.depends" out_depends)
CONFIGURE_FILE("${infile}" "${out_depends}" COPY_ONLY)
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
COMMAND ${QT_RCC_EXECUTABLE}
ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile}
MAIN_DEPENDENCY ${infile}
DEPENDS ${_RC_DEPENDS})
DEPENDS ${_RC_DEPENDS} "${out_depends}")
SET(${outfiles} ${${outfiles}} ${outfile})
ENDFOREACH (it)

View File

@ -1,347 +0,0 @@
#
# CMakeIngestOSXBundleLibraries.cmake
#
# Only for the Mac build.
#
# Depends on OS tools:
# otool
# install_name_tool
#
# This script ingests libraries and frameworks into an existing .app bundle and
# then uses install_name_tool to fixup the references to the newly embedded
# libraries so that they all refer to each other via "@executable_path."
#
# The main intent (and simplifying assumption used for developing the script)
# is to have a single executable .app bundle that becomes "self-contained" by
# copying all non-system libs that it depends on into itself. The further
# assumption is that all such dependencies are simple .dylib shared library
# files or Mac Framework libraries.
#
# This script can be used as part of the build via ADD_CUSTOM_COMMAND, or used
# only during make install via INSTALL SCRIPT.
#
if(NOT DEFINED input_file)
message(FATAL_ERROR "
${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): error: Variable input_file is not defined.
Use a command line like this to use this script:
cmake \"-Dinput_file=filename\" \"-Dextra_libs=/path/to/lib1;/path/to/lib2\" \"-Dlib_path=/path/to/unqualified/libs\" -P \"${CMAKE_CURRENT_LIST_FILE}\"
'input_file' should be the main executable inside a Mac bundle directory structure.
For example, use 'bin/paraview.app/Contents/MacOS/paraview' from a ParaView binary dir.
'extra_libs' should be a semi-colon separated list of full path names to extra libraries
to copy into the bundle that cannot be derived from otool -L output. For example, you may
also want to fixup dynamically loaded plugins from your build tree and copy them into the
bundle.
'lib_path' should be the path where to find libraries referenced without a path name in
otool -L output.
")
endif(NOT DEFINED input_file)
message("ingest ${input_file}")
set(eol_char "E")
if(APPLE)
set(dep_tool "otool")
set(dep_cmd_args "-L")
set(dep_regex "^\t([^\t]+) \\(compatibility version ([0-9]+.[0-9]+.[0-9]+), current version ([0-9]+.[0-9]+.[0-9]+)\\)${eol_char}$")
endif(APPLE)
message("")
message("# Script \"${CMAKE_CURRENT_LIST_FILE}\" running...")
message("")
message("input_file: '${input_file}'")
message("extra_libs: '${extra_libs}'")
message("lib_path: '${lib_path}'")
message("")
get_filename_component(input_file_full "${input_file}" ABSOLUTE)
message("input_file_full: '${input_file_full}'")
get_filename_component(bundle "${input_file_full}/../../.." ABSOLUTE)
message("bundle: '${bundle}'")
find_program(dep_cmd ${dep_tool})
# find the full path to the framework in path set the result
# in pathout
macro(find_framework_full_path path pathout)
set(${pathout} "${path}")
if(NOT EXISTS "${path}")
set(FRAMEWORK_SEARCH "/Library/Frameworks"
"/System/Library/Frameworks" )
set(__FOUND FALSE)
foreach(f ${FRAMEWORK_SEARCH})
set(newd "${f}/${path}")
if(EXISTS "${newd}" AND NOT __FOUND)
set(${pathout} "${newd}")
set(__FOUND TRUE)
endif(EXISTS "${newd}" AND NOT __FOUND)
endforeach(f)
endif(NOT EXISTS "${path}")
endmacro(find_framework_full_path)
macro(append_unique au_list_var au_value)
set(${au_list_var} ${${au_list_var}} "${au_value}")
endmacro(append_unique)
macro(gather_dependents gd_target gd_dependents_var)
execute_process(
COMMAND ${dep_cmd} ${dep_cmd_args} ${gd_target}
OUTPUT_VARIABLE dep_tool_ov
)
string(REGEX REPLACE ";" "\\\\;" dep_candidates "${dep_tool_ov}")
string(REGEX REPLACE "\n" "${eol_char};" dep_candidates "${dep_candidates}")
set(${gd_dependents_var} "")
foreach(candidate ${dep_candidates})
if("${candidate}" MATCHES "${dep_regex}")
string(REGEX REPLACE "${dep_regex}" "\\1" raw_item "${candidate}")
string(REGEX REPLACE "${dep_regex}" "\\2" raw_compat_version "${candidate}")
string(REGEX REPLACE "${dep_regex}" "\\3" raw_current_version "${candidate}")
set(item "${raw_item}")
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" compat_major_version "${raw_compat_version}")
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" compat_minor_version "${raw_compat_version}")
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" compat_patch_version "${raw_compat_version}")
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" current_major_version "${raw_current_version}")
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" current_minor_version "${raw_current_version}")
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" current_patch_version "${raw_current_version}")
#message("${raw_item} - compat ${raw_compat_version} - current ${raw_current_version}")
append_unique("${gd_dependents_var}" "${item}")
else("${candidate}" MATCHES "${dep_regex}")
if("${candidate}" STREQUAL "${gd_target}:${eol_char}")
#message("info: ignoring target name...")
else("${candidate}" STREQUAL "${gd_target}:${eol_char}")
message("error: candidate='${candidate}'")
endif("${candidate}" STREQUAL "${gd_target}:${eol_char}")
endif("${candidate}" MATCHES "${dep_regex}")
endforeach(candidate)
endmacro(gather_dependents)
message("Gathering dependent libraries for '${input_file_full}'...")
gather_dependents("${input_file_full}" deps)
message("")
# Order lexicographically:
#
list(SORT deps)
# Split into separate lists, "system" "embedded" and "nonsystem" libraries.
# System libs are assumed to be available on all target runtime Macs and do not
# need to be copied/fixed-up by this script. Embedded libraries are assumed to
# be in the bundle and fixed-up already. Only non-system, non-embedded libs
# need copying and fixing up...
#
set(system_deps "")
set(embedded_deps "")
set(nonsystem_deps "")
foreach(d ${deps})
set(d_is_embedded_lib 0)
set(d_is_system_lib 0)
if("${d}" MATCHES "^(/System/Library|/usr/lib)")
set(d_is_system_lib 1)
else("${d}" MATCHES "^(/System/Library|/usr/lib)")
if("${d}" MATCHES "^@executable_path")
set(d_is_embedded_lib 1)
endif("${d}" MATCHES "^@executable_path")
endif("${d}" MATCHES "^(/System/Library|/usr/lib)")
if(d_is_system_lib)
set(system_deps ${system_deps} "${d}")
else(d_is_system_lib)
if(d_is_embedded_lib)
set(embedded_deps ${embedded_deps} "${d}")
else(d_is_embedded_lib)
set(nonsystem_deps ${nonsystem_deps} "${d}")
endif(d_is_embedded_lib)
endif(d_is_system_lib)
endforeach(d)
message("")
message("system_deps:")
foreach(d ${system_deps})
message("${d}")
endforeach(d ${system_deps})
message("")
message("embedded_deps:")
foreach(d ${embedded_deps})
message("${d}")
endforeach(d ${embedded_deps})
message("")
message("nonsystem_deps:")
foreach(d ${nonsystem_deps})
message("${d}")
endforeach(d ${nonsystem_deps})
message("")
macro(copy_library_into_bundle clib_bundle clib_libsrc clib_dstlibs clib_fixups)
#
# If the source library is a framework, copy just the shared lib bit of the framework
# into the bundle under "${clib_bundle}/Contents/Frameworks" - if it is just a dylib
# copy it into the same directory with the main bundle executable under
# "${clib_bundle}/Contents/MacOS"
#
if("${clib_libsrc}" MATCHES ".framework/.*/.*/.*")
# make sure clib_libsrc is a full path to the framework as a framework
# maybe linked in with relative paths in some cases
find_framework_full_path("${clib_libsrc}" fw_full_src)
get_filename_component(fw_src "${fw_full_src}" ABSOLUTE)
get_filename_component(fw_srcdir "${clib_libsrc}/../../.." ABSOLUTE)
get_filename_component(fwdirname "${fw_srcdir}" NAME)
string(REGEX REPLACE "^(.*)\\.framework$" "\\1" fwname "${fwdirname}")
string(REGEX REPLACE "^.*/${fwname}\\.framework/(.*)$" "\\1" fwlibname "${clib_libsrc}")
set(fw_dstdir "${clib_bundle}/Contents/Frameworks")
# message("")
# message("fwdirname: '${fwdirname}'")
# message("fwname: '${fwname}'")
# message("fwlibname: '${fwlibname}'")
# message("fw_src: '${fw_src}'")
# message("fw_srcdir: '${fw_srcdir}'")
# message("fw_dstdir: '${fw_dstdir}'")
# message("new_name: '@executable_path/../Frameworks/${fwdirname}/${fwlibname}'")
# message("")
message("Copying ${fw_srcdir} into bundle...")
# This command copies the *entire* framework recursively:
#
# execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory
# "${fw_srcdir}" "${fw_dstdir}"
# )
# This command copies just the main shared lib of the framework:
# (This technique will not work for frameworks that have necessary
# resource or auxiliary files...)
#
message("fw_src = [${fw_src}] fw_full_src = [${fw_full_src}]")
message("Copy: ${CMAKE_COMMAND} -E copy \"${fw_src}\" \"${fw_dstdir}/${fwlibname}\"")
execute_process(COMMAND ${CMAKE_COMMAND} -E copy
"${fw_src}" "${fw_dstdir}/${fwlibname}"
)
get_filename_component(fw_src_path "${fw_src}" PATH)
message("Checking ${fw_src_path}/Resources")
if(EXISTS "${fw_src_path}/Resources")
message("Copy: ${CMAKE_COMMAND} -E copy_directory \"${fw_src_path}/Resources/\" \"${fw_dstdir}/Resources/\"")
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory
"${fw_src_path}/Resources/" "${fw_dstdir}/${fwdirname}/Resources/")
endif(EXISTS "${fw_src_path}/Resources")
execute_process(COMMAND install_name_tool
-id "@executable_path/../Frameworks/${fwlibname}"
"${clib_bundle}/Contents/Frameworks/${fwlibname}"
)
set(${clib_dstlibs} ${${clib_dstlibs}}
"${clib_bundle}/Contents/Frameworks/${fwlibname}"
)
set(${clib_fixups} ${${clib_fixups}}
"-change"
"${clib_libsrc}"
"@executable_path/../Frameworks/${fwlibname}"
)
else("${clib_libsrc}" MATCHES ".framework/.*/.*/.*")
if("${clib_libsrc}" MATCHES "/")
set(clib_libsrcfull "${clib_libsrc}")
else("${clib_libsrc}" MATCHES "/")
set(clib_libsrcfull "${lib_path}/${clib_libsrc}")
if(NOT EXISTS "${clib_libsrcfull}")
message(FATAL_ERROR "error: '${clib_libsrcfull}' does not exist...")
endif(NOT EXISTS "${clib_libsrcfull}")
endif("${clib_libsrc}" MATCHES "/")
get_filename_component(dylib_src "${clib_libsrcfull}" ABSOLUTE)
get_filename_component(dylib_name "${dylib_src}" NAME)
set(dylib_dst "${clib_bundle}/Contents/MacOS/${dylib_name}")
# message("dylib_src: ${dylib_src}")
# message("dylib_dst: ${dylib_dst}")
# message("new_name: '@executable_path/${dylib_name}'")
message("Copying ${dylib_src} into bundle...")
execute_process(COMMAND ${CMAKE_COMMAND} -E copy
"${dylib_src}" "${dylib_dst}")
execute_process(COMMAND install_name_tool
-id "@executable_path/${dylib_name}"
"${dylib_dst}"
)
set(${clib_dstlibs} ${${clib_dstlibs}}
"${dylib_dst}"
)
set(${clib_fixups} ${${clib_fixups}}
"-change"
"${clib_libsrc}"
"@executable_path/${dylib_name}"
)
endif("${clib_libsrc}" MATCHES ".framework/.*/.*/.*")
endmacro(copy_library_into_bundle)
# Copy dependent "nonsystem" libraries into the bundle:
#
message("Copying dependent libraries into bundle...")
set(srclibs ${nonsystem_deps} ${extra_libs})
set(dstlibs "")
set(fixups "")
foreach(d ${srclibs})
message("copy it --- ${d}")
copy_library_into_bundle("${bundle}" "${d}" dstlibs fixups)
endforeach(d)
message("")
message("dstlibs='${dstlibs}'")
message("")
message("fixups='${fixups}'")
message("")
# Fixup references to copied libraries in the main bundle executable and in the
# copied libraries themselves:
#
if(NOT "${fixups}" STREQUAL "")
message("Fixing up references...")
foreach(d ${dstlibs} "${input_file_full}")
message("fixing up references in: '${d}'")
execute_process(COMMAND install_name_tool ${fixups} "${d}")
endforeach(d)
message("")
endif(NOT "${fixups}" STREQUAL "")
# List all references to eyeball them and make sure they look right:
#
message("Listing references...")
foreach(d ${dstlibs} "${input_file_full}")
execute_process(COMMAND otool -L "${d}")
message("")
endforeach(d)
message("")
# Output file:
#
#get_filename_component(script_name "${CMAKE_CURRENT_LIST_FILE}" NAME)
#file(WRITE "${input_file_full}_${script_name}" "# Script \"${CMAKE_CURRENT_LIST_FILE}\" completed.\n")
message("")
message("# Script \"${CMAKE_CURRENT_LIST_FILE}\" completed.")
message("")

View File

@ -19,13 +19,6 @@ ELSE(NOT QT4_FOUND)
INCLUDE(${QT_USE_FILE})
SET(CMAKE_PACKAGE_QTGUI TRUE)
# i don't want to install or package the qt gui on windows
# unless qt is static
IF(WIN32 AND NOT QT_CONFIG MATCHES "static")
SET(CMAKE_PACKAGE_QTGUI FALSE)
MESSAGE(STATUS
"WARNING: QtDialog requires a static built qt for installation.")
ENDIF(WIN32 AND NOT QT_CONFIG MATCHES "static")
SET(SRCS
AddCacheEntry.cxx
AddCacheEntry.h
@ -86,12 +79,8 @@ ELSE(NOT QT4_FOUND)
SET(CMAKE_INSTALL_DESTINATION_ARGS
BUNDLE DESTINATION "${CMAKE_BUNDLE_LOCATION}")
ENDIF(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.4)
# if qt is not static and we are on windows then skip the install
# I don't want to distribute qt dlls
IF(CMAKE_PACKAGE_QTGUI)
INSTALL(TARGETS cmake-gui RUNTIME DESTINATION bin
${CMAKE_INSTALL_DESTINATION_ARGS})
ENDIF(CMAKE_PACKAGE_QTGUI)
INSTALL(TARGETS cmake-gui RUNTIME DESTINATION bin ${CMAKE_INSTALL_DESTINATION_ARGS})
IF(UNIX)
# install a desktop file so CMake appears in the application start menu
@ -112,10 +101,21 @@ ELSE(NOT QT4_FOUND)
"${CMake_BINARY_DIR}/Source/QtDialog/postupgrade.sh")
INSTALL(CODE "execute_process(COMMAND ln -s \"../MacOS/${CMAKE_BUNDLE_NAME}\" cmake-gui
WORKING_DIRECTORY \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/bin)")
INSTALL(CODE "set(input_file
\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/MacOS/${CMAKE_BUNDLE_NAME}\")")
INSTALL(SCRIPT "${CMake_SOURCE_DIR}/Source/QtDialog/CMakeIngestOSXBundleLibraries.cmake")
ENDIF(APPLE)
if(APPLE OR WIN32)
# install rules for including 3rd party libs such as Qt
# if a system Qt is used (e.g. installed in /usr/lib/), it will not be included in the installation
set(fixup_exe "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/bin/cmake-gui${CMAKE_EXECUTABLE_SUFFIX}")
if(APPLE)
set(fixup_exe "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/MacOS/${CMAKE_BUNDLE_NAME}")
endif(APPLE)
install(CODE "
include(\"${CMake_SOURCE_DIR}/Modules/BundleUtilities.cmake\")
fixup_bundle(\"${fixup_exe}\" \"\" \"${QT_LIBRARY_DIR};${QT_BINARY_DIR}\")
")
endif(APPLE OR WIN32)
CONFIGURE_FILE("${QtDialog_SOURCE_DIR}/QtDialogCPack.cmake.in"
"${QtDialog_BINARY_DIR}/QtDialogCPack.cmake" @ONLY)
ENDIF(NOT QT4_FOUND)

View File

@ -165,13 +165,25 @@ int main(int argc, char** argv)
if(args.count() == 2)
{
cmsys_stl::string filePath = cmSystemTools::CollapseFullPath(args[1].toAscii().data());
// check if argument is a directory containing CMakeCache.txt
cmsys_stl::string buildFilePath =
cmSystemTools::CollapseFullPath("CMakeCache.txt", filePath.c_str());
// check if argument is a CMakeCache.txt file
if(cmSystemTools::GetFilenameName(filePath) == "CMakeCache.txt" &&
cmSystemTools::FileExists(filePath.c_str()))
{
buildFilePath = filePath;
}
// check if argument is a directory containing CMakeLists.txt
cmsys_stl::string srcFilePath =
cmSystemTools::CollapseFullPath("CMakeLists.txt", filePath.c_str());
if(cmSystemTools::FileExists(buildFilePath.c_str()))
{
dialog.setBinaryDirectory(filePath.c_str());
dialog.setBinaryDirectory(cmSystemTools::GetFilenamePath(buildFilePath).c_str());
}
else if(cmSystemTools::FileExists(srcFilePath.c_str()))
{

View File

@ -152,6 +152,9 @@ public:
"If any dependency is an OUTPUT of another custom command in the "
"same directory (CMakeLists.txt file) CMake automatically brings the "
"other custom command into the target in which this command is built. "
"If DEPENDS is not specified the command will run whenever the OUTPUT "
"is missing; if the command does not actually create the OUTPUT then "
"the rule will always run. "
"If DEPENDS specifies any target (created by an ADD_* command) "
"a target-level dependency is created to make sure the target is "
"built before any target using this custom command. Additionally, "

View File

@ -23,7 +23,7 @@
#include <cmsys/SystemTools.hxx>
/* Some useful URLs:
Homepage:
Homepage:
http://www.codeblocks.org
File format docs:
@ -63,16 +63,6 @@ cmExtraCodeBlocksGenerator::cmExtraCodeBlocksGenerator()
}
void cmExtraCodeBlocksGenerator::SetGlobalGenerator(
cmGlobalGenerator* generator)
{
cmExternalMakefileProjectGenerator::SetGlobalGenerator(generator);
cmGlobalUnixMakefileGenerator3* mf = (cmGlobalUnixMakefileGenerator3*)
generator;
mf->SetToolSupportsColor(false);
mf->SetForceVerboseMakefiles(true);
}
void cmExtraCodeBlocksGenerator::Generate()
{
// for each sub project in the project create a codeblocks project
@ -107,7 +97,7 @@ void cmExtraCodeBlocksGenerator::CreateProjectFile(
/* Tree is used to create a "Virtual Folder" in CodeBlocks, in which all
CMake files this project depends on will be put. This means additionally
to the "Sources" and "Headers" virtual folders of CodeBlocks, there will
now also be a "CMake Files" virtual folder.
now also be a "CMake Files" virtual folder.
Patch by Daniel Teske <daniel.teske AT nokia.com> (which use C::B project
files in QtCreator).*/
struct Tree
@ -115,24 +105,24 @@ struct Tree
std::string path; //only one component of the path
std::vector<Tree> folders;
std::vector<std::string> files;
void InsertPath(const std::vector<std::string>& splitted,
std::vector<std::string>::size_type start,
void InsertPath(const std::vector<std::string>& splitted,
std::vector<std::string>::size_type start,
const std::string& fileName);
void BuildVirtualFolder(std::string& virtualFolders) const;
void BuildVirtualFolderImpl(std::string& virtualFolders,
void BuildVirtualFolderImpl(std::string& virtualFolders,
const std::string& prefix) const;
void BuildUnit(std::string& unitString, const std::string& fsPath) const;
void BuildUnitImpl(std::string& unitString,
const std::string& virtualFolderPath,
void BuildUnitImpl(std::string& unitString,
const std::string& virtualFolderPath,
const std::string& fsPath) const;
};
void Tree::InsertPath(const std::vector<std::string>& splitted,
std::vector<std::string>::size_type start,
void Tree::InsertPath(const std::vector<std::string>& splitted,
std::vector<std::string>::size_type start,
const std::string& fileName)
{
if (start == splitted.size())
if (start == splitted.size())
{
files.push_back(fileName);
return;
@ -301,7 +291,7 @@ void cmExtraCodeBlocksGenerator
}
// Now build a virtual tree string
std::string virtualFolders;
std::string virtualFolders;
tree.BuildVirtualFolder(virtualFolders);
// And one for <Unit>
std::string unitFiles;
@ -323,7 +313,7 @@ void cmExtraCodeBlocksGenerator
this->AppendTarget(fout, "all", 0, make.c_str(), mf, compiler.c_str());
// add all executable and library targets and some of the GLOBAL
// add all executable and library targets and some of the GLOBAL
// and UTILITY targets
for (std::vector<cmLocalGenerator*>::const_iterator lg=lgs.begin();
lg!=lgs.end(); lg++)
@ -338,9 +328,9 @@ void cmExtraCodeBlocksGenerator
case cmTarget::GLOBAL_TARGET:
{
bool insertTarget = false;
// Only add the global targets from CMAKE_BINARY_DIR,
// Only add the global targets from CMAKE_BINARY_DIR,
// not from the subdirs
if (strcmp(makefile->GetStartOutputDirectory(),
if (strcmp(makefile->GetStartOutputDirectory(),
makefile->GetHomeOutputDirectory())==0)
{
insertTarget = true;
@ -362,7 +352,7 @@ void cmExtraCodeBlocksGenerator
}
if (insertTarget)
{
this->AppendTarget(fout, ti->first.c_str(), 0,
this->AppendTarget(fout, ti->first.c_str(), 0,
make.c_str(), makefile, compiler.c_str());
}
}
@ -372,13 +362,13 @@ void cmExtraCodeBlocksGenerator
// Experimental-"sub"targets as e.g. NightlyStart
if (((ti->first.find("Nightly")==0) &&(ti->first!="Nightly"))
|| ((ti->first.find("Continuous")==0)&&(ti->first!="Continuous"))
|| ((ti->first.find("Experimental")==0)
|| ((ti->first.find("Experimental")==0)
&& (ti->first!="Experimental")))
{
break;
}
this->AppendTarget(fout, ti->first.c_str(), 0,
this->AppendTarget(fout, ti->first.c_str(), 0,
make.c_str(), makefile, compiler.c_str());
break;
case cmTarget::EXECUTABLE:
@ -386,11 +376,11 @@ void cmExtraCodeBlocksGenerator
case cmTarget::SHARED_LIBRARY:
case cmTarget::MODULE_LIBRARY:
{
this->AppendTarget(fout, ti->first.c_str(), &ti->second,
this->AppendTarget(fout, ti->first.c_str(), &ti->second,
make.c_str(), makefile, compiler.c_str());
std::string fastTarget = ti->first;
fastTarget += "/fast";
this->AppendTarget(fout, fastTarget.c_str(), &ti->second,
this->AppendTarget(fout, fastTarget.c_str(), &ti->second,
make.c_str(), makefile, compiler.c_str());
}
break;
@ -437,7 +427,7 @@ void cmExtraCodeBlocksGenerator
{
for(std::vector<std::string>::const_iterator
ext = mf->GetSourceExtensions().begin();
ext != mf->GetSourceExtensions().end();
ext != mf->GetSourceExtensions().end();
++ext)
{
if ((*si)->GetExtension() == *ext)
@ -467,11 +457,11 @@ void cmExtraCodeBlocksGenerator
// The following loop tries to add header files matching to implementation
// files to the project. It does that by iterating over all source files,
// replacing the file name extension with ".h" and checks whether such a
// replacing the file name extension with ".h" and checks whether such a
// file exists. If it does, it is inserted into the map of files.
// A very similar version of that code exists also in the kdevelop
// project generator.
for (std::map<std::string, cmSourceFile*>::const_iterator
for (std::map<std::string, cmSourceFile*>::const_iterator
sit=cFiles.begin();
sit!=cFiles.end();
++sit)
@ -483,7 +473,7 @@ void cmExtraCodeBlocksGenerator
// check if there's a matching header around
for(std::vector<std::string>::const_iterator
ext = mf->GetHeaderExtensions().begin();
ext != mf->GetHeaderExtensions().end();
ext != mf->GetHeaderExtensions().end();
++ext)
{
std::string hname=headerBasename;
@ -506,7 +496,7 @@ void cmExtraCodeBlocksGenerator
// insert all source files in the CodeBlocks project
// first the C/C++ implementation files, then all others
for (std::map<std::string, cmSourceFile*>::const_iterator
for (std::map<std::string, cmSourceFile*>::const_iterator
sit=cFiles.begin();
sit!=cFiles.end();
++sit)
@ -514,7 +504,7 @@ void cmExtraCodeBlocksGenerator
fout<<" <Unit filename=\""<< sit->first <<"\">\n"
" </Unit>\n";
}
for (std::set<std::string>::const_iterator
for (std::set<std::string>::const_iterator
sit=otherFiles.begin();
sit!=otherFiles.end();
++sit)
@ -577,7 +567,7 @@ void cmExtraCodeBlocksGenerator::AppendTarget(cmGeneratedFileStream& fout,
" <Option compiler=\"" << compiler << "\" />\n"
" <Compiler>\n";
// the include directories for this target
const std::vector<std::string>& incDirs =
const std::vector<std::string>& incDirs =
target->GetMakefile()->GetIncludeDirectories();
for(std::vector<std::string>::const_iterator dirIt=incDirs.begin();
dirIt != incDirs.end();
@ -589,27 +579,27 @@ void cmExtraCodeBlocksGenerator::AppendTarget(cmGeneratedFileStream& fout,
}
else // e.g. all and the GLOBAL and UTILITY targets
{
fout<<" <Option working_dir=\""
fout<<" <Option working_dir=\""
<< makefile->GetStartOutputDirectory() << "\" />\n"
<<" <Option type=\"" << 4 << "\" />\n";
}
fout<<" <MakeCommands>\n"
" <Build command=\""
" <Build command=\""
<< this->BuildMakeCommand(make, makefileName.c_str(), targetName)
<< "\" />\n"
" <CompileFile command=\""
" <CompileFile command=\""
<< this->BuildMakeCommand(make, makefileName.c_str(),"&quot;$file&quot;")
<< "\" />\n"
" <Clean command=\""
<< this->BuildMakeCommand(make, makefileName.c_str(), "clean")
" <Clean command=\""
<< this->BuildMakeCommand(make, makefileName.c_str(), "clean")
<< "\" />\n"
" <DistClean command=\""
<< this->BuildMakeCommand(make, makefileName.c_str(), "clean")
" <DistClean command=\""
<< this->BuildMakeCommand(make, makefileName.c_str(), "clean")
<< "\" />\n"
" </MakeCommands>\n"
" </Target>\n";
}
@ -675,7 +665,7 @@ int cmExtraCodeBlocksGenerator::GetCBTargetType(cmTarget* target)
{
return 2;
}
else if ((target->GetType()==cmTarget::SHARED_LIBRARY)
else if ((target->GetType()==cmTarget::SHARED_LIBRARY)
|| (target->GetType()==cmTarget::MODULE_LIBRARY))
{
return 3;
@ -695,16 +685,18 @@ std::string cmExtraCodeBlocksGenerator::BuildMakeCommand(
command += " /NOLOGO /f &quot;";
command += makefileName;
command += "&quot; ";
command += " VERBOSE=1 ";
command += target;
}
else if (strcmp(this->GlobalGenerator->GetName(), "MinGW Makefiles")==0)
{
// no escaping of spaces in this case, see
// no escaping of spaces in this case, see
// http://public.kitware.com/Bug/view.php?id=10014
std::string makefileName = makefile;
std::string makefileName = makefile;
command += " -f &quot;";
command += makefileName;
command += "&quot; ";
command += " VERBOSE=1 ";
command += target;
}
else
@ -713,6 +705,7 @@ std::string cmExtraCodeBlocksGenerator::BuildMakeCommand(
command += " -f &quot;";
command += makefileName;
command += "&quot; ";
command += " VERBOSE=1 ";
command += target;
}
return command;

View File

@ -22,22 +22,19 @@ class cmGeneratedFileStream;
/** \class cmExtraCodeBlocksGenerator
* \brief Write CodeBlocks project files for Makefile based projects
*
* This generator is in early alpha stage.
*/
class cmExtraCodeBlocksGenerator : public cmExternalMakefileProjectGenerator
{
public:
cmExtraCodeBlocksGenerator();
virtual void SetGlobalGenerator(cmGlobalGenerator* generator);
virtual const char* GetName() const
{ return cmExtraCodeBlocksGenerator::GetActualName();}
static const char* GetActualName() { return "CodeBlocks";}
static cmExternalMakefileProjectGenerator* New()
static cmExternalMakefileProjectGenerator* New()
{ return new cmExtraCodeBlocksGenerator; }
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry,
virtual void GetDocumentation(cmDocumentationEntry& entry,
const char* fullName) const;
virtual void Generate();
@ -49,7 +46,7 @@ private:
const std::string& filename);
std::string GetCBCompilerId(const cmMakefile* mf);
int GetCBTargetType(cmTarget* target);
std::string BuildMakeCommand(const std::string& make, const char* makefile,
std::string BuildMakeCommand(const std::string& make, const char* makefile,
const char* target);
void AppendTarget(cmGeneratedFileStream& fout,
const char* targetName,

View File

@ -51,16 +51,6 @@ void cmExtraEclipseCDT4Generator
"the default make target. A \"make install\" target is also provided.";
}
//----------------------------------------------------------------------------
void cmExtraEclipseCDT4Generator
::SetGlobalGenerator(cmGlobalGenerator* generator)
{
cmExternalMakefileProjectGenerator::SetGlobalGenerator(generator);
cmGlobalUnixMakefileGenerator3* mf
= static_cast<cmGlobalUnixMakefileGenerator3*>(generator);
mf->SetToolSupportsColor(true);
}
//----------------------------------------------------------------------------
void cmExtraEclipseCDT4Generator::Generate()
{
@ -73,7 +63,7 @@ void cmExtraEclipseCDT4Generator::Generate()
this->IsOutOfSourceBuild = (this->HomeDirectory!=this->HomeOutputDirectory);
this->GenerateSourceProject = (this->IsOutOfSourceBuild &&
this->GenerateSourceProject = (this->IsOutOfSourceBuild &&
mf->IsOn("ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT"));
// NOTE: This is not good, since it pollutes the source tree. However,
@ -109,7 +99,7 @@ void cmExtraEclipseCDT4Generator::CreateSourceProjectFile() const
return;
}
fout <<
fout <<
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<projectDescription>\n"
"\t<name>" << name << "</name>\n"
@ -129,7 +119,7 @@ void cmExtraEclipseCDT4Generator::CreateSourceProjectFile() const
void cmExtraEclipseCDT4Generator::AddEnvVar(cmGeneratedFileStream& fout,
const char* envVar, cmMakefile* mf)
{
// get the variables from the environment and from the cache and then
// get the variables from the environment and from the cache and then
// figure out which one to use:
const char* envVarValue = getenv(envVar);
@ -148,7 +138,7 @@ void cmExtraEclipseCDT4Generator::AddEnvVar(cmGeneratedFileStream& fout,
}
else if (envVarValue!=0 && cacheValue==0)
{
// The variable is in the env, but not in the cache. Use it and put it
// The variable is in the env, but not in the cache. Use it and put it
// in the cache
valueToUse = envVarValue;
mf->AddCacheDefinition(cacheEntryName.c_str(), valueToUse.c_str(),
@ -206,7 +196,7 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile()
compilerId = mf->GetSafeDefinition("CMAKE_CXX_COMPILER_ID");
}
fout <<
fout <<
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<projectDescription>\n"
"\t<name>" <<
@ -225,7 +215,7 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile()
;
// use clean target
fout <<
fout <<
"\t\t\t\t<dictionary>\n"
"\t\t\t\t\t<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>\n"
"\t\t\t\t\t<value>clean</value>\n"
@ -246,7 +236,7 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile()
// set the make command
std::string make = mf->GetRequiredDefinition("CMAKE_MAKE_PROGRAM");
fout <<
fout <<
"\t\t\t\t<dictionary>\n"
"\t\t\t\t\t<key>org.eclipse.cdt.make.core.enabledIncrementalBuild</key>\n"
"\t\t\t\t\t<value>true</value>\n"
@ -296,7 +286,7 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile()
else if (compilerId == "Intel")
{
// if the env.var is set, use this one and put it in the cache
// if the env.var is not set, but the value is in the cache,
// if the env.var is not set, but the value is in the cache,
// use it from the cache:
AddEnvVar(fout, "INTEL_LICENSE_FILE", mf);
}
@ -392,9 +382,9 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile()
{
fout << "\t<linkedResources>\n";
// create a linked resource to CMAKE_SOURCE_DIR
// (this is not done anymore for each project because of
// http://public.kitware.com/Bug/view.php?id=9978 and because I found it
// actually quite confusing in bigger projects with many directories and
// (this is not done anymore for each project because of
// http://public.kitware.com/Bug/view.php?id=9978 and because I found it
// actually quite confusing in bigger projects with many directories and
// projects, Alex
std::string sourceLinkedResourceName = "[Source directory]";
@ -440,7 +430,7 @@ void cmExtraEclipseCDT4Generator::AppendIncludeDirectories(
if(emittedDirs.find(dir) == emittedDirs.end())
{
emittedDirs.insert(dir);
fout << "<pathentry include=\""
fout << "<pathentry include=\""
<< cmExtraEclipseCDT4Generator::GetEclipsePath(dir)
<< "\" kind=\"inc\" path=\"\" system=\"true\"/>\n";
}
@ -452,7 +442,7 @@ void cmExtraEclipseCDT4Generator::AppendIncludeDirectories(
void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
{
std::set<std::string> emmited;
const cmMakefile* mf
= this->GlobalGenerator->GetLocalGenerators()[0]->GetMakefile();
@ -465,7 +455,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
}
// add header
fout <<
fout <<
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<?fileVersion 4.0.0?>\n\n"
"<cproject>\n"
@ -475,7 +465,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
fout << "<cconfiguration id=\"org.eclipse.cdt.core.default.config.1\">\n";
// Configuration settings...
fout <<
fout <<
"<storageModule"
" buildSystemId=\"org.eclipse.cdt.core.defaultConfigDataProvider\""
" id=\"org.eclipse.cdt.core.default.config.1\""
@ -536,9 +526,9 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
fout << "</extensions>\n"
"</storageModule>\n"
;
// ???
fout <<
fout <<
"<storageModule moduleId=\"org.eclipse.cdt.core.language.mapping\">\n"
"<project-mappings/>\n"
"</storageModule>\n"
@ -619,13 +609,13 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
// we have -DFOO
def = *di;
}
// insert the definition if not already added.
if(emmited.find(def) == emmited.end())
{
emmited.insert(def);
fout << "<pathentry kind=\"mac\" name=\"" << def
<< "\" path=\"\" value=\"" << this->EscapeForXML(val)
<< "\" path=\"\" value=\"" << this->EscapeForXML(val)
<< "\"/>\n";
}
}
@ -712,8 +702,8 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
= (*it)->GetMakefile()->GetIncludeDirectories();
this->AppendIncludeDirectories(fout, includeDirs, emmited);
}
// now also the system include directories, in case we found them in
// CMakeSystemSpecificInformation.cmake. This makes Eclipse find the
// now also the system include directories, in case we found them in
// CMakeSystemSpecificInformation.cmake. This makes Eclipse find the
// standard headers.
mf->GetDefinition("CMAKE_ECLIPSE_C_SYSTEM_INCLUDE_DIRS");
std::string compiler = mf->GetSafeDefinition("CMAKE_C_COMPILER");
@ -738,7 +728,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
fout << "</storageModule>\n";
// add build targets
fout <<
fout <<
"<storageModule moduleId=\"org.eclipse.cdt.make.core.buildtargets\">\n"
"<buildTargets>\n"
;
@ -746,7 +736,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
const std::string make = mf->GetRequiredDefinition("CMAKE_MAKE_PROGRAM");
cmGlobalGenerator* generator
= const_cast<cmGlobalGenerator*>(this->GlobalGenerator);
std::string allTarget;
std::string cleanTarget;
if (generator->GetAllTargetName())
@ -758,7 +748,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
cleanTarget = generator->GetCleanTargetName();
}
// add all executable and library targets and some of the GLOBAL
// add all executable and library targets and some of the GLOBAL
// and UTILITY targets
for (std::vector<cmLocalGenerator*>::const_iterator
it = this->GlobalGenerator->GetLocalGenerators().begin();
@ -781,7 +771,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
case cmTarget::GLOBAL_TARGET:
{
bool insertTarget = false;
// Only add the global targets from CMAKE_BINARY_DIR,
// Only add the global targets from CMAKE_BINARY_DIR,
// not from the subdirs
if (subdir.empty())
{
@ -813,7 +803,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
// Experimental-"sub"targets as e.g. NightlyStart
if (((ti->first.find("Nightly")==0) &&(ti->first!="Nightly"))
|| ((ti->first.find("Continuous")==0)&&(ti->first!="Continuous"))
|| ((ti->first.find("Experimental")==0)
|| ((ti->first.find("Experimental")==0)
&& (ti->first!="Experimental")))
{
break;
@ -842,7 +832,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
break;
}
}
// insert the all and clean targets in every subdir
if (!allTarget.empty())
{
@ -955,7 +945,7 @@ std::string cmExtraEclipseCDT4Generator::EscapeForXML(const std::string& value)
// Helper functions
//----------------------------------------------------------------------------
void cmExtraEclipseCDT4Generator
::AppendStorageScanners(cmGeneratedFileStream& fout,
::AppendStorageScanners(cmGeneratedFileStream& fout,
const cmMakefile& makefile)
{
// we need the "make" and the C (or C++) compiler which are used, Alex
@ -972,7 +962,7 @@ void cmExtraEclipseCDT4Generator
// the following right now hardcodes gcc behaviour :-/
fout <<
fout <<
"<storageModule moduleId=\"scannerConfiguration\">\n"
"<autodiscovery enabled=\"true\" problemReportingEnabled=\"true\""
" selectedProfileId="
@ -996,8 +986,8 @@ void cmExtraEclipseCDT4Generator
// of that is to sort the targets in the view of Eclipse, so that at first
// the global/utility/all/clean targets appear ": ", then the executable
// targets "[exe] ", then the libraries "[lib]", then the rules for the
// object files "[obj]", then for preprocessing only "[pre] " and
// finally the assembly files "[to asm] ". Note the "to" in "to asm",
// object files "[obj]", then for preprocessing only "[pre] " and
// finally the assembly files "[to asm] ". Note the "to" in "to asm",
// without it, "asm" would be the first targets in the list, with the "to"
// they are the last targets, which makes more sense.
void cmExtraEclipseCDT4Generator::AppendTarget(cmGeneratedFileStream& fout,
@ -1006,7 +996,7 @@ void cmExtraEclipseCDT4Generator::AppendTarget(cmGeneratedFileStream& fout,
const std::string& path,
const char* prefix)
{
fout <<
fout <<
"<target name=\"" << prefix << target << "\""
" path=\"" << path.c_str() << "\""
" targetID=\"org.eclipse.cdt.make.MakeTargetBuilder\">\n"
@ -1033,7 +1023,7 @@ void cmExtraEclipseCDT4Generator
bool runActionUseDefault,
bool sipParserEnabled)
{
fout <<
fout <<
"<profile id=\"" << profileID << "\">\n"
"<buildOutputProvider>\n"
"<openAction enabled=\"" << (openActionEnabled ? "true" : "false")

View File

@ -21,8 +21,6 @@ class cmGeneratedFileStream;
/** \class cmExtraEclipseCDT4Generator
* \brief Write Eclipse project files for Makefile based projects
*
* This generator is in early alpha stage.
*/
class cmExtraEclipseCDT4Generator : public cmExternalMakefileProjectGenerator
{
@ -42,8 +40,6 @@ public:
virtual void GetDocumentation(cmDocumentationEntry& entry,
const char* fullName) const;
virtual void SetGlobalGenerator(cmGlobalGenerator* generator);
virtual void Generate();
private:
@ -70,7 +66,7 @@ private:
static std::string EscapeForXML(const std::string& value);
// Helper functions
static void AppendStorageScanners(cmGeneratedFileStream& fout,
static void AppendStorageScanners(cmGeneratedFileStream& fout,
const cmMakefile& makefile);
static void AppendTarget (cmGeneratedFileStream& fout,
const std::string& target,
@ -100,7 +96,7 @@ private:
const std::vector<std::string>& includeDirs,
std::set<std::string>& emittedDirs);
static void AddEnvVar(cmGeneratedFileStream& fout, const char* envVar,
static void AddEnvVar(cmGeneratedFileStream& fout, const char* envVar,
cmMakefile* mf);
std::vector<std::string> SrcLinkedResources;

View File

@ -38,31 +38,31 @@ public:
///! Free any memory allocated with the GlobalGenerator
cmGlobalGenerator();
virtual ~cmGlobalGenerator();
///! Create a local generator appropriate to this Global Generator
virtual cmLocalGenerator *CreateLocalGenerator();
///! Get the name for this generator
virtual const char *GetName() const { return "Generic"; };
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
/**
* Create LocalGenerators and process the CMakeLists files. This does not
* actually produce any makefiles, DSPs, etc.
* actually produce any makefiles, DSPs, etc.
*/
virtual void Configure();
/**
* Generate the all required files for building this project/tree. This
* basically creates a series of LocalGenerators for each directory and
* requests that they Generate.
* requests that they Generate.
*/
virtual void Generate();
/**
* Set/Get and Clear the enabled languages.
* Set/Get and Clear the enabled languages.
*/
void SetLanguageEnabled(const char*, cmMakefile* mf);
bool GetLanguageEnabled(const char*) const;
@ -70,7 +70,7 @@ public:
void GetEnabledLanguages(std::vector<std::string>& lang);
/**
* Try to determine system infomation such as shared library
* extension, pthreads, byte order etc.
* extension, pthreads, byte order etc.
*/
virtual void EnableLanguage(std::vector<std::string>const& languages,
cmMakefile *, bool optional);
@ -88,7 +88,7 @@ public:
const char *projectName, const char *targetName,
bool fast, std::string *output, cmMakefile* mf);
/**
* Build a file given the following information. This is a more direct call
* that is used by both CTest and TryCompile. If target name is NULL or
@ -104,28 +104,28 @@ public:
const char* extraOptions = 0,
std::vector<std::string> const& nativeOptions =
std::vector<std::string>());
virtual std::string GenerateBuildCommand(
const char* makeProgram,
const char *projectName, const char* additionalOptions,
const char *projectName, const char* additionalOptions,
const char *targetName,
const char* config, bool ignoreErrors, bool fast);
///! Set the CMake instance
void SetCMakeInstance(cmake *cm);
///! Get the CMake instance
cmake *GetCMakeInstance() { return this->CMakeInstance; };
void SetConfiguredFilesPath(cmGlobalGenerator* gen);
const std::vector<cmLocalGenerator *>& GetLocalGenerators() const {
const std::vector<cmLocalGenerator *>& GetLocalGenerators() const {
return this->LocalGenerators;}
cmLocalGenerator* GetCurrentLocalGenerator()
cmLocalGenerator* GetCurrentLocalGenerator()
{return this->CurrentLocalGenerator;}
void SetCurrentLocalGenerator(cmLocalGenerator* lg)
void SetCurrentLocalGenerator(cmLocalGenerator* lg)
{this->CurrentLocalGenerator = lg;}
void AddLocalGenerator(cmLocalGenerator *lg);
@ -138,11 +138,11 @@ public:
void AddInstallComponent(const char* component);
const std::set<cmStdString>* GetInstallComponents() const
const std::set<cmStdString>* GetInstallComponents() const
{ return &InstallComponents; }
///! Add one installed target to the sets of the exports
void AddTargetToExports(const char* exportSet, cmTarget* target,
void AddTargetToExports(const char* exportSet, cmTarget* target,
cmInstallTargetGenerator* archive,
cmInstallTargetGenerator* runTime,
cmInstallTargetGenerator* library,
@ -158,10 +158,9 @@ public:
void EnableInstallTarget();
int TryCompileTimeout;
bool GetForceUnixPaths() {return this->ForceUnixPaths;}
bool GetToolSupportsColor() { return this->ToolSupportsColor; }
void SetToolSupportsColor(bool enable) { this->ToolSupportsColor = enable; }
///! return the language for the given extension
const char* GetLanguageFromExtension(const char* ext);
@ -254,7 +253,7 @@ public:
bool BinaryDirectoryIsNew(const char* dir)
{
return this->BinaryDirectories.insert(dir).second;
}
}
/** Supported systems creates a GUID for the given name */
virtual void CreateGUID(const char*) {}
@ -281,7 +280,7 @@ protected:
bool CheckTargets();
// Fill the ProjectMap, this must be called after LocalGenerators
// Fill the ProjectMap, this must be called after LocalGenerators
// has been populated.
void FillProjectMap();
void CheckLocalGenerators();
@ -328,13 +327,13 @@ protected:
private:
float FirstTimeProgress;
// If you add a new map here, make sure it is copied
// in EnableLanguagesFromGenerator
// in EnableLanguagesFromGenerator
std::map<cmStdString, bool> IgnoreExtensions;
std::map<cmStdString, bool> LanguageEnabled;
std::map<cmStdString, cmStdString> OutputExtensions;
std::map<cmStdString, cmStdString> LanguageToOutputExtension;
std::map<cmStdString, cmStdString> ExtensionToLanguage;
std::map<cmStdString, int> LanguageToLinkerPreference;
std::map<cmStdString, int> LanguageToLinkerPreference;
// Record hashes for rules and outputs.
struct RuleHash { char Data[32]; };

View File

@ -24,7 +24,6 @@ cmGlobalUnixMakefileGenerator3::cmGlobalUnixMakefileGenerator3()
this->ForceUnixPaths = true;
this->FindMakeProgramFile = "CMakeUnixFindMake.cmake";
this->ToolSupportsColor = true;
this->ForceVerboseMakefiles = false;
#if defined(_WIN32) || defined(__VMS)
this->UseLinkScript = false;
@ -34,8 +33,8 @@ cmGlobalUnixMakefileGenerator3::cmGlobalUnixMakefileGenerator3()
}
void cmGlobalUnixMakefileGenerator3
::EnableLanguage(std::vector<std::string>const& languages,
cmMakefile *mf,
::EnableLanguage(std::vector<std::string>const& languages,
cmMakefile *mf,
bool optional)
{
this->cmGlobalGenerator::EnableLanguage(languages, mf, optional);
@ -51,17 +50,17 @@ void cmGlobalUnixMakefileGenerator3
std::string langComp = "CMAKE_";
langComp += lang;
langComp += "_COMPILER";
if(!mf->GetDefinition(langComp.c_str()))
{
if(!optional)
{
cmSystemTools::Error(langComp.c_str(),
cmSystemTools::Error(langComp.c_str(),
" not set, after EnableLanguage");
}
continue;
}
const char* name = mf->GetRequiredDefinition(langComp.c_str());
const char* name = mf->GetRequiredDefinition(langComp.c_str());
if(!cmSystemTools::FileIsFullPath(name))
{
path = cmSystemTools::FindProgram(name);
@ -70,7 +69,7 @@ void cmGlobalUnixMakefileGenerator3
{
path = name;
}
if((path.size() == 0 || !cmSystemTools::FileExists(path.c_str()))
if((path.size() == 0 || !cmSystemTools::FileExists(path.c_str()))
&& (optional==false))
{
std::string message = "your ";
@ -96,8 +95,8 @@ void cmGlobalUnixMakefileGenerator3
cmSystemTools::ConvertToUnixSlashes(cnameString);
cmSystemTools::ConvertToUnixSlashes(pathString);
if (cnameString != pathString)
{
const char* cvars =
{
const char* cvars =
this->GetCMakeInstance()->GetProperty(
"__CMAKE_DELETE_CACHE_CHANGE_VARS_");
if(cvars)
@ -139,7 +138,7 @@ void cmGlobalUnixMakefileGenerator3
}
//----------------------------------------------------------------------------
void cmGlobalUnixMakefileGenerator3::Generate()
void cmGlobalUnixMakefileGenerator3::Generate()
{
// first do superclass method
this->cmGlobalGenerator::Generate();
@ -187,7 +186,7 @@ void cmGlobalUnixMakefileGenerator3::WriteMainMakefile2()
// Open the output file. This should not be copy-if-different
// because the check-build-system step compares the makefile time to
// see if the build system must be regenerated.
std::string makefileName =
std::string makefileName =
this->GetCMakeInstance()->GetHomeOutputDirectory();
makefileName += cmake::GetCMakeFilesDirectory();
makefileName += "/Makefile2";
@ -196,11 +195,11 @@ void cmGlobalUnixMakefileGenerator3::WriteMainMakefile2()
{
return;
}
// get a local generator for some useful methods
cmLocalUnixMakefileGenerator3 *lg =
cmLocalUnixMakefileGenerator3 *lg =
static_cast<cmLocalUnixMakefileGenerator3 *>(this->LocalGenerators[0]);
// Write the do not edit header.
lg->WriteDisclaimer(makefileStream);
@ -229,8 +228,8 @@ void cmGlobalUnixMakefileGenerator3::WriteMainMakefile2()
}
// Write and empty all:
lg->WriteMakeRule(makefileStream,
"The main recursive all target", "all",
lg->WriteMakeRule(makefileStream,
"The main recursive all target", "all",
depends, no_commands, true);
// Write an empty preinstall:
@ -240,12 +239,12 @@ void cmGlobalUnixMakefileGenerator3::WriteMainMakefile2()
// Write out the "special" stuff
lg->WriteSpecialTargetsTop(makefileStream);
// write the target convenience rules
unsigned int i;
for (i = 0; i < this->LocalGenerators.size(); ++i)
{
lg =
lg =
static_cast<cmLocalUnixMakefileGenerator3 *>(this->LocalGenerators[i]);
this->WriteConvenienceRules2(makefileStream,lg);
}
@ -261,7 +260,7 @@ void cmGlobalUnixMakefileGenerator3::WriteMainCMakefile()
// Open the output file. This should not be copy-if-different
// because the check-build-system step compares the makefile time to
// see if the build system must be regenerated.
std::string cmakefileName =
std::string cmakefileName =
this->GetCMakeInstance()->GetHomeOutputDirectory();
cmakefileName += cmake::GetCMakeFilesDirectory();
cmakefileName += "/Makefile.cmake";
@ -271,14 +270,14 @@ void cmGlobalUnixMakefileGenerator3::WriteMainCMakefile()
return;
}
std::string makefileName =
std::string makefileName =
this->GetCMakeInstance()->GetHomeOutputDirectory();
makefileName += "/Makefile";
// get a local generator for some useful methods
cmLocalUnixMakefileGenerator3 *lg =
cmLocalUnixMakefileGenerator3 *lg =
static_cast<cmLocalUnixMakefileGenerator3 *>(this->LocalGenerators[0]);
// Write the do not edit header.
lg->WriteDisclaimer(cmakefileStream);
@ -291,9 +290,9 @@ void cmGlobalUnixMakefileGenerator3::WriteMainCMakefile()
std::vector<std::string> lfiles;
for (unsigned int i = 0; i < this->LocalGenerators.size(); ++i)
{
lg =
lg =
static_cast<cmLocalUnixMakefileGenerator3 *>(this->LocalGenerators[i]);
// Get the list of files contributing to this generation step.
lfiles.insert(lfiles.end(),lg->GetMakefile()->GetListFiles().begin(),
lg->GetMakefile()->GetListFiles().end());
@ -301,7 +300,7 @@ void cmGlobalUnixMakefileGenerator3::WriteMainCMakefile()
// Sort the list and remove duplicates.
std::sort(lfiles.begin(), lfiles.end(), std::less<std::string>());
#if !defined(__VMS) // The Compaq STL on VMS crashes, so accept duplicates.
std::vector<std::string>::iterator new_end =
std::vector<std::string>::iterator new_end =
std::unique(lfiles.begin(),lfiles.end());
lfiles.erase(new_end, lfiles.end());
#endif
@ -317,14 +316,14 @@ void cmGlobalUnixMakefileGenerator3::WriteMainCMakefile()
cmakefileStream
<< "# The top level Makefile was generated from the following files:\n"
<< "SET(CMAKE_MAKEFILE_DEPENDS\n"
<< " \""
<< " \""
<< lg->Convert(cache.c_str(),
cmLocalGenerator::START_OUTPUT).c_str() << "\"\n";
for(std::vector<std::string>::const_iterator i = lfiles.begin();
i != lfiles.end(); ++i)
{
cmakefileStream
<< " \""
<< " \""
<< lg->Convert(i->c_str(), cmLocalGenerator::START_OUTPUT).c_str()
<< "\"\n";
}
@ -340,10 +339,10 @@ void cmGlobalUnixMakefileGenerator3::WriteMainCMakefile()
cmakefileStream
<< "# The corresponding makefile is:\n"
<< "SET(CMAKE_MAKEFILE_OUTPUTS\n"
<< " \""
<< " \""
<< lg->Convert(makefileName.c_str(),
cmLocalGenerator::START_OUTPUT).c_str() << "\"\n"
<< " \""
<< " \""
<< lg->Convert(check.c_str(),
cmLocalGenerator::START_OUTPUT).c_str() << "\"\n";
cmakefileStream << " )\n\n";
@ -367,19 +366,19 @@ void cmGlobalUnixMakefileGenerator3::WriteMainCMakefile()
std::string tmpStr;
for (unsigned int i = 0; i < this->LocalGenerators.size(); ++i)
{
lg =
lg =
static_cast<cmLocalUnixMakefileGenerator3 *>(this->LocalGenerators[i]);
tmpStr = lg->GetMakefile()->GetStartOutputDirectory();
tmpStr += cmake::GetCMakeFilesDirectory();
tmpStr += "/CMakeDirectoryInformation.cmake";
cmakefileStream << " \"" <<
lg->Convert(tmpStr.c_str(),cmLocalGenerator::HOME_OUTPUT).c_str()
cmakefileStream << " \"" <<
lg->Convert(tmpStr.c_str(),cmLocalGenerator::HOME_OUTPUT).c_str()
<< "\"\n";
}
cmakefileStream << " )\n\n";
}
this->WriteMainCMakefileLanguageRules(cmakefileStream,
this->WriteMainCMakefileLanguageRules(cmakefileStream,
this->LocalGenerators);
}
@ -458,7 +457,7 @@ cmGlobalUnixMakefileGenerator3
// The directory-level rule should depend on the directory-level
// rules of the subdirectories.
for(std::vector<cmLocalGenerator*>::iterator sdi =
for(std::vector<cmLocalGenerator*>::iterator sdi =
lg->GetChildren().begin(); sdi != lg->GetChildren().end(); ++sdi)
{
cmLocalUnixMakefileGenerator3* slg =
@ -518,7 +517,7 @@ cmGlobalUnixMakefileGenerator3
std::string cmGlobalUnixMakefileGenerator3
::GenerateBuildCommand(const char* makeProgram, const char *projectName,
::GenerateBuildCommand(const char* makeProgram, const char *projectName,
const char* additionalOptions, const char *targetName,
const char* config, bool ignoreErrors, bool fast)
{
@ -526,9 +525,9 @@ std::string cmGlobalUnixMakefileGenerator3
(void)projectName;
(void)config;
std::string makeCommand =
std::string makeCommand =
cmSystemTools::ConvertToUnixOutputPath(makeProgram);
// Since we have full control over the invocation of nmake, let us
// make it quiet.
if ( strcmp(this->GetName(), "NMake Makefiles") == 0 )
@ -563,7 +562,7 @@ std::string cmGlobalUnixMakefileGenerator3
(this->CMakeInstance->GetStartOutputDirectory());
lg->GetMakefile()->MakeStartDirectoriesCurrent();
}
makeCommand += " \"";
std::string tname = targetName;
if(fast)
@ -585,14 +584,14 @@ std::string cmGlobalUnixMakefileGenerator3
//----------------------------------------------------------------------------
void
cmGlobalUnixMakefileGenerator3
::WriteConvenienceRules(std::ostream& ruleFileStream,
::WriteConvenienceRules(std::ostream& ruleFileStream,
std::set<cmStdString> &emitted)
{
std::vector<std::string> depends;
std::vector<std::string> depends;
std::vector<std::string> commands;
depends.push_back("cmake_check_build_system");
// write the target convenience rules
unsigned int i;
cmLocalUnixMakefileGenerator3 *lg;
@ -622,7 +621,7 @@ cmGlobalUnixMakefileGenerator3
ruleFileStream
<< "# Target rules for targets named "
<< t->second.GetName() << "\n\n";
// Write the rule.
commands.clear();
std::string tmp = cmake::GetCMakeFilesDirectoryPostSlash();
@ -631,16 +630,16 @@ cmGlobalUnixMakefileGenerator3
(tmp.c_str(),t->second.GetName()));
depends.clear();
depends.push_back("cmake_check_build_system");
lg->WriteMakeRule(ruleFileStream,
lg->WriteMakeRule(ruleFileStream,
"Build rule for target.",
t->second.GetName(), depends, commands,
true);
// Add a fast rule to build the target
std::string localName = lg->GetRelativeTargetDirectory(t->second);
std::string makefileName;
makefileName = localName;
makefileName += "/build.make";
makefileName += "/build.make";
depends.clear();
commands.clear();
std::string makeTargetName = localName;
@ -677,10 +676,10 @@ cmGlobalUnixMakefileGenerator3
//----------------------------------------------------------------------------
void
cmGlobalUnixMakefileGenerator3
::WriteConvenienceRules2(std::ostream& ruleFileStream,
::WriteConvenienceRules2(std::ostream& ruleFileStream,
cmLocalUnixMakefileGenerator3 *lg)
{
std::vector<std::string> depends;
std::vector<std::string> depends;
std::vector<std::string> commands;
std::string localName;
std::string makeTargetName;
@ -688,7 +687,7 @@ cmGlobalUnixMakefileGenerator3
// write the directory level rules for this local gen
this->WriteDirectoryRules2(ruleFileStream,lg);
depends.push_back("cmake_check_build_system");
// for each target Generate the rule files for each target.
@ -708,15 +707,15 @@ cmGlobalUnixMakefileGenerator3
localName = lg->GetRelativeTargetDirectory(t->second);
makefileName = localName;
makefileName += "/build.make";
bool needRequiresStep = this->NeedRequiresStep(t->second);
lg->WriteDivider(ruleFileStream);
ruleFileStream
<< "# Target rules for target "
<< localName << "\n\n";
commands.clear();
commands.clear();
makeTargetName = localName;
makeTargetName += "/depend";
commands.push_back(lg->GetRecursiveMakeCall
@ -734,7 +733,7 @@ cmGlobalUnixMakefileGenerator3
makeTargetName += "/build";
commands.push_back(lg->GetRecursiveMakeCall
(makefileName.c_str(),makeTargetName.c_str()));
// Write the rule.
localName += "/all";
depends.clear();
@ -766,7 +765,7 @@ cmGlobalUnixMakefileGenerator3
this->AppendGlobalTargetDepends(depends,t->second);
lg->WriteMakeRule(ruleFileStream, "All Build rule for target.",
localName.c_str(), depends, commands, true);
// add the all/all dependency
if(!this->IsExcluded(this->LocalGenerators[0], t->second))
{
@ -813,17 +812,17 @@ cmGlobalUnixMakefileGenerator3
depends.push_back("cmake_check_build_system");
localName = lg->GetRelativeTargetDirectory(t->second);
localName += "/rule";
lg->WriteMakeRule(ruleFileStream,
lg->WriteMakeRule(ruleFileStream,
"Build rule for subdir invocation for target.",
localName.c_str(), depends, commands, true);
// Add a target with the canonical name (no prefix, suffix or path).
commands.clear();
depends.clear();
depends.push_back(localName);
lg->WriteMakeRule(ruleFileStream, "Convenience name for target.",
t->second.GetName(), depends, commands, true);
// Add rules to prepare the target for installation.
if(t->second.NeedRelinkBeforeInstall(lg->ConfigurationName.c_str()))
{
@ -833,7 +832,7 @@ cmGlobalUnixMakefileGenerator3
commands.clear();
commands.push_back(lg->GetRecursiveMakeCall
(makefileName.c_str(), localName.c_str()));
lg->WriteMakeRule(ruleFileStream,
lg->WriteMakeRule(ruleFileStream,
"Pre-install relink rule for target.",
localName.c_str(), depends, commands, true);
@ -846,7 +845,7 @@ cmGlobalUnixMakefileGenerator3
"preinstall", depends, commands, true);
}
}
// add the clean rule
localName = lg->GetRelativeTargetDirectory(t->second);
makeTargetName = localName;
@ -987,7 +986,7 @@ void cmGlobalUnixMakefileGenerator3::WriteHelpRule
lg->AppendEcho(commands,"... all (the default if no target is provided)");
lg->AppendEcho(commands,"... clean");
lg->AppendEcho(commands,"... depend");
// Keep track of targets already listed.
std::set<cmStdString> emittedTargets;
@ -996,7 +995,7 @@ void cmGlobalUnixMakefileGenerator3::WriteHelpRule
cmLocalUnixMakefileGenerator3 *lg2;
for (i = 0; i < this->LocalGenerators.size(); ++i)
{
lg2 =
lg2 =
static_cast<cmLocalUnixMakefileGenerator3 *>(this->LocalGenerators[i]);
// for the passed in makefile or if this is the top Makefile wripte out
// the targets

View File

@ -22,19 +22,19 @@ class cmLocalUnixMakefileGenerator3;
* \brief Write a Unix makefiles.
*
* cmGlobalUnixMakefileGenerator3 manages UNIX build process for a tree
The basic approach of this generator is to produce Makefiles that will all
be run with the current working directory set to the Home Output
directory. The one exception to this is the subdirectory Makefiles which are
created as a convenience and just cd up to the Home Output directory and
invoke the main Makefiles.
invoke the main Makefiles.
The make process starts with Makefile. Makefile should only contain the
targets the user is likely to invoke directly from a make command line. No
internal targets should be in this file. Makefile2 contains the internal
targets that are required to make the process work.
Makefile2 in turn will recursively make targets in the correct order. Each
target has its own directory <target>.dir and its own makefile build.make in
that directory. Also in that directory is a couple makefiles per source file
@ -47,7 +47,7 @@ class cmLocalUnixMakefileGenerator3;
rescanned.
Rules for custom commands follow the same model as rules for source files.
*/
class cmGlobalUnixMakefileGenerator3 : public cmGlobalGenerator
@ -64,13 +64,13 @@ public:
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
///! Create a local generator appropriate to this Global Generator3
virtual cmLocalGenerator *CreateLocalGenerator();
/**
* Try to determine system infomation such as shared library
* extension, pthreads, byte order etc.
* extension, pthreads, byte order etc.
*/
virtual void EnableLanguage(std::vector<std::string>const& languages,
cmMakefile *, bool optional);
@ -78,11 +78,11 @@ public:
/**
* Generate the all required files for building this project/tree. This
* basically creates a series of LocalGenerators for each directory and
* requests that they Generate.
* requests that they Generate.
*/
virtual void Generate();
void WriteMainCMakefileLanguageRules(cmGeneratedFileStream& cmakefileStream,
std::vector<cmLocalGenerator *> &);
@ -91,7 +91,7 @@ public:
cmLocalUnixMakefileGenerator3 *);
// write the top lvel target rules
void WriteConvenienceRules(std::ostream& ruleFileStream,
void WriteConvenienceRules(std::ostream& ruleFileStream,
std::set<cmStdString> &emitted);
/** Get the command to use for a target that has no rule. This is
@ -105,23 +105,13 @@ public:
// change the build command for speed
virtual std::string GenerateBuildCommand
(const char* makeProgram,
const char *projectName, const char* additionalOptions,
const char *projectName, const char* additionalOptions,
const char *targetName,
const char* config, bool ignoreErrors, bool fast);
/** Record per-target progress information. */
void RecordTargetProgress(cmMakefileTargetGenerator* tg);
/**
* If true, the CMake variable CMAKE_VERBOSE_MAKEFILES doesn't have effect
* anymore. Set it to true when writing a generator where short output
* doesn't make sense, e.g. because the full output is parsed by an
* IDE/editor.
*/
bool GetForceVerboseMakefiles() { return this->ForceVerboseMakefiles; }
void SetForceVerboseMakefiles(bool enable)
{this->ForceVerboseMakefiles=enable;}
protected:
void WriteMainMakefile2();
void WriteMainCMakefile();
@ -169,8 +159,6 @@ protected:
// in the rule to satisfy the make program.
std::string EmptyRuleHackCommand;
bool ForceVerboseMakefiles;
// Store per-target progress counters.
struct TargetProgress
{

View File

@ -140,7 +140,7 @@ void cmLocalUnixMakefileGenerator3::Generate()
// write the local Makefile
this->WriteLocalMakefile();
// Write the cmake file with information for this directory.
this->WriteDirectoryInformationFile();
}
@ -149,7 +149,7 @@ void cmLocalUnixMakefileGenerator3::Generate()
void cmLocalUnixMakefileGenerator3::GetIndividualFileTargets
(std::vector<std::string>& targets)
{
for (std::map<cmStdString, LocalObjectInfo>::iterator lo =
for (std::map<cmStdString, LocalObjectInfo>::iterator lo =
this->LocalObjectFiles.begin();
lo != this->LocalObjectFiles.end(); ++lo)
{
@ -188,10 +188,10 @@ void cmLocalUnixMakefileGenerator3::WriteLocalMakefile()
{
ruleFileStream.SetCopyIfDifferent(true);
}
// write the all rules
this->WriteLocalAllRules(ruleFileStream);
// only write local targets unless at the top Keep track of targets already
// listed.
std::set<cmStdString> emittedTargets;
@ -203,7 +203,7 @@ void cmLocalUnixMakefileGenerator3::WriteLocalMakefile()
}
else
{
cmGlobalUnixMakefileGenerator3 *gg =
cmGlobalUnixMakefileGenerator3 *gg =
static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
gg->WriteConvenienceRules(ruleFileStream,emittedTargets);
}
@ -215,7 +215,7 @@ void cmLocalUnixMakefileGenerator3::WriteLocalMakefile()
// now write out the object rules
// for each object file name
for (std::map<cmStdString, LocalObjectInfo>::iterator lo =
for (std::map<cmStdString, LocalObjectInfo>::iterator lo =
this->LocalObjectFiles.begin();
lo != this->LocalObjectFiles.end(); ++lo)
{
@ -261,7 +261,7 @@ void cmLocalUnixMakefileGenerator3::WriteLocalMakefile()
// add a help target as long as there isn;t a real target named help
if(emittedTargets.insert("help").second)
{
cmGlobalUnixMakefileGenerator3 *gg =
cmGlobalUnixMakefileGenerator3 *gg =
static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
gg->WriteHelpRule(ruleFileStream,this);
}
@ -353,7 +353,7 @@ void cmLocalUnixMakefileGenerator3
localName += "/rule";
commands.clear();
depends.clear();
// Build the target for this pass.
std::string makefile2 = cmake::GetCMakeFilesDirectoryPostSlash();
makefile2 += "Makefile2";
@ -364,7 +364,7 @@ void cmLocalUnixMakefileGenerator3
cmLocalGenerator::START_OUTPUT);
this->WriteMakeRule(ruleFileStream, "Convenience name for target.",
localName.c_str(), depends, commands, true);
// Add a target with the canonical name (no prefix, suffix or path).
if(localName != t->second.GetName())
{
@ -378,7 +378,7 @@ void cmLocalUnixMakefileGenerator3
std::string makefileName = this->GetRelativeTargetDirectory(t->second);
makefileName += "/build.make";
// make sure the makefile name is suitable for a makefile
std::string makeTargetName =
std::string makeTargetName =
this->GetRelativeTargetDirectory(t->second);
makeTargetName += "/build";
localName = t->second.GetName();
@ -647,7 +647,7 @@ cmLocalUnixMakefileGenerator3
makefileStream
<< "# The CMake executable.\n"
<< "CMAKE_COMMAND = "
<< this->Convert(cmakecommand.c_str(), FULL, SHELL).c_str()
<< this->Convert(cmakecommand.c_str(), FULL, SHELL).c_str()
<< "\n"
<< "\n";
makefileStream
@ -656,7 +656,7 @@ cmLocalUnixMakefileGenerator3
<< this->Convert(cmakecommand.c_str(),FULL,SHELL).c_str()
<< " -E remove -f\n"
<< "\n";
if(const char* edit_cmd =
this->Makefile->GetDefinition("CMAKE_EDIT_COMMAND"))
{
@ -722,8 +722,7 @@ cmLocalUnixMakefileGenerator3
// "VERBOSE=1" to be added as a make variable which will change the
// name of this special target. This gives a make-time choice to
// the user.
if((this->Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE"))
|| (gg->GetForceVerboseMakefiles()))
if(this->Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE"))
{
makefileStream
<< "# Produce verbose output by default.\n"
@ -872,7 +871,7 @@ cmLocalUnixMakefileGenerator3
{
// Add a dependency on the rule file itself unless an option to skip
// it is specifically enabled by the user or project.
const char* nodep =
const char* nodep =
this->Makefile->GetDefinition("CMAKE_SKIP_RULE_DEPENDENCY");
if(!nodep || cmSystemTools::IsOff(nodep))
{
@ -969,7 +968,7 @@ cmLocalUnixMakefileGenerator3
{
// Build the command line in a single string.
const cmCustomCommandLine& commandLine = *cl;
std::string cmd = GetRealLocation(commandLine[0].c_str(),
std::string cmd = GetRealLocation(commandLine[0].c_str(),
this->ConfigurationName.c_str());
if (cmd.size())
{
@ -1283,7 +1282,7 @@ cmLocalUnixMakefileGenerator3
// see if the variable has been defined before and return
// the modified version of the variable
std::map<cmStdString, cmStdString>::iterator i =
std::map<cmStdString, cmStdString>::iterator i =
this->MakeVariableMap.find(unmodified);
if(i != this->MakeVariableMap.end())
{
@ -1404,7 +1403,7 @@ bool cmLocalUnixMakefileGenerator3::UpdateDependencies(const char* tgtInfo,
dirInfoFile += "/CMakeDirectoryInformation.cmake";
{
int result;
if(!ftc->FileTimeCompare(internalDependFile.c_str(),
if(!ftc->FileTimeCompare(internalDependFile.c_str(),
dirInfoFile.c_str(), &result) || result < 0)
{
if(verbose)
@ -1418,7 +1417,7 @@ bool cmLocalUnixMakefileGenerator3::UpdateDependencies(const char* tgtInfo,
needRescanDirInfo = true;
}
}
// Check the implicit dependencies to see if they are up to date.
// The build.make file may have explicit dependencies for the object
// files but these will not affect the scanning process so they need
@ -1433,11 +1432,11 @@ bool cmLocalUnixMakefileGenerator3::UpdateDependencies(const char* tgtInfo,
// cmDependsC::Check() fills the vector validDependencies() with the
// dependencies for those files where they are still valid, i.e. neither
// the files themselves nor any files they depend on have changed.
// We don't do that if the CMakeDirectoryInformation.cmake file has
// We don't do that if the CMakeDirectoryInformation.cmake file has
// changed, because then potentially all dependencies have changed.
// This information is given later on to cmDependsC, which then only
// rescans the files where it did not get valid dependencies via this
// dependency vector. This means that in the normal case, when only
// dependency vector. This means that in the normal case, when only
// few or one file have been edited, then also only this one file is
// actually scanned again, instead of all files for this target.
needRescanDependencies = !checker.Check(dependFile.c_str(),
@ -1485,7 +1484,7 @@ cmLocalUnixMakefileGenerator3
{
haveDirectoryInfo = true;
}
// Lookup useful directory information.
if(haveDirectoryInfo)
{
@ -1545,11 +1544,11 @@ cmLocalUnixMakefileGenerator3
this->WriteDisclaimer(ruleFileStream);
this->WriteDisclaimer(internalRuleFileStream);
// for each language we need to scan, scan it
// for each language we need to scan, scan it
const char *langStr = mf->GetSafeDefinition("CMAKE_DEPENDS_LANGUAGES");
std::vector<std::string> langs;
cmSystemTools::ExpandListArgument(langStr, langs);
for (std::vector<std::string>::iterator li =
for (std::vector<std::string>::iterator li =
langs.begin(); li != langs.end(); ++li)
{
// construct the checker
@ -1572,7 +1571,7 @@ cmLocalUnixMakefileGenerator3
scanner = new cmDependsJava();
}
#endif
if (scanner)
{
scanner->SetLocalGenerator(this);
@ -1686,25 +1685,25 @@ void cmLocalUnixMakefileGenerator3
cmLocalUnixMakefileGenerator3::EchoGlobal);
// Global targets store their rules in pre- and post-build commands.
this->AppendCustomDepends(depends,
this->AppendCustomDepends(depends,
glIt->second.GetPreBuildCommands());
this->AppendCustomDepends(depends,
this->AppendCustomDepends(depends,
glIt->second.GetPostBuildCommands());
this->AppendCustomCommands(commands,
this->AppendCustomCommands(commands,
glIt->second.GetPreBuildCommands(),
&glIt->second,
cmLocalGenerator::START_OUTPUT);
this->AppendCustomCommands(commands,
this->AppendCustomCommands(commands,
glIt->second.GetPostBuildCommands(),
&glIt->second,
cmLocalGenerator::START_OUTPUT);
std::string targetName = glIt->second.GetName();
this->WriteMakeRule(ruleFileStream, targetString.c_str(),
this->WriteMakeRule(ruleFileStream, targetString.c_str(),
targetName.c_str(), depends, commands, true);
// Provide a "/fast" version of the target.
depends.clear();
if((targetName == "install")
if((targetName == "install")
|| (targetName == "install_local")
|| (targetName == "install_strip"))
{
@ -1738,7 +1737,7 @@ void cmLocalUnixMakefileGenerator3
progressDir += cmake::GetCMakeFilesDirectory();
{
cmOStringStream progCmd;
progCmd <<
progCmd <<
"$(CMAKE_COMMAND) -E cmake_progress_start ";
progCmd << this->Convert(progressDir.c_str(),
cmLocalGenerator::FULL,
@ -1833,8 +1832,8 @@ void cmLocalUnixMakefileGenerator3
this->CreateCDCommand(commands,
this->Makefile->GetHomeOutputDirectory(),
cmLocalGenerator::START_OUTPUT);
this->WriteMakeRule(ruleFileStream, "clear depends",
"depend",
this->WriteMakeRule(ruleFileStream, "clear depends",
"depend",
depends, commands, true);
}
@ -2048,7 +2047,7 @@ cmLocalUnixMakefileGenerator3
cmd += "$(MAKE) -f ";
cmd += this->Convert(makefile,NONE,SHELL);
cmd += " ";
// Pass down verbosity level.
if(this->GetMakeSilentFlag().size())
{
@ -2125,7 +2124,7 @@ cmLocalUnixMakefileGenerator3
std::string
cmLocalUnixMakefileGenerator3::ConvertToQuotedOutputPath(const char* p)
{
// Split the path into its components.
std::vector<std::string> components;
cmSystemTools::SplitPath(p, components);
@ -2224,7 +2223,7 @@ void cmLocalUnixMakefileGenerator3
{
return;
}
if(!this->UnixCD)
{
// On Windows we must perform each step separately and then change

View File

@ -82,34 +82,9 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
{
std::vector<std::string> commands;
std::string relPath = this->LocalGenerator->GetHomeRelativeOutputPath();
std::string objTarget;
// Build list of dependencies.
std::vector<std::string> depends;
for(std::vector<std::string>::const_iterator obj = this->Objects.begin();
obj != this->Objects.end(); ++obj)
{
objTarget = relPath;
objTarget += *obj;
depends.push_back(objTarget);
}
// Add dependencies on targets that must be built first.
this->AppendTargetDepends(depends);
// Add a dependency on the rule file itself.
this->LocalGenerator->AppendRuleDepend(depends,
this->BuildFileNameFull.c_str());
for(std::vector<std::string>::const_iterator obj =
this->ExternalObjects.begin();
obj != this->ExternalObjects.end(); ++obj)
{
depends.push_back(*obj);
}
// from here up is the same for exe or lib
this->AppendLinkDepends(depends);
// Get the name of the executable to generate.
std::string targetName;

View File

@ -308,33 +308,10 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
// code duplication.
std::vector<std::string> commands;
std::string relPath = this->LocalGenerator->GetHomeRelativeOutputPath();
std::string objTarget;
// Build list of dependencies.
std::vector<std::string> depends;
for(std::vector<std::string>::const_iterator obj = this->Objects.begin();
obj != this->Objects.end(); ++obj)
{
objTarget = relPath;
objTarget += *obj;
depends.push_back(objTarget);
}
this->AppendLinkDepends(depends);
// Add dependencies on targets that must be built first.
this->AppendTargetDepends(depends);
// Add a dependency on the rule file itself.
this->LocalGenerator->AppendRuleDepend(depends,
this->BuildFileNameFull.c_str());
for(std::vector<std::string>::const_iterator obj
= this->ExternalObjects.begin();
obj != this->ExternalObjects.end(); ++obj)
{
depends.push_back(*obj);
}
// Get the language to use for linking this library.
const char* linkLanguage =
this->Target->GetLinkerLanguage(this->ConfigName);

View File

@ -1505,6 +1505,44 @@ void cmMakefileTargetGenerator
}
}
//----------------------------------------------------------------------------
void cmMakefileTargetGenerator
::AppendLinkDepends(std::vector<std::string>& depends)
{
// Add dependencies on the compiled object files.
std::string relPath = this->LocalGenerator->GetHomeRelativeOutputPath();
std::string objTarget;
for(std::vector<std::string>::const_iterator obj = this->Objects.begin();
obj != this->Objects.end(); ++obj)
{
objTarget = relPath;
objTarget += *obj;
depends.push_back(objTarget);
}
// Add dependencies on targets that must be built first.
this->AppendTargetDepends(depends);
// Add a dependency on the rule file itself.
this->LocalGenerator->AppendRuleDepend(depends,
this->BuildFileNameFull.c_str());
// Add dependencies on the external object files.
for(std::vector<std::string>::const_iterator obj
= this->ExternalObjects.begin();
obj != this->ExternalObjects.end(); ++obj)
{
depends.push_back(*obj);
}
// Add user-specified dependencies.
if(const char* linkDepends =
this->Target->GetProperty("LINK_DEPENDS"))
{
cmSystemTools::ExpandListArgument(linkDepends, depends);
}
}
//----------------------------------------------------------------------------
void cmMakefileTargetGenerator
::CloseFileStreams()

View File

@ -115,6 +115,9 @@ protected:
// append intertarget dependencies
void AppendTargetDepends(std::vector<std::string>& depends);
// Append link rule dependencies (objects, etc.).
void AppendLinkDepends(std::vector<std::string>& depends);
/** In order to support parallel builds for custom commands with
multiple outputs the outputs are given a serial order, and only
the first output actually has the build rule. Other outputs

View File

@ -531,6 +531,18 @@ void cmTarget::DefineProperties(cmake *cm)
"Use the MAP_IMPORTED_CONFIG_<CONFIG> property to map imported "
"configurations explicitly.");
cm->DefineProperty
("LINK_DEPENDS", cmProperty::TARGET,
"Additional files on which a target binary depends for linking.",
"Specifies a semicolon-separated list of full-paths to files on which "
"the link rule for this target depends. "
"The target binary will be linked if any of the named files is newer "
"than it."
"\n"
"This property is ignored by non-Makefile generators. "
"It is intended to specify dependencies on \"linker scripts\" for "
"custom Makefile link rules.");
cm->DefineProperty
("LINK_INTERFACE_LIBRARIES", cmProperty::TARGET,
"List public interface libraries for a shared library or executable.",

View File

@ -3304,28 +3304,37 @@ bool SystemInformationImplementation::QueryOSInformation()
{
case VER_PLATFORM_WIN32_NT:
// Test for the product.
if (osvi.dwMajorVersion <= 4)
if (osvi.dwMajorVersion <= 4)
{
this->OSRelease = "NT";
}
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0)
{
this->OSRelease = "2000";
}
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)
{
this->OSRelease = "XP";
}
// XP Professional x64
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
{
this->OSRelease = "XP";
}
#ifdef VER_NT_WORKSTATION
// Test for product type.
if (bOsVersionInfoEx)
if (bOsVersionInfoEx)
{
if (osvi.wProductType == VER_NT_WORKSTATION)
if (osvi.wProductType == VER_NT_WORKSTATION)
{
if (osvi.dwMajorVersion == 6)
if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0)
{
this->OSRelease = "Vista";
}
if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1)
{
this->OSRelease = "7";
}
// VER_SUITE_PERSONAL may not be defined
#ifdef VER_SUITE_PERSONAL
else

View File

@ -18,4 +18,4 @@ SET(KWSYS_DATE_STAMP_YEAR 2010)
SET(KWSYS_DATE_STAMP_MONTH 11)
# KWSys version date day component. Format is DD.
SET(KWSYS_DATE_STAMP_DAY 03)
SET(KWSYS_DATE_STAMP_DAY 11)

View File

@ -34,6 +34,12 @@ if(WIN32 AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel")
set(_cmake_options "-DCMAKE_EXE_LINKER_FLAGS=")
endif()
if("${CMAKE_GENERATOR}" MATCHES "Make")
set(TEST_LINK_DEPENDS ${BuildDepends_BINARY_DIR}/Project/linkdep.txt)
file(WRITE ${TEST_LINK_DEPENDS} "1")
endif()
list(APPEND _cmake_options "-DTEST_LINK_DEPENDS=${TEST_LINK_DEPENDS}")
file(MAKE_DIRECTORY ${BuildDepends_BINARY_DIR}/Project)
message("Creating Project/foo.cxx")
write_file(${BuildDepends_BINARY_DIR}/Project/foo.cxx
@ -131,6 +137,10 @@ file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_dir.hxx
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx
"static const char* zot_macro_tgt = \"zot_macro_tgt changed\";\n")
if(TEST_LINK_DEPENDS)
file(WRITE ${TEST_LINK_DEPENDS} "2")
endif()
help_xcode_depends()
message("Building project second time")
@ -194,3 +204,16 @@ if("${out}" STREQUAL "${VALUE_CHANGED}")
else("${out}" STREQUAL "${VALUE_CHANGED}")
message(SEND_ERROR "Project did not rebuild properly!")
endif("${out}" STREQUAL "${VALUE_CHANGED}")
if(TEST_LINK_DEPENDS)
set(linkdep ${BuildDepends_BINARY_DIR}/Project/linkdep${CMAKE_EXECUTABLE_SUFFIX})
if(${linkdep} IS_NEWER_THAN ${TEST_LINK_DEPENDS})
message("LINK_DEPENDS worked")
else()
message(SEND_ERROR "LINK_DEPENDS failed. Executable
${linkdep}
is not newer than dependency
${TEST_LINK_DEPENDS}
")
endif()
endif()

View File

@ -80,3 +80,8 @@ set_property(
DIRECTORY
PROPERTY IMPLICIT_DEPENDS_INCLUDE_TRANSFORM "ZOT_DIR(%)=<zot_%_dir.hxx>"
)
if(TEST_LINK_DEPENDS)
add_executable(linkdep linkdep.cxx)
set_property(TARGET linkdep PROPERTY LINK_DEPENDS ${TEST_LINK_DEPENDS})
endif()

View File

@ -0,0 +1,4 @@
int main()
{
return 0;
}

View File

@ -11,7 +11,7 @@ MACRO(ADD_TEST_MACRO NAME COMMAND)
--build-generator ${CMAKE_TEST_GENERATOR}
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--build-project ${proj}
--test-command ${COMMAND})
--test-command ${COMMAND} ${ARGN})
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/${dir}")
ENDMACRO(ADD_TEST_MACRO)
@ -21,7 +21,11 @@ IF(DEFINED ENV{HOME} AND NOT CTEST_NO_TEST_HOME)
FILE(MAKE_DIRECTORY "${TEST_HOME}")
FILE(WRITE "${TEST_HOME}/.cvspass" ":pserver:anoncvs@www.cmake.org:/cvsroot/KWSys A\n")
SET(TEST_HOME_ENV_CODE "# Fake a user home directory to avoid polluting the real one.
SET(ENV{HOME} \"${TEST_HOME}\")")
# But provide original ENV{HOME} value in ENV{CTEST_REAL_HOME} for tests that
# need access to the real HOME directory.
SET(ENV{CTEST_REAL_HOME} \"\$ENV{HOME}\")
SET(ENV{HOME} \"${TEST_HOME}\")
")
ENDIF()
# Choose a default configuration for CTest tests.
@ -1768,6 +1772,32 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
-D source_dir:STRING=${CMAKE_CURRENT_SOURCE_DIR}/Tutorial/Step3
-D CMAKE_CTEST_COMMAND:STRING=${CMAKE_CTEST_COMMAND}
-P ${CMAKE_CURRENT_SOURCE_DIR}/CMakeWizardTest.cmake)
# If the cache variable CMAKE_CONTRACT_PROJECTS is set
# then the dashboard will run a contract with CMake test of that
# name. For example CMAKE_CONTRACT_PROJECTS = vtk542 would run
# the vtk542 contract test.
# For each Contract test, the project should provide a directory
# with at least one CMakeLists.txt file that uses ExternalProject
# to download and configure the project. The directory should also
# contain a RunTest.cmake file that has a single set of the format:
# SET(project_RUN_TEST testToRun)
# The testToRun should be a test executable that can be run to
# smoke test the build.
FOREACH(project ${CMAKE_CONTRACT_PROJECTS})
INCLUDE(Contracts/${project}/RunTest.cmake)
ADD_TEST_MACRO(Contracts.${project}
${${project}_RUN_TEST})
# Contract test timeout in seconds.
# Default to 6 hours.
IF(DEFINED ${project}_TEST_TIMEOUT)
SET(timeout ${${project}_TEST_TIMEOUT})
ELSEIF(CMAKE_CONTRACT_TEST_TIMEOUT_DEFAULT)
SET(timeout ${CMAKE_CONTRACT_TEST_TIMEOUT_DEFAULT})
ELSE()
SET(timeout 21600)
ENDIF()
SET_TESTS_PROPERTIES(Contracts.${project} PROPERTIES TIMEOUT ${timeout})
ENDFOREACH()
ENDIF(BUILD_TESTING)
SUBDIRS(CMakeTests)

View File

@ -0,0 +1,114 @@
cmake_minimum_required(VERSION 2.8)
project(cse-snapshot)
include(ExternalProject)
include("${CMAKE_CURRENT_SOURCE_DIR}/LocalOverrides.cmake" OPTIONAL)
include("${CMAKE_CURRENT_BINARY_DIR}/LocalOverrides.cmake" OPTIONAL)
if(NOT DEFINED HOME)
if(DEFINED ENV{CTEST_REAL_HOME})
set(HOME "$ENV{CTEST_REAL_HOME}")
else()
set(HOME "$ENV{HOME}")
endif()
endif()
message(STATUS "HOME='${HOME}'")
if(NOT DEFINED repo)
set(repo "git://public.kitware.com/cse.git")
endif()
message(STATUS "repo='${repo}'")
if(NOT DEFINED tag)
set(tag "cc1dcb95439a21ab1d58f444d93481598414196e")
endif()
message(STATUS "tag='${tag}'")
string(SUBSTRING "${tag}" 0 8 shorttag)
set(base_dir "${HOME}/.cmake/Contracts/${PROJECT_NAME}/${shorttag}")
set(binary_dir "${base_dir}/build")
set(script_dir "${base_dir}")
set(source_dir "${base_dir}/src")
if(NOT DEFINED BUILDNAME)
set(BUILDNAME "CMakeContract-${shorttag}")
endif()
message(STATUS "BUILDNAME='${BUILDNAME}'")
if(NOT DEFINED SITE)
site_name(SITE)
endif()
message(STATUS "SITE='${SITE}'")
if(NOT DEFINED PROCESSOR_COUNT)
# Unknown:
set(PROCESSOR_COUNT 0)
# Linux:
set(cpuinfo_file "/proc/cpuinfo")
if(EXISTS "${cpuinfo_file}")
file(STRINGS "${cpuinfo_file}" procs REGEX "^processor.: [0-9]+$")
list(LENGTH procs PROCESSOR_COUNT)
endif()
# Mac:
if(APPLE)
find_program(cmd_sysctl "sysctl")
if(cmd_sysctl)
execute_process(COMMAND ${cmd_sysctl} -n hw.ncpu
OUTPUT_VARIABLE PROCESSOR_COUNT
OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
endif()
# Windows:
if(WIN32)
set(PROCESSOR_COUNT "$ENV{NUMBER_OF_PROCESSORS}")
endif()
endif()
message(STATUS "PROCESSOR_COUNT='${PROCESSOR_COUNT}'")
find_package(Git)
if(NOT GIT_EXECUTABLE)
message(FATAL_ERROR "error: could not find git")
# adjust PATH to find git, or set GIT_EXECUTABLE in LocalOverrides.cmake
endif()
message(STATUS "GIT_EXECUTABLE='${GIT_EXECUTABLE}'")
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/Dashboard.cmake.in"
"${script_dir}/Dashboard.cmake"
@ONLY)
# Source dir for this project exists outside the CMake build tree because it
# is absolutely huge.
#
if(EXISTS "${source_dir}/.git")
# If it exists already, download is a complete no-op:
ExternalProject_Add(download-${PROJECT_NAME}
DOWNLOAD_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
else()
# If it does not yet exist, download clones the git repository:
ExternalProject_Add(download-${PROJECT_NAME}
SOURCE_DIR "${source_dir}"
GIT_REPOSITORY "${repo}"
GIT_TAG "${tag}"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
endif()
ExternalProject_Add(build-${PROJECT_NAME}
DOWNLOAD_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND ${CMAKE_CTEST_COMMAND} -S "${script_dir}/Dashboard.cmake"
INSTALL_COMMAND ""
DEPENDS download-${PROJECT_NAME}
)

View File

@ -0,0 +1,76 @@
# This "ctest -S" script may be configured to drive a nightly dashboard on any
# Linux machine.
#
set(CTEST_BINARY_DIRECTORY "@binary_dir@")
set(CTEST_BUILD_NAME "@BUILDNAME@")
set(CTEST_SITE "@SITE@")
set(CTEST_SOURCE_DIRECTORY "@source_dir@")
set(PROCESSOR_COUNT "@PROCESSOR_COUNT@")
# Assume a Linux build, with a make that supports -j. Modify this script if
# assumption is ever invalid.
#
if(PROCESSOR_COUNT)
set(CTEST_BUILD_FLAGS "-j${PROCESSOR_COUNT}")
endif()
set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}")
message("Cleaning binary dir '${CTEST_BINARY_DIRECTORY}'")
ctest_empty_binary_directory("${CTEST_BINARY_DIRECTORY}")
# Intentionally no ctest_update step in this script. This script is run as a
# "Contract" test on a CMake dashboard submission using the just-built ctest
# as the driver. The download step in the Contract CMakeLists file takes care
# of setting up the source tree before calling this ctest -S script. The idea
# is that the source tree will be the same every day, so there should not be
# an "update" step for this build.
message("Configuring CSE in binary dir '${CTEST_BINARY_DIRECTORY}'")
set_property(GLOBAL PROPERTY SubProject "CSE-toplevel")
set_property(GLOBAL PROPERTY Label "CSE-toplevel")
ctest_start("Experimental")
set(CSE_TOPLEVEL_OPTIONS
-DEXTERNAL_PROJECT_DASHBOARD_BUILD:BOOL=ON
-DEXTERNAL_PROJECT_TESTS:BOOL=ON
-DCSE_INSTALL_PREFIX:PATH=${CTEST_BINARY_DIRECTORY}/built
-DCSE_SUBSET:STRING=ALL
-DCTEST_SITE:STRING=${CTEST_SITE}
)
ctest_configure(OPTIONS "${CSE_TOPLEVEL_OPTIONS}")
# The configure step produces a file listing the CSE packages and dependencies.
# This file also generates Project.xml and stores it in ${PROJECT_XML}.
#
set(subprojects "")
if(EXISTS "${CTEST_BINARY_DIRECTORY}/CSEBuildtimeDepends.cmake")
message("Including CSEBuildtimeDepends.cmake")
include("${CTEST_BINARY_DIRECTORY}/CSEBuildtimeDepends.cmake")
set(subprojects ${CSE_ALL_SORTED})
message("Submitting Project.xml")
ctest_submit(FILES ${PROJECT_XML})
endif()
message("Submitting CSE configure results")
ctest_submit()
if(subprojects)
message("Building by looping over subprojects...")
foreach(subproject ${subprojects})
message("########## ${subproject} ##########")
set_property(GLOBAL PROPERTY SubProject "${subproject}")
set_property(GLOBAL PROPERTY Label "${subproject}")
ctest_build(TARGET "${subproject}" APPEND)
message("Submitting ${subproject} build results")
ctest_submit(PARTS build)
endforeach()
else()
message("Building all...")
ctest_build(APPEND)
message("Submitting build results")
ctest_submit(PARTS build)
endif()

View File

@ -0,0 +1,3 @@
set(exe "$ENV{HOME}/.cmake/Contracts/cse-snapshot/510345e4/build/built/Release/git-1.6.5.2/bin/git")
set(args help clone)
set(cse-snapshot_RUN_TEST ${exe} ${args})

View File

@ -0,0 +1,30 @@
# The VTK external project for CMake
# ---------------------------------------------------------------------------
cmake_minimum_required(VERSION 2.8)
project(vtk542)
include(ExternalProject)
set(vtk_source "${CMAKE_CURRENT_BINARY_DIR}/VTK-source")
set(vtk_binary "${CMAKE_CURRENT_BINARY_DIR}/VTK-build")
ExternalProject_Add(VTK
DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}
URL "http://www.vtk.org/files/release/5.4/vtk-5.4.2.tar.gz"
URL_MD5 c2c797091d4b2128d9a1bd32c4b78227
SOURCE_DIR ${vtk_source}
BINARY_DIR ${vtk_binary}
CMAKE_GENERATOR "${CMAKE_GENERATOR}"
CMAKE_ARGS
-DBUILD_EXAMPLES:BOOL=ON
-DBUILD_TESTING:BOOL=ON
INSTALL_COMMAND ""
)
# make it so that each build will run make in the VTK build tree
ExternalProject_Add_Step(VTK forcebuild
COMMAND ${CMAKE_COMMAND}
-E remove ${CMAKE_CURRENT_BUILD_DIR}/VTK-prefix/src/VTK-stamp/VTK-build
DEPENDEES configure
DEPENDERS build
ALWAYS 1
)

View File

@ -0,0 +1 @@
SET(vtk542_RUN_TEST VTK-build/bin/CommonCxxTests otherArrays)

View File

@ -152,10 +152,6 @@ if(BUILD_TESTING)
${LIBXML2_XMLLINT_EXECUTABLE} --valid --noout --nonet --path .
${HTML_FILES}
)
else()
add_test(CMake.HTML
${LIBXML2_XMLLINT_EXECUTABLE} --valid --noout ${HTML_FILES}
)
endif()
endif()
endif()

View File

@ -512,6 +512,8 @@ CHECK_TYPE_SIZE(int64_t INT64_T)
IF(NOT HAVE_INT64_T)
IF(WIN32)
SET(int64_t "__int64")
ELSE(WIN32)
SET(int64_t "long long")
ENDIF(WIN32)
ENDIF(NOT HAVE_INT64_T)
#
@ -568,9 +570,7 @@ ENDIF(NOT HAVE_UINT16_T)
#
CHECK_TYPE_SIZE(uint32_t UINT32_T)
IF(NOT HAVE_UINT32_T)
IF(WIN32)
SET(uint32_t "unsigned int")
ENDIF(WIN32)
SET(uint32_t "unsigned int")
ENDIF(NOT HAVE_UINT32_T)
CHECK_TYPE_SIZE(int32_t INT32_T)
IF(NOT HAVE_INT32_T)
@ -581,6 +581,8 @@ CHECK_TYPE_SIZE(uint64_t UINT64_T)
IF(NOT HAVE_UINT64_T)
IF(WIN32)
SET(uint64_t "unsigned __int64")
ELSE(WIN32)
SET(uint64_t "unsigned long long")
ENDIF(WIN32)
ENDIF(NOT HAVE_UINT64_T)
#

View File

@ -1,4 +1,7 @@
/* config.h. Generated from config.h.cmake by cmake configure */
#if defined(__osf__)
# define _OSF_SOURCE
#endif
/* Version number of bsdcpio */
#cmakedefine BSDCPIO_VERSION_STRING "${BSDCPIO_VERSION_STRING}"

View File

@ -37,7 +37,7 @@
*/
#if defined(__BORLANDC__) && __BORLANDC__ >= 0x560
# define __LA_STDINT_H <stdint.h>
#elif !defined(__WATCOMC__) && !defined(_MSC_VER) && !defined(__INTERIX) && !defined(__BORLANDC__)
#elif !defined(__WATCOMC__) && !defined(_MSC_VER) && !defined(__INTERIX) && !defined(__BORLANDC__) && !defined(__osf__)
# define __LA_STDINT_H <inttypes.h>
#endif
@ -68,7 +68,11 @@
# endif
#else
#include <unistd.h> /* ssize_t, uid_t, and gid_t */
#define __LA_INT64_T int64_t
#if defined(__osf__)
# define __LA_INT64_T long long
#else
# define __LA_INT64_T int64_t
#endif
#define __LA_SSIZE_T ssize_t
#define __LA_UID_T uid_t
#define __LA_GID_T gid_t

View File

@ -48,7 +48,7 @@
*/
#if defined(__WATCOMC__) || defined(__sgi) || defined(__hpux) || defined(__BORLANDC__) || defined(__SUNPRO_C)
#define inline
#elif defined(_MSC_VER)
#elif defined(_MSC_VER) || defined(__osf__)
#define inline __inline
#endif

View File

@ -61,7 +61,11 @@
# endif
#else
# include <unistd.h>
#define __LA_INT64_T int64_t
#ifdef __osf__
# define __LA_INT64_T long long
#else
# define __LA_INT64_T int64_t
#endif
#define __LA_UID_T uid_t
#define __LA_GID_T gid_t
#define __LA_DEV_T dev_t