file(GLOB) does not escape filenames with semicolons when creating the output variable definition
We recently stumped against an escaping problem in CMake. `GLOB`bing a folder to get all filenames creates a list with the wrong number of items if any filename contains semicolons. Things also behave weirdly when square brackets are involved.
To reproduce try the following:
1. Create an empty folder
2. Run the following:
```bash
echo 0 > 'a'
echo 1 > 'a b '
echo 2 > 'a;b c'
echo 3 > 'a;[;]c'
echo 4 > 'a;[;c'
```
3. Use the following CMakeLists.txt in the directory:
```cmake
cmake_minimum_required(VERSION 3.11)
file(GLOB files "a*")
message(STATUS " ++++ ${files} ++++")
foreach(file IN LISTS files)
message(STATUS " ------------- ${file} ------------- ")
file(READ "${file}" contents)
message("${contents}")
endforeach()
```
The culprit seems to be `bool cmFileCommand::HandleGlobCommand(std::vector<std::string> const& args, bool recurse)`. At the end of the method it does: `this->Makefile->AddDefinition(variable, cmJoin(files, ";").c_str());`.
The contents of the "files" vector should instead be escaped before joining it.
issue