Merge branch 'master' into AutomocIncludedDotMocFileHandling

Conflicts:
	Source/cmTarget.cxx
This commit is contained in:
David Cole 2011-12-07 16:29:13 -05:00
commit 2d1195123e
201 changed files with 7588 additions and 567 deletions

1
.gitattributes vendored
View File

@ -8,6 +8,7 @@ configure crlf=input
*.sh.in crlf=input *.sh.in crlf=input
*.bat -crlf *.bat -crlf
*.bat.in -crlf
*.dsp -crlf *.dsp -crlf
*.dsptemplate -crlf *.dsptemplate -crlf
*.dsw -crlf *.dsw -crlf

View File

@ -213,6 +213,12 @@ ENDMACRO(CMAKE_SET_TARGET_FOLDER)
# Simply to improve readability of the main script. # Simply to improve readability of the main script.
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
MACRO (CMAKE_BUILD_UTILITIES) MACRO (CMAKE_BUILD_UTILITIES)
#---------------------------------------------------------------------
# Create the KWIML library for CMake.
SET(KWIML cmIML)
SET(KWIML_HEADER_ROOT ${CMake_BINARY_DIR}/Utilities)
ADD_SUBDIRECTORY(Utilities/KWIML)
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# Create the kwsys library for CMake. # Create the kwsys library for CMake.
SET(KWSYS_NAMESPACE cmsys) SET(KWSYS_NAMESPACE cmsys)

View File

@ -1,5 +1,5 @@
CMake - Cross Platform Makefile Generator CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without

View File

@ -3,6 +3,7 @@ set(AM_HEADERS "@_moc_headers@" )
set(AM_MOC_COMPILE_DEFINITIONS "@_moc_compile_defs@") set(AM_MOC_COMPILE_DEFINITIONS "@_moc_compile_defs@")
set(AM_MOC_DEFINITIONS "@_moc_defs@") set(AM_MOC_DEFINITIONS "@_moc_defs@")
set(AM_MOC_INCLUDES "@_moc_incs@") set(AM_MOC_INCLUDES "@_moc_incs@")
set(AM_MOC_OPTIONS "@_moc_options@")
set(AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE "@CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE@") set(AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE "@CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE@")
set(AM_CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@/") set(AM_CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@/")
set(AM_CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@/") set(AM_CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@/")
@ -10,5 +11,6 @@ set(AM_QT_MOC_EXECUTABLE "@QT_MOC_EXECUTABLE@")
set(AM_CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@/") set(AM_CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@/")
set(AM_CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@/") set(AM_CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@/")
set(AM_QT_VERSION_MAJOR "@QT_VERSION_MAJOR@" ) set(AM_QT_VERSION_MAJOR "@QT_VERSION_MAJOR@" )
set(AM_Qt5Core_VERSION_MAJOR "@Qt5Core_VERSION_MAJOR@" )
set(AM_TARGET_NAME "@_moc_target_name@") set(AM_TARGET_NAME "@_moc_target_name@")
set(AM_STRICT_MODE "@_moc_strict_mode@") set(AM_STRICT_MODE "@_moc_strict_mode@")

View File

@ -48,6 +48,9 @@
#elif defined(__TI_COMPILER_VERSION__) #elif defined(__TI_COMPILER_VERSION__)
# define COMPILER_ID "TI_DSP" # define COMPILER_ID "TI_DSP"
#elif defined(__TINYC__)
# define COMPILER_ID "TinyCC"
#elif defined(__SCO_VERSION__) #elif defined(__SCO_VERSION__)
# define COMPILER_ID "SCO" # define COMPILER_ID "SCO"

View File

@ -68,6 +68,12 @@ IF (NOT _INCLUDED_FILE)
INCLUDE(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL) INCLUDE(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
ENDIF (NOT _INCLUDED_FILE) ENDIF (NOT _INCLUDED_FILE)
IF(CMAKE_C_SIZEOF_DATA_PTR)
FOREACH(f ${CMAKE_C_ABI_FILES})
INCLUDE(${f})
ENDFOREACH()
UNSET(CMAKE_C_ABI_FILES)
ENDIF()
# This should be included before the _INIT variables are # This should be included before the _INIT variables are
# used to initialize the cache. Since the rule variables # used to initialize the cache. Since the rule variables

View File

@ -67,6 +67,12 @@ IF (NOT _INCLUDED_FILE)
INCLUDE(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL) INCLUDE(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
ENDIF (NOT _INCLUDED_FILE) ENDIF (NOT _INCLUDED_FILE)
IF(CMAKE_CXX_SIZEOF_DATA_PTR)
FOREACH(f ${CMAKE_CXX_ABI_FILES})
INCLUDE(${f})
ENDFOREACH()
UNSET(CMAKE_CXX_ABI_FILES)
ENDIF()
# This should be included before the _INIT variables are # This should be included before the _INIT variables are
# used to initialize the cache. Since the rule variables # used to initialize the cache. Since the rule variables

View File

@ -57,6 +57,8 @@ FUNCTION(CMAKE_DETERMINE_COMPILER_ABI lang src)
IF(ABI_SIZEOF_DPTR) IF(ABI_SIZEOF_DPTR)
SET(CMAKE_${lang}_SIZEOF_DATA_PTR "${ABI_SIZEOF_DPTR}" PARENT_SCOPE) SET(CMAKE_${lang}_SIZEOF_DATA_PTR "${ABI_SIZEOF_DPTR}" PARENT_SCOPE)
ELSEIF(CMAKE_${lang}_SIZEOF_DATA_PTR_DEFAULT)
SET(CMAKE_${lang}_SIZEOF_DATA_PTR "${CMAKE_${lang}_SIZEOF_DATA_PTR_DEFAULT}" PARENT_SCOPE)
ENDIF(ABI_SIZEOF_DPTR) ENDIF(ABI_SIZEOF_DPTR)
IF(ABI_NAME) IF(ABI_NAME)

View File

@ -70,8 +70,8 @@ ENDIF()
SET(CMAKE_ECLIPSE_MAKE_ARGUMENTS "${_CMAKE_ECLIPSE_INITIAL_MAKE_ARGS}" CACHE STRING "Additional command line arguments when Eclipse invokes make. Enter e.g. -j<some_number> to get parallel builds") SET(CMAKE_ECLIPSE_MAKE_ARGUMENTS "${_CMAKE_ECLIPSE_INITIAL_MAKE_ARGS}" CACHE STRING "Additional command line arguments when Eclipse invokes make. Enter e.g. -j<some_number> to get parallel builds")
# This variable is used by the Eclipse generator in out-of-source builds only. # This variable is used by the Eclipse generator in out-of-source builds only.
SET(ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT FALSE CACHE BOOL "If enabled, CMake will generate a source project for Eclipse in CMAKE_SOURCE_DIR") SET(CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT FALSE CACHE BOOL "If enabled, CMake will generate a source project for Eclipse in CMAKE_SOURCE_DIR")
MARK_AS_ADVANCED(ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT) MARK_AS_ADVANCED(CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT)
# Determine builtin macros and include dirs: # Determine builtin macros and include dirs:
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake) INCLUDE(${CMAKE_CURRENT_LIST_DIR}/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake)

View File

@ -15,6 +15,11 @@
PRINT *, 'INFO:sizeof_dptr[4]' PRINT *, 'INFO:sizeof_dptr[4]'
#elif defined(_M_IX86) #elif defined(_M_IX86)
PRINT *, 'INFO:sizeof_dptr[4]' PRINT *, 'INFO:sizeof_dptr[4]'
#elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 8
PRINT *, 'INFO:sizeof_dptr[8]'
#elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 4
PRINT *, 'INFO:sizeof_dptr[4]'
#endif #endif
#if 0 #if 0

View File

@ -44,6 +44,12 @@ IF (NOT _INCLUDED_FILE)
INCLUDE(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL) INCLUDE(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
ENDIF (NOT _INCLUDED_FILE) ENDIF (NOT _INCLUDED_FILE)
IF(CMAKE_Fortran_SIZEOF_DATA_PTR)
FOREACH(f ${CMAKE_Fortran_ABI_FILES})
INCLUDE(${f})
ENDFOREACH()
UNSET(CMAKE_Fortran_ABI_FILES)
ENDIF()
# This should be included before the _INIT variables are # This should be included before the _INIT variables are
# used to initialize the cache. Since the rule variables # used to initialize the cache. Since the rule variables

View File

@ -76,5 +76,11 @@ ELSE(NOT CMAKE_C_COMPILER_WORKS)
) )
INCLUDE(${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCCompiler.cmake) INCLUDE(${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCCompiler.cmake)
ENDIF(CMAKE_C_COMPILER_FORCED) ENDIF(CMAKE_C_COMPILER_FORCED)
IF(CMAKE_C_SIZEOF_DATA_PTR)
FOREACH(f ${CMAKE_C_ABI_FILES})
INCLUDE(${f})
ENDFOREACH()
UNSET(CMAKE_C_ABI_FILES)
ENDIF()
ENDIF(NOT CMAKE_C_COMPILER_WORKS) ENDIF(NOT CMAKE_C_COMPILER_WORKS)

View File

@ -69,4 +69,10 @@ ELSE(NOT CMAKE_CXX_COMPILER_WORKS)
) )
INCLUDE(${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCXXCompiler.cmake) INCLUDE(${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCXXCompiler.cmake)
ENDIF(CMAKE_CXX_COMPILER_FORCED) ENDIF(CMAKE_CXX_COMPILER_FORCED)
IF(CMAKE_CXX_SIZEOF_DATA_PTR)
FOREACH(f ${CMAKE_CXX_ABI_FILES})
INCLUDE(${f})
ENDFOREACH()
UNSET(CMAKE_CXX_ABI_FILES)
ENDIF()
ENDIF(NOT CMAKE_CXX_COMPILER_WORKS) ENDIF(NOT CMAKE_CXX_COMPILER_WORKS)

View File

@ -92,4 +92,10 @@ ELSE(NOT CMAKE_Fortran_COMPILER_WORKS)
) )
INCLUDE(${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeFortranCompiler.cmake) INCLUDE(${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeFortranCompiler.cmake)
ENDIF(CMAKE_Fortran_COMPILER_FORCED) ENDIF(CMAKE_Fortran_COMPILER_FORCED)
IF(CMAKE_Fortran_SIZEOF_DATA_PTR)
FOREACH(f ${CMAKE_Fortran_ABI_FILES})
INCLUDE(${f})
ENDFOREACH()
UNSET(CMAKE_Fortran_ABI_FILES)
ENDIF()
ENDIF(NOT CMAKE_Fortran_COMPILER_WORKS) ENDIF(NOT CMAKE_Fortran_COMPILER_WORKS)

View File

@ -7,7 +7,9 @@
# the specifics CPACK_RPM_XXX variables. CPackRPM is a component aware # the specifics CPACK_RPM_XXX variables. CPackRPM is a component aware
# generator so when CPACK_RPM_COMPONENT_INSTALL is ON some more # generator so when CPACK_RPM_COMPONENT_INSTALL is ON some more
# CPACK_RPM_<ComponentName>_XXXX variables may be used in order # CPACK_RPM_<ComponentName>_XXXX variables may be used in order
# to have component specific values. # to have component specific values. Note however that <componentName>
# refers to the **grouping name**. This may be either a component name
# or a component GROUP name.
# Usually those vars correspond to RPM spec file entities, one may find # Usually those vars correspond to RPM spec file entities, one may find
# information about spec files here http://www.rpm.org/wiki/Docs. # information about spec files here http://www.rpm.org/wiki/Docs.
# You'll find a detailed usage of CPackRPM on the wiki: # You'll find a detailed usage of CPackRPM on the wiki:
@ -101,9 +103,11 @@
# If CPACK_SET_DESTDIR is set then you will get a warning message # If CPACK_SET_DESTDIR is set then you will get a warning message
# but if there is file installed with absolute path you'll get # but if there is file installed with absolute path you'll get
# unexpected behavior. # unexpected behavior.
# CPACK_RPM_SPEC_INSTALL_POST # CPACK_RPM_SPEC_INSTALL_POST [deprecated]
# Mandatory : NO # Mandatory : NO
# Default : - # Default : -
# This way of specifying post-install script is deprecated use
# CPACK_RPM_POST_INSTALL_SCRIPT_FILE
# May be used to set an RPM post-install command inside the spec file. # May be used to set an RPM post-install command inside the spec file.
# For example setting it to "/bin/true" may be used to prevent # For example setting it to "/bin/true" may be used to prevent
# rpmbuild to strip binaries. # rpmbuild to strip binaries.
@ -161,7 +165,7 @@
# Mandatory : NO # Mandatory : NO
# Default : - # Default : -
# May be used to embed a changelog in the spec file. # May be used to embed a changelog in the spec file.
# The refered file will be read and directly put after the %changelog # The refered file will be read and directly put after the %changelog
# section. # section.
#============================================================================= #=============================================================================
@ -462,20 +466,31 @@ else(CPACK_RPM_PACKAGE_COMPONENT)
set(CPACK_RPM_POST_INSTALL_READ_FILE ${CPACK_RPM_POST_INSTALL_SCRIPT_FILE}) set(CPACK_RPM_POST_INSTALL_READ_FILE ${CPACK_RPM_POST_INSTALL_SCRIPT_FILE})
set(CPACK_RPM_POST_UNINSTALL_READ_FILE ${CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE}) set(CPACK_RPM_POST_UNINSTALL_READ_FILE ${CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE})
endif(CPACK_RPM_PACKAGE_COMPONENT) endif(CPACK_RPM_PACKAGE_COMPONENT)
# Handle post-install file if it has been specified
if(CPACK_RPM_POST_INSTALL_READ_FILE) if(CPACK_RPM_POST_INSTALL_READ_FILE)
if(EXISTS ${CPACK_RPM_POST_INSTALL_READ_FILE}) if(EXISTS ${CPACK_RPM_POST_INSTALL_READ_FILE})
file(READ ${CPACK_RPM_POST_INSTALL_READ_FILE} CPACK_RPM_SPEC_POSTINSTALL) file(READ ${CPACK_RPM_POST_INSTALL_READ_FILE} CPACK_RPM_SPEC_POSTINSTALL)
else(EXISTS ${CPACK_RPM_POST_INSTALL_READ_FILE}) else(EXISTS ${CPACK_RPM_POST_INSTALL_READ_FILE})
message("CPackRPM:Warning: CPACK_RPM_POST_INSTALL_SCRIPT_FILE <${CPACK_RPM_POST_INSTALL_READ_FILE}> does not exists - ignoring") message("CPackRPM:Warning: CPACK_RPM_POST_INSTALL_SCRIPT_FILE <${CPACK_RPM_POST_INSTALL_READ_FILE}> does not exists - ignoring")
endif(EXISTS ${CPACK_RPM_POST_INSTALL_READ_FILE}) endif(EXISTS ${CPACK_RPM_POST_INSTALL_READ_FILE})
else(CPACK_RPM_POST_INSTALL_READ_FILE)
# reset SPEC var value if no post install file has been specified
# (either globally or component-wise)
set(CPACK_RPM_SPEC_POSTINSTALL "")
endif(CPACK_RPM_POST_INSTALL_READ_FILE) endif(CPACK_RPM_POST_INSTALL_READ_FILE)
# Handle post-uninstall file if it has been specified
if(CPACK_RPM_POST_UNINSTALL_READ_FILE) if(CPACK_RPM_POST_UNINSTALL_READ_FILE)
if(EXISTS ${CPACK_RPM_POST_UNINSTALL_READ_FILE}) if(EXISTS ${CPACK_RPM_POST_UNINSTALL_READ_FILE})
file(READ ${CPACK_RPM_POST_UNINSTALL_READ_FILE} CPACK_RPM_SPEC_POSTUNINSTALL) file(READ ${CPACK_RPM_POST_UNINSTALL_READ_FILE} CPACK_RPM_SPEC_POSTUNINSTALL)
else(EXISTS ${CPACK_RPM_POST_UNINSTALL_READ_FILE}) else(EXISTS ${CPACK_RPM_POST_UNINSTALL_READ_FILE})
message("CPackRPM:Warning: CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE <${CPACK_RPM_POST_UNINSTALL_READ_FILE}> does not exists - ignoring") message("CPackRPM:Warning: CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE <${CPACK_RPM_POST_UNINSTALL_READ_FILE}> does not exists - ignoring")
endif(EXISTS ${CPACK_RPM_POST_UNINSTALL_READ_FILE}) endif(EXISTS ${CPACK_RPM_POST_UNINSTALL_READ_FILE})
else(CPACK_RPM_POST_UNINSTALL_READ_FILE)
# reset SPEC var value if no post uninstall file has been specified
# (either globally or component-wise)
set(CPACK_RPM_SPEC_POSTUNINSTALL "")
endif(CPACK_RPM_POST_UNINSTALL_READ_FILE) endif(CPACK_RPM_POST_UNINSTALL_READ_FILE)
# CPACK_RPM_PRE_INSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_PRE_INSTALL_SCRIPT_FILE) # CPACK_RPM_PRE_INSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_PRE_INSTALL_SCRIPT_FILE)
@ -498,20 +513,31 @@ else(CPACK_RPM_PACKAGE_COMPONENT)
set(CPACK_RPM_PRE_INSTALL_READ_FILE ${CPACK_RPM_PRE_INSTALL_SCRIPT_FILE}) set(CPACK_RPM_PRE_INSTALL_READ_FILE ${CPACK_RPM_PRE_INSTALL_SCRIPT_FILE})
set(CPACK_RPM_PRE_UNINSTALL_READ_FILE ${CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE}) set(CPACK_RPM_PRE_UNINSTALL_READ_FILE ${CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE})
endif(CPACK_RPM_PACKAGE_COMPONENT) endif(CPACK_RPM_PACKAGE_COMPONENT)
# Handle pre-install file if it has been specified
if(CPACK_RPM_PRE_INSTALL_READ_FILE) if(CPACK_RPM_PRE_INSTALL_READ_FILE)
if(EXISTS ${CPACK_RPM_PRE_INSTALL_READ_FILE}) if(EXISTS ${CPACK_RPM_PRE_INSTALL_READ_FILE})
file(READ ${CPACK_RPM_PRE_INSTALL_READ_FILE} CPACK_RPM_SPEC_PREINSTALL) file(READ ${CPACK_RPM_PRE_INSTALL_READ_FILE} CPACK_RPM_SPEC_PREINSTALL)
else(EXISTS ${CPACK_RPM_PRE_INSTALL_READ_FILE}) else(EXISTS ${CPACK_RPM_PRE_INSTALL_READ_FILE})
message("CPackRPM:Warning: CPACK_RPM_PRE_INSTALL_SCRIPT_FILE <${CPACK_RPM_PRE_INSTALL_READ_FILE}> does not exists - ignoring") message("CPackRPM:Warning: CPACK_RPM_PRE_INSTALL_SCRIPT_FILE <${CPACK_RPM_PRE_INSTALL_READ_FILE}> does not exists - ignoring")
endif(EXISTS ${CPACK_RPM_PRE_INSTALL_READ_FILE}) endif(EXISTS ${CPACK_RPM_PRE_INSTALL_READ_FILE})
else(CPACK_RPM_PRE_INSTALL_READ_FILE)
# reset SPEC var value if no pre-install file has been specified
# (either globally or component-wise)
set(CPACK_RPM_SPEC_PREINSTALL "")
endif(CPACK_RPM_PRE_INSTALL_READ_FILE) endif(CPACK_RPM_PRE_INSTALL_READ_FILE)
# Handle pre-uninstall file if it has been specified
if(CPACK_RPM_PRE_UNINSTALL_READ_FILE) if(CPACK_RPM_PRE_UNINSTALL_READ_FILE)
if(EXISTS ${CPACK_RPM_PRE_UNINSTALL_READ_FILE}) if(EXISTS ${CPACK_RPM_PRE_UNINSTALL_READ_FILE})
file(READ ${CPACK_RPM_PRE_UNINSTALL_READ_FILE} CPACK_RPM_SPEC_PREUNINSTALL) file(READ ${CPACK_RPM_PRE_UNINSTALL_READ_FILE} CPACK_RPM_SPEC_PREUNINSTALL)
else(EXISTS ${CPACK_RPM_PRE_UNINSTALL_READ_FILE}) else(EXISTS ${CPACK_RPM_PRE_UNINSTALL_READ_FILE})
message("CPackRPM:Warning: CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE <${CPACK_RPM_PRE_UNINSTALL_READ_FILE}> does not exists - ignoring") message("CPackRPM:Warning: CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE <${CPACK_RPM_PRE_UNINSTALL_READ_FILE}> does not exists - ignoring")
endif(EXISTS ${CPACK_RPM_PRE_UNINSTALL_READ_FILE}) endif(EXISTS ${CPACK_RPM_PRE_UNINSTALL_READ_FILE})
else(CPACK_RPM_PRE_UNINSTALL_READ_FILE)
# reset SPEC var value if no pre-uninstall file has been specified
# (either globally or component-wise)
set(CPACK_RPM_SPEC_PREUNINSTALL "")
endif(CPACK_RPM_PRE_UNINSTALL_READ_FILE) endif(CPACK_RPM_PRE_UNINSTALL_READ_FILE)
# CPACK_RPM_CHANGELOG_FILE # CPACK_RPM_CHANGELOG_FILE

View File

@ -0,0 +1,8 @@
SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")
# no optimization in tcc:
SET (CMAKE_C_FLAGS_INIT "")
SET (CMAKE_C_FLAGS_DEBUG_INIT "-g")
SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "-DNDEBUG")
SET (CMAKE_C_FLAGS_RELEASE_INIT "-DNDEBUG")
SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-g")

View File

@ -250,7 +250,11 @@ function(install_qt4_executable executable)
endif() endif()
get_filename_component(executable_absolute "${executable}" ABSOLUTE) get_filename_component(executable_absolute "${executable}" ABSOLUTE)
gp_file_type("${executable_absolute}" "${QT_QTCORE_LIBRARY}" qtcore_type) if(EXISTS "${QT_QTCORE_LIBRARY_RELEASE}")
gp_file_type("${executable_absolute}" "${QT_QTCORE_LIBRARY_RELEASE}" qtcore_type)
elseif(EXISTS "${QT_QTCORE_LIBRARY_DEBUG}")
gp_file_type("${executable_absolute}" "${QT_QTCORE_LIBRARY_DEBUG}" qtcore_type)
endif()
if(qtcore_type STREQUAL "system") if(qtcore_type STREQUAL "system")
set(qt_plugins_dir "") set(qt_plugins_dir "")
endif() endif()

View File

@ -67,8 +67,17 @@ IF(BISON_EXECUTABLE)
IF(NOT ${BISON_version_result} EQUAL 0) IF(NOT ${BISON_version_result} EQUAL 0)
MESSAGE(SEND_ERROR "Command \"${BISON_EXECUTABLE} --version\" failed with output:\n${BISON_version_error}") MESSAGE(SEND_ERROR "Command \"${BISON_EXECUTABLE} --version\" failed with output:\n${BISON_version_error}")
ELSE() ELSE()
STRING(REGEX REPLACE "^bison \\(GNU Bison\\) ([^\n]+)\n.*" "\\1" # Bison++
BISON_VERSION "${BISON_version_output}") IF("${BISON_version_output}" MATCHES "^bison\\+\\+")
STRING(REGEX REPLACE "^bison\\+\\+ Version ([^,]+).*" "\\1"
BISON_VERSION "${BISON_version_output}")
# GNU Bison
ELSEIF("${BISON_version_output}" MATCHES "^bison[^+]")
STRING(REGEX REPLACE "^bison \\(GNU Bison\\) ([^\n]+)\n.*" "\\1"
BISON_VERSION "${BISON_version_output}")
ELSE()
SET(BISON_VERSION "unknown")
ENDIF()
ENDIF() ENDIF()
# internal macro # internal macro

View File

@ -65,7 +65,7 @@
# 1.33, 1.33.0, 1.33.1, 1.34, 1.34.0, 1.34.1, 1.35, 1.35.0, 1.35.1, # 1.33, 1.33.0, 1.33.1, 1.34, 1.34.0, 1.34.1, 1.35, 1.35.0, 1.35.1,
# 1.36, 1.36.0, 1.36.1, 1.37, 1.37.0, 1.38, 1.38.0, 1.39, 1.39.0, # 1.36, 1.36.0, 1.36.1, 1.37, 1.37.0, 1.38, 1.38.0, 1.39, 1.39.0,
# 1.40, 1.40.0, 1.41, 1.41.0, 1.42, 1.42.0, 1.43, 1.43.0, 1.44, 1.44.0, # 1.40, 1.40.0, 1.41, 1.41.0, 1.42, 1.42.0, 1.43, 1.43.0, 1.44, 1.44.0,
# 1.45, 1.45.0, 1.46, 1.46.0, 1.46.1 # 1.45, 1.45.0, 1.46, 1.46.0, 1.46.1, 1.47, 1.47.0, 1.48, 1.48.0
# #
# NOTE: If you add a new major 1.x version in Boost_ADDITIONAL_VERSIONS you should # NOTE: If you add a new major 1.x version in Boost_ADDITIONAL_VERSIONS you should
# add both 1.x and 1.x.0 as shown above. Official Boost include directories # add both 1.x and 1.x.0 as shown above. Official Boost include directories
@ -449,7 +449,7 @@ else(Boost_FIND_VERSION_EXACT)
# The user has not requested an exact version. Among known # The user has not requested an exact version. Among known
# versions, find those that are acceptable to the user request. # versions, find those that are acceptable to the user request.
set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS} set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
"1.46.1" "1.48.0" "1.48" "1.47.0" "1.47" "1.46.1"
"1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42" "1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42"
"1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37" "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37"
"1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0" "1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0"
@ -750,10 +750,12 @@ else(_boost_IN_CACHE)
else() else()
set (_boost_COMPILER "-il") set (_boost_COMPILER "-il")
endif() endif()
elseif (MSVC90) elseif (MSVC11)
set(_boost_COMPILER "-vc90") set(_boost_COMPILER "-vc110")
elseif (MSVC10) elseif (MSVC10)
set(_boost_COMPILER "-vc100") set(_boost_COMPILER "-vc100")
elseif (MSVC90)
set(_boost_COMPILER "-vc90")
elseif (MSVC80) elseif (MSVC80)
set(_boost_COMPILER "-vc80") set(_boost_COMPILER "-vc80")
elseif (MSVC71) elseif (MSVC71)

View File

@ -339,6 +339,8 @@ macro(CUDA_INCLUDE_NVCC_DEPENDENCIES dependency_file)
# output depend on the dependency file itself, which should cause the # output depend on the dependency file itself, which should cause the
# rule to re-run. # rule to re-run.
if(CUDA_NVCC_DEPEND_REGENERATE) if(CUDA_NVCC_DEPEND_REGENERATE)
set(CUDA_NVCC_DEPEND ${dependency_file})
#message("Generating an empty dependency_file: ${dependency_file}")
file(WRITE ${dependency_file} "#FindCUDA.cmake generated file. Do not edit.\n") file(WRITE ${dependency_file} "#FindCUDA.cmake generated file. Do not edit.\n")
endif(CUDA_NVCC_DEPEND_REGENERATE) endif(CUDA_NVCC_DEPEND_REGENERATE)
@ -443,7 +445,10 @@ if(NOT CUDA_TOOLKIT_ROOT_DIR)
# Search in the CUDA_BIN_PATH first. # Search in the CUDA_BIN_PATH first.
find_path(CUDA_TOOLKIT_ROOT_DIR find_path(CUDA_TOOLKIT_ROOT_DIR
NAMES nvcc nvcc.exe NAMES nvcc nvcc.exe
PATHS ENV CUDA_BIN_PATH PATHS
ENV CUDA_PATH
ENV CUDA_BIN_PATH
PATH_SUFFIXES bin bin64
DOC "Toolkit location." DOC "Toolkit location."
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
@ -472,9 +477,10 @@ endif (NOT CUDA_TOOLKIT_ROOT_DIR)
# CUDA_NVCC_EXECUTABLE # CUDA_NVCC_EXECUTABLE
find_program(CUDA_NVCC_EXECUTABLE find_program(CUDA_NVCC_EXECUTABLE
NAMES nvcc NAMES nvcc
PATHS "${CUDA_TOOLKIT_ROOT_DIR}/bin" PATHS "${CUDA_TOOLKIT_ROOT_DIR}"
"${CUDA_TOOLKIT_ROOT_DIR}/bin64" ENV CUDA_PATH
ENV CUDA_BIN_PATH ENV CUDA_BIN_PATH
PATH_SUFFIXES bin bin64
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
# Search default search paths, after we search our own set of paths. # Search default search paths, after we search our own set of paths.
@ -500,8 +506,10 @@ set(CUDA_VERSION_STRING "${CUDA_VERSION}")
# CUDA_TOOLKIT_INCLUDE # CUDA_TOOLKIT_INCLUDE
find_path(CUDA_TOOLKIT_INCLUDE find_path(CUDA_TOOLKIT_INCLUDE
device_functions.h # Header included in toolkit device_functions.h # Header included in toolkit
PATHS "${CUDA_TOOLKIT_ROOT_DIR}/include" PATHS "${CUDA_TOOLKIT_ROOT_DIR}"
ENV CUDA_PATH
ENV CUDA_INC_PATH ENV CUDA_INC_PATH
PATH_SUFFIXES include
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
# Search default search paths, after we search our own set of paths. # Search default search paths, after we search our own set of paths.
@ -516,19 +524,16 @@ macro(FIND_LIBRARY_LOCAL_FIRST _var _names _doc)
if(CMAKE_SIZEOF_VOID_P EQUAL 8) if(CMAKE_SIZEOF_VOID_P EQUAL 8)
# CUDA 3.2+ on Windows moved the library directoryies, so we need the new # CUDA 3.2+ on Windows moved the library directoryies, so we need the new
# and old paths. # and old paths.
set(_cuda_64bit_lib_dir set(_cuda_64bit_lib_dir "lib/x64" "lib64" )
"${CUDA_TOOLKIT_ROOT_DIR}/lib/x64"
"${CUDA_TOOLKIT_ROOT_DIR}/lib64"
)
endif() endif()
# CUDA 3.2+ on Windows moved the library directories, so we need to new # CUDA 3.2+ on Windows moved the library directories, so we need to new
# (lib/Win32) and the old path (lib). # (lib/Win32) and the old path (lib).
find_library(${_var} find_library(${_var}
NAMES ${_names} NAMES ${_names}
PATHS ${_cuda_64bit_lib_dir} PATHS "${CUDA_TOOLKIT_ROOT_DIR}"
"${CUDA_TOOLKIT_ROOT_DIR}/lib/Win32" ENV CUDA_PATH
"${CUDA_TOOLKIT_ROOT_DIR}/lib"
ENV CUDA_LIB_PATH ENV CUDA_LIB_PATH
PATH_SUFFIXES ${_cuda_64bit_lib_dir} "lib/Win32" "lib"
DOC ${_doc} DOC ${_doc}
NO_DEFAULT_PATH NO_DEFAULT_PATH
) )
@ -707,7 +712,7 @@ find_package_handle_standard_args(CUDA
# Add include directories to pass to the nvcc command. # Add include directories to pass to the nvcc command.
macro(CUDA_INCLUDE_DIRECTORIES) macro(CUDA_INCLUDE_DIRECTORIES)
foreach(dir ${ARGN}) foreach(dir ${ARGN})
list(APPEND CUDA_NVCC_INCLUDE_ARGS_USER "-I${dir}") list(APPEND CUDA_NVCC_INCLUDE_ARGS_USER -I${dir})
endforeach(dir ${ARGN}) endforeach(dir ${ARGN})
endmacro(CUDA_INCLUDE_DIRECTORIES) endmacro(CUDA_INCLUDE_DIRECTORIES)
@ -736,13 +741,13 @@ macro(CUDA_GET_SOURCES_AND_OPTIONS _sources _cmake_options _options)
arg STREQUAL "SHARED" OR arg STREQUAL "SHARED" OR
arg STREQUAL "MODULE" arg STREQUAL "MODULE"
) )
list(APPEND ${_cmake_options} "${arg}") list(APPEND ${_cmake_options} ${arg})
else() else()
if ( _found_options ) if ( _found_options )
list(APPEND ${_options} "${arg}") list(APPEND ${_options} ${arg})
else() else()
# Assume this is a file # Assume this is a file
list(APPEND ${_sources} "${arg}") list(APPEND ${_sources} ${arg})
endif() endif()
endif() endif()
endforeach() endforeach()
@ -890,7 +895,7 @@ macro(CUDA_WRAP_SRCS cuda_target format generated_files)
get_directory_property(CUDA_NVCC_INCLUDE_DIRECTORIES INCLUDE_DIRECTORIES) get_directory_property(CUDA_NVCC_INCLUDE_DIRECTORIES INCLUDE_DIRECTORIES)
if(CUDA_NVCC_INCLUDE_DIRECTORIES) if(CUDA_NVCC_INCLUDE_DIRECTORIES)
foreach(dir ${CUDA_NVCC_INCLUDE_DIRECTORIES}) foreach(dir ${CUDA_NVCC_INCLUDE_DIRECTORIES})
list(APPEND CUDA_NVCC_INCLUDE_ARGS "-I${dir}") list(APPEND CUDA_NVCC_INCLUDE_ARGS -I${dir})
endforeach() endforeach()
endif() endif()
@ -956,7 +961,7 @@ macro(CUDA_WRAP_SRCS cuda_target format generated_files)
# Note that if we ever want CUDA_NVCC_FLAGS_<CONFIG> to be string (instead of a list # Note that if we ever want CUDA_NVCC_FLAGS_<CONFIG> to be string (instead of a list
# like it is currently), we can remove the quotes around the # like it is currently), we can remove the quotes around the
# ${CUDA_NVCC_FLAGS_${config_upper}} variable like the CMAKE_HOST_FLAGS_<CONFIG> variable. # ${CUDA_NVCC_FLAGS_${config_upper}} variable like the CMAKE_HOST_FLAGS_<CONFIG> variable.
set(CUDA_NVCC_FLAGS_CONFIG "${CUDA_NVCC_FLAGS_CONFIG}\nset(CUDA_NVCC_FLAGS_${config_upper} \"${CUDA_NVCC_FLAGS_${config_upper}};;${CUDA_WRAP_OPTION_NVCC_FLAGS_${config_upper}}\")") set(CUDA_NVCC_FLAGS_CONFIG "${CUDA_NVCC_FLAGS_CONFIG}\nset(CUDA_NVCC_FLAGS_${config_upper} ${CUDA_NVCC_FLAGS_${config_upper}} ;; ${CUDA_WRAP_OPTION_NVCC_FLAGS_${config_upper}})")
endforeach() endforeach()
if(compile_to_ptx) if(compile_to_ptx)

View File

@ -54,13 +54,27 @@ if (${depend_text} MATCHES ".+")
string(REGEX REPLACE "^ +" "" file ${file}) string(REGEX REPLACE "^ +" "" file ${file})
if(NOT IS_DIRECTORY ${file}) # OK, now if we had a UNC path, nvcc has a tendency to only output the first '/'
# instead of '//'. Here we will test to see if the file exists, if it doesn't then
# try to prepend another '/' to the path and test again. If it still fails remove the
# path.
if(NOT EXISTS "${file}")
if (EXISTS "/${file}")
set(file "/${file}")
else()
message(WARNING " Removing non-existant dependency file: ${file}")
set(file "")
endif()
endif()
if(NOT IS_DIRECTORY "${file}")
# If softlinks start to matter, we should change this to REALPATH. For now we need # If softlinks start to matter, we should change this to REALPATH. For now we need
# to flatten paths, because nvcc can generate stuff like /bin/../include instead of # to flatten paths, because nvcc can generate stuff like /bin/../include instead of
# just /include. # just /include.
get_filename_component(file_absolute "${file}" ABSOLUTE) get_filename_component(file_absolute "${file}" ABSOLUTE)
list(APPEND dependency_list "${file_absolute}") list(APPEND dependency_list "${file_absolute}")
endif(NOT IS_DIRECTORY ${file}) endif()
endforeach(file) endforeach(file)

View File

@ -55,25 +55,25 @@ if(NOT generated_file)
endif() endif()
# Set these up as variables to make reading the generated file easier # Set these up as variables to make reading the generated file easier
set(CMAKE_COMMAND "@CMAKE_COMMAND@") set(CMAKE_COMMAND "@CMAKE_COMMAND@") # path
set(source_file "@source_file@") set(source_file "@source_file@") # path
set(NVCC_generated_dependency_file "@NVCC_generated_dependency_file@") set(NVCC_generated_dependency_file "@NVCC_generated_dependency_file@") # path
set(cmake_dependency_file "@cmake_dependency_file@") set(cmake_dependency_file "@cmake_dependency_file@") # path
set(CUDA_make2cmake "@CUDA_make2cmake@") set(CUDA_make2cmake "@CUDA_make2cmake@") # path
set(CUDA_parse_cubin "@CUDA_parse_cubin@") set(CUDA_parse_cubin "@CUDA_parse_cubin@") # path
set(build_cubin @build_cubin@) set(build_cubin @build_cubin@) # bool
# We won't actually use these variables for now, but we need to set this, in # We won't actually use these variables for now, but we need to set this, in
# order to force this file to be run again if it changes. # order to force this file to be run again if it changes.
set(generated_file_path "@generated_file_path@") set(generated_file_path "@generated_file_path@") # path
set(generated_file_internal "@generated_file@") set(generated_file_internal "@generated_file@") # path
set(generated_cubin_file_internal "@generated_cubin_file@") set(generated_cubin_file_internal "@generated_cubin_file@") # path
set(CUDA_NVCC_EXECUTABLE "@CUDA_NVCC_EXECUTABLE@") set(CUDA_NVCC_EXECUTABLE "@CUDA_NVCC_EXECUTABLE@") # path
set(CUDA_NVCC_FLAGS "@CUDA_NVCC_FLAGS@;;@CUDA_WRAP_OPTION_NVCC_FLAGS@") set(CUDA_NVCC_FLAGS @CUDA_NVCC_FLAGS@ ;; @CUDA_WRAP_OPTION_NVCC_FLAGS@) # list
@CUDA_NVCC_FLAGS_CONFIG@ @CUDA_NVCC_FLAGS_CONFIG@
set(nvcc_flags "@nvcc_flags@") set(nvcc_flags @nvcc_flags@) # list
set(CUDA_NVCC_INCLUDE_ARGS "@CUDA_NVCC_INCLUDE_ARGS@") set(CUDA_NVCC_INCLUDE_ARGS "@CUDA_NVCC_INCLUDE_ARGS@") # list (needs to be in quotes to handle spaces properly).
set(format_flag "@format_flag@") set(format_flag "@format_flag@") # string
if(build_cubin AND NOT generated_cubin_file) if(build_cubin AND NOT generated_cubin_file)
message(FATAL_ERROR "You must specify generated_cubin_file on the command line") message(FATAL_ERROR "You must specify generated_cubin_file on the command line")

View File

@ -1,5 +1,5 @@
# - Find GNU gettext tools # - Find GNU gettext tools
# This module looks for the GNU gettext tools. This module defines the # This module looks for the GNU gettext tools. This module defines the
# following values: # following values:
# GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool. # GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool.
# GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool. # GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool.
@ -7,8 +7,8 @@
# #
# Additionally it provides the following macros: # Additionally it provides the following macros:
# GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN ) # GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN )
# This will create a target "translations" which will convert the # This will create a target "translations" which will convert the
# given input po files into the binary output mo file. If the # given input po files into the binary output mo file. If the
# ALL option is used, the translations will also be created when # ALL option is used, the translations will also be created when
# building the default target. # building the default target.
# GETTEXT_PROCESS_POT( <potfile> [ALL] [INSTALL_DESTINATION <destdir>] LANGUAGES <lang1> <lang2> ... ) # GETTEXT_PROCESS_POT( <potfile> [ALL] [INSTALL_DESTINATION <destdir>] LANGUAGES <lang1> <lang2> ... )
@ -52,7 +52,8 @@ MACRO(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg)
SET(_firstPoFile "${_firstPoFileArg}") SET(_firstPoFile "${_firstPoFileArg}")
SET(_gmoFiles) SET(_gmoFiles)
GET_FILENAME_COMPONENT(_potBasename ${_potFile} NAME_WE) GET_FILENAME_COMPONENT(_potName ${_potFile} NAME)
STRING(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName})
GET_FILENAME_COMPONENT(_absPotFile ${_potFile} ABSOLUTE) GET_FILENAME_COMPONENT(_absPotFile ${_potFile} ABSOLUTE)
SET(_addToAll) SET(_addToAll)
@ -92,7 +93,8 @@ FUNCTION(GETTEXT_PROCESS_POT_FILE _potFile)
CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
GET_FILENAME_COMPONENT(_potBasename ${_potFile} NAME_WE) GET_FILENAME_COMPONENT(_potName ${_potFile} NAME)
STRING(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName})
GET_FILENAME_COMPONENT(_absPotFile ${_potFile} ABSOLUTE) GET_FILENAME_COMPONENT(_absPotFile ${_potFile} ABSOLUTE)
FOREACH (_lang ${_parsedArguments_LANGUAGES}) FOREACH (_lang ${_parsedArguments_LANGUAGES})
@ -134,7 +136,8 @@ FUNCTION(GETTEXT_PROCESS_PO_FILES _lang)
CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
FOREACH(_current_PO_FILE ${_parsedArguments_PO_FILES}) FOREACH(_current_PO_FILE ${_parsedArguments_PO_FILES})
GET_FILENAME_COMPONENT(_basename ${_current_PO_FILE} NAME_WE) GET_FILENAME_COMPONENT(_name ${_current_PO_FILE} NAME)
STRING(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _basename ${_name})
SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo) SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo)
ADD_CUSTOM_COMMAND(OUTPUT ${_gmoFile} ADD_CUSTOM_COMMAND(OUTPUT ${_gmoFile}
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_current_PO_FILE} COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_current_PO_FILE}

View File

@ -106,7 +106,7 @@ endforeach(_library ${_list})
if(_libraries_work) if(_libraries_work)
# Test this combination of libraries. # Test this combination of libraries.
if(UNIX AND BLA_STATIC) if(UNIX AND BLA_STATIC)
set(CMAKE_REQUIRED_LIBRARIES ${_flags} "-Wl,--start-group ${${LIBRARIES}} ${_blas};-Wl,--end-group" ${_threads}) set(CMAKE_REQUIRED_LIBRARIES ${_flags} "-Wl,--start-group" ${${LIBRARIES}} ${_blas} "-Wl,--end-group" ${_threads})
else(UNIX AND BLA_STATIC) else(UNIX AND BLA_STATIC)
set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_blas} ${_threads}) set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_blas} ${_threads})
endif(UNIX AND BLA_STATIC) endif(UNIX AND BLA_STATIC)

View File

@ -1,14 +1,18 @@
# - Find the native PNG includes and library # - Find the native PNG includes and library
# #
# This module defines # This module searches libpng, the library for working with PNG images.
# PNG_INCLUDE_DIR, where to find png.h, etc. #
# It defines the following variables
# PNG_INCLUDE_DIRS, where to find png.h, etc.
# PNG_LIBRARIES, the libraries to link against to use PNG. # PNG_LIBRARIES, the libraries to link against to use PNG.
# PNG_DEFINITIONS - You should add_definitons(${PNG_DEFINITIONS}) before compiling code that includes png library files. # PNG_DEFINITIONS - You should add_definitons(${PNG_DEFINITIONS}) before compiling code that includes png library files.
# PNG_FOUND, If false, do not try to use PNG. # PNG_FOUND, If false, do not try to use PNG.
# also defined, but not for general use are # Also defined, but not for general use are
# PNG_LIBRARY, where to find the PNG library. # PNG_LIBRARY, where to find the PNG library.
# None of the above will be defined unles zlib can be found. # For backward compatiblity the variable PNG_INCLUDE_DIR is also set. It has the same value as PNG_INCLUDE_DIRS.
# PNG depends on Zlib #
# Since PNG depends on the ZLib compression library, none of the above will be
# defined unless ZLib can be found.
#============================================================================= #=============================================================================
# Copyright 2002-2009 Kitware, Inc. # Copyright 2002-2009 Kitware, Inc.
@ -38,7 +42,8 @@ if(ZLIB_FOUND)
if (PNG_LIBRARY AND PNG_PNG_INCLUDE_DIR) if (PNG_LIBRARY AND PNG_PNG_INCLUDE_DIR)
# png.h includes zlib.h. Sigh. # png.h includes zlib.h. Sigh.
SET(PNG_INCLUDE_DIR ${PNG_PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} ) SET(PNG_INCLUDE_DIRS ${PNG_PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} )
SET(PNG_INCLUDE_DIR ${PNG_INCLUDE_DIRS} ) # for backward compatiblity
SET(PNG_LIBRARIES ${PNG_LIBRARY} ${ZLIB_LIBRARY}) SET(PNG_LIBRARIES ${PNG_LIBRARY} ${ZLIB_LIBRARY})
if (CYGWIN) if (CYGWIN)

View File

@ -108,6 +108,7 @@ IF (UNIX)
FIND_PATH(X11_XShm_INCLUDE_PATH X11/extensions/XShm.h ${X11_INC_SEARCH_PATH}) FIND_PATH(X11_XShm_INCLUDE_PATH X11/extensions/XShm.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xrandr_INCLUDE_PATH X11/extensions/Xrandr.h ${X11_INC_SEARCH_PATH}) FIND_PATH(X11_Xrandr_INCLUDE_PATH X11/extensions/Xrandr.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xrender_INCLUDE_PATH X11/extensions/Xrender.h ${X11_INC_SEARCH_PATH}) FIND_PATH(X11_Xrender_INCLUDE_PATH X11/extensions/Xrender.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_XRes_INCLUDE_PATH X11/extensions/XRes.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xscreensaver_INCLUDE_PATH X11/extensions/scrnsaver.h ${X11_INC_SEARCH_PATH}) FIND_PATH(X11_Xscreensaver_INCLUDE_PATH X11/extensions/scrnsaver.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xshape_INCLUDE_PATH X11/extensions/shape.h ${X11_INC_SEARCH_PATH}) FIND_PATH(X11_Xshape_INCLUDE_PATH X11/extensions/shape.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xutil_INCLUDE_PATH X11/Xutil.h ${X11_INC_SEARCH_PATH}) FIND_PATH(X11_Xutil_INCLUDE_PATH X11/Xutil.h ${X11_INC_SEARCH_PATH})
@ -136,6 +137,7 @@ IF (UNIX)
FIND_LIBRARY(X11_Xpm_LIB Xpm ${X11_LIB_SEARCH_PATH}) FIND_LIBRARY(X11_Xpm_LIB Xpm ${X11_LIB_SEARCH_PATH})
FIND_LIBRARY(X11_Xrandr_LIB Xrandr ${X11_LIB_SEARCH_PATH}) FIND_LIBRARY(X11_Xrandr_LIB Xrandr ${X11_LIB_SEARCH_PATH})
FIND_LIBRARY(X11_Xrender_LIB Xrender ${X11_LIB_SEARCH_PATH}) FIND_LIBRARY(X11_Xrender_LIB Xrender ${X11_LIB_SEARCH_PATH})
FIND_LIBRARY(X11_XRes_LIB XRes ${X11_LIB_SEARCH_PATH})
FIND_LIBRARY(X11_Xscreensaver_LIB Xss ${X11_LIB_SEARCH_PATH}) FIND_LIBRARY(X11_Xscreensaver_LIB Xss ${X11_LIB_SEARCH_PATH})
FIND_LIBRARY(X11_Xt_LIB Xt ${X11_LIB_SEARCH_PATH}) FIND_LIBRARY(X11_Xt_LIB Xt ${X11_LIB_SEARCH_PATH})
FIND_LIBRARY(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH}) FIND_LIBRARY(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH})
@ -250,6 +252,11 @@ IF (UNIX)
SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xrender_INCLUDE_PATH}) SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xrender_INCLUDE_PATH})
ENDIF (X11_Xrender_INCLUDE_PATH AND X11_Xrender_LIB) ENDIF (X11_Xrender_INCLUDE_PATH AND X11_Xrender_LIB)
IF (X11_XRes_INCLUDE_PATH AND X11_XRes_LIB)
SET(X11_XRes_FOUND TRUE)
SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_XRes_INCLUDE_PATH})
ENDIF (X11_XRes_INCLUDE_PATH AND X11_XRes_LIB)
IF (X11_Xrandr_INCLUDE_PATH AND X11_Xrandr_LIB) IF (X11_Xrandr_INCLUDE_PATH AND X11_Xrandr_LIB)
SET(X11_Xrandr_FOUND TRUE) SET(X11_Xrandr_FOUND TRUE)
SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xrandr_INCLUDE_PATH}) SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xrandr_INCLUDE_PATH})
@ -424,6 +431,8 @@ IF (UNIX)
X11_Xdamage_INCLUDE_PATH X11_Xdamage_INCLUDE_PATH
X11_Xrender_LIB X11_Xrender_LIB
X11_Xrender_INCLUDE_PATH X11_Xrender_INCLUDE_PATH
X11_XRes_LIB
X11_XRes_INCLUDE_PATH
X11_Xxf86misc_LIB X11_Xxf86misc_LIB
X11_xf86misc_INCLUDE_PATH X11_xf86misc_INCLUDE_PATH
X11_xf86vmode_INCLUDE_PATH X11_xf86vmode_INCLUDE_PATH

View File

@ -17,9 +17,12 @@
# ZLIB_MAJOR_VERSION - The major version of zlib # ZLIB_MAJOR_VERSION - The major version of zlib
# ZLIB_MINOR_VERSION - The minor version of zlib # ZLIB_MINOR_VERSION - The minor version of zlib
# ZLIB_PATCH_VERSION - The patch version of zlib # ZLIB_PATCH_VERSION - The patch version of zlib
#
# An includer may set ZLIB_ROOT to a zlib installation root to tell
# this module where to look.
#============================================================================= #=============================================================================
# Copyright 2001-2009 Kitware, Inc. # Copyright 2001-2011 Kitware, Inc.
# #
# Distributed under the OSI-approved BSD License (the "License"); # Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details. # see accompanying file Copyright.txt for details.
@ -31,17 +34,29 @@
# (To distribute this file outside of CMake, substitute the full # (To distribute this file outside of CMake, substitute the full
# License text for the above reference.) # License text for the above reference.)
FIND_PATH(ZLIB_INCLUDE_DIR zlib.h SET(_ZLIB_SEARCHES)
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]/include"
) # Search ZLIB_ROOT first if it is set.
IF(ZLIB_ROOT)
SET(_ZLIB_SEARCH_ROOT PATHS ${ZLIB_ROOT} NO_DEFAULT_PATH)
LIST(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_ROOT)
ENDIF()
# Normal search.
SET(_ZLIB_SEARCH_NORMAL
PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]"
"$ENV{PROGRAMFILES}/zlib"
)
LIST(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_NORMAL)
SET(ZLIB_NAMES z zlib zdll zlib1 zlibd zlibd1) SET(ZLIB_NAMES z zlib zdll zlib1 zlibd zlibd1)
FIND_LIBRARY(ZLIB_LIBRARY
NAMES # Try each search configuration.
${ZLIB_NAMES} FOREACH(search ${_ZLIB_SEARCHES})
PATHS FIND_PATH(ZLIB_INCLUDE_DIR NAMES zlib.h ${${search}} PATH_SUFFIXES include)
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]/lib" FIND_LIBRARY(ZLIB_LIBRARY NAMES ${ZLIB_NAMES} ${${search}} PATH_SUFFIXES lib)
) ENDFOREACH()
MARK_AS_ADVANCED(ZLIB_LIBRARY ZLIB_INCLUDE_DIR) MARK_AS_ADVANCED(ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
IF(ZLIB_INCLUDE_DIR AND EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h") IF(ZLIB_INCLUDE_DIR AND EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h")

View File

@ -141,36 +141,46 @@ IF(MSVC)
ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES) ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES)
ENDIF(MSVC90) ENDIF(MSVC90)
IF(MSVC10) MACRO(MSVCRT_FILES_FOR_VERSION version)
SET(v "${version}")
# Find the runtime library redistribution directory. # Find the runtime library redistribution directory.
GET_FILENAME_COMPONENT(msvc_install_dir GET_FILENAME_COMPONENT(msvc_install_dir
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0;InstallDir]" ABSOLUTE) "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${v}.0;InstallDir]" ABSOLUTE)
FIND_PATH(MSVC10_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC100.CRT FIND_PATH(MSVC${v}_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC${v}0.CRT
PATHS PATHS
"${msvc_install_dir}/../../VC/redist" "${msvc_install_dir}/../../VC/redist"
"${base_dir}/VC/redist" "${base_dir}/VC/redist"
"$ENV{ProgramFiles}/Microsoft Visual Studio 10.0/VC/redist" "$ENV{ProgramFiles}/Microsoft Visual Studio ${v}.0/VC/redist"
"$ENV{ProgramFiles(x86)}/Microsoft Visual Studio 10.0/VC/redist" "$ENV{ProgramFiles(x86)}/Microsoft Visual Studio ${v}.0/VC/redist"
) )
MARK_AS_ADVANCED(MSVC10_REDIST_DIR) MARK_AS_ADVANCED(MSVC${v}_REDIST_DIR)
SET(MSVC10_CRT_DIR "${MSVC10_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC100.CRT") SET(MSVC${v}_CRT_DIR "${MSVC${v}_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC${v}0.CRT")
IF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) IF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
SET(__install__libs SET(__install__libs
"${MSVC10_CRT_DIR}/msvcp100.dll" "${MSVC${v}_CRT_DIR}/msvcp${v}0.dll"
"${MSVC10_CRT_DIR}/msvcr100.dll" "${MSVC${v}_CRT_DIR}/msvcr${v}0.dll"
) )
ENDIF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) ENDIF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
IF(CMAKE_INSTALL_DEBUG_LIBRARIES) IF(CMAKE_INSTALL_DEBUG_LIBRARIES)
SET(MSVC10_CRT_DIR SET(MSVC${v}_CRT_DIR
"${MSVC10_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC100.DebugCRT") "${MSVC${v}_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC${v}0.DebugCRT")
SET(__install__libs ${__install__libs} SET(__install__libs ${__install__libs}
"${MSVC10_CRT_DIR}/msvcp100d.dll" "${MSVC${v}_CRT_DIR}/msvcp${v}0d.dll"
"${MSVC10_CRT_DIR}/msvcr100d.dll" "${MSVC${v}_CRT_DIR}/msvcr${v}0d.dll"
) )
ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES) ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES)
ENDIF(MSVC10) ENDMACRO()
IF(MSVC10)
MSVCRT_FILES_FOR_VERSION(10)
ENDIF()
IF(MSVC11)
MSVCRT_FILES_FOR_VERSION(11)
ENDIF()
IF(CMAKE_INSTALL_MFC_LIBRARIES) IF(CMAKE_INSTALL_MFC_LIBRARIES)
IF(MSVC70) IF(MSVC70)
@ -273,42 +283,52 @@ IF(MSVC)
) )
ENDIF(MSVC90) ENDIF(MSVC90)
IF(MSVC10) MACRO(MFC_FILES_FOR_VERSION version)
SET(v "${version}")
IF(CMAKE_INSTALL_DEBUG_LIBRARIES) IF(CMAKE_INSTALL_DEBUG_LIBRARIES)
SET(MSVC10_MFC_DIR SET(MSVC${v}_MFC_DIR
"${MSVC10_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC100.DebugMFC") "${MSVC${v}_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC${v}0.DebugMFC")
SET(__install__libs ${__install__libs} SET(__install__libs ${__install__libs}
"${MSVC10_MFC_DIR}/mfc100d.dll" "${MSVC${v}_MFC_DIR}/mfc${v}0d.dll"
"${MSVC10_MFC_DIR}/mfc100ud.dll" "${MSVC${v}_MFC_DIR}/mfc${v}0ud.dll"
"${MSVC10_MFC_DIR}/mfcm100d.dll" "${MSVC${v}_MFC_DIR}/mfcm${v}0d.dll"
"${MSVC10_MFC_DIR}/mfcm100ud.dll" "${MSVC${v}_MFC_DIR}/mfcm${v}0ud.dll"
) )
ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES) ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES)
SET(MSVC10_MFC_DIR "${MSVC10_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC100.MFC") SET(MSVC${v}_MFC_DIR "${MSVC${v}_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC${v}0.MFC")
IF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) IF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
SET(__install__libs ${__install__libs} SET(__install__libs ${__install__libs}
"${MSVC10_MFC_DIR}/mfc100.dll" "${MSVC${v}_MFC_DIR}/mfc${v}0.dll"
"${MSVC10_MFC_DIR}/mfc100u.dll" "${MSVC${v}_MFC_DIR}/mfc${v}0u.dll"
"${MSVC10_MFC_DIR}/mfcm100.dll" "${MSVC${v}_MFC_DIR}/mfcm${v}0.dll"
"${MSVC10_MFC_DIR}/mfcm100u.dll" "${MSVC${v}_MFC_DIR}/mfcm${v}0u.dll"
) )
ENDIF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) ENDIF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
# include the language dll's for vs10 as well as the actuall dll's # include the language dll's as well as the actuall dll's
SET(MSVC10_MFCLOC_DIR "${MSVC10_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC100.MFCLOC") SET(MSVC${v}_MFCLOC_DIR "${MSVC${v}_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC${v}0.MFCLOC")
SET(__install__libs ${__install__libs} SET(__install__libs ${__install__libs}
"${MSVC10_MFCLOC_DIR}/mfc100chs.dll" "${MSVC${v}_MFCLOC_DIR}/mfc${v}0chs.dll"
"${MSVC10_MFCLOC_DIR}/mfc100cht.dll" "${MSVC${v}_MFCLOC_DIR}/mfc${v}0cht.dll"
"${MSVC10_MFCLOC_DIR}/mfc100enu.dll" "${MSVC${v}_MFCLOC_DIR}/mfc${v}0enu.dll"
"${MSVC10_MFCLOC_DIR}/mfc100esp.dll" "${MSVC${v}_MFCLOC_DIR}/mfc${v}0esp.dll"
"${MSVC10_MFCLOC_DIR}/mfc100deu.dll" "${MSVC${v}_MFCLOC_DIR}/mfc${v}0deu.dll"
"${MSVC10_MFCLOC_DIR}/mfc100fra.dll" "${MSVC${v}_MFCLOC_DIR}/mfc${v}0fra.dll"
"${MSVC10_MFCLOC_DIR}/mfc100ita.dll" "${MSVC${v}_MFCLOC_DIR}/mfc${v}0ita.dll"
"${MSVC10_MFCLOC_DIR}/mfc100jpn.dll" "${MSVC${v}_MFCLOC_DIR}/mfc${v}0jpn.dll"
"${MSVC10_MFCLOC_DIR}/mfc100kor.dll" "${MSVC${v}_MFCLOC_DIR}/mfc${v}0kor.dll"
) )
ENDIF(MSVC10) ENDMACRO()
IF(MSVC10)
MFC_FILES_FOR_VERSION(10)
ENDIF()
IF(MSVC11)
MFC_FILES_FOR_VERSION(11)
ENDIF()
ENDIF(CMAKE_INSTALL_MFC_LIBRARIES) ENDIF(CMAKE_INSTALL_MFC_LIBRARIES)
FOREACH(lib FOREACH(lib

View File

@ -0,0 +1,3 @@
@echo off
call "@CMAKE_GNUtoMS_BAT@"
lib /machine:"@CMAKE_GNUtoMS_ARCH@" %*

View File

@ -0,0 +1,10 @@
# Usage: cmake -Dlib=lib.bat -Ddef=out.def -Ddll=out.dll -Dimp=out.dll.a -P GNUtoMS_lib.cmake
get_filename_component(name ${dll} NAME) # .dll file name
string(REGEX REPLACE "\\.dll\\.a$" ".lib" out "${imp}") # .dll.a -> .lib
execute_process(
COMMAND ${lib} /def:${def} /name:${name} /out:${out}
RESULT_VARIABLE res
)
if(res)
message(FATAL_ERROR "lib failed: ${res}")
endif()

View File

@ -0,0 +1,4 @@
SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "")
SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP "")
SET(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "")
SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-soname ")

View File

@ -0,0 +1 @@
__windows_compiler_gnu_abi(C)

View File

@ -0,0 +1 @@
__windows_compiler_gnu_abi(CXX)

View File

@ -0,0 +1 @@
__windows_compiler_gnu_abi(Fortran)

View File

@ -1,2 +1,5 @@
include(Platform/Windows-GNU) include(Platform/Windows-GNU)
__windows_compiler_gnu(Fortran) __windows_compiler_gnu(Fortran)
# gfortran on 64-bit MinGW defines __SIZEOF_POINTER__
set(CMAKE_Fortran_SIZEOF_DATA_PTR_DEFAULT 4)

View File

@ -108,6 +108,8 @@ macro(__windows_compiler_gnu lang)
set(CMAKE_${lang}_LINK_EXECUTABLE set(CMAKE_${lang}_LINK_EXECUTABLE
"<CMAKE_${lang}_COMPILER> <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES>") "<CMAKE_${lang}_COMPILER> <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES>")
list(APPEND CMAKE_${lang}_ABI_FILES "Platform/Windows-GNU-${lang}-ABI")
# Support very long lists of object files. # Support very long lists of object files.
if("${CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG}" STREQUAL "@") if("${CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG}" STREQUAL "@")
foreach(rule CREATE_SHARED_MODULE CREATE_SHARED_LIBRARY LINK_EXECUTABLE) foreach(rule CREATE_SHARED_MODULE CREATE_SHARED_LIBRARY LINK_EXECUTABLE)
@ -125,3 +127,55 @@ macro(__windows_compiler_gnu lang)
endforeach() endforeach()
endif() endif()
endmacro() endmacro()
macro(__windows_compiler_gnu_abi lang)
if(CMAKE_NO_GNUtoMS)
set(CMAKE_GNUtoMS 0)
else()
option(CMAKE_GNUtoMS "Convert GNU import libraries to MS format (requires Visual Studio)" OFF)
endif()
if(CMAKE_GNUtoMS AND NOT CMAKE_GNUtoMS_LIB)
# Find MS development environment setup script for this architecture.
if("${CMAKE_SIZEOF_VOID_P}" EQUAL 4)
find_program(CMAKE_GNUtoMS_VCVARS NAMES vcvars32.bat
DOC "Visual Studio vcvars32.bat"
PATHS
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VC;ProductDir]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VC;ProductDir]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.1\\Setup\\VC;ProductDir]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\6.0\\Setup\\Microsoft Visual C++;ProductDir]/bin"
)
set(CMAKE_GNUtoMS_ARCH x86)
elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
find_program(CMAKE_GNUtoMS_VCVARS NAMES vcvarsamd64.bat
DOC "Visual Studio vcvarsamd64.bat"
PATHS
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VC;ProductDir]/bin/amd64"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/bin/amd64"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VC;ProductDir]/bin/amd64"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/bin/amd64"
)
set(CMAKE_GNUtoMS_ARCH amd64)
endif()
set_property(CACHE CMAKE_GNUtoMS_VCVARS PROPERTY ADVANCED 1)
if(CMAKE_GNUtoMS_VCVARS)
# Create helper script to run lib.exe from MS environment.
string(REPLACE "/" "\\" CMAKE_GNUtoMS_BAT "${CMAKE_GNUtoMS_VCVARS}")
set(CMAKE_GNUtoMS_LIB ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeGNUtoMS_lib.bat)
configure_file(${CMAKE_ROOT}/Modules/Platform/GNUtoMS_lib.bat.in ${CMAKE_GNUtoMS_LIB})
else()
message(WARNING "Disabling CMAKE_GNUtoMS option because CMAKE_GNUtoMS_VCVARS is not set.")
set(CMAKE_GNUtoMS 0)
endif()
endif()
if(CMAKE_GNUtoMS)
# Teach CMake how to create a MS import library at link time.
set(CMAKE_${lang}_GNUtoMS_RULE " -Wl,--output-def,<TARGET_NAME>.def"
"<CMAKE_COMMAND> -Dlib=\"${CMAKE_GNUtoMS_LIB}\" -Ddef=\"<TARGET_NAME>.def\" -Ddll=\"<TARGET>\" -Dimp=\"<TARGET_IMPLIB>\" -P \"${CMAKE_ROOT}/Modules/Platform/GNUtoMS_lib.cmake\""
)
endif()
endmacro()

View File

@ -118,7 +118,7 @@ MACRO (QT4_CREATE_MOC_COMMAND infile outfile moc_flags moc_options)
ADD_CUSTOM_COMMAND(OUTPUT ${outfile} ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
COMMAND ${QT_MOC_EXECUTABLE} COMMAND ${QT_MOC_EXECUTABLE}
ARGS ${moc_flags} ${moc_options} -o ${outfile} ${infile} ARGS ${moc_flags} ${moc_options} -o ${outfile} ${infile}
DEPENDS ${infile}) DEPENDS ${infile} VERBATIM)
ENDIF (WIN32) ENDIF (WIN32)
ENDMACRO (QT4_CREATE_MOC_COMMAND) ENDMACRO (QT4_CREATE_MOC_COMMAND)
@ -165,7 +165,7 @@ MACRO (QT4_WRAP_UI outfiles )
ADD_CUSTOM_COMMAND(OUTPUT ${outfile} ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
COMMAND ${QT_UIC_EXECUTABLE} COMMAND ${QT_UIC_EXECUTABLE}
ARGS ${ui_options} -o ${outfile} ${infile} ARGS ${ui_options} -o ${outfile} ${infile}
MAIN_DEPENDENCY ${infile}) MAIN_DEPENDENCY ${infile} VERBATIM)
SET(${outfiles} ${${outfiles}} ${outfile}) SET(${outfiles} ${${outfiles}} ${outfile})
ENDFOREACH (it) ENDFOREACH (it)
@ -203,7 +203,7 @@ MACRO (QT4_ADD_RESOURCES outfiles )
COMMAND ${QT_RCC_EXECUTABLE} COMMAND ${QT_RCC_EXECUTABLE}
ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile} ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile}
MAIN_DEPENDENCY ${infile} MAIN_DEPENDENCY ${infile}
DEPENDS ${_RC_DEPENDS} "${out_depends}") DEPENDS ${_RC_DEPENDS} "${out_depends}" VERBATIM)
SET(${outfiles} ${${outfiles}} ${outfile}) SET(${outfiles} ${${outfiles}} ${outfile})
ENDFOREACH (it) ENDFOREACH (it)
@ -235,7 +235,7 @@ MACRO(QT4_ADD_DBUS_INTERFACE _sources _interface _basename)
ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header}
COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} ${_params} -p ${_basename} ${_infile} COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} ${_params} -p ${_basename} ${_infile}
DEPENDS ${_infile}) DEPENDS ${_infile} VERBATIM)
SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE) SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE)
@ -280,7 +280,7 @@ MACRO(QT4_GENERATE_DBUS_INTERFACE _header) # _customName OPTIONS -some -options
ADD_CUSTOM_COMMAND(OUTPUT ${_target} ADD_CUSTOM_COMMAND(OUTPUT ${_target}
COMMAND ${QT_DBUSCPP2XML_EXECUTABLE} ${_qt4_dbus_options} ${_in_file} -o ${_target} COMMAND ${QT_DBUSCPP2XML_EXECUTABLE} ${_qt4_dbus_options} ${_in_file} -o ${_target}
DEPENDS ${_in_file} DEPENDS ${_in_file} VERBATIM
) )
ENDMACRO(QT4_GENERATE_DBUS_INTERFACE) ENDMACRO(QT4_GENERATE_DBUS_INTERFACE)
@ -304,12 +304,12 @@ MACRO(QT4_ADD_DBUS_ADAPTOR _sources _xml_file _include _parentClass) # _optional
IF(_optionalClassName) IF(_optionalClassName)
ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header}
COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -c ${_optionalClassName} -i ${_include} -l ${_parentClass} ${_infile} COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -c ${_optionalClassName} -i ${_include} -l ${_parentClass} ${_infile}
DEPENDS ${_infile} DEPENDS ${_infile} VERBATIM
) )
ELSE(_optionalClassName) ELSE(_optionalClassName)
ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header}
COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -i ${_include} -l ${_parentClass} ${_infile} COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -i ${_include} -l ${_parentClass} ${_infile}
DEPENDS ${_infile} DEPENDS ${_infile} VERBATIM
) )
ENDIF(_optionalClassName) ENDIF(_optionalClassName)
@ -398,7 +398,7 @@ MACRO(QT4_CREATE_TRANSLATION _qm_files)
ADD_CUSTOM_COMMAND(OUTPUT ${_ts_file} ADD_CUSTOM_COMMAND(OUTPUT ${_ts_file}
COMMAND ${QT_LUPDATE_EXECUTABLE} COMMAND ${QT_LUPDATE_EXECUTABLE}
ARGS ${_lupdate_options} ${_ts_pro} ${_my_dirs} -ts ${_ts_file} ARGS ${_lupdate_options} ${_ts_pro} ${_my_dirs} -ts ${_ts_file}
DEPENDS ${_my_sources} ${_ts_pro}) DEPENDS ${_my_sources} ${_ts_pro} VERBATIM)
ENDFOREACH(_ts_file) ENDFOREACH(_ts_file)
QT4_ADD_TRANSLATION(${_qm_files} ${_my_tsfiles}) QT4_ADD_TRANSLATION(${_qm_files} ${_my_tsfiles})
ENDMACRO(QT4_CREATE_TRANSLATION) ENDMACRO(QT4_CREATE_TRANSLATION)
@ -419,7 +419,7 @@ MACRO(QT4_ADD_TRANSLATION _qm_files)
ADD_CUSTOM_COMMAND(OUTPUT ${qm} ADD_CUSTOM_COMMAND(OUTPUT ${qm}
COMMAND ${QT_LRELEASE_EXECUTABLE} COMMAND ${QT_LRELEASE_EXECUTABLE}
ARGS ${_abs_FILE} -qm ${qm} ARGS ${_abs_FILE} -qm ${qm}
DEPENDS ${_abs_FILE} DEPENDS ${_abs_FILE} VERBATIM
) )
SET(${_qm_files} ${${_qm_files}} ${qm}) SET(${_qm_files} ${${_qm_files}} ${qm})
ENDFOREACH (_current_FILE) ENDFOREACH (_current_FILE)

View File

@ -68,7 +68,7 @@ SET(QT_QAXCONTAINER_MODULE_DEPENDS QTGUI QTCORE)
SET(QT_QAXSERVER_MODULE_DEPENDS QTGUI QTCORE) SET(QT_QAXSERVER_MODULE_DEPENDS QTGUI QTCORE)
SET(QT_QTSCRIPTTOOLS_MODULE_DEPENDS QTGUI QTCORE) SET(QT_QTSCRIPTTOOLS_MODULE_DEPENDS QTGUI QTCORE)
SET(QT_QTWEBKIT_MODULE_DEPENDS QTXMLPATTERNS QTGUI QTCORE) SET(QT_QTWEBKIT_MODULE_DEPENDS QTXMLPATTERNS QTGUI QTCORE)
SET(QT_QTDECLARATIVE_MODULE_DEPENDS QTWEBKIT QTSCRIPT QTSVG QTSQL QTXMLPATTERNS QTXML QTOPENGL QTGUI QTNETWORK QTCORE) SET(QT_QTDECLARATIVE_MODULE_DEPENDS QTSCRIPT QTSVG QTSQL QTXMLPATTERNS QTGUI QTCORE)
SET(QT_QTMULTIMEDIA_MODULE_DEPENDS QTGUI QTCORE) SET(QT_QTMULTIMEDIA_MODULE_DEPENDS QTGUI QTCORE)
SET(QT_QTOPENGL_MODULE_DEPENDS QTGUI QTCORE) SET(QT_QTOPENGL_MODULE_DEPENDS QTGUI QTCORE)
SET(QT_QTSCRIPT_MODULE_DEPENDS QTCORE) SET(QT_QTSCRIPT_MODULE_DEPENDS QTCORE)
@ -81,8 +81,8 @@ SET(QT_QTNETWORK_MODULE_DEPENDS QTCORE)
# Qt modules (in order of dependence) # Qt modules (in order of dependence)
FOREACH(module QT3SUPPORT QTOPENGL QTASSISTANT QTDESIGNER QTMOTIF QTNSPLUGIN FOREACH(module QT3SUPPORT QTOPENGL QTASSISTANT QTDESIGNER QTMOTIF QTNSPLUGIN
QAXSERVER QAXCONTAINER QTDECLARATIVE QTSCRIPT QTSVG QTUITOOLS QTHELP QAXSERVER QAXCONTAINER QTDECLARATIVE QTSCRIPT QTSVG QTUITOOLS QTHELP
QTWEBKIT PHONON QTSCRIPTTOOLS QTMULTIMEDIA QTGUI QTTEST QTDBUS QTXML QTSQL QTWEBKIT PHONON QTSCRIPTTOOLS QTMULTIMEDIA QTXMLPATTERNS QTGUI QTTEST
QTXMLPATTERNS QTNETWORK QTCORE) QTDBUS QTXML QTSQL QTNETWORK QTCORE)
IF (QT_USE_${module} OR QT_USE_${module}_DEPENDS) IF (QT_USE_${module} OR QT_USE_${module}_DEPENDS)
IF (QT_${module}_FOUND) IF (QT_${module}_FOUND)

2
Source/.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
# Preserve upstream indentation style.
cm_sha2.* whitespace=indent-with-non-tab

View File

@ -129,6 +129,8 @@ SET(SRCS
cmComputeLinkInformation.h cmComputeLinkInformation.h
cmComputeTargetDepends.h cmComputeTargetDepends.h
cmComputeTargetDepends.cxx cmComputeTargetDepends.cxx
cmCryptoHash.cxx
cmCryptoHash.h
cmCustomCommand.cxx cmCustomCommand.cxx
cmCustomCommand.h cmCustomCommand.h
cmCustomCommandGenerator.cxx cmCustomCommandGenerator.cxx
@ -160,6 +162,7 @@ SET(SRCS
cmDocumentationSection.cxx cmDocumentationSection.cxx
cmDocumentCompileDefinitions.h cmDocumentCompileDefinitions.h
cmDocumentGeneratorExpressions.h cmDocumentGeneratorExpressions.h
cmDocumentLocationUndefined.h
cmDocumentVariables.cxx cmDocumentVariables.cxx
cmDynamicLoader.cxx cmDynamicLoader.cxx
cmDynamicLoader.h cmDynamicLoader.h
@ -214,6 +217,8 @@ SET(SRCS
cmMakefileExecutableTargetGenerator.cxx cmMakefileExecutableTargetGenerator.cxx
cmMakefileLibraryTargetGenerator.cxx cmMakefileLibraryTargetGenerator.cxx
cmMakefileUtilityTargetGenerator.cxx cmMakefileUtilityTargetGenerator.cxx
cmNewLineStyle.h
cmNewLineStyle.cxx
cmOrderDirectories.cxx cmOrderDirectories.cxx
cmOrderDirectories.h cmOrderDirectories.h
cmPolicies.h cmPolicies.h
@ -259,6 +264,8 @@ SET(SRCS
cmakewizard.cxx cmakewizard.cxx
cmakewizard.h cmakewizard.h
cm_sha2.h
cm_sha2.c
cm_utf8.h cm_utf8.h
cm_utf8.c cm_utf8.c
) )

View File

@ -12,15 +12,16 @@
#include "AddCacheEntry.h" #include "AddCacheEntry.h"
#include <QMetaProperty> #include <QMetaProperty>
#include <QCompleter>
static const int NumTypes = 4; static const int NumTypes = 4;
static const QString TypeStrings[NumTypes] = static const QString TypeStrings[NumTypes] =
{ "BOOL", "PATH", "FILEPATH", "STRING" }; { "BOOL", "PATH", "FILEPATH", "STRING" };
static const QCMakeProperty::PropertyType Types[NumTypes] = static const QCMakeProperty::PropertyType Types[NumTypes] =
{ QCMakeProperty::BOOL, QCMakeProperty::PATH, { QCMakeProperty::BOOL, QCMakeProperty::PATH,
QCMakeProperty::FILEPATH, QCMakeProperty::STRING}; QCMakeProperty::FILEPATH, QCMakeProperty::STRING};
AddCacheEntry::AddCacheEntry(QWidget* p) AddCacheEntry::AddCacheEntry(QWidget* p, const QStringList& completions)
: QWidget(p) : QWidget(p)
{ {
this->setupUi(this); this->setupUi(this);
@ -42,6 +43,7 @@ AddCacheEntry::AddCacheEntry(QWidget* p)
this->setTabOrder(path, filepath); this->setTabOrder(path, filepath);
this->setTabOrder(filepath, string); this->setTabOrder(filepath, string);
this->setTabOrder(string, this->Description); this->setTabOrder(string, this->Description);
this->Name->setCompleter(new QCompleter(completions, this));
} }
QString AddCacheEntry::name() const QString AddCacheEntry::name() const

View File

@ -15,6 +15,7 @@
#include <QWidget> #include <QWidget>
#include <QCheckBox> #include <QCheckBox>
#include <QStringList>
#include "QCMake.h" #include "QCMake.h"
#include "ui_AddCacheEntry.h" #include "ui_AddCacheEntry.h"
@ -23,7 +24,7 @@ class AddCacheEntry : public QWidget, public Ui::AddCacheEntry
{ {
Q_OBJECT Q_OBJECT
public: public:
AddCacheEntry(QWidget* p); AddCacheEntry(QWidget* p, const QStringList& completions);
QString name() const; QString name() const;
QVariant value() const; QVariant value() const;

View File

@ -68,6 +68,9 @@ CMakeSetupDialog::CMakeSetupDialog()
int w = settings.value("Width", 700).toInt(); int w = settings.value("Width", 700).toInt();
this->resize(w, h); this->resize(w, h);
this->AddVariableCompletions = settings.value("AddVariableCompletionEntries",
QStringList("CMAKE_INSTALL_PREFIX")).toStringList();
QWidget* cont = new QWidget(this); QWidget* cont = new QWidget(this);
this->setupUi(cont); this->setupUi(cont);
this->Splitter->setStretchFactor(0, 3); this->Splitter->setStretchFactor(0, 3);
@ -1008,7 +1011,7 @@ void CMakeSetupDialog::addCacheEntry()
dialog.resize(400, 200); dialog.resize(400, 200);
dialog.setWindowTitle(tr("Add Cache Entry")); dialog.setWindowTitle(tr("Add Cache Entry"));
QVBoxLayout* l = new QVBoxLayout(&dialog); QVBoxLayout* l = new QVBoxLayout(&dialog);
AddCacheEntry* w = new AddCacheEntry(&dialog); AddCacheEntry* w = new AddCacheEntry(&dialog, this->AddVariableCompletions);
QDialogButtonBox* btns = new QDialogButtonBox( QDialogButtonBox* btns = new QDialogButtonBox(
QDialogButtonBox::Ok | QDialogButtonBox::Cancel, QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
Qt::Horizontal, &dialog); Qt::Horizontal, &dialog);
@ -1021,6 +1024,26 @@ void CMakeSetupDialog::addCacheEntry()
{ {
QCMakeCacheModel* m = this->CacheValues->cacheModel(); QCMakeCacheModel* m = this->CacheValues->cacheModel();
m->insertProperty(w->type(), w->name(), w->description(), w->value(), false); m->insertProperty(w->type(), w->name(), w->description(), w->value(), false);
// only add variable names to the completion which are new
if (!this->AddVariableCompletions.contains(w->name()))
{
this->AddVariableCompletions << w->name();
// limit to at most 100 completion items
if (this->AddVariableCompletions.size() > 100)
{
this->AddVariableCompletions.removeFirst();
}
// make sure CMAKE_INSTALL_PREFIX is always there
if (!this->AddVariableCompletions.contains("CMAKE_INSTALL_PREFIX"))
{
this->AddVariableCompletions << QString("CMAKE_INSTALL_PREFIX");
}
QSettings settings;
settings.beginGroup("Settings/StartPath");
settings.setValue("AddVariableCompletionEntries",
this->AddVariableCompletions);
}
} }
} }

View File

@ -36,7 +36,7 @@ public slots:
void setBinaryDirectory(const QString& dir); void setBinaryDirectory(const QString& dir);
void setSourceDirectory(const QString& dir); void setSourceDirectory(const QString& dir);
protected slots: protected slots:
void initialize(); void initialize();
void doConfigure(); void doConfigure();
void doGenerate(); void doGenerate();
@ -46,7 +46,7 @@ protected slots:
void doInterrupt(); void doInterrupt();
void error(const QString& message); void error(const QString& message);
void message(const QString& message); void message(const QString& message);
void doSourceBrowse(); void doSourceBrowse();
void doBinaryBrowse(); void doBinaryBrowse();
void doReloadCache(); void doReloadCache();
@ -105,6 +105,8 @@ protected:
QTextCharFormat ErrorFormat; QTextCharFormat ErrorFormat;
QTextCharFormat MessageFormat; QTextCharFormat MessageFormat;
QStringList AddVariableCompletions;
QEventLoop LocalLoop; QEventLoop LocalLoop;
float ProgressOffset; float ProgressOffset;
@ -118,8 +120,8 @@ class QCMakeThread : public QThread
public: public:
QCMakeThread(QObject* p); QCMakeThread(QObject* p);
QCMake* cmakeInstance() const; QCMake* cmakeInstance() const;
signals: signals:
void cmakeInitialized(); void cmakeInitialized();
protected: protected:

View File

@ -1440,6 +1440,43 @@ int cmCTest::RunTest(std::vector<const char*> argv,
return result; return result;
} }
//----------------------------------------------------------------------
std::string cmCTest::SafeBuildIdField(const std::string& value)
{
std::string safevalue(value);
if (safevalue != "")
{
// Disallow non-filename and non-space whitespace characters.
// If they occur, replace them with ""
//
const char *disallowed = "\\/:*?\"<>|\n\r\t\f\v";
if (safevalue.find_first_of(disallowed) != value.npos)
{
std::string::size_type i = 0;
std::string::size_type n = strlen(disallowed);
char replace[2];
replace[1] = 0;
for (i= 0; i<n; ++i)
{
replace[0] = disallowed[i];
cmSystemTools::ReplaceString(safevalue, replace, "");
}
}
safevalue = cmXMLSafe(safevalue).str();
}
if (safevalue == "")
{
safevalue = "(empty)";
}
return safevalue;
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void cmCTest::StartXML(std::ostream& ostr, bool append) void cmCTest::StartXML(std::ostream& ostr, bool append)
{ {
@ -1450,19 +1487,27 @@ void cmCTest::StartXML(std::ostream& ostr, bool append)
" NightlStartTime was not set correctly." << std::endl); " NightlStartTime was not set correctly." << std::endl);
cmSystemTools::SetFatalErrorOccured(); cmSystemTools::SetFatalErrorOccured();
} }
// find out about the system // find out about the system
cmsys::SystemInformation info; cmsys::SystemInformation info;
info.RunCPUCheck(); info.RunCPUCheck();
info.RunOSCheck(); info.RunOSCheck();
info.RunMemoryCheck(); info.RunMemoryCheck();
std::string buildname = cmCTest::SafeBuildIdField(
this->GetCTestConfiguration("BuildName"));
std::string stamp = cmCTest::SafeBuildIdField(
this->CurrentTag + "-" + this->GetTestModelString());
std::string site = cmCTest::SafeBuildIdField(
this->GetCTestConfiguration("Site"));
ostr << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ostr << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
<< "<Site BuildName=\"" << this->GetCTestConfiguration("BuildName") << "<Site BuildName=\"" << buildname << "\"\n"
<< "\"\n\tBuildStamp=\"" << this->CurrentTag << "-" << "\tBuildStamp=\"" << stamp << "\"\n"
<< this->GetTestModelString() << "\"\n\tName=\"" << "\tName=\"" << site << "\"\n"
<< this->GetCTestConfiguration("Site") << "\"\n\tGenerator=\"ctest-" << "\tGenerator=\"ctest-" << cmVersion::GetCMakeVersion() << "\"\n"
<< cmVersion::GetCMakeVersion() << "\"\n"
<< (append? "\tAppend=\"true\"\n":"") << (append? "\tAppend=\"true\"\n":"")
<< "\tCompilerName=\"" << this->GetCTestConfiguration("Compiler") << "\tCompilerName=\"" << this->GetCTestConfiguration("Compiler")
<< "\"\n" << "\"\n"
#ifdef _COMPILER_VERSION #ifdef _COMPILER_VERSION
<< "\tCompilerVersion=\"_COMPILER_VERSION\"\n" << "\tCompilerVersion=\"_COMPILER_VERSION\"\n"

View File

@ -259,6 +259,10 @@ public:
std::string* stdOut, std::string* stdErr, std::string* stdOut, std::string* stdErr,
int* retVal = 0, const char* dir = 0, double timeout = 0.0); int* retVal = 0, const char* dir = 0, double timeout = 0.0);
//! Clean/make safe for xml the given value such that it may be used as
// one of the key fields by CDash when computing the buildid.
static std::string SafeBuildIdField(const std::string& value);
//! Start CTest XML output file //! Start CTest XML output file
void StartXML(std::ostream& ostr, bool append); void StartXML(std::ostream& ostr, bool append);

View File

@ -1318,8 +1318,9 @@ void cmComputeLinkInformation::AddFrameworkItem(std::string const& item)
this->AddFrameworkPath(this->SplitFramework.match(1)); this->AddFrameworkPath(this->SplitFramework.match(1));
// Add the item using the -framework option. // Add the item using the -framework option.
std::string fw = "-framework "; this->Items.push_back(Item("-framework", false));
fw += this->SplitFramework.match(2); std::string fw = this->SplitFramework.match(2);
fw = this->LocalGenerator->EscapeForShell(fw.c_str());
this->Items.push_back(Item(fw, false)); this->Items.push_back(Item(fw, false));
} }

View File

@ -65,6 +65,12 @@ bool cmConfigureFileCommand
cmSystemTools::SetFatalErrorOccured(); cmSystemTools::SetFatalErrorOccured();
return false; return false;
} }
std::string errorMessage;
if (!this->NewLineStyle.ReadFromArguments(args, errorMessage))
{
this->SetError(errorMessage.c_str());
return false;
}
this->CopyOnly = false; this->CopyOnly = false;
this->EscapeQuotes = false; this->EscapeQuotes = false;
@ -78,6 +84,12 @@ bool cmConfigureFileCommand
if(args[i] == "COPYONLY") if(args[i] == "COPYONLY")
{ {
this->CopyOnly = true; this->CopyOnly = true;
if (this->NewLineStyle.IsValid())
{
this->SetError("COPYONLY could not be used in combination "
"with NEWLINE_STYLE");
return false;
}
} }
else if(args[i] == "ESCAPE_QUOTES") else if(args[i] == "ESCAPE_QUOTES")
{ {
@ -122,7 +134,8 @@ int cmConfigureFileCommand::ConfigureFile()
this->OutputFile.c_str(), this->OutputFile.c_str(),
this->CopyOnly, this->CopyOnly,
this->AtOnly, this->AtOnly,
this->EscapeQuotes); this->EscapeQuotes,
this->NewLineStyle);
} }

View File

@ -56,7 +56,8 @@ public:
{ {
return return
" configure_file(<input> <output>\n" " configure_file(<input> <output>\n"
" [COPYONLY] [ESCAPE_QUOTES] [@ONLY])\n" " [COPYONLY] [ESCAPE_QUOTES] [@ONLY] \n"
" [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])\n"
"Copies a file <input> to file <output> and substitutes variable " "Copies a file <input> to file <output> and substitutes variable "
"values referenced in the file content. " "values referenced in the file content. "
"If <input> is a relative path it is evaluated with respect to " "If <input> is a relative path it is evaluated with respect to "
@ -81,14 +82,20 @@ public:
"either #define VAR or /* #undef VAR */ depending on " "either #define VAR or /* #undef VAR */ depending on "
"the setting of VAR in CMake. Any occurrences of #cmakedefine01 VAR " "the setting of VAR in CMake. Any occurrences of #cmakedefine01 VAR "
"will be replaced with either #define VAR 1 or #define VAR 0 " "will be replaced with either #define VAR 1 or #define VAR 0 "
"depending on whether VAR evaluates to TRUE or FALSE in CMake"; "depending on whether VAR evaluates to TRUE or FALSE in CMake.\n"
"With NEWLINE_STYLE the line ending could be adjusted: \n"
" 'UNIX' or 'LF' for \\n, 'DOS', 'WIN32' or 'CRLF' for \\r\\n.\n"
"COPYONLY must not be used with NEWLINE_STYLE.\n";
} }
virtual void FinalPass(); virtual void FinalPass();
virtual bool HasFinalPass() const { return !this->Immediate; } virtual bool HasFinalPass() const { return !this->Immediate; }
private: private:
int ConfigureFile(); int ConfigureFile();
cmNewLineStyle NewLineStyle;
std::string InputFile; std::string InputFile;
std::string OutputFile; std::string OutputFile;
bool CopyOnly; bool CopyOnly;

130
Source/cmCryptoHash.cxx Normal file
View File

@ -0,0 +1,130 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#include "cmCryptoHash.h"
#include <cmsys/MD5.h>
#include "cm_sha2.h"
//----------------------------------------------------------------------------
cmsys::auto_ptr<cmCryptoHash> cmCryptoHash::New(const char* algo)
{
if(strcmp(algo,"MD5") == 0)
{ return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashMD5); }
else if(strcmp(algo,"SHA1") == 0)
{ return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA1); }
else if(strcmp(algo,"SHA224") == 0)
{ return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA224); }
else if(strcmp(algo,"SHA256") == 0)
{ return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA256); }
else if(strcmp(algo,"SHA384") == 0)
{ return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA384); }
else if(strcmp(algo,"SHA512") == 0)
{ return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA512); }
else
{ return cmsys::auto_ptr<cmCryptoHash>(0); }
}
//----------------------------------------------------------------------------
std::string cmCryptoHash::HashString(const char* input)
{
this->Initialize();
this->Append(reinterpret_cast<unsigned char const*>(input),
static_cast<int>(strlen(input)));
return this->Finalize();
}
//----------------------------------------------------------------------------
std::string cmCryptoHash::HashFile(const char* file)
{
std::ifstream fin(file, std::ios::in | cmsys_ios_binary);
if(!fin)
{
return "";
}
this->Initialize();
// Should be efficient enough on most system:
const int bufferSize = 4096;
char buffer[bufferSize];
unsigned char const* buffer_uc =
reinterpret_cast<unsigned char const*>(buffer);
// This copy loop is very sensitive on certain platforms with
// slightly broken stream libraries (like HPUX). Normally, it is
// incorrect to not check the error condition on the fin.read()
// before using the data, but the fin.gcount() will be zero if an
// error occurred. Therefore, the loop should be safe everywhere.
while(fin)
{
fin.read(buffer, bufferSize);
if(int gcount = static_cast<int>(fin.gcount()))
{
this->Append(buffer_uc, gcount);
}
}
if(fin.eof())
{
return this->Finalize();
}
return "";
}
//----------------------------------------------------------------------------
cmCryptoHashMD5::cmCryptoHashMD5(): MD5(cmsysMD5_New())
{
}
//----------------------------------------------------------------------------
cmCryptoHashMD5::~cmCryptoHashMD5()
{
cmsysMD5_Delete(this->MD5);
}
//----------------------------------------------------------------------------
void cmCryptoHashMD5::Initialize()
{
cmsysMD5_Initialize(this->MD5);
}
//----------------------------------------------------------------------------
void cmCryptoHashMD5::Append(unsigned char const* buf, int sz)
{
cmsysMD5_Append(this->MD5, buf, sz);
}
//----------------------------------------------------------------------------
std::string cmCryptoHashMD5::Finalize()
{
char md5out[32];
cmsysMD5_FinalizeHex(this->MD5, md5out);
return std::string(md5out, 32);
}
#define cmCryptoHash_SHA_CLASS_IMPL(SHA) \
cmCryptoHash##SHA::cmCryptoHash##SHA(): SHA(new SHA_CTX) {} \
cmCryptoHash##SHA::~cmCryptoHash##SHA() { delete this->SHA; } \
void cmCryptoHash##SHA::Initialize() { SHA##_Init(this->SHA); } \
void cmCryptoHash##SHA::Append(unsigned char const* buf, int sz) \
{ SHA##_Update(this->SHA, buf, sz); } \
std::string cmCryptoHash##SHA::Finalize() \
{ \
char out[SHA##_DIGEST_STRING_LENGTH]; \
SHA##_End(this->SHA, out); \
return std::string(out, SHA##_DIGEST_STRING_LENGTH-1); \
}
cmCryptoHash_SHA_CLASS_IMPL(SHA1)
cmCryptoHash_SHA_CLASS_IMPL(SHA224)
cmCryptoHash_SHA_CLASS_IMPL(SHA256)
cmCryptoHash_SHA_CLASS_IMPL(SHA384)
cmCryptoHash_SHA_CLASS_IMPL(SHA512)

65
Source/cmCryptoHash.h Normal file
View File

@ -0,0 +1,65 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#ifndef cmCryptoHash_h
#define cmCryptoHash_h
#include "cmStandardIncludes.h"
#include <cmsys/auto_ptr.hxx>
class cmCryptoHash
{
public:
virtual ~cmCryptoHash() {}
static cmsys::auto_ptr<cmCryptoHash> New(const char* algo);
std::string HashString(const char* input);
std::string HashFile(const char* file);
protected:
virtual void Initialize()=0;
virtual void Append(unsigned char const*, int)=0;
virtual std::string Finalize()=0;
};
class cmCryptoHashMD5: public cmCryptoHash
{
struct cmsysMD5_s* MD5;
public:
cmCryptoHashMD5();
~cmCryptoHashMD5();
protected:
virtual void Initialize();
virtual void Append(unsigned char const* buf, int sz);
virtual std::string Finalize();
};
#define cmCryptoHash_SHA_CLASS_DECL(SHA) \
class cmCryptoHash##SHA: public cmCryptoHash \
{ \
union _SHA_CTX* SHA; \
public: \
cmCryptoHash##SHA(); \
~cmCryptoHash##SHA(); \
protected: \
virtual void Initialize(); \
virtual void Append(unsigned char const* buf, int sz); \
virtual std::string Finalize(); \
}
cmCryptoHash_SHA_CLASS_DECL(SHA1);
cmCryptoHash_SHA_CLASS_DECL(SHA224);
cmCryptoHash_SHA_CLASS_DECL(SHA256);
cmCryptoHash_SHA_CLASS_DECL(SHA384);
cmCryptoHash_SHA_CLASS_DECL(SHA512);
#undef cmCryptoHash_SHA_CLASS_DECL
#endif

View File

@ -0,0 +1,24 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#ifndef cmDocumentLocationUndefined_h
#define cmDocumentLocationUndefined_h
#define CM_LOCATION_UNDEFINED_BEHAVIOR(action) \
"\n" \
"Do not set properties that affect the location of a target after " \
action ". These include properties whose names match " \
"\"(RUNTIME|LIBRARY|ARCHIVE)_OUTPUT_(NAME|DIRECTORY)(_<CONFIG>)?\" " \
"or \"(IMPLIB_)?(PREFIX|SUFFIX)\". " \
"Failure to follow this rule is not diagnosed and leaves the location " \
"of the target undefined."
#endif

View File

@ -1116,6 +1116,24 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
false, false,
"Variables that Control the Build"); "Variables that Control the Build");
cm->DefineProperty
("CMAKE_AUTOMOC_MOC_OPTIONS", cmProperty::VARIABLE,
"Additional options for moc when using automoc (see CMAKE_AUTOMOC).",
"This variable is used to initialize the "
"AUTOMOC_MOC_OPTIONS property on all the targets. "
"See that target property for additional information.",
false,
"Variables that Control the Build");
cm->DefineProperty
("CMAKE_GNUtoMS", cmProperty::VARIABLE,
"Convert GNU import libraries (.dll.a) to MS format (.lib).",
"This variable is used to initialize the GNUtoMS property on targets "
"when they are created. "
"See that target property for additional information.",
false,
"Variables that Control the Build");
cm->DefineProperty cm->DefineProperty
("CMAKE_DEBUG_POSTFIX", cmProperty::VARIABLE, ("CMAKE_DEBUG_POSTFIX", cmProperty::VARIABLE,
"See variable CMAKE_<CONFIG>_POSTFIX.", "See variable CMAKE_<CONFIG>_POSTFIX.",
@ -1520,6 +1538,8 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
cmProperty::VARIABLE,0,0); cmProperty::VARIABLE,0,0);
cm->DefineProperty("CMAKE_<LANG>_COMPILER_ID_RUN", cm->DefineProperty("CMAKE_<LANG>_COMPILER_ID_RUN",
cmProperty::VARIABLE,0,0); cmProperty::VARIABLE,0,0);
cm->DefineProperty("CMAKE_<LANG>_ABI_FILES",
cmProperty::VARIABLE,0,0);
cm->DefineProperty("CMAKE_<LANG>_CREATE_ASSEMBLY_SOURCE", cm->DefineProperty("CMAKE_<LANG>_CREATE_ASSEMBLY_SOURCE",
cmProperty::VARIABLE,0,0); cmProperty::VARIABLE,0,0);
cm->DefineProperty("CMAKE_<LANG>_CREATE_PREPROCESSED_SOURCE", cm->DefineProperty("CMAKE_<LANG>_CREATE_PREPROCESSED_SOURCE",

View File

@ -125,6 +125,8 @@ cmExportBuildFileGenerator
std::string prop = "IMPORTED_IMPLIB"; std::string prop = "IMPORTED_IMPLIB";
prop += suffix; prop += suffix;
std::string value = target->GetFullPath(config, true); std::string value = target->GetFullPath(config, true);
target->GetImplibGNUtoMS(value, value,
"${CMAKE_IMPORT_LIBRARY_SUFFIX}");
properties[prop] = value; properties[prop] = value;
} }
} }

View File

@ -13,6 +13,7 @@
#define cmExportCommand_h #define cmExportCommand_h
#include "cmCommand.h" #include "cmCommand.h"
#include "cmDocumentLocationUndefined.h"
class cmExportBuildFileGenerator; class cmExportBuildFileGenerator;
@ -80,6 +81,7 @@ public:
"should never be installed. " "should never be installed. "
"See the install(EXPORT) command to export targets from an " "See the install(EXPORT) command to export targets from an "
"installation tree." "installation tree."
CM_LOCATION_UNDEFINED_BEHAVIOR("passing it to this command")
"\n" "\n"
" export(PACKAGE <name>)\n" " export(PACKAGE <name>)\n"
"Store the current build directory in the CMake user package registry " "Store the current build directory in the CMake user package registry "

View File

@ -368,3 +368,66 @@ cmExportFileGenerator
os << " )\n" os << " )\n"
<< "\n"; << "\n";
} }
//----------------------------------------------------------------------------
void
cmExportFileGenerator::GenerateImportedFileCheckLoop(std::ostream& os)
{
// Add code which verifies at cmake time that the file which is being
// imported actually exists on disk. This should in theory always be theory
// case, but still when packages are split into normal and development
// packages this might get broken (e.g. the Config.cmake could be part of
// the non-development package, something similar happened to me without
// on SUSE with a mysql pkg-config file, which claimed everything is fine,
// but the development package was not installed.).
os << "# Loop over all imported files and verify that they actually exist\n"
"FOREACH(target ${_IMPORT_CHECK_TARGETS} )\n"
" FOREACH(file ${_IMPORT_CHECK_FILES_FOR_${target}} )\n"
" IF(NOT EXISTS \"${file}\" )\n"
" MESSAGE(FATAL_ERROR \"The imported target \\\"${target}\\\""
" references the file\n"
" \\\"${file}\\\"\n"
"but this file does not exist. Possible reasons include:\n"
"* The file was deleted, renamed, or moved to another location.\n"
"* An install or uninstall procedure did not complete successfully.\n"
"* The installation package was faulty and contained\n"
" \\\"${CMAKE_CURRENT_LIST_FILE}\\\"\n"
"but not all the files it references.\n"
"\")\n"
" ENDIF()\n"
" ENDFOREACH()\n"
" UNSET(_IMPORT_CHECK_FILES_FOR_${target})\n"
"ENDFOREACH()\n"
"UNSET(_IMPORT_CHECK_TARGETS)\n"
"\n";
}
//----------------------------------------------------------------------------
void
cmExportFileGenerator
::GenerateImportedFileChecksCode(std::ostream& os, cmTarget* target,
ImportPropertyMap const& properties,
const std::set<std::string>& importedLocations)
{
// Construct the imported target name.
std::string targetName = this->Namespace;
targetName += target->GetName();
os << "LIST(APPEND _IMPORT_CHECK_TARGETS " << targetName << " )\n"
"LIST(APPEND _IMPORT_CHECK_FILES_FOR_" << targetName << " ";
for(std::set<std::string>::const_iterator li = importedLocations.begin();
li != importedLocations.end();
++li)
{
ImportPropertyMap::const_iterator pi = properties.find(*li);
if (pi != properties.end())
{
os << "\"" << pi->second << "\" ";
}
}
os << ")\n\n";
}

View File

@ -56,6 +56,11 @@ protected:
void GenerateImportPropertyCode(std::ostream& os, const char* config, void GenerateImportPropertyCode(std::ostream& os, const char* config,
cmTarget* target, cmTarget* target,
ImportPropertyMap const& properties); ImportPropertyMap const& properties);
void GenerateImportedFileChecksCode(std::ostream& os, cmTarget* target,
ImportPropertyMap const& properties,
const std::set<std::string>& importedLocations);
void GenerateImportedFileCheckLoop(std::ostream& os);
// Collect properties with detailed information about targets beyond // Collect properties with detailed information about targets beyond
// their location on disk. // their location on disk.

View File

@ -167,16 +167,18 @@ cmExportInstallFileGenerator
// Collect import properties for this target. // Collect import properties for this target.
cmTargetExport* te = *tei; cmTargetExport* te = *tei;
ImportPropertyMap properties; ImportPropertyMap properties;
std::set<std::string> importedLocations;
this->SetImportLocationProperty(config, suffix, te->ArchiveGenerator,
properties, importedLocations);
this->SetImportLocationProperty(config, suffix, te->LibraryGenerator,
properties, importedLocations);
this->SetImportLocationProperty(config, suffix, this->SetImportLocationProperty(config, suffix,
te->ArchiveGenerator, properties); te->RuntimeGenerator, properties,
this->SetImportLocationProperty(config, suffix, importedLocations);
te->LibraryGenerator, properties); this->SetImportLocationProperty(config, suffix, te->FrameworkGenerator,
this->SetImportLocationProperty(config, suffix, properties, importedLocations);
te->RuntimeGenerator, properties); this->SetImportLocationProperty(config, suffix, te->BundleGenerator,
this->SetImportLocationProperty(config, suffix, properties, importedLocations);
te->FrameworkGenerator, properties);
this->SetImportLocationProperty(config, suffix,
te->BundleGenerator, properties);
// If any file location was set for the target add it to the // If any file location was set for the target add it to the
// import file. // import file.
@ -194,9 +196,13 @@ cmExportInstallFileGenerator
// Generate code in the export file. // Generate code in the export file.
this->GenerateImportPropertyCode(os, config, te->Target, properties); this->GenerateImportPropertyCode(os, config, te->Target, properties);
this->GenerateImportedFileChecksCode(os, te->Target, properties,
importedLocations);
} }
} }
this->GenerateImportedFileCheckLoop(os);
// Cleanup the import prefix variable. // Cleanup the import prefix variable.
if(!this->ImportPrefix.empty()) if(!this->ImportPrefix.empty())
{ {
@ -211,7 +217,9 @@ void
cmExportInstallFileGenerator cmExportInstallFileGenerator
::SetImportLocationProperty(const char* config, std::string const& suffix, ::SetImportLocationProperty(const char* config, std::string const& suffix,
cmInstallTargetGenerator* itgen, cmInstallTargetGenerator* itgen,
ImportPropertyMap& properties) ImportPropertyMap& properties,
std::set<std::string>& importedLocations
)
{ {
// Skip rules that do not match this configuration. // Skip rules that do not match this configuration.
if(!(itgen && itgen->InstallsForConfig(config))) if(!(itgen && itgen->InstallsForConfig(config)))
@ -249,6 +257,7 @@ cmExportInstallFileGenerator
// Store the property. // Store the property.
properties[prop] = value; properties[prop] = value;
importedLocations.insert(prop);
} }
else else
{ {
@ -291,6 +300,7 @@ cmExportInstallFileGenerator
// Store the property. // Store the property.
properties[prop] = value; properties[prop] = value;
importedLocations.insert(prop);
} }
} }

View File

@ -75,7 +75,9 @@ protected:
void SetImportLocationProperty(const char* config, void SetImportLocationProperty(const char* config,
std::string const& suffix, std::string const& suffix,
cmInstallTargetGenerator* itgen, cmInstallTargetGenerator* itgen,
ImportPropertyMap& properties); ImportPropertyMap& properties,
std::set<std::string>& importedLocations
);
void ComplainAboutImportPrefix(cmInstallTargetGenerator* itgen); void ComplainAboutImportPrefix(cmInstallTargetGenerator* itgen);

View File

@ -85,7 +85,26 @@ void cmExtraEclipseCDT4Generator::Generate()
this->IsOutOfSourceBuild = (this->HomeDirectory!=this->HomeOutputDirectory); this->IsOutOfSourceBuild = (this->HomeDirectory!=this->HomeOutputDirectory);
this->GenerateSourceProject = (this->IsOutOfSourceBuild && this->GenerateSourceProject = (this->IsOutOfSourceBuild &&
mf->IsOn("ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT")); mf->IsOn("CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT"));
if ((this->GenerateSourceProject == false)
&& (mf->IsOn("ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT")))
{
mf->IssueMessage(cmake::WARNING,
"ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT is set to TRUE, "
"but this variable is not supported anymore since CMake 2.8.7.\n"
"Enable CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT instead.");
}
if (cmSystemTools::IsSubDirectory(this->HomeOutputDirectory.c_str(),
this->HomeDirectory.c_str()))
{
mf->IssueMessage(cmake::WARNING, "The build directory is a subdirectory "
"of the source directory.\n"
"This is not supported well by Eclipse. It is strongly "
"recommended to use a build directory which is a "
"sibling of the source directory.");
}
// NOTE: This is not good, since it pollutes the source tree. However, // NOTE: This is not good, since it pollutes the source tree. However,
// Eclipse doesn't allow CVS/SVN to work when the .project is not in // Eclipse doesn't allow CVS/SVN to work when the .project is not in
@ -103,7 +122,7 @@ void cmExtraEclipseCDT4Generator::Generate()
this->CreateCProjectFile(); this->CreateCProjectFile();
} }
void cmExtraEclipseCDT4Generator::CreateSourceProjectFile() const void cmExtraEclipseCDT4Generator::CreateSourceProjectFile()
{ {
assert(this->HomeDirectory != this->HomeOutputDirectory); assert(this->HomeDirectory != this->HomeOutputDirectory);
@ -131,6 +150,16 @@ void cmExtraEclipseCDT4Generator::CreateSourceProjectFile() const
"\t</buildSpec>\n" "\t</buildSpec>\n"
"\t<natures>\n" "\t<natures>\n"
"\t</natures>\n" "\t</natures>\n"
"\t<linkedResources>\n";
if (this->SupportsVirtualFolders)
{
this->CreateLinksToSubprojects(fout, this->HomeDirectory);
this->SrcLinkedResources.clear();
}
fout <<
"\t</linkedResources>\n"
"</projectDescription>\n" "</projectDescription>\n"
; ;
} }
@ -424,7 +453,7 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile()
if (this->SupportsVirtualFolders) if (this->SupportsVirtualFolders)
{ {
this->CreateLinksToSubprojects(fout); this->CreateLinksToSubprojects(fout, this->HomeOutputDirectory);
this->CreateLinksForTargets(fout); this->CreateLinksForTargets(fout);
} }
@ -531,7 +560,7 @@ void cmExtraEclipseCDT4Generator::CreateLinksForTargets(
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmExtraEclipseCDT4Generator::CreateLinksToSubprojects( void cmExtraEclipseCDT4Generator::CreateLinksToSubprojects(
cmGeneratedFileStream& fout) cmGeneratedFileStream& fout, const std::string& baseDir)
{ {
// for each sub project create a linked resource to the source dir // for each sub project create a linked resource to the source dir
// - only if it is an out-of-source build // - only if it is an out-of-source build
@ -547,8 +576,8 @@ void cmExtraEclipseCDT4Generator::CreateLinksToSubprojects(
it->second[0]->GetMakefile()->GetStartDirectory()); it->second[0]->GetMakefile()->GetStartDirectory());
// a linked resource must not point to a parent directory of .project or // a linked resource must not point to a parent directory of .project or
// .project itself // .project itself
if ((this->HomeOutputDirectory != linkSourceDirectory) && if ((baseDir != linkSourceDirectory) &&
!cmSystemTools::IsSubDirectory(this->HomeOutputDirectory.c_str(), !cmSystemTools::IsSubDirectory(baseDir.c_str(),
linkSourceDirectory.c_str())) linkSourceDirectory.c_str()))
{ {
std::string linkName = "[Subprojects]/"; std::string linkName = "[Subprojects]/";
@ -998,7 +1027,11 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
std::string virtDir = "[Targets]/"; std::string virtDir = "[Targets]/";
virtDir += prefix; virtDir += prefix;
virtDir += ti->first; virtDir += ti->first;
this->AppendTarget(fout, "Build", make, makeArgs, virtDir, "", std::string buildArgs = "-C \"";
buildArgs += makefile->GetHomeOutputDirectory();
buildArgs += "\" ";
buildArgs += makeArgs;
this->AppendTarget(fout, "Build", make, buildArgs, virtDir, "",
ti->first.c_str()); ti->first.c_str());
std::string cleanArgs = "-E chdir \""; std::string cleanArgs = "-E chdir \"";

View File

@ -46,7 +46,7 @@ public:
private: private:
// create .project file in the source tree // create .project file in the source tree
void CreateSourceProjectFile() const; void CreateSourceProjectFile();
// create .project file // create .project file
void CreateProjectFile(); void CreateProjectFile();
@ -104,7 +104,8 @@ private:
static void AddEnvVar(cmGeneratedFileStream& fout, const char* envVar, static void AddEnvVar(cmGeneratedFileStream& fout, const char* envVar,
cmMakefile* mf); cmMakefile* mf);
void CreateLinksToSubprojects(cmGeneratedFileStream& fout); void CreateLinksToSubprojects(cmGeneratedFileStream& fout,
const std::string& baseDir);
void CreateLinksForTargets(cmGeneratedFileStream& fout); void CreateLinksForTargets(cmGeneratedFileStream& fout);
std::vector<std::string> SrcLinkedResources; std::vector<std::string> SrcLinkedResources;

View File

@ -13,6 +13,7 @@
#include "cmake.h" #include "cmake.h"
#include "cmHexFileConverter.h" #include "cmHexFileConverter.h"
#include "cmFileTimeComparison.h" #include "cmFileTimeComparison.h"
#include "cmCryptoHash.h"
#if defined(CMAKE_BUILD_WITH_CMAKE) #if defined(CMAKE_BUILD_WITH_CMAKE)
#include "cm_curl.h" #include "cm_curl.h"
@ -22,6 +23,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <cmsys/auto_ptr.hxx>
#include <cmsys/Directory.hxx> #include <cmsys/Directory.hxx>
#include <cmsys/Glob.hxx> #include <cmsys/Glob.hxx>
#include <cmsys/RegularExpression.hxx> #include <cmsys/RegularExpression.hxx>
@ -83,6 +85,15 @@ bool cmFileCommand
{ {
return this->HandleReadCommand(args); return this->HandleReadCommand(args);
} }
else if ( subCommand == "MD5" ||
subCommand == "SHA1" ||
subCommand == "SHA224" ||
subCommand == "SHA256" ||
subCommand == "SHA384" ||
subCommand == "SHA512" )
{
return this->HandleHashCommand(args);
}
else if ( subCommand == "STRINGS" ) else if ( subCommand == "STRINGS" )
{ {
return this->HandleStringsCommand(args); return this->HandleStringsCommand(args);
@ -338,6 +349,41 @@ bool cmFileCommand::HandleReadCommand(std::vector<std::string> const& args)
return true; return true;
} }
//----------------------------------------------------------------------------
bool cmFileCommand::HandleHashCommand(std::vector<std::string> const& args)
{
#if defined(CMAKE_BUILD_WITH_CMAKE)
if(args.size() != 3)
{
cmOStringStream e;
e << args[0] << " requires a file name and output variable";
this->SetError(e.str().c_str());
return false;
}
cmsys::auto_ptr<cmCryptoHash> hash(cmCryptoHash::New(args[0].c_str()));
if(hash.get())
{
std::string out = hash->HashFile(args[1].c_str());
if(!out.empty())
{
this->Makefile->AddDefinition(args[2].c_str(), out.c_str());
return true;
}
cmOStringStream e;
e << args[0] << " failed to read file \"" << args[1] << "\": "
<< cmSystemTools::GetLastSystemError();
this->SetError(e.str().c_str());
}
return false;
#else
cmOStringStream e;
e << args[0] << " not available during bootstrap";
this->SetError(e.str().c_str());
return false;
#endif
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
bool cmFileCommand::HandleStringsCommand(std::vector<std::string> const& args) bool cmFileCommand::HandleStringsCommand(std::vector<std::string> const& args)
{ {

View File

@ -65,6 +65,7 @@ public:
" file(WRITE filename \"message to write\"... )\n" " file(WRITE filename \"message to write\"... )\n"
" file(APPEND filename \"message to write\"... )\n" " file(APPEND filename \"message to write\"... )\n"
" file(READ filename variable [LIMIT numBytes] [OFFSET offset] [HEX])\n" " file(READ filename variable [LIMIT numBytes] [OFFSET offset] [HEX])\n"
" file(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512> filename variable)\n"
" file(STRINGS filename variable [LIMIT_COUNT num]\n" " file(STRINGS filename variable [LIMIT_COUNT num]\n"
" [LIMIT_INPUT numBytes] [LIMIT_OUTPUT numBytes]\n" " [LIMIT_INPUT numBytes] [LIMIT_OUTPUT numBytes]\n"
" [LENGTH_MINIMUM numBytes] [LENGTH_MAXIMUM numBytes]\n" " [LENGTH_MINIMUM numBytes] [LENGTH_MAXIMUM numBytes]\n"
@ -94,6 +95,8 @@ public:
"variable. It will start at the given offset and read up to numBytes. " "variable. It will start at the given offset and read up to numBytes. "
"If the argument HEX is given, the binary data will be converted to " "If the argument HEX is given, the binary data will be converted to "
"hexadecimal representation and this will be stored in the variable.\n" "hexadecimal representation and this will be stored in the variable.\n"
"MD5, SHA1, SHA224, SHA256, SHA384, and SHA512 "
"will compute a cryptographic hash of the content of a file.\n"
"STRINGS will parse a list of ASCII strings from a file and " "STRINGS will parse a list of ASCII strings from a file and "
"store it in a variable. Binary data in the file are ignored. Carriage " "store it in a variable. Binary data in the file are ignored. Carriage "
"return (CR) characters are ignored. It works also for Intel Hex and " "return (CR) characters are ignored. It works also for Intel Hex and "
@ -227,6 +230,7 @@ protected:
bool HandleRemove(std::vector<std::string> const& args, bool recurse); bool HandleRemove(std::vector<std::string> const& args, bool recurse);
bool HandleWriteCommand(std::vector<std::string> const& args, bool append); bool HandleWriteCommand(std::vector<std::string> const& args, bool append);
bool HandleReadCommand(std::vector<std::string> const& args); bool HandleReadCommand(std::vector<std::string> const& args);
bool HandleHashCommand(std::vector<std::string> const& args);
bool HandleStringsCommand(std::vector<std::string> const& args); bool HandleStringsCommand(std::vector<std::string> const& args);
bool HandleGlobCommand(std::vector<std::string> const& args, bool recurse); bool HandleGlobCommand(std::vector<std::string> const& args, bool recurse);
bool HandleMakeDirectoryCommand(std::vector<std::string> const& args); bool HandleMakeDirectoryCommand(std::vector<std::string> const& args);

View File

@ -43,7 +43,8 @@ void cmGlobalVisualStudio10Generator::WriteSLNHeader(std::ostream& fout)
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio10Generator::CreateLocalGenerator() cmLocalGenerator *cmGlobalVisualStudio10Generator::CreateLocalGenerator()
{ {
cmLocalVisualStudio10Generator* lg = new cmLocalVisualStudio10Generator; cmLocalVisualStudio10Generator* lg =
new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS10);
lg->SetPlatformName(this->GetPlatformName()); lg->SetPlatformName(this->GetPlatformName());
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;

View File

@ -10,6 +10,7 @@
See the License for more information. See the License for more information.
============================================================================*/ ============================================================================*/
#include "cmGlobalVisualStudio11Generator.h" #include "cmGlobalVisualStudio11Generator.h"
#include "cmLocalVisualStudio10Generator.h"
#include "cmMakefile.h" #include "cmMakefile.h"
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -35,6 +36,16 @@ void cmGlobalVisualStudio11Generator::WriteSLNHeader(std::ostream& fout)
fout << "# Visual Studio 11\n"; fout << "# Visual Studio 11\n";
} }
//----------------------------------------------------------------------------
cmLocalGenerator *cmGlobalVisualStudio11Generator::CreateLocalGenerator()
{
cmLocalVisualStudio10Generator* lg =
new cmLocalVisualStudio10Generator(cmLocalVisualStudioGenerator::VS11);
lg->SetPlatformName(this->GetPlatformName());
lg->SetGlobalGenerator(this);
return lg;
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalVisualStudio11Generator void cmGlobalVisualStudio11Generator
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry) const

View File

@ -35,6 +35,9 @@ public:
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; virtual void GetDocumentation(cmDocumentationEntry& entry) const;
///! create the correct local generator
virtual cmLocalGenerator *CreateLocalGenerator();
/** TODO: VS 11 user macro support. */ /** TODO: VS 11 user macro support. */
virtual std::string GetUserMacrosDirectory() { return ""; } virtual std::string GetUserMacrosDirectory() { return ""; }
protected: protected:

View File

@ -26,8 +26,8 @@ cmGlobalVisualStudio71Generator::cmGlobalVisualStudio71Generator()
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio71Generator::CreateLocalGenerator() cmLocalGenerator *cmGlobalVisualStudio71Generator::CreateLocalGenerator()
{ {
cmLocalVisualStudio7Generator *lg = new cmLocalVisualStudio7Generator; cmLocalVisualStudio7Generator *lg =
lg->SetVersion71(); new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS71);
lg->SetExtraFlagTable(this->GetExtraFlagTableVS7()); lg->SetExtraFlagTable(this->GetExtraFlagTableVS7());
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;

View File

@ -133,7 +133,8 @@ std::string cmGlobalVisualStudio7Generator
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio7Generator::CreateLocalGenerator() cmLocalGenerator *cmGlobalVisualStudio7Generator::CreateLocalGenerator()
{ {
cmLocalVisualStudio7Generator *lg = new cmLocalVisualStudio7Generator; cmLocalVisualStudio7Generator *lg =
new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS7);
lg->SetExtraFlagTable(this->GetExtraFlagTableVS7()); lg->SetExtraFlagTable(this->GetExtraFlagTableVS7());
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;

View File

@ -28,8 +28,8 @@ cmGlobalVisualStudio8Generator::cmGlobalVisualStudio8Generator()
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio8Generator::CreateLocalGenerator() cmLocalGenerator *cmGlobalVisualStudio8Generator::CreateLocalGenerator()
{ {
cmLocalVisualStudio7Generator *lg = new cmLocalVisualStudio7Generator; cmLocalVisualStudio7Generator *lg =
lg->SetVersion8(); new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS8);
lg->SetPlatformName(this->GetPlatformName()); lg->SetPlatformName(this->GetPlatformName());
lg->SetExtraFlagTable(this->GetExtraFlagTableVS8()); lg->SetExtraFlagTable(this->GetExtraFlagTableVS8());
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);

View File

@ -25,8 +25,8 @@ cmGlobalVisualStudio8Win64Generator::cmGlobalVisualStudio8Win64Generator()
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio8Win64Generator::CreateLocalGenerator() cmLocalGenerator *cmGlobalVisualStudio8Win64Generator::CreateLocalGenerator()
{ {
cmLocalVisualStudio7Generator *lg = new cmLocalVisualStudio7Generator; cmLocalVisualStudio7Generator *lg
lg->SetVersion8(); = new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS8);
lg->SetPlatformName(this->GetPlatformName()); lg->SetPlatformName(this->GetPlatformName());
lg->SetExtraFlagTable(this->GetExtraFlagTableVS8()); lg->SetExtraFlagTable(this->GetExtraFlagTableVS8());
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);

View File

@ -40,8 +40,8 @@ void cmGlobalVisualStudio9Generator::WriteSLNHeader(std::ostream& fout)
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio9Generator::CreateLocalGenerator() cmLocalGenerator *cmGlobalVisualStudio9Generator::CreateLocalGenerator()
{ {
cmLocalVisualStudio7Generator *lg = new cmLocalVisualStudio7Generator; cmLocalVisualStudio7Generator *lg
lg->SetVersion9(); = new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS9);
lg->SetPlatformName(this->GetPlatformName()); lg->SetPlatformName(this->GetPlatformName());
lg->SetExtraFlagTable(this->GetExtraFlagTableVS8()); lg->SetExtraFlagTable(this->GetExtraFlagTableVS8());
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);

View File

@ -22,8 +22,8 @@ cmGlobalVisualStudio9IA64Generator::cmGlobalVisualStudio9IA64Generator()
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio9IA64Generator::CreateLocalGenerator() cmLocalGenerator *cmGlobalVisualStudio9IA64Generator::CreateLocalGenerator()
{ {
cmLocalVisualStudio7Generator *lg = new cmLocalVisualStudio7Generator; cmLocalVisualStudio7Generator *lg =
lg->SetVersion9(); new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS9);
lg->SetPlatformName(this->GetPlatformName()); lg->SetPlatformName(this->GetPlatformName());
lg->SetExtraFlagTable(this->GetExtraFlagTableVS8()); lg->SetExtraFlagTable(this->GetExtraFlagTableVS8());
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);

View File

@ -22,8 +22,8 @@ cmGlobalVisualStudio9Win64Generator::cmGlobalVisualStudio9Win64Generator()
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
cmLocalGenerator *cmGlobalVisualStudio9Win64Generator::CreateLocalGenerator() cmLocalGenerator *cmGlobalVisualStudio9Win64Generator::CreateLocalGenerator()
{ {
cmLocalVisualStudio7Generator *lg = new cmLocalVisualStudio7Generator; cmLocalVisualStudio7Generator *lg =
lg->SetVersion9(); new cmLocalVisualStudio7Generator(cmLocalVisualStudioGenerator::VS9);
lg->SetPlatformName(this->GetPlatformName()); lg->SetPlatformName(this->GetPlatformName());
lg->SetExtraFlagTable(this->GetExtraFlagTableVS8()); lg->SetExtraFlagTable(this->GetExtraFlagTableVS8());
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);

View File

@ -101,6 +101,13 @@ void cmInstallTargetGenerator::GenerateScriptForConfig(std::ostream& os,
std::string to1 = toDir + targetNameImport; std::string to1 = toDir + targetNameImport;
filesFrom.push_back(from1); filesFrom.push_back(from1);
filesTo.push_back(to1); filesTo.push_back(to1);
std::string targetNameImportLib;
if(this->Target->GetImplibGNUtoMS(targetNameImport,
targetNameImportLib))
{
filesFrom.push_back(fromDirConfig + targetNameImportLib);
filesTo.push_back(toDir + targetNameImportLib);
}
// An import library looks like a static library. // An import library looks like a static library.
type = cmTarget::STATIC_LIBRARY; type = cmTarget::STATIC_LIBRARY;
@ -157,6 +164,13 @@ void cmInstallTargetGenerator::GenerateScriptForConfig(std::ostream& os,
std::string to1 = toDir + targetNameImport; std::string to1 = toDir + targetNameImport;
filesFrom.push_back(from1); filesFrom.push_back(from1);
filesTo.push_back(to1); filesTo.push_back(to1);
std::string targetNameImportLib;
if(this->Target->GetImplibGNUtoMS(targetNameImport,
targetNameImportLib))
{
filesFrom.push_back(fromDirConfig + targetNameImportLib);
filesTo.push_back(toDir + targetNameImportLib);
}
// An import library looks like a static library. // An import library looks like a static library.
type = cmTarget::STATIC_LIBRARY; type = cmTarget::STATIC_LIBRARY;
@ -314,7 +328,11 @@ std::string cmInstallTargetGenerator::GetInstallFilename(cmTarget* target,
if(nameType == NameImplib) if(nameType == NameImplib)
{ {
// Use the import library name. // Use the import library name.
fname = targetNameImport; if(!target->GetImplibGNUtoMS(targetNameImport, fname,
"${CMAKE_IMPORT_LIBRARY_SUFFIX}"))
{
fname = targetNameImport;
}
} }
else if(nameType == NameReal) else if(nameType == NameReal)
{ {
@ -339,7 +357,11 @@ std::string cmInstallTargetGenerator::GetInstallFilename(cmTarget* target,
if(nameType == NameImplib) if(nameType == NameImplib)
{ {
// Use the import library name. // Use the import library name.
fname = targetNameImport; if(!target->GetImplibGNUtoMS(targetNameImport, fname,
"${CMAKE_IMPORT_LIBRARY_SUFFIX}"))
{
fname = targetNameImport;
}
} }
else if(nameType == NameSO) else if(nameType == NameSO)
{ {

View File

@ -96,14 +96,14 @@ void cmLocalGenerator::Configure()
std::string filesDir = this->Makefile->GetStartOutputDirectory(); std::string filesDir = this->Makefile->GetStartOutputDirectory();
filesDir += cmake::GetCMakeFilesDirectory(); filesDir += cmake::GetCMakeFilesDirectory();
cmSystemTools::MakeDirectory(filesDir.c_str()); cmSystemTools::MakeDirectory(filesDir.c_str());
// find & read the list file // find & read the list file
this->ReadInputFile(); this->ReadInputFile();
// at the end of the ReadListFile handle any old style subdirs // at the end of the ReadListFile handle any old style subdirs
// first get all the subdirectories // first get all the subdirectories
std::vector<cmLocalGenerator *> subdirs = this->GetChildren(); std::vector<cmLocalGenerator *> subdirs = this->GetChildren();
// for each subdir recurse // for each subdir recurse
std::vector<cmLocalGenerator *>::iterator sdi = subdirs.begin(); std::vector<cmLocalGenerator *>::iterator sdi = subdirs.begin();
for (; sdi != subdirs.end(); ++sdi) for (; sdi != subdirs.end(); ++sdi)
@ -112,7 +112,7 @@ void cmLocalGenerator::Configure()
{ {
this->Makefile->ConfigureSubDirectory(*sdi); this->Makefile->ConfigureSubDirectory(*sdi);
} }
} }
// Check whether relative paths should be used for optionally // Check whether relative paths should be used for optionally
// relative paths. // relative paths.
@ -212,10 +212,10 @@ void cmLocalGenerator::ReadInputFile()
} }
void cmLocalGenerator::SetupPathConversions() void cmLocalGenerator::SetupPathConversions()
{ {
// Setup the current output directory components for use by // Setup the current output directory components for use by
// Convert // Convert
std::string outdir; std::string outdir;
outdir = outdir =
cmSystemTools::CollapseFullPath(this->Makefile->GetHomeDirectory()); cmSystemTools::CollapseFullPath(this->Makefile->GetHomeDirectory());
cmSystemTools::SplitPath(outdir.c_str(), this->HomeDirectoryComponents); cmSystemTools::SplitPath(outdir.c_str(), this->HomeDirectoryComponents);
@ -225,12 +225,12 @@ void cmLocalGenerator::SetupPathConversions()
outdir = cmSystemTools::CollapseFullPath outdir = cmSystemTools::CollapseFullPath
(this->Makefile->GetHomeOutputDirectory()); (this->Makefile->GetHomeOutputDirectory());
cmSystemTools::SplitPath(outdir.c_str(), cmSystemTools::SplitPath(outdir.c_str(),
this->HomeOutputDirectoryComponents); this->HomeOutputDirectoryComponents);
outdir = cmSystemTools::CollapseFullPath outdir = cmSystemTools::CollapseFullPath
(this->Makefile->GetStartOutputDirectory()); (this->Makefile->GetStartOutputDirectory());
cmSystemTools::SplitPath(outdir.c_str(), cmSystemTools::SplitPath(outdir.c_str(),
this->StartOutputDirectoryComponents); this->StartOutputDirectoryComponents);
} }
@ -289,17 +289,17 @@ void cmLocalGenerator::GenerateTestFiles()
fout.SetCopyIfDifferent(true); fout.SetCopyIfDifferent(true);
fout << "# CMake generated Testfile for " << std::endl fout << "# CMake generated Testfile for " << std::endl
<< "# Source directory: " << "# Source directory: "
<< this->Makefile->GetStartDirectory() << std::endl << this->Makefile->GetStartDirectory() << std::endl
<< "# Build directory: " << "# Build directory: "
<< this->Makefile->GetStartOutputDirectory() << std::endl << this->Makefile->GetStartOutputDirectory() << std::endl
<< "# " << std::endl << "# " << std::endl
<< "# This file includes the relevent testing commands " << "# This file includes the relevent testing commands "
<< "required for " << std::endl << "required for " << std::endl
<< "# testing this directory and lists subdirectories to " << "# testing this directory and lists subdirectories to "
<< "be tested as well." << std::endl; << "be tested as well." << std::endl;
const char* testIncludeFile = const char* testIncludeFile =
this->Makefile->GetProperty("TEST_INCLUDE_FILE"); this->Makefile->GetProperty("TEST_INCLUDE_FILE");
if ( testIncludeFile ) if ( testIncludeFile )
{ {
@ -320,7 +320,7 @@ void cmLocalGenerator::GenerateTestFiles()
for(i = 0; i < this->Children.size(); ++i) for(i = 0; i < this->Children.size(); ++i)
{ {
fout << "SUBDIRS("; fout << "SUBDIRS(";
std::string outP = std::string outP =
this->Children[i]->GetMakefile()->GetStartOutputDirectory(); this->Children[i]->GetMakefile()->GetStartOutputDirectory();
fout << this->Convert(outP.c_str(),START_OUTPUT); fout << this->Convert(outP.c_str(),START_OUTPUT);
fout << ")" << std::endl; fout << ")" << std::endl;
@ -472,7 +472,7 @@ void cmLocalGenerator::GenerateInstallRules()
// Ask each install generator to write its code. // Ask each install generator to write its code.
std::vector<cmInstallGenerator*> const& installers = std::vector<cmInstallGenerator*> const& installers =
this->Makefile->GetInstallGenerators(); this->Makefile->GetInstallGenerators();
for(std::vector<cmInstallGenerator*>::const_iterator for(std::vector<cmInstallGenerator*>::const_iterator
gi = installers.begin(); gi = installers.begin();
gi != installers.end(); ++gi) gi != installers.end(); ++gi)
{ {
@ -553,15 +553,15 @@ void cmLocalGenerator::GenerateTargetManifest()
} }
} }
void cmLocalGenerator::AddCustomCommandToCreateObject(const char* ofname, void cmLocalGenerator::AddCustomCommandToCreateObject(const char* ofname,
const char* lang, const char* lang,
cmSourceFile& source, cmSourceFile& source,
cmTarget& ) cmTarget& )
{ {
std::string objectDir = cmSystemTools::GetFilenamePath(std::string(ofname)); std::string objectDir = cmSystemTools::GetFilenamePath(std::string(ofname));
objectDir = this->Convert(objectDir.c_str(),START_OUTPUT,SHELL); objectDir = this->Convert(objectDir.c_str(),START_OUTPUT,SHELL);
std::string objectFile = this->Convert(ofname,START_OUTPUT,SHELL); std::string objectFile = this->Convert(ofname,START_OUTPUT,SHELL);
std::string sourceFile = std::string sourceFile =
this->Convert(source.GetFullPath().c_str(),START_OUTPUT,SHELL,true); this->Convert(source.GetFullPath().c_str(),START_OUTPUT,SHELL,true);
std::string varString = "CMAKE_"; std::string varString = "CMAKE_";
varString += lang; varString += lang;
@ -655,7 +655,7 @@ void cmLocalGenerator::AddBuildTargetRule(const char* llang, cmTarget& target)
ofname += "/"; ofname += "/";
ofname += obj; ofname += obj;
objVector.push_back(ofname); objVector.push_back(ofname);
this->AddCustomCommandToCreateObject(ofname.c_str(), this->AddCustomCommandToCreateObject(ofname.c_str(),
llang, *(*i), target); llang, *(*i), target);
objs += this->Convert(ofname.c_str(),START_OUTPUT,MAKEFILE); objs += this->Convert(ofname.c_str(),START_OUTPUT,MAKEFILE);
objs += " "; objs += " ";
@ -672,7 +672,7 @@ void cmLocalGenerator::AddBuildTargetRule(const char* llang, cmTarget& target)
// Shared Module: // Shared Module:
std::string linkLibs; // should be set std::string linkLibs; // should be set
std::string flags; // should be set std::string flags; // should be set
std::string linkFlags; // should be set std::string linkFlags; // should be set
this->GetTargetFlags(linkLibs, flags, linkFlags, target); this->GetTargetFlags(linkLibs, flags, linkFlags, target);
cmLocalGenerator::RuleVariables vars; cmLocalGenerator::RuleVariables vars;
vars.Language = llang; vars.Language = llang;
@ -682,17 +682,17 @@ void cmLocalGenerator::AddBuildTargetRule(const char* llang, cmTarget& target)
vars.LinkLibraries = linkLibs.c_str(); vars.LinkLibraries = linkLibs.c_str();
vars.Flags = flags.c_str(); vars.Flags = flags.c_str();
vars.LinkFlags = linkFlags.c_str(); vars.LinkFlags = linkFlags.c_str();
std::string langFlags; std::string langFlags;
this->AddLanguageFlags(langFlags, llang, 0); this->AddLanguageFlags(langFlags, llang, 0);
this->AddArchitectureFlags(langFlags, &target, llang, 0); this->AddArchitectureFlags(langFlags, &target, llang, 0);
vars.LanguageCompileFlags = langFlags.c_str(); vars.LanguageCompileFlags = langFlags.c_str();
cmCustomCommandLines commandLines; cmCustomCommandLines commandLines;
std::vector<std::string> rules; std::vector<std::string> rules;
rules.push_back(this->Makefile->GetRequiredDefinition(createRule.c_str())); rules.push_back(this->Makefile->GetRequiredDefinition(createRule.c_str()));
std::vector<std::string> commands; std::vector<std::string> commands;
cmSystemTools::ExpandList(rules, commands); cmSystemTools::ExpandList(rules, commands);
for(std::vector<std::string>::iterator i = commands.begin(); for(std::vector<std::string>::iterator i = commands.begin();
i != commands.end(); ++i) i != commands.end(); ++i)
{ {
@ -728,21 +728,21 @@ void cmLocalGenerator::AddBuildTargetRule(const char* llang, cmTarget& target)
(this->Makefile->GetSource(targetFullPath.c_str())); (this->Makefile->GetSource(targetFullPath.c_str()));
} }
void cmLocalGenerator void cmLocalGenerator
::CreateCustomTargetsAndCommands(std::set<cmStdString> const& lang) ::CreateCustomTargetsAndCommands(std::set<cmStdString> const& lang)
{ {
cmTargets &tgts = this->Makefile->GetTargets(); cmTargets &tgts = this->Makefile->GetTargets();
for(cmTargets::iterator l = tgts.begin(); for(cmTargets::iterator l = tgts.begin();
l != tgts.end(); l++) l != tgts.end(); l++)
{ {
cmTarget& target = l->second; cmTarget& target = l->second;
switch(target.GetType()) switch(target.GetType())
{ {
case cmTarget::STATIC_LIBRARY: case cmTarget::STATIC_LIBRARY:
case cmTarget::SHARED_LIBRARY: case cmTarget::SHARED_LIBRARY:
case cmTarget::MODULE_LIBRARY: case cmTarget::MODULE_LIBRARY:
case cmTarget::EXECUTABLE: case cmTarget::EXECUTABLE:
{ {
const char* llang = target.GetLinkerLanguage(); const char* llang = target.GetLinkerLanguage();
if(!llang) if(!llang)
@ -759,7 +759,7 @@ void cmLocalGenerator
this->AddBuildTargetRule(llang, target); this->AddBuildTargetRule(llang, target);
} }
} }
break; break;
default: default:
break; break;
} }
@ -769,14 +769,14 @@ void cmLocalGenerator
// List of variables that are replaced when // List of variables that are replaced when
// rules are expanced. These variables are // rules are expanced. These variables are
// replaced in the form <var> with GetSafeDefinition(var). // replaced in the form <var> with GetSafeDefinition(var).
// ${LANG} is replaced in the variable first with all enabled // ${LANG} is replaced in the variable first with all enabled
// languages. // languages.
static const char* ruleReplaceVars[] = static const char* ruleReplaceVars[] =
{ {
"CMAKE_${LANG}_COMPILER", "CMAKE_${LANG}_COMPILER",
"CMAKE_SHARED_LIBRARY_CREATE_${LANG}_FLAGS", "CMAKE_SHARED_LIBRARY_CREATE_${LANG}_FLAGS",
"CMAKE_SHARED_MODULE_CREATE_${LANG}_FLAGS", "CMAKE_SHARED_MODULE_CREATE_${LANG}_FLAGS",
"CMAKE_SHARED_MODULE_${LANG}_FLAGS", "CMAKE_SHARED_MODULE_${LANG}_FLAGS",
"CMAKE_SHARED_LIBRARY_${LANG}_FLAGS", "CMAKE_SHARED_LIBRARY_${LANG}_FLAGS",
"CMAKE_${LANG}_LINK_FLAGS", "CMAKE_${LANG}_LINK_FLAGS",
"CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG", "CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG",
@ -807,7 +807,7 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
return replaceValues.Flags; return replaceValues.Flags;
} }
} }
if(replaceValues.Source) if(replaceValues.Source)
{ {
if(variable == "SOURCE") if(variable == "SOURCE")
@ -870,7 +870,7 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
} }
if(replaceValues.Target) if(replaceValues.Target)
{ {
if(variable == "TARGET_QUOTED") if(variable == "TARGET_QUOTED")
{ {
std::string targetQuoted = replaceValues.Target; std::string targetQuoted = replaceValues.Target;
@ -1018,13 +1018,13 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
int pos = 0; int pos = 0;
while(ruleReplaceVars[pos]) while(ruleReplaceVars[pos])
{ {
for(std::vector<std::string>::iterator i = enabledLanguages.begin(); for(std::vector<std::string>::iterator i = enabledLanguages.begin();
i != enabledLanguages.end(); ++i) i != enabledLanguages.end(); ++i)
{ {
const char* lang = i->c_str(); const char* lang = i->c_str();
std::string actualReplace = ruleReplaceVars[pos]; std::string actualReplace = ruleReplaceVars[pos];
// If this is the compiler then look for the extra variable // If this is the compiler then look for the extra variable
// _COMPILER_ARG1 which must be the first argument to the compiler // _COMPILER_ARG1 which must be the first argument to the compiler
const char* compilerArg1 = 0; const char* compilerArg1 = 0;
if(actualReplace == "CMAKE_${LANG}_COMPILER") if(actualReplace == "CMAKE_${LANG}_COMPILER")
{ {
@ -1038,7 +1038,7 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
} }
if(actualReplace == variable) if(actualReplace == variable)
{ {
std::string replace = std::string replace =
this->Makefile->GetSafeDefinition(variable.c_str()); this->Makefile->GetSafeDefinition(variable.c_str());
// if the variable is not a FLAG then treat it like a path // if the variable is not a FLAG then treat it like a path
if(variable.find("_FLAG") == variable.npos) if(variable.find("_FLAG") == variable.npos)
@ -1062,7 +1062,7 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
} }
void void
cmLocalGenerator::ExpandRuleVariables(std::string& s, cmLocalGenerator::ExpandRuleVariables(std::string& s,
const RuleVariables& replaceValues) const RuleVariables& replaceValues)
{ {
@ -1213,7 +1213,7 @@ const char* cmLocalGenerator::GetIncludeFlags(const char* lang,
std::string flagVar = "CMAKE_INCLUDE_FLAG_"; std::string flagVar = "CMAKE_INCLUDE_FLAG_";
flagVar += lang; flagVar += lang;
const char* includeFlag = const char* includeFlag =
this->Makefile->GetSafeDefinition(flagVar.c_str()); this->Makefile->GetSafeDefinition(flagVar.c_str());
flagVar = "CMAKE_INCLUDE_FLAG_SEP_"; flagVar = "CMAKE_INCLUDE_FLAG_SEP_";
flagVar += lang; flagVar += lang;
@ -1223,7 +1223,7 @@ const char* cmLocalGenerator::GetIncludeFlags(const char* lang,
{ {
quotePaths = true; quotePaths = true;
} }
bool repeatFlag = true; bool repeatFlag = true;
// should the include flag be repeated like ie. -IA -IB // should the include flag be repeated like ie. -IA -IB
if(!sep) if(!sep)
{ {
@ -1354,15 +1354,15 @@ void cmLocalGenerator::GetIncludeDirectories(std::vector<std::string>& dirs,
this->Makefile->GetDefinition("VTK_SOURCE_DIR"); this->Makefile->GetDefinition("VTK_SOURCE_DIR");
if(vtkSourceDir) if(vtkSourceDir)
{ {
const char* vtk_major = const char* vtk_major =
this->Makefile->GetDefinition("VTK_MAJOR_VERSION"); this->Makefile->GetDefinition("VTK_MAJOR_VERSION");
const char* vtk_minor = const char* vtk_minor =
this->Makefile->GetDefinition("VTK_MINOR_VERSION"); this->Makefile->GetDefinition("VTK_MINOR_VERSION");
vtk_major = vtk_major? vtk_major : "4"; vtk_major = vtk_major? vtk_major : "4";
vtk_minor = vtk_minor? vtk_minor : "4"; vtk_minor = vtk_minor? vtk_minor : "4";
int vmajor = 0; int vmajor = 0;
int vminor = 0; int vminor = 0;
if(sscanf(vtk_major, "%d", &vmajor) && if(sscanf(vtk_major, "%d", &vmajor) &&
sscanf(vtk_minor, "%d", &vminor) && vmajor == 4 && vminor <= 4) sscanf(vtk_minor, "%d", &vminor) && vmajor == 4 && vminor <= 4)
{ {
includeSourceDir = true; includeSourceDir = true;
@ -1403,7 +1403,7 @@ void cmLocalGenerator::GetIncludeDirectories(std::vector<std::string>& dirs,
} }
// Get the project-specified include directories. // Get the project-specified include directories.
std::vector<std::string>& includes = std::vector<std::string>& includes =
this->Makefile->GetIncludeDirectories(); this->Makefile->GetIncludeDirectories();
// Support putting all the in-project include directories first if // Support putting all the in-project include directories first if
@ -1446,17 +1446,17 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
std::string& linkFlags, std::string& linkFlags,
cmTarget& target) cmTarget& target)
{ {
std::string buildType = std::string buildType =
this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE"); this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE");
buildType = cmSystemTools::UpperCase(buildType); buildType = cmSystemTools::UpperCase(buildType);
const char* libraryLinkVariable = const char* libraryLinkVariable =
"CMAKE_SHARED_LINKER_FLAGS"; // default to shared library "CMAKE_SHARED_LINKER_FLAGS"; // default to shared library
switch(target.GetType()) switch(target.GetType())
{ {
case cmTarget::STATIC_LIBRARY: case cmTarget::STATIC_LIBRARY:
{ {
const char* targetLinkFlags = const char* targetLinkFlags =
target.GetProperty("STATIC_LIBRARY_FLAGS"); target.GetProperty("STATIC_LIBRARY_FLAGS");
if(targetLinkFlags) if(targetLinkFlags)
{ {
@ -1475,11 +1475,11 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
} }
} }
} }
break; break;
case cmTarget::MODULE_LIBRARY: case cmTarget::MODULE_LIBRARY:
libraryLinkVariable = "CMAKE_MODULE_LINKER_FLAGS"; libraryLinkVariable = "CMAKE_MODULE_LINKER_FLAGS";
case cmTarget::SHARED_LIBRARY: case cmTarget::SHARED_LIBRARY:
{ {
linkFlags = this->Makefile->GetSafeDefinition(libraryLinkVariable); linkFlags = this->Makefile->GetSafeDefinition(libraryLinkVariable);
linkFlags += " "; linkFlags += " ";
if(!buildType.empty()) if(!buildType.empty())
@ -1489,8 +1489,8 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
build += buildType; build += buildType;
linkFlags += this->Makefile->GetSafeDefinition(build.c_str()); linkFlags += this->Makefile->GetSafeDefinition(build.c_str());
linkFlags += " "; linkFlags += " ";
} }
if(this->Makefile->IsOn("WIN32") && if(this->Makefile->IsOn("WIN32") &&
!(this->Makefile->IsOn("CYGWIN") || this->Makefile->IsOn("MINGW"))) !(this->Makefile->IsOn("CYGWIN") || this->Makefile->IsOn("MINGW")))
{ {
const std::vector<cmSourceFile*>& sources = target.GetSourceFiles(); const std::vector<cmSourceFile*>& sources = target.GetSourceFiles();
@ -1500,14 +1500,14 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
cmSourceFile* sf = *i; cmSourceFile* sf = *i;
if(sf->GetExtension() == "def") if(sf->GetExtension() == "def")
{ {
linkFlags += linkFlags +=
this->Makefile->GetSafeDefinition("CMAKE_LINK_DEF_FILE_FLAG"); this->Makefile->GetSafeDefinition("CMAKE_LINK_DEF_FILE_FLAG");
linkFlags += this->Convert(sf->GetFullPath().c_str(), linkFlags += this->Convert(sf->GetFullPath().c_str(),
START_OUTPUT, SHELL); START_OUTPUT, SHELL);
linkFlags += " "; linkFlags += " ";
} }
} }
} }
const char* targetLinkFlags = target.GetProperty("LINK_FLAGS"); const char* targetLinkFlags = target.GetProperty("LINK_FLAGS");
if(targetLinkFlags) if(targetLinkFlags)
{ {
@ -1520,11 +1520,11 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
configLinkFlags += buildType; configLinkFlags += buildType;
targetLinkFlags = target.GetProperty(configLinkFlags.c_str()); targetLinkFlags = target.GetProperty(configLinkFlags.c_str());
if(targetLinkFlags) if(targetLinkFlags)
{ {
linkFlags += targetLinkFlags; linkFlags += targetLinkFlags;
linkFlags += " "; linkFlags += " ";
} }
} }
cmOStringStream linklibsStr; cmOStringStream linklibsStr;
this->OutputLinkLibraries(linklibsStr, target, false); this->OutputLinkLibraries(linklibsStr, target, false);
linkLibs = linklibsStr.str(); linkLibs = linklibsStr.str();
@ -1532,7 +1532,7 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
break; break;
case cmTarget::EXECUTABLE: case cmTarget::EXECUTABLE:
{ {
linkFlags += linkFlags +=
this->Makefile->GetSafeDefinition("CMAKE_EXE_LINKER_FLAGS"); this->Makefile->GetSafeDefinition("CMAKE_EXE_LINKER_FLAGS");
linkFlags += " "; linkFlags += " ";
if(!buildType.empty()) if(!buildType.empty())
@ -1541,7 +1541,7 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
build += buildType; build += buildType;
linkFlags += this->Makefile->GetSafeDefinition(build.c_str()); linkFlags += this->Makefile->GetSafeDefinition(build.c_str());
linkFlags += " "; linkFlags += " ";
} }
const char* linkLanguage = target.GetLinkerLanguage(); const char* linkLanguage = target.GetLinkerLanguage();
if(!linkLanguage) if(!linkLanguage)
{ {
@ -1566,7 +1566,7 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
if(cmSystemTools::IsOn if(cmSystemTools::IsOn
(this->Makefile->GetDefinition("BUILD_SHARED_LIBS"))) (this->Makefile->GetDefinition("BUILD_SHARED_LIBS")))
{ {
std::string sFlagVar = std::string("CMAKE_SHARED_BUILD_") std::string sFlagVar = std::string("CMAKE_SHARED_BUILD_")
+ linkLanguage + std::string("_FLAGS"); + linkLanguage + std::string("_FLAGS");
linkFlags += this->Makefile->GetSafeDefinition(sFlagVar.c_str()); linkFlags += this->Makefile->GetSafeDefinition(sFlagVar.c_str());
linkFlags += " "; linkFlags += " ";
@ -1579,7 +1579,7 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
} }
else else
{ {
linkFlags += linkFlags +=
this->Makefile->GetSafeDefinition("CMAKE_CREATE_CONSOLE_EXE"); this->Makefile->GetSafeDefinition("CMAKE_CREATE_CONSOLE_EXE");
linkFlags += " "; linkFlags += " ";
} }
@ -1595,13 +1595,13 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
configLinkFlags += buildType; configLinkFlags += buildType;
targetLinkFlags = target.GetProperty(configLinkFlags.c_str()); targetLinkFlags = target.GetProperty(configLinkFlags.c_str());
if(targetLinkFlags) if(targetLinkFlags)
{ {
linkFlags += targetLinkFlags; linkFlags += targetLinkFlags;
linkFlags += " "; linkFlags += " ";
} }
} }
} }
break; break;
default: default:
break; break;
} }
@ -1661,9 +1661,9 @@ void cmLocalGenerator::OutputLinkLibraries(std::ostream& fout,
const char* linkLanguage = cli.GetLinkLanguage(); const char* linkLanguage = cli.GetLinkLanguage();
std::string libPathFlag = std::string libPathFlag =
this->Makefile->GetRequiredDefinition("CMAKE_LIBRARY_PATH_FLAG"); this->Makefile->GetRequiredDefinition("CMAKE_LIBRARY_PATH_FLAG");
std::string libPathTerminator = std::string libPathTerminator =
this->Makefile->GetSafeDefinition("CMAKE_LIBRARY_PATH_TERMINATOR"); this->Makefile->GetSafeDefinition("CMAKE_LIBRARY_PATH_TERMINATOR");
// Flags to link an executable to shared libraries. // Flags to link an executable to shared libraries.
@ -1786,11 +1786,11 @@ void cmLocalGenerator::AddArchitectureFlags(std::string& flags,
{ {
std::vector<std::string> archs; std::vector<std::string> archs;
target->GetAppleArchs(config, archs); target->GetAppleArchs(config, archs);
const char* sysroot = const char* sysroot =
this->Makefile->GetDefinition("CMAKE_OSX_SYSROOT"); this->Makefile->GetDefinition("CMAKE_OSX_SYSROOT");
const char* sysrootDefault = const char* sysrootDefault =
this->Makefile->GetDefinition("CMAKE_OSX_SYSROOT_DEFAULT"); this->Makefile->GetDefinition("CMAKE_OSX_SYSROOT_DEFAULT");
const char* deploymentTarget = const char* deploymentTarget =
this->Makefile->GetDefinition("CMAKE_OSX_DEPLOYMENT_TARGET"); this->Makefile->GetDefinition("CMAKE_OSX_DEPLOYMENT_TARGET");
std::string isysrootVar = std::string("CMAKE_") + lang + "_HAS_ISYSROOT"; std::string isysrootVar = std::string("CMAKE_") + lang + "_HAS_ISYSROOT";
bool hasIsysroot = this->Makefile->IsOn(isysrootVar.c_str()); bool hasIsysroot = this->Makefile->IsOn(isysrootVar.c_str());
@ -1876,7 +1876,7 @@ bool cmLocalGenerator::GetRealDependency(const char* inName,
if(cmSystemTools::FileIsFullPath(inName)) if(cmSystemTools::FileIsFullPath(inName))
{ {
std::string tLocation; std::string tLocation;
if(target->GetType() >= cmTarget::EXECUTABLE && if(target->GetType() >= cmTarget::EXECUTABLE &&
target->GetType() <= cmTarget::MODULE_LIBRARY) target->GetType() <= cmTarget::MODULE_LIBRARY)
{ {
tLocation = target->GetLocation(config); tLocation = target->GetLocation(config);
@ -2904,7 +2904,7 @@ std::string cmLocalGenerator::EscapeForShell(const char* str, bool makeVars,
else else
{ {
cmsysSystem_Shell_GetArgumentForUnix(str, &arg[0], flags); cmsysSystem_Shell_GetArgumentForUnix(str, &arg[0], flags);
} }
return std::string(&arg[0]); return std::string(&arg[0]);
} }
@ -2976,9 +2976,9 @@ cmLocalGenerator::GetTargetDirectory(cmTarget const&) const
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void void
cmLocalGenerator::GetTargetObjectFileDirectories(cmTarget* , cmLocalGenerator::GetTargetObjectFileDirectories(cmTarget* ,
std::vector<std::string>& std::vector<std::string>&
) )
{ {
cmSystemTools::Error("GetTargetObjectFileDirectories" cmSystemTools::Error("GetTargetObjectFileDirectories"

View File

@ -607,6 +607,27 @@ cmLocalUnixMakefileGenerator3
} }
} }
//----------------------------------------------------------------------------
std::string
cmLocalUnixMakefileGenerator3
::ConvertShellCommand(std::string const& cmd, RelativeRoot root)
{
if(this->WatcomWMake &&
cmSystemTools::FileIsFullPath(cmd.c_str()) &&
cmd.find_first_of("( )") != cmd.npos)
{
// On Watcom WMake use the windows short path for the command
// name. This is needed to avoid funny quoting problems on
// lines with shell redirection operators.
std::string scmd;
if(cmSystemTools::GetShortPath(cmd.c_str(), scmd))
{
return this->Convert(scmd.c_str(), NONE, SHELL);
}
}
return this->Convert(cmd.c_str(), root, SHELL);
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void void
cmLocalUnixMakefileGenerator3 cmLocalUnixMakefileGenerator3
@ -646,13 +667,13 @@ cmLocalUnixMakefileGenerator3
makefileStream makefileStream
<< "# The CMake executable.\n" << "# The CMake executable.\n"
<< "CMAKE_COMMAND = " << "CMAKE_COMMAND = "
<< this->Convert(cmakecommand.c_str(), FULL, SHELL).c_str() << this->ConvertShellCommand(cmakecommand, FULL)
<< "\n" << "\n"
<< "\n"; << "\n";
makefileStream makefileStream
<< "# The command to remove a file.\n" << "# The command to remove a file.\n"
<< "RM = " << "RM = "
<< this->Convert(cmakecommand.c_str(),FULL,SHELL).c_str() << this->ConvertShellCommand(cmakecommand, FULL)
<< " -E remove -f\n" << " -E remove -f\n"
<< "\n"; << "\n";
@ -662,7 +683,7 @@ cmLocalUnixMakefileGenerator3
makefileStream makefileStream
<< "# The program to use to edit the cache.\n" << "# The program to use to edit the cache.\n"
<< "CMAKE_EDIT_COMMAND = " << "CMAKE_EDIT_COMMAND = "
<< this->Convert(edit_cmd,FULL,SHELL) << "\n" << this->ConvertShellCommand(edit_cmd, FULL) << "\n"
<< "\n"; << "\n";
} }
@ -697,7 +718,7 @@ cmLocalUnixMakefileGenerator3
// This should be the first target except for the default_target in // This should be the first target except for the default_target in
// the interface Makefile. // the interface Makefile.
this->WriteMakeRule( this->WriteMakeRule(
makefileStream, "Disable implicit rules so canoncical targets will work.", makefileStream, "Disable implicit rules so canonical targets will work.",
".SUFFIXES", no_depends, no_commands, false); ".SUFFIXES", no_depends, no_commands, false);
if(!this->NMake && !this->WatcomWMake && !this->BorlandMakeCurlyHack) if(!this->NMake && !this->WatcomWMake && !this->BorlandMakeCurlyHack)
@ -1019,22 +1040,9 @@ cmLocalUnixMakefileGenerator3
// without the current directory being in the search path. // without the current directory being in the search path.
cmd = "./" + cmd; cmd = "./" + cmd;
} }
if(this->WatcomWMake &&
cmSystemTools::FileIsFullPath(cmd.c_str()) &&
cmd.find(" ") != cmd.npos)
{
// On Watcom WMake use the windows short path for the command
// name. This is needed to avoid funny quoting problems on
// lines with shell redirection operators.
std::string scmd;
if(cmSystemTools::GetShortPath(cmd.c_str(), scmd))
{
cmd = scmd;
}
}
std::string launcher = std::string launcher =
this->MakeLauncher(cc, target, workingDir? NONE : START_OUTPUT); this->MakeLauncher(cc, target, workingDir? NONE : START_OUTPUT);
cmd = launcher + this->Convert(cmd.c_str(),NONE,SHELL); cmd = launcher + this->ConvertShellCommand(cmd, NONE);
ccg.AppendArguments(c, cmd); ccg.AppendArguments(c, cmd);
if(content) if(content)

View File

@ -340,6 +340,7 @@ protected:
void CheckMultipleOutputs(bool verbose); void CheckMultipleOutputs(bool verbose);
private: private:
std::string ConvertShellCommand(std::string const& cmd, RelativeRoot root);
std::string MakeLauncher(const cmCustomCommand& cc, cmTarget* target, std::string MakeLauncher(const cmCustomCommand& cc, cmTarget* target,
RelativeRoot relative); RelativeRoot relative);

View File

@ -61,7 +61,8 @@ class cmVS10XMLParser : public cmXMLParser
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmLocalVisualStudio10Generator::cmLocalVisualStudio10Generator() cmLocalVisualStudio10Generator::cmLocalVisualStudio10Generator(VSVersion v):
cmLocalVisualStudio7Generator(v)
{ {
} }

View File

@ -25,7 +25,7 @@ class cmLocalVisualStudio10Generator : public cmLocalVisualStudio7Generator
{ {
public: public:
///! Set cache only and recurse to false by default. ///! Set cache only and recurse to false by default.
cmLocalVisualStudio10Generator(); cmLocalVisualStudio10Generator(VSVersion v);
virtual ~cmLocalVisualStudio10Generator(); virtual ~cmLocalVisualStudio10Generator();

View File

@ -21,7 +21,8 @@
#include <cmsys/RegularExpression.hxx> #include <cmsys/RegularExpression.hxx>
cmLocalVisualStudio6Generator::cmLocalVisualStudio6Generator() cmLocalVisualStudio6Generator::cmLocalVisualStudio6Generator():
cmLocalVisualStudioGenerator(VS6)
{ {
} }

View File

@ -45,9 +45,9 @@ private:
extern cmVS7FlagTable cmLocalVisualStudio7GeneratorFlagTable[]; extern cmVS7FlagTable cmLocalVisualStudio7GeneratorFlagTable[];
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmLocalVisualStudio7Generator::cmLocalVisualStudio7Generator() cmLocalVisualStudio7Generator::cmLocalVisualStudio7Generator(VSVersion v):
cmLocalVisualStudioGenerator(v)
{ {
this->Version = 7;
this->PlatformName = "Win32"; this->PlatformName = "Win32";
this->ExtraFlagTable = 0; this->ExtraFlagTable = 0;
this->Internal = new cmLocalVisualStudio7GeneratorInternals(this); this->Internal = new cmLocalVisualStudio7GeneratorInternals(this);
@ -719,7 +719,7 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
t = Options::FortranCompiler; t = Options::FortranCompiler;
table = cmLocalVisualStudio7GeneratorFortranFlagTable; table = cmLocalVisualStudio7GeneratorFortranFlagTable;
} }
Options targetOptions(this, this->Version, t, Options targetOptions(this, t,
table, table,
this->ExtraFlagTable); this->ExtraFlagTable);
targetOptions.FixExceptionHandlingDefault(); targetOptions.FixExceptionHandlingDefault();
@ -888,7 +888,7 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
// end of <Tool Name=VCMIDLTool // end of <Tool Name=VCMIDLTool
// Check if we need the FAT32 workaround. // Check if we need the FAT32 workaround.
if(targetBuilds && this->Version >= 8) if(targetBuilds && this->Version >= VS8)
{ {
// Check the filesystem type where the target will be written. // Check the filesystem type where the target will be written.
if(cmLVS6G_IsFAT(target.GetDirectory(configName).c_str())) if(cmLVS6G_IsFAT(target.GetDirectory(configName).c_str()))
@ -975,7 +975,7 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
extraLinkOptions += " "; extraLinkOptions += " ";
extraLinkOptions += targetLinkFlags; extraLinkOptions += targetLinkFlags;
} }
Options linkOptions(this, this->Version, Options::Linker, Options linkOptions(this, Options::Linker,
cmLocalVisualStudio7GeneratorLinkFlagTable); cmLocalVisualStudio7GeneratorLinkFlagTable);
linkOptions.Parse(extraLinkOptions.c_str()); linkOptions.Parse(extraLinkOptions.c_str());
if(!this->ModuleDefinitionFile.empty()) if(!this->ModuleDefinitionFile.empty())
@ -1604,7 +1604,7 @@ void cmLocalVisualStudio7Generator
tool = Options::FortranCompiler; tool = Options::FortranCompiler;
table = cmLocalVisualStudio7GeneratorFortranFlagTable; table = cmLocalVisualStudio7GeneratorFortranFlagTable;
} }
Options fileOptions(this, this->Version, tool, table, Options fileOptions(this, tool, table,
this->ExtraFlagTable); this->ExtraFlagTable);
fileOptions.Parse(fc.CompileFlags.c_str()); fileOptions.Parse(fc.CompileFlags.c_str());
fileOptions.AddDefines(fc.CompileDefs.c_str()); fileOptions.AddDefines(fc.CompileDefs.c_str());
@ -1811,11 +1811,18 @@ void cmLocalVisualStudio7Generator::WriteProjectSCC(std::ostream& fout,
const char* vsProjectname = target.GetProperty("VS_SCC_PROJECTNAME"); const char* vsProjectname = target.GetProperty("VS_SCC_PROJECTNAME");
const char* vsLocalpath = target.GetProperty("VS_SCC_LOCALPATH"); const char* vsLocalpath = target.GetProperty("VS_SCC_LOCALPATH");
const char* vsProvider = target.GetProperty("VS_SCC_PROVIDER"); const char* vsProvider = target.GetProperty("VS_SCC_PROVIDER");
if(vsProvider && vsLocalpath && vsProjectname) if(vsProvider && vsLocalpath && vsProjectname)
{ {
fout << "\tSccProjectName=\"" << vsProjectname << "\"\n" fout << "\tSccProjectName=\"" << vsProjectname << "\"\n"
<< "\tSccLocalPath=\"" << vsLocalpath << "\"\n" << "\tSccLocalPath=\"" << vsLocalpath << "\"\n"
<< "\tSccProvider=\"" << vsProvider << "\"\n"; << "\tSccProvider=\"" << vsProvider << "\"\n";
const char* vsAuxPath = target.GetProperty("VS_SCC_AUXPATH");
if(vsAuxPath)
{
fout << "\tSccAuxPath=\"" << vsAuxPath << "\"\n";
}
} }
} }
@ -1913,13 +1920,13 @@ cmLocalVisualStudio7Generator::WriteProjectStart(std::ostream& fout,
fout << "<?xml version=\"1.0\" encoding = \"Windows-1252\"?>\n" fout << "<?xml version=\"1.0\" encoding = \"Windows-1252\"?>\n"
<< "<VisualStudioProject\n" << "<VisualStudioProject\n"
<< "\tProjectType=\"Visual C++\"\n"; << "\tProjectType=\"Visual C++\"\n";
if(this->Version == 71) if(this->Version == VS71)
{ {
fout << "\tVersion=\"7.10\"\n"; fout << "\tVersion=\"7.10\"\n";
} }
else else
{ {
fout << "\tVersion=\"" << this->Version << ".00\"\n"; fout << "\tVersion=\"" << (this->Version/10) << ".00\"\n";
} }
const char* projLabel = target.GetProperty("PROJECT_LABEL"); const char* projLabel = target.GetProperty("PROJECT_LABEL");
if(!projLabel) if(!projLabel)
@ -1934,7 +1941,7 @@ cmLocalVisualStudio7Generator::WriteProjectStart(std::ostream& fout,
cmGlobalVisualStudio7Generator* gg = cmGlobalVisualStudio7Generator* gg =
static_cast<cmGlobalVisualStudio7Generator *>(this->GlobalGenerator); static_cast<cmGlobalVisualStudio7Generator *>(this->GlobalGenerator);
fout << "\tName=\"" << projLabel << "\"\n"; fout << "\tName=\"" << projLabel << "\"\n";
if(this->Version >= 8) if(this->Version >= VS8)
{ {
fout << "\tProjectGUID=\"{" << gg->GetGUID(libName) << "}\"\n"; fout << "\tProjectGUID=\"{" << gg->GetGUID(libName) << "}\"\n";
} }

View File

@ -35,7 +35,7 @@ class cmLocalVisualStudio7Generator : public cmLocalVisualStudioGenerator
{ {
public: public:
///! Set cache only and recurse to false by default. ///! Set cache only and recurse to false by default.
cmLocalVisualStudio7Generator(); cmLocalVisualStudio7Generator(VSVersion v);
virtual ~cmLocalVisualStudio7Generator(); virtual ~cmLocalVisualStudio7Generator();
@ -53,9 +53,6 @@ public:
*/ */
void SetBuildType(BuildType,const char *name); void SetBuildType(BuildType,const char *name);
void SetVersion71() {this->Version = 71;}
void SetVersion8() {this->Version = 8;}
void SetVersion9() {this->Version = 9;}
void SetPlatformName(const char* n) { this->PlatformName = n;} void SetPlatformName(const char* n) { this->PlatformName = n;}
void GetTargetObjectFileDirectories(cmTarget* target, void GetTargetObjectFileDirectories(cmTarget* target,
std::vector<std::string>& std::vector<std::string>&
@ -130,7 +127,6 @@ private:
cmVS7FlagTable const* ExtraFlagTable; cmVS7FlagTable const* ExtraFlagTable;
std::string ModuleDefinitionFile; std::string ModuleDefinitionFile;
int Version;
bool FortranProject; bool FortranProject;
std::string PlatformName; // Win32 or x64 std::string PlatformName; // Win32 or x64
cmLocalVisualStudio7GeneratorInternals* Internal; cmLocalVisualStudio7GeneratorInternals* Internal;

View File

@ -18,10 +18,11 @@
#include "windows.h" #include "windows.h"
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmLocalVisualStudioGenerator::cmLocalVisualStudioGenerator() cmLocalVisualStudioGenerator::cmLocalVisualStudioGenerator(VSVersion v)
{ {
this->WindowsShell = true; this->WindowsShell = true;
this->WindowsVSIDE = true; this->WindowsVSIDE = true;
this->Version = v;
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -249,6 +250,20 @@ cmLocalVisualStudioGenerator
// Add this command line. // Add this command line.
std::string cmd = ccg.GetCommand(c); std::string cmd = ccg.GetCommand(c);
// Use "call " before any invocations of .bat or .cmd files
// invoked as custom commands.
//
std::string suffix;
if (cmd.size() > 4)
{
suffix = cmSystemTools::LowerCase(cmd.substr(cmd.size()-4));
if (suffix == ".bat" || suffix == ".cmd")
{
script += "call ";
}
}
script += this->Convert(cmd.c_str(), relativeRoot, SHELL); script += this->Convert(cmd.c_str(), relativeRoot, SHELL);
ccg.AppendArguments(c, script); ccg.AppendArguments(c, script);

View File

@ -29,7 +29,19 @@ class cmCustomCommand;
class cmLocalVisualStudioGenerator : public cmLocalGenerator class cmLocalVisualStudioGenerator : public cmLocalGenerator
{ {
public: public:
cmLocalVisualStudioGenerator(); /** Known versions of Visual Studio. */
enum VSVersion
{
VS6 = 60,
VS7 = 70,
VS71 = 71,
VS8 = 80,
VS9 = 90,
VS10 = 100,
VS11 = 110
};
cmLocalVisualStudioGenerator(VSVersion v);
virtual ~cmLocalVisualStudioGenerator(); virtual ~cmLocalVisualStudioGenerator();
/** Construct a script from the given list of command lines. */ /** Construct a script from the given list of command lines. */
@ -41,6 +53,9 @@ public:
sequence of custom commands. */ sequence of custom commands. */
const char* GetReportErrorLabel() const; const char* GetReportErrorLabel() const;
/** Version of Visual Studio. */
VSVersion GetVersion() const { return this->Version; }
protected: protected:
virtual const char* ReportErrorLabel() const; virtual const char* ReportErrorLabel() const;
virtual bool CustomCommandUseLocal() const { return false; } virtual bool CustomCommandUseLocal() const { return false; }
@ -58,6 +73,8 @@ protected:
std::map<cmStdString, int>& count); std::map<cmStdString, int>& count);
std::set<const cmSourceFile*> NeedObjectName; std::set<const cmSourceFile*> NeedObjectName;
friend class cmVisualStudio10TargetGenerator; friend class cmVisualStudio10TargetGenerator;
VSVersion Version;
}; };
#endif #endif

View File

@ -3213,7 +3213,8 @@ void cmMakefile::ConfigureString(const std::string& input,
} }
int cmMakefile::ConfigureFile(const char* infile, const char* outfile, int cmMakefile::ConfigureFile(const char* infile, const char* outfile,
bool copyonly, bool atOnly, bool escapeQuotes) bool copyonly, bool atOnly, bool escapeQuotes,
const cmNewLineStyle& newLine)
{ {
int res = 1; int res = 1;
if ( !this->CanIWriteThisFile(outfile) ) if ( !this->CanIWriteThisFile(outfile) )
@ -3250,9 +3251,20 @@ int cmMakefile::ConfigureFile(const char* infile, const char* outfile,
} }
else else
{ {
std::string newLineCharacters;
std::ios_base::openmode omode = std::ios_base::out | std::ios_base::trunc;
if (newLine.IsValid())
{
newLineCharacters = newLine.GetCharacters();
omode |= std::ios::binary;
}
else
{
newLineCharacters = "\n";
}
std::string tempOutputFile = soutfile; std::string tempOutputFile = soutfile;
tempOutputFile += ".tmp"; tempOutputFile += ".tmp";
std::ofstream fout(tempOutputFile.c_str()); std::ofstream fout(tempOutputFile.c_str(), omode);
if(!fout) if(!fout)
{ {
cmSystemTools::Error( cmSystemTools::Error(
@ -3277,7 +3289,7 @@ int cmMakefile::ConfigureFile(const char* infile, const char* outfile,
{ {
outLine = ""; outLine = "";
this->ConfigureString(inLine, outLine, atOnly, escapeQuotes); this->ConfigureString(inLine, outLine, atOnly, escapeQuotes);
fout << outLine.c_str() << "\n"; fout << outLine.c_str() << newLineCharacters;
} }
// close the files before attempting to copy // close the files before attempting to copy
fin.close(); fin.close();

View File

@ -19,6 +19,7 @@
#include "cmPropertyMap.h" #include "cmPropertyMap.h"
#include "cmSystemTools.h" #include "cmSystemTools.h"
#include "cmTarget.h" #include "cmTarget.h"
#include "cmNewLineStyle.h"
#include "cmake.h" #include "cmake.h"
#if defined(CMAKE_BUILD_WITH_CMAKE) #if defined(CMAKE_BUILD_WITH_CMAKE)
@ -703,7 +704,9 @@ public:
* Copy file but change lines acording to ConfigureString * Copy file but change lines acording to ConfigureString
*/ */
int ConfigureFile(const char* infile, const char* outfile, int ConfigureFile(const char* infile, const char* outfile,
bool copyonly, bool atOnly, bool escapeQuotes); bool copyonly, bool atOnly, bool escapeQuotes,
const cmNewLineStyle& = cmNewLineStyle());
#if defined(CMAKE_BUILD_WITH_CMAKE) #if defined(CMAKE_BUILD_WITH_CMAKE)
/** /**

View File

@ -241,6 +241,13 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
exeCleanFiles.push_back(this->Convert(targetFullPathImport.c_str(), exeCleanFiles.push_back(this->Convert(targetFullPathImport.c_str(),
cmLocalGenerator::START_OUTPUT, cmLocalGenerator::START_OUTPUT,
cmLocalGenerator::UNCHANGED)); cmLocalGenerator::UNCHANGED));
std::string implib;
if(this->Target->GetImplibGNUtoMS(targetFullPathImport, implib))
{
exeCleanFiles.push_back(this->Convert(implib.c_str(),
cmLocalGenerator::START_OUTPUT,
cmLocalGenerator::UNCHANGED));
}
} }
// List the PDB for cleaning only when the whole target is // List the PDB for cleaning only when the whole target is
@ -270,8 +277,7 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
std::string linkRuleVar = "CMAKE_"; std::string linkRuleVar = "CMAKE_";
linkRuleVar += linkLanguage; linkRuleVar += linkLanguage;
linkRuleVar += "_LINK_EXECUTABLE"; linkRuleVar += "_LINK_EXECUTABLE";
std::string linkRule = std::string linkRule = this->GetLinkRule(linkRuleVar.c_str());
this->Makefile->GetRequiredDefinition(linkRuleVar.c_str());
std::vector<std::string> commands1; std::vector<std::string> commands1;
cmSystemTools::ExpandListArgument(linkRule, real_link_commands); cmSystemTools::ExpandListArgument(linkRule, real_link_commands);
if(this->Target->IsExecutableWithExports()) if(this->Target->IsExecutableWithExports())

View File

@ -512,6 +512,13 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
libCleanFiles.push_back(this->Convert(targetFullPathImport.c_str(), libCleanFiles.push_back(this->Convert(targetFullPathImport.c_str(),
cmLocalGenerator::START_OUTPUT, cmLocalGenerator::START_OUTPUT,
cmLocalGenerator::UNCHANGED)); cmLocalGenerator::UNCHANGED));
std::string implib;
if(this->Target->GetImplibGNUtoMS(targetFullPathImport, implib))
{
libCleanFiles.push_back(this->Convert(implib.c_str(),
cmLocalGenerator::START_OUTPUT,
cmLocalGenerator::UNCHANGED));
}
} }
// List the PDB for cleaning only when the whole target is // List the PDB for cleaning only when the whole target is
@ -772,7 +779,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
else else
{ {
// Get the set of commands. // Get the set of commands.
std::string linkRule = this->Makefile->GetRequiredDefinition(linkRuleVar); std::string linkRule = this->GetLinkRule(linkRuleVar);
cmSystemTools::ExpandListArgument(linkRule, real_link_commands); cmSystemTools::ExpandListArgument(linkRule, real_link_commands);
// Expand placeholders. // Expand placeholders.

View File

@ -1633,6 +1633,23 @@ void cmMakefileTargetGenerator
} }
} }
//----------------------------------------------------------------------------
std::string cmMakefileTargetGenerator::GetLinkRule(const char* linkRuleVar)
{
std::string linkRule = this->Makefile->GetRequiredDefinition(linkRuleVar);
if(this->Target->HasImplibGNUtoMS())
{
std::string ruleVar = "CMAKE_";
ruleVar += this->Target->GetLinkerLanguage(this->ConfigName);
ruleVar += "_GNUtoMS_RULE";
if(const char* rule = this->Makefile->GetDefinition(ruleVar.c_str()))
{
linkRule += rule;
}
}
return linkRule;
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmMakefileTargetGenerator void cmMakefileTargetGenerator
::CloseFileStreams() ::CloseFileStreams()

View File

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

95
Source/cmNewLineStyle.cxx Normal file
View File

@ -0,0 +1,95 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2011 Kitware, Inc., Insight Software Consortium
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#include "cmNewLineStyle.h"
cmNewLineStyle::cmNewLineStyle() : NewLineStyle(Invalid)
{
}
bool cmNewLineStyle::IsValid() const
{
return NewLineStyle != Invalid;
}
bool cmNewLineStyle::ReadFromArguments(const std::vector<std::string>& args,
std::string& errorString)
{
NewLineStyle = Invalid;
for (size_t i = 0; i< args.size(); i++)
{
if (args[i] == "NEWLINE_STYLE")
{
size_t const styleIndex = i + 1;
if (args.size() > styleIndex)
{
const std::string eol = args[styleIndex];
if (eol == "LF" || eol == "UNIX")
{
NewLineStyle = LF;
return true;
}
else if (eol == "CRLF" || eol == "WIN32" || eol == "DOS")
{
NewLineStyle = CRLF;
return true;
}
else
{
errorString = "NEWLINE_STYLE sets an unknown style, only LF, "
"CRLF, UNIX, DOS, and WIN32 are supported";
return false;
}
}
else
{
errorString = "NEWLINE_STYLE must set a style: "
"LF, CRLF, UNIX, DOS, or WIN32";
return false;
}
}
}
return true;
}
const std::string cmNewLineStyle::GetCharacters() const
{
switch (NewLineStyle)
{
case Invalid:
return "";
case LF:
return "\n";
case CRLF:
return "\r\n";
default:
;
};
return "";
}
void cmNewLineStyle::SetStyle(Style style)
{
NewLineStyle = style;
}
cmNewLineStyle::Style cmNewLineStyle::GetStyle() const
{
return NewLineStyle;
}

46
Source/cmNewLineStyle.h Normal file
View File

@ -0,0 +1,46 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2011 Kitware, Inc., Insight Software Consortium
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#ifndef cmNewLineStyle_h
#define cmNewLineStyle_h
#include "cmStandardIncludes.h"
class cmNewLineStyle
{
public:
cmNewLineStyle();
enum Style
{
Invalid,
// LF = '\n', 0x0A, 10
// CR = '\r', 0x0D, 13
LF, // Unix
CRLF // Dos
};
void SetStyle(Style);
Style GetStyle() const;
bool IsValid() const;
bool ReadFromArguments(const std::vector<std::string>& args,
std::string &errorString);
const std::string GetCharacters() const;
private:
Style NewLineStyle;
};
#endif

View File

@ -108,9 +108,13 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
{ {
cmMakefile* makefile = target->GetMakefile(); cmMakefile* makefile = target->GetMakefile();
const char* targetName = target->GetName(); const char* targetName = target->GetName();
// don't do anything if there is no Qt4: // don't do anything if there is no Qt4 or Qt5Core (which contains moc):
std::string qtMajorVersion = makefile->GetSafeDefinition("QT_VERSION_MAJOR"); std::string qtMajorVersion = makefile->GetSafeDefinition("QT_VERSION_MAJOR");
if (qtMajorVersion != "4") if (qtMajorVersion == "")
{
qtMajorVersion = makefile->GetSafeDefinition("Qt5Core_VERSION_MAJOR");
}
if (qtMajorVersion != "4" && qtMajorVersion != "5")
{ {
return; return;
} }
@ -132,7 +136,7 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
targetDir += ".dir/"; targetDir += ".dir/";
cmCustomCommandLine currentLine; cmCustomCommandLine currentLine;
currentLine.push_back(makefile->GetCMakeInstance()->GetCMakeCommand()); currentLine.push_back(makefile->GetSafeDefinition("CMAKE_COMMAND"));
currentLine.push_back("-E"); currentLine.push_back("-E");
currentLine.push_back("cmake_automoc"); currentLine.push_back("cmake_automoc");
currentLine.push_back(targetDir); currentLine.push_back(targetDir);
@ -189,9 +193,15 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
} }
} }
std::string _moc_incs = makefile->GetProperty("INCLUDE_DIRECTORIES"); const char* tmp = makefile->GetProperty("INCLUDE_DIRECTORIES");
std::string _moc_defs = makefile->GetProperty("DEFINITIONS"); std::string _moc_incs = (tmp!=0 ? tmp : "");
std::string _moc_compile_defs = makefile->GetProperty("COMPILE_DEFINITIONS"); tmp = makefile->GetProperty("DEFINITIONS");
std::string _moc_defs = (tmp!=0 ? tmp : "");
tmp = makefile->GetProperty("COMPILE_DEFINITIONS");
std::string _moc_compile_defs = (tmp!=0 ? tmp : "");
tmp = target->GetProperty("AUTOMOC_MOC_OPTIONS");
std::string _moc_options = (tmp!=0 ? tmp : "");
// forget the variables added here afterwards again: // forget the variables added here afterwards again:
cmMakefile::ScopePushPop varScope(makefile); cmMakefile::ScopePushPop varScope(makefile);
static_cast<void>(varScope); static_cast<void>(varScope);
@ -200,11 +210,12 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
makefile->AddDefinition("_moc_incs", _moc_incs.c_str()); makefile->AddDefinition("_moc_incs", _moc_incs.c_str());
makefile->AddDefinition("_moc_defs", _moc_defs.c_str()); makefile->AddDefinition("_moc_defs", _moc_defs.c_str());
makefile->AddDefinition("_moc_compile_defs", _moc_compile_defs.c_str()); makefile->AddDefinition("_moc_compile_defs", _moc_compile_defs.c_str());
makefile->AddDefinition("_moc_options", _moc_options.c_str());
makefile->AddDefinition("_moc_files", _moc_files.c_str()); makefile->AddDefinition("_moc_files", _moc_files.c_str());
makefile->AddDefinition("_moc_headers", _moc_headers.c_str()); makefile->AddDefinition("_moc_headers", _moc_headers.c_str());
makefile->AddDefinition("_moc_strict_mode", strictMode ? "TRUE" : "FALSE"); makefile->AddDefinition("_moc_strict_mode", strictMode ? "TRUE" : "FALSE");
const char* cmakeRoot = makefile->GetDefinition("CMAKE_ROOT"); const char* cmakeRoot = makefile->GetSafeDefinition("CMAKE_ROOT");
std::string inputFile = cmakeRoot; std::string inputFile = cmakeRoot;
inputFile += "/Modules/AutomocInfo.cmake.in"; inputFile += "/Modules/AutomocInfo.cmake.in";
std::string outputFile = targetDir; std::string outputFile = targetDir;
@ -236,9 +247,9 @@ bool cmQtAutomoc::Run(const char* targetDirectory)
this->Init(); this->Init();
if (this->QtMajorVersion == "4") if (this->QtMajorVersion == "4" || this->QtMajorVersion == "5")
{ {
this->RunAutomocQt4(); this->RunAutomoc();
} }
this->WriteOldMocDefinitionsFile(targetDirectory); this->WriteOldMocDefinitionsFile(targetDirectory);
@ -281,6 +292,11 @@ bool cmQtAutomoc::ReadAutomocInfoFile(cmMakefile* makefile,
} }
this->QtMajorVersion = makefile->GetSafeDefinition("AM_QT_VERSION_MAJOR"); this->QtMajorVersion = makefile->GetSafeDefinition("AM_QT_VERSION_MAJOR");
if (this->QtMajorVersion == "")
{
this->QtMajorVersion = makefile->GetSafeDefinition(
"AM_Qt5Core_VERSION_MAJOR");
}
this->Sources = makefile->GetSafeDefinition("AM_SOURCES"); this->Sources = makefile->GetSafeDefinition("AM_SOURCES");
this->Headers = makefile->GetSafeDefinition("AM_HEADERS"); this->Headers = makefile->GetSafeDefinition("AM_HEADERS");
this->IncludeProjectDirsBefore = makefile->IsOn( this->IncludeProjectDirsBefore = makefile->IsOn(
@ -292,6 +308,7 @@ bool cmQtAutomoc::ReadAutomocInfoFile(cmMakefile* makefile,
"AM_MOC_COMPILE_DEFINITIONS"); "AM_MOC_COMPILE_DEFINITIONS");
this->MocDefinitionsStr = makefile->GetSafeDefinition("AM_MOC_DEFINITIONS"); this->MocDefinitionsStr = makefile->GetSafeDefinition("AM_MOC_DEFINITIONS");
this->MocIncludesStr = makefile->GetSafeDefinition("AM_MOC_INCLUDES"); this->MocIncludesStr = makefile->GetSafeDefinition("AM_MOC_INCLUDES");
this->MocOptionsStr = makefile->GetSafeDefinition("AM_MOC_OPTIONS");
this->ProjectBinaryDir = makefile->GetSafeDefinition("AM_CMAKE_BINARY_DIR"); this->ProjectBinaryDir = makefile->GetSafeDefinition("AM_CMAKE_BINARY_DIR");
this->ProjectSourceDir = makefile->GetSafeDefinition("AM_CMAKE_SOURCE_DIR"); this->ProjectSourceDir = makefile->GetSafeDefinition("AM_CMAKE_SOURCE_DIR");
this->TargetName = makefile->GetSafeDefinition("AM_TARGET_NAME"); this->TargetName = makefile->GetSafeDefinition("AM_TARGET_NAME");
@ -370,6 +387,8 @@ void cmQtAutomoc::Init()
} }
} }
cmSystemTools::ExpandListArgument(this->MocOptionsStr, this->MocOptions);
std::vector<std::string> incPaths; std::vector<std::string> incPaths;
cmSystemTools::ExpandListArgument(this->MocIncludesStr, incPaths); cmSystemTools::ExpandListArgument(this->MocIncludesStr, incPaths);
@ -440,7 +459,7 @@ void cmQtAutomoc::Init()
} }
bool cmQtAutomoc::RunAutomocQt4() bool cmQtAutomoc::RunAutomoc()
{ {
if (!cmsys::SystemTools::FileExists(this->OutMocCppFilename.c_str()) if (!cmsys::SystemTools::FileExists(this->OutMocCppFilename.c_str())
|| (this->OldMocDefinitionsStr != this->Join(this->MocDefinitions, ' '))) || (this->OldMocDefinitionsStr != this->Join(this->MocDefinitions, ' ')))
@ -970,6 +989,12 @@ bool cmQtAutomoc::GenerateMoc(const std::string& sourceFile,
{ {
command.push_back(*it); command.push_back(*it);
} }
for(std::vector<std::string>::const_iterator it=this->MocOptions.begin();
it != this->MocOptions.end();
++it)
{
command.push_back(*it);
}
#ifdef _WIN32 #ifdef _WIN32
command.push_back("-DWIN32"); command.push_back("-DWIN32");
#endif #endif

View File

@ -35,7 +35,7 @@ private:
const char* targetDirectory); const char* targetDirectory);
void WriteOldMocDefinitionsFile(const char* targetDirectory); void WriteOldMocDefinitionsFile(const char* targetDirectory);
bool RunAutomocQt4(); bool RunAutomoc();
bool GenerateMoc(const std::string& sourceFile, bool GenerateMoc(const std::string& sourceFile,
const std::string& mocFileName); const std::string& mocFileName);
void ParseCppFile(const std::string& absFilename, void ParseCppFile(const std::string& absFilename,
@ -69,6 +69,7 @@ private:
std::string MocCompileDefinitionsStr; std::string MocCompileDefinitionsStr;
std::string MocDefinitionsStr; std::string MocDefinitionsStr;
std::string MocIncludesStr; std::string MocIncludesStr;
std::string MocOptionsStr;
std::string ProjectBinaryDir; std::string ProjectBinaryDir;
std::string ProjectSourceDir; std::string ProjectSourceDir;
std::string TargetName; std::string TargetName;
@ -78,6 +79,7 @@ private:
std::string OutMocCppFilename; std::string OutMocCppFilename;
std::list<std::string> MocIncludes; std::list<std::string> MocIncludes;
std::list<std::string> MocDefinitions; std::list<std::string> MocDefinitions;
std::vector<std::string> MocOptions;
bool Verbose; bool Verbose;
bool ColorOutput; bool ColorOutput;

View File

@ -140,7 +140,8 @@ public:
"the target in an IDE like visual studio. VS_KEYWORD can be set " "the target in an IDE like visual studio. VS_KEYWORD can be set "
"to change the visual studio keyword, for example QT integration " "to change the visual studio keyword, for example QT integration "
"works better if this is set to Qt4VSv1.0.\n" "works better if this is set to Qt4VSv1.0.\n"
"VS_SCC_PROJECTNAME, VS_SCC_LOCALPATH, VS_SCC_PROVIDER can be set " "VS_SCC_PROJECTNAME, VS_SCC_LOCALPATH, VS_SCC_PROVIDER and "
"VS_SCC_AUXPATH can be set "
"to add support for source control bindings in a Visual Studio " "to add support for source control bindings in a Visual Studio "
"project file.\n" "project file.\n"
"VS_GLOBAL_<variable> can be set to add a Visual Studio " "VS_GLOBAL_<variable> can be set to add a Visual Studio "

View File

@ -161,6 +161,11 @@ extern int putenv (char *__string) __THROW;
#define for if(false) {} else for #define for if(false) {} else for
#endif #endif
// Provide std::ios_base on ancient GCC 2.9x
#if defined(__GNUC__) && __GNUC__ < 3
namespace std { typedef ios ios_base; }
#endif
// check for the 720 compiler on the SGI // check for the 720 compiler on the SGI
// which has some strange properties that I don't think are worth // which has some strange properties that I don't think are worth
// checking for in a general way in configure // checking for in a general way in configure

View File

@ -10,6 +10,8 @@
See the License for more information. See the License for more information.
============================================================================*/ ============================================================================*/
#include "cmStringCommand.h" #include "cmStringCommand.h"
#include "cmCryptoHash.h"
#include <cmsys/RegularExpression.hxx> #include <cmsys/RegularExpression.hxx>
#include <cmsys/SystemTools.hxx> #include <cmsys/SystemTools.hxx>
@ -36,6 +38,15 @@ bool cmStringCommand
{ {
return this->HandleReplaceCommand(args); return this->HandleReplaceCommand(args);
} }
else if ( subCommand == "MD5" ||
subCommand == "SHA1" ||
subCommand == "SHA224" ||
subCommand == "SHA256" ||
subCommand == "SHA384" ||
subCommand == "SHA512" )
{
return this->HandleHashCommand(args);
}
else if(subCommand == "TOLOWER") else if(subCommand == "TOLOWER")
{ {
return this->HandleToUpperLowerCommand(args, false); return this->HandleToUpperLowerCommand(args, false);
@ -82,6 +93,34 @@ bool cmStringCommand
return false; return false;
} }
//----------------------------------------------------------------------------
bool cmStringCommand::HandleHashCommand(std::vector<std::string> const& args)
{
#if defined(CMAKE_BUILD_WITH_CMAKE)
if(args.size() != 3)
{
cmOStringStream e;
e << args[0] << " requires an output variable and an input string";
this->SetError(e.str().c_str());
return false;
}
cmsys::auto_ptr<cmCryptoHash> hash(cmCryptoHash::New(args[0].c_str()));
if(hash.get())
{
std::string out = hash->HashString(args[2].c_str());
this->Makefile->AddDefinition(args[1].c_str(), out.c_str());
return true;
}
return false;
#else
cmOStringStream e;
e << args[0] << " not available during bootstrap";
this->SetError(e.str().c_str());
return false;
#endif
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
bool cmStringCommand::HandleToUpperLowerCommand( bool cmStringCommand::HandleToUpperLowerCommand(
std::vector<std::string> const& args, bool toUpper) std::vector<std::string> const& args, bool toUpper)

View File

@ -76,6 +76,8 @@ public:
" string(REPLACE <match_string>\n" " string(REPLACE <match_string>\n"
" <replace_string> <output variable>\n" " <replace_string> <output variable>\n"
" <input> [<input>...])\n" " <input> [<input>...])\n"
" string(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512>\n"
" <output variable> <input>)\n"
" string(COMPARE EQUAL <string1> <string2> <output variable>)\n" " string(COMPARE EQUAL <string1> <string2> <output variable>)\n"
" string(COMPARE NOTEQUAL <string1> <string2> <output variable>)\n" " string(COMPARE NOTEQUAL <string1> <string2> <output variable>)\n"
" string(COMPARE LESS <string1> <string2> <output variable>)\n" " string(COMPARE LESS <string1> <string2> <output variable>)\n"
@ -103,6 +105,8 @@ public:
"backslash through argument parsing.\n" "backslash through argument parsing.\n"
"REPLACE will replace all occurrences of match_string in the input with " "REPLACE will replace all occurrences of match_string in the input with "
"replace_string and store the result in the output.\n" "replace_string and store the result in the output.\n"
"MD5, SHA1, SHA224, SHA256, SHA384, and SHA512 "
"will compute a cryptographic hash of the input string.\n"
"COMPARE EQUAL/NOTEQUAL/LESS/GREATER will compare the strings and " "COMPARE EQUAL/NOTEQUAL/LESS/GREATER will compare the strings and "
"store true or false in the output variable.\n" "store true or false in the output variable.\n"
"ASCII will convert all numbers into corresponding ASCII characters.\n" "ASCII will convert all numbers into corresponding ASCII characters.\n"
@ -150,6 +154,7 @@ protected:
bool RegexMatch(std::vector<std::string> const& args); bool RegexMatch(std::vector<std::string> const& args);
bool RegexMatchAll(std::vector<std::string> const& args); bool RegexMatchAll(std::vector<std::string> const& args);
bool RegexReplace(std::vector<std::string> const& args); bool RegexReplace(std::vector<std::string> const& args);
bool HandleHashCommand(std::vector<std::string> const& args);
bool HandleToUpperLowerCommand(std::vector<std::string> const& args, bool HandleToUpperLowerCommand(std::vector<std::string> const& args,
bool toUpper); bool toUpper);
bool HandleCompareCommand(std::vector<std::string> const& args); bool HandleCompareCommand(std::vector<std::string> const& args);

View File

@ -54,7 +54,7 @@
#if defined(CMAKE_BUILD_WITH_CMAKE) #if defined(CMAKE_BUILD_WITH_CMAKE)
# include <memory> // auto_ptr # include <memory> // auto_ptr
# include <fcntl.h> # include <fcntl.h>
# include <cmsys/MD5.h> # include "cmCryptoHash.h"
#endif #endif
#if defined(CMAKE_USE_ELF_PARSER) #if defined(CMAKE_USE_ELF_PARSER)
@ -1197,48 +1197,10 @@ bool cmSystemTools::RenameFile(const char* oldname, const char* newname)
bool cmSystemTools::ComputeFileMD5(const char* source, char* md5out) bool cmSystemTools::ComputeFileMD5(const char* source, char* md5out)
{ {
#if defined(CMAKE_BUILD_WITH_CMAKE) #if defined(CMAKE_BUILD_WITH_CMAKE)
if(!cmSystemTools::FileExists(source)) cmCryptoHashMD5 md5;
{ std::string str = md5.HashFile(source);
return false; strncpy(md5out, str.c_str(), 32);
} return !str.empty();
// Open files
#if defined(_WIN32) || defined(__CYGWIN__)
cmsys_ios::ifstream fin(source, cmsys_ios::ios::binary | cmsys_ios::ios::in);
#else
cmsys_ios::ifstream fin(source);
#endif
if(!fin)
{
return false;
}
cmsysMD5* md5 = cmsysMD5_New();
cmsysMD5_Initialize(md5);
// Should be efficient enough on most system:
const int bufferSize = 4096;
char buffer[bufferSize];
unsigned char const* buffer_uc =
reinterpret_cast<unsigned char const*>(buffer);
// This copy loop is very sensitive on certain platforms with
// slightly broken stream libraries (like HPUX). Normally, it is
// incorrect to not check the error condition on the fin.read()
// before using the data, but the fin.gcount() will be zero if an
// error occurred. Therefore, the loop should be safe everywhere.
while(fin)
{
fin.read(buffer, bufferSize);
if(int gcount = static_cast<int>(fin.gcount()))
{
cmsysMD5_Append(md5, buffer_uc, gcount);
}
}
cmsysMD5_FinalizeHex(md5, md5out);
cmsysMD5_Delete(md5);
fin.close();
return true;
#else #else
(void)source; (void)source;
(void)md5out; (void)md5out;
@ -1250,13 +1212,8 @@ bool cmSystemTools::ComputeFileMD5(const char* source, char* md5out)
std::string cmSystemTools::ComputeStringMD5(const char* input) std::string cmSystemTools::ComputeStringMD5(const char* input)
{ {
#if defined(CMAKE_BUILD_WITH_CMAKE) #if defined(CMAKE_BUILD_WITH_CMAKE)
char md5out[32]; cmCryptoHashMD5 md5;
cmsysMD5* md5 = cmsysMD5_New(); return md5.HashString(input);
cmsysMD5_Initialize(md5);
cmsysMD5_Append(md5, reinterpret_cast<unsigned char const*>(input), -1);
cmsysMD5_FinalizeHex(md5, md5out);
cmsysMD5_Delete(md5);
return std::string(md5out, 32);
#else #else
(void)input; (void)input;
cmSystemTools::Message("md5sum not supported in bootstrapping mode","Error"); cmSystemTools::Message("md5sum not supported in bootstrapping mode","Error");

View File

@ -17,6 +17,7 @@
#include "cmGlobalGenerator.h" #include "cmGlobalGenerator.h"
#include "cmComputeLinkInformation.h" #include "cmComputeLinkInformation.h"
#include "cmDocumentCompileDefinitions.h" #include "cmDocumentCompileDefinitions.h"
#include "cmDocumentLocationUndefined.h"
#include "cmListFileCache.h" #include "cmListFileCache.h"
#include "cmGeneratorExpression.h" #include "cmGeneratorExpression.h"
#include <cmsys/RegularExpression.hxx> #include <cmsys/RegularExpression.hxx>
@ -158,10 +159,22 @@ void cmTarget::DefineProperties(cmake *cm)
"which is compiled as part of the target." "which is compiled as part of the target."
"This property is initialized by the value of the variable " "This property is initialized by the value of the variable "
"CMAKE_AUTOMOC if it is set when a target is created.\n" "CMAKE_AUTOMOC if it is set when a target is created.\n"
"Additional command line options for moc can be set via the "
"AUTOMOC_MOC_OPTIONS property.\n"
"By setting the CMAKE_AUTOMOC_STRICT_MODE variable to FALSE the rules " "By setting the CMAKE_AUTOMOC_STRICT_MODE variable to FALSE the rules "
"for searching the files which will be processed by moc can be relaxed. " "for searching the files which will be processed by moc can be relaxed. "
"See the documentation for this variable for more details."); "See the documentation for this variable for more details.");
cm->DefineProperty
("AUTOMOC_MOC_OPTIONS", cmProperty::TARGET,
"Additional options for moc when using automoc (see the AUTOMOC property)",
"This property is only used if the AUTOMOC property is set to TRUE for "
"this target. In this case, it holds additional command line options "
"which will be used when moc is executed during the build, i.e. it is "
"equivalent to the optional OPTIONS argument of the qt4_wrap_cpp() "
"macro.\n"
"By default it is empty.");
cm->DefineProperty cm->DefineProperty
("BUILD_WITH_INSTALL_RPATH", cmProperty::TARGET, ("BUILD_WITH_INSTALL_RPATH", cmProperty::TARGET,
"Should build tree targets have install tree rpaths.", "Should build tree targets have install tree rpaths.",
@ -574,15 +587,6 @@ void cmTarget::DefineProperties(cmake *cm)
"value is the default. " "value is the default. "
"See documentation of CMAKE_<LANG>_LINKER_PREFERENCE variables."); "See documentation of CMAKE_<LANG>_LINKER_PREFERENCE variables.");
#define CM_LOCATION_UNDEFINED_BEHAVIOR \
"\n" \
"Do not set properties that affect the location of the target after " \
"reading this property. These include properties whose names match " \
"\"(RUNTIME|LIBRARY|ARCHIVE)_OUTPUT_(NAME|DIRECTORY)(_<CONFIG>)?\" " \
"or \"(IMPLIB_)?(PREFIX|SUFFIX)\". " \
"Failure to follow this rule is not diagnosed and leaves the location " \
"of the target undefined."
cm->DefineProperty cm->DefineProperty
("LOCATION", cmProperty::TARGET, ("LOCATION", cmProperty::TARGET,
"Read-only location of a target on disk.", "Read-only location of a target on disk.",
@ -602,7 +606,7 @@ void cmTarget::DefineProperties(cmake *cm)
"In CMake 2.8.4 and above add_custom_command recognizes generator " "In CMake 2.8.4 and above add_custom_command recognizes generator "
"expressions to refer to target locations anywhere in the command. " "expressions to refer to target locations anywhere in the command. "
"Therefore this property is not needed for creating custom commands." "Therefore this property is not needed for creating custom commands."
CM_LOCATION_UNDEFINED_BEHAVIOR); CM_LOCATION_UNDEFINED_BEHAVIOR("reading this property"));
cm->DefineProperty cm->DefineProperty
("LOCATION_<CONFIG>", cmProperty::TARGET, ("LOCATION_<CONFIG>", cmProperty::TARGET,
@ -616,7 +620,7 @@ void cmTarget::DefineProperties(cmake *cm)
"arbitrary available configuration. " "arbitrary available configuration. "
"Use the MAP_IMPORTED_CONFIG_<CONFIG> property to map imported " "Use the MAP_IMPORTED_CONFIG_<CONFIG> property to map imported "
"configurations explicitly." "configurations explicitly."
CM_LOCATION_UNDEFINED_BEHAVIOR); CM_LOCATION_UNDEFINED_BEHAVIOR("reading this property"));
cm->DefineProperty cm->DefineProperty
("LINK_DEPENDS", cmProperty::TARGET, ("LINK_DEPENDS", cmProperty::TARGET,
@ -969,6 +973,23 @@ void cmTarget::DefineProperties(cmake *cm)
"If the variable CMAKE_Fortran_MODULE_DIRECTORY is set when a target " "If the variable CMAKE_Fortran_MODULE_DIRECTORY is set when a target "
"is created its value is used to initialize this property."); "is created its value is used to initialize this property.");
cm->DefineProperty
("GNUtoMS", cmProperty::TARGET,
"Convert GNU import library (.dll.a) to MS format (.lib).",
"When linking a shared library or executable that exports symbols "
"using GNU tools on Windows (MinGW/MSYS) with Visual Studio installed "
"convert the import library (.dll.a) from GNU to MS format (.lib). "
"Both import libraries will be installed by install(TARGETS) and "
"exported by install(EXPORT) and export() to be linked by applications "
"with either GNU- or MS-compatible tools."
"\n"
"If the variable CMAKE_GNUtoMS is set when a target "
"is created its value is used to initialize this property. "
"The variable must be set prior to the first command that enables "
"a language such as project() or enable_language(). "
"CMake provides the variable as an option to the user automatically "
"when configuring on Windows with GNU tools.");
cm->DefineProperty cm->DefineProperty
("XCODE_ATTRIBUTE_<an-attribute>", cmProperty::TARGET, ("XCODE_ATTRIBUTE_<an-attribute>", cmProperty::TARGET,
"Set Xcode target attributes directly.", "Set Xcode target attributes directly.",
@ -1014,7 +1035,7 @@ void cmTarget::DefineProperties(cmake *cm)
"provider property."); "provider property.");
cm->DefineProperty cm->DefineProperty
("VS_SCC_LOCALPATH", cmProperty::TARGET, ("VS_SCC_LOCALPATH", cmProperty::TARGET,
"Visual Studio Source Code Control Provider.", "Visual Studio Source Code Control Local Path.",
"Can be set to change the visual studio source code control " "Can be set to change the visual studio source code control "
"local path property."); "local path property.");
cm->DefineProperty cm->DefineProperty
@ -1022,6 +1043,34 @@ void cmTarget::DefineProperties(cmake *cm)
"Visual Studio Source Code Control Project.", "Visual Studio Source Code Control Project.",
"Can be set to change the visual studio source code control " "Can be set to change the visual studio source code control "
"project name property."); "project name property.");
cm->DefineProperty
("VS_SCC_AUXPATH", cmProperty::TARGET,
"Visual Studio Source Code Control Aux Path.",
"Can be set to change the visual studio source code control "
"auxpath property.");
cm->DefineProperty
("VS_GLOBAL_PROJECT_TYPES", cmProperty::TARGET,
"Visual Studio project type(s).",
"Can be set to one or more UUIDs recognized by Visual Studio "
"to indicate the type of project. This value is copied "
"verbatim into the generated project file. Example for a "
"managed C++ unit testing project: \""
"{3AC096D0-A1C2-E12C-1390-A8335801FDAB};"
"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\". UUIDs are "
"semicolon-delimited.");
cm->DefineProperty
("VS_GLOBAL_KEYWORD", cmProperty::TARGET,
"Visual Studio project keyword.",
"Sets the \"keyword\" attribute for a generated Visual Studio "
"project. Defaults to \"Win32Proj\". You may wish to override "
"this value with \"ManagedCProj\", for example, in a Visual "
"Studio managed C++ unit test project.");
cm->DefineProperty
("VS_DOTNET_REFERENCES", cmProperty::TARGET,
"Visual Studio managed project .NET references",
"Adds one or more semicolon-delimited .NET references to a "
"generated Visual Studio project. For example, \"System;"
"System.Windows.Forms\".");
cm->DefineProperty cm->DefineProperty
("VS_GLOBAL_<variable>", cmProperty::TARGET, ("VS_GLOBAL_<variable>", cmProperty::TARGET,
"Visual Studio project-specific global variable.", "Visual Studio project-specific global variable.",
@ -1180,8 +1229,10 @@ void cmTarget::SetMakefile(cmMakefile* mf)
this->SetPropertyDefault("RUNTIME_OUTPUT_DIRECTORY", 0); this->SetPropertyDefault("RUNTIME_OUTPUT_DIRECTORY", 0);
this->SetPropertyDefault("Fortran_FORMAT", 0); this->SetPropertyDefault("Fortran_FORMAT", 0);
this->SetPropertyDefault("Fortran_MODULE_DIRECTORY", 0); this->SetPropertyDefault("Fortran_MODULE_DIRECTORY", 0);
this->SetPropertyDefault("GNUtoMS", 0);
this->SetPropertyDefault("OSX_ARCHITECTURES", 0); this->SetPropertyDefault("OSX_ARCHITECTURES", 0);
this->SetPropertyDefault("AUTOMOC", 0); this->SetPropertyDefault("AUTOMOC", 0);
this->SetPropertyDefault("AUTOMOC_MOC_OPTIONS", 0);
this->SetPropertyDefault("LINK_INTERFACE_LIBRARIES", 0); this->SetPropertyDefault("LINK_INTERFACE_LIBRARIES", 0);
// Collect the set of configuration types. // Collect the set of configuration types.
@ -3440,6 +3491,26 @@ void cmTarget::GetExecutableNames(std::string& name,
pdbName = prefix+base+".pdb"; pdbName = prefix+base+".pdb";
} }
//----------------------------------------------------------------------------
bool cmTarget::HasImplibGNUtoMS()
{
return this->HasImportLibrary() && this->GetPropertyAsBool("GNUtoMS");
}
//----------------------------------------------------------------------------
bool cmTarget::GetImplibGNUtoMS(std::string const& gnuName,
std::string& out, const char* newExt)
{
if(this->HasImplibGNUtoMS() &&
gnuName.size() > 6 && gnuName.substr(gnuName.size()-6) == ".dll.a")
{
out = gnuName.substr(0, gnuName.size()-6);
out += newExt? newExt : ".lib";
return true;
}
return false;
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmTarget::GenerateTargetManifest(const char* config) void cmTarget::GenerateTargetManifest(const char* config)
{ {

Some files were not shown because too many files have changed in this diff Show More