Filesystem Case Sensitivity
There may be many reasons why you must have filesystem that is case sensitive. For example, you are trying to run
ct-ng build command and it fails under Windows WSL.
Solution is to mount your filesystem with case sensitive enabled, or use per-directory control.
The second option gives your more control, but the sub-directories do not inherit properties from the parent (update: directory inheritance behavior has changed summer of 2019). To do that, open a command shell as an administrator and run:
fsutil file setCaseSensitiveInfo <directory> enable
First option, to mount your directory under WSL as case-sensitive file system, edit (create if it doesn't exist)
/etc/wsl.conf and add:
[automount] options = case=dir
Restart WSL shell so that the configuration can be read. Type
mount command and you should see:
C: on /mnt/c type drvfs (rw,noatime,uid=1000,gid=1000,case=dir)
case=dir option listed in the parenthesis. Now
ct-ng build command will not complain if the directory is case-sensitive. This only works with file systems that support case sensitivity (for example NTFS, not FAT).
To mark a directory as case-sensitive use above
fsutil command, or install
attr command. Then type:
setfattr -n system.wsl_case_sensitive -v 1 ...
Windows permission will take precedence over WSL, so use
setfattr does not work. You can see if a directory handles case-sensitive names by typing:
getfattr -n system.wsl_case_sensitive ...
With the new inheritance behavior and the option to create new directories as case-sensitive, you should be able to create a case-sensitive top level parent directory and never have to worry about conflicting file names again.
dmesg command complains of file translation errors after a version update and
/mnt/c isn't automatically mounted in WSL, most likely the option you used to mount DrvFS isn't supported.
CMake and Compiler Errors
Compiling fails using Visual Studio 2015 under directory that is case sensitive. Compiler will complain it is unable to find a file, but you can clearly see it right there. You'll get error messages from
cl.exe -- broken. Check and make sure the directory has case sensitivity disabled and
cmake should work fine.
Visual Studio Code
Once tool chain is built, Visual Studio Code will always have problems with the directory because it does not know how to deal with symbolic links (they appear as NTFS junctions) and files with the same name but different cases (many header files do this). You will get a message saying folder "contains emphasized items," which is no help at all. Just remember not to manipulate files under the tool chain directory outside of WSL, in programs like Visual Studio Code.
- Microsoft article about per-directory control and follow-up improvements.
- Another article about automatically configure WSL