package An official xmake package repository
https://xrepo.xmake.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
5.9 KiB
170 lines
5.9 KiB
function _fix_overlong_make_recipe(package) |
|
-- In the MSYS environment, the make recipe can be too long to execute. |
|
-- This patch is adapted from OpenSSL 3. |
|
-- For more details, see: https://github.com/openssl/openssl/issues/12116 |
|
io.gsub("Configurations/00-base-templates.conf", -- replace default AR |
|
|
|
"DEFAULTS%s-=>%s-{" .. |
|
"(.-)".. |
|
[[AR%s-=>%s-"%S-"%s-,]].. -- AR => "ar", |
|
"(.-)}", |
|
|
|
"DEFAULTS => {".. |
|
"%1".. |
|
[[AR => "(unused)",]] .. |
|
"%2}") |
|
io.gsub("Configurations/00-base-templates.conf", -- replace default ARFLAGS |
|
|
|
"DEFAULTS%s-=>%s-{" .. |
|
"(.-)".. |
|
[[ARFLAGS%s-=>%s-"%S-"%s-,]].. -- ARFLAGS => "r", |
|
"(.-)}", |
|
|
|
"DEFAULTS => {".. |
|
"%1".. |
|
[[ARFLAGS => "(unused)",]] .. |
|
"%2}") |
|
io.gsub("Configurations/00-base-templates.conf", -- replace BASE_unix ARFLAGS |
|
|
|
"BASE_unix%s-=>%s-{" .. |
|
"(.-)".. |
|
[[ARFLAGS%s-=>%s-"%S-"%s-,]].. -- ARFLAGS => "r", |
|
"(.-)}", |
|
|
|
"BASE_unix => {".. |
|
"%1".. |
|
[[ARFLAGS => "qc",]] .. |
|
"%2}") |
|
io.gsub("Configurations/unix-Makefile.tmpl", -- insert fill_lines function |
|
|
|
"(sub%s-dependmagic%s-{)" .. |
|
"(.-)".. |
|
"}%s-'';", |
|
|
|
"%1".. |
|
"%2".. |
|
"}\n".. |
|
[[ |
|
sub fill_lines { |
|
my $item_sep = shift; # string |
|
my $line_length = shift; # number of chars |
|
|
|
my @result = (); |
|
my $resultpos = 0; |
|
|
|
foreach (@_) { |
|
my $fill_line = $result[$resultpos] // ''; |
|
my $newline = |
|
($fill_line eq '' ? '' : $fill_line . $item_sep) . $_; |
|
|
|
if (length($newline) > $line_length) { |
|
# If this is a single item and the intended result line |
|
# is empty, we put it there anyway |
|
if ($fill_line eq '') { |
|
$result[$resultpos++] = $newline; |
|
} else { |
|
$result[++$resultpos] = $_; |
|
} |
|
} else { |
|
$result[$resultpos] = $newline; |
|
} |
|
} |
|
return @result; |
|
} |
|
]].. |
|
[['';]]) |
|
|
|
io.gsub("Configurations/unix-Makefile.tmpl", -- change the way we handle dependencies |
|
|
|
"sub%s-libobj2shlib%s-{" .. |
|
"(.-)".. |
|
[[my%s-%$objs.-;]].. -- my $objs = join(" ", @objs); |
|
"(.-)}", |
|
|
|
"sub libobj2shlib {".. |
|
"%1".. |
|
[[my $objs = |
|
join(" \\\n\t\t", fill_lines(' ', $COLUMNS - 16, @objs));]] .. |
|
"%2}") |
|
io.gsub("Configurations/unix-Makefile.tmpl", -- change the way we handle dependencies |
|
|
|
"sub%s-libobj2shlib%s-{" .. |
|
"(.-)".. |
|
[[my%s-%$deps.-;]].. -- my $deps = join(" ", @objs, @defs, @deps); |
|
"(.-)}", |
|
|
|
"sub libobj2shlib {".. |
|
"%1".. |
|
[[my @fulldeps = (@objs, @defs, @deps); |
|
my $fulldeps = |
|
join(" \\\n" . ' ' x (length($full) + 2), |
|
fill_lines(' ', $COLUMNS - length($full) - 2, @fulldeps));]] .. |
|
"%2}") |
|
io.gsub("Configurations/unix-Makefile.tmpl", |
|
|
|
"sub%s-libobj2shlib%s-{" .. |
|
"(.-)".. |
|
[[%$target:%s-%$deps]].. -- $target: $deps |
|
"(.-)}", |
|
|
|
"sub libobj2shlib {".. |
|
"%1".. |
|
[[$target: $fulldeps]] .. |
|
"%2}") |
|
io.gsub("Configurations/unix-Makefile.tmpl", |
|
|
|
"sub%s-obj2lib%s-{" .. |
|
"(.-)".. |
|
[[my%s-%$objs.-;]].. -- my $objs = join(" ", @objs); |
|
"(.-)}", |
|
|
|
"sub obj2lib {".. |
|
"%1".. |
|
[[my $deps = join(" \\\n" . ' ' x (length($lib) + 2), |
|
fill_lines(' ', $COLUMNS - length($lib) - 2, @objs)); |
|
my $max_per_call = 250; |
|
my @objs_grouped; |
|
push @objs_grouped, join(" ", splice @objs, 0, $max_per_call) while @objs; |
|
my $fill_lib = |
|
join("\n\t", (map { "\$(AR) \$(ARFLAGS) $lib$libext $_" } @objs_grouped));]] .. |
|
"%2}") |
|
io.gsub("Configurations/unix-Makefile.tmpl", |
|
|
|
"sub%s-obj2lib%s-{" .. |
|
"(.-)".. |
|
[[%$lib%$libext:.-]].. -- $lib$libext: $objs |
|
"EOF", |
|
|
|
"sub obj2lib {".. |
|
"%1".. |
|
"$lib$libext: $deps\n" .. |
|
'\t' .. [[\$(RM) $lib$libext]] ..'\n' .. |
|
'\t' .. [[$fill_lib]] ..'\n' .. |
|
'\t' .. [[\$(RANLIB) \$\@ || echo Never mind.]] .. '\n' .. |
|
"EOF") |
|
end |
|
|
|
function _remove_unused_pod_usage(package) |
|
-- Perl in "Git for Windows" lacks Pod::Usage, which is only used for help messages in the Configure script. |
|
-- It is not needed for the build and can be safely removed to avoid errors from the missing module. |
|
if package:version():le("1.1.0") then |
|
return |
|
end |
|
io.replace("Configure", "use Pod::Usage;", "", {plain = true}) |
|
io.replace("Configure", "pod2usage.-;", "") |
|
end |
|
|
|
function _replace_NUL_with_null(package) |
|
-- The Configure script uses "NUL" to redirect output on Windows when checking NASM. |
|
-- Creating a file named "NUL" can cause issues because "NUL" is a reserved name in Windows. |
|
if package:version():le("1.1.0") then |
|
return |
|
end |
|
io.replace("Configurations/10-main.conf", "NUL", "null", {plain = true}) |
|
end |
|
|
|
function main(package) |
|
_remove_unused_pod_usage(package) |
|
_replace_NUL_with_null(package) |
|
_fix_overlong_make_recipe(package) |
|
end
|
|
|