# Use snapshots of post-release branch # https://sourceware.org/git/?p=glibc.git;a=log;h=refs/heads/release/2.36/master # Package from the last commit from there # Only important patches are ported into it # (instead of applying many commits as patches) %define commit 1e04dcec491bd8f48b5b74ce3e8414132578a645 %define commit_short %(echo %{commit} | head -c6) %bcond_with crosscompilers # The test suite should be run after updates, but is very # slow especially on arches where we have slow builders. # Let's cut build time in half for now (but remember to # build "--with tests" tests before throwing updates at abf!) %bcond_with tests %ifarch %{ix86} # FIXME add riscv32-linux when glibc starts supporting it # FIXME Determine why (and fix) 32-bit platform to x86_64-linux crosscompilers # are broken (build failure with static assertion on offset of __private_ss) %global targets aarch64-linux armv7hnl-linux i686-linux x32-linux riscv64-linux %else %ifarch %{arm} # FIXME determine why gcc segfaults when building any cross libc on armv7hnl %global targets armv7hnl-linux %else # FIXME add riscv32-linux when glibc starts supporting it %global targets aarch64-linux armv7hnl-linux i686-linux x86_64-linux x32-linux riscv64-linux ppc64-linux ppc64le-linux %endif %endif %global long_targets %( for i in %{targets}; do CPU=$(echo $i |cut -d- -f1) OS=$(echo $i |cut -d- -f2) echo -n "$(rpm --target=${CPU}-${OS} -E %%{_target_platform}) " done ) %define _libdir32 %{_prefix}/lib %define _libdirn32 %{_prefix}/lib32 # Don't make /lib/ld-linux-aarch64.so.1 and friends relative %define dont_relink 1 %define oname glibc %define major 6 %define source_dir %{oname}-%{commit} %define checklist %{_builddir}/%{source_dir}/Check.list %define libc %mklibname c %{major} %define devname %mklibname -d c %define statname %mklibname -d -s c %define multilibc libc%{major} %define _disable_rebuild_configure 1 # (tpg) 2020-08-20 by default glibc is not designed to make use of LTO %define _disable_lto 1 # Takes forever on glibc with little effect (glibc doesn't # link to anything else anyway) %define dont_check_elf_files 1 %define _disable_ld_no_undefined 1 # (tpg) optimize it a bit %global optflags %{optflags} -O3 -Wno-error=stringop-overflow -fno-strict-aliasing -Wformat %global Werror_cflags %{nil} %global platform %{_target_vendor}-%{_target_os}%{?_gnu} %global target_cpu %{_target_cpu} %global target_platform %{_target_platform} %global target_arch %{_arch} %define cross_prefix %{nil} %define cross_program_prefix %{nil} # Define target (base) architecture %define arch %(echo %{target_cpu}|sed -e "s/\\(i.86\\|athlon\\)/i386/" -e "s/amd64/x86_64/") %define isarch() %(case " %* " in (*" %{arch} "*) echo 1;; (*) echo 0;; esac) # Define Xen arches to build with -mno-tls-direct-seg-refs %define xenarches %{ix86} # Determine minimum kernel versions (rhbz#619538) # Support being a chroot on RHEL 8 (4.18), Ubuntu 18.04 (4.15) and LTS (4.14) kernel %define enablekernel 4.14 # Define to build nscd with selinux support # Distro-specific default value is defined in branding-configs package %{?build_selinux}%{?!build_selinux:%bcond_with selinux} # Define to build a biarch package %define build_biarch 0 %if %isarch %{x86_64} mips64 mips64el mips mipsel %define build_biarch 1 %endif %bcond_without nscd %bcond_without i18ndata %bcond_without locales # separate package https://abf.io/import/timezone %bcond_with timezone %if %isarch %{ix86} %{x86_64} %bcond_without systap %else %bcond_with systap %endif # build documentation by default %bcond_without doc %bcond_with pdf # enable utils by default %bcond_without utils # devel() requires in glibc-devel from itself make no sense %global __develgen_requires %{nil} ############################################################################## # Utility functions for pre/post scripts. Stick them at the beginning of # any lua %pre, %post, %postun, etc. sections to have them expand into # those scripts. It only works in lua sections and not anywhere else. %define glibc_post_funcs() \ -- We use lua posix.exec because there may be no shell that we can \ -- run during glibc upgrade. We used to implement much of %%post as a \ -- C program, but from an overall maintenance perspective the lua in \ -- the spec file was simpler and safer given the operations required. \ -- All lua code will be ignored by rpm-ostree; see: \ -- https://github.com/projectatomic/rpm-ostree/pull/1869 \ -- If we add new lua actions to the %%post code we should coordinate \ -- with rpm-ostree and ensure that their glibc install is functional. \ function update_gconv_modules_cache () \ local iconv_dir = "%{_libdir}/gconv" \ local iconv_cache = iconv_dir .. "/gconv-modules.cache" \ local iconv_modules = iconv_dir .. "/gconv-modules" \ if (posix.utime (iconv_modules) == 0) then \ if (posix.utime (iconv_cache) == 0) then \ rpm.execute ("%{_sbindir}/iconvconfig", \ "-o", iconv_cache, \ "--nostdlib", \ iconv_dir) \ else \ io.stdout:write ("Error: Missing " .. iconv_cache .. " file.\n") \ end \ end \ end \ %{nil} #----------------------------------------------------------------------- Summary: The GNU libc libraries Name: %{cross_prefix}%{oname} Epoch: 6 Version: 2.38 #Source0: http://ftp.gnu.org/gnu/glibc/%{oname}-%{version}.tar.xz # use ./upd.sh to make a tarball and automatically update Release Source0: glibc-%{commit}.tar.xz Release: 1.git%{commit_short}.1 License: LGPLv2+ and LGPLv2+ with exceptions and GPLv2+ Group: System/Libraries Url: http://www.gnu.org/software/libc/ # https://abf.io/import/glibc_mcst is for e2k ExcludeArch: %{e2k} # From Fedora Source3: glibc-manpages.tar.bz2 Source5: glibc-check.sh Source10: libc-lock.h # (tpg) our NSS config Source11: nsswitch.conf Source100: %{oname}.rpmlintrc Source1000: localepkg.sh Source1001: locale_install.sh Source1002: locale_uninstall.sh Source1003: locales.sysconfig #----------------------------------------------------------------------- # ROSA patches # https://sourceware.org/bugzilla/show_bug.cgi?id=29979 Patch10: glibc-fix-ix86-build.patch #----------------------------------------------------------------------- # fedora patches Patch26: eglibc-fedora-locale-euro.patch Patch27: https://src.fedoraproject.org/rpms/glibc/raw/rawhide/f/glibc-fedora-localedata-rh61908.patch Patch30: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-fedora-localedef.patch Patch31: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-fedora-locarchive.patch Patch32: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-fedora-manual-dircategory.patch # Disable until usr move #Patch41: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-cs-path.patch Patch46: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-fedora-nscd.patch Patch50: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-nscd-sysconfig.patch #----------------------------------------------------------------------- # Clear Linux patches may be found here: https://github.com/clearlinux-pkgs/glibc/tree/main # Keeping careful with using not widely tested and audited code in libc #----------------------------------------------------------------------- # OpenMandriva patches Patch1003: eglibc-mandriva-share-locale.patch Patch1007: eglibc-mandriva-nscd-no-host-cache.patch Patch1010: eglibc-mandriva-timezone.patch # http://sourceware.org/bugzilla/show_bug.cgi?id=14995 # http://sourceware.org/bugzilla/attachment.cgi?id=6795 Patch1029: glibc-2.19-nscd-socket-and-pid-moved-from-varrun-to-run.patch Patch1033: glibc-2.25-force-use-ld-bfd.patch Patch1036: glibc-2.29-strict-aliasing.patch Patch1044: glibc-2.34-allow-zstd-compressed-locales.patch Patch1050: https://803950.bugs.gentoo.org/attachment.cgi?id=757176#/nss-dont-crash-on-NULL.patch # https://www.phoronix.com/news/Glibc-2.36-EAC-Problems # https://sourceware.org/bugzilla/show_bug.cgi?id=29456 Patch1051: https://raw.githubusercontent.com/archlinux/svntogit-packages/e1d69d80d07494e3c086ee2c5458594d5261d2e4/trunk/reenable_DT_HASH.patch # Rosa patch rosa2023.1: /usr merge Patch1052: glibc.fix.sbin.patch BuildRequires: autoconf2.5 BuildRequires: %{cross_prefix}binutils >= 2.30-7 BuildRequires: %{cross_prefix}gcc BuildRequires: gettext BuildRequires: kernel-release-headers >= %{enablekernel} BuildRequires: patch BuildRequires: hardlink BuildRequires: cap-devel BuildRequires: bison BuildRequires: pkgconfig(libidn2) %if %{with selinux} # see configure.ac BuildRequires: selinux-devel BuildRequires: audit-devel BuildRequires: pkgconfig(libcap) %endif BuildRequires: texinfo %if %{with pdf} BuildRequires: texlive %endif %if %{with utils} BuildRequires: gd-devel pkgconfig(zlib) pkgconfig(libpng) %endif %if %{with systap} BuildRequires: systemtap-devel %endif Requires: filesystem Requires(post): filesystem %if %isarch %{xenarches} Provides: %{name}-xen = %{EVRD} %endif # The dynamic linker supports DT_GNU_HASH Provides: rtld(GNU_HASH) Provides: should-restart = system # Don't try to explicitly provide GLIBC_PRIVATE versioned libraries %global __filter_GLIBC_PRIVATE 1 %global __provides_exclude ^libc_malloc_debug\\.so.*$ %define libnssfiles %mklibname nss_files 2 # FIXME remove at some point Provides: /sbin/ldconfig Provides: /usr/sbin/ldconfig Provides: %{libnssfiles} = %{EVRD} Provides: ldconfig = %{EVRD} Provides: ld.so = %{EVRD} %ifarch %{mips} %{mipsel} Provides: ld.so.1 = %{EVRD} %endif %if ! %{with locales} # Fake it to keep build roots working with temporary # non-locale glibcs during upgrades Provides: locales = %{EVRD} Provides: locales-en = %{EVRD} %endif %description The glibc package contains standard libraries which are used by multiple programs on the system. In order to save disk space and memory, as well as to make upgrading easier, common system code is kept in one place and shared between programs. This particular package contains the most important sets of shared libraries: the standard C library and the standard math library. Without these two libraries, a Linux system will not function. %if "%{name}" == "glibc" %pre -p -- Check that the running kernel is new enough required = '%{enablekernel}' rel = posix.uname("%r") if rpm.vercmp(rel, required) < 0 then error("FATAL: installed kernel is too old for glibc", 0) end %post -p %glibc_post_funcs -- (1) Remove multilib libraries from previous installs. -- In order to support in-place upgrades, we must immediately remove -- obsolete platform directories after installing a new glibc -- version. RPM only deletes files removed by updates near the end -- of the transaction. If we did not remove the obsolete platform -- directories here, they may be preferred by the dynamic linker -- during the execution of subsequent RPM scriptlets, likely -- resulting in process startup failures. -- Full set of libraries glibc may install. install_libs = { "anl", "BrokenLocale", "c", "dl", "m", "mvec", "nss_compat", "nss_db", "nss_dns", "nss_files", "nss_hesiod", "pthread", "resolv", "rt", "thread_db", "util" } -- We are going to remove these libraries. Generally speaking we remove -- all core libraries in the multilib directory. -- For the versioned install names, the version are [2.0,9.9*], so we -- match "libc-2.0.so" and so on up to "libc-9.9*". -- For the unversioned install names, we match the library plus ".so." -- followed by digests. remove_regexps = {} for i = 1, #install_libs do -- Versioned install name. remove_regexps[#remove_regexps + 1] = ("lib" .. install_libs[i] .. "%%-[2-9]%%.[0-9]+%%.so$") -- Unversioned install name. remove_regexps[#remove_regexps + 1] = ("lib" .. install_libs[i] .. "%%.so%%.[0-9]+$") end -- One exception: remove_regexps[#install_libs + 1] = "libthread_db%%-1%%.0%%.so" -- We are going to search these directories. local remove_dirs = { "%{_libdir}/i686", "%{_libdir}/i686/nosegneg", "%{_libdir}/power6", "%{_libdir}/power7", "%{_libdir}/power8", "%{_libdir}/power9", } -- Add all the subdirectories of the glibc-hwcaps subdirectory. repeat local iter = posix.files("%{_libdir}/glibc-hwcaps") if iter ~= nil then for entry in iter do if entry ~= "." and entry ~= ".." then local path = "%{_libdir}/glibc-hwcaps/" .. entry if posix.access(path .. "/.", "x") then remove_dirs[#remove_dirs + 1] = path end end end end until true -- Walk all the directories with files we need to remove... for _, rdir in ipairs (remove_dirs) do if posix.access (rdir) then -- If the directory exists we look at all the files... local remove_files = posix.files (rdir) for rfile in remove_files do for _, rregexp in ipairs (remove_regexps) do -- Does it match the regexp? local dso = string.match (rfile, rregexp) if (dso ~= nil) then -- Removing file... os.remove (rdir .. '/' .. rfile) end end end end end -- (2) Update /etc/ld.so.conf -- Next we update /etc/ld.so.conf to ensure that it starts with -- a literal "include ld.so.conf.d/*.conf". local ldsoconf = "/etc/ld.so.conf" local ldsoconf_tmp = "/etc/glibc_post_upgrade.ld.so.conf" if posix.access (ldsoconf) then -- We must have a "include ld.so.conf.d/*.conf" line. local have_include = false for line in io.lines (ldsoconf) do -- This must match, and we don't ignore whitespace. if string.match (line, "^include ld.so.conf.d/%%*%%.conf$") ~= nil then have_include = true end end if not have_include then -- Insert "include ld.so.conf.d/*.conf" line at the start of the -- file. We only support one of these post upgrades running at -- a time (temporary file name is fixed). local tmp_fd = io.open (ldsoconf_tmp, "w") if tmp_fd ~= nil then tmp_fd:write ("include ld.so.conf.d/*.conf\n") for line in io.lines (ldsoconf) do tmp_fd:write (line .. "\n") end tmp_fd:close () local res = os.rename (ldsoconf_tmp, ldsoconf) if res == nil then io.stdout:write ("Error: Unable to update configuration file (rename).\n") end else io.stdout:write ("Error: Unable to update configuration file (open).\n") end end end -- Place compat symlink if the system is still split-usr local st=posix.stat("/%{_lib}") if st.type ~= "link" then %ifarch %{ix86} posix.symlink("%{_libdir}/ld-linux.so.2", "/lib/ld-linux.so.2") %endif %ifarch %{x86_64} posix.symlink("%{_libdir}/ld-linux-x86-64.so.2", "/%{_lib}/ld-linux-x86-64.so.2") %endif %ifarch armv7l armv8l posix.symlink("%{_libdir}/ld-linux.so.3", "/lib/ld-linux.so.3") %endif %ifarch armv7hl armv7hnl armv8hl armv8hnl armv8hcnl armv6j posix.symlink("%{_libdir}/ld-linux-armhf.so.3", "/lib/ld-linux-armhf.so.3") %endif %ifarch aarch64 posix.symlink("%{_libdir}/ld-linux-aarch64.so.1", "/%{_lib}/ld-linux-aarch64.so.1") %endif %ifarch %{mips} posix.symlink("%{_libdir}/ld.so.1", "/%{_lib}/ld.so.1") %endif %ifarch riscv64 posix.symlink("%{_libdir}/ld-linux-riscv64-lp64d.so.1", "/%{_lib}/ld-linux-riscv64-lp64d.so.1") %endif posix.symlink("/usr/sbin/ldconfig", "%{_bindir}/ldconfig") end -- (3) Rebuild ld.so.cache early. -- If the format of the cache changes then we need to rebuild -- the cache early to avoid any problems running binaries with -- the new glibc. if not rpm.execute("/usr/sbin/ldconfig") then io.stdout:write ("Error: call to /usr/sbin/ldconfig failed.\n") end -- (4) Update gconv modules cache. -- If the /usr/lib/gconv/gconv-modules.cache exists, then update it -- with the latest set of modules that were just installed. -- We assume that the cache is in _libdir/gconv and called -- "gconv-modules.cache". update_gconv_modules_cache() -- (5) On upgrades, restart systemd if installed. "systemctl -q" does -- not suppress the error message (which is common in chroots), so -- open-code post_exec with standard error suppressed. if tonumber(arg[2]) >= 2 and posix.access("/bin/systemctl", "x") then local pid = posix.fork() if pid == 0 then posix.redirect2null(2) assert(posix.exec("/bin/systemctl", "daemon-reexec")) elseif pid > 0 then posix.wait(pid) end end %transfiletriggerin -p -P 2000000 -- /lib /lib64 /usr/lib /usr/lib64 /etc/ld.so.conf.d rpm.execute("/usr/sbin/ldconfig", "-X") %transfiletriggerpostun -p -P 2000000 -- /lib /lib64 /usr/lib /usr/lib64 /etc/ld.so.conf.d rpm.execute("/usr/sbin/ldconfig", "-X") %filetriggerin -p -P 2000000 -- /lib /lib64 /usr/lib /etc/ld.so.conf.d -- Transaction-level runs of ldconfigs are not enough: -- e.g. lib64acl1 (/lib64/libacl.so.1) is installed after glibc, but is needed by -- scriptlets of packages that are installed in the same transaction before its end -- (between runs of ldconfig in glibc's %%post and glibc's transaction file trigger) -- TODO: remove /lib64 from non-transaction triggers when it becomes a symlink to /usr/lib64 -- ld-linux finds libraries in standard paths (now /lib64 is not a standard path after /usr merge!) -- even if ldconfig was not run. rpm.execute("/usr/sbin/ldconfig", "-X") %filetriggerpostun -p -P 2000000 -- /lib /lib64 /usr/lib /etc/ld.so.conf.d rpm.execute("/usr/sbin/ldconfig", "-X") %endif %posttrans -p -- Need to repeat it here, deinstallation of an older version -- wiped out the files that used to be in the older versions -- Place compat symlink if the system is still split-usr st=posix.stat("/%{_lib}") if st.type ~= "link" then %ifarch %{ix86} posix.symlink("%{_libdir}/ld-linux.so.2", "/lib/ld-linux.so.2") %endif %ifarch %{x86_64} posix.symlink("%{_libdir}/ld-linux-x86-64.so.2", "/%{_lib}/ld-linux-x86-64.so.2") %endif %ifarch armv7l armv8l posix.symlink("%{_libdir}/ld-linux.so.3", "/lib/ld-linux.so.3") %endif %ifarch armv7hl armv7hnl armv8hl armv8hnl armv8hcnl armv6j posix.symlink("%{_libdir}/ld-linux-armhf.so.3", "/lib/ld-linux-armhf.so.3") %endif %ifarch aarch64 posix.symlink("%{_libdir}/ld-linux-aarch64.so.1", "/%{_lib}/ld-linux-aarch64.so.1") %endif %ifarch %{mips} posix.symlink("%{_libdir}/ld.so.1", "/%{_lib}/ld.so.1") %endif %ifarch riscv64 posix.symlink("%{_libdir}/ld-linux-riscv64-lp64d.so.1", "/%{_lib}/ld-linux-riscv64-lp64d.so.1") %endif posix.symlink("%{_bindir}/ldconfig", "/usr/sbin/ldconfig") end %if %{with locales} %package -n locales Summary: Base files for localization Group: System/Internationalization # FIXME localedef should be adapted to load # just built charmaps instead of hardcoding # /usr/share/i18n/charmaps BuildRequires: glibc-i18ndata Requires(post,preun): /bin/sh Requires(post,preun): grep Requires(post,preun): sed Requires(post,preun): coreutils Requires(post,preun): util-linux Requires(post,preun): glibc Requires(post,preun): rpm %description -n locales These are the base files for language localization. You also need to install the specific locales-?? for the language(s) you want. Then the user need to set the LANG variable to their preferred language in their ~/.profile configuration file. # Locale specifc packages # To look up a language name from a newly appearing code, # Try http://scriptsource.org/cms/scripts/page.php?item_id=language_detail&key=XXX (where XXX is the new code without country suffix) %{expand:%(sh %{S:1000} "Afar" "aa" "aa_DJ" "aa_ER" "aa_ET")} %{expand:%(sh %{S:1000} "Afrikaans" "af" "af_ZA")} %{expand:%(sh %{S:1000} "Aguaruna" "agr" "agr_PE")} %{expand:%(sh %{S:1000} "Amharic" "am" "am_ET" "byn_ER" "gez_ER" "gez_ET" "om_ET" "om_KE" "sid_ET" "ti_ER" "ti_ET" "tig_ER" "wal_ET")} %{expand:%(sh %{S:1000} "Akan" "ak" "ak_GH")} %{expand:%(sh %{S:1000} "Angika" "anp" "anp_IN")} %{expand:%(sh %{S:1000} "Arabic" "ar" "ar_AE" "ar_BH" "ar_DZ" "ar_EG" "ar_IN" "ar_IQ" "ar_JO" "ar_KW" "ar_LB" "ar_LY" "ar_MA" "ar_OM" "ar_QA" "ar_SA" "ar_SD" "ar_SS" "ar_SY" "ar_TN" "ar_YE")} %{expand:%(sh %{S:1000} "Assamese" "as" "as_IN")} %{expand:%(sh %{S:1000} "Asturian" "ast" "ast_ES")} %{expand:%(sh %{S:1000} "Aymara" "ayc" "ayc_PE")} %{expand:%(sh %{S:1000} "Azeri" "az" "az_AZ" "az_IR")} %{expand:%(sh %{S:1000} "Belarusian" "be" "be_BY")} %{expand:%(sh %{S:1000} "Bemba" "bem" "bem_ZM")} %{expand:%(sh %{S:1000} "Berber" "ber" "ber_DZ" "ber_MA")} %{expand:%(sh %{S:1000} "Bulgarian" "bg" "bg_BG")} %{expand:%(sh %{S:1000} "Bhili" "bhb" "bhb_IN")} %{expand:%(sh %{S:1000} "Bhojpuri" "bho" "bho_NP")} %{expand:%(sh %{S:1000} "Bislama" "bi" "bi_VU")} %{expand:%(sh %{S:1000} "Bengali" "bn" "bn_BD" "bn_IN")} %{expand:%(sh %{S:1000} "Tibetan" "bo" "bo_CN" "bo_IN")} %{expand:%(sh %{S:1000} "Breton" "br" "br_FR")} %{expand:%(sh %{S:1000} "Bosnian" "bs" "bs_BA")} %{expand:%(sh %{S:1000} "Catalan" "ca" "ca_AD" "ca_ES" "ca_FR" "ca_IT")} %{expand:%(sh %{S:1000} "Chechen" "ce" "ce_RU")} %{expand:%(sh %{S:1000} "Cherokee" "chr" "chr_US")} %{expand:%(sh %{S:1000} "Central Kurdish" "ckb" "ckb_IQ")} %{expand:%(sh %{S:1000} "Crimean Tatar" "crh" "crh_UA")} %{expand:%(sh %{S:1000} "Czech" "cs" "cs_CZ")} %{expand:%(sh %{S:1000} "Chuvash" "cv" "cv_RU")} %{expand:%(sh %{S:1000} "Welsh" "cy" "cy_GB")} %{expand:%(sh %{S:1000} "Danish" "da" "da_DK")} %{expand:%(sh %{S:1000} "German" "de" "de_AT" "de_BE" "de_CH" "de_DE" "de_LU" "de_IT" "de_LI")} %{expand:%(sh %{S:1000} "Dogri" "doi" "doi_IN")} %{expand:%(sh %{S:1000} "Dhivehi" "dv" "dv_MV")} %{expand:%(sh %{S:1000} "Dzongkha" "dz" "dz_BT")} %{expand:%(sh %{S:1000} "Greek" "el" "r:gr" "el_CY" "el_GR")} %{expand:%(sh %{S:1000} "English" "en" "C" "en_AG" "en_AU" "en_BW" "en_CA" "en_DK" "en_GB" "en_HK" "en_IE" "en_IL" "en_IN" "en_NG" "en_NZ" "en_PH" "en_SC" "en_SG" "en_US" "en_ZA" "en_ZM" "en_ZW")} %{expand:%(sh %{S:1000} "Esperanto" "eo" "eo" "eo_XX")} # Potentially unhandled: es@tradicional? an = Aragonese %{expand:%(sh %{S:1000} "Spanish" "es" "an_ES" "es_AR" "es_BO" "es_CL" "es_CO" "es_CR" "es_CU" "es_DO" "es_EC" "es_ES" "es_GT" "es_HN" "es_MX" "es_NI" "es_PA" "es_PE" "es_PR" "es_PY" "es_SV" "es_US" "es_UY" "es_VE")} %{expand:%(sh %{S:1000} "Estonian" "et" "et_EE")} %{expand:%(sh %{S:1000} "Basque" "eu" "eu_ES")} %{expand:%(sh %{S:1000} "Farsi" "fa" "fa_IR")} %{expand:%(sh %{S:1000} "Finnish" "fi" "fi_FI")} %{expand:%(sh %{S:1000} "Fulah" "ff" "ff_SN")} %{expand:%(sh %{S:1000} "Faroese" "fo" "fo_FO")} %{expand:%(sh %{S:1000} "French" "fr" "fr_BE" "fr_CA" "fr_CH" "fr_FR" "fr_LU")} %{expand:%(sh %{S:1000} "Friulan" "fur" "fur_IT")} %{expand:%(sh %{S:1000} "Frisian" "fy" "fy_DE" "fy_NL")} %{expand:%(sh %{S:1000} "Irish" "ga" "ga_IE")} %{expand:%(sh %{S:1000} "Scottish Gaelic" "gd" "gd_GB")} %{expand:%(sh %{S:1000} "Galician" "gl" "gl_ES")} %{expand:%(sh %{S:1000} "Gujarati" "gu" "gu_IN")} %{expand:%(sh %{S:1000} "Manx Gaelic" "gv" "gv_GB")} %{expand:%(sh %{S:1000} "Hausa" "ha" "ha_NG")} %{expand:%(sh %{S:1000} "Hebrew" "he" "he_IL" "iw_IL")} %{expand:%(sh %{S:1000} "Hindi" "hi" "bho_IN" "brx_IN" "hi_IN" "ur_IN")} %{expand:%(sh %{S:1000} "Fiji Hindi" "hif" "hif_FJ")} %{expand:%(sh %{S:1000} "Chhattisgarhi" "hne" "hne_IN")} %{expand:%(sh %{S:1000} "Croatian" "hr" "hr_HR")} %{expand:%(sh %{S:1000} "Upper Sorbian" "hsb" "hsb_DE")} %{expand:%(sh %{S:1000} "Lower Sorbian" "dsb" "dsb_DE")} %{expand:%(sh %{S:1000} "Breyol" "ht" "ht_HT")} %{expand:%(sh %{S:1000} "Hungarian" "hu" "hu_HU")} %{expand:%(sh %{S:1000} "Armenian" "hy" "hy_AM")} %{expand:%(sh %{S:1000} "Interlingua" "ia" "ia_FR")} %{expand:%(sh %{S:1000} "Indonesian" "id" "id_ID")} %{expand:%(sh %{S:1000} "Igbo" "ig" "ig_NG")} %{expand:%(sh %{S:1000} "Inupiaq" "ik" "ik_CA")} %{expand:%(sh %{S:1000} "Icelandic" "is" "is_IS")} %{expand:%(sh %{S:1000} "Italian" "it" "it_CH" "it_IT")} %{expand:%(sh %{S:1000} "Inuktitut" "iu" "iu_CA")} %{expand:%(sh %{S:1000} "Japanese" "ja" "ja" "ja_JP")} %{expand:%(sh %{S:1000} "Georgian" "ka" "ka_GE")} %{expand:%(sh %{S:1000} "Kabyle" "kab" "kab_DZ")} %{expand:%(sh %{S:1000} "Kazakh" "kk" "kk_KZ")} %{expand:%(sh %{S:1000} "Sakha" "sah" "sah_RU")} %{expand:%(sh %{S:1000} "Greenlandic" "kl" "kl_GL")} %{expand:%(sh %{S:1000} "Khmer" "km" "km_KH")} %{expand:%(sh %{S:1000} "Kannada" "kn" "kn_IN")} %{expand:%(sh %{S:1000} "Korean" "ko" "ko_KR")} %{expand:%(sh %{S:1000} "Konkani" "kok" "kok_IN")} %{expand:%(sh %{S:1000} "Kashmiri" "ks" "ks_IN")} %{expand:%(sh %{S:1000} "Kurdish" "ku" "ku_TR")} %{expand:%(sh %{S:1000} "Cornish" "kw" "kw_GB")} %{expand:%(sh %{S:1000} "Kyrgyz" "ky" "ky_KG")} %{expand:%(sh %{S:1000} "Luxembourgish" "lb" "lb_LU")} %{expand:%(sh %{S:1000} "Luganda" "lg" "lg_UG")} %{expand:%(sh %{S:1000} "Limburguish" "li" "li_BE" "li_NL")} %{expand:%(sh %{S:1000} "Ligurian" "lij" "lij_IT")} %{expand:%(sh %{S:1000} "Lingala" "ln" "ln_CD")} %{expand:%(sh %{S:1000} "Laotian" "lo" "lo_LA")} %{expand:%(sh %{S:1000} "Lithuanian" "lt" "lt_LT")} %{expand:%(sh %{S:1000} "Latvian" "lv" "lv_LV")} %{expand:%(sh %{S:1000} "Magahi" "mag" "mag_IN")} %{expand:%(sh %{S:1000} "Maithili" "mai" "mai_IN" "mai_NP")} %{expand:%(sh %{S:1000} "Mauritian Creole" "mfe" "mfe_MU")} %{expand:%(sh %{S:1000} "Malagasy" "mg" "mg_MG")} %{expand:%(sh %{S:1000} "Mari" "mhr" "mhr_RU")} %{expand:%(sh %{S:1000} "Maori" "mi" "mi_NZ")} %{expand:%(sh %{S:1000} "Miskito" "miq" "miq_NI")} %{expand:%(sh %{S:1000} "Karbi" "mjw" "mjw_IN")} %{expand:%(sh %{S:1000} "Macedonian" "mk" "mk_MK")} %{expand:%(sh %{S:1000} "Malayalam" "ml" "ml_IN")} %{expand:%(sh %{S:1000} "Mongolian" "mn" "mn_MN")} %{expand:%(sh %{S:1000} "Manipuri" "mni" "mni_IN")} %{expand:%(sh %{S:1000} "Mon" "mnw" "mnw_MM")} %{expand:%(sh %{S:1000} "Marathi" "mr" "mr_IN")} %{expand:%(sh %{S:1000} "Malay" "ms" "ms_MY")} %{expand:%(sh %{S:1000} "Maltese" "mt" "mt_MT")} %{expand:%(sh %{S:1000} "Burmese" "my" "my_MM")} %{expand:%(sh %{S:1000} "Lower Saxon" "nds" "nds_DE" "nds_NL")} %{expand:%(sh %{S:1000} "Nepali" "ne" "ne_NP")} %{expand:%(sh %{S:1000} "Nahuatl" "nhn" "nhn_MX")} %{expand:%(sh %{S:1000} "Niuean" "niu" "niu_NU" "niu_NZ")} %{expand:%(sh %{S:1000} "Dutch" "nl" "nl_AW" "nl_BE" "nl_NL")} %{expand:%(sh %{S:1000} "Norwegian" "no" "r:nb" "r:nn" "nb_NO" "nn_NO")} %{expand:%(sh %{S:1000} "Ndebele" "nr" "nr_ZA")} %{expand:%(sh %{S:1000} "Northern Sotho" "nso" "nso_ZA")} %{expand:%(sh %{S:1000} "Occitan" "oc" "oc_FR")} %{expand:%(sh %{S:1000} "Oriya" "or" "or_IN")} %{expand:%(sh %{S:1000} "Ossetian" "os" "os_RU")} %{expand:%(sh %{S:1000} "Punjabi" "pa" "pa_IN" "pa_PK")} %{expand:%(sh %{S:1000} "Papiamento" "pap" "r:pp" "pap_AN" "pap_AW" "pap_CW")} %{expand:%(sh %{S:1000} "Polish" "pl" "csb_PL" "pl_PL")} %{expand:%(sh %{S:1000} "Pashto" "ps" "ps_AF")} %{expand:%(sh %{S:1000} "Portuguese" "pt" "pt_BR" "pt_PT")} %{expand:%(sh %{S:1000} "Quechua" "quz" "quz_PE")} %{expand:%(sh %{S:1000} "Rajasthani" "raj" "raj_IN")} %{expand:%(sh %{S:1000} "Tarifit" "rif" "rif_MA")} %{expand:%(sh %{S:1000} "Romanian" "ro" "ro_RO")} %{expand:%(sh %{S:1000} "Russian" "ru" "ru_RU" "ru_UA")} %{expand:%(sh %{S:1000} "Kinyarwanda" "rw" "rw_RW")} %{expand:%(sh %{S:1000} "Sanskrit" "sa" "sa_IN")} %{expand:%(sh %{S:1000} "Santali" "sat" "sat_IN")} %{expand:%(sh %{S:1000} "Sardinian" "sc" "sc_IT")} %{expand:%(sh %{S:1000} "Sindhi" "sd" "sd_IN")} %{expand:%(sh %{S:1000} "Saami" "se" "se_NO")} %{expand:%(sh %{S:1000} "Samogitian" "sgs" "sgs_LT")} %{expand:%(sh %{S:1000} "Shan" "shn" "shn_MM")} %{expand:%(sh %{S:1000} "Secwepemctsin" "shs" "shs_CA")} %{expand:%(sh %{S:1000} "Sinhala" "si" "si_LK")} %{expand:%(sh %{S:1000} "Slovak" "sk" "sk_SK")} %{expand:%(sh %{S:1000} "Slovenian" "sl" "sl_SI")} %{expand:%(sh %{S:1000} "Samoan" "sm" "sm_WS")} %{expand:%(sh %{S:1000} "Serbian" "sr" "sr_ME" "sr_RS")} %{expand:%(sh %{S:1000} "Somali" "so" "so_DJ" "so_ET" "so_KE" "so_SO")} %{expand:%(sh %{S:1000} "Albanian" "sq" "sq_AL" "sq_MK")} %{expand:%(sh %{S:1000} "Swati" "ss" "ss_ZA")} %{expand:%(sh %{S:1000} "Sotho" "st" "st_ZA")} %{expand:%(sh %{S:1000} "Swedish" "sv" "sv_FI" "sv_SE")} # sw_XX? %{expand:%(sh %{S:1000} "Swahili" "sw" "sw_KE" "sw_TZ")} %{expand:%(sh %{S:1000} "Chaldean-Neo-Aramaic" "syr")} %{expand:%(sh %{S:1000} "Silesian" "szl" "szl_PL")} %{expand:%(sh %{S:1000} "Tamil" "ta" "ta_IN" "ta_LK")} %{expand:%(sh %{S:1000} "Telugu" "te" "te_IN")} %{expand:%(sh %{S:1000} "Tajik" "tg" "tg_TJ")} %{expand:%(sh %{S:1000} "Thai" "th" "th_TH")} %{expand:%(sh %{S:1000} "Tharu/Tharuhati" "the" "the_NP")} %{expand:%(sh %{S:1000} "Tok Pisin" "tpi" "tpi_PG")} %{expand:%(sh %{S:1000} "Turkmen" "tk" "tk_TM")} %{expand:%(sh %{S:1000} "Pilipino" "tl" "r:ph" "fil_PH" "tl_PH")} %{expand:%(sh %{S:1000} "Tswana" "tn" "tn_ZA")} %{expand:%(sh %{S:1000} "Tonga" "to" "to_TO")} %{expand:%(sh %{S:1000} "Turkish" "tr" "tr_CY" "tr_TR")} %{expand:%(sh %{S:1000} "Tsonga" "ts" "ts_ZA")} %{expand:%(sh %{S:1000} "Tatar" "tt" "tt_RU")} %{expand:%(sh %{S:1000} "Tulu" "tcy" "tcy_IN")} %{expand:%(sh %{S:1000} "Uyghur" "ug" "ug_CN")} %{expand:%(sh %{S:1000} "Unami" "unm" "unm_US")} %{expand:%(sh %{S:1000} "Ukrainian" "uk" "uk_UA")} %{expand:%(sh %{S:1000} "Urdu" "ur" "ur_PK")} %{expand:%(sh %{S:1000} "Uzbek" "uz" "uz_UZ")} %{expand:%(sh %{S:1000} "Venda" "ve" "ve_ZA")} %{expand:%(sh %{S:1000} "Vietnamese" "vi" "vi_VN")} %{expand:%(sh %{S:1000} "Walloon" "wa" "wa_BE")} %{expand:%(sh %{S:1000} "Walser" "wae" "wae_CH")} %{expand:%(sh %{S:1000} "Wolof" "wo" "wo_SN")} %{expand:%(sh %{S:1000} "Xhosa" "xh" "xh_ZA")} %{expand:%(sh %{S:1000} "Yiddish" "yi" "yi_US")} %{expand:%(sh %{S:1000} "Yoruba" "yo" "yo_NG")} %{expand:%(sh %{S:1000} "Yue Chinese (Cantonese)" "yue" "yue_HK")} %{expand:%(sh %{S:1000} "Yau" "yuw" "yuw_PG")} %{expand:%(sh %{S:1000} "Chinese" "zh" "zh_CN" "zh_HK" "zh_SG" "zh_TW" "cmn_TW" "hak_TW" "lzh_TW" "nan_TW")} %{expand:%(sh %{S:1000} "Zulu" "zu" "zu_ZA")} %endif %files -f libc.lang %if "%{name}" == "glibc" %if %{with timezone} %verify(not md5 size mtime) %config(noreplace) %{_sysconfdir}/localtime %endif # (tpg) please do not set (noreplace) here as after update system may end up in broken state %config %{_sysconfdir}/nsswitch.conf %verify(not md5 size mtime) %config(noreplace) %{_sysconfdir}/ld.so.conf %dir %{_sysconfdir}/ld.so.conf.d %{_sysconfdir}/ld.so.conf.d/legacy.conf %config(noreplace) %{_sysconfdir}/rpc %doc %dir %{_docdir}/glibc %doc %{_docdir}/glibc/gai.conf %doc %{_docdir}/glibc/COPYING %doc %{_docdir}/glibc/COPYING.LIB %dir %{_libdir}/gconv %dir %{_libdir}/gconv/gconv-modules.d %config %{_libdir}/gconv/gconv-modules.d/gconv-modules-extra.conf %ifarch %{x86_64} %if "%{_libdir}" != "%{_prefix}/lib" %dir %{_prefix}/lib/gconv %dir %{_prefix}/lib/gconv/gconv-modules.d %config %{_prefix}/lib/gconv/gconv-modules.d/gconv-modules-extra.conf %endif %endif %{_localedir}/locale.alias %{_sbindir}/sln %{_prefix}/libexec/getconf %endif %if %isarch %{x86_64} %exclude %{_prefix}/libexec/getconf/POSIX_V6_ILP32_OFF32 %exclude %{_prefix}/libexec/getconf/POSIX_V6_ILP32_OFFBIG %exclude %{_prefix}/libexec/getconf/POSIX_V7_ILP32_OFF32 %exclude %{_prefix}/libexec/getconf/POSIX_V7_ILP32_OFFBIG %exclude %{_prefix}/libexec/getconf/XBS5_ILP32_OFF32 %exclude %{_prefix}/libexec/getconf/XBS5_ILP32_OFFBIG %endif %if %isarch %{ix86} %{_libdir}/ld-linux.so.2 %endif %if %isarch %{x86_64} %{_libdir}/ld-linux-x86-64.so.2 %endif %if %isarch armv7l armv8l %{_libdir}/ld-linux.so.3 %endif %if %isarch armv7hl armv7hnl armv8hl armv8hnl armv8hcnl armv6j %{_libdir}/ld-linux-armhf.so.3 %endif %if %isarch aarch64 %{_libdir}/ld-linux-aarch64.so.1 /lib/ld-linux-aarch64.so.1 %endif %if %isarch %{mips} %{_libdir}/ld.so.1 %endif %if %isarch riscv64 %{_libdir}/ld-linux-riscv64-lp64d.so.1 /lib/ld-linux-riscv64-lp64d.so.1 %{_libdir}/lp64d %endif %{_libdir}/lib*.so.[0-9]* %if "%{name}" == "glibc" %dir %{_libdir}/audit %{_libdir}/audit/sotruss-lib.so %{_libdir}/gconv/UNICODE.so %{_libdir}/gconv/UTF-7.so %{_libdir}/gconv/UTF-16.so %{_libdir}/gconv/UTF-32.so %{_libdir}/gconv/gconv-modules %ghost %{_libdir}/gconv/gconv-modules.cache %{_bindir}/gencat %{_bindir}/getconf %{_bindir}/getent %{_bindir}/iconv %{_bindir}/ld.so %{_bindir}/ldd %{_bindir}/locale %{_bindir}/localedef %{_bindir}/makedb %{_bindir}/pldd %{_bindir}/sotruss %{_bindir}/sprof %{_bindir}/tzselect %{_bindir}/zdump %{_sbindir}/iconvconfig %{_sbindir}/ldconfig %ghost %{_sysconfdir}/ld.so.cache %dir %{_var}/cache/ldconfig %ghost %{_var}/cache/ldconfig/aux-cache %{_var}/db/Makefile %else %if %isarch mips mipsel %if %{build_biarch} %{_libdir32}/ld.so.1 %{_libdir32}/lib*.so.[0-9]* %dir %{_libdirn32} %{_libdirn32}/ld.so.1 %{_libdirn32}/lib*.so.[0-9]* %endif %endif %endif %transfiletriggerin -p -- %{_libdir}/gconv os.execute("%{_sbindir}/iconvconfig -o %{_libdir}/gconv/gconv-modules.cache --nostdlib %{_libdir}/gconv") %package -n locales-extra-charsets Summary: Character set definitions for non-Unicode locales Group: System/Libraries Requires: %{name} = %{EVRD} # splitted from glibc Conflicts: glibc < 6:2.36 %description -n locales-extra-charsets Character set definitions for non-Unicode locales Pretty much everything has moved on to Unicode (primarily UTF-8 and UTF-16) - but text files in older encodings likely still exist. These modules help working with/converting those files. %files -n locales-extra-charsets -f extra-charsets.list ######################################################################## %if %{build_biarch} #----------------------------------------------------------------------- %package -n %{multilibc} Summary: The GNU libc libraries Group: System/Libraries Requires: %{name} = %{EVRD} %transfiletriggerin -p -- %{_prefix}/lib/gconv os.execute("%{_sbindir}/iconvconfig -o %{_prefix}/lib/gconv/gconv-modules.cache --nostdlib %{_prefix}/lib/gconv") %posttrans -n %{multilibc} -p -- Need to repeat it here, deinstallation of an older version -- wiped out the files that used to be in the older versions -- Place compat symlink if the system is still split-usr st=posix.stat("/%{_lib}") if st.type ~= "link" then posix.symlink("%{_libdir32}/ld-linux.so.2", "/lib/ld-linux.so.2") end %description -n %{multilibc} The glibc package contains standard libraries which are used by multiple programs on the system. In order to save disk space and memory, as well as to make upgrading easier, common system code is kept in one place and shared between programs. This particular package contains the most important sets of shared libraries: the standard C library and the standard math library. Without these two libraries, a Linux system will not function. %files -n %{multilibc} %{_libdir32}/ld-linux*.so.2 %{_libdir32}/lib*.so.[0-9]* %if "%{name}" == "glibc" %dir %{_libdir32}/audit %{_libdir32}/audit/sotruss-lib.so %dir %{_libdir32}/gconv %{_libdir32}/gconv/UNICODE.so %{_libdir32}/gconv/UTF-7.so %{_libdir32}/gconv/UTF-16.so %{_libdir32}/gconv/UTF-32.so %{_libdir32}/gconv/gconv-modules %ghost %{_libdir32}/gconv/gconv-modules.cache %endif %{_prefix}/libexec/getconf/POSIX_V6_ILP32_OFF32 %{_prefix}/libexec/getconf/POSIX_V6_ILP32_OFFBIG %{_prefix}/libexec/getconf/POSIX_V7_ILP32_OFF32 %{_prefix}/libexec/getconf/POSIX_V7_ILP32_OFFBIG %{_prefix}/libexec/getconf/XBS5_ILP32_OFF32 %{_prefix}/libexec/getconf/XBS5_ILP32_OFFBIG %package -n locales-extra-charsets32 Summary: Character set definitions for non-Unicode locales (32-bit) Group: System/Libraries Requires: %{name} = %{EVRD} %description -n locales-extra-charsets32 Character set definitions for non-Unicode locales (32-bit) Pretty much everything has moved on to Unicode (primarily UTF-8 and UTF-16) - but text files in older encodings likely still exist. These modules help working with/converting those files. %files -n locales-extra-charsets32 -f extra-charsets32.list #----------------------------------------------------------------------- # build_biarch %endif #----------------------------------------------------------------------- %package devel Summary: Header and object files for development using standard C libraries Group: Development/C Requires: %{name} = %{EVRD} Requires: pkgconfig(libxcrypt) Requires: %{?cross:cross-}kernel-headers >= %{enablekernel} %if %{with pdf} Provides: glibc-doc-pdf = %{EVRD} %endif %description devel The glibc-devel package contains the header and object files necessary for developing programs which use the standard C libraries (which are used by nearly all programs). If you are developing programs which will use the standard C libraries, your system needs to have these standard header and object files available in order to create the executables. %package doc Summary: Docs for %{name} Group: Development/C BuildArch: noarch %description doc The glibc-docs package contains docs for %{name}. %files doc %doc %{_docdir}/glibc/* %exclude %{_docdir}/glibc/gai.conf %exclude %{_docdir}/glibc/COPYING %exclude %{_docdir}/glibc/COPYING.LIB %files devel %if "%{name}" == "glibc" %doc %{_infodir}/libc.info* %endif %{_includedir}/* %{_libdir}/*.o %{_libdir}/*.so %exclude %{_libdir}/ld*-[.0-9]*.so %exclude %{_libdir}/lib*-[.0-9]*.so %{_libdir}/libc_nonshared.a # Exists for some, but not all arches %optional %{_libdir}/libmvec_nonshared.a %{_libdir}/libg.a %{_libdir}/libmcheck.a %optional %{_libdir}/libmvec.a %if %{build_biarch} %{_libdir32}/*.o %{_libdir32}/*.so %{_libdir32}/libc_nonshared.a %{_libdir32}/libg.a %{_libdir32}/libmcheck.a %if %isarch mips mipsel %exclude %{_libdir32}/ld*-[.0-9]*.so %exclude %{_libdir32}/lib*-[.0-9]*.so %exclude %{_libdirn32}/ld*-[.0-9]*.so %exclude %{_libdirn32}/lib*-[.0-9]*.so %{_libdirn32}/*.o %{_libdirn32}/*.so %{_libdirn32}/libc_nonshared.a %{_libdirn32}/libg.a %{_libdirn32}/libmcheck.a %exclude %{_libdir}/ld*-[.0-9]*.so %exclude %{_libdir}/lib*-[.0-9]*.so %endif %endif #----------------------------------------------------------------------- %package static-devel Summary: Static libraries for GNU C library Group: Development/C Requires: %{name}-devel = %{EVRD} Requires: %{_lib}crypt-static-devel >= 4.4.3 %description static-devel The glibc-static-devel package contains the static libraries necessary for developing programs which use the standard C libraries. Install glibc-static-devel if you need to statically link your program or library. %files static-devel %{_libdir}/libBrokenLocale.a %{_libdir}/libanl.a %{_libdir}/libc.a %{_libdir}/libdl.a %{_libdir}/libm.a # Versioned libm.a seems to be generated only on x86_64 %optional %{_libdir}/libm-[0-9]*.a %{_libdir}/libpthread.a %{_libdir}/libresolv.a %{_libdir}/librt.a %{_libdir}/libutil.a %if %{build_biarch} %{_libdir32}/libBrokenLocale.a %{_libdir32}/libanl.a %{_libdir32}/libc.a %{_libdir32}/libdl.a %{_libdir32}/libm.a %{_libdir32}/libpthread.a %{_libdir32}/libresolv.a %{_libdir32}/librt.a %{_libdir32}/libutil.a %if %isarch mips mipsel %{_libdirn32}/libBrokenLocale.a %{_libdirn32}/libanl.a %{_libdirn32}/libc.a %{_libdirn32}/libdl.a %{_libdirn32}/libm.a %{_libdirn32}/libpthread.a %{_libdirn32}/libresolv.a %{_libdirn32}/librt.a %{_libdirn32}/libutil.a %endif %endif ######################################################################## %if %{with nscd} #----------------------------------------------------------------------- %package -n nscd Summary: A Name Service Caching Daemon (nscd) Group: System/Servers %description -n nscd Nscd caches name service lookups and can dramatically improve performance with NIS+, and may help with DNS as well. %post -n nscd # nscd user pre-exists in the "setup" package, # so not creating it here %systemd_post nscd.service %{_sbindir}/nscd -i passwd -i group || : %preun -n nscd %systemd_preun nscd.service %files -n nscd %config(noreplace) %{_sysconfdir}/nscd.conf %dir %attr(0755,root,root) %{_var}/db/nscd %dir %attr(0755,root,root) %{_sysconfdir}/netgroup %{_presetdir}/86-nscd.preset %{_unitdir}/nscd.service %{_sbindir}/nscd %{_tmpfilesdir}/nscd.conf %attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) %{_var}/db/nscd/passwd %attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) %{_var}/db/nscd/group %attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) %{_var}/db/nscd/hosts %attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) %{_var}/db/nscd/services %ghost %config(missingok,noreplace) %{_sysconfdir}/sysconfig/nscd #----------------------------------------------------------------------- # with nscd %endif ######################################################################## %if %{with utils} #----------------------------------------------------------------------- %package utils Summary: Development utilities from GNU C library Group: Development/Other Requires: %{name} = %{EVRD} %description utils The glibc-utils package contains memusage, a memory usage profiler, mtrace, a memory leak tracer and xtrace, a function call tracer which can be helpful during program debugging. If unsure if you need this, don't install this package. %files utils %{_bindir}/memusage %{_bindir}/memusagestat %{_bindir}/mtrace %{_bindir}/pcprofiledump %{_bindir}/xtrace %{_libdir}/libmemusage.so %{_libdir}/libpcprofile.so %if %{build_biarch} %{_libdir32}/libmemusage.so %{_libdir32}/libpcprofile.so %endif #----------------------------------------------------------------------- # with utils %endif ######################################################################## %if %{with i18ndata} #----------------------------------------------------------------------- %package i18ndata Summary: Database sources for 'locale' Group: System/Libraries Provides: glibc-localedata = %{EVRD} %description i18ndata This package contains the data needed to build the locale data files to use the internationalization features of the GNU libc. %files i18ndata %dir %{_datadir}/i18n %dir %{_datadir}/i18n/charmaps %{_datadir}/i18n/charmaps/* %dir %{_datadir}/i18n/locales %{_datadir}/i18n/locales/* %{_datadir}/i18n/SUPPORTED #----------------------------------------------------------------------- # with i18ndata %endif ######################################################################## %if %{with timezone} #----------------------------------------------------------------------- %package -n timezone Summary: Time zone descriptions Group: System/Base %description -n timezone These are configuration files that describe possible time zones. %files -n timezone %{_sbindir}/zdump %{_sbindir}/zic %doc %{_mandir}/man1/zdump.1* %{_datadir}/zoneinfo #----------------------------------------------------------------------- # with timezone %endif %if %{with crosscompilers} %global kernelver %(rpm -q --qf '%%{version}-%%{release}%%{disttag}' kernel-release-source) %( for i in %{long_targets}; do [ "$i" = "%{_target_platform}" ] && continue package=cross-${i}-libc cat <@@g' -e 's@@@g' -i configure* aclocal autoconf #----------------------------------------------------------------------- %build # qemu hack %ifarch %{riscv} export libc_cv_mtls_dialect_gnu2=yes %endif # ... mkdir -p bin ln -sf %{_bindir}/ld.bfd bin/ld export PATH=$PWD/bin:$PATH # Prepare test matrix in the next function > %{checklist} # # WithSelinux # # When building on 64 bit system 32 bit binaries are also built. # But building with --with-selinux requires linking with at least libselinux. # This linking requires a 32 bit libselinux.so, but 32 bit repositories # are not or may not be available at build time, so there is no source to take # 32 bit libselinux.so from. Only nscd executable is linked with libselinux # and we do not need to build 32 bit nscd executable on 64 bit systems, # so let's just omit selinux when building 32 bit binaries on 64 bit systems. function WithSelinux() { %if %{with selinux} if [ "$BIARCH_BUILDING" = 0 ] then echo '--with-selinux' else echo '--without-selinux' fi %else echo '--without-selinux' %endif } # # BuildGlibc [+] # function BuildGlibc() { arch="$1" shift 1 # Select optimization flags and compiler to use BuildAltArch="no" BuildCompFlags="" # -Wall is just added to get conditionally %%optflags printed... # cut -flto flag BuildFlags="$(rpm --target ${arch}-%{_target_os} -D '%__common_cflags_with_ssp -Wall' -E %%{optflags} | sed -e 's# -fPIC##g' -e 's#-m64##' -e 's#-gdwarf-4##;s#-g[0-3]##;s#-gdwarf-[0-9]##;s#-g##' -e 's#-flto##' -e 's#-m[36][24]##' -e 's#-O[sz0-9]#-O3#')" #BuildFlags="-O2" case $arch in i[3-6]86) %ifarch %{x86_64} %ifarch znver1 BuildFlags="$BuildFlags -march=znver1 -mtune=znver1" %else BuildFlags="$BuildFlags -march=x86-64 -mtune=generic" %endif BuildAltArch="yes" BuildCompFlags="-m32" %endif %ifarch %{ix86} BuildFlags="$BuildFlags -march=i686 -msse -mfpmath=sse -fasynchronous-unwind-tables -mtune=generic -mstackrealign" %endif ;; znver1) BuildFlags="$BuildFlags -march=znver1 -mtune=znver1" ;; x86_64) BuildFlags="$BuildFlags -march=x86-64 -mtune=generic" ;; mips|mipsel) BuildCompFlags="$BuildFlags" ;; mips32|mips32el) BuildFlags="$BuildFlags -march=mips3 -mabi=n32" BuildCompFlags="$BuildFlags -march=mips3 -mabi=n32" ;; mips64|mips64el) BuildFlags="$BuildFlags -march=mips3 -mabi=64" BuildCompFlags="$BuildFlags -march=mips3 -mabi=64" ;; armv5t*) BuildFlags="$BuildFlags -march=armv5t" BuildCompFlags="$BuildFlags -march=armv5t" ;; # to check armv7*) # As of gcc 8.3.0, glibc 2.29, using -funwind-tables or -fasynchronous-unwind-tables # on armv7hnl results in a build failure because configure can't find a # compiler it believes to be working -- with -nostdlib, we get an # undefined reference to __aeabi_unwind_cpp_pr0 BuildFlags="$(echo $BuildFlags |sed -e 's,-funwind-tables ,,g;s,-fasynchronous-unwind-tables,,g')" BuildCompFlags="$BuildFlags" ;; armv6*) BuildCompFlags="$BuildFlags" ;; esac BuildCompFlags="$BuildCompFlags" # Choose biarch support MultiArchFlags= case $arch in i686|x86_64|znver1) MultiArchFlags="--enable-multi-arch" ;; esac # Determine C & C++ compilers BuildCC="gcc -fuse-ld=bfd $BuildCompFlags" BuildCXX="g++ -fuse-ld=bfd $BuildCompFlags" # Are we supposed to cross-compile? if [ "%{target_cpu}" != "%{_target_cpu}" ]; then # Can't use BuildCC anymore with previous changes. BuildCC="%{cross_program_prefix}gcc $BuildCompFlags" BuildCXX="%{cross_program_prefix}g++ $BuildCompFlags" BuildCross="--build=%{_target_platform}" export libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes fi # set some extra flags here # (tpg) build with -O3 BuildFlags="$BuildFlags -Wp,-D_GLIBCXX_ASSERTIONS -DNDEBUG=1 -fstack-clash-protection %(echo %{optflags} |sed -e 's#-m[36][24]##g;s#-O[s2]#-O3#g')" # BuildFlags="-O2" %ifnarch %{arm} # As of gcc 8.3.0, glibc 2.29, using -funwind-tables or -fasynchronous-unwind-tables # on armv7hnl results in a build failure because configure can't find a # compiler it believes to be working -- with -nostdlib, we get an # undefined reference to __aeabi_unwind_cpp_pr0 BuildFlags="-funwind-tables -fasynchronous-unwind-tables $BuildFlags" %endif BuildFlags="$BuildFlags -fno-lto" if [ "$arch" = 'i586' ] || [ "$arch" = 'i686' ]; then # Work around https://sourceware.org/ml/libc-alpha/2015-10/msg00745.html BuildCC="$BuildCC -fomit-frame-pointer" BuildCXX="$BuildCXX -fomit-frame-pointer" fi # XXX: -frecord-gcc-switches makes gold abort with assertion error and gcc segfault :| BuildFlags="$(echo $BuildFlags |sed -e 's#-frecord-gcc-switches##g')" # Do not use direct references against %gs when accessing tls data # XXX make it the default in GCC? (for other non glibc specific usage) %if %isarch %{xenarches} BuildFlags="$BuildFlags -mno-tls-direct-seg-refs" %endif # Extra configure flags ExtraFlags= # We'll be having issues with biarch builds of these two as longs as their # build dependencies aren't provided as biarch packages as well. # But as the alternate arch is less likely to make any use of the # functionality and that we might just ditch biarch packaging completely, # we just enable it on the main arch for now. %if %{with systap} if [ "$BuildAltArch" = 'no' ]; then %if %{with systap} ExtraFlags="$ExtraFlags --enable-systemtap" %endif fi %endif # Add-ons AddOns="libidn" # Kernel headers directory %if "%{name}" == "glibc" KernelHeaders=%{_includedir} %else KernelHeaders=/usr/%{target_arch}-%{_target_os}/include %endif LIB=$(rpm --macros %{_usrlibrpm}/macros:%{_usrlibrpm}/platform/${arch}-%{_target_os}/macros --target=${arch} -E %%{_lib}) LIBDIR=$(rpm --macros %{_usrlibrpm}/macros:%{_usrlibrpm}/platform/${arch}-%{_target_os}/macros --target=${arch} -E %%{_libdir}) # Determine library name glibc_cv_cc_64bit_output=no if echo ".text" | $BuildCC -c -o test.o -xassembler -; then case $(/usr/bin/file test.o) in *"ELF 64"*) glibc_cv_cc_64bit_output=yes ;; esac fi rm -f test.o # Force a separate object dir mkdir -p build-$arch-linux cd build-$arch-linux export libc_cv_slibdir=${LIBDIR} [ "$BuildAltArch" = 'yes' ] && touch ".alt" || touch ".main" case $arch in znver1) configarch=x86_64 ;; *) configarch=$arch ;; esac echo CC="$BuildCC" CXX="$BuildCXX" CFLAGS="$BuildFlags -Wno-error" ARFLAGS="$ARFLAGS --generate-missing-build-notes=yes" LDFLAGS="%{build_ldflags} -fuse-ld=bfd" CC="$BuildCC" CXX="$BuildCXX" CFLAGS="$BuildFlags -Wno-error" ARFLAGS="$ARFLAGS --generate-missing-build-notes=yes" LDFLAGS="%{build_ldflags} -fuse-ld=bfd" ../configure \ --target=$configarch-%{platform} \ --host=$configarch-%{platform} \ $BuildCross \ --prefix=%{_prefix} \ --bindir=%{_bindir} \ --sbindir=%{_sbindir} \ --libexecdir=%{_prefix}/libexec \ --libdir=${LIBDIR} \ --infodir=%{_infodir} \ --localedir=%{_localedir} \ --enable-add-ons=$AddOns \ --disable-profile \ --enable-static \ --disable-nss-crypt \ --disable-crypt \ $(WithSelinux) \ %if %{with nscd} --enable-build-nscd \ %else --disable-build-nscd \ %endif --enable-bind-now \ --enable-lock-elision \ --enable-tunables \ --enable-stack-protector=strong \ $ExtraFlags \ $MultiArchFlags \ --enable-kernel=%{enablekernel} \ --with-headers=$KernelHeaders ${1+"$@"} \ --with-bugurl=%{bugurl} # FIXME drop -j1 if the Makefiles ever get fixed for parallel build if [ "$BuildAltArch" = "yes" ]; then %make_build -j1 -r all subdir_stubs LIBGD=no else %make_build -j1 -r all subdir_stubs fi cd - check_flags="-k" # Generate test matrix [ -d "build-$arch-linux" ] || { echo "ERROR: PrepareGlibcTest: build-$arch-linux does not exist!" return 1 } local BuildJobs="%{_smp_mflags}" echo "$BuildJobs -d build-$arch-linux $check_flags" >> %{checklist} case $arch in i[56]86) base_arch=i686;; *) base_arch=none;; esac [ -d "build-$base_arch-linux" ] && { check_flags="$check_flags -l build-$base_arch-linux/elf/ld.so" echo "$BuildJobs -d build-$arch-linux $check_flags" >> %{checklist} } return 0 } %if %{with crosscompilers} TOP="$(pwd)" for i in %{targets}; do CPU=$(echo $i |cut -d- -f1) OS=$(echo $i |cut -d- -f2) TRIPLET="$(rpm --target=${CPU}-${OS} -E %%{_target_platform})" if [ "${TRIPLET}" = "%{_target_platform}" ]; then echo "===== Skipping $i cross libc (native arch) =====" continue fi echo "===== Building %{_target_platform} -> $i ($TRIPLET) cross libc =====" mkdir -p obj-${TRIPLET} cd obj-${TRIPLET} # CFLAGS="$(rpm --target ${i} --eval '%%{optflags} -fuse-ld=bfd -fno-strict-aliasing -Wno-error' |sed -e 's,-m[36][24],,;s,-flto,,g;s,-Werror[^ ]*,,g')" \ # CXXFLAGS="$(rpm --target ${i} --eval '%%{optflags} -fuse-ld=bfd -fno-strict-aliasing -Wno-error' |sed -e 's,-m[36][24],,;s,-flto,,g;s,-Werror[^ ]*,,g')" \ # ASFLAGS="$(rpm --target ${i} --eval '%%{optflags} -fuse-ld=bfd -fno-strict-aliasing -Wno-error' |sed -e 's,-m[36][24],,;s,-flto,,g;s,-Werror[^ ]*,,g')" \ # LDFLAGS="$(rpm --target ${i} --eval '%%{ldflags} -fuse-ld=bfd -fno-strict-aliasing -Wno-error' |sed -e 's,-m[36][24],,;s,-flto,,g')" \ CC="${TRIPLET}-gcc ${CFLAGS}" \ ../configure \ --prefix=%{_prefix}/${TRIPLET} \ --host=${TRIPLET} \ --target=${TRIPLET} \ --with-gnu-ld=${TRIPLET}-ld.bfd \ --with-headers=%{_prefix}/${TRIPLET}/include # We set CXX to empty to prevent links-dso-program from being built # (it may not work -- if we're using a bootstrap version of gcc, # there's no libstdc++ or libgcc_s) # the " || make ..." part is a workaround for the build failing on # aarch64 boxes with lots of cores while building the iconv converters # for the i686 crosscompiler. This should be fixed properly at some # point. %make_build CXX="" LIBGD=no || make CXX="" LIBGD=no if echo $i |grep -q ppc64le; then # FIXME for reasons yet to be determined, the ppc64le build # forgets about some components (but gets them right if # given a kick in the right direction) if [ -d cstdlib ]; then echo "ppc64le SMP build bug seems to have been fixed." echo "Please remove the workaround from the spec." exit 1 fi mkdir cstdlib cmath make CC="${CC}" CXX="" LIBGD=no fi DD="${TOP}/instroot-${TRIPLET}" %make_install DESTDIR="${DD}" cd .. # Make legacy build systems that hardcode -ldl and/or -lpthread happy echo '/* GNU ld script */' >${DD}%{_prefix}/${TRIPLET}/lib/libdl.so echo '/* GNU ld script */' >${DD}%{_prefix}/${TRIPLET}/lib/libutil.so echo '/* GNU ld script */' >${DD}%{_prefix}/${TRIPLET}/lib/librt.so echo '/* GNU ld script */' >${DD}%{_prefix}/${TRIPLET}/lib/libpthread.so # Get rid of object files to be a little friendlier to tmpfs buildroots rm -rf "obj-${TRIPLET}" # We need to get rid of this hardcode at some point so the sysroot can # double as a chroot... But we probably can't do this before the FS # changes, it breaks second stage gcc crosscompilers # sed -i -e "s,%{_prefix}/$i,,g" ${DD}%{_prefix}/$i/lib/libc.so done %endif # Build main glibc export BIARCH_BUILDING=0 BuildGlibc %{target_cpu} export BIARCH_BUILDING=1 %if %{build_biarch} %if %isarch %{x86_64} BuildGlibc i686 %endif %if %isarch mips BuildGlibc mips64 BuildGlibc mips32 %endif %if %isarch mipsel BuildGlibc mips64el BuildGlibc mips32el %endif %if %isarch mips64 BuildGlibc mips BuildGlibc mips32 %endif %if %isarch mips64el BuildGlibc mipsel BuildGlibc mips32el %endif %else # Build i686 libraries if not already building for i686 case %{target_cpu} in i686) ;; i[3-5]86) BuildGlibc i686 ;; esac %endif #----------------------------------------------------------------------- %if %{with tests} %check # ... export PATH=$PWD/bin:$PATH export TMPDIR=/tmp export TIMEOUTFACTOR=16 while read arglist; do sh %{SOURCE5} $arglist || exit 1 done < %{checklist} %endif #----------------------------------------------------------------------- %install # ... %if !%isarch %{mipsx} export PATH=$PWD/bin:$PATH %endif builddir="$(pwd)" %if %{with crosscompilers} for i in %{long_targets}; do if [ "${i}" = "%{_target_platform}" ]; then echo "===== Skipping $i cross libc (native arch)" continue fi echo "===== Installing %{_target_platform} -> $i cross libc =====" cp -a instroot-${i}/* %{buildroot} done %endif make install_root=%{buildroot} install -C build-%{target_cpu}-linux %if %{build_biarch} || %isarch %{mips} %{mipsel} %if %isarch %{x86_64} ALT_ARCHES=i686-linux %endif %if %isarch %{mips} ALT_ARCHES="mips64-linux mips32-linux" %endif %if %isarch %{mipsel} ALT_ARCHES="mips64el-linux mips32el-linux" %endif %if %isarch mips64 ALT_ARCHES="mips-linux mips32-linux" %endif %if %isarch mips64el ALT_ARCHES="mipsel-linux mips32el-linux" %endif for ALT_ARCH in $ALT_ARCHES; do mkdir -p %{buildroot}/$ALT_ARCH %make install_root=%{buildroot}/$ALT_ARCH LIBGD=no -C build-$ALT_ARCH \ install # Dispatch */lib only case "$ALT_ARCH" in mips32*) LIB="%{_libdirn32}" ;; mips64*) LIB="%{_libdir}" ;; mips*) LIB="%{_libdir32}" ;; *) LIB=%{_prefix}/lib ;; esac mv %{buildroot}/$ALT_ARCH/$LIB %{buildroot}/$LIB mv %{buildroot}/$ALT_ARCH%{_libexecdir}/getconf/* %{buildroot}%{_prefix}/libexec/getconf/ rm -rf %{buildroot}/$ALT_ARCH # XXX Dispatch 32-bit stubs (sed '/^@/d' include/stubs-prologue.h; LC_ALL=C sort $(find build-$ALT_ARCH -name stubs)) \ > %{buildroot}%{_includedir}/gnu/stubs-32.h done %endif # Install extra glibc libraries function InstallGlibc() { local BuildDir="$1" local SubDir="$2" local LibDir="$3" [ -z "$LibDir" ] && LibDir="%{_libdir}" cd $BuildDir mkdir -p %{buildroot}$LibDir/$SubDir/ install -m755 libc.so %{buildroot}$LibDir/$SubDir/$(basename %{buildroot}$LibDir/libc-*.so) ln -sf $(basename %{buildroot}$LibDir/libc-*.so) %{buildroot}$LibDir/$SubDir/$(basename %{buildroot}$LibDir/libc.so.*) install -m755 math/libm.so %{buildroot}$LibDir/$SubDir/$(basename %{buildroot}$LibDir/libm-*.so) ln -sf $(basename %{buildroot}$LibDir/libm-*.so) %{buildroot}$LibDir/$SubDir/$(basename %{buildroot}$LibDir/libm.so.*) install -m755 nptl/libpthread.so %{buildroot}$LibDir/$SubDir/$(basename %{buildroot}$LibDir/libpthread-*.so) ln -sf $(basename %{buildroot}$LibDir/libpthread-*.so) %{buildroot}$LibDir/$SubDir/$(basename %{buildroot}$LibDir/libpthread.so.*) install -m755 nptl_db/libthread_db.so %{buildroot}$LibDir/$SubDir/$(basename %{buildroot}$LibDir/libthread_db-*.so) ln -sf $(basename %{buildroot}$LibDir/libthread_db-*.so) %{buildroot}$LibDir/$SubDir/$(basename %{buildroot}$LibDir/libthread_db.so.*) install -m755 rt/librt.so %{buildroot}$LibDir/$SubDir/$(basename %{buildroot}$LibDir/librt-*.so) ln -sf $(basename %{buildroot}$LibDir/librt-*.so) %{buildroot}$LibDir/$SubDir/$(basename %{buildroot}$LibDir/librt.so.*) cd - } # Install arch-specific optimized libraries %if %isarch %{i586} case %{target_cpu} in i[3-5]86) InstallGlibc build-i686-linux i686 ;; esac %endif # NPTL is not usable outside of glibc, so include # the generic one (RH#162634) install -m644 sysdeps/generic/stdio-lock.h -D %{buildroot}%{_includedir}/bits/stdio-lock.h # And needs sanitizing as well. install -m644 %{SOURCE10} -D %{buildroot}%{_includedir}/bits/libc-lock.h # Compatibility hack: this locale has vanished from glibc, but some other # programs are still using it. Normally we would handle it in the %pre # section but with glibc that is simply not an option mkdir -p %{buildroot}%{_localedir}/ru_RU/LC_MESSAGES install -m 644 %{SOURCE11} %{buildroot}%{_sysconfdir}/nsswitch.conf # This is for nscd - in glibc 2.2 %if %{with nscd} install -m644 nscd/nscd.conf -D %{buildroot}%{_sysconfdir}/nscd.conf install -m755 -d %{buildroot}%{_sysconfdir}/sysconfig touch %{buildroot}%{_sysconfdir}/sysconfig/nscd install -m755 -d %{buildroot}%{_sysconfdir}/netgroup mkdir -p %{buildroot}%{_unitdir} install -m 644 nscd/nscd.service %{buildroot}%{_unitdir} install -m644 nscd/nscd.tmpfiles -D %{buildroot}%{_tmpfilesdir}/nscd.conf install -m755 -d %{buildroot}%{_var}/db/nscd touch %{buildroot}%{_var}/db/nscd/{passwd,group,hosts,services} install -d %{buildroot}%{_presetdir} cat > %{buildroot}%{_presetdir}/86-nscd.preset << EOF enable nscd.service EOF %endif # Include ld.so.conf %if "%{name}" == "glibc" %if %isarch mips mipsel # needed to get a ldd which understands o32, n32, 64 install -m755 build-%{_target_cpu}-linux/elf/ldd %{buildroot}%{_bindir}/ldd %endif # ldconfig cache mkdir -p %{buildroot}%{_var}/cache/ldconfig truncate -s 0 %{buildroot}%{_var}/cache/ldconfig/aux-cache # Note: This has to happen before creating /etc/ld.so.conf. # ldconfig is statically linked, so we can use the new version. %{buildroot}%{_sbindir}/ldconfig -N -r %{buildroot} echo "include /etc/ld.so.conf.d/*.conf" > %{buildroot}%{_sysconfdir}/ld.so.conf chmod 644 %{buildroot}%{_sysconfdir}/ld.so.conf mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d echo '/%{_lib}' >%{buildroot}%{_sysconfdir}/ld.so.conf.d/legacy.conf # gconv modules for i in %{buildroot}%{_libdir}/gconv/*.so; do B=$(basename $i) echo $B |grep -qE '^(UNICODE|UTF)' || echo "%{_libdir}/gconv/$B" >>extra-charsets.list done %if %{build_biarch} for i in %{buildroot}%{_prefix}/lib/gconv/*.so; do B=$(basename $i) echo $B |grep -qE '^(UNICODE|UTF)' || echo "%{_prefix}/lib/gconv/$B" >>extra-charsets32.list done %endif # gconv-modules.cache truncate -s 0 %{buildroot}%{_libdir}/gconv/gconv-modules.cache chmod 644 %{buildroot}%{_libdir}/gconv/gconv-modules.cache %if %{build_biarch} touch %{buildroot}%{_libdir32}/gconv/gconv-modules.cache chmod 644 %{buildroot}%{_libdir32}/gconv/gconv-modules.cache %endif truncate -s 0 %{buildroot}%{_sysconfdir}/ld.so.cache %endif # Are we cross-compiling? Strip="strip" if [ "%{_target_cpu}" != "%{target_cpu}" ]; then Strip="%{cross_program_prefix}$Strip" fi # Strip debugging info from all static libraries cd %{buildroot}%{_libdir} for i in *.a; do if [ -f "$i" ]; then case "$i" in *_p.a) ;; *) LC_ALL=C file $i |grep -q archive && $Strip -g -R .comment -R .GCC.command.line $i ;; esac fi done cd - %if %{with i18ndata} install -m644 localedata/SUPPORTED %{buildroot}%{_datadir}/i18n/ %endif rm -r %{buildroot}%{_includedir}/netatalk/ # /etc/localtime - we're proud of our timezone #Well we(mdk) may put Paris %if %{with timezone} rm %{buildroot}%{_sysconfdir}/localtime cp -f %{buildroot}%{_datadir}/zoneinfo/CET %{buildroot}%{_sysconfdir}/localtime %endif # Documentation install -m 755 -d %{buildroot}%{_docdir}/glibc cd build-%{target_cpu}-linux %if %{with doc} make html cp -fpar manual/libc %{buildroot}%{_docdir}/glibc/html %endif %if %{with pdf} make pdf install -m644 -D manual/libc.pdf %{buildroot}%{_docdir}/glibc/libc.pdf %endif cd - install -m 644 COPYING COPYING.LIB README NEWS INSTALL \ hesiod/README.hesiod \ posix/gai.conf \ %{buildroot}%{_docdir}/glibc install -m 644 timezone/README %{buildroot}%{_docdir}/glibc/README.timezone # Make legacy Makefiles/build scripts that hardcode # -ldl and/or -lpthread happy echo '/* GNU ld script */' >%{buildroot}%{_libdir}/libdl.so echo '/* GNU ld script */' >%{buildroot}%{_libdir}/libutil.so echo '/* GNU ld script */' >%{buildroot}%{_libdir}/librt.so echo '/* GNU ld script */' >%{buildroot}%{_libdir}/libpthread.so %if "%{_lib}" != "lib" if [ -e %{buildroot}%{_prefix}/lib/libc.so ]; then echo '/* GNU ld script */' >%{buildroot}%{_prefix}/lib/libdl.so echo '/* GNU ld script */' >%{buildroot}%{_prefix}/lib/libutil.so echo '/* GNU ld script */' >%{buildroot}%{_prefix}/lib/librt.so echo '/* GNU ld script */' >%{buildroot}%{_prefix}/lib/libpthread.so fi %endif # Localization %if "%{name}" == "glibc" %find_lang libc %else touch libc.lang %endif %if %{with crosscompilers} # (tpg) remove duplicated langs from lang list for i in %{long_targets}; do [ "$i" = "%{_target_platform}" ] && continue grep -E "%{_prefix}/${i}($|/)" libc.lang >cross-${i}.lang || echo "%optional /no/locales/for/$i" >cross-${i}.lang cat libc.lang cross-${i}.lang |sort |uniq -u >libc.lang.new # We want to own the whole directory, not just libc.mo sed -i -e 's,/libc.mo$,,' cross-${i}.lang mv libc.lang.new libc.lang done %endif # Remove unpackaged files rm -f %{buildroot}%{_bindir}/rpcgen %{buildroot}%{_mandir}/man1/rpcgen.1* # XXX: verify #find %{buildroot}%{_localedir} -type f -name LC_\* -o -name SYS_LC_\* |xargs rm -f %if %{without utils} rm -f %{buildroot}%{_bindir}/memusage rm -f %{buildroot}%{_bindir}/memusagestat rm -f %{buildroot}%{_bindir}/mtrace rm -f %{buildroot}%{_bindir}/pcprofiledump rm -f %{buildroot}%{_bindir}/xtrace rm -f %{buildroot}%{_libdir}/libmemusage.so rm -f %{buildroot}%{_libdir}/libpcprofile.so %if %{build_biarch} rm -f %{buildroot}%{_libdir32}/libmemusage.so rm -f %{buildroot}%{_libdir32}/libpcprofile.so %endif %if %isarch %{mips} %{mipsel} rm -f %{buildroot}%{_libdirn32}/libmemusage.so rm -f %{buildroot}%{_libdirn32}/libpcprofile.so %endif %endif %if !%{with timezone} rm -f %{buildroot}%{_sbindir}/zic rm -f %{buildroot}%{_mandir}/man1/zdump.1* %endif %if !%{with i18ndata} rm -rf %{buildroot}%{_datadir}/i18n %endif %if %{with locales} # Generate locales... export LDSO="$(ls -1 %{buildroot}%{_libdir}/ld-*.so* |head -n1) --library-path %{buildroot}%{_libdir}" # default charset pseudo-locales for DEF_CHARSET in UTF-8 ISO-8859-1 ISO-8859-2 ISO-8859-3 ISO-8859-4 \ ISO-8859-5 ISO-8859-7 ISO-8859-9 \ ISO-8859-13 ISO-8859-14 ISO-8859-15 KOI8-R KOI8-U CP1251 do # don't use en_DK because of LC_MONETARY $LDSO %{buildroot}%{_bindir}/localedef -c -f $DEF_CHARSET -i en_US --prefix %{buildroot} %{buildroot}%{_datadir}/locale/$DEF_CHARSET done # Build regular locales LANGS="$(sed '1,/^SUPPORTED-LOCALES=/d;s,\\$,,;s,\n,,' ${builddir}/localedata/SUPPORTED)" export I18NPATH=%{buildroot}%{_datadir}/i18n for l in $LANGS; do LNG=$(echo $l |cut -d/ -f1) CS=$(echo $l |cut -d/ -f2) $LDSO %{buildroot}%{_bindir}/localedef --prefix %{buildroot} -i "$(echo $LNG |sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/')" -c -f $CS %{buildroot}%{_datadir}/locale/$LNG done # Replace files identical to default locales # with symlinks find %{buildroot}%{_datadir}/locale -name LC_CTYPE -samefile %{buildroot}%{_datadir}/locale/C.UTF-8/LC_CTYPE |while read r; do [ "$r" = "%{buildroot}%{_datadir}/locale/C.UTF-8/LC_CTYPE" ] && continue echo "===== Symlinking $r to C.UTF-8 =====" ln -sf ../C.UTF-8/LC_CTYPE "$r" done # Locale related tools install -c -m 755 %{SOURCE1001} %{SOURCE1002} %{buildroot}%{_bindir}/ # And configs install -c -m 644 %{SOURCE1003} -D %{buildroot}%{_sysconfdir}/sysconfig/locales # Hardlink identical locales %{_sbindir}/hardlink -qc %{buildroot}%{_datadir}/locale # Symlink identical files # TODO # Needed for/used by locale-archive mkdir -p %{buildroot}%{_prefix}/lib/locale touch %{buildroot}%{_prefix}/lib/locale/locale-archive %endif # Remove stuff we get from libxcrypt rm -f %{buildroot}%{_prefix}/*/libcrypt.a %{buildroot}%{_includedir}/crypt.h %{buildroot}/*/libcrypt* %{buildroot}%{_prefix}/*/libcrypt.a # remove broken symlink rm -f %{buildroot}%{_prefix}/lib/libcrypt.so %ifarch aarch64 # Compat symlink -- some versions of ld hardcoded /lib/ld-linux-aarch64.so.1 # as dynamic loader (probably die to ABI spec saying this) mkdir -p %{buildroot}/lib ln -s /lib64/ld-linux-aarch64.so.1 %{buildroot}/lib/ld-linux-aarch64.so.1 %endif %ifarch riscv64 # RISC-V ABI wants to install everything in /lib64/lp64d or /usr/lib64/lp64d. # Make these be symlinks to /lib64 or /usr/lib64 respectively. See: # https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/DRHT5YTPK4WWVGL3GIN5BF2IKX2ODHZ3/ mkdir -p %{buildroot}%{_libdir} (cd %{buildroot}%{_libdir} && rm -f lp64d; ln -sf . lp64d) # Compat symlink -- some versions of ld hardcoded /lib/ld-linux-aarch64.so.1 # as dynamic loader mkdir -p %{buildroot}/lib ln -s ../usr/lib64/ld-linux-riscv64-lp64d.so.1 %{buildroot}/lib/ld-linux-riscv64-lp64d.so.1 %endif %ifarch %{x86_64} # Needed for bootstrapping x32 compilers [ -e %{buildroot}%{_includedir}/gnu/stubs-x32.h ] || cp %{buildroot}%{_includedir}/gnu/stubs-64.h %{buildroot}%{_includedir}/gnu/stubs-x32.h %endif # This will make the '-g' argument to be passed to eu-strip for these libraries, so that # some info is kept that's required to make valgrind work without depending on glibc-debug # package to be installed. export EXCLUDE_FROM_FULL_STRIP="ld-%{version}.so libpthread libc-%{version}.so libm-%{version}.so" # Disallow linking against libc_malloc_debug. %if %{build_biarch} rm -f %{buildroot}%{_prefix}/lib/libc_malloc_debug.so %endif rm -f %{buildroot}%{_libdir}/libc_malloc_debug.so %if %{with locales} %files -n locales %{_bindir}/locale_install.sh %{_bindir}/locale_uninstall.sh %config(noreplace) %{_sysconfdir}/sysconfig/locales %dir %{_datadir}/locale %dir %{_prefix}/lib/locale %ghost %{_prefix}/lib/locale/locale-archive %{_datadir}/locale/ISO* %{_datadir}/locale/CP* %{_datadir}/locale/UTF* %{_datadir}/locale/KOI* %post -n locales %{_bindir}/locale_install.sh "ENCODINGS" %preun -n locales %{_bindir}/locale_uninstall.sh "ENCODINGS" %endif