Merge branch 'honor-explicit-zero-timeout' into resolve/mingw-cross-compile-resources/honor-explicit-zero-timeout

Conflicts:
	Tests/CMakeLists.txt
This commit is contained in:
Brad King 2011-01-14 10:44:41 -05:00
commit aeb6cd8a89
101 changed files with 1413 additions and 669 deletions

View File

@ -10,6 +10,7 @@
# See the License for more information. # See the License for more information.
#============================================================================= #=============================================================================
CMAKE_MINIMUM_REQUIRED(VERSION 2.4.5 FATAL_ERROR) CMAKE_MINIMUM_REQUIRED(VERSION 2.4.5 FATAL_ERROR)
SET(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required
PROJECT(CMake) PROJECT(CMake)
IF(COMMAND CMAKE_POLICY) IF(COMMAND CMAKE_POLICY)
CMAKE_POLICY(SET CMP0003 NEW) CMAKE_POLICY(SET CMP0003 NEW)

View File

@ -218,6 +218,10 @@ ENDIF(NOT CMAKE_Fortran_COMPILER_ID_RUN)
INCLUDE(CMakeFindBinUtils) INCLUDE(CMakeFindBinUtils)
IF(MSVC_Fortran_ARCHITECTURE_ID)
SET(SET_MSVC_Fortran_ARCHITECTURE_ID
"SET(MSVC_Fortran_ARCHITECTURE_ID ${MSVC_Fortran_ARCHITECTURE_ID})")
ENDIF()
# configure variables set in this file for fast reload later on # configure variables set in this file for fast reload later on
CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeFortranCompiler.cmake ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeFortranCompiler.cmake

View File

@ -2,6 +2,7 @@ SET(CMAKE_Fortran_COMPILER "@CMAKE_Fortran_COMPILER@")
SET(CMAKE_Fortran_COMPILER_ARG1 "@CMAKE_Fortran_COMPILER_ARG1@") SET(CMAKE_Fortran_COMPILER_ARG1 "@CMAKE_Fortran_COMPILER_ARG1@")
SET(CMAKE_Fortran_COMPILER_ID "@CMAKE_Fortran_COMPILER_ID@") SET(CMAKE_Fortran_COMPILER_ID "@CMAKE_Fortran_COMPILER_ID@")
SET(CMAKE_Fortran_PLATFORM_ID "@CMAKE_Fortran_PLATFORM_ID@") SET(CMAKE_Fortran_PLATFORM_ID "@CMAKE_Fortran_PLATFORM_ID@")
@SET_MSVC_Fortran_ARCHITECTURE_ID@
SET(CMAKE_AR "@CMAKE_AR@") SET(CMAKE_AR "@CMAKE_AR@")
SET(CMAKE_RANLIB "@CMAKE_RANLIB@") SET(CMAKE_RANLIB "@CMAKE_RANLIB@")
SET(CMAKE_COMPILER_IS_GNUG77 @CMAKE_COMPILER_IS_GNUG77@) SET(CMAKE_COMPILER_IS_GNUG77 @CMAKE_COMPILER_IS_GNUG77@)

View File

@ -108,5 +108,14 @@
! SGI preprocessor which produces both the __sgi and else blocks. ! SGI preprocessor which produces both the __sgi and else blocks.
# endif # endif
PRINT *, 'INFO:platform[]' PRINT *, 'INFO:platform[]'
#endif
#if defined(_WIN32) && (defined(__INTEL_COMPILER) || defined(__ICC))
# if defined(_M_IA64)
PRINT *, 'INFO:arch[IA64]'
# elif defined(_M_X64) || defined(_M_AMD64)
PRINT *, 'INFO:arch[x64]'
# elif defined(_M_IX86)
PRINT *, 'INFO:arch[X86]'
# endif
#endif #endif
END END

View File

@ -25,7 +25,7 @@ INCLUDE(CheckCSourceCompiles)
MACRO (CHECK_C_COMPILER_FLAG _FLAG _RESULT) MACRO (CHECK_C_COMPILER_FLAG _FLAG _RESULT)
SET(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}") SET(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
SET(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}") SET(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
CHECK_C_SOURCE_COMPILES("int main() { return 0;}" ${_RESULT} CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${_RESULT}
# Some compilers do not fail with a bad flag # Some compilers do not fail with a bad flag
FAIL_REGEX "unrecognized .*option" # GNU FAIL_REGEX "unrecognized .*option" # GNU
FAIL_REGEX "ignoring unknown option" # MSVC FAIL_REGEX "ignoring unknown option" # MSVC

View File

@ -40,16 +40,11 @@
# License text for the above reference.) # License text for the above reference.)
get_property(_LANGUAGES_ GLOBAL PROPERTY ENABLED_LANGUAGES) get_property(_LANGUAGES_ GLOBAL PROPERTY ENABLED_LANGUAGES)
if(NOT _LANGUAGES_ MATCHES Fortran) if (NOT _LANGUAGES_ MATCHES Fortran)
if(BLAS_FIND_REQUIRED) include(CheckFunctionExists)
message(FATAL_ERROR "FindBLAS is Fortran-only so Fortran must be enabled.") else ()
else(BLAS_FIND_REQUIRED)
message(STATUS "Looking for BLAS... - NOT found (Fortran not enabled)") #
return()
endif(BLAS_FIND_REQUIRED)
endif(NOT _LANGUAGES_ MATCHES Fortran)
include(CheckFortranFunctionExists) include(CheckFortranFunctionExists)
endif()
macro(Check_Fortran_Libraries LIBRARIES _prefix _name _flags _list _threads) macro(Check_Fortran_Libraries LIBRARIES _prefix _name _flags _list _threads)
# This macro checks for the existence of the combination of fortran libraries # This macro checks for the existence of the combination of fortran libraries
@ -107,7 +102,11 @@ if(_libraries_work)
# Test this combination of libraries. # Test this combination of libraries.
set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_threads}) set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_threads})
# message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}") # message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}")
check_fortran_function_exists(${_name} ${_prefix}${_combined_name}_WORKS) if (_LANGUAGES_ MATCHES Fortran)
check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS)
else()
check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS)
endif()
set(CMAKE_REQUIRED_LIBRARIES) set(CMAKE_REQUIRED_LIBRARIES)
mark_as_advanced(${_prefix}${_combined_name}_WORKS) mark_as_advanced(${_prefix}${_combined_name}_WORKS)
set(_libraries_work ${${_prefix}${_combined_name}_WORKS}) set(_libraries_work ${${_prefix}${_combined_name}_WORKS})
@ -246,13 +245,24 @@ endif (BLA_VENDOR STREQUAL "IBMESSL" OR BLA_VENDOR STREQUAL "All")
#BLAS in acml library? #BLAS in acml library?
if (BLA_VENDOR STREQUAL "ACML" OR BLA_VENDOR STREQUAL "All") if (BLA_VENDOR STREQUAL "ACML" OR BLA_VENDOR STREQUAL "All")
# Either acml or acml_mp should be in LD_LIBRARY_PATH but not both
if(NOT BLAS_LIBRARIES) if(NOT BLAS_LIBRARIES)
check_fortran_libraries( check_fortran_libraries(
BLAS_LIBRARIES BLAS_LIBRARIES
BLAS BLAS
sgemm sgemm
"" ""
"acml" "acml;acml_mv"
""
)
endif(NOT BLAS_LIBRARIES)
if(NOT BLAS_LIBRARIES)
check_fortran_libraries(
BLAS_LIBRARIES
BLAS
sgemm
""
"acml_mp;acml_mv"
"" ""
) )
endif(NOT BLAS_LIBRARIES) endif(NOT BLAS_LIBRARIES)
@ -300,6 +310,9 @@ endif (BLA_VENDOR STREQUAL "Generic" OR BLA_VENDOR STREQUAL "All")
#BLAS in intel mkl 10 library? (em64t 64bit) #BLAS in intel mkl 10 library? (em64t 64bit)
if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All") if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
if (NOT WIN32)
set(LM "-lm")
endif ()
if (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX) if (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX)
if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED) if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED)
find_package(Threads) find_package(Threads)
@ -340,7 +353,7 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
sgemm sgemm
"" ""
"mkl_blas95;mkl_intel;mkl_intel_thread;mkl_core;guide" "mkl_blas95;mkl_intel;mkl_intel_thread;mkl_core;guide"
"${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_THREAD_LIBS_INIT};${LM}"
) )
endif(NOT BLAS95_LIBRARIES) endif(NOT BLAS95_LIBRARIES)
else(BLA_F95) else(BLA_F95)
@ -352,6 +365,7 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
"" ""
"mkl_intel;mkl_intel_thread;mkl_core;guide" "mkl_intel;mkl_intel_thread;mkl_core;guide"
"${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_THREAD_LIBS_INIT}"
"${LM}"
) )
endif(NOT BLAS_LIBRARIES) endif(NOT BLAS_LIBRARIES)
endif(BLA_F95) endif(BLA_F95)
@ -365,7 +379,7 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
sgemm sgemm
"" ""
"mkl_blas95;mkl_intel_lp64;mkl_intel_thread;mkl_core;guide" "mkl_blas95;mkl_intel_lp64;mkl_intel_thread;mkl_core;guide"
"${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_THREAD_LIBS_INIT};${LM}"
) )
endif(NOT BLAS95_LIBRARIES) endif(NOT BLAS95_LIBRARIES)
else(BLA_F95) else(BLA_F95)
@ -376,7 +390,7 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
sgemm sgemm
"" ""
"mkl_intel_lp64;mkl_intel_thread;mkl_core;guide" "mkl_intel_lp64;mkl_intel_thread;mkl_core;guide"
"${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_THREAD_LIBS_INIT};${LM}"
) )
endif(NOT BLAS_LIBRARIES) endif(NOT BLAS_LIBRARIES)
endif(BLA_F95) endif(BLA_F95)
@ -391,7 +405,7 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
sgemm sgemm
"" ""
"mkl;guide" "mkl;guide"
"${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_THREAD_LIBS_INIT};${LM}"
) )
endif(NOT BLAS_LIBRARIES) endif(NOT BLAS_LIBRARIES)
#BLAS in intel mkl library? (static, 32bit) #BLAS in intel mkl library? (static, 32bit)
@ -402,7 +416,7 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
sgemm sgemm
"" ""
"mkl_ia32;guide" "mkl_ia32;guide"
"${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_THREAD_LIBS_INIT};${LM}"
) )
endif(NOT BLAS_LIBRARIES) endif(NOT BLAS_LIBRARIES)
#BLAS in intel mkl library? (static, em64t 64bit) #BLAS in intel mkl library? (static, em64t 64bit)
@ -413,7 +427,7 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
sgemm sgemm
"" ""
"mkl_em64t;guide" "mkl_em64t;guide"
"${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_THREAD_LIBS_INIT};${LM}"
) )
endif(NOT BLAS_LIBRARIES) endif(NOT BLAS_LIBRARIES)
endif (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX) endif (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX)

View File

@ -37,17 +37,12 @@
# License text for the above reference.) # License text for the above reference.)
get_property(_LANGUAGES_ GLOBAL PROPERTY ENABLED_LANGUAGES) get_property(_LANGUAGES_ GLOBAL PROPERTY ENABLED_LANGUAGES)
if(NOT _LANGUAGES_ MATCHES Fortran) if (NOT _LANGUAGES_ MATCHES Fortran)
if(LAPACK_FIND_REQUIRED) include(CheckFunctionExists)
message(FATAL_ERROR else (NOT _LANGUAGES_ MATCHES Fortran)
"FindLAPACK is Fortran-only so Fortran must be enabled.")
else(LAPACK_FIND_REQUIRED)
message(STATUS "Looking for LAPACK... - NOT found (Fortran not enabled)")
return()
endif(LAPACK_FIND_REQUIRED)
endif(NOT _LANGUAGES_ MATCHES Fortran)
include(CheckFortranFunctionExists) include(CheckFortranFunctionExists)
endif (NOT _LANGUAGES_ MATCHES Fortran)
set(LAPACK_FOUND FALSE) set(LAPACK_FOUND FALSE)
set(LAPACK95_FOUND FALSE) set(LAPACK95_FOUND FALSE)
@ -112,7 +107,11 @@ if(_libraries_work)
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)
# message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}") # message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}")
check_fortran_function_exists(${_name} ${_prefix}${_combined_name}_WORKS) if (NOT _LANGUAGES_ MATCHES Fortran)
check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS)
else (NOT _LANGUAGES_ MATCHES Fortran)
check_fortran_function_exists(${_name} ${_prefix}${_combined_name}_WORKS)
endif (NOT _LANGUAGES_ MATCHES Fortran)
set(CMAKE_REQUIRED_LIBRARIES) set(CMAKE_REQUIRED_LIBRARIES)
mark_as_advanced(${_prefix}${_combined_name}_WORKS) mark_as_advanced(${_prefix}${_combined_name}_WORKS)
set(_libraries_work ${${_prefix}${_combined_name}_WORKS}) set(_libraries_work ${${_prefix}${_combined_name}_WORKS})
@ -157,7 +156,18 @@ if(BLAS_FOUND)
LAPACK LAPACK
cheev cheev
"" ""
"acml" "acml;acml_mv"
""
""
)
endif(NOT LAPACK_LIBRARIES)
if(NOT LAPACK_LIBRARIES)
check_lapack_libraries(
LAPACK_LIBRARIES
LAPACK
cheev
""
"acml_mp;acml_mv"
"" ""
"" ""
) )

View File

@ -123,7 +123,6 @@ ELSE (WIN32)
ENDIF(APPLE) ENDIF(APPLE)
ENDIF (WIN32) ENDIF (WIN32)
SET( OPENGL_FOUND "NO" )
IF(OPENGL_gl_LIBRARY) IF(OPENGL_gl_LIBRARY)
IF(OPENGL_xmesa_INCLUDE_DIR) IF(OPENGL_xmesa_INCLUDE_DIR)
@ -140,10 +139,7 @@ IF(OPENGL_gl_LIBRARY)
SET( OPENGL_GLU_FOUND "NO" ) SET( OPENGL_GLU_FOUND "NO" )
ENDIF(OPENGL_glu_LIBRARY) ENDIF(OPENGL_glu_LIBRARY)
SET( OPENGL_FOUND "YES" )
# This deprecated setting is for backward compatibility with CMake1.4 # This deprecated setting is for backward compatibility with CMake1.4
SET (OPENGL_LIBRARY ${OPENGL_LIBRARIES}) SET (OPENGL_LIBRARY ${OPENGL_LIBRARIES})
ENDIF(OPENGL_gl_LIBRARY) ENDIF(OPENGL_gl_LIBRARY)
@ -151,6 +147,11 @@ ENDIF(OPENGL_gl_LIBRARY)
# This deprecated setting is for backward compatibility with CMake1.4 # This deprecated setting is for backward compatibility with CMake1.4
SET(OPENGL_INCLUDE_PATH ${OPENGL_INCLUDE_DIR}) SET(OPENGL_INCLUDE_PATH ${OPENGL_INCLUDE_DIR})
# handle the QUIETLY and REQUIRED arguments and set OPENGL_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenGL DEFAULT_MSG OPENGL_gl_LIBRARY)
MARK_AS_ADVANCED( MARK_AS_ADVANCED(
OPENGL_INCLUDE_DIR OPENGL_INCLUDE_DIR
OPENGL_xmesa_INCLUDE_DIR OPENGL_xmesa_INCLUDE_DIR

View File

@ -1,4 +1,48 @@
SET(WIN32 1) if("${CMAKE_MINIMUM_REQUIRED_VERSION}" VERSION_LESS "2.8.3.20101214")
set(__USE_CMAKE_LEGACY_CYGWIN_WIN32 1)
endif()
if(NOT DEFINED WIN32)
set(WIN32 0)
if(DEFINED __USE_CMAKE_LEGACY_CYGWIN_WIN32)
if(NOT DEFINED CMAKE_LEGACY_CYGWIN_WIN32
AND DEFINED ENV{CMAKE_LEGACY_CYGWIN_WIN32})
set(CMAKE_LEGACY_CYGWIN_WIN32 $ENV{CMAKE_LEGACY_CYGWIN_WIN32})
endif()
if(CMAKE_LEGACY_CYGWIN_WIN32)
message(STATUS "Defining WIN32 under Cygwin due to CMAKE_LEGACY_CYGWIN_WIN32")
set(WIN32 1)
elseif("x${CMAKE_LEGACY_CYGWIN_WIN32}" STREQUAL "x")
message(WARNING "CMake no longer defines WIN32 on Cygwin!"
"\n"
"(1) If you are just trying to build this project, ignore this warning "
"or quiet it by setting CMAKE_LEGACY_CYGWIN_WIN32=0 in your environment or "
"in the CMake cache. "
"If later configuration or build errors occur then this project may "
"have been written under the assumption that Cygwin is WIN32. "
"In that case, set CMAKE_LEGACY_CYGWIN_WIN32=1 instead."
"\n"
"(2) If you are developing this project, add the line\n"
" set(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required\n"
"at the top of your top-level CMakeLists.txt file or set the minimum "
"required version of CMake to 2.8.4 or higher. "
"Then teach your project to build on Cygwin without WIN32.")
endif()
elseif(DEFINED CMAKE_LEGACY_CYGWIN_WIN32)
message(AUTHOR_WARNING "CMAKE_LEGACY_CYGWIN_WIN32 ignored because\n"
" cmake_minimum_required(VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})\n"
"is at least 2.8.4.")
endif()
endif()
if(DEFINED __USE_CMAKE_LEGACY_CYGWIN_WIN32)
# Pass WIN32 legacy setting to scripts.
if(WIN32)
set(ENV{CMAKE_LEGACY_CYGWIN_WIN32} 1)
else()
set(ENV{CMAKE_LEGACY_CYGWIN_WIN32} 0)
endif()
unset(__USE_CMAKE_LEGACY_CYGWIN_WIN32)
endif()
SET(CYGWIN 1) SET(CYGWIN 1)
SET(CMAKE_SHARED_LIBRARY_PREFIX "cyg") SET(CMAKE_SHARED_LIBRARY_PREFIX "cyg")

View File

@ -20,8 +20,8 @@ set(__DARWIN_COMPILER_GNU 1)
macro(__darwin_compiler_gnu lang) macro(__darwin_compiler_gnu lang)
# GNU does not have -shared on OS X # GNU does not have -shared on OS X
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-dynamiclib -headerpad_max_install_names") set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names")
set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "-bundle -headerpad_max_install_names") set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "-bundle -Wl,-headerpad_max_install_names")
endmacro() endmacro()
macro(cmake_gnu_has_isysroot lang) macro(cmake_gnu_has_isysroot lang)

View File

@ -33,11 +33,11 @@ SET(CMAKE_SHARED_MODULE_PREFIX "lib")
SET(CMAKE_SHARED_MODULE_SUFFIX ".so") SET(CMAKE_SHARED_MODULE_SUFFIX ".so")
SET(CMAKE_MODULE_EXISTS 1) SET(CMAKE_MODULE_EXISTS 1)
SET(CMAKE_DL_LIBS "") SET(CMAKE_DL_LIBS "")
SET(CMAKE_C_LINK_FLAGS "-headerpad_max_install_names") SET(CMAKE_C_LINK_FLAGS "-Wl,-headerpad_max_install_names")
SET(CMAKE_CXX_LINK_FLAGS "-headerpad_max_install_names") SET(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names")
SET(CMAKE_PLATFORM_HAS_INSTALLNAME 1) SET(CMAKE_PLATFORM_HAS_INSTALLNAME 1)
SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names") SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names")
SET(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names") SET(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a") SET(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a")

View File

@ -0,0 +1,2 @@
include(Platform/Windows-Intel)
__windows_compiler_intel(C)

View File

@ -0,0 +1,4 @@
include(Platform/Windows-Intel)
set(_COMPILE_CXX " /TP")
set(_FLAGS_CXX " /GX /GR")
__windows_compiler_intel(CXX)

View File

@ -0,0 +1,11 @@
include(Platform/Windows-Intel)
set(CMAKE_BUILD_TYPE_INIT Debug)
set(_COMPILE_Fortran " /fpp")
set(CMAKE_Fortran_MODDIR_FLAG "-module:")
set(CMAKE_Fortran_STANDARD_LIBRARIES_INIT "user32.lib")
__windows_compiler_intel(Fortran)
SET (CMAKE_Fortran_FLAGS_INIT "/W1 /nologo /fpp /libs:dll /threads")
SET (CMAKE_Fortran_FLAGS_DEBUG_INIT "/debug:full /dbglibs")
SET (CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "/O2 /D NDEBUG")
SET (CMAKE_Fortran_FLAGS_RELEASE_INIT "/O1 /D NDEBUG")
SET (CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "/O1 /debug:full /D NDEBUG")

View File

@ -1,3 +1,62 @@
#=============================================================================
# Copyright 2002-2010 Kitware, Inc.
#
# 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.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
# This module is shared by multiple languages; use include blocker.
if(__WINDOWS_INTEL)
return()
endif()
set(__WINDOWS_INTEL 1)
SET(CMAKE_LIBRARY_PATH_FLAG "-LIBPATH:")
SET(CMAKE_LINK_LIBRARY_FLAG "")
SET(WIN32 1)
IF(CMAKE_VERBOSE_MAKEFILE)
SET(CMAKE_CL_NOLOGO)
ELSE(CMAKE_VERBOSE_MAKEFILE)
SET(CMAKE_CL_NOLOGO "/nologo")
ENDIF(CMAKE_VERBOSE_MAKEFILE)
SET(CMAKE_COMPILE_RESOURCE "rc <FLAGS> /fo<OBJECT> <SOURCE>")
SET(CMAKE_CREATE_WIN32_EXE /subsystem:windows)
SET(CMAKE_CREATE_CONSOLE_EXE /subsystem:console)
# default to Debug builds
#SET(CMAKE_BUILD_TYPE_INIT Debug)
SET(CMAKE_BUILD_TYPE_INIT Release)
SET(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib")
SET(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
# executable linker flags
SET (CMAKE_LINK_DEF_FILE_FLAG "/DEF:")
IF(MSVC_C_ARCHITECTURE_ID)
SET(_MACHINE_ARCH_FLAG "/machine:${MSVC_C_ARCHITECTURE_ID}")
ELSEIF(MSVC_CXX_ARCHITECTURE_ID)
SET(_MACHINE_ARCH_FLAG "/machine:${MSVC_CXX_ARCHITECTURE_ID}")
ELSEIF(MSVC_Fortran_ARCHITECTURE_ID)
SET(_MACHINE_ARCH_FLAG "/machine:${MSVC_Fortran_ARCHITECTURE_ID}")
ENDIF()
SET (CMAKE_EXE_LINKER_FLAGS_INIT "/STACK:10000000 /INCREMENTAL:YES ${_MACHINE_ARCH_FLAG}")
SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug")
SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug")
SET (CMAKE_SHARED_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT})
SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT})
SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT})
SET (CMAKE_MODULE_LINKER_FLAGS_INIT ${CMAKE_SHARED_LINKER_FLAGS_INIT})
SET (CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT ${CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT})
SET (CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT})
INCLUDE("${CMAKE_PLATFORM_ROOT_BIN}/CMakeIntelInformation.cmake" OPTIONAL) INCLUDE("${CMAKE_PLATFORM_ROOT_BIN}/CMakeIntelInformation.cmake" OPTIONAL)
IF(NOT _INTEL_XILINK_TEST_RUN) IF(NOT _INTEL_XILINK_TEST_RUN)
@ -15,3 +74,31 @@ SET(_INTEL_COMPILER_SUPPORTS_MANIFEST ${_INTEL_COMPILER_SUPPORTS_MANIFEST})
") ")
ENDIF(NOT EXISTS "${CMAKE_PLATFORM_ROOT_BIN}/CMakeIntelInformation.cmake") ENDIF(NOT EXISTS "${CMAKE_PLATFORM_ROOT_BIN}/CMakeIntelInformation.cmake")
ENDIF(NOT _INTEL_XILINK_TEST_RUN) ENDIF(NOT _INTEL_XILINK_TEST_RUN)
macro(__windows_compiler_intel lang)
set(CMAKE_${lang}_COMPILE_OBJECT
"<CMAKE_${lang}_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO}${_COMPILE_${lang}} /Fo<OBJECT> <DEFINES> <FLAGS> -c <SOURCE>${CMAKE_END_TEMP_FILE}")
set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE
"<CMAKE_${lang}_COMPILER> > <PREPROCESSED_SOURCE> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO}${_COMPILE_${lang}} <DEFINES> <FLAGS> -E <SOURCE>${CMAKE_END_TEMP_FILE}")
set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS 1)
set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "lib ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
"xilink ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /dll <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
set(CMAKE_${lang}_CREATE_SHARED_MODULE "${CMAKE_${lang}_CREATE_SHARED_LIBRARY}")
set(CMAKE_${lang}_LINK_EXECUTABLE
"<CMAKE_${lang}_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> <OBJECTS> /Fe<TARGET> -link /implib:<TARGET_IMPLIB> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
set(CMAKE_${lang}_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000${_FLAGS_${lang}}")
set(CMAKE_${lang}_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Od /GZ")
set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "/DNDEBUG /MD /O1")
set(CMAKE_${lang}_FLAGS_RELEASE_INIT "/DNDEBUG /MD /O2")
set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "/DNDEBUG /MD /Zi /O2")
if(_INTEL_COMPILER_SUPPORTS_MANIFEST)
SET(CMAKE_${lang}_LINK_EXECUTABLE
"<CMAKE_COMMAND> -E vs_link_exe ${CMAKE_${lang}_LINK_EXECUTABLE}")
SET(CMAKE_${lang}_CREATE_SHARED_LIBRARY
"<CMAKE_COMMAND> -E vs_link_dll ${CMAKE_${lang}_CREATE_SHARED_LIBRARY}")
SET(CMAKE_${lang}_CREATE_SHARED_MODULE
"<CMAKE_COMMAND> -E vs_link_dll ${CMAKE_${lang}_CREATE_SHARED_MODULE}")
endif()
endmacro()

View File

@ -1 +0,0 @@
INCLUDE(${CMAKE_ROOT}/Modules/Platform/Windows-gcc.cmake)

View File

@ -1,109 +0,0 @@
SET(CMAKE_LIBRARY_PATH_FLAG "-LIBPATH:")
SET(CMAKE_LINK_LIBRARY_FLAG "")
SET(WIN32 1)
IF(CMAKE_VERBOSE_MAKEFILE)
SET(CMAKE_CL_NOLOGO)
ELSE(CMAKE_VERBOSE_MAKEFILE)
SET(CMAKE_CL_NOLOGO "/nologo")
ENDIF(CMAKE_VERBOSE_MAKEFILE)
SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1)
# create a shared C++ library
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
"xilink ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /dll <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
SET(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_CXX_CREATE_SHARED_LIBRARY})
# create a C shared library
SET(CMAKE_C_CREATE_SHARED_LIBRARY ${CMAKE_CXX_CREATE_SHARED_LIBRARY})
# create a C shared module just copy the shared library rule
SET(CMAKE_C_CREATE_SHARED_MODULE ${CMAKE_C_CREATE_SHARED_LIBRARY})
# create a C++ static library
SET(CMAKE_CXX_CREATE_STATIC_LIBRARY "lib ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
# create a C static library
SET(CMAKE_C_CREATE_STATIC_LIBRARY ${CMAKE_CXX_CREATE_STATIC_LIBRARY})
# compile a C++ file into an object file
SET(CMAKE_CXX_COMPILE_OBJECT
"<CMAKE_CXX_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} /TP -DWIN32 /Fo<OBJECT> <DEFINES> <FLAGS> -c <SOURCE>${CMAKE_END_TEMP_FILE}")
# compile a C file into an object file
SET(CMAKE_C_COMPILE_OBJECT
"<CMAKE_C_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} -DWIN32 /Fo<OBJECT> <DEFINES> <FLAGS> -c <SOURCE>${CMAKE_END_TEMP_FILE}")
SET(CMAKE_C_LINK_EXECUTABLE
"<CMAKE_C_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> <OBJECTS> /Fe<TARGET> -link /implib:<TARGET_IMPLIB> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
SET(CMAKE_C_CREATE_PREPROCESSED_SOURCE
"<CMAKE_C_COMPILER> > <PREPROCESSED_SOURCE> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} <FLAGS> <DEFINES> -E <SOURCE>${CMAKE_END_TEMP_FILE}")
SET(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE
"<CMAKE_CXX_COMPILER> > <PREPROCESSED_SOURCE> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} <FLAGS> <DEFINES> /TP -E <SOURCE>${CMAKE_END_TEMP_FILE}")
SET(CMAKE_COMPILE_RESOURCE "rc <FLAGS> /fo<OBJECT> <SOURCE>")
SET(CMAKE_CXX_LINK_EXECUTABLE
"<CMAKE_CXX_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> <OBJECTS> /Fe<TARGET> -link /implib:<TARGET_IMPLIB> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
SET(CMAKE_CREATE_WIN32_EXE /subsystem:windows)
SET(CMAKE_CREATE_CONSOLE_EXE /subsystem:console)
# default to Debug builds
#SET(CMAKE_BUILD_TYPE_INIT Debug)
SET(CMAKE_BUILD_TYPE_INIT Release)
SET (CMAKE_CXX_FLAGS_INIT "/W3 /Zm1000 /GX /GR")
SET (CMAKE_CXX_FLAGS_DEBUG_INIT "/MDd /Zi /Od /GZ")
SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MD /O1")
SET (CMAKE_CXX_FLAGS_RELEASE_INIT "/MD /O2")
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2")
SET (CMAKE_C_FLAGS_INIT "/W3 /Zm1000")
SET (CMAKE_C_FLAGS_DEBUG_INIT "/MDd /Zi /Od /GZ")
SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "/MD /O1")
SET (CMAKE_C_FLAGS_RELEASE_INIT "/MD /O2")
SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2")
SET(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib")
SET(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
# executable linker flags
SET (CMAKE_LINK_DEF_FILE_FLAG "/DEF:")
SET(_MACHINE_ARCH_FLAG ${MSVC_C_ARCHITECTURE_ID})
IF(NOT _MACHINE_ARCH_FLAG)
SET(_MACHINE_ARCH_FLAG ${MSVC_CXX_ARCHITECTURE_ID})
ENDIF(NOT _MACHINE_ARCH_FLAG)
SET (CMAKE_EXE_LINKER_FLAGS_INIT "/STACK:10000000 /INCREMENTAL:YES /machine:${_MACHINE_ARCH_FLAG}")
SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug")
SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug")
SET (CMAKE_SHARED_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT})
SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT})
SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT})
SET (CMAKE_MODULE_LINKER_FLAGS_INIT ${CMAKE_SHARED_LINKER_FLAGS_INIT})
SET (CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT ${CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT})
SET (CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT})
INCLUDE(Platform/Windows-Intel)
IF(_INTEL_COMPILER_SUPPORTS_MANIFEST)
SET(CMAKE_C_LINK_EXECUTABLE
"<CMAKE_COMMAND> -E vs_link_exe ${CMAKE_C_LINK_EXECUTABLE}")
SET(CMAKE_C_CREATE_SHARED_LIBRARY
"<CMAKE_COMMAND> -E vs_link_dll ${CMAKE_C_CREATE_SHARED_LIBRARY}")
SET(CMAKE_C_CREATE_SHARED_MODULE
"<CMAKE_COMMAND> -E vs_link_dll ${CMAKE_C_CREATE_SHARED_MODULE}")
SET(CMAKE_CXX_LINK_EXECUTABLE
"<CMAKE_COMMAND> -E vs_link_exe ${CMAKE_CXX_LINK_EXECUTABLE}")
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
"<CMAKE_COMMAND> -E vs_link_dll ${CMAKE_CXX_CREATE_SHARED_LIBRARY}")
SET(CMAKE_CXX_CREATE_SHARED_MODULE
"<CMAKE_COMMAND> -E vs_link_dll ${CMAKE_CXX_CREATE_SHARED_MODULE}")
ENDIF(_INTEL_COMPILER_SUPPORTS_MANIFEST)

View File

@ -1,80 +0,0 @@
SET(CMAKE_LIBRARY_PATH_FLAG "-LIBPATH:")
SET(CMAKE_LINK_LIBRARY_FLAG "")
SET(WIN32 1)
IF(CMAKE_VERBOSE_MAKEFILE)
SET(CMAKE_CL_NOLOGO)
ELSE(CMAKE_VERBOSE_MAKEFILE)
SET(CMAKE_CL_NOLOGO "/nologo")
ENDIF(CMAKE_VERBOSE_MAKEFILE)
SET(CMAKE_Fortran_MODDIR_FLAG "-module:")
SET(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 1)
SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY
"link ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /dll <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
SET(CMAKE_Fortran_CREATE_SHARED_MODULE ${CMAKE_Fortran_CREATE_SHARED_LIBRARY})
# create a C++ static library
SET(CMAKE_Fortran_CREATE_STATIC_LIBRARY "lib ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
# compile a C++ file into an object file
SET(CMAKE_Fortran_COMPILE_OBJECT
"<CMAKE_Fortran_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} /fpp /Fo<OBJECT> <DEFINES> <FLAGS> -c <SOURCE>${CMAKE_END_TEMP_FILE}")
SET(CMAKE_COMPILE_RESOURCE "rc <FLAGS> /fo<OBJECT> <SOURCE>")
SET(CMAKE_Fortran_LINK_EXECUTABLE
"<CMAKE_Fortran_COMPILER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} <FLAGS> /Fe<TARGET> -link /implib:<TARGET_IMPLIB> <CMAKE_Fortran_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
INCLUDE(Platform/Windows-Intel)
IF(_INTEL_COMPILER_SUPPORTS_MANIFEST)
SET(CMAKE_Fortran_LINK_EXECUTABLE
"<CMAKE_COMMAND> -E vs_link_exe ${CMAKE_Fortran_LINK_EXECUTABLE}")
SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY
"<CMAKE_COMMAND> -E vs_link_dll ${CMAKE_Fortran_CREATE_SHARED_LIBRARY}")
SET(CMAKE_Fortran_CREATE_SHARED_MODULE
"<CMAKE_COMMAND> -E vs_link_dll ${CMAKE_Fortran_CREATE_SHARED_MODULE}")
ENDIF(_INTEL_COMPILER_SUPPORTS_MANIFEST)
SET(CMAKE_CREATE_WIN32_EXE /subsystem:windows)
SET(CMAKE_CREATE_CONSOLE_EXE /subsystem:console)
IF(CMAKE_GENERATOR MATCHES "Visual Studio 6")
SET (CMAKE_NO_BUILD_TYPE 1)
ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 6")
IF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR CMAKE_GENERATOR MATCHES "Visual Studio 8")
SET (CMAKE_NO_BUILD_TYPE 1)
SET (CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel;RelWithDebInfo" CACHE STRING
"Semicolon separated list of supported configuration types, only supports Debug, Release, MinSizeRel, and RelWithDebInfo, anything else will be ignored.")
ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR CMAKE_GENERATOR MATCHES "Visual Studio 8")
# does the compiler support pdbtype and is it the newer compiler
SET(CMAKE_BUILD_TYPE_INIT Debug)
SET (CMAKE_Fortran_FLAGS_INIT "/W1 /nologo /fpp /libs:dll /threads")
SET (CMAKE_Fortran_FLAGS_DEBUG_INIT "/debug:full /dbglibs")
SET (CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "/O2 /D NDEBUG")
SET (CMAKE_Fortran_FLAGS_RELEASE_INIT "/O1 /D NDEBUG")
SET (CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "/O1 /debug:full /D NDEBUG")
SET (CMAKE_Fortran_STANDARD_LIBRARIES_INIT "user32.lib")
# executable linker flags
SET (CMAKE_LINK_DEF_FILE_FLAG "/DEF:")
SET (CMAKE_EXE_LINKER_FLAGS_INIT " /INCREMENTAL:YES")
IF (CMAKE_COMPILER_SUPPORTS_PDBTYPE)
SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug /pdbtype:sept")
SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug /pdbtype:sept")
ELSE (CMAKE_COMPILER_SUPPORTS_PDBTYPE)
SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug")
SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug")
ENDIF (CMAKE_COMPILER_SUPPORTS_PDBTYPE)
SET (CMAKE_SHARED_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT})
SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT})
SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT})
SET (CMAKE_MODULE_LINKER_FLAGS_INIT ${CMAKE_SHARED_LINKER_FLAGS_INIT})
SET (CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT ${CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT})
SET (CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT})

View File

@ -254,7 +254,15 @@ MACRO(QT4_GENERATE_DBUS_INTERFACE _header) # _customName OPTIONS -some -options
GET_FILENAME_COMPONENT(_basename ${_header} NAME_WE) GET_FILENAME_COMPONENT(_basename ${_header} NAME_WE)
IF (_customName) IF (_customName)
SET(_target ${CMAKE_CURRENT_BINARY_DIR}/${_customName}) if (IS_ABSOLUTE ${_customName})
get_filename_component(_containingDir ${_customName} PATH)
if (NOT EXISTS ${_containingDir})
file(MAKE_DIRECTORY "${_containingDir}")
endif()
SET(_target ${_customName})
else()
SET(_target ${CMAKE_CURRENT_BINARY_DIR}/${_customName})
endif()
ELSE (_customName) ELSE (_customName)
SET(_target ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.xml) SET(_target ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.xml)
ENDIF (_customName) ENDIF (_customName)

View File

@ -1,6 +1,6 @@
#============================================================================= #=============================================================================
# Copyright 2007-2009 Kitware, Inc. # Copyright 2007-2010 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.
@ -12,6 +12,7 @@
# (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.)
CMAKE_MINIMUM_REQUIRED(VERSION ${CMAKE_VERSION})
PROJECT(DumpInformation) PROJECT(DumpInformation)
# first get the standard information for th platform # first get the standard information for th platform

View File

@ -131,6 +131,8 @@ SET(SRCS
cmComputeTargetDepends.cxx cmComputeTargetDepends.cxx
cmCustomCommand.cxx cmCustomCommand.cxx
cmCustomCommand.h cmCustomCommand.h
cmCustomCommandGenerator.cxx
cmCustomCommandGenerator.h
cmDefinitions.cxx cmDefinitions.cxx
cmDefinitions.h cmDefinitions.h
cmDepends.cxx cmDepends.cxx
@ -156,6 +158,7 @@ SET(SRCS
cmDocumentationFormatterText.cxx cmDocumentationFormatterText.cxx
cmDocumentationFormatterUsage.cxx cmDocumentationFormatterUsage.cxx
cmDocumentationSection.cxx cmDocumentationSection.cxx
cmDocumentGeneratorExpressions.h
cmDocumentVariables.cxx cmDocumentVariables.cxx
cmDynamicLoader.cxx cmDynamicLoader.cxx
cmDynamicLoader.h cmDynamicLoader.h

View File

@ -337,6 +337,7 @@ int cmCPackNSISGenerator::InitializeInternal()
<< std::endl); << std::endl);
std::vector<std::string> path; std::vector<std::string> path;
std::string nsisPath; std::string nsisPath;
bool gotRegValue = true;
#ifdef _WIN32 #ifdef _WIN32
if ( !cmsys::SystemTools::ReadRegistryValue( if ( !cmsys::SystemTools::ReadRegistryValue(
@ -346,24 +347,37 @@ int cmCPackNSISGenerator::InitializeInternal()
if ( !cmsys::SystemTools::ReadRegistryValue( if ( !cmsys::SystemTools::ReadRegistryValue(
"HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS", nsisPath) ) "HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS", nsisPath) )
{ {
cmCPackLogger gotRegValue = false;
(cmCPackLog::LOG_ERROR,
"Cannot find NSIS registry value. This is usually caused by NSIS "
"not being installed. Please install NSIS from "
"http://nsis.sourceforge.net"
<< std::endl);
return 0;
} }
} }
path.push_back(nsisPath);
if (gotRegValue)
{
path.push_back(nsisPath);
}
#endif #endif
nsisPath = cmSystemTools::FindProgram("makensis", path, false); nsisPath = cmSystemTools::FindProgram("makensis", path, false);
if ( nsisPath.empty() ) if ( nsisPath.empty() )
{ {
cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find NSIS compiler" cmCPackLogger(cmCPackLog::LOG_ERROR,
"Cannot find NSIS compiler makensis: likely it is not installed, "
"or not in your PATH"
<< std::endl); << std::endl);
if (!gotRegValue)
{
cmCPackLogger(cmCPackLog::LOG_ERROR,
"Could not read NSIS registry value. This is usually caused by "
"NSIS not being installed. Please install NSIS from "
"http://nsis.sourceforge.net"
<< std::endl);
}
return 0; return 0;
} }
std::string nsisCmd = "\"" + nsisPath + "\" " NSIS_OPT "VERSION"; std::string nsisCmd = "\"" + nsisPath + "\" " NSIS_OPT "VERSION";
cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Test NSIS version: " cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Test NSIS version: "
<< nsisCmd.c_str() << std::endl); << nsisCmd.c_str() << std::endl);

View File

@ -503,28 +503,15 @@ private:
this->ParsePerson(this->Line.c_str()+7, author); this->ParsePerson(this->Line.c_str()+7, author);
this->Rev.Author = author.Name; this->Rev.Author = author.Name;
this->Rev.EMail = author.EMail; this->Rev.EMail = author.EMail;
this->Rev.Date = this->FormatDateTime(author);
// Convert the time to a human-readable format that is also easy }
// to machine-parse: "CCYY-MM-DD hh:mm:ss". else if(strncmp(this->Line.c_str(), "committer ", 10) == 0)
time_t seconds = static_cast<time_t>(author.Time); {
struct tm* t = gmtime(&seconds); Person committer;
char dt[1024]; this->ParsePerson(this->Line.c_str()+10, committer);
sprintf(dt, "%04d-%02d-%02d %02d:%02d:%02d", this->Rev.Committer = committer.Name;
t->tm_year+1900, t->tm_mon+1, t->tm_mday, this->Rev.CommitterEMail = committer.EMail;
t->tm_hour, t->tm_min, t->tm_sec); this->Rev.CommitDate = this->FormatDateTime(committer);
this->Rev.Date = dt;
// Add the time-zone field "+zone" or "-zone".
char tz[32];
if(author.TimeZone >= 0)
{
sprintf(tz, " +%04ld", author.TimeZone);
}
else
{
sprintf(tz, " -%04ld", -author.TimeZone);
}
this->Rev.Date += tz;
} }
} }
@ -537,6 +524,32 @@ private:
} }
this->Rev.Log += "\n"; this->Rev.Log += "\n";
} }
std::string FormatDateTime(Person const& person)
{
// Convert the time to a human-readable format that is also easy
// to machine-parse: "CCYY-MM-DD hh:mm:ss".
time_t seconds = static_cast<time_t>(person.Time);
struct tm* t = gmtime(&seconds);
char dt[1024];
sprintf(dt, "%04d-%02d-%02d %02d:%02d:%02d",
t->tm_year+1900, t->tm_mon+1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec);
std::string out = dt;
// Add the time-zone field "+zone" or "-zone".
char tz[32];
if(person.TimeZone >= 0)
{
sprintf(tz, " +%04ld", person.TimeZone);
}
else
{
sprintf(tz, " -%04ld", -person.TimeZone);
}
out += tz;
return out;
}
}; };
char const cmCTestGIT::CommitParser::SectionSep[SectionCount] = char const cmCTestGIT::CommitParser::SectionSep[SectionCount] =

View File

@ -653,32 +653,37 @@ bool cmCTestMultiProcessHandler::CheckCycles()
it != this->Tests.end(); ++it) it != this->Tests.end(); ++it)
{ {
//DFS from each element to itself //DFS from each element to itself
int root = it->first;
std::set<int> visited;
std::stack<int> s; std::stack<int> s;
std::vector<int> visited; s.push(root);
s.push(it->first);
while(!s.empty()) while(!s.empty())
{ {
int test = s.top(); int test = s.top();
s.pop(); s.pop();
if(visited.insert(test).second)
for(TestSet::iterator d = this->Tests[test].begin();
d != this->Tests[test].end(); ++d)
{ {
if(std::find(visited.begin(), visited.end(), *d) != visited.end()) for(TestSet::iterator d = this->Tests[test].begin();
d != this->Tests[test].end(); ++d)
{ {
//cycle exists if(*d == root)
cmCTestLog(this->CTest, ERROR_MESSAGE, "Error: a cycle exists in " {
"the test dependency graph for the test \"" //cycle exists
<< this->Properties[it->first]->Name << "\"." << std::endl cmCTestLog(this->CTest, ERROR_MESSAGE,
<< "Please fix the cycle and run ctest again." << std::endl); "Error: a cycle exists in the test dependency graph "
return false; "for the test \"" << this->Properties[root]->Name <<
"\".\nPlease fix the cycle and run ctest again.\n");
return false;
}
else
{
s.push(*d);
}
} }
s.push(*d);
} }
visited.push_back(test);
} }
} }
cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
"Checking test dependency graph end" << std::endl);
return true; return true;
} }

View File

@ -455,7 +455,8 @@ bool cmCTestRunTest::StartTest(size_t total)
{ {
return false; return false;
} }
return this->ForkProcess(timeout, &this->TestProperties->Environment); return this->ForkProcess(timeout, this->TestProperties->ExplicitTimeout,
&this->TestProperties->Environment);
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -598,7 +599,7 @@ double cmCTestRunTest::ResolveTimeout()
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
bool cmCTestRunTest::ForkProcess(double testTimeOut, bool cmCTestRunTest::ForkProcess(double testTimeOut, bool explicitTimeout,
std::vector<std::string>* environment) std::vector<std::string>* environment)
{ {
this->TestProcess = new cmProcess; this->TestProcess = new cmProcess;
@ -619,12 +620,16 @@ bool cmCTestRunTest::ForkProcess(double testTimeOut,
{ {
timeout = testTimeOut; timeout = testTimeOut;
} }
// always have at least 1 second if we got to here // always have at least 1 second if we got to here
if (timeout <= 0) if (timeout <= 0)
{ {
timeout = 1; timeout = 1;
} }
// handle timeout explicitly set to 0
if (testTimeOut == 0 && explicitTimeout)
{
timeout = 0;
}
cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, this->Index << ": " cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, this->Index << ": "
<< "Test timeout computed to be: " << timeout << "\n"); << "Test timeout computed to be: " << timeout << "\n");

View File

@ -63,8 +63,8 @@ private:
void ExeNotFound(std::string exe); void ExeNotFound(std::string exe);
// Figures out a final timeout which is min(STOP_TIME, NOW+TIMEOUT) // Figures out a final timeout which is min(STOP_TIME, NOW+TIMEOUT)
double ResolveTimeout(); double ResolveTimeout();
bool ForkProcess(double testTimeOut, bool ForkProcess(double testTimeOut, bool explicitTimeout,
std::vector<std::string>* environment); std::vector<std::string>* environment);
void WriteLogOutputTop(size_t completed, size_t total); void WriteLogOutputTop(size_t completed, size_t total);
//Run post processing of the process output for MemCheck //Run post processing of the process output for MemCheck
void MemCheckPostProcess(); void MemCheckPostProcess();

View File

@ -438,6 +438,8 @@ void cmCTestTestHandler::Initialize()
this->TestsToRun.clear(); this->TestsToRun.clear();
this->UseIncludeLabelRegExpFlag = false;
this->UseExcludeLabelRegExpFlag = false;
this->UseIncludeRegExpFlag = false; this->UseIncludeRegExpFlag = false;
this->UseExcludeRegExpFlag = false; this->UseExcludeRegExpFlag = false;
this->UseExcludeRegExpFirst = false; this->UseExcludeRegExpFirst = false;
@ -2120,6 +2122,7 @@ bool cmCTestTestHandler::SetTestsProperties(
if ( key == "TIMEOUT" ) if ( key == "TIMEOUT" )
{ {
rtit->Timeout = atof(val.c_str()); rtit->Timeout = atof(val.c_str());
rtit->ExplicitTimeout = true;
} }
if ( key == "COST" ) if ( key == "COST" )
{ {
@ -2190,7 +2193,6 @@ bool cmCTestTestHandler::SetTestsProperties(
{ {
rtit->Labels.push_back(*crit); rtit->Labels.push_back(*crit);
} }
} }
if ( key == "MEASUREMENT" ) if ( key == "MEASUREMENT" )
{ {
@ -2219,6 +2221,10 @@ bool cmCTestTestHandler::SetTestsProperties(
std::string(crit->c_str()))); std::string(crit->c_str())));
} }
} }
if ( key == "WORKING_DIRECTORY" )
{
rtit->Directory = val;
}
} }
} }
} }
@ -2290,6 +2296,7 @@ bool cmCTestTestHandler::AddTest(const std::vector<std::string>& args)
test.WillFail = false; test.WillFail = false;
test.RunSerial = false; test.RunSerial = false;
test.Timeout = 0; test.Timeout = 0;
test.ExplicitTimeout = false;
test.Cost = 0; test.Cost = 0;
test.Processors = 1; test.Processors = 1;
test.PreviousRuns = 0; test.PreviousRuns = 0;

View File

@ -99,6 +99,7 @@ public:
int PreviousRuns; int PreviousRuns;
bool RunSerial; bool RunSerial;
double Timeout; double Timeout;
bool ExplicitTimeout;
int Index; int Index;
//Requested number of process slots //Requested number of process slots
int Processors; int Processors;

View File

@ -228,6 +228,11 @@ void cmCTestVC::WriteXMLEntry(std::ostream& xml,
<< "\t\t\t<CheckinDate>" << cmXMLSafe(rev.Date) << "</CheckinDate>\n" << "\t\t\t<CheckinDate>" << cmXMLSafe(rev.Date) << "</CheckinDate>\n"
<< "\t\t\t<Author>" << cmXMLSafe(rev.Author) << "</Author>\n" << "\t\t\t<Author>" << cmXMLSafe(rev.Author) << "</Author>\n"
<< "\t\t\t<Email>" << cmXMLSafe(rev.EMail) << "</Email>\n" << "\t\t\t<Email>" << cmXMLSafe(rev.EMail) << "</Email>\n"
<< "\t\t\t<Committer>" << cmXMLSafe(rev.Committer) << "</Committer>\n"
<< "\t\t\t<CommitterEmail>" << cmXMLSafe(rev.CommitterEMail)
<< "</CommitterEmail>\n"
<< "\t\t\t<CommitDate>" << cmXMLSafe(rev.CommitDate)
<< "</CommitDate>\n"
<< "\t\t\t<Log>" << cmXMLSafe(rev.Log) << "</Log>\n" << "\t\t\t<Log>" << cmXMLSafe(rev.Log) << "</Log>\n"
<< "\t\t\t<Revision>" << cmXMLSafe(rev.Rev) << "</Revision>\n" << "\t\t\t<Revision>" << cmXMLSafe(rev.Rev) << "</Revision>\n"
<< "\t\t\t<PriorRevision>" << cmXMLSafe(prior) << "</PriorRevision>\n" << "\t\t\t<PriorRevision>" << cmXMLSafe(prior) << "</PriorRevision>\n"

View File

@ -74,6 +74,9 @@ protected:
std::string Date; std::string Date;
std::string Author; std::string Author;
std::string EMail; std::string EMail;
std::string Committer;
std::string CommitterEMail;
std::string CommitDate;
std::string Log; std::string Log;
}; };

View File

@ -55,7 +55,7 @@ void QCMakeThread::run()
} }
CMakeSetupDialog::CMakeSetupDialog() CMakeSetupDialog::CMakeSetupDialog()
: ExitAfterGenerate(true), CacheModified(false), CurrentState(Interrupting) : ExitAfterGenerate(true), CacheModified(false), ConfigureNeeded(true), CurrentState(Interrupting)
{ {
QString title = QString(tr("CMake %1")); QString title = QString(tr("CMake %1"));
title = title.arg(cmVersion::GetCMakeVersion()); title = title.arg(cmVersion::GetCMakeVersion());
@ -167,6 +167,9 @@ CMakeSetupDialog::CMakeSetupDialog()
this->CMakeThread->start(); this->CMakeThread->start();
this->enterState(ReadyConfigure); this->enterState(ReadyConfigure);
ProgressOffset = 0.0;
ProgressFactor = 1.0;
} }
void CMakeSetupDialog::initialize() void CMakeSetupDialog::initialize()
@ -179,12 +182,11 @@ void CMakeSetupDialog::initialize()
QObject::connect(this->ConfigureButton, SIGNAL(clicked(bool)), QObject::connect(this->ConfigureButton, SIGNAL(clicked(bool)),
this, SLOT(doConfigure())); this, SLOT(doConfigure()));
QObject::connect(this->CMakeThread->cmakeInstance(),
SIGNAL(configureDone(int)), QObject::connect(this->CMakeThread->cmakeInstance(), SIGNAL(configureDone(int)),
this, SLOT(finishConfigure(int))); this, SLOT(exitLoop(int)));
QObject::connect(this->CMakeThread->cmakeInstance(), QObject::connect(this->CMakeThread->cmakeInstance(), SIGNAL(generateDone(int)),
SIGNAL(generateDone(int)), this, SLOT(exitLoop(int)));
this, SLOT(finishGenerate(int)));
QObject::connect(this->GenerateButton, SIGNAL(clicked(bool)), QObject::connect(this->GenerateButton, SIGNAL(clicked(bool)),
this, SLOT(doGenerate())); this, SLOT(doGenerate()));
@ -270,15 +272,8 @@ CMakeSetupDialog::~CMakeSetupDialog()
this->CMakeThread->wait(2000); this->CMakeThread->wait(2000);
} }
void CMakeSetupDialog::doConfigure() bool CMakeSetupDialog::prepareConfigure()
{ {
if(this->CurrentState == Configuring)
{
// stop configure
doInterrupt();
return;
}
// make sure build directory exists // make sure build directory exists
QString bindir = this->CMakeThread->cmakeInstance()->binaryDirectory(); QString bindir = this->CMakeThread->cmakeInstance()->binaryDirectory();
QDir dir(bindir); QDir dir(bindir);
@ -295,7 +290,7 @@ void CMakeSetupDialog::doConfigure()
QMessageBox::Yes | QMessageBox::No); QMessageBox::Yes | QMessageBox::No);
if(btn == QMessageBox::No) if(btn == QMessageBox::No)
{ {
return; return false;
} }
if(!dir.mkpath(".")) if(!dir.mkpath("."))
{ {
@ -303,7 +298,7 @@ void CMakeSetupDialog::doConfigure()
QString(tr("Failed to create directory %1")).arg(dir.path()), QString(tr("Failed to create directory %1")).arg(dir.path()),
QMessageBox::Ok); QMessageBox::Ok);
return; return false;
} }
} }
@ -312,27 +307,45 @@ void CMakeSetupDialog::doConfigure()
{ {
if(!this->setupFirstConfigure()) if(!this->setupFirstConfigure())
{ {
return; return false;
} }
} }
// remember path // remember path
this->addBinaryPath(dir.absolutePath()); this->addBinaryPath(dir.absolutePath());
this->enterState(Configuring); return true;
this->CacheValues->selectionModel()->clear();
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
"setProperties", Qt::QueuedConnection,
Q_ARG(QCMakePropertyList,
this->CacheValues->cacheModel()->properties()));
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
"configure", Qt::QueuedConnection);
} }
void CMakeSetupDialog::finishConfigure(int err) void CMakeSetupDialog::exitLoop(int err)
{ {
if(0 == err && !this->CacheValues->cacheModel()->newPropertyCount()) this->LocalLoop.exit(err);
}
void CMakeSetupDialog::doConfigure()
{
if(this->CurrentState == Configuring)
{
// stop configure
doInterrupt();
return;
}
if(!prepareConfigure())
{
return;
}
this->enterState(Configuring);
bool ret = doConfigureInternal();
if(ret)
{
this->ConfigureNeeded = false;
}
if(ret && !this->CacheValues->cacheModel()->newPropertyCount())
{ {
this->enterState(ReadyGenerate); this->enterState(ReadyGenerate);
} }
@ -341,6 +354,22 @@ void CMakeSetupDialog::finishConfigure(int err)
this->enterState(ReadyConfigure); this->enterState(ReadyConfigure);
this->CacheValues->scrollToTop(); this->CacheValues->scrollToTop();
} }
this->ProgressBar->reset();
}
bool CMakeSetupDialog::doConfigureInternal()
{
this->Output->clear();
this->CacheValues->selectionModel()->clear();
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
"setProperties", Qt::QueuedConnection,
Q_ARG(QCMakePropertyList,
this->CacheValues->cacheModel()->properties()));
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
"configure", Qt::QueuedConnection);
int err = this->LocalLoop.exec();
if(err != 0) if(err != 0)
{ {
@ -348,17 +377,8 @@ void CMakeSetupDialog::finishConfigure(int err)
tr("Error in configuration process, project files may be invalid"), tr("Error in configuration process, project files may be invalid"),
QMessageBox::Ok); QMessageBox::Ok);
} }
}
void CMakeSetupDialog::finishGenerate(int err) return 0 == err;
{
this->enterState(ReadyConfigure);
if(err != 0)
{
QMessageBox::critical(this, tr("Error"),
tr("Error in generation process, project files may be invalid"),
QMessageBox::Ok);
}
} }
void CMakeSetupDialog::doInstallForCommandLine() void CMakeSetupDialog::doInstallForCommandLine()
@ -367,6 +387,23 @@ void CMakeSetupDialog::doInstallForCommandLine()
setupdialog.exec(); setupdialog.exec();
} }
bool CMakeSetupDialog::doGenerateInternal()
{
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
"generate", Qt::QueuedConnection);
int err = this->LocalLoop.exec();
if(err != 0)
{
QMessageBox::critical(this, tr("Error"),
tr("Error in generation process, project files may be invalid"),
QMessageBox::Ok);
}
return 0 == err;
}
void CMakeSetupDialog::doGenerate() void CMakeSetupDialog::doGenerate()
{ {
if(this->CurrentState == Generating) if(this->CurrentState == Generating)
@ -375,9 +412,43 @@ void CMakeSetupDialog::doGenerate()
doInterrupt(); doInterrupt();
return; return;
} }
// see if we need to configure
// we'll need to configure if:
// the configure step hasn't been done yet
// generate was the last step done
if(this->ConfigureNeeded)
{
if(!prepareConfigure())
{
return;
}
}
this->enterState(Generating); this->enterState(Generating);
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
"generate", Qt::QueuedConnection); bool config_passed = true;
if(this->ConfigureNeeded)
{
this->CacheValues->cacheModel()->setShowNewProperties(false);
this->ProgressFactor = 0.5;
config_passed = doConfigureInternal();
this->ProgressOffset = 0.5;
}
if(config_passed)
{
doGenerateInternal();
}
this->ProgressOffset = 0.0;
this->ProgressFactor = 1.0;
this->CacheValues->cacheModel()->setShowNewProperties(true);
this->enterState(ReadyConfigure);
this->ProgressBar->reset();
this->ConfigureNeeded = true;
} }
void CMakeSetupDialog::closeEvent(QCloseEvent* e) void CMakeSetupDialog::closeEvent(QCloseEvent* e)
@ -542,6 +613,7 @@ void CMakeSetupDialog::setSourceDirectory(const QString& dir)
void CMakeSetupDialog::showProgress(const QString& /*msg*/, float percent) void CMakeSetupDialog::showProgress(const QString& /*msg*/, float percent)
{ {
percent = (percent * ProgressFactor) + ProgressOffset;
this->ProgressBar->setValue(qRound(percent * 100)); this->ProgressBar->setValue(qRound(percent * 100));
} }
@ -883,7 +955,6 @@ void CMakeSetupDialog::enterState(CMakeSetupDialog::State s)
} }
else if(s == Configuring) else if(s == Configuring)
{ {
this->Output->clear();
this->setEnabledState(false); this->setEnabledState(false);
this->GenerateButton->setEnabled(false); this->GenerateButton->setEnabled(false);
this->GenerateAction->setEnabled(false); this->GenerateAction->setEnabled(false);
@ -899,17 +970,15 @@ void CMakeSetupDialog::enterState(CMakeSetupDialog::State s)
} }
else if(s == ReadyConfigure) else if(s == ReadyConfigure)
{ {
this->ProgressBar->reset();
this->setEnabledState(true); this->setEnabledState(true);
this->GenerateButton->setEnabled(false); this->GenerateButton->setEnabled(true);
this->GenerateAction->setEnabled(false); this->GenerateAction->setEnabled(true);
this->ConfigureButton->setEnabled(true); this->ConfigureButton->setEnabled(true);
this->ConfigureButton->setText(tr("&Configure")); this->ConfigureButton->setText(tr("&Configure"));
this->GenerateButton->setText(tr("&Generate")); this->GenerateButton->setText(tr("&Generate"));
} }
else if(s == ReadyGenerate) else if(s == ReadyGenerate)
{ {
this->ProgressBar->reset();
this->setEnabledState(true); this->setEnabledState(true);
this->GenerateButton->setEnabled(true); this->GenerateButton->setEnabled(true);
this->GenerateAction->setEnabled(true); this->GenerateAction->setEnabled(true);

View File

@ -16,6 +16,7 @@
#include "QCMake.h" #include "QCMake.h"
#include <QMainWindow> #include <QMainWindow>
#include <QThread> #include <QThread>
#include <QEventLoop>
#include "ui_CMakeSetupDialog.h" #include "ui_CMakeSetupDialog.h"
class QCMakeThread; class QCMakeThread;
@ -43,8 +44,6 @@ protected slots:
void doHelp(); void doHelp();
void doAbout(); void doAbout();
void doInterrupt(); void doInterrupt();
void finishConfigure(int error);
void finishGenerate(int error);
void error(const QString& message); void error(const QString& message);
void message(const QString& message); void message(const QString& message);
@ -74,6 +73,10 @@ protected slots:
void setGroupedView(bool); void setGroupedView(bool);
void showUserChanges(); void showUserChanges();
void setSearchFilter(const QString& str); void setSearchFilter(const QString& str);
bool prepareConfigure();
bool doConfigureInternal();
bool doGenerateInternal();
void exitLoop(int);
protected: protected:
@ -87,6 +90,7 @@ protected:
QCMakeThread* CMakeThread; QCMakeThread* CMakeThread;
bool ExitAfterGenerate; bool ExitAfterGenerate;
bool CacheModified; bool CacheModified;
bool ConfigureNeeded;
QAction* ReloadCacheAction; QAction* ReloadCacheAction;
QAction* DeleteCacheAction; QAction* DeleteCacheAction;
QAction* ExitAction; QAction* ExitAction;
@ -99,6 +103,10 @@ protected:
QTextCharFormat ErrorFormat; QTextCharFormat ErrorFormat;
QTextCharFormat MessageFormat; QTextCharFormat MessageFormat;
QEventLoop LocalLoop;
float ProgressOffset;
float ProgressFactor;
}; };
// QCMake instance on a thread // QCMake instance on a thread

View File

@ -200,6 +200,7 @@ QCMakeCacheModel::QCMakeCacheModel(QObject* p)
NewPropertyCount(0), NewPropertyCount(0),
View(FlatView) View(FlatView)
{ {
this->ShowNewProperties = true;
QStringList labels; QStringList labels;
labels << tr("Name") << tr("Value"); labels << tr("Name") << tr("Value");
this->setHorizontalHeaderLabels(labels); this->setHorizontalHeaderLabels(labels);
@ -214,6 +215,11 @@ static uint qHash(const QCMakeProperty& p)
return qHash(p.Key); return qHash(p.Key);
} }
void QCMakeCacheModel::setShowNewProperties(bool f)
{
this->ShowNewProperties = f;
}
void QCMakeCacheModel::clear() void QCMakeCacheModel::clear()
{ {
this->QStandardItemModel::clear(); this->QStandardItemModel::clear();
@ -226,13 +232,21 @@ void QCMakeCacheModel::clear()
void QCMakeCacheModel::setProperties(const QCMakePropertyList& props) void QCMakeCacheModel::setProperties(const QCMakePropertyList& props)
{ {
QSet<QCMakeProperty> newProps = props.toSet(); QSet<QCMakeProperty> newProps, newProps2;
QSet<QCMakeProperty> newProps2 = newProps;
QSet<QCMakeProperty> oldProps = this->properties().toSet(); if(this->ShowNewProperties)
{
oldProps.intersect(newProps); newProps = props.toSet();
newProps.subtract(oldProps); newProps2 = newProps;
newProps2.subtract(newProps); QSet<QCMakeProperty> oldProps = this->properties().toSet();
oldProps.intersect(newProps);
newProps.subtract(oldProps);
newProps2.subtract(newProps);
}
else
{
newProps2 = props.toSet();
}
bool b = this->blockSignals(true); bool b = this->blockSignals(true);

View File

@ -78,6 +78,9 @@ public slots:
// become new properties and be marked red. // become new properties and be marked red.
void setProperties(const QCMakePropertyList& props); void setProperties(const QCMakePropertyList& props);
// set whether to show new properties in red
void setShowNewProperties(bool);
// clear everything from the model // clear everything from the model
void clear(); void clear();
@ -115,6 +118,7 @@ public:
protected: protected:
bool EditEnabled; bool EditEnabled;
int NewPropertyCount; int NewPropertyCount;
bool ShowNewProperties;
ViewType View; ViewType View;
// set the data in the model for this property // set the data in the model for this property

View File

@ -13,6 +13,7 @@
#define cmAddCustomCommandCommand_h #define cmAddCustomCommandCommand_h
#include "cmCommand.h" #include "cmCommand.h"
#include "cmDocumentGeneratorExpressions.h"
/** \class cmAddCustomCommandCommand /** \class cmAddCustomCommandCommand
* \brief * \brief
@ -146,8 +147,15 @@ public:
"target-level dependency will be added so that the executable target " "target-level dependency will be added so that the executable target "
"will be built before any target using this custom command. However " "will be built before any target using this custom command. However "
"this does NOT add a file-level dependency that would cause the " "this does NOT add a file-level dependency that would cause the "
"custom command to re-run whenever the executable is recompiled.\n" "custom command to re-run whenever the executable is recompiled."
"\n"
"Arguments to COMMAND may use \"generator expressions\" with the "
"syntax \"$<...>\". "
CM_DOCUMENT_COMMAND_GENERATOR_EXPRESSIONS
"References to target names in generator expressions imply "
"target-level dependencies, but NOT file-level dependencies. "
"List target names with the DEPENDS option to add file dependencies."
"\n"
"The DEPENDS option specifies files on which the command depends. " "The DEPENDS option specifies files on which the command depends. "
"If any dependency is an OUTPUT of another custom command in the " "If any dependency is an OUTPUT of another custom command in the "
"same directory (CMakeLists.txt file) CMake automatically brings the " "same directory (CMakeLists.txt file) CMake automatically brings the "

View File

@ -74,6 +74,7 @@ bool cmAddTestCommand::HandleNameMode(std::vector<std::string> const& args)
{ {
std::string name; std::string name;
std::vector<std::string> configurations; std::vector<std::string> configurations;
std::string working_directory;
std::vector<std::string> command; std::vector<std::string> command;
// Read the arguments. // Read the arguments.
@ -81,6 +82,7 @@ bool cmAddTestCommand::HandleNameMode(std::vector<std::string> const& args)
DoingName, DoingName,
DoingCommand, DoingCommand,
DoingConfigs, DoingConfigs,
DoingWorkingDirectory,
DoingNone DoingNone
}; };
Doing doing = DoingName; Doing doing = DoingName;
@ -104,6 +106,15 @@ bool cmAddTestCommand::HandleNameMode(std::vector<std::string> const& args)
} }
doing = DoingConfigs; doing = DoingConfigs;
} }
else if(args[i] == "WORKING_DIRECTORY")
{
if(!working_directory.empty())
{
this->SetError(" may be given at most one WORKING_DIRECTORY.");
return false;
}
doing = DoingWorkingDirectory;
}
else if(doing == DoingName) else if(doing == DoingName)
{ {
name = args[i]; name = args[i];
@ -117,6 +128,11 @@ bool cmAddTestCommand::HandleNameMode(std::vector<std::string> const& args)
{ {
configurations.push_back(args[i]); configurations.push_back(args[i]);
} }
else if(doing == DoingWorkingDirectory)
{
working_directory = args[i];
doing = DoingNone;
}
else else
{ {
cmOStringStream e; cmOStringStream e;
@ -154,6 +170,7 @@ bool cmAddTestCommand::HandleNameMode(std::vector<std::string> const& args)
cmTest* test = this->Makefile->CreateTest(name.c_str()); cmTest* test = this->Makefile->CreateTest(name.c_str());
test->SetOldStyle(false); test->SetOldStyle(false);
test->SetCommand(command); test->SetCommand(command);
test->SetProperty("WORKING_DIRECTORY", working_directory.c_str());
this->Makefile->AddTestGenerator(new cmTestGenerator(test, configurations)); this->Makefile->AddTestGenerator(new cmTestGenerator(test, configurations));
return true; return true;

View File

@ -13,6 +13,7 @@
#define cmAddTestCommand_h #define cmAddTestCommand_h
#include "cmCommand.h" #include "cmCommand.h"
#include "cmDocumentGeneratorExpressions.h"
/** \class cmAddTestCommand /** \class cmAddTestCommand
* \brief Add a test to the lists of tests to run. * \brief Add a test to the lists of tests to run.
@ -68,28 +69,19 @@ public:
"in the binary tree.\n" "in the binary tree.\n"
"\n" "\n"
" add_test(NAME <name> [CONFIGURATIONS [Debug|Release|...]]\n" " add_test(NAME <name> [CONFIGURATIONS [Debug|Release|...]]\n"
" [WORKING_DIRECTORY dir]\n"
" COMMAND <command> [arg1 [arg2 ...]])\n" " COMMAND <command> [arg1 [arg2 ...]])\n"
"If COMMAND specifies an executable target (created by " "If COMMAND specifies an executable target (created by "
"add_executable) it will automatically be replaced by the location " "add_executable) it will automatically be replaced by the location "
"of the executable created at build time. " "of the executable created at build time. "
"If a CONFIGURATIONS option is given then the test will be executed " "If a CONFIGURATIONS option is given then the test will be executed "
"only when testing under one of the named configurations." "only when testing under one of the named configurations. "
"If a WORKING_DIRECTORY option is given then the test will be executed "
"in the given directory."
"\n" "\n"
"Arguments after COMMAND may use \"generator expressions\" with the " "Arguments after COMMAND may use \"generator expressions\" with the "
"syntax \"$<...>\". " "syntax \"$<...>\". "
"These expressions are evaluted during build system generation and " CM_DOCUMENT_COMMAND_GENERATOR_EXPRESSIONS
"produce information specific to each generated build configuration. "
"Valid expressions are:\n"
" $<CONFIGURATION> = configuration name\n"
" $<TARGET_FILE:tgt> = main file (.exe, .so.1.2, .a)\n"
" $<TARGET_LINKER_FILE:tgt> = file used to link (.a, .lib, .so)\n"
" $<TARGET_SONAME_FILE:tgt> = file with soname (.so.3)\n"
"where \"tgt\" is the name of a target. "
"Target file expressions produce a full path, but _DIR and _NAME "
"versions can produce the directory and file name components:\n"
" $<TARGET_FILE_DIR:tgt>/$<TARGET_FILE_NAME:tgt>\n"
" $<TARGET_LINKER_FILE_DIR:tgt>/$<TARGET_LINKER_FILE_NAME:tgt>\n"
" $<TARGET_SONAME_FILE_DIR:tgt>/$<TARGET_SONAME_FILE_NAME:tgt>\n"
"Example usage:\n" "Example usage:\n"
" add_test(NAME mytest\n" " add_test(NAME mytest\n"
" COMMAND testDriver --config $<CONFIGURATION>\n" " COMMAND testDriver --config $<CONFIGURATION>\n"

View File

@ -11,6 +11,8 @@
============================================================================*/ ============================================================================*/
#include "cmCustomCommand.h" #include "cmCustomCommand.h"
#include "cmMakefile.h"
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmCustomCommand::cmCustomCommand() cmCustomCommand::cmCustomCommand()
{ {
@ -28,12 +30,14 @@ cmCustomCommand::cmCustomCommand(const cmCustomCommand& r):
Comment(r.Comment), Comment(r.Comment),
WorkingDirectory(r.WorkingDirectory), WorkingDirectory(r.WorkingDirectory),
EscapeAllowMakeVars(r.EscapeAllowMakeVars), EscapeAllowMakeVars(r.EscapeAllowMakeVars),
EscapeOldStyle(r.EscapeOldStyle) EscapeOldStyle(r.EscapeOldStyle),
Backtrace(new cmListFileBacktrace(*r.Backtrace))
{ {
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmCustomCommand::cmCustomCommand(const std::vector<std::string>& outputs, cmCustomCommand::cmCustomCommand(cmMakefile* mf,
const std::vector<std::string>& outputs,
const std::vector<std::string>& depends, const std::vector<std::string>& depends,
const cmCustomCommandLines& commandLines, const cmCustomCommandLines& commandLines,
const char* comment, const char* comment,
@ -45,10 +49,21 @@ cmCustomCommand::cmCustomCommand(const std::vector<std::string>& outputs,
Comment(comment?comment:""), Comment(comment?comment:""),
WorkingDirectory(workingDirectory?workingDirectory:""), WorkingDirectory(workingDirectory?workingDirectory:""),
EscapeAllowMakeVars(false), EscapeAllowMakeVars(false),
EscapeOldStyle(true) EscapeOldStyle(true),
Backtrace(new cmListFileBacktrace)
{ {
this->EscapeOldStyle = true; this->EscapeOldStyle = true;
this->EscapeAllowMakeVars = false; this->EscapeAllowMakeVars = false;
if(mf)
{
mf->GetBacktrace(*this->Backtrace);
}
}
//----------------------------------------------------------------------------
cmCustomCommand::~cmCustomCommand()
{
delete this->Backtrace;
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -130,6 +145,12 @@ void cmCustomCommand::SetEscapeAllowMakeVars(bool b)
this->EscapeAllowMakeVars = b; this->EscapeAllowMakeVars = b;
} }
//----------------------------------------------------------------------------
cmListFileBacktrace const& cmCustomCommand::GetBacktrace() const
{
return *this->Backtrace;
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmCustomCommand::ImplicitDependsList const& cmCustomCommand::ImplicitDependsList const&
cmCustomCommand::GetImplicitDepends() const cmCustomCommand::GetImplicitDepends() const

View File

@ -13,6 +13,8 @@
#define cmCustomCommand_h #define cmCustomCommand_h
#include "cmStandardIncludes.h" #include "cmStandardIncludes.h"
class cmMakefile;
class cmListFileBacktrace;
/** \class cmCustomCommand /** \class cmCustomCommand
* \brief A class to encapsulate a custom command * \brief A class to encapsulate a custom command
@ -27,12 +29,15 @@ public:
cmCustomCommand(const cmCustomCommand& r); cmCustomCommand(const cmCustomCommand& r);
/** Main constructor specifies all information for the command. */ /** Main constructor specifies all information for the command. */
cmCustomCommand(const std::vector<std::string>& outputs, cmCustomCommand(cmMakefile* mf,
const std::vector<std::string>& outputs,
const std::vector<std::string>& depends, const std::vector<std::string>& depends,
const cmCustomCommandLines& commandLines, const cmCustomCommandLines& commandLines,
const char* comment, const char* comment,
const char* workingDirectory); const char* workingDirectory);
~cmCustomCommand();
/** Get the output file produced by the command. */ /** Get the output file produced by the command. */
const std::vector<std::string>& GetOutputs() const; const std::vector<std::string>& GetOutputs() const;
@ -63,6 +68,9 @@ public:
bool GetEscapeAllowMakeVars() const; bool GetEscapeAllowMakeVars() const;
void SetEscapeAllowMakeVars(bool b); void SetEscapeAllowMakeVars(bool b);
/** Backtrace of the command that created this custom command. */
cmListFileBacktrace const& GetBacktrace() const;
typedef std::pair<cmStdString, cmStdString> ImplicitDependsPair; typedef std::pair<cmStdString, cmStdString> ImplicitDependsPair;
class ImplicitDependsList: public std::vector<ImplicitDependsPair> {}; class ImplicitDependsList: public std::vector<ImplicitDependsPair> {};
void SetImplicitDepends(ImplicitDependsList const&); void SetImplicitDepends(ImplicitDependsList const&);
@ -78,6 +86,7 @@ private:
std::string WorkingDirectory; std::string WorkingDirectory;
bool EscapeAllowMakeVars; bool EscapeAllowMakeVars;
bool EscapeOldStyle; bool EscapeOldStyle;
cmListFileBacktrace* Backtrace;
ImplicitDependsList ImplicitDepends; ImplicitDependsList ImplicitDepends;
}; };

View File

@ -0,0 +1,72 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2010 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 "cmCustomCommandGenerator.h"
#include "cmMakefile.h"
#include "cmCustomCommand.h"
#include "cmLocalGenerator.h"
#include "cmGeneratorExpression.h"
//----------------------------------------------------------------------------
cmCustomCommandGenerator::cmCustomCommandGenerator(
cmCustomCommand const& cc, const char* config, cmMakefile* mf):
CC(cc), Config(config), Makefile(mf), LG(mf->GetLocalGenerator()),
OldStyle(cc.GetEscapeOldStyle()), MakeVars(cc.GetEscapeAllowMakeVars()),
GE(new cmGeneratorExpression(mf, config, cc.GetBacktrace()))
{
}
//----------------------------------------------------------------------------
cmCustomCommandGenerator::~cmCustomCommandGenerator()
{
delete this->GE;
}
//----------------------------------------------------------------------------
unsigned int cmCustomCommandGenerator::GetNumberOfCommands() const
{
return static_cast<unsigned int>(this->CC.GetCommandLines().size());
}
//----------------------------------------------------------------------------
std::string cmCustomCommandGenerator::GetCommand(unsigned int c) const
{
std::string const& argv0 = this->CC.GetCommandLines()[c][0];
cmTarget* target = this->Makefile->FindTargetToUse(argv0.c_str());
if(target && target->GetType() == cmTarget::EXECUTABLE &&
(target->IsImported() || !this->Makefile->IsOn("CMAKE_CROSSCOMPILING")))
{
return target->GetLocation(this->Config);
}
return this->GE->Process(argv0);
}
//----------------------------------------------------------------------------
void
cmCustomCommandGenerator
::AppendArguments(unsigned int c, std::string& cmd) const
{
cmCustomCommandLine const& commandLine = this->CC.GetCommandLines()[c];
for(unsigned int j=1;j < commandLine.size(); ++j)
{
std::string arg = this->GE->Process(commandLine[j]);
cmd += " ";
if(this->OldStyle)
{
cmd += this->LG->EscapeForShellOldStyle(arg.c_str());
}
else
{
cmd += this->LG->EscapeForShell(arg.c_str(), this->MakeVars);
}
}
}

View File

@ -0,0 +1,40 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2010 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 cmCustomCommandGenerator_h
#define cmCustomCommandGenerator_h
#include "cmStandardIncludes.h"
class cmCustomCommand;
class cmMakefile;
class cmLocalGenerator;
class cmGeneratorExpression;
class cmCustomCommandGenerator
{
cmCustomCommand const& CC;
const char* Config;
cmMakefile* Makefile;
cmLocalGenerator* LG;
bool OldStyle;
bool MakeVars;
cmGeneratorExpression* GE;
public:
cmCustomCommandGenerator(cmCustomCommand const& cc, const char* config,
cmMakefile* mf);
~cmCustomCommandGenerator();
unsigned int GetNumberOfCommands() const;
std::string GetCommand(unsigned int c) const;
void AppendArguments(unsigned int c, std::string& cmd) const;
};
#endif

View File

@ -25,7 +25,7 @@ cmDepends::cmDepends(cmLocalGenerator* lg, const char* targetDir):
Verbose(false), Verbose(false),
FileComparison(0), FileComparison(0),
TargetDirectory(targetDir), TargetDirectory(targetDir),
MaxPath(cmSystemTools::GetMaximumFilePathLength()), MaxPath(16384),
Dependee(new char[MaxPath]), Dependee(new char[MaxPath]),
Depender(new char[MaxPath]) Depender(new char[MaxPath])
{ {

View File

@ -0,0 +1,30 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2010 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 cmDocumentGeneratorExpressions_h
#define cmDocumentGeneratorExpressions_h
#define CM_DOCUMENT_COMMAND_GENERATOR_EXPRESSIONS \
"Generator expressions are evaluted during build system generation " \
"to produce information specific to each build configuration. " \
"Valid expressions are:\n" \
" $<CONFIGURATION> = configuration name\n" \
" $<TARGET_FILE:tgt> = main file (.exe, .so.1.2, .a)\n" \
" $<TARGET_LINKER_FILE:tgt> = file used to link (.a, .lib, .so)\n" \
" $<TARGET_SONAME_FILE:tgt> = file with soname (.so.3)\n" \
"where \"tgt\" is the name of a target. " \
"Target file expressions produce a full path, but _DIR and _NAME " \
"versions can produce the directory and file name components:\n" \
" $<TARGET_FILE_DIR:tgt>/$<TARGET_FILE_NAME:tgt>\n" \
" $<TARGET_LINKER_FILE_DIR:tgt>/$<TARGET_LINKER_FILE_NAME:tgt>\n" \
" $<TARGET_SONAME_FILE_DIR:tgt>/$<TARGET_SONAME_FILE_NAME:tgt>\n"
#endif

View File

@ -201,7 +201,7 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile()
"<projectDescription>\n" "<projectDescription>\n"
"\t<name>" << "\t<name>" <<
this->GenerateProjectName(mf->GetProjectName(), this->GenerateProjectName(mf->GetProjectName(),
mf->GetDefinition("CMAKE_BUILD_TYPE"), mf->GetSafeDefinition("CMAKE_BUILD_TYPE"),
this->GetPathBasename(this->HomeOutputDirectory)) this->GetPathBasename(this->HomeOutputDirectory))
<< "</name>\n" << "</name>\n"
"\t<comment></comment>\n" "\t<comment></comment>\n"

View File

@ -116,7 +116,12 @@ public:
"expressions and store it into the variable. Globbing expressions " "expressions and store it into the variable. Globbing expressions "
"are similar to regular expressions, but much simpler. If RELATIVE " "are similar to regular expressions, but much simpler. If RELATIVE "
"flag is specified for an expression, the results will be returned " "flag is specified for an expression, the results will be returned "
"as a relative path to the given path.\n" "as a relative path to the given path. "
"(We do not recommend using GLOB to collect a list of source files "
"from your source tree. If no CMakeLists.txt file changes when a "
"source is added or removed then the generated build system cannot "
"know when to ask CMake to regenerate.)"
"\n"
"Examples of globbing expressions include:\n" "Examples of globbing expressions include:\n"
" *.cxx - match all files with extension cxx\n" " *.cxx - match all files with extension cxx\n"
" *.vt? - match all files with extension vta,...,vtz\n" " *.vt? - match all files with extension vta,...,vtz\n"

View File

@ -17,8 +17,8 @@
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmGeneratorExpression::cmGeneratorExpression( cmGeneratorExpression::cmGeneratorExpression(
cmMakefile* mf, const char* config, cmMakefile* mf, const char* config,
cmListFileBacktrace const& backtrace): cmListFileBacktrace const& backtrace, bool quiet):
Makefile(mf), Config(config), Backtrace(backtrace) Makefile(mf), Config(config), Backtrace(backtrace), Quiet(quiet)
{ {
this->TargetInfo.compile("^\\$<TARGET" this->TargetInfo.compile("^\\$<TARGET"
"(|_SONAME|_LINKER)" // File with what purpose? "(|_SONAME|_LINKER)" // File with what purpose?
@ -87,7 +87,7 @@ bool cmGeneratorExpression::Evaluate()
this->Data.insert(this->Data.end(), result.begin(), result.end()); this->Data.insert(this->Data.end(), result.begin(), result.end());
return true; return true;
} }
else else if(!this->Quiet)
{ {
// Failure. Report the error message. // Failure. Report the error message.
cmOStringStream e; cmOStringStream e;
@ -99,6 +99,7 @@ bool cmGeneratorExpression::Evaluate()
this->Backtrace); this->Backtrace);
return false; return false;
} }
return true;
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -140,6 +141,7 @@ bool cmGeneratorExpression::EvaluateTargetInfo(std::string& result)
result = "Target \"" + name + "\" is not an executable or library."; result = "Target \"" + name + "\" is not an executable or library.";
return false; return false;
} }
this->Targets.insert(target);
// Lookup the target file with the given purpose. // Lookup the target file with the given purpose.
std::string purpose = this->TargetInfo.match(1); std::string purpose = this->TargetInfo.match(1);

View File

@ -15,6 +15,7 @@
#include <cmsys/RegularExpression.hxx> #include <cmsys/RegularExpression.hxx>
class cmTarget;
class cmMakefile; class cmMakefile;
class cmListFileBacktrace; class cmListFileBacktrace;
@ -32,18 +33,25 @@ class cmGeneratorExpression
public: public:
/** Construct with an evaluation context and configuration. */ /** Construct with an evaluation context and configuration. */
cmGeneratorExpression(cmMakefile* mf, const char* config, cmGeneratorExpression(cmMakefile* mf, const char* config,
cmListFileBacktrace const& backtrace); cmListFileBacktrace const& backtrace,
bool quiet = false);
/** Evaluate generator expressions in a string. */ /** Evaluate generator expressions in a string. */
const char* Process(std::string const& input); const char* Process(std::string const& input);
const char* Process(const char* input); const char* Process(const char* input);
/** Get set of targets found during evaluations. */
std::set<cmTarget*> const& GetTargets() const
{ return this->Targets; }
private: private:
cmMakefile* Makefile; cmMakefile* Makefile;
const char* Config; const char* Config;
cmListFileBacktrace const& Backtrace; cmListFileBacktrace const& Backtrace;
bool Quiet;
std::vector<char> Data; std::vector<char> Data;
std::stack<size_t> Barriers; std::stack<size_t> Barriers;
cmsys::RegularExpression TargetInfo; cmsys::RegularExpression TargetInfo;
std::set<cmTarget*> Targets;
bool Evaluate(); bool Evaluate();
bool Evaluate(const char* expr, std::string& result); bool Evaluate(const char* expr, std::string& result);
bool EvaluateTargetInfo(std::string& result); bool EvaluateTargetInfo(std::string& result);

View File

@ -1879,7 +1879,7 @@ cmTarget cmGlobalGenerator::CreateGlobalTarget(
std::vector<std::string> no_outputs; std::vector<std::string> no_outputs;
std::vector<std::string> no_depends; std::vector<std::string> no_depends;
// Store the custom command in the target. // Store the custom command in the target.
cmCustomCommand cc(no_outputs, no_depends, *commandLines, 0, cmCustomCommand cc(0, no_outputs, no_depends, *commandLines, 0,
workingDirectory); workingDirectory);
target.GetPostBuildCommands().push_back(cc); target.GetPostBuildCommands().push_back(cc);
target.SetProperty("EchoString", message); target.SetProperty("EchoString", message);

View File

@ -110,7 +110,7 @@ void cmGlobalVisualStudio71Generator
this->GetTargetSets(projectTargets, originalTargets, root, generators); this->GetTargetSets(projectTargets, originalTargets, root, generators);
OrderedTargetDependSet orderedProjectTargets(projectTargets); OrderedTargetDependSet orderedProjectTargets(projectTargets);
this->WriteTargetsToSolution(fout, orderedProjectTargets); this->WriteTargetsToSolution(fout, root, orderedProjectTargets);
bool useFolderProperty = this->UseFolderProperty(); bool useFolderProperty = this->UseFolderProperty();
if (useFolderProperty) if (useFolderProperty)
@ -182,8 +182,8 @@ cmGlobalVisualStudio71Generator::WriteProject(std::ostream& fout,
std::string guid = this->GetGUID(dspname); std::string guid = this->GetGUID(dspname);
fout << project fout << project
<< dspname << "\", \"" << dspname << "\", \""
<< this->ConvertToSolutionPath(dir) << this->ConvertToSolutionPath(dir) << (dir[0]? "\\":"")
<< "\\" << dspname << ext << "\", \"{" << guid << "}\"\n"; << dspname << ext << "\", \"{" << guid << "}\"\n";
fout << "\tProjectSection(ProjectDependencies) = postProject\n"; fout << "\tProjectSection(ProjectDependencies) = postProject\n";
this->WriteProjectDepends(fout, dspname, dir, t); this->WriteProjectDepends(fout, dspname, dir, t);
fout << "\tEndProjectSection\n"; fout << "\tEndProjectSection\n";
@ -196,8 +196,8 @@ cmGlobalVisualStudio71Generator::WriteProject(std::ostream& fout,
const char* uname = ui->second.c_str(); const char* uname = ui->second.c_str();
fout << "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"" fout << "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \""
<< uname << "\", \"" << uname << "\", \""
<< this->ConvertToSolutionPath(dir) << this->ConvertToSolutionPath(dir) << (dir[0]? "\\":"")
<< "\\" << uname << ".vcproj" << "\", \"{" << uname << ".vcproj" << "\", \"{"
<< this->GetGUID(uname) << "}\"\n" << this->GetGUID(uname) << "}\"\n"
<< "\tProjectSection(ProjectDependencies) = postProject\n" << "\tProjectSection(ProjectDependencies) = postProject\n"
<< "\t\t{" << guid << "} = {" << guid << "}\n" << "\t\t{" << guid << "} = {" << guid << "}\n"

View File

@ -270,6 +270,7 @@ void cmGlobalVisualStudio7Generator::WriteTargetConfigurations(
void cmGlobalVisualStudio7Generator::WriteTargetsToSolution( void cmGlobalVisualStudio7Generator::WriteTargetsToSolution(
std::ostream& fout, std::ostream& fout,
cmLocalGenerator* root,
OrderedTargetDependSet const& projectTargets) OrderedTargetDependSet const& projectTargets)
{ {
for(OrderedTargetDependSet::const_iterator tt = for(OrderedTargetDependSet::const_iterator tt =
@ -296,6 +297,12 @@ void cmGlobalVisualStudio7Generator::WriteTargetsToSolution(
{ {
cmMakefile* tmf = target->GetMakefile(); cmMakefile* tmf = target->GetMakefile();
std::string dir = tmf->GetStartOutputDirectory(); std::string dir = tmf->GetStartOutputDirectory();
dir = root->Convert(dir.c_str(),
cmLocalGenerator::START_OUTPUT);
if(dir == ".")
{
dir = ""; // msbuild cannot handle ".\" prefix
}
this->WriteProject(fout, vcprojName, dir.c_str(), this->WriteProject(fout, vcprojName, dir.c_str(),
*target); *target);
written = true; written = true;
@ -385,7 +392,7 @@ void cmGlobalVisualStudio7Generator
this->GetTargetSets(projectTargets, originalTargets, root, generators); this->GetTargetSets(projectTargets, originalTargets, root, generators);
OrderedTargetDependSet orderedProjectTargets(projectTargets); OrderedTargetDependSet orderedProjectTargets(projectTargets);
this->WriteTargetsToSolution(fout, orderedProjectTargets); this->WriteTargetsToSolution(fout, root, orderedProjectTargets);
bool useFolderProperty = this->UseFolderProperty(); bool useFolderProperty = this->UseFolderProperty();
if (useFolderProperty) if (useFolderProperty)
@ -511,8 +518,8 @@ void cmGlobalVisualStudio7Generator::WriteProject(std::ostream& fout,
fout << project fout << project
<< dspname << "\", \"" << dspname << "\", \""
<< this->ConvertToSolutionPath(dir) << this->ConvertToSolutionPath(dir) << (dir[0]? "\\":"")
<< "\\" << dspname << ext << "\", \"{" << dspname << ext << "\", \"{"
<< this->GetGUID(dspname) << "}\"\nEndProject\n"; << this->GetGUID(dspname) << "}\"\nEndProject\n";
UtilityDependsMap::iterator ui = this->UtilityDepends.find(&target); UtilityDependsMap::iterator ui = this->UtilityDepends.find(&target);
@ -521,8 +528,8 @@ void cmGlobalVisualStudio7Generator::WriteProject(std::ostream& fout,
const char* uname = ui->second.c_str(); const char* uname = ui->second.c_str();
fout << "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"" fout << "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \""
<< uname << "\", \"" << uname << "\", \""
<< this->ConvertToSolutionPath(dir) << this->ConvertToSolutionPath(dir) << (dir[0]? "\\":"")
<< "\\" << uname << ".vcproj" << "\", \"{" << uname << ".vcproj" << "\", \"{"
<< this->GetGUID(uname) << "}\"\n" << this->GetGUID(uname) << "}\"\n"
<< "EndProject\n"; << "EndProject\n";
} }

View File

@ -118,6 +118,7 @@ protected:
virtual void WriteTargetsToSolution( virtual void WriteTargetsToSolution(
std::ostream& fout, std::ostream& fout,
cmLocalGenerator* root,
OrderedTargetDependSet const& projectTargets); OrderedTargetDependSet const& projectTargets);
virtual void WriteTargetDepends( virtual void WriteTargetDepends(
std::ostream& fout, std::ostream& fout,

View File

@ -18,6 +18,7 @@
#include "cmGeneratedFileStream.h" #include "cmGeneratedFileStream.h"
#include "cmComputeLinkInformation.h" #include "cmComputeLinkInformation.h"
#include "cmSourceFile.h" #include "cmSourceFile.h"
#include "cmCustomCommandGenerator.h"
#include <cmsys/auto_ptr.hxx> #include <cmsys/auto_ptr.hxx>
@ -1314,8 +1315,7 @@ void cmGlobalXCodeGenerator
cmCustomCommand const& cc = *i; cmCustomCommand const& cc = *i;
if(!cc.GetCommandLines().empty()) if(!cc.GetCommandLines().empty())
{ {
bool escapeOldStyle = cc.GetEscapeOldStyle(); cmCustomCommandGenerator ccg(cc, configName, this->CurrentMakefile);
bool escapeAllowMakeVars = cc.GetEscapeAllowMakeVars();
makefileStream << "\n"; makefileStream << "\n";
const std::vector<std::string>& outputs = cc.GetOutputs(); const std::vector<std::string>& outputs = cc.GetOutputs();
if(!outputs.empty()) if(!outputs.empty())
@ -1348,20 +1348,15 @@ void cmGlobalXCodeGenerator
{ {
std::string echo_cmd = "echo "; std::string echo_cmd = "echo ";
echo_cmd += (this->CurrentLocalGenerator-> echo_cmd += (this->CurrentLocalGenerator->
EscapeForShell(comment, escapeAllowMakeVars)); EscapeForShell(comment, cc.GetEscapeAllowMakeVars()));
makefileStream << "\t" << echo_cmd.c_str() << "\n"; makefileStream << "\t" << echo_cmd.c_str() << "\n";
} }
// Add each command line to the set of commands. // Add each command line to the set of commands.
for(cmCustomCommandLines::const_iterator cl = for(unsigned int c = 0; c < ccg.GetNumberOfCommands(); ++c)
cc.GetCommandLines().begin();
cl != cc.GetCommandLines().end(); ++cl)
{ {
// Build the command line in a single string. // Build the command line in a single string.
const cmCustomCommandLine& commandLine = *cl; std::string cmd2 = ccg.GetCommand(c);
std::string cmd2 = this->CurrentLocalGenerator
->GetRealLocation(commandLine[0].c_str(), configName);
cmSystemTools::ReplaceString(cmd2, "/./", "/"); cmSystemTools::ReplaceString(cmd2, "/./", "/");
cmd2 = this->ConvertToRelativeForMake(cmd2.c_str()); cmd2 = this->ConvertToRelativeForMake(cmd2.c_str());
std::string cmd; std::string cmd;
@ -1372,21 +1367,7 @@ void cmGlobalXCodeGenerator
cmd += " && "; cmd += " && ";
} }
cmd += cmd2; cmd += cmd2;
for(unsigned int j=1; j < commandLine.size(); ++j) ccg.AppendArguments(c, cmd);
{
cmd += " ";
if(escapeOldStyle)
{
cmd += (this->CurrentLocalGenerator
->EscapeForShellOldStyle(commandLine[j].c_str()));
}
else
{
cmd += (this->CurrentLocalGenerator->
EscapeForShell(commandLine[j].c_str(),
escapeAllowMakeVars));
}
}
makefileStream << "\t" << cmd.c_str() << "\n"; makefileStream << "\t" << cmd.c_str() << "\n";
} }
} }
@ -2636,7 +2617,10 @@ void cmGlobalXCodeGenerator
group->AddAttribute("BuildIndependentTargetsInParallel", group->AddAttribute("BuildIndependentTargetsInParallel",
this->CreateString("YES")); this->CreateString("YES"));
this->RootObject->AddAttribute("attributes", group); this->RootObject->AddAttribute("attributes", group);
if (this->XcodeVersion >= 31) if (this->XcodeVersion >= 32)
this->RootObject->AddAttribute("compatibilityVersion",
this->CreateString("Xcode 3.2"));
else if (this->XcodeVersion >= 31)
this->RootObject->AddAttribute("compatibilityVersion", this->RootObject->AddAttribute("compatibilityVersion",
this->CreateString("Xcode 3.1")); this->CreateString("Xcode 3.1"));
else else
@ -3042,7 +3026,9 @@ cmGlobalXCodeGenerator::WriteXCodePBXProj(std::ostream& fout,
cmXCodeObject::Indent(1, fout); cmXCodeObject::Indent(1, fout);
if(this->XcodeVersion >= 21) if(this->XcodeVersion >= 21)
{ {
if (this->XcodeVersion >= 31) if (this->XcodeVersion >= 32)
fout << "objectVersion = 46;\n";
else if (this->XcodeVersion >= 31)
fout << "objectVersion = 45;\n"; fout << "objectVersion = 45;\n";
else if (this->XcodeVersion >= 30) else if (this->XcodeVersion >= 30)
fout << "objectVersion = 44;\n"; fout << "objectVersion = 44;\n";

View File

@ -1912,24 +1912,6 @@ bool cmLocalGenerator::GetRealDependency(const char* inName,
return true; return true;
} }
//----------------------------------------------------------------------------
std::string cmLocalGenerator::GetRealLocation(const char* inName,
const char* config)
{
std::string outName=inName;
// Look for a CMake target with the given name, which is an executable
// and which can be run
cmTarget* target = this->Makefile->FindTargetToUse(inName);
if ((target != 0)
&& (target->GetType() == cmTarget::EXECUTABLE)
&& ((this->Makefile->IsOn("CMAKE_CROSSCOMPILING") == false)
|| (target->IsImported() == true)))
{
outName = target->GetLocation( config );
}
return outName;
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmLocalGenerator::AddSharedFlags(std::string& flags, void cmLocalGenerator::AddSharedFlags(std::string& flags,
const char* lang, const char* lang,

View File

@ -168,11 +168,6 @@ public:
bool GetRealDependency(const char* name, const char* config, bool GetRealDependency(const char* name, const char* config,
std::string& dep); std::string& dep);
/** Translate a command as given in CMake code to the location of the
executable if the command is the name of a CMake executable target.
If that's not the case, just return the original name. */
std::string GetRealLocation(const char* inName, const char* config);
///! for existing files convert to output path and short path if spaces ///! for existing files convert to output path and short path if spaces
std::string ConvertToOutputForExisting(const char* remote, std::string ConvertToOutputForExisting(const char* remote,
RelativeRoot local = START_OUTPUT); RelativeRoot local = START_OUTPUT);

View File

@ -19,6 +19,7 @@
#include "cmake.h" #include "cmake.h"
#include "cmVersion.h" #include "cmVersion.h"
#include "cmFileTimeComparison.h" #include "cmFileTimeComparison.h"
#include "cmCustomCommandGenerator.h"
// Include dependency scanners for supported languages. Only the // Include dependency scanners for supported languages. Only the
// C/C++ scanner is needed for bootstrapping CMake. // C/C++ scanner is needed for bootstrapping CMake.
@ -961,18 +962,15 @@ cmLocalUnixMakefileGenerator3
{ {
*content << dir; *content << dir;
} }
bool escapeOldStyle = cc.GetEscapeOldStyle(); cmCustomCommandGenerator ccg(cc, this->ConfigurationName.c_str(),
bool escapeAllowMakeVars = cc.GetEscapeAllowMakeVars(); this->Makefile);
// Add each command line to the set of commands. // Add each command line to the set of commands.
std::vector<std::string> commands1; std::vector<std::string> commands1;
for(cmCustomCommandLines::const_iterator cl = cc.GetCommandLines().begin(); for(unsigned int c = 0; c < ccg.GetNumberOfCommands(); ++c)
cl != cc.GetCommandLines().end(); ++cl)
{ {
// Build the command line in a single string. // Build the command line in a single string.
const cmCustomCommandLine& commandLine = *cl; std::string cmd = ccg.GetCommand(c);
std::string cmd = GetRealLocation(commandLine[0].c_str(),
this->ConfigurationName.c_str());
if (cmd.size()) if (cmd.size())
{ {
// Use "call " before any invocations of .bat or .cmd files // Use "call " before any invocations of .bat or .cmd files
@ -1025,19 +1023,8 @@ cmLocalUnixMakefileGenerator3
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->Convert(cmd.c_str(),NONE,SHELL);
for(unsigned int j=1; j < commandLine.size(); ++j)
{ ccg.AppendArguments(c, cmd);
cmd += " ";
if(escapeOldStyle)
{
cmd += this->EscapeForShellOldStyle(commandLine[j].c_str());
}
else
{
cmd += this->EscapeForShell(commandLine[j].c_str(),
escapeAllowMakeVars);
}
}
if(content) if(content)
{ {
// Rule content does not include the launcher. // Rule content does not include the launcher.

View File

@ -117,3 +117,9 @@ void cmLocalVisualStudio10Generator
"Stored GUID", "Stored GUID",
cmCacheManager::INTERNAL); cmCacheManager::INTERNAL);
} }
//----------------------------------------------------------------------------
std::string cmLocalVisualStudio10Generator::CheckForErrorLine()
{
return "if errorlevel 1 goto :VCEnd";
}

View File

@ -36,6 +36,10 @@ public:
virtual void Generate(); virtual void Generate();
virtual void ReadAndStoreExternalGUID(const char* name, virtual void ReadAndStoreExternalGUID(const char* name,
const char* path); const char* path);
protected:
virtual std::string CheckForErrorLine();
private: private:
}; };
#endif #endif

View File

@ -65,13 +65,7 @@ public:
{ {
this->Code += "\\\n\t"; this->Code += "\\\n\t";
} }
this->Code += this->Code += this->LG->ConstructScript(cc, this->Config, "\\\n\t");
this->LG->ConstructScript(cc.GetCommandLines(),
cc.GetWorkingDirectory(),
this->Config,
cc.GetEscapeOldStyle(),
cc.GetEscapeAllowMakeVars(),
"\\\n\t");
} }
private: private:
cmLocalVisualStudio6Generator* LG; cmLocalVisualStudio6Generator* LG;
@ -659,12 +653,7 @@ cmLocalVisualStudio6Generator
{ {
std::string config = this->GetConfigName(*i); std::string config = this->GetConfigName(*i);
std::string script = std::string script =
this->ConstructScript(command.GetCommandLines(), this->ConstructScript(command, config.c_str(), "\\\n\t");
command.GetWorkingDirectory(),
config.c_str(),
command.GetEscapeOldStyle(),
command.GetEscapeAllowMakeVars(),
"\\\n\t");
if (i == this->Configurations.begin()) if (i == this->Configurations.begin())
{ {
@ -849,7 +838,7 @@ cmLocalVisualStudio6Generator::MaybeCreateOutputDir(cmTarget& target,
std::vector<std::string> no_depends; std::vector<std::string> no_depends;
cmCustomCommandLines commands; cmCustomCommandLines commands;
commands.push_back(command); commands.push_back(command);
pcc.reset(new cmCustomCommand(no_output, no_depends, commands, 0, 0)); pcc.reset(new cmCustomCommand(0, no_output, no_depends, commands, 0, 0));
pcc->SetEscapeOldStyle(false); pcc->SetEscapeOldStyle(false);
pcc->SetEscapeAllowMakeVars(true); pcc->SetEscapeAllowMakeVars(true);
return pcc; return pcc;

View File

@ -546,12 +546,7 @@ public:
{ {
this->Stream << this->LG->EscapeForXML("\n"); this->Stream << this->LG->EscapeForXML("\n");
} }
std::string script = std::string script = this->LG->ConstructScript(cc, this->Config);
this->LG->ConstructScript(cc.GetCommandLines(),
cc.GetWorkingDirectory(),
this->Config,
cc.GetEscapeOldStyle(),
cc.GetEscapeAllowMakeVars());
this->Stream << this->LG->EscapeForXML(script.c_str()); this->Stream << this->LG->EscapeForXML(script.c_str());
} }
private: private:
@ -1591,12 +1586,7 @@ WriteCustomRule(std::ostream& fout,
<< this->EscapeForXML(fc.CompileFlags.c_str()) << "\"/>\n"; << this->EscapeForXML(fc.CompileFlags.c_str()) << "\"/>\n";
} }
std::string script = std::string script = this->ConstructScript(command, i->c_str());
this->ConstructScript(command.GetCommandLines(),
command.GetWorkingDirectory(),
i->c_str(),
command.GetEscapeOldStyle(),
command.GetEscapeAllowMakeVars());
fout << "\t\t\t\t\t<Tool\n" fout << "\t\t\t\t\t<Tool\n"
<< "\t\t\t\t\tName=\"" << customTool << "\"\n" << "\t\t\t\t\tName=\"" << customTool << "\"\n"
<< "\t\t\t\t\tDescription=\"" << "\t\t\t\t\tDescription=\""

View File

@ -14,6 +14,7 @@
#include "cmMakefile.h" #include "cmMakefile.h"
#include "cmSourceFile.h" #include "cmSourceFile.h"
#include "cmSystemTools.h" #include "cmSystemTools.h"
#include "cmCustomCommandGenerator.h"
#include "windows.h" #include "windows.h"
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -52,7 +53,7 @@ cmLocalVisualStudioGenerator::MaybeCreateImplibDir(cmTarget& target,
std::vector<std::string> no_depends; std::vector<std::string> no_depends;
cmCustomCommandLines commands; cmCustomCommandLines commands;
commands.push_back(command); commands.push_back(command);
pcc.reset(new cmCustomCommand(no_output, no_depends, commands, 0, 0)); pcc.reset(new cmCustomCommand(0, no_output, no_depends, commands, 0, 0));
pcc->SetEscapeOldStyle(false); pcc->SetEscapeOldStyle(false);
pcc->SetEscapeAllowMakeVars(true); pcc->SetEscapeAllowMakeVars(true);
return pcc; return pcc;
@ -148,16 +149,30 @@ void cmLocalVisualStudioGenerator::ComputeObjectNameRequirements
this->InsertNeedObjectNames(sourceGroups, objectNameCounts); this->InsertNeedObjectNames(sourceGroups, objectNameCounts);
} }
//----------------------------------------------------------------------------
std::string cmLocalVisualStudioGenerator::CheckForErrorLine()
{
return "if errorlevel 1 goto :VCReportError";
}
//----------------------------------------------------------------------------
std::string cmLocalVisualStudioGenerator::GetCheckForErrorLine()
{
return this->CheckForErrorLine();
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
std::string std::string
cmLocalVisualStudioGenerator cmLocalVisualStudioGenerator
::ConstructScript(const cmCustomCommandLines& commandLines, ::ConstructScript(cmCustomCommand const& cc,
const char* workingDirectory,
const char* configName, const char* configName,
bool escapeOldStyle,
bool escapeAllowMakeVars,
const char* newline_text) const char* newline_text)
{ {
const cmCustomCommandLines& commandLines = cc.GetCommandLines();
const char* workingDirectory = cc.GetWorkingDirectory();
cmCustomCommandGenerator ccg(cc, configName, this->Makefile);
RelativeRoot relativeRoot = workingDirectory? NONE : START_OUTPUT;
// Avoid leading or trailing newlines. // Avoid leading or trailing newlines.
const char* newline = ""; const char* newline = "";
@ -196,40 +211,16 @@ cmLocalVisualStudioGenerator
} }
} }
// Write each command on a single line. // Write each command on a single line.
for(cmCustomCommandLines::const_iterator cl = commandLines.begin(); for(unsigned int c = 0; c < ccg.GetNumberOfCommands(); ++c)
cl != commandLines.end(); ++cl)
{ {
// Start a new line. // Start a new line.
script += newline; script += newline;
newline = newline_text; newline = newline_text;
// Start with the command name. // Add this command line.
const cmCustomCommandLine& commandLine = *cl; std::string cmd = ccg.GetCommand(c);
std::string commandName = this->GetRealLocation(commandLine[0].c_str(), script += this->Convert(cmd.c_str(), relativeRoot, SHELL);
configName); ccg.AppendArguments(c, script);
if(!workingDirectory)
{
script += this->Convert(commandName.c_str(),START_OUTPUT,SHELL);
}
else
{
script += this->Convert(commandName.c_str(),NONE,SHELL);
}
// Add the arguments.
for(unsigned int j=1;j < commandLine.size(); ++j)
{
script += " ";
if(escapeOldStyle)
{
script += this->EscapeForShellOldStyle(commandLine[j].c_str());
}
else
{
script += this->EscapeForShell(commandLine[j].c_str(),
escapeAllowMakeVars);
}
}
// After each custom command, check for an error result. // After each custom command, check for an error result.
// If there was an error, jump to the VCReportError label, // If there was an error, jump to the VCReportError label,
@ -237,7 +228,7 @@ cmLocalVisualStudioGenerator
// sequence. // sequence.
// //
script += newline_text; script += newline_text;
script += "if errorlevel 1 goto VCReportError"; script += this->GetCheckForErrorLine();
} }
return script; return script;

View File

@ -18,6 +18,7 @@
class cmSourceFile; class cmSourceFile;
class cmSourceGroup; class cmSourceGroup;
class cmCustomCommand;
/** \class cmLocalVisualStudioGenerator /** \class cmLocalVisualStudioGenerator
* \brief Base class for Visual Studio generators. * \brief Base class for Visual Studio generators.
@ -30,15 +31,19 @@ class cmLocalVisualStudioGenerator : public cmLocalGenerator
public: public:
cmLocalVisualStudioGenerator(); cmLocalVisualStudioGenerator();
virtual ~cmLocalVisualStudioGenerator(); virtual ~cmLocalVisualStudioGenerator();
/** Construct a script from the given list of command lines. */ /** Construct a script from the given list of command lines. */
std::string ConstructScript(const cmCustomCommandLines& commandLines, std::string ConstructScript(cmCustomCommand const& cc,
const char* workingDirectory,
const char* configName, const char* configName,
bool escapeOldStyle,
bool escapeAllowMakeVars,
const char* newline = "\n"); const char* newline = "\n");
/** Line of batch file text that skips to the end after
* a failed step in a sequence of custom commands.
*/
std::string GetCheckForErrorLine();
protected: protected:
virtual std::string CheckForErrorLine();
/** Construct a custom command to make exe import lib dir. */ /** Construct a custom command to make exe import lib dir. */
cmsys::auto_ptr<cmCustomCommand> cmsys::auto_ptr<cmCustomCommand>

View File

@ -827,7 +827,8 @@ cmMakefile::AddCustomCommandToTarget(const char* target,
{ {
// Add the command to the appropriate build step for the target. // Add the command to the appropriate build step for the target.
std::vector<std::string> no_output; std::vector<std::string> no_output;
cmCustomCommand cc(no_output, depends, commandLines, comment, workingDir); cmCustomCommand cc(this, no_output, depends,
commandLines, comment, workingDir);
cc.SetEscapeOldStyle(escapeOldStyle); cc.SetEscapeOldStyle(escapeOldStyle);
cc.SetEscapeAllowMakeVars(true); cc.SetEscapeAllowMakeVars(true);
switch(type) switch(type)
@ -947,7 +948,7 @@ cmMakefile::AddCustomCommandToOutput(const std::vector<std::string>& outputs,
if(file) if(file)
{ {
cmCustomCommand* cc = cmCustomCommand* cc =
new cmCustomCommand(outputs, depends2, commandLines, new cmCustomCommand(this, outputs, depends2, commandLines,
comment, workingDir); comment, workingDir);
cc->SetEscapeOldStyle(escapeOldStyle); cc->SetEscapeOldStyle(escapeOldStyle);
cc->SetEscapeAllowMakeVars(true); cc->SetEscapeAllowMakeVars(true);
@ -2340,17 +2341,19 @@ void cmMakefile::AddDefaultDefinitions()
working, these variables are still also set here in this place, but they working, these variables are still also set here in this place, but they
will be reset in CMakeSystemSpecificInformation.cmake before the platform will be reset in CMakeSystemSpecificInformation.cmake before the platform
files are executed. */ files are executed. */
#if defined(_WIN32) || defined(__CYGWIN__) #if defined(_WIN32)
this->AddDefinition("WIN32", "1"); this->AddDefinition("WIN32", "1");
this->AddDefinition("CMAKE_HOST_WIN32", "1"); this->AddDefinition("CMAKE_HOST_WIN32", "1");
#else #else
this->AddDefinition("UNIX", "1"); this->AddDefinition("UNIX", "1");
this->AddDefinition("CMAKE_HOST_UNIX", "1"); this->AddDefinition("CMAKE_HOST_UNIX", "1");
#endif #endif
// Cygwin is more like unix so enable the unix commands
#if defined(__CYGWIN__) #if defined(__CYGWIN__)
this->AddDefinition("UNIX", "1"); if(cmSystemTools::IsOn(cmSystemTools::GetEnv("CMAKE_LEGACY_CYGWIN_WIN32")))
this->AddDefinition("CMAKE_HOST_UNIX", "1"); {
this->AddDefinition("WIN32", "1");
this->AddDefinition("CMAKE_HOST_WIN32", "1");
}
#endif #endif
#if defined(__APPLE__) #if defined(__APPLE__)
this->AddDefinition("APPLE", "1"); this->AddDefinition("APPLE", "1");

View File

@ -472,7 +472,9 @@ void cmSourceFile::DefineProperties(cmake *cm)
"What programming language is the file.", "What programming language is the file.",
"A property that can be set to indicate what programming language " "A property that can be set to indicate what programming language "
"the source file is. If it is not set the language is determined " "the source file is. If it is not set the language is determined "
"based on the file extension. Typical values are CXX C etc."); "based on the file extension. Typical values are CXX C etc. Setting "
"this property for a file means this file will be compiled. "
"Do not set this for header or files that should not be compiled.");
cm->DefineProperty cm->DefineProperty
("LOCATION", cmProperty::SOURCE_FILE, ("LOCATION", cmProperty::SOURCE_FILE,

View File

@ -17,6 +17,7 @@
#include "cmGlobalGenerator.h" #include "cmGlobalGenerator.h"
#include "cmComputeLinkInformation.h" #include "cmComputeLinkInformation.h"
#include "cmListFileCache.h" #include "cmListFileCache.h"
#include "cmGeneratorExpression.h"
#include <cmsys/RegularExpression.hxx> #include <cmsys/RegularExpression.hxx>
#include <map> #include <map>
#include <set> #include <set>
@ -1402,6 +1403,7 @@ cmTargetTraceDependencies
{ {
// Transform command names that reference targets built in this // Transform command names that reference targets built in this
// project to corresponding target-level dependencies. // project to corresponding target-level dependencies.
cmGeneratorExpression ge(this->Makefile, 0, cc.GetBacktrace(), true);
for(cmCustomCommandLines::const_iterator cit = cc.GetCommandLines().begin(); for(cmCustomCommandLines::const_iterator cit = cc.GetCommandLines().begin();
cit != cc.GetCommandLines().end(); ++cit) cit != cc.GetCommandLines().end(); ++cit)
{ {
@ -1418,6 +1420,21 @@ cmTargetTraceDependencies
this->Target->AddUtility(command.c_str()); this->Target->AddUtility(command.c_str());
} }
} }
// Check for target references in generator expressions.
for(cmCustomCommandLine::const_iterator cli = cit->begin();
cli != cit->end(); ++cli)
{
ge.Process(*cli);
}
}
// Add target-level dependencies referenced by generator expressions.
std::set<cmTarget*> targets = ge.GetTargets();
for(std::set<cmTarget*>::iterator ti = targets.begin();
ti != targets.end(); ++ti)
{
this->Target->AddUtility((*ti)->GetName());
} }
// Queue the custom command dependencies. // Queue the custom command dependencies.

View File

@ -196,4 +196,10 @@ void cmTest::DefineProperties(cmake *cm)
"If set to true, this will invert the pass/fail flag of the test.", "If set to true, this will invert the pass/fail flag of the test.",
"This property can be used for tests that are expected to fail and " "This property can be used for tests that are expected to fail and "
"return a non zero return code."); "return a non zero return code.");
cm->DefineProperty
("WORKING_DIRECTORY", cmProperty::TEST,
"The directory from which the test executable will be called.",
"If this is not set it is called from the directory the test executable "
"is located in.");
} }

View File

@ -376,13 +376,7 @@ cmVisualStudio10TargetGenerator::WriteCustomRule(cmSourceFile* source,
i != configs->end(); ++i) i != configs->end(); ++i)
{ {
std::string script = std::string script =
cmVS10EscapeXML( cmVS10EscapeXML(lg->ConstructScript(command, i->c_str()));
lg->ConstructScript(command.GetCommandLines(),
command.GetWorkingDirectory(),
i->c_str(),
command.GetEscapeOldStyle(),
command.GetEscapeAllowMakeVars())
);
this->WritePlatformConfigTag("Message",i->c_str(), 3); this->WritePlatformConfigTag("Message",i->c_str(), 3);
(*this->BuildFileStream ) << cmVS10EscapeXML(comment) << "</Message>\n"; (*this->BuildFileStream ) << cmVS10EscapeXML(comment) << "</Message>\n";
this->WritePlatformConfigTag("Command", i->c_str(), 3); this->WritePlatformConfigTag("Command", i->c_str(), 3);
@ -700,7 +694,7 @@ void cmVisualStudio10TargetGenerator::WriteCLSources()
} }
(*this->BuildFileStream ) << sourceFile << "\""; (*this->BuildFileStream ) << sourceFile << "\"";
// ouput any flags specific to this source file // ouput any flags specific to this source file
if(cl && this->OutputSourceSpecificFlags(*source)) if(!header && cl && this->OutputSourceSpecificFlags(*source))
{ {
// if the source file has specific flags the tag // if the source file has specific flags the tag
// is ended on a new line // is ended on a new line
@ -1472,13 +1466,7 @@ void cmVisualStudio10TargetGenerator::WriteEvent(
script += pre; script += pre;
pre = "\n"; pre = "\n";
script += script +=
cmVS10EscapeXML( cmVS10EscapeXML(lg->ConstructScript(command, configName.c_str()));
lg->ConstructScript(command.GetCommandLines(),
command.GetWorkingDirectory(),
configName.c_str(),
command.GetEscapeOldStyle(),
command.GetEscapeAllowMakeVars())
);
} }
comment = cmVS10EscapeComment(comment); comment = cmVS10EscapeComment(comment);
this->WriteString("<Message>",3); this->WriteString("<Message>",3);

View File

@ -85,17 +85,15 @@ void cmVisualStudioGeneratorOptions::SetVerboseMakefile(bool verbose)
// was not given explicitly in the flags we want to add an attribute // was not given explicitly in the flags we want to add an attribute
// to the generated project to disable logo suppression. Otherwise // to the generated project to disable logo suppression. Otherwise
// the GUI default is to enable suppression. // the GUI default is to enable suppression.
//
// Avoid this on Visual Studio 10 (and later!) because it results in:
// "cl ... warning D9035: option 'nologo-' has been deprecated"
//
if(verbose && if(verbose &&
this->Version != 10 &&
this->FlagMap.find("SuppressStartupBanner") == this->FlagMap.end()) this->FlagMap.find("SuppressStartupBanner") == this->FlagMap.end())
{ {
if(this->Version == 10) this->FlagMap["SuppressStartupBanner"] = "FALSE";
{
this->FlagMap["SuppressStartupBanner"] = "false";
}
else
{
this->FlagMap["SuppressStartupBanner"] = "FALSE";
}
} }
} }

View File

@ -401,8 +401,9 @@ bool RegistryHelper::Open(const char *toplevel, const char *subkey,
} }
else else
{ {
char lpClass[] = "";
res = ( RegCreateKeyEx(scope, str.str().c_str(), res = ( RegCreateKeyEx(scope, str.str().c_str(),
0, "", REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE, 0, lpClass, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE,
NULL, &this->HKey, &dwDummy) == ERROR_SUCCESS ); NULL, &this->HKey, &dwDummy) == ERROR_SUCCESS );
} }
if ( res != 0 ) if ( res != 0 )

View File

@ -734,10 +734,11 @@ bool SystemTools::WriteRegistryValue(const char *key, const char *value,
HKEY hKey; HKEY hKey;
DWORD dwDummy; DWORD dwDummy;
char lpClass[] = "";
if(RegCreateKeyEx(primaryKey, if(RegCreateKeyEx(primaryKey,
second.c_str(), second.c_str(),
0, 0,
"", lpClass,
REG_OPTION_NON_VOLATILE, REG_OPTION_NON_VOLATILE,
SystemToolsMakeRegistryMode(KEY_WRITE, view), SystemToolsMakeRegistryMode(KEY_WRITE, view),
NULL, NULL,

View File

@ -12,10 +12,10 @@
#============================================================================= #=============================================================================
# KWSys version date year component. Format is CCYY. # KWSys version date year component. Format is CCYY.
SET(KWSYS_DATE_STAMP_YEAR 2010) SET(KWSYS_DATE_STAMP_YEAR 2011)
# KWSys version date month component. Format is MM. # KWSys version date month component. Format is MM.
SET(KWSYS_DATE_STAMP_MONTH 12) SET(KWSYS_DATE_STAMP_MONTH 01)
# KWSys version date day component. Format is DD. # KWSys version date day component. Format is DD.
SET(KWSYS_DATE_STAMP_DAY 21) SET(KWSYS_DATE_STAMP_DAY 03)

View File

@ -45,18 +45,18 @@ IF(BUILD_TESTING)
SET(TEST_BUILD_DIRS) SET(TEST_BUILD_DIRS)
# Should the long tests be run? # Should the long tests be run?
OPTION(CMAKE_RUN_LONG_TESTS OPTION(CMAKE_RUN_LONG_TESTS
"Should the long tests be run (such as Bootstrap)." ON) "Should the long tests be run (such as Bootstrap)." ON)
MARK_AS_ADVANCED(CMAKE_RUN_LONG_TESTS) MARK_AS_ADVANCED(CMAKE_RUN_LONG_TESTS)
IF (CMAKE_RUN_LONG_TESTS) IF (CMAKE_RUN_LONG_TESTS)
OPTION(CTEST_TEST_CTEST OPTION(CTEST_TEST_CTEST
"Should the tests that run a full sub ctest process be run?" "Should the tests that run a full sub ctest process be run?"
OFF) OFF)
MARK_AS_ADVANCED(CTEST_TEST_CTEST) MARK_AS_ADVANCED(CTEST_TEST_CTEST)
OPTION(TEST_KDE4_STABLE_BRANCH OPTION(TEST_KDE4_STABLE_BRANCH
"Should the KDE4 stable branch test be run?" "Should the KDE4 stable branch test be run?"
OFF) OFF)
MARK_AS_ADVANCED(TEST_KDE4_STABLE_BRANCH) MARK_AS_ADVANCED(TEST_KDE4_STABLE_BRANCH)
ENDIF (CMAKE_RUN_LONG_TESTS) ENDIF (CMAKE_RUN_LONG_TESTS)
@ -217,7 +217,7 @@ IF(BUILD_TESTING)
# If we are running right now with a UnixMakefiles based generator, # If we are running right now with a UnixMakefiles based generator,
# build the "Simple" test with the ExtraGenerators, if available # build the "Simple" test with the ExtraGenerators, if available
# This doesn't test whether the generated project files work (unfortunately), # This doesn't test whether the generated project files work (unfortunately),
# mainly it tests that cmake doesn't crash when generating these project files. # mainly it tests that cmake doesn't crash when generating these project files.
IF(${CMAKE_TEST_GENERATOR} MATCHES "Unix Makefiles" OR ${CMAKE_TEST_GENERATOR} MATCHES "KDevelop") IF(${CMAKE_TEST_GENERATOR} MATCHES "Unix Makefiles" OR ${CMAKE_TEST_GENERATOR} MATCHES "KDevelop")
# check which generators we have # check which generators we have
@ -288,10 +288,10 @@ IF(BUILD_TESTING)
ADD_TEST(SubProject-Stage2 ${CMAKE_CTEST_COMMAND} ADD_TEST(SubProject-Stage2 ${CMAKE_CTEST_COMMAND}
--build-and-test --build-and-test
"${CMake_SOURCE_DIR}/Tests/SubProject/foo" "${CMake_SOURCE_DIR}/Tests/SubProject/foo"
"${CMake_BINARY_DIR}/Tests/SubProject/foo" "${CMake_BINARY_DIR}/Tests/SubProject/foo"
--build-generator ${CMAKE_TEST_GENERATOR} --build-generator ${CMAKE_TEST_GENERATOR}
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--build-nocmake --build-nocmake
--build-project foo --build-project foo
--build-target foo --build-target foo
--test-command foo --test-command foo
@ -349,7 +349,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
--build-generator ${CMAKE_TEST_GENERATOR} --build-generator ${CMAKE_TEST_GENERATOR}
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--build-project TargetName --build-project TargetName
--test-command ${CMAKE_CMAKE_COMMAND} -E compare_files --test-command ${CMAKE_CMAKE_COMMAND} -E compare_files
${CMake_SOURCE_DIR}/Tests/TargetName/scripts/hello_world ${CMake_SOURCE_DIR}/Tests/TargetName/scripts/hello_world
${CMake_BINARY_DIR}/Tests/TargetName/scripts/hello_world) ${CMake_BINARY_DIR}/Tests/TargetName/scripts/hello_world)
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/TargetName") LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/TargetName")
@ -361,7 +361,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
--build-two-config --build-two-config
--build-generator ${CMAKE_TEST_GENERATOR} --build-generator ${CMAKE_TEST_GENERATOR}
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--build-project LibName --build-project LibName
--build-exe-dir "${CMake_BINARY_DIR}/Tests/LibName/lib" --build-exe-dir "${CMake_BINARY_DIR}/Tests/LibName/lib"
--test-command foobar --test-command foobar
) )
@ -374,7 +374,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
--build-two-config --build-two-config
--build-generator ${CMAKE_TEST_GENERATOR} --build-generator ${CMAKE_TEST_GENERATOR}
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--build-project CustComDepend --build-project CustComDepend
--build-exe-dir "${CMake_BINARY_DIR}/Tests/CustComDepend/bin" --build-exe-dir "${CMake_BINARY_DIR}/Tests/CustComDepend/bin"
--test-command foo bar.c --test-command foo bar.c
) )
@ -453,7 +453,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
) )
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BuildDepends") LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BuildDepends")
SET(SimpleInstallInstallDir SET(SimpleInstallInstallDir
"${CMake_BINARY_DIR}/Tests/SimpleInstall/InstallDirectory") "${CMake_BINARY_DIR}/Tests/SimpleInstall/InstallDirectory")
ADD_TEST(SimpleInstall ${CMAKE_CTEST_COMMAND} ADD_TEST(SimpleInstall ${CMAKE_CTEST_COMMAND}
@ -488,6 +488,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
# #
set(CTEST_RUN_CPackComponents ${CTEST_TEST_CPACK}) set(CTEST_RUN_CPackComponents ${CTEST_TEST_CPACK})
set(CTEST_package_X11_TEST ${CTEST_TEST_CPACK}) set(CTEST_package_X11_TEST ${CTEST_TEST_CPACK})
set(CTEST_RUN_CPackComponentsForAll ${CTEST_TEST_CPACK})
find_program(NSIS_MAKENSIS_EXECUTABLE NAMES makensis find_program(NSIS_MAKENSIS_EXECUTABLE NAMES makensis
PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS] PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS]
@ -536,6 +537,34 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CPackComponents") LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CPackComponents")
ENDIF(CTEST_RUN_CPackComponents) ENDIF(CTEST_RUN_CPackComponents)
IF(CTEST_RUN_CPackComponentsForAll)
set(CPackComponentsForAll_EXTRA_OPTIONS)
set(CPackRun_CPackGen "-DCPackGen=ZIP")
set(CPackRun_CPackCommand "-DCPackCommand=${CMAKE_CPACK_COMMAND}")
set(CPackRun_CPackComponentWay "-DCPackComponentWay=default")
ADD_TEST(CPackComponentsForAll-ZIP-default ${CMAKE_CTEST_COMMAND}
--build-and-test
"${CMake_SOURCE_DIR}/Tests/CPackComponentsForAll"
"${CMake_BINARY_DIR}/Tests/CPackComponentsForAll/buildZIP-NoComponent"
--build-generator ${CMAKE_TEST_GENERATOR}
--build-project CPackComponentsForAll
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--build-options
-DCPACK_BINARY_ZIP:BOOL=ON
${CPackComponentsForAll_EXTRA_OPTIONS}
--graphviz=CPackComponentsForAll.dot
--test-command ${CMAKE_CMAKE_COMMAND}
"-DCPackComponentsForAll_BINARY_DIR:PATH=${CMake_BINARY_DIR}/Tests/CPackComponentsForAll/buildZIP-NoComponent"
"${CPackRun_CPackCommand}"
"${CPackRun_CPackGen}"
"${CPackRun_CPackComponentWay}"
-P "${CMake_SOURCE_DIR}/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake")
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CPackComponentsForAll")
ENDIF(CTEST_RUN_CPackComponentsForAll)
# By default, turn this test off (because it takes a long time...) # By default, turn this test off (because it takes a long time...)
# #
if(NOT DEFINED CTEST_RUN_CPackTestAllGenerators) if(NOT DEFINED CTEST_RUN_CPackTestAllGenerators)
@ -781,6 +810,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--test-command ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE} --test-command ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE}
) )
SET_TESTS_PROPERTIES(testing PROPERTIES PASS_REGULAR_EXPRESSION "Passed")
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Testing") LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Testing")
ADD_TEST(wrapping ${CMAKE_CTEST_COMMAND} ADD_TEST(wrapping ${CMAKE_CTEST_COMMAND}
@ -856,7 +886,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
# RPATH isn't supported under Syllable, so the tests don't # RPATH isn't supported under Syllable, so the tests don't
# find their libraries. In order to fix that LIBRARY_OUTPUT_DIR # find their libraries. In order to fix that LIBRARY_OUTPUT_DIR
# in the tests would have to be adjusted to ${EXECUTABLE_OUTPUT_DIR}/lib . # in the tests would have to be adjusted to ${EXECUTABLE_OUTPUT_DIR}/lib .
# For now we just require on Syllable that the user adjusts the DLL_PATH # For now we just require on Syllable that the user adjusts the DLL_PATH
# environment variable, so except the two tests below all other tests will succeed. # environment variable, so except the two tests below all other tests will succeed.
SET(_DLL_PATH "$ENV{DLL_PATH}") SET(_DLL_PATH "$ENV{DLL_PATH}")
@ -965,14 +995,14 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
# only add this test on platforms that support it # only add this test on platforms that support it
# some old versions of make simply cannot handle spaces in paths # some old versions of make simply cannot handle spaces in paths
IF (MAKE_IS_GNU OR IF (MAKE_IS_GNU OR
"${CMAKE_TEST_MAKEPROGRAM}" MATCHES "nmake|gmake|wmake" OR "${CMAKE_TEST_MAKEPROGRAM}" MATCHES "nmake|gmake|wmake" OR
"${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio|XCode|Borland") "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio|XCode|Borland")
ADD_TEST(SubDirSpaces ${CMAKE_CTEST_COMMAND} ADD_TEST(SubDirSpaces ${CMAKE_CTEST_COMMAND}
--build-and-test --build-and-test
"${CMake_SOURCE_DIR}/Tests/SubDirSpaces" "${CMake_SOURCE_DIR}/Tests/SubDirSpaces"
"${CMake_BINARY_DIR}/Tests/SubDirSpaces" "${CMake_BINARY_DIR}/Tests/SubDirSpaces"
--build-exe-dir --build-exe-dir
"${CMake_BINARY_DIR}/Tests/SubDirSpaces/Executable Sources" "${CMake_BINARY_DIR}/Tests/SubDirSpaces/Executable Sources"
--build-generator ${CMAKE_TEST_GENERATOR} --build-generator ${CMAKE_TEST_GENERATOR}
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
@ -1078,7 +1108,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
"${CMake_BINARY_DIR}/Tests/BundleGeneratorTest" "${CMake_BINARY_DIR}/Tests/BundleGeneratorTest"
--build-two-config --build-two-config
--build-generator ${CMAKE_TEST_GENERATOR} --build-generator ${CMAKE_TEST_GENERATOR}
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--build-project BundleGeneratorTest --build-project BundleGeneratorTest
--build-target package --build-target package
--build-options "-DCMAKE_INSTALL_PREFIX:PATH=${CMake_BINARY_DIR}/Tests/BundleGeneratorTest/InstallDirectory" --build-options "-DCMAKE_INSTALL_PREFIX:PATH=${CMake_BINARY_DIR}/Tests/BundleGeneratorTest/InstallDirectory"
@ -1086,6 +1116,19 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BundleGeneratorTest") LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BundleGeneratorTest")
ENDIF(APPLE AND CTEST_TEST_CPACK) ENDIF(APPLE AND CTEST_TEST_CPACK)
ADD_TEST(TestsWorkingDirectory ${CMAKE_CTEST_COMMAND}
--build-and-test
"${CMake_SOURCE_DIR}/Tests/TestsWorkingDirectory"
"${CMake_BINARY_DIR}/Tests/TestsWorkingDirectory"
--build-generator ${CMAKE_TEST_GENERATOR}
--build-project TestsWorkingDirectoryProj
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--build-exe-dir "${CMake_BINARY_DIR}/Tests/TestsWorkingDirectory"
--force-new-ctest-process
--test-command ${CMAKE_CTEST_COMMAND} -V
)
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/TestsWorkingDirectory")
# Make sure CTest can handle a test with no newline in output. # Make sure CTest can handle a test with no newline in output.
ADD_TEST(CTest.NoNewline ADD_TEST(CTest.NoNewline
${CMAKE_CMAKE_COMMAND} -E echo_append "This line has no newline!") ${CMAKE_CMAKE_COMMAND} -E echo_append "This line has no newline!")
@ -1300,7 +1343,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
SET_TESTS_PROPERTIES(CTestTestCrash PROPERTIES SET_TESTS_PROPERTIES(CTestTestCrash PROPERTIES
PASS_REGULAR_EXPRESSION "SegFault") PASS_REGULAR_EXPRESSION "SegFault")
ENDIF(CMAKE_TEST_GENERATOR MATCHES "Watcom WMake") ENDIF(CMAKE_TEST_GENERATOR MATCHES "Watcom WMake")
CONFIGURE_FILE( CONFIGURE_FILE(
"${CMake_SOURCE_DIR}/Tests/CTestTestBadExe/test.cmake.in" "${CMake_SOURCE_DIR}/Tests/CTestTestBadExe/test.cmake.in"
"${CMake_BINARY_DIR}/Tests/CTestTestBadExe/test.cmake" "${CMake_BINARY_DIR}/Tests/CTestTestBadExe/test.cmake"
@ -1378,7 +1421,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
#make sure all 3 subdirs were added #make sure all 3 subdirs were added
SET_TESTS_PROPERTIES(CTestTestSubdir PROPERTIES SET_TESTS_PROPERTIES(CTestTestSubdir PROPERTIES
PASS_REGULAR_EXPRESSION "0 tests failed out of 3") PASS_REGULAR_EXPRESSION "0 tests failed out of 3")
CONFIGURE_FILE( CONFIGURE_FILE(
"${CMake_SOURCE_DIR}/Tests/CTestTestTimeout/test.cmake.in" "${CMake_SOURCE_DIR}/Tests/CTestTestTimeout/test.cmake.in"
"${CMake_BINARY_DIR}/Tests/CTestTestTimeout/test.cmake" "${CMake_BINARY_DIR}/Tests/CTestTestTimeout/test.cmake"
@ -1391,6 +1434,17 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
SET_TESTS_PROPERTIES(CTestTestTimeout PROPERTIES SET_TESTS_PROPERTIES(CTestTestTimeout PROPERTIES
PASS_REGULAR_EXPRESSION "TestTimeout *\\.+ *\\*\\*\\*Timeout.*CheckChild *\\.+ *Passed") PASS_REGULAR_EXPRESSION "TestTimeout *\\.+ *\\*\\*\\*Timeout.*CheckChild *\\.+ *Passed")
CONFIGURE_FILE(
"${CMake_SOURCE_DIR}/Tests/CTestTestZeroTimeout/test.cmake.in"
"${CMake_BINARY_DIR}/Tests/CTestTestZeroTimeout/test.cmake"
@ONLY ESCAPE_QUOTES)
ADD_TEST(CTestTestZeroTimeout ${CMAKE_CTEST_COMMAND}
-S "${CMake_BINARY_DIR}/Tests/CTestTestZeroTimeout/test.cmake" -V
--output-log
"${CMake_BINARY_DIR}/Tests/CTestTestZeroTimeout/testOutput.log")
SET_TESTS_PROPERTIES(CTestTestZeroTimeout PROPERTIES
FAIL_REGULAR_EXPRESSION "\\*\\*\\*Timeout")
CONFIGURE_FILE( CONFIGURE_FILE(
"${CMake_SOURCE_DIR}/Tests/CTestTestDepends/test.cmake.in" "${CMake_SOURCE_DIR}/Tests/CTestTestDepends/test.cmake.in"
"${CMake_BINARY_DIR}/Tests/CTestTestDepends/test.cmake" "${CMake_BINARY_DIR}/Tests/CTestTestDepends/test.cmake"
@ -1573,7 +1627,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
ENDIF(UNIX) ENDIF(UNIX)
ENDIF (CMAKE_RUN_LONG_TESTS AND TEST_KDE4_STABLE_BRANCH) ENDIF (CMAKE_RUN_LONG_TESTS AND TEST_KDE4_STABLE_BRANCH)
IF("${CMAKE_TEST_GENERATOR}" MATCHES Xcode) IF("${CMAKE_TEST_GENERATOR}" MATCHES Xcode)
SET(CMAKE_SKIP_BOOTSTRAP_TEST 1) SET(CMAKE_SKIP_BOOTSTRAP_TEST 1)
ENDIF("${CMAKE_TEST_GENERATOR}" MATCHES Xcode) ENDIF("${CMAKE_TEST_GENERATOR}" MATCHES Xcode)
@ -1600,7 +1654,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
--build-noclean --build-noclean
--build-makeprogram ${bootstrap} --build-makeprogram ${bootstrap}
--build-generator "${CMAKE_TEST_GENERATOR}" --build-generator "${CMAKE_TEST_GENERATOR}"
--test-command --test-command
${CMake_BINARY_DIR}/Tests/BootstrapTest/Bootstrap.cmk/cmake) ${CMake_BINARY_DIR}/Tests/BootstrapTest/Bootstrap.cmk/cmake)
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BootstrapTest") LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BootstrapTest")
# Make this test run early during parallel execution # Make this test run early during parallel execution

View File

@ -0,0 +1,120 @@
# CPack Example: User-selectable Installation Components
#
# In this example, we have a simple library (mylib) with an example
# application (mylibapp). We create a binary installer (a CPack Generator)
# which supports CPack components.
#
# Depending on the CPack generator and on some CPACK_xxx var values
# the generator may produce a single (NSIS, PackageMaker)
# or several package files (Archive Generators, RPM, DEB)
cmake_minimum_required(VERSION 2.8.3.20101130 FATAL_ERROR)
project(CPackComponentsForAll)
# Create the mylib library
add_library(mylib mylib.cpp)
# Create the mylibapp application
add_executable(mylibapp mylibapp.cpp)
target_link_libraries(mylibapp mylib)
# Duplicate of mylibapp application
# which won't be put in any component (?mistake?)
add_executable(mylibapp2 mylibapp.cpp)
target_link_libraries(mylibapp2 mylib)
# Create installation targets. Note that we put each kind of file
# into a different component via COMPONENT. These components will
# be used to create the installation components.
install(TARGETS mylib
ARCHIVE
DESTINATION lib
COMPONENT libraries)
install(TARGETS mylibapp
RUNTIME
DESTINATION bin
COMPONENT applications)
# This application does not belong to any component
# thus (as of cmake 2.8.2) it will be left "uninstalled"
# by a component-aware installer unless a
# CPACK_MONOLITHIC_INSTALL=1 is set (at cmake time).
install(TARGETS mylibapp2
RUNTIME
DESTINATION bin)
install(FILES mylib.h
DESTINATION include
COMPONENT headers)
# CPack boilerplate for this project
set(CPACK_PACKAGE_NAME "MyLib")
set(CPACK_PACKAGE_CONTACT "None")
set(CPACK_PACKAGE_VENDOR "CMake.org")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyLib - CPack Component Installation Example")
set(CPACK_PACKAGE_VERSION "1.0.2")
set(CPACK_PACKAGE_VERSION_MAJOR "1")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "2")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CPack Component Example")
# Tell CPack all of the components to install. The "ALL"
# refers to the fact that this is the set of components that
# will be included when CPack is instructed to put everything
# into the binary installer (the default behavior).
set(CPACK_COMPONENTS_ALL applications libraries headers Unspecified)
# Set the displayed names for each of the components to install.
# These will be displayed in the list of components inside the installer.
set(CPACK_COMPONENT_APPLICATIONS_DISPLAY_NAME "MyLib Application")
set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries")
set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ Headers")
# Provide descriptions for each of the components to install.
# When the user hovers the mouse over the name of a component,
# the description will be shown in the "Description" box in the
# installer. If no descriptions are provided, the "Description"
# box will be removed.
set(CPACK_COMPONENT_APPLICATIONS_DESCRIPTION
"An extremely useful application that makes use of MyLib")
set(CPACK_COMPONENT_LIBRARIES_DESCRIPTION
"Static libraries used to build programs with MyLib")
set(CPACK_COMPONENT_HEADERS_DESCRIPTION
"C/C++ header files for use with MyLib")
# Put the components into two different groups: "Runtime" and "Development"
set(CPACK_COMPONENT_APPLICATIONS_GROUP "Runtime")
set(CPACK_COMPONENT_LIBRARIES_GROUP "Development")
set(CPACK_COMPONENT_HEADERS_GROUP "Development")
# Expand the "Development" group by default, since we have so few components.
# Also, provide this group with a description.
set(CPACK_COMPONENT_GROUP_DEVELOPMENT_EXPANDED ON)
set(CPACK_COMPONENT_GROUP_DEVELOPMENT_DESCRIPTION
"All of the tools you'll ever need to develop software")
# It doesn't make sense to install the headers without the libraries
# (because you could never use the headers!), so make the headers component
# depend on the libraries component.
set(CPACK_COMPONENT_HEADERS_DEPENDS libraries)
# Create two installation types with pre-selected components.
# The "Developer" installation has just the library and headers,
# while the "Full" installation has everything.
set(CPACK_ALL_INSTALL_TYPES Full Developer)
set(CPACK_INSTALL_TYPE_FULL_DISPLAY_NAME "Everything")
set(CPACK_COMPONENT_LIBRARIES_INSTALL_TYPES Developer Full)
set(CPACK_COMPONENT_HEADERS_INSTALL_TYPES Developer Full)
set(CPACK_COMPONENT_APPLICATIONS_INSTALL_TYPES Full)
# We may use the CPack specific config file in order
# to tailor CPack behavio on a CPack generator specific way
# (Behavior would be different for RPM or TGZ or DEB ...)
if (USE_CPACK_PROJECT_CONFIG)
# Setup project specific CPack-time CPack Config file.
configure_file(${MyLib_SOURCE_DIR}/MyLibCPackConfig.cmake.in
${MyLib_BINARY_DIR}/MyLibCPackConfig.cmake
@ONLY)
set(CPACK_PROJECT_CONFIG_FILE ${MyLib_BINARY_DIR}/MyLibCPackConfig.cmake)
endif (USE_CPACK_PROJECT_CONFIG)
# Include CPack to introduce the appropriate targets
include(CPack)

View File

@ -0,0 +1,7 @@
if(CPACK_GENERATOR MATCHES "ZIP")
# set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1)
endif(CPACK_GENERATOR MATCHES "ZIP")
if(CPACK_GENERATOR MATCHES "TGZ")
set(CPACK_MONOLITHIC_INSTALL 1)
endif(CPACK_GENERATOR MATCHES "TGZ")

View File

@ -0,0 +1,73 @@
message(STATUS "=============================================================================")
message(STATUS "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)")
message(STATUS "")
if(NOT CPackComponentsForAll_BINARY_DIR)
message(FATAL_ERROR "CPackComponentsForAll_BINARY_DIR not set")
endif(NOT CPackComponentsForAll_BINARY_DIR)
if(NOT CPackGen)
message(FATAL_ERROR "CPackGen not set")
endif(NOT CPackGen)
get_filename_component(CPACK_LOCATION ${CMAKE_COMMAND} PATH)
set(CPackCommand "${CPACK_LOCATION}/cpack")
message("cpack = ${CPackCommand}")
if(NOT CPackCommand)
message(FATAL_ERROR "CPackCommand not set")
endif(NOT CPackCommand)
if(NOT CPackComponentWay)
message(FATAL_ERROR "CPackComponentWay not set")
endif(NOT CPackComponentWay)
set(expected_file_mask "")
# The usual default behavior is to expect a single file
# Then some specific generators (Archive, RPM, ...)
# May produce several numbers of files depending on
# CPACK_COMPONENT_xxx values
set(expected_count 1)
set(config_type $ENV{CMAKE_CONFIG_TYPE})
set(config_args )
if(config_type)
set(config_args -C ${config_type})
endif()
message(" ${config_args}")
execute_process(COMMAND ${CPackCommand} -G ${CPackGen} ${config_args}
RESULT_VARIABLE CPack_result
OUTPUT_VARIABLE CPack_output
ERROR_VARIABLE CPack_error
WORKING_DIRECTORY ${CPackComponentsForAll_BINARY_DIR})
if (CPack_result)
message(FATAL_ERROR "error: CPack execution went wrong!, CPack_output=${CPack_output}, CPack_error=${CPack_error}")
else (CPack_result)
message(STATUS "CPack_output=${CPack_output}")
endif(CPack_result)
if(CPackGen MATCHES "ZIP")
set(expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.zip")
if (${CPackComponentWay} STREQUAL "default")
set(expected_count 1)
endif(${CPackComponentWay} STREQUAL "default")
endif(CPackGen MATCHES "ZIP")
# Now verify if the number of expected file is OK
# - using expected_file_mask and
# - expected_count
if(expected_file_mask)
file(GLOB expected_file "${expected_file_mask}")
message(STATUS "expected_count='${expected_count}'")
message(STATUS "expected_file='${expected_file}'")
message(STATUS "expected_file_mask='${expected_file_mask}'")
if(NOT expected_file)
message(FATAL_ERROR "error: expected_file=${expected_file} does not exist: CPackComponentsForAll test fails. (CPack_output=${CPack_output}, CPack_error=${CPack_error}")
endif(NOT expected_file)
list(LENGTH expected_file actual_count)
message(STATUS "actual_count='${actual_count}'")
if(NOT actual_count EQUAL expected_count)
message(FATAL_ERROR "error: expected_count=${expected_count} does not match actual_count=${actual_count}: CPackComponents test fails. (CPack_output=${CPack_output}, CPack_error=${CPack_error})")
endif(NOT actual_count EQUAL expected_count)
endif(expected_file_mask)

View File

@ -0,0 +1,7 @@
#include "mylib.h"
#include "stdio.h"
void mylib_function()
{
printf("This is mylib");
}

View File

@ -0,0 +1 @@
void mylib_function();

View File

@ -0,0 +1,6 @@
#include "mylib.h"
int main()
{
mylib_function();
}

View File

@ -0,0 +1,8 @@
CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
PROJECT (CTestTestZeroTimeout)
INCLUDE (CTest)
ADD_EXECUTABLE (Sleep sleep.c)
ADD_TEST (TestExplicitZeroTimeout Sleep)
SET_TESTS_PROPERTIES(TestExplicitZeroTimeout PROPERTIES TIMEOUT 0)

View File

@ -0,0 +1,7 @@
set(CTEST_PROJECT_NAME "CTestTestZeroTimeout")
set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
set(CTEST_DART_SERVER_VERSION "2")
set(CTEST_DROP_METHOD "http")
set(CTEST_DROP_SITE "www.cdash.org")
set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard")
set(CTEST_DROP_SITE_CDASH TRUE)

View File

@ -0,0 +1,16 @@
#if defined(_WIN32)
# include <windows.h>
#else
# include <unistd.h>
#endif
/* sleeps for 5 seconds */
int main(int argc, char** argv)
{
#if defined(_WIN32)
Sleep(5000);
#else
sleep(5);
#endif
return 0;
}

View File

@ -0,0 +1,23 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.1)
# Settings:
SET(CTEST_DASHBOARD_ROOT "@CMake_BINARY_DIR@/Tests/CTestTest")
SET(CTEST_SITE "@SITE@")
SET(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-ZeroTimeout")
SET(CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Tests/CTestTestZeroTimeout")
SET(CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestTestZeroTimeout")
SET(CTEST_CVS_COMMAND "@CVSCOMMAND@")
SET(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@")
SET(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}")
SET(CTEST_MEMORYCHECK_COMMAND "@MEMORYCHECK_COMMAND@")
SET(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE "@MEMORYCHECK_SUPPRESSIONS_FILE@")
SET(CTEST_MEMORYCHECK_COMMAND_OPTIONS "@MEMORYCHECK_COMMAND_OPTIONS@")
SET(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@")
SET(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}")
SET(CTEST_TEST_TIMEOUT 2)
CTEST_START(Experimental)
CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)

View File

@ -49,10 +49,17 @@ LINK_LIBRARIES(${COMPLEX_LIBS})
SET_SOURCE_FILES_PROPERTIES(complex_nobuild.cxx PROPERTIES SET_SOURCE_FILES_PROPERTIES(complex_nobuild.cxx PROPERTIES
HEADER_FILE_ONLY 1) HEADER_FILE_ONLY 1)
# Test forcing a .c file to not build.
# This makes sure a mixed language library is created
# with header file only sources
SET_SOURCE_FILES_PROPERTIES(complex_nobuild.c PROPERTIES
HEADER_FILE_ONLY 1)
ADD_EXECUTABLE(A A.cxx A.hh A.h A.txt) ADD_EXECUTABLE(A A.cxx A.hh A.h A.txt)
ADD_EXECUTABLE(complex complex testcflags.c ) ADD_EXECUTABLE(complex complex testcflags.c )
# Sub1/NameConflictTest.c Sub2/NameConflictTest.c) # Sub1/NameConflictTest.c Sub2/NameConflictTest.c)
ADD_EXECUTABLE(complex.file complex.file.cxx complex_nobuild.cxx) ADD_EXECUTABLE(complex.file complex.file.cxx complex_nobuild.cxx
complex_nobuild.c)
IF(COMPLEX_TEST_CMAKELIB) IF(COMPLEX_TEST_CMAKELIB)
TARGET_LINK_LIBRARIES(complex CMakeLib cmsys cmexpat cmzlib cmlibarchive cmbzip2 cmcurl) TARGET_LINK_LIBRARIES(complex CMakeLib cmsys cmexpat cmzlib cmlibarchive cmbzip2 cmcurl)
ENDIF(COMPLEX_TEST_CMAKELIB) ENDIF(COMPLEX_TEST_CMAKELIB)

View File

@ -0,0 +1 @@
#error "This file should not be compiled."

View File

@ -423,3 +423,16 @@ ADD_CUSTOM_TARGET(DifferentName ALL
) )
# #
# </SameNameTest> # </SameNameTest>
# Per-config target name and generator expressions.
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../PerConfig PerConfig)
ADD_CUSTOM_COMMAND(
OUTPUT perconfig.out
COMMAND ${PerConfig_COMMAND}
DEPENDS ${PerConfig_DEPENDS}
VERBATIM
)
SET_PROPERTY(SOURCE perconfig.out PROPERTY SYMBOLIC 1)
ADD_CUSTOM_TARGET(perconfig_target ALL
COMMAND ${CMAKE_COMMAND} -E echo "perconfig=$<TARGET_FILE:perconfig>" "config=$<CONFIGURATION>"
DEPENDS perconfig.out)

View File

@ -1,8 +1,8 @@
ADD_LIBRARY(jumpShared SHARED jumpShared.cxx) ADD_LIBRARY(jumpShared SHARED jumpShared.cxx)
IF(WIN32) IF(WIN32 OR CYGWIN)
SET(SHARED_MUST_BE_IN_EXE_DIR 1) SET(SHARED_MUST_BE_IN_EXE_DIR 1)
ENDIF(WIN32) ENDIF()
IF(APPLE) IF(APPLE)
SET(SHARED_MUST_BE_IN_EXE_DIR 1) SET(SHARED_MUST_BE_IN_EXE_DIR 1)

View File

@ -0,0 +1,34 @@
project(PerConfig C)
# Targets with per-configuration names.
ADD_LIBRARY(pcStatic STATIC pcStatic.c)
SET_PROPERTY(TARGET pcStatic PROPERTY RELEASE_POSTFIX -opt)
SET_PROPERTY(TARGET pcStatic PROPERTY DEBUG_POSTFIX -dbg)
ADD_LIBRARY(pcShared SHARED pcShared.c)
SET_PROPERTY(TARGET pcShared PROPERTY RELEASE_POSTFIX -opt)
SET_PROPERTY(TARGET pcShared PROPERTY DEBUG_POSTFIX -dbg)
SET_PROPERTY(TARGET pcShared PROPERTY VERSION 1.2)
SET_PROPERTY(TARGET pcShared PROPERTY SOVERSION 3)
IF(UNIX AND NOT CYGWIN)
SET(soname_file -DpcShared_soname_file=$<TARGET_SONAME_FILE:pcShared>)
ENDIF()
ADD_EXECUTABLE(perconfig perconfig.c)
TARGET_LINK_LIBRARIES(perconfig pcStatic pcShared)
SET_PROPERTY(TARGET perconfig PROPERTY RELEASE_POSTFIX -opt)
SET_PROPERTY(TARGET perconfig PROPERTY DEBUG_POSTFIX -dbg)
SET(PerConfig_COMMAND
${CMAKE_COMMAND}
-Dconfiguration=$<CONFIGURATION>
-Dperconfig_file_dir=$<TARGET_FILE_DIR:perconfig>
-Dperconfig_file_name=$<TARGET_FILE_NAME:perconfig>
-Dperconfig_file=$<TARGET_FILE:perconfig>
-DpcStatic_file=$<TARGET_FILE:pcStatic>
-DpcStatic_linker_file=$<TARGET_LINKER_FILE:pcStatic>
-DpcShared_file=$<TARGET_FILE:pcShared>
-DpcShared_linker_file=$<TARGET_LINKER_FILE:pcShared>
${soname_file}
-P ${PerConfig_SOURCE_DIR}/perconfig.cmake
)
SET(PerConfig_COMMAND "${PerConfig_COMMAND}" PARENT_SCOPE)
SET(PerConfig_DEPENDS ${PerConfig_SOURCE_DIR}/perconfig.cmake perconfig pcStatic pcShared)

View File

@ -10,7 +10,7 @@ foreach(v
pcShared_linker_file pcShared_linker_file
pcShared_soname_file pcShared_soname_file
) )
message("${v}=${${v}}") message(STATUS "${v}=${${v}}")
endforeach() endforeach()
# Verify that file names match as expected. # Verify that file names match as expected.

View File

@ -53,35 +53,7 @@ ADD_TEST(testing.1 ${Testing_BINARY_DIR}/bin/testing)
# #
ADD_SUBDIRECTORY(Sub/Sub2) ADD_SUBDIRECTORY(Sub/Sub2)
# Per-config target name test. # Per-config target name and generator expressions.
ADD_LIBRARY(pcStatic STATIC pcStatic.c) ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../PerConfig PerConfig)
SET_PROPERTY(TARGET pcStatic PROPERTY RELEASE_POSTFIX -opt)
SET_PROPERTY(TARGET pcStatic PROPERTY DEBUG_POSTFIX -dbg)
ADD_LIBRARY(pcShared SHARED pcShared.c)
SET_PROPERTY(TARGET pcShared PROPERTY RELEASE_POSTFIX -opt)
SET_PROPERTY(TARGET pcShared PROPERTY DEBUG_POSTFIX -dbg)
SET_PROPERTY(TARGET pcShared PROPERTY VERSION 1.2)
SET_PROPERTY(TARGET pcShared PROPERTY SOVERSION 3)
IF(NOT WIN32)
SET(soname_file -DpcShared_soname_file=$<TARGET_SONAME_FILE:pcShared>)
ENDIF()
ADD_EXECUTABLE(perconfig perconfig.c)
TARGET_LINK_LIBRARIES(perconfig pcStatic pcShared)
SET_PROPERTY(TARGET perconfig PROPERTY RELEASE_POSTFIX -opt)
SET_PROPERTY(TARGET perconfig PROPERTY DEBUG_POSTFIX -dbg)
ADD_TEST(NAME testing.perconfig COMMAND perconfig) ADD_TEST(NAME testing.perconfig COMMAND perconfig)
ADD_TEST(NAME testing.driver COMMAND ${PerConfig_COMMAND})
# Test using a driver script with generator expressions.
ADD_TEST(NAME testing.driver
COMMAND ${CMAKE_COMMAND}
-Dconfiguration=$<CONFIGURATION>
-Dperconfig_file_dir=$<TARGET_FILE_DIR:perconfig>
-Dperconfig_file_name=$<TARGET_FILE_NAME:perconfig>
-Dperconfig_file=$<TARGET_FILE:perconfig>
-DpcStatic_file=$<TARGET_FILE:pcStatic>
-DpcStatic_linker_file=$<TARGET_LINKER_FILE:pcStatic>
-DpcShared_file=$<TARGET_FILE:pcShared>
-DpcShared_linker_file=$<TARGET_LINKER_FILE:pcShared>
${soname_file}
-P ${Testing_SOURCE_DIR}/driver.cmake
)

View File

@ -3,3 +3,15 @@
# #
ADD_EXECUTABLE(testing2 testing2.cxx) ADD_EXECUTABLE(testing2 testing2.cxx)
ADD_TEST(testing.2 ${Testing_BINARY_DIR}/bin/testing2) ADD_TEST(testing.2 ${Testing_BINARY_DIR}/bin/testing2)
add_test(NotCycle.a ${CMAKE_COMMAND} -E echo a)
add_test(NotCycle.test1 ${CMAKE_COMMAND} -E echo test1)
set_property(TEST NotCycle.test1 PROPERTY DEPENDS NotCycle.a)
add_test(NotCycle.b ${CMAKE_COMMAND} -E echo b)
add_test(NotCycle.test2 ${CMAKE_COMMAND} -E echo test2)
set_property(TEST NotCycle.test2 PROPERTY DEPENDS NotCycle.b NotCycle.test1)
add_test(NotCycle.c ${CMAKE_COMMAND} -E echo c)
add_test(NotCycle.test3 ${CMAKE_COMMAND} -E echo test3)
set_property(TEST NotCycle.test3 PROPERTY DEPENDS NotCycle.c NotCycle.test1 NotCycle.test2)

View File

@ -0,0 +1,52 @@
cmake_minimum_required(VERSION 2.6)
project(TestsWorkingDirectoryProj)
add_executable(WorkingDirectory main.c)
enable_testing()
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin")
add_test(NAME WorkingDirectory1 COMMAND WorkingDirectory)
set_tests_properties(WorkingDirectory1 PROPERTIES
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
PASS_REGULAR_EXPRESSION "Working directory: -->${CMAKE_BINARY_DIR}<--"
)
string(REGEX REPLACE "/[^/]*$" "" _parent_dir "${CMAKE_BINARY_DIR}")
add_test(NAME WorkingDirectory2 COMMAND WorkingDirectory)
set_tests_properties(WorkingDirectory2 PROPERTIES
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/.."
PASS_REGULAR_EXPRESSION "Working directory: -->${_parent_dir}<--"
)
get_filename_component(_default_cwd "${EXECUTABLE_OUTPUT_PATH}" PATH)
# FIXME: How to deal with /debug, /release, etc. with VS or XCode?
if(${CMAKE_GENERATOR} MATCHES "Makefiles")
add_test(WorkingDirectory3 ${EXECUTABLE_OUTPUT_PATH}/WorkingDirectory)
set_tests_properties(WorkingDirectory3 PROPERTIES
PASS_REGULAR_EXPRESSION "Working directory: -->${_default_cwd}<--"
)
endif()
add_test(NAME WorkingDirectory4 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND WorkingDirectory)
set_tests_properties(WorkingDirectory4 PROPERTIES
PASS_REGULAR_EXPRESSION "Working directory: -->${CMAKE_BINARY_DIR}<--"
)
string(REGEX REPLACE "/[^/]*$" "" _parent_dir "${CMAKE_BINARY_DIR}")
add_test(NAME WorkingDirectory5 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/.. COMMAND WorkingDirectory)
set_tests_properties(WorkingDirectory5 PROPERTIES
PASS_REGULAR_EXPRESSION "Working directory: -->${_parent_dir}<--"
)
# FIXME: How to deal with /debug, /release, etc. with VS or XCode?
if(${CMAKE_GENERATOR} MATCHES "Makefiles")
add_test(WorkingDirectory6 ${EXECUTABLE_OUTPUT_PATH}/WorkingDirectory WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/..)
set_tests_properties(WorkingDirectory6 PROPERTIES
PASS_REGULAR_EXPRESSION "Working directory: -->${_default_cwd}<--"
)
endif()

View File

@ -0,0 +1,66 @@
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if defined(_WIN32) && (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__) || defined(__MINGW32__))
#include <io.h>
#include <direct.h>
#if defined(__WATCOMC__)
#include <direct.h>
#define _getcwd getcwd
#endif
static const char* Getcwd(char* buf, unsigned int len)
{
const char* ret = _getcwd(buf, len);
char* p = NULL;
if(!ret)
{
fprintf(stderr, "No current working directory.\n");
abort();
}
// make sure the drive letter is capital
if(strlen(buf) > 1 && buf[1] == ':')
{
buf[0] = toupper(buf[0]);
}
for(p = buf; *p; ++p)
{
if(*p == '\\')
{
*p = '/';
}
}
return ret;
}
#else
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
static const char* Getcwd(char* buf, unsigned int len)
{
const char* ret = getcwd(buf, len);
if(!ret)
{
fprintf(stderr, "No current working directory\n");
abort();
}
return ret;
}
#endif
int main(int argc, char *argv[])
{
char buf[2048];
const char *cwd = Getcwd(buf, sizeof(buf));
fprintf(stdout, "Working directory: -->%s<--", cwd);
return 0;
}

View File

@ -226,3 +226,9 @@ UNSET(CXX_BOGUS_FLAG CACHE)
INCLUDE(CheckCXXCompilerFlag) INCLUDE(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG(${CXX_DD}-_this_is_not_a_flag_ CXX_BOGUS_FLAG) CHECK_CXX_COMPILER_FLAG(${CXX_DD}-_this_is_not_a_flag_ CXX_BOGUS_FLAG)
TEST_FAIL(CXX_BOGUS_FLAG "CHECK_CXX_COMPILER_FLAG() succeeded, but should have failed") TEST_FAIL(CXX_BOGUS_FLAG "CHECK_CXX_COMPILER_FLAG() succeeded, but should have failed")
IF("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
UNSET(C_STRICT_PROTOTYPES CACHE)
CHECK_C_COMPILER_FLAG("-Werror;-Wstrict-prototypes" C_STRICT_PROTOTYPES)
TEST_ASSERT(C_STRICT_PROTOTYPES "CHECK_C_COMPILER_FLAG failed -Werror -Wstrict-prototypes")
ENDIF()

View File

@ -193,14 +193,6 @@ SET(EXTRA_DEFINES "${EXTRA_DEFINES}\n${headers_hack}\n#define __unused5")
CURL_CHECK_C_SOURCE_COMPILES("struct timeval ts;\nts.tv_sec = 0;\nts.tv_usec = 0" HAVE_STRUCT_TIMEVAL) CURL_CHECK_C_SOURCE_COMPILES("struct timeval ts;\nts.tv_sec = 0;\nts.tv_usec = 0" HAVE_STRUCT_TIMEVAL)
INCLUDE(CurlCheckCSourceRuns)
SET(EXTRA_DEFINES)
SET(HEADER_INCLUDES)
IF(HAVE_SYS_POLL_H)
SET(HEADER_INCLUDES "sys/poll.h")
ENDIF(HAVE_SYS_POLL_H)
CURL_CHECK_C_SOURCE_RUNS("return poll((void *)0, 0, 10 /*ms*/)" HAVE_POLL_FINE)
SET(HAVE_SIG_ATOMIC_T 1) SET(HAVE_SIG_ATOMIC_T 1)
SET(EXTRA_DEFINES) SET(EXTRA_DEFINES)
SET(HEADER_INCLUDES) SET(HEADER_INCLUDES)

View File

@ -521,42 +521,6 @@ MACRO(CURL_INTERNAL_TEST CURL_TEST)
ENDIF("${CURL_TEST}" MATCHES "^${CURL_TEST}$") ENDIF("${CURL_TEST}" MATCHES "^${CURL_TEST}$")
ENDMACRO(CURL_INTERNAL_TEST) ENDMACRO(CURL_INTERNAL_TEST)
MACRO(CURL_INTERNAL_TEST_RUN CURL_TEST)
IF("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
SET(MACRO_CHECK_FUNCTION_DEFINITIONS
"-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
IF(CMAKE_REQUIRED_LIBRARIES)
SET(CURL_TEST_ADD_LIBRARIES
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
ENDIF(CMAKE_REQUIRED_LIBRARIES)
MESSAGE(STATUS "Performing Curl Test ${CURL_TEST}")
TRY_RUN(${CURL_TEST} ${CURL_TEST}_COMPILE
${CMAKE_BINARY_DIR}
${LIBCURL_SOURCE_DIR}/CMake/CurlTests.c
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
"${CURL_TEST_ADD_LIBRARIES}"
OUTPUT_VARIABLE OUTPUT)
IF(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
SET(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Success")
ELSE(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
MESSAGE(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
SET(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
FILE(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
"Performing Curl Test ${CURL_TEST} failed with the following output:\n"
"${OUTPUT}")
IF(${CURL_TEST}_COMPILE)
FILE(APPEND
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
"There was a running problem of this test\n")
ENDIF(${CURL_TEST}_COMPILE)
FILE(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
"\n\n")
ENDIF(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
ENDIF("${CURL_TEST}_COMPILE" MATCHES "^${CURL_TEST}_COMPILE$")
ENDMACRO(CURL_INTERNAL_TEST_RUN)
# Do curl specific tests # Do curl specific tests
#OPTION(CURL_HAVE_DISABLED_NONBLOCKING "Disable non-blocking socket detection" OFF) #OPTION(CURL_HAVE_DISABLED_NONBLOCKING "Disable non-blocking socket detection" OFF)
SET(CURL_NONBLOCKING_TESTS) SET(CURL_NONBLOCKING_TESTS)
@ -599,13 +563,6 @@ IF(HAVE_FILE_OFFSET_BITS)
SET(_FILE_OFFSET_BITS 64) SET(_FILE_OFFSET_BITS 64)
ENDIF(HAVE_FILE_OFFSET_BITS) ENDIF(HAVE_FILE_OFFSET_BITS)
FOREACH(CURL_TEST
HAVE_GLIBC_STRERROR_R
HAVE_POSIX_STRERROR_R
)
CURL_INTERNAL_TEST_RUN(${CURL_TEST})
ENDFOREACH(CURL_TEST)
# Check for reentrant # Check for reentrant
FOREACH(CURL_TEST FOREACH(CURL_TEST
HAVE_GETHOSTBYADDR_R_5 HAVE_GETHOSTBYADDR_R_5

View File

@ -171,9 +171,6 @@
/* Define to 1 if you have the `gettimeofday' function. */ /* Define to 1 if you have the `gettimeofday' function. */
#cmakedefine HAVE_GETTIMEOFDAY ${HAVE_GETTIMEOFDAY} #cmakedefine HAVE_GETTIMEOFDAY ${HAVE_GETTIMEOFDAY}
/* we have a glibc-style strerror_r() */
#cmakedefine HAVE_GLIBC_STRERROR_R ${HAVE_GLIBC_STRERROR_R}
/* Define to 1 if you have the `gmtime_r' function. */ /* Define to 1 if you have the `gmtime_r' function. */
#cmakedefine HAVE_GMTIME_R ${HAVE_GMTIME_R} #cmakedefine HAVE_GMTIME_R ${HAVE_GMTIME_R}
@ -348,12 +345,6 @@
/* Define to 1 if you have the `poll' function. */ /* Define to 1 if you have the `poll' function. */
#cmakedefine HAVE_POLL ${HAVE_POLL} #cmakedefine HAVE_POLL ${HAVE_POLL}
/* If you have a fine poll */
#cmakedefine HAVE_POLL_FINE ${HAVE_POLL_FINE}
/* we have a POSIX-style strerror_r() */
#cmakedefine HAVE_POSIX_STRERROR_R ${HAVE_POSIX_STRERROR_R}
/* Define to 1 if you have the <process.h> header file. */ /* Define to 1 if you have the <process.h> header file. */
#cmakedefine HAVE_PROCESS_H ${HAVE_PROCESS_H} #cmakedefine HAVE_PROCESS_H ${HAVE_PROCESS_H}
@ -444,9 +435,6 @@
/* Define to 1 if you have the `strdup' function. */ /* Define to 1 if you have the `strdup' function. */
#cmakedefine HAVE_STRDUP ${HAVE_STRDUP} #cmakedefine HAVE_STRDUP ${HAVE_STRDUP}
/* Define to 1 if you have the `strerror_r' function. */
#cmakedefine HAVE_STRERROR_R ${HAVE_STRERROR_R}
/* Define to 1 if you have the `stricmp' function. */ /* Define to 1 if you have the `stricmp' function. */
#cmakedefine HAVE_STRICMP ${HAVE_STRICMP} #cmakedefine HAVE_STRICMP ${HAVE_STRICMP}

View File

@ -78,7 +78,7 @@
*/ */
int Curl_select(curl_socket_t readfd, curl_socket_t writefd, int timeout_ms) int Curl_select(curl_socket_t readfd, curl_socket_t writefd, int timeout_ms)
{ {
#if defined(HAVE_POLL_FINE) || defined(CURL_HAVE_WSAPOLL) #if (defined(HAVE_POLL) && !defined(_POLL_EMUL_H_)) || defined(CURL_HAVE_WSAPOLL)
struct pollfd pfd[2]; struct pollfd pfd[2];
int num; int num;
int r; int r;
@ -96,7 +96,7 @@ int Curl_select(curl_socket_t readfd, curl_socket_t writefd, int timeout_ms)
num++; num++;
} }
#ifdef HAVE_POLL_FINE #if defined(HAVE_POLL) && !defined(_POLL_EMUL_H_)
do { do {
r = poll(pfd, num, timeout_ms); r = poll(pfd, num, timeout_ms);
} while((r == -1) && (errno == EINTR)); } while((r == -1) && (errno == EINTR));
@ -220,7 +220,7 @@ int Curl_select(curl_socket_t readfd, curl_socket_t writefd, int timeout_ms)
int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms) int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
{ {
int r; int r;
#ifdef HAVE_POLL_FINE #if defined(HAVE_POLL) && !defined(_POLL_EMUL_H_)
do { do {
r = poll(ufds, nfds, timeout_ms); r = poll(ufds, nfds, timeout_ms);
} while((r == -1) && (errno == EINTR)); } while((r == -1) && (errno == EINTR));

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