Merge branch 'ps/build-tweaks' into jch

* ps/build-tweaks:
  meson: precompile "git-compat-util.h"
  meson: compile compatibility sources separately
  git-compat-util.h: move warning infra to prepare for PCHs
  builds: move build scripts into "tools/"
  contrib: move "update-unicode.sh" script into "tools/"
  contrib: move "coverage-diff.sh" script into "tools/"
  contrib: move "coccinelle/" directory into "tools/"
  Introduce new "tools/" directory
This commit is contained in:
Junio C Hamano
2026-03-10 14:24:07 -07:00
49 changed files with 123 additions and 99 deletions

View File

@@ -1005,8 +1005,8 @@ SPATCH_TEST_FLAGS =
# COMPUTE_HEADER_DEPENDENCIES=no this will be unset too.
SPATCH_USE_O_DEPENDENCIES = YesPlease
# Set SPATCH_CONCAT_COCCI to concatenate the contrib/cocci/*.cocci
# files into a single contrib/cocci/ALL.cocci before running
# Set SPATCH_CONCAT_COCCI to concatenate the tools/coccinelle/*.cocci
# files into a single tools/coccinelle/ALL.cocci before running
# "coccicheck".
#
# Pros:
@@ -1025,7 +1025,7 @@ SPATCH_USE_O_DEPENDENCIES = YesPlease
# generate a specific patch, e.g. this will always use strbuf.cocci,
# not ALL.cocci:
#
# make contrib/coccinelle/strbuf.cocci.patch
# make tools/coccinelle/strbuf.cocci.patch
SPATCH_CONCAT_COCCI = YesPlease
# Rebuild 'coccicheck' if $(SPATCH), its flags etc. change
@@ -1066,11 +1066,13 @@ SOURCES_CMD = ( \
'*.sh' \
':!*[tp][0-9][0-9][0-9][0-9]*' \
':!contrib' \
':!tools' \
2>/dev/null || \
$(FIND) . \
\( -name .git -type d -prune \) \
-o \( -name '[tp][0-9][0-9][0-9][0-9]*' -prune \) \
-o \( -name contrib -type d -prune \) \
-o \( -name tools -type d -prune \) \
-o \( -name build -type d -prune \) \
-o \( -name .build -type d -prune \) \
-o \( -name 'trash*' -type d -prune \) \
@@ -2697,21 +2699,21 @@ $(BUILT_INS): git$X
ln -s $< $@ 2>/dev/null || \
cp $< $@
config-list.h: generate-configlist.sh
config-list.h: tools/generate-configlist.sh
@mkdir -p .depend
$(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh . $@ .depend/config-list.h.d
$(QUIET_GEN)$(SHELL_PATH) ./tools/generate-configlist.sh . $@ .depend/config-list.h.d
-include .depend/config-list.h.d
command-list.h: generate-cmdlist.sh command-list.txt
command-list.h: tools/generate-cmdlist.sh command-list.txt
command-list.h: $(wildcard Documentation/git*.adoc)
$(QUIET_GEN)$(SHELL_PATH) ./generate-cmdlist.sh \
$(QUIET_GEN)$(SHELL_PATH) ./tools/generate-cmdlist.sh \
$(patsubst %,--exclude-program %,$(EXCLUDED_PROGRAMS)) \
. $@
hook-list.h: generate-hooklist.sh Documentation/githooks.adoc
$(QUIET_GEN)$(SHELL_PATH) ./generate-hooklist.sh . $@
hook-list.h: tools/generate-hooklist.sh Documentation/githooks.adoc
$(QUIET_GEN)$(SHELL_PATH) ./tools/generate-hooklist.sh . $@
SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):\
$(localedir_SQ):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
@@ -2724,8 +2726,8 @@ GIT-SCRIPT-DEFINES: FORCE
echo "$$FLAGS" >$@; \
fi
$(SCRIPT_SH_GEN) $(SCRIPT_LIB) : % : %.sh generate-script.sh GIT-BUILD-OPTIONS GIT-SCRIPT-DEFINES
$(QUIET_GEN)./generate-script.sh "$<" "$@+" ./GIT-BUILD-OPTIONS && \
$(SCRIPT_SH_GEN) $(SCRIPT_LIB) : % : %.sh tools/generate-script.sh GIT-BUILD-OPTIONS GIT-SCRIPT-DEFINES
$(QUIET_GEN)./tools/generate-script.sh "$<" "$@+" ./GIT-BUILD-OPTIONS && \
mv $@+ $@
git.rc: git.rc.in GIT-VERSION-GEN GIT-VERSION-FILE
@@ -2765,8 +2767,8 @@ endif
PERL_DEFINES += $(gitexecdir) $(perllibdir) $(localedir)
$(SCRIPT_PERL_GEN): % : %.perl generate-perl.sh GIT-PERL-DEFINES GIT-PERL-HEADER GIT-VERSION-FILE
$(QUIET_GEN)$(SHELL_PATH) generate-perl.sh ./GIT-BUILD-OPTIONS ./GIT-VERSION-FILE GIT-PERL-HEADER "$<" "$@+" && \
$(SCRIPT_PERL_GEN): % : %.perl tools/generate-perl.sh GIT-PERL-DEFINES GIT-PERL-HEADER GIT-VERSION-FILE
$(QUIET_GEN)$(SHELL_PATH) tools/generate-perl.sh ./GIT-BUILD-OPTIONS ./GIT-VERSION-FILE GIT-PERL-HEADER "$<" "$@+" && \
mv $@+ $@
PERL_DEFINES := $(subst $(space),:,$(PERL_DEFINES))
@@ -2794,8 +2796,8 @@ GIT-PERL-HEADER: $(PERL_HEADER_TEMPLATE) GIT-PERL-DEFINES Makefile
perllibdir:
@echo '$(perllibdir_SQ)'
git-instaweb: git-instaweb.sh generate-script.sh GIT-BUILD-OPTIONS GIT-SCRIPT-DEFINES
$(QUIET_GEN)./generate-script.sh "$<" "$@+" ./GIT-BUILD-OPTIONS && \
git-instaweb: git-instaweb.sh tools/generate-script.sh GIT-BUILD-OPTIONS GIT-SCRIPT-DEFINES
$(QUIET_GEN)./tools/generate-script.sh "$<" "$@+" ./GIT-BUILD-OPTIONS && \
chmod +x $@+ && \
mv $@+ $@
else # NO_PERL
@@ -2812,9 +2814,9 @@ endif # NO_PERL
$(SCRIPT_PYTHON_GEN): GIT-BUILD-OPTIONS
ifndef NO_PYTHON
$(SCRIPT_PYTHON_GEN): generate-python.sh
$(SCRIPT_PYTHON_GEN): tools/generate-python.sh
$(SCRIPT_PYTHON_GEN): % : %.py
$(QUIET_GEN)$(SHELL_PATH) generate-python.sh ./GIT-BUILD-OPTIONS "$<" "$@"
$(QUIET_GEN)$(SHELL_PATH) tools/generate-python.sh ./GIT-BUILD-OPTIONS "$<" "$@"
else # NO_PYTHON
$(SCRIPT_PYTHON_GEN): % : unimplemented.sh
$(QUIET_GEN) \
@@ -3234,9 +3236,9 @@ endif
NO_PERL_CPAN_FALLBACKS_SQ = $(subst ','\'',$(NO_PERL_CPAN_FALLBACKS))
endif
perl/build/lib/%.pm: perl/%.pm generate-perl.sh GIT-BUILD-OPTIONS GIT-VERSION-FILE GIT-PERL-DEFINES
perl/build/lib/%.pm: perl/%.pm tools/generate-perl.sh GIT-BUILD-OPTIONS GIT-VERSION-FILE GIT-PERL-DEFINES
$(call mkdir_p_parent_template)
$(QUIET_GEN)$(SHELL_PATH) generate-perl.sh ./GIT-BUILD-OPTIONS ./GIT-VERSION-FILE GIT-PERL-HEADER "$<" "$@"
$(QUIET_GEN)$(SHELL_PATH) tools/generate-perl.sh ./GIT-BUILD-OPTIONS ./GIT-VERSION-FILE GIT-PERL-HEADER "$<" "$@"
perl/build/man/man3/Git.3pm: perl/Git.pm
$(call mkdir_p_parent_template)
@@ -3465,15 +3467,15 @@ check:
exit 1; \
fi
COCCI_GEN_ALL = .build/contrib/coccinelle/ALL.cocci
COCCI_GLOB = $(wildcard contrib/coccinelle/*.cocci)
COCCI_GEN_ALL = .build/tools/coccinelle/ALL.cocci
COCCI_GLOB = $(wildcard tools/coccinelle/*.cocci)
COCCI_RULES_TRACKED = $(COCCI_GLOB:%=.build/%)
COCCI_RULES_TRACKED_NO_PENDING = $(filter-out %.pending.cocci,$(COCCI_RULES_TRACKED))
COCCI_RULES =
COCCI_RULES += $(COCCI_GEN_ALL)
COCCI_RULES += $(COCCI_RULES_TRACKED)
COCCI_NAMES =
COCCI_NAMES += $(COCCI_RULES:.build/contrib/coccinelle/%.cocci=%)
COCCI_NAMES += $(COCCI_RULES:.build/tools/coccinelle/%.cocci=%)
COCCICHECK_PENDING = $(filter %.pending.cocci,$(COCCI_RULES))
COCCICHECK = $(filter-out $(COCCICHECK_PENDING),$(COCCI_RULES))
@@ -3488,20 +3490,20 @@ COCCICHECK_PATCHES_PENDING_INTREE = $(COCCICHECK_PATCHES_PENDING:.build/%=%)
# on $(MAKECMDGOALS) that match these $(COCCI_RULES)
COCCI_RULES_GLOB =
COCCI_RULES_GLOB += cocci%
COCCI_RULES_GLOB += .build/contrib/coccinelle/%
COCCI_RULES_GLOB += .build/tools/coccinelle/%
COCCI_RULES_GLOB += $(COCCICHECK_PATCHES)
COCCI_RULES_GLOB += $(COCCICHEC_PATCHES_PENDING)
COCCI_RULES_GLOB += $(COCCICHECK_PATCHES_INTREE)
COCCI_RULES_GLOB += $(COCCICHECK_PATCHES_PENDING_INTREE)
COCCI_GOALS = $(filter $(COCCI_RULES_GLOB),$(MAKECMDGOALS))
COCCI_TEST_RES = $(wildcard contrib/coccinelle/tests/*.res)
COCCI_TEST_RES = $(wildcard tools/coccinelle/tests/*.res)
$(COCCI_RULES_TRACKED): .build/% : %
$(call mkdir_p_parent_template)
$(QUIET_CP)cp $< $@
.build/contrib/coccinelle/FOUND_H_SOURCES: $(FOUND_H_SOURCES)
.build/tools/coccinelle/FOUND_H_SOURCES: $(FOUND_H_SOURCES)
$(call mkdir_p_parent_template)
$(QUIET_GEN) >$@
@@ -3515,12 +3517,12 @@ endif
define cocci-rule
## Rule for .build/$(1).patch/$(2); Params:
# $(1) = e.g. ".build/contrib/coccinelle/free.cocci"
# $(1) = e.g. ".build/tools/coccinelle/free.cocci"
# $(2) = e.g. "grep.c"
# $(3) = e.g. "grep.o"
COCCI_$(1:.build/contrib/coccinelle/%.cocci=%) += $(1).d/$(2).patch
COCCI_$(1:.build/tools/coccinelle/%.cocci=%) += $(1).d/$(2).patch
$(1).d/$(2).patch: GIT-SPATCH-DEFINES
$(1).d/$(2).patch: $(if $(and $(SPATCH_USE_O_DEPENDENCIES),$(wildcard $(3))),$(3),.build/contrib/coccinelle/FOUND_H_SOURCES)
$(1).d/$(2).patch: $(if $(and $(SPATCH_USE_O_DEPENDENCIES),$(wildcard $(3))),$(3),.build/tools/coccinelle/FOUND_H_SOURCES)
$(1).d/$(2).patch: $(1)
$(1).d/$(2).patch: $(1).d/%.patch : %
$$(call mkdir_p_parent_template)
@@ -3546,13 +3548,13 @@ endif
define spatch-rule
.build/contrib/coccinelle/$(1).cocci.patch: $$(COCCI_$(1))
.build/tools/coccinelle/$(1).cocci.patch: $$(COCCI_$(1))
$$(QUIET_SPATCH_CAT)cat $$^ >$$@ && \
if test -s $$@; \
then \
echo ' ' SPATCH result: $$@; \
fi
contrib/coccinelle/$(1).cocci.patch: .build/contrib/coccinelle/$(1).cocci.patch
tools/coccinelle/$(1).cocci.patch: .build/tools/coccinelle/$(1).cocci.patch
$$(QUIET_CP)cp $$< $$@
endef
@@ -3566,9 +3568,9 @@ $(COCCI_TEST_RES_GEN): GIT-SPATCH-DEFINES
$(COCCI_TEST_RES_GEN): .build/%.res : %.c
$(COCCI_TEST_RES_GEN): .build/%.res : %.res
ifdef SPATCH_CONCAT_COCCI
$(COCCI_TEST_RES_GEN): .build/contrib/coccinelle/tests/%.res : $(COCCI_GEN_ALL)
$(COCCI_TEST_RES_GEN): .build/tools/coccinelle/tests/%.res : $(COCCI_GEN_ALL)
else
$(COCCI_TEST_RES_GEN): .build/contrib/coccinelle/tests/%.res : contrib/coccinelle/%.cocci
$(COCCI_TEST_RES_GEN): .build/tools/coccinelle/tests/%.res : tools/coccinelle/%.cocci
endif
$(call mkdir_p_parent_template)
$(QUIET_SPATCH_TEST)$(SPATCH) $(SPATCH_TEST_FLAGS) \
@@ -3584,14 +3586,14 @@ coccicheck-test: $(COCCI_TEST_RES_GEN)
coccicheck: coccicheck-test
ifdef SPATCH_CONCAT_COCCI
COCCICHECK_PATCH_MUST_BE_EMPTY_FILES = contrib/coccinelle/ALL.cocci.patch
COCCICHECK_PATCH_MUST_BE_EMPTY_FILES = tools/coccinelle/ALL.cocci.patch
else
COCCICHECK_PATCH_MUST_BE_EMPTY_FILES = $(COCCICHECK_PATCHES_INTREE)
endif
coccicheck: $(COCCICHECK_PATCH_MUST_BE_EMPTY_FILES)
! grep ^ $(COCCICHECK_PATCH_MUST_BE_EMPTY_FILES) /dev/null
# See contrib/coccinelle/README
# See tools/coccinelle/README
coccicheck-pending: coccicheck-test
coccicheck-pending: $(COCCICHECK_PATCHES_PENDING_INTREE)
@@ -3865,8 +3867,8 @@ profile-clean:
cocciclean:
$(RM) GIT-SPATCH-DEFINES
$(RM) -r .build/contrib/coccinelle
$(RM) contrib/coccinelle/*.cocci.patch
$(RM) -r .build/tools/coccinelle
$(RM) tools/coccinelle/*.cocci.patch
clean: profile-clean coverage-clean cocciclean
$(RM) -r .build $(UNIT_TEST_BIN)
@@ -3944,7 +3946,7 @@ check-docs::
### Make sure built-ins do not have dups and listed in git.c
#
check-builtins::
./check-builtins.sh
./tools/check-builtins.sh
### Test suite coverage testing
#

View File

@@ -10,7 +10,7 @@ make coccicheck
set +x
fail=
for cocci_patch in contrib/coccinelle/*.patch
for cocci_patch in tools/coccinelle/*.patch
do
if test -s "$cocci_patch"
then

View File

@@ -1,5 +1,5 @@
ifndef COMPILER_FEATURES
COMPILER_FEATURES := $(shell ./detect-compiler $(CC))
COMPILER_FEATURES := $(shell ./tools/detect-compiler $(CC))
endif
ifeq ($(filter no-error,$(DEVOPTS)),)

View File

@@ -639,7 +639,7 @@ set(EXCLUSION_PROGS_CACHE ${EXCLUSION_PROGS} CACHE STRING "Programs not built" F
if(NOT EXISTS ${CMAKE_BINARY_DIR}/command-list.h OR NOT EXCLUSION_PROGS_CACHE STREQUAL EXCLUSION_PROGS)
list(REMOVE_ITEM EXCLUSION_PROGS empty)
message("Generating command-list.h")
execute_process(COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/generate-cmdlist.sh"
execute_process(COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/tools/generate-cmdlist.sh"
${EXCLUSION_PROGS}
"${CMAKE_SOURCE_DIR}"
"${CMAKE_BINARY_DIR}/command-list.h")
@@ -647,14 +647,14 @@ endif()
if(NOT EXISTS ${CMAKE_BINARY_DIR}/config-list.h)
message("Generating config-list.h")
execute_process(COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/generate-configlist.sh"
execute_process(COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/tools/generate-configlist.sh"
"${CMAKE_SOURCE_DIR}"
"${CMAKE_BINARY_DIR}/config-list.h")
endif()
if(NOT EXISTS ${CMAKE_BINARY_DIR}/hook-list.h)
message("Generating hook-list.h")
execute_process(COMMAND "${SH_EXE}" ${CMAKE_SOURCE_DIR}/generate-hooklist.sh
execute_process(COMMAND "${SH_EXE}" ${CMAKE_SOURCE_DIR}/tools/generate-hooklist.sh
"${CMAKE_SOURCE_DIR}"
"${CMAKE_BINARY_DIR}/hook-list.h")
endif()
@@ -835,11 +835,11 @@ foreach(script ${git_shell_scripts})
endif()
add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/${shell_gen_path}"
COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/generate-script.sh"
COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/tools/generate-script.sh"
"${CMAKE_SOURCE_DIR}/${script}.sh"
"${CMAKE_BINARY_DIR}/${shell_gen_path}"
"${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS"
DEPENDS "${CMAKE_SOURCE_DIR}/generate-script.sh"
DEPENDS "${CMAKE_SOURCE_DIR}/tools/generate-script.sh"
"${CMAKE_SOURCE_DIR}/${script}.sh"
VERBATIM)
list(APPEND shell_gen ${CMAKE_BINARY_DIR}/${shell_gen_path})
@@ -878,13 +878,13 @@ foreach(script ${git_perl_scripts} ${perl_modules})
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/${perl_gen_dir}")
add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/${perl_gen_path}"
COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/generate-perl.sh"
COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/tools/generate-perl.sh"
"${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS"
"${CMAKE_BINARY_DIR}/GIT-VERSION-FILE"
"${CMAKE_BINARY_DIR}/GIT-PERL-HEADER"
"${CMAKE_SOURCE_DIR}/${script}"
"${CMAKE_BINARY_DIR}/${perl_gen_path}"
DEPENDS "${CMAKE_SOURCE_DIR}/generate-perl.sh"
DEPENDS "${CMAKE_SOURCE_DIR}/tools/generate-perl.sh"
"${CMAKE_SOURCE_DIR}/${script}"
"${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS"
"${CMAKE_BINARY_DIR}/GIT-VERSION-FILE"
@@ -895,11 +895,11 @@ add_custom_target(perl-gen ALL DEPENDS ${perl_gen})
# Python script
add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/git-p4"
COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/generate-python.sh"
COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/tools/generate-python.sh"
"${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS"
"${CMAKE_SOURCE_DIR}/git-p4.py"
"${CMAKE_BINARY_DIR}/git-p4"
DEPENDS "${CMAKE_SOURCE_DIR}/generate-python.sh"
DEPENDS "${CMAKE_SOURCE_DIR}/tools/generate-python.sh"
"${CMAKE_SOURCE_DIR}/git-p4.py"
"${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS"
VERBATIM)

View File

@@ -2,5 +2,4 @@ foreach feature : get_option('contrib')
subdir(feature)
endforeach
subdir('coccinelle')
subdir('credential')

View File

@@ -3,7 +3,7 @@ git_subtree = custom_target(
output: 'git-subtree',
command: [
shell,
meson.project_source_root() / 'generate-script.sh',
meson.project_source_root() / 'tools/generate-script.sh',
'@INPUT@',
'@OUTPUT@',
meson.project_build_root() / 'GIT-BUILD-OPTIONS',

View File

@@ -34,10 +34,6 @@ struct strbuf;
# define DISABLE_WARNING(warning)
#endif
#ifdef DISABLE_SIGN_COMPARE_WARNINGS
DISABLE_WARNING(-Wsign-compare)
#endif
#undef FLEX_ARRAY
#define FLEX_ARRAY /* empty - weather balloon to require C99 FAM */
@@ -1099,3 +1095,7 @@ extern int not_supposed_to_survive;
#endif /* CHECK_ASSERTION_SIDE_EFFECTS */
#endif
#ifdef DISABLE_SIGN_COMPARE_WARNINGS
DISABLE_WARNING(-Wsign-compare)
#endif

View File

@@ -271,6 +271,13 @@ version_gen_environment.set('GIT_VERSION', get_option('version'))
compiler = meson.get_compiler('c')
compat_sources = [
'compat/nonblock.c',
'compat/obstack.c',
'compat/open.c',
'compat/terminal.c',
]
libgit_sources = [
'abspath.c',
'add-interactive.c',
@@ -304,10 +311,6 @@ libgit_sources = [
'commit.c',
'common-exit.c',
'common-init.c',
'compat/nonblock.c',
'compat/obstack.c',
'compat/open.c',
'compat/terminal.c',
'compiler-tricks/not-constant.c',
'config.c',
'connect.c',
@@ -556,7 +559,7 @@ libgit_sources = [
libgit_sources += custom_target(
input: 'command-list.txt',
output: 'command-list.h',
command: [shell, meson.current_source_dir() + '/generate-cmdlist.sh', meson.current_source_dir(), '@OUTPUT@'],
command: [shell, meson.current_source_dir() + '/tools/generate-cmdlist.sh', meson.current_source_dir(), '@OUTPUT@'],
env: script_environment,
)
@@ -725,10 +728,10 @@ endif
builtin_sources += custom_target(
output: 'config-list.h',
depfile: 'config-list.h.d',
depend_files: [ 'generate-configlist.sh' ],
depend_files: [ 'tools/generate-configlist.sh' ],
command: [
shell,
meson.current_source_dir() / 'generate-configlist.sh',
meson.current_source_dir() / 'tools/generate-configlist.sh',
meson.current_source_dir(),
'@OUTPUT@',
'@DEPFILE@',
@@ -741,7 +744,7 @@ builtin_sources += custom_target(
output: 'hook-list.h',
command: [
shell,
meson.current_source_dir() + '/generate-hooklist.sh',
meson.current_source_dir() + '/tools/generate-hooklist.sh',
meson.current_source_dir(),
'@OUTPUT@',
],
@@ -1175,7 +1178,7 @@ endif
if not has_poll_h and not has_sys_poll_h
libgit_c_args += '-DNO_POLL'
libgit_sources += 'compat/poll/poll.c'
compat_sources += 'compat/poll/poll.c'
libgit_include_directories += 'compat/poll'
endif
@@ -1191,7 +1194,7 @@ endif
# implementation to threat things like drive prefixes specially.
if host_machine.system() == 'windows' or not compiler.has_header('libgen.h')
libgit_c_args += '-DNO_LIBGEN_H'
libgit_sources += 'compat/basename.c'
compat_sources += 'compat/basename.c'
endif
if compiler.has_header('paths.h')
@@ -1221,7 +1224,7 @@ if host_machine.system() != 'windows'
foreach symbol : ['inet_ntop', 'inet_pton', 'hstrerror']
if not compiler.has_function(symbol, dependencies: networking_dependencies)
libgit_c_args += '-DNO_' + symbol.to_upper()
libgit_sources += 'compat/' + symbol + '.c'
compat_sources += 'compat/' + symbol + '.c'
endif
endforeach
endif
@@ -1263,18 +1266,18 @@ else
endif
if host_machine.system() == 'darwin'
libgit_sources += 'compat/precompose_utf8.c'
compat_sources += 'compat/precompose_utf8.c'
libgit_c_args += '-DPRECOMPOSE_UNICODE'
libgit_c_args += '-DPROTECT_HFS_DEFAULT'
endif
# Configure general compatibility wrappers.
if host_machine.system() == 'cygwin'
libgit_sources += [
compat_sources += [
'compat/win32/path-utils.c',
]
elif host_machine.system() == 'windows'
libgit_sources += [
compat_sources += [
'compat/winansi.c',
'compat/win32/dirent.c',
'compat/win32/flush.c',
@@ -1301,20 +1304,20 @@ elif host_machine.system() == 'windows'
libgit_include_directories += 'compat/win32'
if compiler.get_id() == 'msvc'
libgit_include_directories += 'compat/vcbuild/include'
libgit_sources += 'compat/msvc.c'
compat_sources += 'compat/msvc.c'
else
libgit_sources += 'compat/mingw.c'
compat_sources += 'compat/mingw.c'
endif
endif
if host_machine.system() == 'linux'
libgit_sources += 'compat/linux/procinfo.c'
compat_sources += 'compat/linux/procinfo.c'
elif host_machine.system() == 'windows'
libgit_sources += 'compat/win32/trace2_win32_process_info.c'
compat_sources += 'compat/win32/trace2_win32_process_info.c'
elif host_machine.system() == 'darwin'
libgit_sources += 'compat/darwin/procinfo.c'
compat_sources += 'compat/darwin/procinfo.c'
else
libgit_sources += 'compat/stub/procinfo.c'
compat_sources += 'compat/stub/procinfo.c'
endif
if host_machine.system() == 'cygwin' or host_machine.system() == 'windows'
@@ -1327,13 +1330,13 @@ endif
# Configure the simple-ipc subsystem required fro the fsmonitor.
if host_machine.system() == 'windows'
libgit_sources += [
compat_sources += [
'compat/simple-ipc/ipc-shared.c',
'compat/simple-ipc/ipc-win32.c',
]
libgit_c_args += '-DSUPPORTS_SIMPLE_IPC'
else
libgit_sources += [
compat_sources += [
'compat/simple-ipc/ipc-shared.c',
'compat/simple-ipc/ipc-unix-socket.c',
]
@@ -1358,7 +1361,7 @@ if fsmonitor_backend != ''
libgit_c_args += '-DHAVE_FSMONITOR_DAEMON_BACKEND'
libgit_c_args += '-DHAVE_FSMONITOR_OS_SETTINGS'
libgit_sources += [
compat_sources += [
'compat/fsmonitor/fsm-health-' + fsmonitor_backend + '.c',
'compat/fsmonitor/fsm-ipc-' + fsmonitor_os + '.c',
'compat/fsmonitor/fsm-listen-' + fsmonitor_backend + '.c',
@@ -1374,7 +1377,7 @@ if not get_option('b_sanitize').contains('address') and get_option('regex').allo
if compiler.get_define('REG_ENHANCED', prefix: '#include <regex.h>') != ''
libgit_c_args += '-DUSE_ENHANCED_BASIC_REGULAR_EXPRESSIONS'
libgit_sources += 'compat/regcomp_enhanced.c'
compat_sources += 'compat/regcomp_enhanced.c'
endif
elif not get_option('regex').enabled()
libgit_c_args += [
@@ -1383,7 +1386,7 @@ elif not get_option('regex').enabled()
'-DNO_MBSUPPORT',
]
build_options_config.set('NO_REGEX', '1')
libgit_sources += 'compat/regex/regex.c'
compat_sources += 'compat/regex/regex.c'
libgit_include_directories += 'compat/regex'
else
error('Native regex support requested but not found')
@@ -1448,7 +1451,7 @@ else
if get_option('b_sanitize').contains('address') or get_option('b_sanitize').contains('leak')
libgit_c_args += '-DNO_MMAP'
libgit_sources += 'compat/mmap.c'
compat_sources += 'compat/mmap.c'
else
checkfuncs += { 'mmap': ['mmap.c'] }
endif
@@ -1458,7 +1461,7 @@ foreach func, impls : checkfuncs
if not compiler.has_function(func)
libgit_c_args += '-DNO_' + func.to_upper()
foreach impl : impls
libgit_sources += 'compat/' + impl
compat_sources += 'compat/' + impl
endforeach
endif
endforeach
@@ -1469,13 +1472,13 @@ endif
if not compiler.has_function('strdup')
libgit_c_args += '-DOVERRIDE_STRDUP'
libgit_sources += 'compat/strdup.c'
compat_sources += 'compat/strdup.c'
endif
if not compiler.has_function('qsort')
libgit_c_args += '-DINTERNAL_QSORT'
endif
libgit_sources += 'compat/qsort_s.c'
compat_sources += 'compat/qsort_s.c'
if compiler.has_function('getdelim')
libgit_c_args += '-DHAVE_GETDELIM'
@@ -1531,7 +1534,7 @@ if meson.can_run_host_binaries() and compiler.run('''
}
''', name: 'fread reads directories').returncode() == 0
libgit_c_args += '-DFREAD_READS_DIRECTORIES'
libgit_sources += 'compat/fopen.c'
compat_sources += 'compat/fopen.c'
endif
if not meson.is_cross_build() and fs.exists('/dev/tty')
@@ -1765,14 +1768,23 @@ else
endif
libgit = declare_dependency(
link_with: static_library('git',
sources: libgit_sources,
c_args: libgit_c_args + [
'-DGIT_VERSION_H="' + version_def_h.full_path() + '"',
],
dependencies: libgit_dependencies,
include_directories: libgit_include_directories,
),
link_with: [
static_library('compat',
sources: compat_sources,
c_args: libgit_c_args,
dependencies: libgit_dependencies,
include_directories: libgit_include_directories,
),
static_library('git',
sources: libgit_sources,
c_args: libgit_c_args + [
'-DGIT_VERSION_H="' + version_def_h.full_path() + '"',
],
c_pch: [ 'tools/precompiled.h' ],
dependencies: libgit_dependencies,
include_directories: libgit_include_directories,
),
],
compile_args: libgit_c_args,
dependencies: libgit_dependencies,
include_directories: libgit_include_directories,
@@ -1829,6 +1841,7 @@ test_dependencies = [ ]
git_builtin = executable('git',
sources: builtin_sources + 'git.c',
c_pch: [ 'tools/precompiled.h' ],
dependencies: [libgit_commonmain],
install: true,
install_dir: git_exec_path,
@@ -1979,7 +1992,7 @@ foreach script : scripts_sh
output: fs.stem(script),
command: [
shell,
meson.project_source_root() / 'generate-script.sh',
meson.project_source_root() / 'tools/generate-script.sh',
'@INPUT@',
'@OUTPUT@',
meson.project_build_root() / 'GIT-BUILD-OPTIONS',
@@ -2028,7 +2041,7 @@ if perl_features_enabled
generate_perl_command = [
shell,
meson.project_source_root() / 'generate-perl.sh',
meson.project_source_root() / 'tools/generate-perl.sh',
meson.project_build_root() / 'GIT-BUILD-OPTIONS',
git_version_file.full_path(),
perl_header,
@@ -2077,7 +2090,7 @@ if target_python.found()
output: fs.stem(script),
command: [
shell,
meson.project_source_root() / 'generate-python.sh',
meson.project_source_root() / 'tools/generate-python.sh',
meson.project_build_root() / 'GIT-BUILD-OPTIONS',
'@INPUT@',
'@OUTPUT@',
@@ -2169,6 +2182,7 @@ else
endif
subdir('contrib')
subdir('tools')
# Note that the target is intentionally configured after including the
# 'contrib' directory, as some tool there also have their own manpages.

7
tools/README.md Normal file
View File

@@ -0,0 +1,7 @@
Developer Tooling
-----------------
This directory is expected to contain all sorts of tooling that
relates to our build infrastructure. This includes scripts and
inputs required by our build systems, but also scripts that
developers are expected to run manually.

View File

@@ -38,7 +38,7 @@ that might be useful to developers.
So to aid these large scale refactorings, semantic patches can be used.
However we do not want to store them in the same place as the checks for
bad patterns, as then automated builds would fail.
That is why semantic patches 'contrib/coccinelle/*.pending.cocci'
That is why semantic patches 'tools/coccinelle/*.pending.cocci'
are ignored for checks, and can be applied using 'make coccicheck-pending'.
This allows to expose plans of pending large scale refactorings without

View File

@@ -30,7 +30,7 @@
# out of control.
#
# This along with the general incremental "make" support for
# "contrib/coccinelle" makes it viable to (re-)run coccicheck
# "tools/coccinelle" makes it viable to (re-)run coccicheck
# e.g. when merging integration branches.
#
# Note that the "--very-quiet" flag is currently critical. The cache
@@ -42,7 +42,7 @@
# to change, so just supply "--very-quiet" for now.
#
# To use this, simply set SPATCH to
# contrib/coccinelle/spatchcache. Then optionally set:
# tools/coccinelle/spatchcache. Then optionally set:
#
# [spatchCache]
# # Optional: path to a custom spatch
@@ -65,7 +65,7 @@
#
# redis-cli FLUSHALL
# <make && make coccicheck, as above>
# grep -hore HIT -e MISS -e SET -e NOCACHE -e CANTCACHE .build/contrib/coccinelle | sort | uniq -c
# grep -hore HIT -e MISS -e SET -e NOCACHE -e CANTCACHE .build/tools/coccinelle | sort | uniq -c
# 600 CANTCACHE
# 7365 MISS
# 7365 SET

1
tools/meson.build Normal file
View File

@@ -0,0 +1 @@
subdir('coccinelle')

1
tools/precompiled.h Normal file
View File

@@ -0,0 +1 @@
#include "git-compat-util.h"