155
# These machine files can be passed to `meson setup` via the `--native-file`
156
# option.
157
#
158
+# Cross compilation
159
+# =================
160
+#
161
+# Machine files can also be used in the context of cross-compilation to
162
+# describe the target machine as well as the cross-compiler toolchain that
163
+# shall be used. An example machine file could look like the following:
164
+#
165
+# [binaries]
166
+# c = 'x86_64-w64-mingw32-gcc'
167
+# cpp = 'x86_64-w64-mingw32-g++'
168
+# ar = 'x86_64-w64-mingw32-ar'
169
+# windres = 'x86_64-w64-mingw32-windres'
170
+# strip = 'x86_64-w64-mingw32-strip'
171
+# exe_wrapper = 'wine64'
172
+# sh = 'C:/Program Files/Git for Windows/usr/bin/sh.exe'
173
+#
174
+# [host_machine]
175
+# system = 'windows'
176
+# cpu_family = 'x86_64'
177
+# cpu = 'x86_64'
178
+# endian = 'little'
179
+#
180
+# These machine files can be passed to `meson setup` via the `--cross-file`
181
+# option.
182
+#
183
+# Note that next to the cross-compiler toolchain, the `[binaries]` section is
184
+# also used to locate a couple of binaries that will be built into Git. This
185
+# includes `sh`, `python` and `perl`, so when cross-compiling Git you likely
186
+# want to set these binary paths in addition to the cross-compiler toolchain
187
+# binaries.
188
+#
189
# Subproject wrappers
190
# ===================
191
#
204
# The version is only of cosmetic nature, so if we cannot find a shell yet we
205
# simply don't set up a version at all. This may be the case for example on
206
# Windows systems, where we first have to bootstrap the host environment.
176
- version: find_program('sh', required: false).found() ? run_command(
207
+ version: find_program('sh', native: true, required: false).found() ? run_command(
208
'GIT-VERSION-GEN', meson.current_source_dir(), '--format=@GIT_VERSION@',
209
capture: true,
210
check: true,
229
program_path = [ 'C:/Program Files/Git/bin', 'C:/Program Files/Git/usr/bin' ]
230
endif
231
201
-cygpath = find_program('cygpath', dirs: program_path, required: false)
202
-diff = find_program('diff', dirs: program_path)
203
-git = find_program('git', dirs: program_path, required: false)
204
-sed = find_program('sed', dirs: program_path)
205
-shell = find_program('sh', dirs: program_path)
206
-tar = find_program('tar', dirs: program_path)
232
+cygpath = find_program('cygpath', dirs: program_path, native: true, required: false)
233
+diff = find_program('diff', dirs: program_path, native: true)
234
+git = find_program('git', dirs: program_path, native: true, required: false)
235
+sed = find_program('sed', dirs: program_path, native: true)
236
+shell = find_program('sh', dirs: program_path, native: true)
237
+tar = find_program('tar', dirs: program_path, native: true)
238
+
239
+target_shell = find_program('sh', dirs: program_path, native: false)
240
241
# Sanity-check that programs required for the build exist.
242
foreach tool : ['cat', 'cut', 'grep', 'sort', 'tr', 'uname']
210
- find_program(tool, dirs: program_path)
243
+ find_program(tool, dirs: program_path, native: true)
244
endforeach
245
246
script_environment = environment()
739
'-DGIT_LOCALE_PATH="' + get_option('localedir') + '"',
740
'-DGIT_MAN_PATH="' + get_option('mandir') + '"',
741
'-DPAGER_ENV="' + get_option('pager_environment') + '"',
709
- '-DSHELL_PATH="' + fs.as_posix(shell.full_path()) + '"',
742
+ '-DSHELL_PATH="' + fs.as_posix(target_shell.full_path()) + '"',
743
]
744
libgit_include_directories = [ '.' ]
745
libgit_dependencies = [ ]
794
build_options_config.set_quoted('X', executable_suffix)
795
796
python = import('python').find_installation('python3', required: get_option('python'))
797
+target_python = find_program('python3', native: false, required: python.found())
798
if python.found()
799
build_options_config.set('NO_PYTHON', '')
800
else
824
# which we can do starting with Meson 1.5.0 and newer, or we have to
825
# match against the minor version.
826
if meson.version().version_compare('>=1.5.0')
793
- perl = find_program('perl', dirs: program_path, required: perl_required, version: '>=5.26.0', version_argument: '-V:version')
827
+ perl = find_program('perl', dirs: program_path, native: true, required: perl_required, version: '>=5.26.0', version_argument: '-V:version')
828
+ target_perl = find_program('perl', dirs: program_path, native: false, required: perl.found(), version: '>=5.26.0', version_argument: '-V:version')
829
else
795
- perl = find_program('perl', dirs: program_path, required: perl_required, version: '>=26')
830
+ perl = find_program('perl', dirs: program_path, native: true, required: perl_required, version: '>=26')
831
+ target_perl = find_program('perl', dirs: program_path, native: false, required: perl.found(), version: '>=26')
832
endif
833
perl_features_enabled = perl.found() and get_option('perl').allowed()
834
if perl_features_enabled
879
build_options_config.set('NO_PTHREADS', '1')
880
endif
881
846
-msgfmt = find_program('msgfmt', dirs: program_path, required: false)
882
+msgfmt = find_program('msgfmt', dirs: program_path, native: true, required: false)
883
gettext_option = get_option('gettext').disable_auto_if(not msgfmt.found())
884
if not msgfmt.found() and gettext_option.enabled()
885
error('Internationalization via libintl requires msgfmt')
2010
'GIT_TEST_TEMPLATE_DIR': meson.project_build_root() / 'templates',
2011
'GIT_TEST_TEXTDOMAINDIR': meson.project_build_root() / 'po',
2012
'PAGER_ENV': get_option('pager_environment'),
1977
- 'PERL_PATH': perl.found() ? perl.full_path() : '',
1978
- 'PYTHON_PATH': python.found () ? python.full_path() : '',
1979
- 'SHELL_PATH': shell.full_path(),
2013
+ 'PERL_PATH': target_perl.found() ? target_perl.full_path() : '',
2014
+ 'PYTHON_PATH': target_python.found () ? target_python.full_path() : '',
2015
+ 'SHELL_PATH': target_shell.full_path(),
2016
'TAR': tar.full_path(),
2017
'TEST_OUTPUT_DIRECTORY': test_output_directory,
2018
'TEST_SHELL_PATH': shell.full_path(),