@@ -191,30 +191,31 @@ project('git', 'c',
191
191
fs = import (' fs' )
192
192
193
193
program_path = []
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' ]
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' ]
199
197
endif
200
198
201
199
cygpath = find_program (' cygpath' , dirs : program_path, required : false )
202
200
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
201
shell = find_program (' sh' , dirs : program_path)
206
202
tar = find_program (' tar' , dirs : program_path)
207
203
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)
211
- endforeach
212
-
213
204
script_environment = environment ()
214
- foreach path : program_path
215
- script_environment.prepend(' PATH' , path)
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()))
216
208
endforeach
217
209
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
218
+
218
219
# The environment used by GIT-VERSION-GEN. Note that we explicitly override
219
220
# environment variables that might be set by the user. This is by design so
220
221
# that we always use whatever Meson has configured instead of what is present
@@ -478,7 +479,6 @@ libgit_sources = [
478
479
' userdiff.c' ,
479
480
' utf8.c' ,
480
481
' varint.c' ,
481
- ' version.c' ,
482
482
' versioncmp.c' ,
483
483
' walker.c' ,
484
484
' wildmatch.c' ,
678
678
build_options_config.set(' WITH_BREAKING_CHANGES' , '' )
679
679
endif
680
680
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 + ' "|' )
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' ) + ' "|' )
684
683
else
685
684
build_options_config.set_quoted(' BROKEN_PATH_FIX' , ' /^\# @BROKEN_PATH_FIX@$/d' )
686
685
endif
@@ -700,6 +699,7 @@ libgit_c_args = [
700
699
' -DETC_GITATTRIBUTES="' + get_option (' gitattributes' ) + ' "' ,
701
700
' -DETC_GITCONFIG="' + get_option (' gitconfig' ) + ' "' ,
702
701
' -DFALLBACK_RUNTIME_PREFIX="' + get_option (' prefix' ) + ' "' ,
702
+ ' -DGIT_EXEC_PATH="' + get_option (' prefix' ) / get_option (' libexecdir' ) / ' git-core"' ,
703
703
' -DGIT_HOST_CPU="' + host_machine .cpu_family() + ' "' ,
704
704
' -DGIT_HTML_PATH="' + get_option (' datadir' ) / ' doc/git-doc"' ,
705
705
' -DGIT_INFO_PATH="' + get_option (' infodir' ) + ' "' ,
@@ -963,9 +963,7 @@ if curl.found()
963
963
use_curl_for_imap_send = true
964
964
endif
965
965
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 )
966
+ libgit_dependencies += curl
969
967
libgit_c_args += ' -DCURL_DISABLE_TYPECHECK'
970
968
build_options_config.set(' NO_CURL' , '' )
971
969
else
@@ -1390,11 +1388,7 @@ if https_backend == 'auto' and security_framework.found()
1390
1388
endif
1391
1389
1392
1390
openssl_required = ' openssl' in [csprng_backend, https_backend, sha1_backend, sha1_unsafe_backend, sha256_backend]
1393
- openssl = dependency (' openssl' ,
1394
- required : openssl_required,
1395
- allow_fallback : openssl_required or https_backend == ' auto' ,
1396
- default_options : [' default_library=static' ],
1397
- )
1391
+ openssl = dependency (' openssl' , required : openssl_required, default_options : [' default_library=static' ])
1398
1392
if https_backend == ' auto' and openssl.found()
1399
1393
https_backend = ' openssl'
1400
1394
endif
@@ -1408,7 +1402,6 @@ elif https_backend == 'openssl'
1408
1402
else
1409
1403
# We either couldn't find any dependencies with 'auto' or the user requested
1410
1404
# 'none'. Both cases are benign.
1411
- https_backend = ' none'
1412
1405
endif
1413
1406
1414
1407
if https_backend != ' openssl'
@@ -1508,7 +1501,6 @@ endif
1508
1501
if get_option (' runtime_prefix' )
1509
1502
libgit_c_args += ' -DRUNTIME_PREFIX'
1510
1503
build_options_config.set(' RUNTIME_PREFIX' , ' true' )
1511
- git_exec_path = get_option (' libexecdir' ) / ' git-core'
1512
1504
1513
1505
if compiler.has_header(' mach-o/dyld.h' )
1514
1506
libgit_c_args += ' -DHAVE_NS_GET_EXECUTABLE_PATH'
@@ -1545,9 +1537,7 @@ if get_option('runtime_prefix')
1545
1537
endif
1546
1538
else
1547
1539
build_options_config.set(' RUNTIME_PREFIX' , ' false' )
1548
- git_exec_path = get_option (' prefix' ) / get_option (' libexecdir' ) / ' git-core'
1549
1540
endif
1550
- libgit_c_args += ' -DGIT_EXEC_PATH="' + git_exec_path + ' "'
1551
1541
1552
1542
git_version_file = custom_target (
1553
1543
command : [
@@ -1578,18 +1568,32 @@ version_def_h = custom_target(
1578
1568
depends : [git_version_file],
1579
1569
env : version_gen_environment,
1580
1570
)
1581
- libgit_sources += version_def_h
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
+ )
1582
1593
1583
1594
libgit = 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
- ),
1592
1595
compile_args : libgit_c_args,
1596
+ link_with : libgit_library,
1593
1597
dependencies : libgit_dependencies,
1594
1598
include_directories : libgit_include_directories,
1595
1599
)
@@ -1630,95 +1634,97 @@ if host_machine.system() == 'windows'
1630
1634
error (' Unsupported compiler ' + compiler.get_id())
1631
1635
endif
1632
1636
endif
1633
-
1634
- libgit_commonmain = declare_dependency (
1637
+ common_main_library = static_library (' common-main' ,
1635
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,
1636
1645
link_args : common_main_link_args,
1637
- dependencies : [ libgit ],
1638
1646
)
1639
1647
1640
1648
bin_wrappers = [ ]
1641
1649
test_dependencies = [ ]
1642
1650
1643
- git_builtin = executable (' git' ,
1651
+ git = executable (' git' ,
1644
1652
sources : builtin_sources + ' git.c' ,
1645
- dependencies : [libgit_commonmain ],
1653
+ dependencies : [libgit, common_main ],
1646
1654
install : true ,
1647
1655
install_dir : get_option (' libexecdir' ) / ' git-core' ,
1648
1656
)
1649
- bin_wrappers += git_builtin
1657
+ bin_wrappers += git
1650
1658
1651
1659
test_dependencies += executable (' git-daemon' ,
1652
1660
sources : ' daemon.c' ,
1653
- dependencies : [libgit_commonmain ],
1661
+ dependencies : [libgit, common_main ],
1654
1662
install : true ,
1655
1663
install_dir : get_option (' libexecdir' ) / ' git-core' ,
1656
1664
)
1657
1665
1658
1666
test_dependencies += executable (' git-sh-i18n--envsubst' ,
1659
1667
sources : ' sh-i18n--envsubst.c' ,
1660
- dependencies : [libgit_commonmain ],
1668
+ dependencies : [libgit, common_main ],
1661
1669
install : true ,
1662
1670
install_dir : get_option (' libexecdir' ) / ' git-core' ,
1663
1671
)
1664
1672
1665
1673
bin_wrappers += executable (' git-shell' ,
1666
1674
sources : ' shell.c' ,
1667
- dependencies : [libgit_commonmain ],
1675
+ dependencies : [libgit, common_main ],
1668
1676
install : true ,
1669
1677
install_dir : get_option (' libexecdir' ) / ' git-core' ,
1670
1678
)
1671
1679
1672
1680
test_dependencies += executable (' git-http-backend' ,
1673
1681
sources : ' http-backend.c' ,
1674
- dependencies : [libgit_commonmain ],
1682
+ dependencies : [libgit, common_main ],
1675
1683
install : true ,
1676
1684
install_dir : get_option (' libexecdir' ) / ' git-core' ,
1677
1685
)
1678
1686
1679
1687
bin_wrappers += executable (' scalar' ,
1680
1688
sources : ' scalar.c' ,
1681
- dependencies : [libgit_commonmain ],
1689
+ dependencies : [libgit, common_main ],
1682
1690
install : true ,
1683
1691
install_dir : get_option (' libexecdir' ) / ' git-core' ,
1684
1692
)
1685
1693
1686
1694
if get_option (' curl' ).enabled()
1687
- libgit_curl = declare_dependency (
1688
- sources : [
1689
- ' http.c' ,
1690
- ' http-walker.c' ,
1691
- ],
1692
- dependencies : [libgit_commonmain, curl],
1693
- )
1695
+ curl_sources = [
1696
+ ' http.c' ,
1697
+ ' http-walker.c' ,
1698
+ ]
1694
1699
1695
- test_dependencies + = executable (' git-remote-http' ,
1696
- sources : ' remote-curl.c' ,
1697
- dependencies : [libgit_curl ],
1700
+ git_remote_http = executable (' git-remote-http' ,
1701
+ sources : curl_sources + ' remote-curl.c' ,
1702
+ dependencies : [libgit, common_main ],
1698
1703
install : true ,
1699
1704
install_dir : get_option (' libexecdir' ) / ' git-core' ,
1700
1705
)
1706
+ test_dependencies += git_remote_http
1701
1707
1702
1708
test_dependencies += executable (' git-http-fetch' ,
1703
- sources : ' http-fetch.c' ,
1704
- dependencies : [libgit_curl ],
1709
+ sources : curl_sources + ' http-fetch.c' ,
1710
+ dependencies : [libgit, common_main ],
1705
1711
install : true ,
1706
1712
install_dir : get_option (' libexecdir' ) / ' git-core' ,
1707
1713
)
1708
1714
1709
1715
if expat.found()
1710
1716
test_dependencies += executable (' git-http-push' ,
1711
- sources : ' http-push.c' ,
1712
- dependencies : [libgit_curl ],
1717
+ sources : curl_sources + ' http-push.c' ,
1718
+ dependencies : [libgit, common_main ],
1713
1719
install : true ,
1714
1720
install_dir : get_option (' libexecdir' ) / ' git-core' ,
1715
1721
)
1716
1722
endif
1717
1723
1718
1724
foreach alias : [ ' git-remote-https' , ' git-remote-ftp' , ' git-remote-ftps' ]
1719
1725
test_dependencies += executable (alias,
1720
- sources : ' remote-curl.c ' ,
1721
- dependencies : [libgit_curl ],
1726
+ objects : git_remote_http.extract_all_objects( recursive : false ) ,
1727
+ dependencies : [libgit, common_main ],
1722
1728
)
1723
1729
1724
1730
install_symlink(alias + executable_suffix,
@@ -1728,17 +1734,22 @@ if get_option('curl').enabled()
1728
1734
endforeach
1729
1735
endif
1730
1736
1737
+ imap_send_sources = [' imap-send.c' ]
1738
+ if use_curl_for_imap_send
1739
+ imap_send_sources += curl_sources
1740
+ endif
1741
+
1731
1742
test_dependencies += executable (' git-imap-send' ,
1732
- sources : ' imap-send.c ' ,
1733
- dependencies : [ use_curl_for_imap_send ? libgit_curl : libgit_commonmain ],
1743
+ sources : imap_send_sources ,
1744
+ dependencies : [libgit, common_main ],
1734
1745
install : true ,
1735
1746
install_dir : get_option (' libexecdir' ) / ' git-core' ,
1736
1747
)
1737
1748
1738
1749
foreach alias : [ ' git-receive-pack' , ' git-upload-archive' , ' git-upload-pack' ]
1739
1750
bin_wrappers += executable (alias,
1740
- objects : git_builtin .extract_all_objects(recursive : false ),
1741
- dependencies : [libgit],
1751
+ objects : git .extract_all_objects(recursive : false ),
1752
+ dependencies : [libgit, common_main ],
1742
1753
)
1743
1754
1744
1755
install_symlink(alias + executable_suffix,
0 commit comments