mirror of
https://github.com/chromebrew/chromebrew.git
synced 2026-01-06 22:24:12 -05:00
226 lines
8.9 KiB
Ruby
226 lines
8.9 KiB
Ruby
require 'package'
|
|
|
|
# This is needed so the installer finds this glibc version first when it is used in the newer installs.
|
|
# rubocop:disable Style/UnlessElse
|
|
unless CREW_PRE_GLIBC_STANDALONE
|
|
# rubocop:enable Style/UnlessElse
|
|
class Glibc < Package
|
|
description 'The GNU C Library project provides the core libraries for GNU/Linux systems.'
|
|
homepage 'https://www.gnu.org/software/libc/'
|
|
version '2.41-5'
|
|
license 'LGPL-2.1+, BSD, HPND, ISC, inner-net, rc, and PCRE'
|
|
compatibility 'all'
|
|
source_url 'https://sourceware.org/git/glibc.git'
|
|
git_hashtag '515d4166f4dbcf43b1568e3f63a19d9a92b2d50e' # Build from latest commit in the stable branch.
|
|
# source_url "https://ftpmirror.gnu.org/glibc/glibc-#{version.partition('-')[0]}.tar.xz"
|
|
# source_sha256 'a5a26b22f545d6b7d7b3dd828e11e428f24f4fac43c934fb071b6a7d0828e901'
|
|
binary_compression 'tar.zst'
|
|
|
|
binary_sha256({
|
|
aarch64: '8d092cdeeaf3b321b64b31cb76aa3813adf8e73416f4db557d41f0c0811e0131',
|
|
armv7l: '8d092cdeeaf3b321b64b31cb76aa3813adf8e73416f4db557d41f0c0811e0131',
|
|
i686: '8c2430f690f468f33dc849cd0b2163dfadf187ff1cc3e33f1d20cbfb06572ec3',
|
|
x86_64: '50729b68b70aceb95f467812950fc58ec29e3e8b184f95d7c7b4ce7cb2d53946'
|
|
})
|
|
|
|
depends_on 'crew_preload' # L
|
|
depends_on 'gawk' => :build
|
|
depends_on 'libidn2' => :build
|
|
depends_on 'make' => :build
|
|
depends_on 'patchelf' => :build
|
|
depends_on 'texinfo' => :build
|
|
depends_on 'libxcrypt' # Latest glibc removed libcrypt.so, add this for backward compatibility
|
|
|
|
conflicts_ok
|
|
no_env_options
|
|
no_shrink
|
|
print_source_bashrc
|
|
|
|
def self.patch
|
|
system 'git config --global advice.detachedHead false'
|
|
system "git clone --depth=1 https://github.com/chromebrew/crew-package-glibc -b #{version}"
|
|
|
|
Dir.glob('crew-package-glibc/patches/*.patch') do |patch|
|
|
puts "Applying #{patch}...".yellow
|
|
system 'patch', '-p1', '-i', patch
|
|
end
|
|
system 'filefix'
|
|
|
|
# These are the only locales we want.
|
|
@locales = %w[C cs_CZ de_DE en es_MX fa_IR fr_FR it_IT ja_JP ru_RU tr_TR zh].to_set
|
|
puts 'Paring locales to a minimal set before build.'.lightblue
|
|
|
|
localetypes = `awk -F '/' '{print $2}' localedata/SUPPORTED | sort -u | awk '{print $1}'`.split.flat_map(&:split)
|
|
localetypes_sed = localetypes.join('|')
|
|
Dir['localedata/{*.in,locales/*}'].compact.each do |f|
|
|
g = File.basename(f).gsub(/.UTF-8.*.in/, '').gsub(/.ISO-8859-.*.in/, '')
|
|
h = g.gsub(/_.*/, '')
|
|
locale_test = [g, h].uniq
|
|
# Just check to see if the set difference is smaller than the
|
|
# original set of locales.
|
|
if (@locales - locale_test).length < @locales.length
|
|
puts "Saving locale: #{f}"
|
|
else
|
|
system "sed -i -r '/^[[:space:]]#{g}.*(#{localetypes_sed}).*\\\\/d' localedata/Makefile", exception: false
|
|
system "sed -i -r '/^#{g}.*(#{localetypes_sed}).*\\\\/d' localedata/SUPPORTED", exception: false
|
|
end
|
|
end
|
|
@workdir = `pwd`.chomp
|
|
Dir.chdir('crew-package-glibc/archlinux') do
|
|
system "sed -i 's,/etc/,#{`pwd`.chomp}/,g' *"
|
|
system "sed -i 's,/usr/lib,#{CREW_DEST_LIB_PREFIX},g' *"
|
|
system "sed -i 's,/usr/share,#{CREW_DEST_PREFIX}/share,g' *"
|
|
# Use our locally built localedef during install.
|
|
system "sed -i 's,localedef,#{@workdir}/builddir/locale/localedef --prefix=#{CREW_DEST_DIR},' locale-gen"
|
|
end
|
|
system "sed -e '1,3d' -e 's|/| |g' -e 's|\\\\| |g' -e 's|^|#|g' localedata/SUPPORTED >> crew-package-glibc/archlinux/locale.gen"
|
|
end
|
|
|
|
def self.build
|
|
cc_macro_list = %W[
|
|
-DCREW_PREFIX=\\"#{CREW_PREFIX}\\"
|
|
-DCREW_GLIBC_PREFIX=\\"#{CREW_GLIBC_PREFIX}\\"
|
|
-DCREW_GLIBC_INTERPRETER=\\"#{CREW_GLIBC_INTERPRETER}\\"
|
|
]
|
|
|
|
build_env = {
|
|
CFLAGS: "-O3 -pipe -fPIC -fno-lto #{cc_macro_list.join(' ')}",
|
|
CXXFLAGS: "-O3 -pipe -fPIC -fno-lto #{cc_macro_list.join(' ')}",
|
|
LDFLAGS: '-fno-lto',
|
|
LD_PRELOAD: ''
|
|
}
|
|
|
|
config_opts = %W[
|
|
--prefix=#{CREW_PREFIX}
|
|
--libdir=#{CREW_LIB_PREFIX}
|
|
--mandir=#{CREW_MAN_PREFIX}
|
|
--with-headers=#{CREW_PREFIX}/include
|
|
--with-bugurl=https://github.com/chromebrew/chromebrew/issues/new
|
|
--enable-bind-now
|
|
--enable-fortify-source
|
|
--enable-kernel=3.2
|
|
--enable-shared
|
|
--disable-nscd
|
|
--disable-multilib
|
|
--disable-profile
|
|
--disable-sanity-checks
|
|
--disable-werror
|
|
--without-cvs
|
|
--without-selinux
|
|
]
|
|
|
|
config_opts << '--enable-cet' unless ARCH == 'i686'
|
|
|
|
FileUtils.mkdir_p %w[builddir]
|
|
|
|
Dir.chdir('builddir') do
|
|
File.write 'configparms', <<~EOF
|
|
slibdir=#{CREW_GLIBC_PREFIX}
|
|
rtlddir=#{CREW_GLIBC_PREFIX}
|
|
sbindir=#{CREW_PREFIX}/bin
|
|
rootsbindir=#{CREW_PREFIX}/bin
|
|
EOF
|
|
|
|
system build_env.transform_keys(&:to_s), '../configure', *config_opts, no_preload_hacks: true
|
|
system "make PARALLELMFLAGS='-j #{CREW_NPROC}'", no_preload_hacks: true
|
|
end
|
|
end
|
|
|
|
def self.install
|
|
FileUtils.mkdir_p %W[#{CREW_DEST_PREFIX}/etc/env.d #{CREW_DEST_PREFIX}/etc/ld.so.conf.d #{CREW_DEST_PREFIX}/share #{CREW_DEST_LIB_PREFIX} #{CREW_DEST_LIB_PREFIX}/locale]
|
|
|
|
system "make DESTDIR=#{CREW_DEST_DIR} install", chdir: 'builddir'
|
|
|
|
# Avoid conflicts with the zoneinfo tzdata package:
|
|
%w[tzselect zdump zic].each { |f| FileUtils.rm_rf "#{CREW_DEST_PREFIX}/bin/#{f}" }
|
|
|
|
interpreter = case ARCH
|
|
when 'aarch64', 'armv7l'
|
|
"#{CREW_DEST_PREFIX}/opt/glibc-libs/ld-linux-armhf.so.3"
|
|
when 'i686'
|
|
"#{CREW_DEST_PREFIX}/opt/glibc-libs/ld-linux.so.2"
|
|
when 'x86_64'
|
|
"#{CREW_DEST_PREFIX}/opt/glibc-libs/ld-linux-x86-64.so.2"
|
|
end
|
|
# We need to set make and localedef to work with this newly built
|
|
# glibc.
|
|
FileUtils.cp "#{CREW_PREFIX}/bin/make", 'builddir/make'
|
|
system(<<~INSTALL_LOCALES_EOF, chdir: 'builddir')
|
|
patchelf --set-interpreter #{interpreter} make
|
|
patchelf --replace-needed libdl.so.2 #{CREW_DEST_PREFIX}/opt/glibc-libs/libdl.so.2 make
|
|
patchelf --replace-needed libc.so.6 #{CREW_DEST_PREFIX}/opt/glibc-libs/libc.so.6 make
|
|
patchelf --set-interpreter #{interpreter} locale/localedef
|
|
patchelf --add-needed #{CREW_DEST_PREFIX}/opt/glibc-libs/libdl.so.2 locale/localedef
|
|
patchelf --replace-needed libc.so.6 #{CREW_DEST_PREFIX}/opt/glibc-libs/libc.so.6 locale/localedef
|
|
./make -j1 DESTDIR=#{CREW_DEST_DIR} localedata/install-locales
|
|
./make -j1 DESTDIR=#{CREW_DEST_DIR} localedata/install-locale-files
|
|
INSTALL_LOCALES_EOF
|
|
system "sed -e '1,3d' -e 's|/| |g' -e 's| \\\\||g' localedata/SUPPORTED > #{CREW_DEST_PREFIX}/share/i18n/SUPPORTED"
|
|
system 'crew-package-glibc/archlinux/locale-gen'
|
|
|
|
File.write "#{CREW_DEST_PREFIX}/etc/ld.so.conf", <<~EOF
|
|
# ld.so.conf autogenerated by Chromebrew
|
|
# DO NOT put your changes here. Instead, put them in
|
|
# #{CREW_PREFIX}/etc/ld.so.conf.d/ instead.
|
|
|
|
include #{CREW_PREFIX}/etc/ld.so.conf.d/*.conf
|
|
#{CREW_GLIBC_PREFIX}
|
|
#{CREW_LIB_PREFIX}
|
|
include /etc/ld.so.conf
|
|
EOF
|
|
end
|
|
|
|
def self.postinstall
|
|
# update search cache for ld.so
|
|
system "#{CREW_PREFIX}/bin/ldconfig", %i[out err] => File::NULL
|
|
puts "Please run 'crew update' immediately to finish the install.".lightblue
|
|
end
|
|
end
|
|
else
|
|
Package.load_package("#{__dir__}/glibc_build223.rb")
|
|
Package.load_package("#{__dir__}/glibc_build227.rb")
|
|
Package.load_package("#{__dir__}/glibc_build232.rb")
|
|
Package.load_package("#{__dir__}/glibc_build233.rb")
|
|
Package.load_package("#{__dir__}/glibc_build235.rb")
|
|
Package.load_package("#{__dir__}/glibc_build237.rb")
|
|
|
|
class Glibc < Package
|
|
description 'The GNU C Library project provides the core libraries for GNU/Linux systems.'
|
|
homepage Glibc_build237.homepage
|
|
license Glibc_build237.license
|
|
|
|
is_fake
|
|
|
|
case LIBC_VERSION
|
|
when '2.23'
|
|
version Glibc_build223.version
|
|
compatibility Glibc_build223.compatibility
|
|
depends_on 'glibc_build223'
|
|
when '2.27'
|
|
version Glibc_build227.version
|
|
compatibility Glibc_build227.compatibility
|
|
depends_on 'glibc_build227'
|
|
when '2.32'
|
|
version Glibc_build232.version
|
|
compatibility Glibc_build232.compatibility
|
|
depends_on 'glibc_build232'
|
|
when '2.33'
|
|
version Glibc_build233.version
|
|
compatibility Glibc_build233.compatibility
|
|
depends_on 'glibc_build233'
|
|
when '2.35'
|
|
version Glibc_build235.version
|
|
compatibility Glibc_build235.compatibility
|
|
depends_on 'glibc_lib235'
|
|
when '2.37'
|
|
version Glibc_build237.version
|
|
compatibility Glibc_build237.compatibility
|
|
depends_on 'glibc_lib237'
|
|
else
|
|
version LIBC_VERSION
|
|
compatibility 'aarch64 armv7l x86_64'
|
|
depends_on 'glibc_fallthrough'
|
|
end
|
|
end
|
|
end
|