Misc Windows fixes

1. Fix build by making the legacy SSH Storey's secret `logFD` setting
   not a setting on Windows. (It doesn't make sense to specify `void *`
   handles by integer cross-proccess, I don't think.)

2. Move some files that don't need to be Unix-only anymore back to their
   original locations.
This commit is contained in:
John Ericson 2024-06-01 16:39:59 -04:00
parent 802b4e403b
commit e0b159549b
11 changed files with 36 additions and 17 deletions

View file

@ -125,8 +125,8 @@
''^src/libfetchers/registry\.hh$'' ''^src/libfetchers/registry\.hh$''
''^src/libfetchers/tarball\.cc$'' ''^src/libfetchers/tarball\.cc$''
''^src/libfetchers/tarball\.hh$'' ''^src/libfetchers/tarball\.hh$''
''^src/libfetchers/unix/git\.cc$'' ''^src/libfetchers/git\.cc$''
''^src/libfetchers/unix/mercurial\.cc$'' ''^src/libfetchers/mercurial\.cc$''
''^src/libmain/common-args\.cc$'' ''^src/libmain/common-args\.cc$''
''^src/libmain/common-args\.hh$'' ''^src/libmain/common-args\.hh$''
''^src/libmain/loggers\.cc$'' ''^src/libmain/loggers\.cc$''
@ -237,11 +237,11 @@
''^src/libstore/build/substitution-goal\.hh$'' ''^src/libstore/build/substitution-goal\.hh$''
''^src/libstore/build/worker\.cc$'' ''^src/libstore/build/worker\.cc$''
''^src/libstore/build/worker\.hh$'' ''^src/libstore/build/worker\.hh$''
''^src/libstore/unix/builtins/fetchurl\.cc$'' ''^src/libstore/builtins/fetchurl\.cc$''
''^src/libstore/unix/builtins/unpack-channel\.cc$'' ''^src/libstore/builtins/unpack-channel\.cc$''
''^src/libstore/gc\.cc$'' ''^src/libstore/gc\.cc$''
''^src/libstore/unix/local-overlay-store\.cc$'' ''^src/libstore/local-overlay-store\.cc$''
''^src/libstore/unix/local-overlay-store\.hh$'' ''^src/libstore/local-overlay-store\.hh$''
''^src/libstore/local-store\.cc$'' ''^src/libstore/local-store\.cc$''
''^src/libstore/local-store\.hh$'' ''^src/libstore/local-store\.hh$''
''^src/libstore/unix/user-lock\.cc$'' ''^src/libstore/unix/user-lock\.cc$''

View file

@ -19,7 +19,10 @@
#include <regex> #include <regex>
#include <string.h> #include <string.h>
#include <sys/time.h> #include <sys/time.h>
#include <sys/wait.h>
#ifndef _WIN32
# include <sys/wait.h>
#endif
using namespace std::string_literals; using namespace std::string_literals;
@ -40,6 +43,7 @@ bool isCacheFileWithinTtl(time_t now, const struct stat & st)
bool touchCacheFile(const Path & path, time_t touch_time) bool touchCacheFile(const Path & path, time_t touch_time)
{ {
#ifndef _WIN32 // TODO implement
struct timeval times[2]; struct timeval times[2];
times[0].tv_sec = touch_time; times[0].tv_sec = touch_time;
times[0].tv_usec = 0; times[0].tv_usec = 0;
@ -47,6 +51,9 @@ bool touchCacheFile(const Path & path, time_t touch_time)
times[1].tv_usec = 0; times[1].tv_usec = 0;
return lutimes(path.c_str(), times) == 0; return lutimes(path.c_str(), times) == 0;
#else
return false;
#endif
} }
Path getCachePath(std::string_view key, bool shallow) Path getCachePath(std::string_view key, bool shallow)
@ -98,7 +105,15 @@ bool storeCachedHead(const std::string & actualUrl, const std::string & headRef)
try { try {
runProgram("git", true, { "-C", cacheDir, "--git-dir", ".", "symbolic-ref", "--", "HEAD", headRef }); runProgram("git", true, { "-C", cacheDir, "--git-dir", ".", "symbolic-ref", "--", "HEAD", headRef });
} catch (ExecError &e) { } catch (ExecError &e) {
if (!WIFEXITED(e.status)) throw; if (
#ifndef WIN32 // TODO abstract over exit status handling on Windows
!WIFEXITED(e.status)
#else
e.status != 0
#endif
)
throw;
return false; return false;
} }
/* No need to touch refs/HEAD, because `git symbolic-ref` updates the mtime. */ /* No need to touch refs/HEAD, because `git symbolic-ref` updates the mtime. */
@ -329,7 +344,13 @@ struct GitInputScheme : InputScheme
.program = "git", .program = "git",
.args = {"-C", repoInfo.url, "--git-dir", repoInfo.gitDir, "check-ignore", "--quiet", std::string(path.rel())}, .args = {"-C", repoInfo.url, "--git-dir", repoInfo.gitDir, "check-ignore", "--quiet", std::string(path.rel())},
}); });
auto exitCode = WEXITSTATUS(result.first); auto exitCode =
#ifndef WIN32 // TODO abstract over exit status handling on Windows
WEXITSTATUS(result.first)
#else
result.first
#endif
;
if (exitCode != 0) { if (exitCode != 0) {
// The path is not `.gitignore`d, we can add the file. // The path is not `.gitignore`d, we can add the file.

View file

@ -5,16 +5,10 @@ libfetchers_NAME = libnixfetchers
libfetchers_DIR := $(d) libfetchers_DIR := $(d)
libfetchers_SOURCES := $(wildcard $(d)/*.cc) libfetchers_SOURCES := $(wildcard $(d)/*.cc)
ifdef HOST_UNIX
libfetchers_SOURCES += $(wildcard $(d)/unix/*.cc)
endif
# Not just for this library itself, but also for downstream libraries using this library # Not just for this library itself, but also for downstream libraries using this library
INCLUDE_libfetchers := -I $(d) INCLUDE_libfetchers := -I $(d)
ifdef HOST_UNIX
INCLUDE_libfetchers += -I $(d)/unix
endif
libfetchers_CXXFLAGS += $(INCLUDE_libutil) $(INCLUDE_libstore) $(INCLUDE_libfetchers) libfetchers_CXXFLAGS += $(INCLUDE_libutil) $(INCLUDE_libstore) $(INCLUDE_libfetchers)

View file

@ -26,10 +26,14 @@ struct LegacySSHStoreConfig : virtual CommonSSHStoreConfig
struct LegacySSHStore : public virtual LegacySSHStoreConfig, public virtual Store struct LegacySSHStore : public virtual LegacySSHStoreConfig, public virtual Store
{ {
#ifndef _WIN32
// Hack for getting remote build log output. // Hack for getting remote build log output.
// Intentionally not in `LegacySSHStoreConfig` so that it doesn't appear in // Intentionally not in `LegacySSHStoreConfig` so that it doesn't appear in
// the documentation // the documentation
const Setting<int> logFD{this, -1, "log-fd", "file descriptor to which SSH's stderr is connected"}; const Setting<int> logFD{this, INVALID_DESCRIPTOR, "log-fd", "file descriptor to which SSH's stderr is connected"};
#else
Descriptor logFD = INVALID_DESCRIPTOR;
#endif
struct Connection; struct Connection;

View file

@ -6,7 +6,7 @@ libstore_DIR := $(d)
libstore_SOURCES := $(wildcard $(d)/*.cc $(d)/builtins/*.cc $(d)/build/*.cc) libstore_SOURCES := $(wildcard $(d)/*.cc $(d)/builtins/*.cc $(d)/build/*.cc)
ifdef HOST_UNIX ifdef HOST_UNIX
libstore_SOURCES += $(wildcard $(d)/unix/*.cc $(d)/unix/builtins/*.cc $(d)/unix/build/*.cc) libstore_SOURCES += $(wildcard $(d)/unix/*.cc $(d)/unix/build/*.cc)
endif endif
ifdef HOST_LINUX ifdef HOST_LINUX
libstore_SOURCES += $(wildcard $(d)/linux/*.cc) libstore_SOURCES += $(wildcard $(d)/linux/*.cc)