mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-05-28 23:34:49 -05:00

The cmake script that determines the current git head commit, in order to bake it into the binaries for development builds from a git checkout, wasn't working reliably on Windows: sometimes it reported that the source directory didn't seem to be a git repository, when in fact it was. This occurred because gitcommit.cmake starts by trying to work out _whether_ the source directory is the top level of a git worktree at all, by the technique of running `git rev-parse --show-toplevel` (to print the top-level path of the git worktree _containing_ $PWD, if any) and comparing it with ${CMAKE_SOURCE_DIR}. But the comparison was done as a plain string, which leads to problems if more than one string can represent the same actual directory. On Windows, this can occur for two reasons that I know of. One reason is related to Windows itself: if you map a network file server path to a local drive letter, then the same directory is accessible as a UNC path (e.g. \\hostname\share\subdir) and via the drive letter (e.g. N:\subdir). And it can happen that CMAKE_SOURCE_DIR and git's output disagree on which representation to use, causing the string comparison to return a false negative. (This can also affect filesystems in a WSL instance, accessed from native Windows via \\wsl$\instance\path, because Windows implements that as a network file share even though the network in question is purely in the imagination of that one machine.) The other reason is related more specifically to git, because some versions of Windows git are built on top of MSYS or MINGW or that kind of shim layer, and model Windows drive letters as subdirectories of a Unixlike VFS root. So you might also find that the two strings disagree on whether you're in C:\Users\alice\src\putty or /c/Users/alice/src/putty. I think this commit should work around both of these problems. Reading the man page for `git rev-parse` more carefully, it has an option `--show-cdup`, which returns a _relative_ path from $PWD to the top-level directory of the worktree: that is, it will be a sequence of `../../..` as long as necessary, including length zero. So you can use that to directly query whether you're at the top of a git worktree: if `git rev-parse --show-cdup` returns the empty string and a success status, then you are. (If you're deeper in a worktree it will return a non-empty string, and if you're not in a worktree at all it will return a failure status and print an error message to stderr.)
PuTTY source code README ======================== This is the README for the source code of PuTTY, a free Windows and Unix Telnet and SSH client. PuTTY is built using CMake <https://cmake.org/>. To compile in the simplest way (on any of Linux, Windows or Mac), the general method is to run these commands in the source directory: cmake . cmake --build . These commands will expect to find a usable compile toolchain on your path. So if you're building on Windows with MSVC, you'll need to make sure that the MSVC compiler (cl.exe) is on your path, by running one of the 'vcvars32.bat' setup scripts provided with the tools. Then the cmake commands above should work. To install in the simplest way on Linux or Mac: cmake --build . --target install On Unix, pterm would like to be setuid or setgid, as appropriate, to permit it to write records of user logins to /var/run/utmp and /var/log/wtmp. (Of course it will not use this privilege for anything else, and in particular it will drop all privileges before starting up complex subsystems like GTK.) The cmake install step doesn't attempt to add these privileges, so if you want user login recording to work, you should manually ch{own,grp} and chmod the pterm binary yourself after installation. If you don't do this, pterm will still work, but not update the user login databases. Documentation (in various formats including Windows Help and Unix `man' pages) is built from the Halibut (`.but') files in the `doc' subdirectory. If you aren't using one of our source snapshots, you'll need to do this yourself. Halibut can be found at <https://www.chiark.greenend.org.uk/~sgtatham/halibut/>. The PuTTY home web site is https://www.chiark.greenend.org.uk/~sgtatham/putty/ If you want to send bug reports or feature requests, please read the Feedback section of the web site before doing so. Sending one-line reports saying `it doesn't work' will waste your time as much as ours. See the file LICENCE for the licence conditions.
Description
Languages
C
89.7%
Python
8%
Perl
0.9%
CMake
0.8%
Shell
0.4%
Other
0.1%