The following issue has been SUBMITTED. 
====================================================================== 
http://public.kitware.com/Bug/view.php?id=13105 
====================================================================== 
Reported By:                Andreas Mohr
Assigned To:                
====================================================================== 
Project:                    CMake
Issue ID:                   13105
Category:                   CMake
Reproducibility:            always
Severity:                   major
Priority:                   high
Status:                     new
====================================================================== 
Date Submitted:             2012-04-05 05:49 EDT
Last Modified:              2012-04-05 05:49 EDT
====================================================================== 
Summary:                    Ninja generator renders a previously working build
environment destroyed upon re-configure failure
Description: 
This destruction of the build environment does NOT happen with Makefile
generator, thus it is a bug which needs fixing...
This is a grave problem since I'm relying on a multi-staged build (even
incorporating several vcproj2cmake elements, necessitating integration of even
another conversion run prior to the CMake --> build conversion run), thus it's
important to always preserve a working build environment to keep e.g.
reconversion targets (vcproj2cmake rebuilder targets) available even in case of
re-configure (i.e., re-generation) runs failing (e.g. due to CMake syntax
issues).

Tested with very recent git head.

I recently submitted a very similar issue at
http://public.kitware.com/Bug/view.php?id=13040 , thus tried to analyze the
(instantly provided, thanks!) patch and check what to do with similar use of
cmGeneratedFileStream in cmGlobalNinjaGenerator.cxx, but so far I haven't found
where exactly handling is broken. Possibly from cmGeneratedFileStream point of
view everything is "fine" after Ninja generation, thus it does atomically rename
the (newly broken, due to CMake configure run failure!!) into the (prior,
working!) build.ninja file.
I'll try to spend some more time tracking down this issue, but if anyone knows
where to look, that would be awesome :)

Thanks!

Steps to Reproduce: 
cmake_minimum_required(VERSION 2.8)
project(ninja_reconfigure_destroy_test CXX)

if(NOT CMAKE_GENERATOR MATCHES "Ninja")
  message(FATAL_ERROR "CMAKE_GENERATOR is not set to Ninja!")
endif(NOT CMAKE_GENERATOR MATCHES "Ninja")

file(WRITE "test.cpp"
"int main()
{
  return 0;
}")

set(file_list
  test.cpp
  # test_not_existing_file.cpp # <====== UNCOMMENT THIS LINE!
)

add_library(ninja_reconfigure_destroy_test SHARED ${file_list})

Additional Information: 
Output of actual test run, providing evidence of a destroyed build configuration
(thus any and all targets gone fishin', potentially even some which need to
remain executable to sucessfully get the CMake-side syntax back into working
order!!):

build]$ cmake -DCMAKE_GENERATOR=Ninja ..
-- The CXX compiler identification is GNU 4.1.2
-- Check for working CXX compiler using: Ninja
-- Check for working CXX compiler using: Ninja -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to:
/home/amoh/Projects/cmake_tests/ninja_reconfigure_destroy_test/build
[amoh@lxamoh build]$ ninja
[1/2] Building CXX object
CMakeFiles/ninja_reconfigure_destroy_test.dir/test.cpp.o
../test.cpp:4:2: warning: no newline at end of file
[2/2] Linking CXX shared library libninja_reconfigure_destroy_test.so
[amoh@lxamoh build]$ ninja
ninja: no work to do.
[amoh@lxamoh build]$ vi ../CMakeLists.txt 
[amoh@lxamoh build]$ ninja
[1/1] Re-running CMake...
FAILED: /usr/local/bin/cmake
-H/home/amoh/Projects/cmake_tests/ninja_reconfigure_destroy_test
-B/home/amoh/Projects/cmake_tests/ninja_reconfigure_destroy_test/build
-- Configuring done
CMake Error at CMakeLists.txt:19 (add_library):
  Cannot find source file:

    test_not_existing.cpp

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx


-- Build files have been written to:
/home/amoh/Projects/cmake_tests/ninja_reconfigure_destroy_test/build
ninja: error: rebuilding 'build.ninja': subcommand failed
[amoh@lxamoh build]$ ninja
ninja: error: loading 'build.ninja': line 18, col 20: unknown build rule
'RERUN_CMAKE'
====================================================================== 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2012-04-05 05:49 Andreas Mohr   New Issue                                    
======================================================================

--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to