You could try, though it makes my brain hurt to think about it.  Why
go to such lengths to protect users from themselves?

On Thu, Oct 7, 2010 at 11:57 AM,  <aaron.mead...@thomsonreuters.com> wrote:
> Yeah, I think I'll go with something like what you are saying.  I wonder
> if I can remove the CMakeFiles directory and the CMakeCache.txt file
> from within the CMakeLists script...
>
> Aaron C. Meadows
>
>> Hi all.
>>
>>
>>
>> Is there a good way to disallow in-source builds?  Ideally, I'd like
> to
>> prevent it before any cruft is written into the source tree.  I
>> experimented with writing a function into my CMakelists file and
> calling
>> it.  The function checked if CMAKE_BINARY_DIR was equal to
>> CMAKE_SOURCE_DIR and messaged a FATAL_ERROR if that was the case.
> This
>> works ok, but still generates a CMakeFiles directory and a
>> CMakeCache.txt file.
>
> I don't think there's a way to prevent that from happening. The bad
> thing about this is that if the user doesn't clean away the in-source
> CMakeCache.txt file, subsequent out-of-source builds will fail. Perhaps
> you can do something like this:
>
> # check for polluted source tree
> if(EXISTS ${CMAKE_SOURCE_DIR}/CMakeCache.txt OR
>    EXISTS ${CMAKE_SOURCE_DIR}/CMakeFiles)
>  message(FATAL_ERROR
>    "CMakeCache.txt or CMakeFiles exists in source directory!")
> endif()
> # make sure the user doesn't play dirty with symlinks
> get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH)
> get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH)
> # disallow in-source builds
> if(${srcdir} STREQUAL ${bindir})
>  message(FATAL_ERROR "In-source builds are forbidden!")
> endif()
>
>>
>> The second half of the question is of course, is there an easy way to
>> clean out a source tree if an in-source build was accidentally kicked
>> off?  (short of dividing the files by their timestamp and removing the
>> newer ones, etc..)
>
> No, simply because CMake cannot. Your build system might have something
> like the following:
>
> execute_process(COMMAND echo "BOOM" > ${CMAKE_BINARY_DIR}/boom.txt
> VERBATIM)
>
> CMake never knows that the file boom.txt is written, and therefor can't
> clean it away. The only reasonable way I know of is using git
> (http://git-scm.com):
>
> git clean -df
>
> will remove all the files and directories that are not part of the
> repository. With tar-ball builds it's easier. Just wipe the source tree
> and unpack again.
>
>
> Michael
>
> This email was sent to you by Thomson Reuters, the global news and 
> information company.
> Any views expressed in this message are those of the individual sender, 
> except where the sender specifically states them to be the views of Thomson 
> Reuters.
>
>
> _______________________________________________
> 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://www.cmake.org/mailman/listinfo/cmake
>
_______________________________________________
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://www.cmake.org/mailman/listinfo/cmake

Reply via email to