View Issue Details Jump to Notes ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0014266CMakeCMakepublic2013-07-03 08:342013-12-02 08:51
Reporterycollet 
Assigned ToBrad King 
PrioritynormalSeverityminorReproducibilityalways
StatusclosedResolutionfixed 
Platformx86OSWindowsOS Version7 46 bits
Product VersionCMake 2.8.11 
Target VersionCMake 2.8.12Fixed in VersionCMake 2.8.12 
Summary0014266: cmake configure step in ExternalProject_Add makes Visual studio stops
DescriptionI used ExternalProject_Add to configure and compile a thirdparty library (log4cplus-1.1.1).
The configure step call cmake. This cmake performs some configure check (check if some headers exist, check if some library is present). Some of these check fails (this is a normal thing because some headers are not present under windows).

But when a configure check fails, an error counter is incrementer under visual studio. And when this counter reaches 120, Visual Studio 2008 express stops due to a large number of errors.

To overcome this, I needed to activate BUILD_IN_SOURCE and CONFIGURE_LOG. After that, all the messages from the configure step are not displayed anymore in the visual studio console and the error counter is not incremented anymore. After that, the configure step went fine.
Steps To ReproduceThe external project which doesn't worked:

ExternalProject_Add(EP_log4cplus
                    PREFIX ${EP_InstallDir}/log4cplus
                    URL http://kent.dl.sourceforge.net/project/log4cplus/log4cplus-stable/1.1.1/log4cplus-1.1.1.tar.bz2 [^]
                    CONFIGURE_COMMAND ${CMAKE_COMMAND} -E make_directory ${EP_InstallDir}/log4cplus/src/EP_log4cplus/build
                                   && ${CMAKE_COMMAND} -E chdir ${EP_InstallDir}/log4cplus/src/EP_log4cplus/build ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${EP_InstallDir}/install ..
                    BUILD_COMMAND ${CMAKE_COMMAND} -E chdir ${EP_InstallDir}/log4cplus/src/EP_log4cplus/build make
                    INSTALL_COMMAND ${CMAKE_COMMAND} -E chdir ${EP_InstallDir}/log4cplus/src/EP_log4cplus/build make install
                    )

The external project command which worked:

ExternalProject_Add(EP_log4cplus
                    PREFIX ${EP_InstallDir}/log4cplus
                    URL http://kent.dl.sourceforge.net/project/log4cplus/log4cplus-stable/1.1.1/log4cplus-1.1.1.tar.bz2 [^]
                    CONFIGURE_COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${EP_InstallDir}/install -DUNICODE=OFF -G "NMake Makefiles" .
                    BUILD_COMMAND ${CMAKE_COMMAND} -E chdir ${EP_InstallDir}/log4cplus/src/EP_log4cplus nmake
                    BUILD_IN_SOURCE 1
                    INSTALL_COMMAND ${CMAKE_COMMAND} -E chdir ${EP_InstallDir}/log4cplus/src/EP_log4cplus nmake install
                    LOG_CONFIGURE 1
            )
TagsNo tags attached.
Attached Files

 Relationships
related to 0014265closedBrad King ExternalProject documentation missing for chaining multiple commands in one step 
related to 0014263closed The relative position of the parameters in ExternalProject_Add is important 

  Notes
(0033479)
Brad King (manager)
2013-07-03 17:07

I cannot reproduce the failure reported for the non-logged example. All the checks run (many fail) and configuration completes.

Through what mechanism is this vs counter incrementing? Do error messages from the checks appear in the VS build output window or build logs?
(0033485)
ycollet (reporter)
2013-07-05 02:31

I met this problem using visual studio 2008 32 bits used under windows 7 64 bits.

Here is the minimal cmakelists.txt file I used:

cmake_minimum_required(VERSION 2.6)

project(desp_test)

# Prevent the "make clean" from cleaning this directory
set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM TRUE)

include(ExternalProject)

set(EP_InstallDir ${CMAKE_BINARY_DIR}/Dependencies)

set(LOG4CPLUS_VERSION "1.1.1")

# This external project does not works
ExternalProject_Add(EP_log4cplus
                    PREFIX ${EP_InstallDir}/log4cplus
                    URL http://kent.dl.sourceforge.net/project/log4cplus/log4cplus-stable/${LOG4CPLUS_VERSION}/log4cplus-${LOG4CPLUS_VERSION}.tar.bz2 [^]
                    CONFIGURE_COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${EP_InstallDir}/install -DUNICODE=OFF -G "NMake Makefiles" .
                    BUILD_COMMAND ${CMAKE_COMMAND} -E chdir ${EP_InstallDir}/log4cplus/src/EP_log4cplus nmake
                    BUILD_IN_SOURCE 1
                    INSTALL_COMMAND ${CMAKE_COMMAND} -E chdir ${EP_InstallDir}/log4cplus/src/EP_log4cplus nmake install
                    )

# This external project works
#ExternalProject_Add(EP_log4cplus
# PREFIX ${EP_InstallDir}/log4cplus
# URL http://kent.dl.sourceforge.net/project/log4cplus/log4cplus-stable/${LOG4CPLUS_VERSION}/log4cplus-${LOG4CPLUS_VERSION}.tar.bz2 [^]
# CONFIGURE_COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${EP_InstallDir}/install -DUNICODE=OFF -G "NMake Makefiles" .
# BUILD_COMMAND ${CMAKE_COMMAND} -E chdir ${EP_InstallDir}/log4cplus/src/EP_log4cplus nmake
# BUILD_IN_SOURCE 1
# INSTALL_COMMAND ${CMAKE_COMMAND} -E chdir ${EP_InstallDir}/log4cplus/src/EP_log4cplus nmake install
# LOG_CONFIGURE 1
# )




And below, here is a part of the log I've got in the visual studio console. The configuration step has been aborted due to the 121 errors met during the configuration step:







CheckFunctionExists.c
CheckFunctionExists.c.obj : error LNK2019: symbole externe non résolu _clock_gettime référencé dans la fonction _main
cmTryCompileExec1053871539.exe : fatal error LNK1120: 1 externes non résolus
-- Looking for clock_gettime - not found
-- Looking for clock_nanosleep
CheckFunctionExists.c
CheckFunctionExists.c.obj : error LNK2019: symbole externe non résolu _clock_nanosleep référencé dans la fonction _main
cmTryCompileExec2856057910.exe : fatal error LNK1120: 1 externes non résolus
-- Looking for clock_nanosleep - not found
-- Looking for nanosleep
CheckFunctionExists.c
CheckFunctionExists.c.obj : error LNK2019: symbole externe non résolu _nanosleep référencé dans la fonction _main
cmTryCompileExec3743990331.exe : fatal error LNK1120: 1 externes non résolus
-- Looking for nanosleep - not found
-- Looking for gethostbyname_r
CheckFunctionExists.c
CheckFunctionExists.c.obj : error LNK2019: symbole externe non résolu _gethostbyname_r référencé dans la fonction _main
cmTryCompileExec3929262572.exe : fatal error LNK1120: 1 externes non résolus
-- Looking for gethostbyname_r - not found
-- Looking for getaddrinfo
CheckFunctionExists.c
CheckFunctionExists.c.obj : error LNK2019: symbole externe non résolu _getaddrinfo référencé dans la fonction _main
cmTryCompileExec4250284368.exe : fatal error LNK1120: 1 externes non résolus
-- Looking for getaddrinfo - not found
-- Performing Test HAVE_ATTRIBUTE_VISIBILITY
src.c
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(5) : error C2143: erreur de syntaxe : absence de ')' avant '('
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(5) : error C2143: erreur de syntaxe : absence de ')' avant '('
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(5) : error C2091: fonction retournée par la fonction
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(5) : error C2143: erreur de syntaxe : absence de ')' avant 'chaîne'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(5) : error C2091: fonction retournée par la fonction
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(5) : error C2143: erreur de syntaxe : absence de '{' avant 'chaîne'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(5) : error C2059: erreur de syntaxe : '<Inconnu>'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(5) : error C2059: erreur de syntaxe : ')'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(5) : error C2059: erreur de syntaxe : ')'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(5) : error C2059: erreur de syntaxe : ')'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(6) : error C2143: erreur de syntaxe : absence de ')' avant '('
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(6) : error C2143: erreur de syntaxe : absence de ')' avant '('
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(6) : error C2091: fonction retournée par la fonction
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(6) : error C2143: erreur de syntaxe : absence de ')' avant 'chaîne'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(6) : error C2091: fonction retournée par la fonction
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(6) : error C2143: erreur de syntaxe : absence de '{' avant 'chaîne'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(6) : error C2059: erreur de syntaxe : '<Inconnu>'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(6) : error C2059: erreur de syntaxe : ')'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(6) : error C2059: erreur de syntaxe : ')'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(6) : error C2059: erreur de syntaxe : ')'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(8) : error C2143: erreur de syntaxe : absence de ')' avant '('
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(8) : error C2143: erreur de syntaxe : absence de ')' avant '('
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(8) : error C2091: fonction retournée par la fonction
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(8) : error C2143: erreur de syntaxe : absence de ')' avant 'chaîne'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(8) : error C2091: fonction retournée par la fonction
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(8) : error C2143: erreur de syntaxe : absence de '{' avant 'chaîne'
-- Performing Test HAVE_ATTRIBUTE_VISIBILITY - Failed
-- Performing Test HAVE_DECLSPEC_DLLEXPORT
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(8) : error C2059: erreur de syntaxe : '<Inconnu>'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(8) : error C2059: erreur de syntaxe : ')'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(8) : error C2059: erreur de syntaxe : ')'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(8) : error C2059: erreur de syntaxe : ')'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(9) : error C2143: erreur de syntaxe : absence de ')' avant '('
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(9) : error C2143: erreur de syntaxe : absence de ')' avant '('
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(9) : error C2091: fonction retournée par la fonction
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(9) : error C2143: erreur de syntaxe : absence de ')' avant 'chaîne'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(9) : error C2091: fonction retournée par la fonction
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(9) : error C2143: erreur de syntaxe : absence de '{' avant 'chaîne'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(9) : error C2059: erreur de syntaxe : '<Inconnu>'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(9) : error C2059: erreur de syntaxe : ')'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(9) : error C2059: erreur de syntaxe : ')'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.c(9) : error C2059: erreur de syntaxe : ')'
src.c
   Création de la bibliothèque cmTryCompileExec2561857527.lib et de l'objet cmTryCompileExec2561857527.exp
-- Performing Test HAVE_DECLSPEC_DLLEXPORT - Success
-- Performing Test HAVE_CXX11_THREAD_LOCAL
src.cxx
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(1) : error C2144: erreur de syntaxe : 'int' doit être précédé de ';'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(1) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(2) : error C2144: erreur de syntaxe : 'int' doit être précédé de ';'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(2) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(4) : error C2144: erreur de syntaxe : 'int' doit être précédé de ';'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(4) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(4) : error C2086: 'int thread_local' : redéfinition
        D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(1) : voir la déclaration de 'thread_local'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(4) : error C2086: 'int x' : redéfinition
        D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(1) : voir la déclaration de 'x'
-- Performing Test HAVE_CXX11_THREAD_LOCAL - Failed
-- Performing Test HAVE_GCC_THREAD_EXTENSION
src.cxx
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(8) : error C2144: erreur de syntaxe : 'int' doit être précédé de ';'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(8) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(9) : error C2144: erreur de syntaxe : 'int' doit être précédé de ';'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(9) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(11) : error C2144: erreur de syntaxe : 'int' doit être précédé de ';'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(11) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(11) : error C2086: 'int __thread' : redéfinition
        D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(8) : voir la déclaration de '__thread'
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(11) : error C2086: 'int x' : redéfinition
        D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(8) : voir la déclaration de 'x'
-- Performing Test HAVE_GCC_THREAD_EXTENSION - Failed
-- Performing Test HAVE_DECLSPEC_THREAD
src.cxx
-- Performing Test HAVE_DECLSPEC_THREAD - Success
-- Performing Test LOG4CPLUS_HAVE_CXX11_ATOMICS
src.cxx
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CMakeTmp\src.cxx(1) : fatal error C1083: Impossible d'ouvrir le fichier include : 'atomic' : No such file or directory
-- Performing Test LOG4CPLUS_HAVE_CXX11_ATOMICS - Failed
-- Looking for sys/types.h
CheckIncludeFile.c
-- Looking for sys/types.h - found
-- Looking for stddef.h
CheckIncludeFile.c
-- Looking for stddef.h - found
-- Check size of socklen_t
_SOCKLEN_SIZE.c
D:\temp\build\Dependencies\log4cplus\src\EP_log4cplus\CMakeFiles\CheckTypeSize\_SOCKLEN_SIZE.c(3) : fatal error C1083: Impossible d'ouvrir le fichier include : 'sys/socket.h' : No such file or directory
-- Check size of socklen_t - failed
-- Threads:
-- Sources: loggingserver.cxx
-- Configuring done
-- Generating done
-- Build files have been written to: D:/temp/build/Dependencies/log4cplus/src/EP_log4cplus
Le journal de génération a été enregistré à l'emplacement "file://d:\temp\build\EP_log4cplus.dir\Debug\BuildLog.htm" [^]
EP_log4cplus - 121 erreur(s), 3 avertissement(s)
------ Génération ignorée : Projet : ALL_BUILD, Configuration : Debug Win32 ------
Projet non sélectionné dans le cadre d'une génération pour cette configuration de solution
========== Génération : 1 a réussi, 1 a échoué, 0 mis à jour, 1 a été ignoré ==========
(0033510)
Brad King (manager)
2013-07-08 12:18

The build of the outer project inside the visual studio environment is setting the environment variable VS_UNICODE_OUTPUT as a backdoor to hook into error messages from the compiler no matter how many levels of processes and stdout/stderr redirection exist in between. The invocations of the compiler run through nmake inside the try_compile checks are leaking build output through this backdoor. The LOG_CONFIGURE option causes the commands to be wrapped in a script that un-sets VS_UNICODE_OUTPUT which is why that workaround works for you.

Somehow we need to unset VS_UNICODE_OUTPUT but we'll have to think about the right place for that.
(0033511)
Brad King (manager)
2013-07-08 14:58

For reference, the LOG_* suppression of VS_UNICODE_OUTPUT was added here:

 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=44aff73d [^]
(0033524)
Brad King (manager)
2013-07-10 13:26
edited on: 2013-07-16 13:52

I've generalized the fix mentioned in 0014266:0033511 to cover all CMake and CTest processes:

 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=45d2966d [^]

Local testing shows that the "This external project does not works" case described in 0014266:0033485 now works (and didn't before).

(0034641)
Robert Maynard (manager)
2013-12-02 08:51

Closing resolved issues that have not been updated in more than 4 months.

 Issue History
Date Modified Username Field Change
2013-07-03 08:34 ycollet New Issue
2013-07-03 16:54 Brad King Relationship added related to 0014265
2013-07-03 16:55 Brad King Relationship added related to 0014263
2013-07-03 17:07 Brad King Note Added: 0033479
2013-07-05 02:31 ycollet Note Added: 0033485
2013-07-08 12:18 Brad King Note Added: 0033510
2013-07-08 14:58 Brad King Note Added: 0033511
2013-07-10 08:41 Brad King Assigned To => Brad King
2013-07-10 08:41 Brad King Status new => assigned
2013-07-10 08:41 Brad King Target Version => CMake 2.8.12
2013-07-10 13:26 Brad King Note Added: 0033524
2013-07-10 13:26 Brad King Status assigned => resolved
2013-07-10 13:26 Brad King Resolution open => fixed
2013-07-10 13:26 Brad King Fixed in Version => CMake 2.8.12
2013-07-16 13:52 Brad King Note Edited: 0033524
2013-12-02 08:51 Robert Maynard Note Added: 0034641
2013-12-02 08:51 Robert Maynard Status resolved => closed


Copyright © 2000 - 2018 MantisBT Team