123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- 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
|