@@ -191,30 +191,29 @@ project('git', 'c',
191191fs = import (' fs' )
192192
193193program_path = []
194- # Git for Windows provides all the tools we need to build Git.
195- if host_machine .system() == ' windows'
196- program_path += [ ' C:/Program Files/Git/bin' , ' C:/Program Files/Git/usr/bin' ]
194+ if get_option (' sane_tool_path' ).length() != 0
195+ program_path = get_option (' sane_tool_path' )
196+ elif host_machine .system() == ' windows'
197+ # Git for Windows provides all the tools we need to build Git.
198+ program_path = [ ' C:/Program Files/Git/bin' , ' C:/Program Files/Git/usr/bin' ]
197199endif
198200
199201cygpath = find_program (' cygpath' , dirs : program_path, required : false )
200202diff = find_program (' diff' , dirs : program_path)
203+ git = find_program (' git' , dirs : program_path, required : false )
204+ sed = find_program (' sed' , dirs : program_path)
201205shell = find_program (' sh' , dirs : program_path)
202206tar = find_program (' tar' , dirs : program_path)
203207
204- script_environment = environment ()
205- foreach tool : [' cat' , ' cut' , ' grep' , ' sed' , ' sort' , ' tr' , ' uname' ]
206- program = find_program (tool, dirs : program_path)
207- script_environment.prepend(' PATH' , fs.parent(program.full_path()))
208+ # Sanity-check that programs required for the build exist.
209+ foreach tool : [' cat' , ' cut' , ' grep' , ' sort' , ' tr' , ' uname' ]
210+ find_program (tool, dirs : program_path)
208211endforeach
209212
210- git = find_program (' git' , dirs : program_path, required : false )
211- if git.found()
212- script_environment.prepend(' PATH' , fs.parent(git.full_path()))
213- endif
214-
215- if get_option (' sane_tool_path' ) != ''
216- script_environment.prepend(' PATH' , get_option (' sane_tool_path' ))
217- endif
213+ script_environment = environment ()
214+ foreach path : program_path
215+ script_environment.prepend(' PATH' , path)
216+ endforeach
218217
219218# The environment used by GIT-VERSION-GEN. Note that we explicitly override
220219# environment variables that might be set by the user. This is by design so
@@ -479,6 +478,7 @@ libgit_sources = [
479478 ' userdiff.c' ,
480479 ' utf8.c' ,
481480 ' varint.c' ,
481+ ' version.c' ,
482482 ' versioncmp.c' ,
483483 ' walker.c' ,
484484 ' wildmatch.c' ,
678678 build_options_config.set(' WITH_BREAKING_CHANGES' , '' )
679679endif
680680
681- if get_option (' sane_tool_path' ) != ''
682- build_options_config.set_quoted(' BROKEN_PATH_FIX' , ' s|^\# @BROKEN_PATH_FIX@$|git_broken_path_fix "' + get_option (' sane_tool_path' ) + ' "|' )
681+ if get_option (' sane_tool_path' ).length() != 0
682+ sane_tool_path = (host_machine .system() == ' windows' ? ' ;' : ' :' ).join(get_option (' sane_tool_path' ))
683+ build_options_config.set_quoted(' BROKEN_PATH_FIX' , ' s|^\# @BROKEN_PATH_FIX@$|git_broken_path_fix "' + sane_tool_path + ' "|' )
683684else
684685 build_options_config.set_quoted(' BROKEN_PATH_FIX' , ' /^\# @BROKEN_PATH_FIX@$/d' )
685686endif
@@ -699,7 +700,6 @@ libgit_c_args = [
699700 ' -DETC_GITATTRIBUTES="' + get_option (' gitattributes' ) + ' "' ,
700701 ' -DETC_GITCONFIG="' + get_option (' gitconfig' ) + ' "' ,
701702 ' -DFALLBACK_RUNTIME_PREFIX="' + get_option (' prefix' ) + ' "' ,
702- ' -DGIT_EXEC_PATH="' + get_option (' prefix' ) / get_option (' libexecdir' ) / ' git-core"' ,
703703 ' -DGIT_HOST_CPU="' + host_machine .cpu_family() + ' "' ,
704704 ' -DGIT_HTML_PATH="' + get_option (' datadir' ) / ' doc/git-doc"' ,
705705 ' -DGIT_INFO_PATH="' + get_option (' infodir' ) + ' "' ,
@@ -963,7 +963,9 @@ if curl.found()
963963 use_curl_for_imap_send = true
964964 endif
965965
966- libgit_dependencies += curl
966+ # Most executables don't have to link against libcurl, but we still need its
967+ # include directories so that we can resolve LIBCURL_VERSION in "help.c".
968+ libgit_dependencies += curl.partial_dependency(includes : true )
967969 libgit_c_args += ' -DCURL_DISABLE_TYPECHECK'
968970 build_options_config.set(' NO_CURL' , '' )
969971else
@@ -1388,7 +1390,11 @@ if https_backend == 'auto' and security_framework.found()
13881390endif
13891391
13901392openssl_required = ' openssl' in [csprng_backend, https_backend, sha1_backend, sha1_unsafe_backend, sha256_backend]
1391- openssl = dependency (' openssl' , required : openssl_required, default_options : [' default_library=static' ])
1393+ openssl = dependency (' openssl' ,
1394+ required : openssl_required,
1395+ allow_fallback : openssl_required or https_backend == ' auto' ,
1396+ default_options : [' default_library=static' ],
1397+ )
13921398if https_backend == ' auto' and openssl.found()
13931399 https_backend = ' openssl'
13941400endif
@@ -1402,6 +1408,7 @@ elif https_backend == 'openssl'
14021408else
14031409 # We either couldn't find any dependencies with 'auto' or the user requested
14041410 # 'none'. Both cases are benign.
1411+ https_backend = ' none'
14051412endif
14061413
14071414if https_backend != ' openssl'
@@ -1501,6 +1508,7 @@ endif
15011508if get_option (' runtime_prefix' )
15021509 libgit_c_args += ' -DRUNTIME_PREFIX'
15031510 build_options_config.set(' RUNTIME_PREFIX' , ' true' )
1511+ git_exec_path = get_option (' libexecdir' ) / ' git-core'
15041512
15051513 if compiler.has_header(' mach-o/dyld.h' )
15061514 libgit_c_args += ' -DHAVE_NS_GET_EXECUTABLE_PATH'
@@ -1537,7 +1545,9 @@ if get_option('runtime_prefix')
15371545 endif
15381546else
15391547 build_options_config.set(' RUNTIME_PREFIX' , ' false' )
1548+ git_exec_path = get_option (' prefix' ) / get_option (' libexecdir' ) / ' git-core'
15401549endif
1550+ libgit_c_args += ' -DGIT_EXEC_PATH="' + git_exec_path + ' "'
15411551
15421552git_version_file = custom_target (
15431553 command : [
@@ -1568,32 +1578,18 @@ version_def_h = custom_target(
15681578 depends : [git_version_file],
15691579 env : version_gen_environment,
15701580)
1571-
1572- # Build a separate library for "version.c" so that we do not have to rebuild
1573- # everything when the current Git commit changes.
1574- libgit_version_library = static_library (' git-version' ,
1575- sources : [
1576- ' version.c' ,
1577- version_def_h,
1578- ],
1579- c_args : libgit_c_args + [
1580- ' -DGIT_VERSION_H="' + version_def_h.full_path() + ' "' ,
1581- ],
1582- dependencies : libgit_dependencies,
1583- include_directories : libgit_include_directories,
1584- )
1585-
1586- libgit_library = static_library (' git' ,
1587- sources : libgit_sources,
1588- c_args : libgit_c_args,
1589- link_with : libgit_version_library,
1590- dependencies : libgit_dependencies,
1591- include_directories : libgit_include_directories,
1592- )
1581+ libgit_sources += version_def_h
15931582
15941583libgit = declare_dependency (
1584+ link_with : static_library (' git' ,
1585+ sources : libgit_sources,
1586+ c_args : libgit_c_args + [
1587+ ' -DGIT_VERSION_H="' + version_def_h.full_path() + ' "' ,
1588+ ],
1589+ dependencies : libgit_dependencies,
1590+ include_directories : libgit_include_directories,
1591+ ),
15951592 compile_args : libgit_c_args,
1596- link_with : libgit_library,
15971593 dependencies : libgit_dependencies,
15981594 include_directories : libgit_include_directories,
15991595)
@@ -1634,97 +1630,98 @@ if host_machine.system() == 'windows'
16341630 error (' Unsupported compiler ' + compiler.get_id())
16351631 endif
16361632endif
1637- common_main_library = static_library (' common-main' ,
1638- sources : common_main_sources,
1639- c_args : libgit_c_args,
1640- dependencies : libgit_dependencies,
1641- include_directories : libgit_include_directories,
1642- )
1643- common_main = declare_dependency (
1644- link_with : common_main_library,
1633+
1634+ libgit_commonmain = declare_dependency (
1635+ link_with : static_library (' common-main' ,
1636+ sources : common_main_sources,
1637+ dependencies : [ libgit ],
1638+ ),
16451639 link_args : common_main_link_args,
1640+ dependencies : [ libgit ],
16461641)
16471642
16481643bin_wrappers = [ ]
16491644test_dependencies = [ ]
16501645
1651- git = executable (' git' ,
1646+ git_builtin = executable (' git' ,
16521647 sources : builtin_sources + ' git.c' ,
1653- dependencies : [libgit, common_main ],
1648+ dependencies : [libgit_commonmain ],
16541649 install : true ,
16551650 install_dir : get_option (' libexecdir' ) / ' git-core' ,
16561651)
1657- bin_wrappers += git
1652+ bin_wrappers += git_builtin
16581653
16591654test_dependencies += executable (' git-daemon' ,
16601655 sources : ' daemon.c' ,
1661- dependencies : [libgit, common_main ],
1656+ dependencies : [libgit_commonmain ],
16621657 install : true ,
16631658 install_dir : get_option (' libexecdir' ) / ' git-core' ,
16641659)
16651660
16661661test_dependencies += executable (' git-sh-i18n--envsubst' ,
16671662 sources : ' sh-i18n--envsubst.c' ,
1668- dependencies : [libgit, common_main ],
1663+ dependencies : [libgit_commonmain ],
16691664 install : true ,
16701665 install_dir : get_option (' libexecdir' ) / ' git-core' ,
16711666)
16721667
16731668bin_wrappers += executable (' git-shell' ,
16741669 sources : ' shell.c' ,
1675- dependencies : [libgit, common_main ],
1670+ dependencies : [libgit_commonmain ],
16761671 install : true ,
16771672 install_dir : get_option (' libexecdir' ) / ' git-core' ,
16781673)
16791674
16801675test_dependencies += executable (' git-http-backend' ,
16811676 sources : ' http-backend.c' ,
1682- dependencies : [libgit, common_main ],
1677+ dependencies : [libgit_commonmain ],
16831678 install : true ,
16841679 install_dir : get_option (' libexecdir' ) / ' git-core' ,
16851680)
16861681
16871682bin_wrappers += executable (' scalar' ,
16881683 sources : ' scalar.c' ,
1689- dependencies : [libgit, common_main ],
1684+ dependencies : [libgit_commonmain ],
16901685 install : true ,
16911686 install_dir : get_option (' libexecdir' ) / ' git-core' ,
16921687)
16931688
16941689if get_option (' curl' ).enabled()
1695- curl_sources = [
1696- ' http.c' ,
1697- ' http-walker.c' ,
1698- ]
1690+ libgit_curl = declare_dependency (
1691+ sources : [
1692+ ' http.c' ,
1693+ ' http-walker.c' ,
1694+ ],
1695+ dependencies : [libgit_commonmain, curl],
1696+ )
16991697
1700- git_remote_http = executable (' git-remote-http' ,
1701- sources : curl_sources + ' remote-curl.c' ,
1702- dependencies : [libgit, common_main ],
1698+ test_dependencies + = executable (' git-remote-http' ,
1699+ sources : ' remote-curl.c' ,
1700+ dependencies : [libgit_curl ],
17031701 install : true ,
17041702 install_dir : get_option (' libexecdir' ) / ' git-core' ,
17051703 )
1706- test_dependencies += git_remote_http
17071704
17081705 test_dependencies += executable (' git-http-fetch' ,
1709- sources : curl_sources + ' http-fetch.c' ,
1710- dependencies : [libgit, common_main ],
1706+ sources : ' http-fetch.c' ,
1707+ dependencies : [libgit_curl ],
17111708 install : true ,
17121709 install_dir : get_option (' libexecdir' ) / ' git-core' ,
17131710 )
17141711
17151712 if expat.found()
17161713 test_dependencies += executable (' git-http-push' ,
1717- sources : curl_sources + ' http-push.c' ,
1718- dependencies : [libgit, common_main ],
1714+ sources : ' http-push.c' ,
1715+ dependencies : [libgit_curl ],
17191716 install : true ,
17201717 install_dir : get_option (' libexecdir' ) / ' git-core' ,
17211718 )
17221719 endif
17231720
17241721 foreach alias : [ ' git-remote-https' , ' git-remote-ftp' , ' git-remote-ftps' ]
17251722 test_dependencies += executable (alias,
1726- objects : git_remote_http.extract_all_objects( recursive : false ) ,
1727- dependencies : [libgit, common_main ],
1723+ sources : ' remote-curl.c ' ,
1724+ dependencies : [libgit_curl ],
17281725 )
17291726
17301727 install_symlink(alias + executable_suffix,
@@ -1734,22 +1731,17 @@ if get_option('curl').enabled()
17341731 endforeach
17351732endif
17361733
1737- imap_send_sources = [' imap-send.c' ]
1738- if use_curl_for_imap_send
1739- imap_send_sources += curl_sources
1740- endif
1741-
17421734test_dependencies += executable (' git-imap-send' ,
1743- sources : imap_send_sources ,
1744- dependencies : [libgit, common_main ],
1735+ sources : ' imap-send.c ' ,
1736+ dependencies : [ use_curl_for_imap_send ? libgit_curl : libgit_commonmain ],
17451737 install : true ,
17461738 install_dir : get_option (' libexecdir' ) / ' git-core' ,
17471739)
17481740
17491741foreach alias : [ ' git-receive-pack' , ' git-upload-archive' , ' git-upload-pack' ]
17501742 bin_wrappers += executable (alias,
1751- objects : git .extract_all_objects(recursive : false ),
1752- dependencies : [libgit, common_main ],
1743+ objects : git_builtin .extract_all_objects(recursive : false ),
1744+ dependencies : [libgit_commonmain ],
17531745 )
17541746
17551747 install_symlink(alias + executable_suffix,
0 commit comments