At $DAYJOB, we observed that this topic breaks MacOS builds with sha1dc: $ make NO_APPLE_COMMON_CRYPTO=1 DC_SHA1=1 NO_OPENSSL=1 compat/fsmonitor/fsm-ipc-darwin.o CC compat/fsmonitor/fsm-ipc-darwin.o compat/fsmonitor/fsm-ipc-darwin.c:13:2: error: unknown type name 'SHA_CTX'; did you mean 'SHA1_CTX'? SHA_CTX sha1ctx; ^~~~~~~ SHA1_CTX ./sha1dc/sha1.h:55:3: note: 'SHA1_CTX' declared here } SHA1_CTX; ^ compat/fsmonitor/fsm-ipc-darwin.c:16:21: error: use of undeclared identifier 'SHA_DIGEST_LENGTH' unsigned char hash[SHA_DIGEST_LENGTH]; ^ compat/fsmonitor/fsm-ipc-darwin.c:31:2: error: implicit declaration of function 'SHA1_Init' is invalid in C99 [-Werror,-Wimplicit-function-declaration] SHA1_Init(&sha1ctx); ^ compat/fsmonitor/fsm-ipc-darwin.c:31:2: note: did you mean 'SHA1DCInit'? ./sha1dc/sha1.h:58:6: note: 'SHA1DCInit' declared here void SHA1DCInit(SHA1_CTX*); ^ compat/fsmonitor/fsm-ipc-darwin.c:32:2: error: implicit declaration of function 'SHA1_Update' is invalid in C99 [-Werror,-Wimplicit-function-declaration] SHA1_Update(&sha1ctx, r->worktree, strlen(r->worktree)); ^ compat/fsmonitor/fsm-ipc-darwin.c:32:2: note: did you mean 'SHA1DCUpdate'? ./sha1dc/sha1.h:96:6: note: 'SHA1DCUpdate' declared here void SHA1DCUpdate(SHA1_CTX*, const char*, size_t); ^ compat/fsmonitor/fsm-ipc-darwin.c:33:2: error: implicit declaration of function 'SHA1_Final' is invalid in C99 [-Werror,-Wimplicit-function-declaration] SHA1_Final(hash, &sha1ctx); ^ compat/fsmonitor/fsm-ipc-darwin.c:33:2: note: did you mean 'SHA1DCFinal'? ./sha1dc/sha1.h:100:6: note: 'SHA1DCFinal' declared here int SHA1DCFinal(unsigned char[20], SHA1_CTX*); ^ 5 errors generated. make: *** [compat/fsmonitor/fsm-ipc-darwin.o] Error 1 Without NO_OPENSSL, this still fails, but with slightly different error messages. $ make NO_APPLE_COMMON_CRYPTO=1 DC_SHA1=1 compat/fsmonitor/fsm-ipc-darwin.o CC compat/fsmonitor/fsm-ipc-darwin.o compat/fsmonitor/fsm-ipc-darwin.c:31:2: error: 'SHA1_Init' is deprecated [-Werror,-Wdeprecated-declarations] SHA1_Init(&sha1ctx); ^ /opt/local/include/openssl/sha.h:49:1: note: 'SHA1_Init' has been explicitly marked deprecated here OSSL_DEPRECATEDIN_3_0 int SHA1_Init(SHA_CTX *c); ^ /opt/local/include/openssl/macros.h:182:49: note: expanded from macro 'OSSL_DEPRECATEDIN_3_0' # define OSSL_DEPRECATEDIN_3_0 OSSL_DEPRECATED(3.0) ^ /opt/local/include/openssl/macros.h:62:52: note: expanded from macro 'OSSL_DEPRECATED' # define OSSL_DEPRECATED(since) __attribute__((deprecated)) ^ compat/fsmonitor/fsm-ipc-darwin.c:32:2: error: 'SHA1_Update' is deprecated [-Werror,-Wdeprecated-declarations] SHA1_Update(&sha1ctx, r->worktree, strlen(r->worktree)); ^ /opt/local/include/openssl/sha.h:50:1: note: 'SHA1_Update' has been explicitly marked deprecated here OSSL_DEPRECATEDIN_3_0 int SHA1_Update(SHA_CTX *c, const void *data, size_t len); ^ /opt/local/include/openssl/macros.h:182:49: note: expanded from macro 'OSSL_DEPRECATEDIN_3_0' # define OSSL_DEPRECATEDIN_3_0 OSSL_DEPRECATED(3.0) ^ /opt/local/include/openssl/macros.h:62:52: note: expanded from macro 'OSSL_DEPRECATED' # define OSSL_DEPRECATED(since) __attribute__((deprecated)) ^ compat/fsmonitor/fsm-ipc-darwin.c:33:2: error: 'SHA1_Final' is deprecated [-Werror,-Wdeprecated-declarations] SHA1_Final(hash, &sha1ctx); ^ /opt/local/include/openssl/sha.h:51:1: note: 'SHA1_Final' has been explicitly marked deprecated here OSSL_DEPRECATEDIN_3_0 int SHA1_Final(unsigned char *md, SHA_CTX *c); ^ /opt/local/include/openssl/macros.h:182:49: note: expanded from macro 'OSSL_DEPRECATEDIN_3_0' # define OSSL_DEPRECATEDIN_3_0 OSSL_DEPRECATED(3.0) ^ /opt/local/include/openssl/macros.h:62:52: note: expanded from macro 'OSSL_DEPRECATED' # define OSSL_DEPRECATED(since) __attribute__((deprecated)) ^ 3 errors generated. make: *** [compat/fsmonitor/fsm-ipc-darwin.o] Error 1 "Eric DeCosta via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > Goal is to deliver fsmonitor for Linux that is on par with fsmonitor for > Windows and Mac OS. > > This patch set builds upon previous work for done for Windows and Mac OS > (first 6 patches) to implement a fsmonitor back-end for Linux based on the > Linux inotify API. inotify differs significantly from the equivalent Windows > and Mac OS APIs in that a watch must be registered for every directory of > interest (rather than a singular watch at the root of the directory tree) > and special care must be taken to handle directory renames correctly. > > More information about inotify: > https://man7.org/linux/man-pages/man7/inotify.7.html > > v1 differs from v0: > > * Code review feedback > * Update how and which code can be shared between Mac OS and Linux > * Increase polling frequency to every 1ms (matches Mac OS) > * Updates to t7527 to improve test stability >