# if you want to build glibc on this build platform for target ppc, building # for ppc: #rpmbuild -ba -target ppc-openmamba-linux-gnu glibc.spec # example: build a ppc cross-platform glibc package: #rpmbuild -ba --define='cross_target_cpu ppc' glibc.spec # example: build a arm cross-platform glibc package with soft floating point support: #rpmbuild -ba --define='cross_target_cpu arm' --define='softfloat 1' glibc.spec %define majver %(echo %version | cut -d. -f1-2) #%define minver %(echo %version | cut -d. -f3) %if "%{?build_doc}" == "" %define build_doc 1 %endif %if "%{?build_selinux}" == "" %define build_selinux 1 %endif # build a soft floating point targeted library (currently only for ARM) %if "%{?bigendian}" %define bigendian_append -bigendian %endif # build a soft floating point targeted library (currently only for ARM) %if "%{?softfloat}" %define softfloat_append -softfloat %endif # stage1: build only headers package %if "%{stage1}" == "1" %define bootstrap_append -stage1 %define build_doc 0 %define build_selinux 0 %endif # stage2: build what you can without requirements may not be present yet (doc,profile,selinux) %if "%{stage2}" == "1" %define bootstrap_append -stage2 %define build_doc 0 %define build_selinux 0 %endif %define target_cpu %(echo %{_target_platform} | cut -d- -f1) %if "%{_target_platform}" != "%{_host}" %define _as %{_target_platform}-as %define _ld %{_target_platform}-ld %define glibc_prefix %{_prefix}/%{_target_platform} %define glibc_libdir %{_prefix}/%{_target_platform}/lib %define glibc_datadir %{_prefix}/%{_target_platform}/share %define glibc_libexecdir %{_prefix}/%{_target_platform}/libexec %define glibc_includedir %{_prefix}/%{_target_platform}/include %define glibc_target_cpu %{_target_cpu} %define slibdir %{_prefix}/%{_target_platform}/lib %else %define _as as %define _ld ld %define glibc_prefix %{_prefix} %define glibc_libdir %{_libdir} %define glibc_datadir %{_datadir} %define glibc_libexecdir %{_libexecdir} %define glibc_includedir %{_includedir} %define glibc_target_cpu %{_target_cpu} %define slibdir %{_libdir} %endif %define buildcc %{_target_platform}-gcc %define buildcxx %{_target_platform}-g++ %if "%{_target_platform}" != "%{_build}" %define build_doc 0 %define build_selinux 0 %endif #% if "%{?KERNEL_VER}" == "" # % define KERNEL_VER %(uname -r | sed "s|\\([0-9.]*\\).*|\\1|" ) #% endif %if "%{?KERNEL_TARGET}" == "" %define KERNEL_TARGET %(uname -r | sed "s|[0-9.]*\\(.*\\)|\\1|" ) %endif Name: glibc Version: 2.34 Release: 5mamba Summary: The GNU libc libraries Group: System/Libraries Vendor: openmamba Distribution: openmamba Packager: Silvan Calarco URL: https://www.gnu.org/software/libc/ Source0: http://ftp.gnu.org/gnu/glibc/glibc-%{version}.tar.xz Source4: nscd-logrotate Source5: nscd-conf Source6: nscd-initscript Patch0: %{name}-2.4-manual-syntax-fix.patch Patch1: %{name}-2.6.1-strlcpy_strlcat-1.patch Patch2: %{name}-2.7-memcpy_chk_S.patch Patch3: %{name}-2.9-arm_local_args6.patch Patch4: %{name}-2.7-lowlevellock.patch Patch5: %{name}-2.16.0-localedata_openmamba.patch Patch6: %{name}-2.7-only-lookup-ipv6-if-it-makes-sense.patch Patch7: %{name}-2.7-gcc-4.3.patch Patch8: %{name}-2.7-x86-fnstsw.patch Patch9: %{name}-2.10.1-binutils-2.20.patch Patch10: %{name}-2.11.2-gcc-4.5.0.patch Patch11: %{name}-2.13-fix_prelink_ld_so.patch Patch12: %{name}-2.14.1-fix-segfault-at-dl-lookup.patch Patch13: %{name}-2.14-fix-resolver-crash-typo.patch Patch14: %{name}-2.14-rpc_nis_headers_restore.patch Patch15: glibc-ports-2.15-arm-libmemusage-libc_nonshared.patch Patch16: glibc-2.16.0-tetex-3.0.patch Patch17: glibc-2.21-prevent-ehaustion-of-tls-slots.patch Patch18: glibc-2.25-resolv-no-compat.patch License: LGPL ## AUTOBUILDREQ-BEGIN ## AUTOBUILDREQ-END BuildRequires: libidn-devel BuildRequires: binutils >= 2.13 %if "%{_host}" == "%{_build}" BuildRequires: coreutils >= 5.2.1 BuildRequires: perl >= 5.8.0 %endif BuildRequires: gettext-devel >= 0.14.0 BuildRequires: gawk BuildRequires: bison BuildRequires: texinfo >= 4.8 %if "%{?build_doc}" != "0" BuildRequires: tetex BuildRequires: tetex-latex Requires(post):%{__install_info} %endif %if "%{?build_selinux}" != "0" BuildRequires: libselinux-devel >= 1.22 BuildRequires: libcap-devel %endif %if "%{?stage1}" != "1" BuildRequires: kernelsanitisedheaders BuildRequires: libpython3-devel BuildRequires: elfutils %endif Requires: ldconfig = %{?epoch:%epoch:}%{version}-%{release} Requires: locales = %{?epoch:%epoch:}%{version}-%{release} Requires: glibc-utils = %{?epoch:%epoch:}%{version}-%{release} %systemd_requires # FIXME : # $> localedef -v -c -i da_DK -f UTF-8 /tmp/da_DK.UTF-8 # character map file `UTF-8' not found: No such file or directory # cannot read character map directory `/usr/share/i18n/charmaps': No such file or directory %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. The glibc package also contains national language (locale) support. %package devel Summary: Header and object files for development using standard C libraries. Group: Development/Libraries Requires: %{name} = %{?epoch:%epoch:}%{version}-%{release} Requires(pre): %{__install_info} %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. This package also includes the C header files for the Linux kernel. The header files define structures and constants that are needed for building most standard programs. The header files are also needed for rebuilding the kernel. Install glibc-devel if you are going to develop programs which will use the standard C libraries. %package multilib Summary: GNU libc multilib (lib32) libraries Group: System/Libraries Provides: glibc-multilib-i18ndata Obsoletes: glibc-multilib-i18ndata < 2.34 Provides: glibc-multilib-utils Obsoletes: glibc-multilib-utils < 2.34 %description multilib 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. The glibc-multilib package provides lib32 libraries for 32-bit build support on x86_64 arch. %package multilib-devel Summary: GNU libc multilib (lib32) libraries and files for development Group: Development/Libraries Requires: glibc-multilib = %{?epoch:%epoch:}%{version}-%{release} Provides: glibc-multilib-apidocs Obsoletes: glibc-multilib-apidocs < 2.34 %description multilib-devel 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. The glibc-multilib-devel package provides lib32 libbraries and other files for development for 32-bit build support on x86_64 arch. %if %{build_doc} %package apidocs Summary: GNU libc libraries API documentation Group: Documentation Requires: glibc-devel = %{?epoch:%epoch:}%{version}-%{release} %description apidocs GNU libc libraries API documentation. %endif %package i18ndata Summary: Database sources for 'locale' Group: System/Libraries Requires(pre): %{name} = %{?epoch:%epoch:}%{version}-%{release} %description i18ndata This package contains the data needed to build the locale data files to use the internationalization features of the GNU libc. %package utils Summary: Development utilities from GNU C library Group: Development/Tools Requires: %{name} = %{?epoch:%epoch:}%{version}-%{release} %description utils The glibc-utils package contains memusage, a memory usage profiler, mtrace, a memory leak tracer and, a function call tracer which can be helpful during program debugging. %package -n ldconfig Summary: Configure dynamic linker run time bindings Group: System/Tools # The dynamic linker supports DT_GNU_HASH Provides: rtld(GNU_HASH) Provides: rtld(GNU_UNIQUE) Provides: /sbin/ldconfig %description -n ldconfig ldconfig creates the necessary links and cache to the most recent shared libraries found in the directories specified on the command line, in the file /etc/ld.so.conf, and in the trusted directories (/lib and /usr/lib). The cache is used by the run-time linker, ld.so or ld-linux.so. ldconfig checks the header and file names of the libraries it encounters when determining which versions should have their links updated. %package -n timezone Summary: Time zone descriptions Group: System/Internationalization Requires: %{name} = %{?epoch:%epoch:}%{version}-%{release} Requires(post):tzdata %description -n timezone These are configuration files that describe possible time zones. %package -n locales Summary: Base files for localization Group: System/Internationalization Requires: %{name} = %{?epoch:%epoch:}%{version}-%{release} %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. %package -n nscd Summary: Name service cache daemon Group: System/Servers Requires: logrotate >= 3.6.8 %description -n nscd Nscd is a daemon that provides a cache for the most common name service requests. %package -n cross-%{_target_platform}-%{name}%{?bootstrap_append}%{?bigendian_append}%{?softfloat_append} Summary: Cross Platform glibc for %{_target_platform} Group: System/Libraries AutoReqProv: no %if "%{?stage2}" Obsoletes: cross-%{_target_platform}-%{name}-stage1%{?bigendian_append}%{?softfloat_append} <= %{version}-%{release} %else %if "%{?stage1}" == "" Provides: cross-%{_target_platform}-%{name}-stage2%{?bigendian_append}%{?softfloat_append} Obsoletes: cross-%{_target_platform}-%{name}-stage2%{?bigendian_append}%{?softfloat_append} <= %{version}-%{release} Obsoletes: cross-%{_target_platform}-%{name}-stage1%{?bigendian_append}%{?softfloat_append} <= %{version}-%{release} %endif %endif %description -n cross-%{_target_platform}-%{name}%{?bootstrap_append}%{?bigendian_append}%{?softfloat_append} Cross Platform glibc for %{_target_platform}. %if "%{_target_platform}" == "%{_host}" %debug_package %endif # Filter out all GLIBC_PRIVATE symbols since they are internal to # the package and should not be examined by any other tool. %global __filter_GLIBC_PRIVATE 1 %prep %setup -q #-D -T #:<< ___EOF %patch5 -p1 %patch17 -p1 #%patch18 -p1 %if "%{?stage2}" # link glibc without libgcc_eh, not available in stage1 cross compiler # this is the reason why also a glibc rebuild is needed later sed -i "s|-lgcc_eh||" Makeconfig %endif %if %{build_selinux} ln -sf %{_includedir}/selinux selinux ln -sf %{_includedir}/sys/capability.h include/sys/capability.h %endif %build #:<< ___EOF case %{target_cpu} in i*86|athlon*) platform_includes=asm-x86 buildflags="-mtune=pentiumpro -g -O2" CONFIG_OPTS="--enable-targets=i586-%{_target_vendor}-linux --enable-static-pie --enable-cet" ;; ppc|powerpc) platform_includes=asm-powerpc buildflags="-g -O2" CONFIG_OPTS="--enable-targets=powerpc64-%{_target_vendor}-linux" ;; arm) platform_includes=asm-arm buildflags="-g -O2" %if "%{?softfloat}" == "1" CONFIG_LIBDIR_ADD="/soft-float" CONFIG_ADD="--without-fp" CC_ADD="-msoft-float" %endif %if "%{?bigendian}" == "1" CONFIG_LIBDIR_ADD="/be${CONFIG_LIBDIR_ADD}" CC_ADD="-mbig-endian" AS_ADD="-mbig-endian" %endif CONFIG_OPTS="" ;; x86_64) platform_includes=asm-x86_64 buildflags="-g -O2" CONFIG_OPTS="--enable-targets=x86_64-%{_target_vendor}-linux --enable-multi-arch --enable-static-pie --enable-cet" ;; aarch64) platform_includes=asm-aarch64 buildflags="-g -O2" CONFIG_OPTS="--enable-targets=aarch64-%{_target_vendor}-linux --enable-multi-arch --enable-static-pie --enable-cet" ;; *) echo "Target CPU %{target_cpu} not supported. Aborting." exit 1 ;; esac # set kernel headers for platform if [ -e /usr/src/linux-%{KERNEL_VERSION}%{KERNEL_TARGET}/usr/include/linux/version.h ]; then headers_dir=/usr/src/linux-%{KERNEL_VERSION}%{KERNEL_TARGET}/usr/include elif [ -e /usr/src/linux-%{KERNEL_TARGET}/usr/include/linux/version.h ]; then headers_dir=/usr/src/linux-%{KERNEL_TARGET}/usr/include elif [ -e /usr/src/linux/usr/include/linux/version.h ]; then headers_dir=/usr/src/linux/usr/include else echo "ERROR: can't find suitable kernel headers; aborting." exit 1 fi %if "%{?stage2}" # hack, diable nptl for bootstrap gcc opt_tls="--enable-add-ons --with-tls --disable-sanity-checks" %else opt_tls="--enable-add-ons --with-tls" %endif %if %{build_selinux} opt_selinux="--with-selinux" %else opt_selinux="--without-selinux" %endif %if "%{?stage2}" == "1" # there is no --disable-ssp option echo "libc_cv_ssp=no" > config.cache %endif _configure_flags=( --build=%{_build} \ %if "%{?stage1}" != "1" --host=%{_target_platform} \ %endif %if "%{?stage2}" --cache-file=config.cache \ %endif --prefix=%{glibc_prefix} \ --infodir=%{_infodir} \ --libexecdir=%{glibc_libexecdir} \ # --with-headers=${headers_dir} \ --with-bugurl=https://bugs.openmamba.org/ \ ${opt_tls} ${opt_selinux} \ --enable-lock-elision \ %if "%{_target_platform}" == "%{_host}" --enable-stack-protector=strong \ --enable-stackguard-randomization \ --enable-systemtap \ %endif --enable-bind-now \ --enable-lock-elision \ --disable-profile \ --disable-werror \ PYTHON_PROG=%{__python3} \ $CONFIG_OPTS ) #:<< __EOF # Build rm -rf ../glibc-build mkdir ../glibc-build cd ../glibc-build export CFLAGS="$buildflags" export CXXFLAGS="$buildflags" ../%{name}-%{version}/configure \ ${_configure_flags[@]} echo "slibdir=%{slibdir}" >> configparms %if "%{_target_platform}" == "%{_host}" echo "rtlddir=%{_libdir}" >> configparms echo "sbindir=%{_bindir}" >> configparms echo "rootsbindir=%{_sbindir}" >> configparms %endif %if "%{?stage1}" != "1" # build libraries with fortify disabled echo "build-programs=no" >> configparms make %{_smp_mflags} -r %PARALLELMFLAGS=-s -j1 slibdir=%{slibdir} \ %if "%{_target_platform}" != "%{_host}" %if "%{?stage2}" != "1" LDLIBS-resolv.so+="-lssp" LDFLAGS-nscd+="-lssp" %else CXX= %endif %endif # re-enable fortify for programs sed -i "/build-programs=/s#no#yes#" configparms echo "CC += -D_FORTIFY_SOURCE=2" >> configparms echo "CXX += -D_FORTIFY_SOURCE=2" >> configparms make %{_smp_mflags} -r %PARALLELMFLAGS=-s slibdir=%{slibdir} #:<< __EOF # build documentation (pdf and html formats) %if %{build_doc} make pdf html %endif %endif #__EOF %if "%{_target_platform}" == "%{_host}" %ifarch x86_64 %if "%{?stage1}" != "1" %if "%{?stage2}" != "1" # Multilib rm -rf ../glibc-multilib-build mkdir ../glibc-multilib-build cd ../glibc-multilib-build export CC="gcc -m32 -mstackrealign" export CXX="g++ -m32 -mstackrealign" CFLAGS="-mtune=pentiumpro -g -O3 -Wl,--build-id" ../%{name}-%{version}/configure \ ${_configure_flags[@]} \ --host=i586-openmamba-linux-gnu \ --libdir=/usr/lib32 \ --libexecdir=/usr/lib32 \ --without-selinux # Disable building programs echo "build-programs=no" >> configparms echo "slibdir=/usr/lib32" >> configparms echo "rtlddir=/usr/lib32" >> configparms make %{_smp_mflags} -r %PARALLELMFLAGS=-s %endif %endif %endif %endif %install [ "%{buildroot}" != / ] && rm -rf %{buildroot} %if "%{?stage1}" != "1" # crelate ld.so.conf install -d %{buildroot}%{_sysconfdir}/ld.so.conf.d cat > %{buildroot}%{_sysconfdir}/ld.so.conf << _EOF include %{_sysconfdir}/ld.so.conf.d/*.conf _EOF %if "%{_target_platform}" == "%{_host}" # Multilib %ifarch x86_64 %makeinstall -C ../glibc-multilib-build cat > %{buildroot}%{_sysconfdir}/ld.so.conf.d/lib32-glibc.conf << _EOF /usr/lib32 _EOF # Symlink /usr/lib32/locale to /usr/lib/locale ln -s ../lib/locale %{buildroot}/usr/lib32/locale %endif %endif %makeinstall -C ../glibc-build # install openmamba default supported locales mv localedata/SUPPORTED localedata/SUPPORTED.orig mv localedata/SUPPORTED.openmamba localedata/SUPPORTED echo "%{_target_platform} == %{_host}" %if "%{_target_platform}" == "%{_build}" %ifarch aarch64 install -d -m0755 %{buildroot}%{_prefix}/lib ln -s ../lib64/ld-linux-aarch64.so.1 %{buildroot}%{_prefix}/lib/ld-linux-aarch64.so.1 %endif make localedata/install-locales -C ../glibc-build install_root=%{buildroot} %else # WORKAROUND: worked up to 2.21 mkdir -p %{buildroot}%{_prefix}/lib/locale make LOCALEDEF="I18NPATH=. LC_ALL=C localedef" localedata/install-locales -C ../glibc-build install_root=%{buildroot} mv %{buildroot}%{_prefix}/lib/locale/* %{buildroot}%{glibc_prefix}/lib/locale/ %endif mv localedata/SUPPORTED localedata/SUPPORTED.openmamba mv localedata/SUPPORTED.orig localedata/SUPPORTED install -m0644 localedata/SUPPORTED %{buildroot}%{glibc_datadir}/i18n/locales/ [-e %{buildroot}%{glibc_libdir}/libbsd-compat.a ] && ln -sf libbsd-compat.a %{buildroot}%{glibc_libdir}/libbsd.a %else # stage 1 make -C ../glibc-build install-headers install_root=%{buildroot} cross-compiling=yes # the following files are generated during the glibc build. # Fortunately, it is sufficient to substitute empty files for a first stage gcc build touch %{buildroot}%{glibc_includedir}/gnu/stubs.h touch %{buildroot}%{glibc_includedir}/bits/stdio_lim.h %endif rm -f %{buildroot}%{_sysconfdir}/localtime # install kernel headers if [ -e /usr/src/linux-%{KERNEL_VERSION}%{KERNEL_TARGET}/usr/include/linux/version.h ]; then headers_dir=/usr/src/linux-%{KERNEL_VERSION}%{KERNEL_TARGET}/usr/include elif [ -e /usr/src/linux-%{KERNEL_TARGET}/usr/include/linux/version.h ]; then headers_dir=/usr/src/linux-%{KERNEL_TARGET}/usr/include elif [ -e /usr/src/linux/usr/include/linux/version.h ]; then headers_dir=/usr/src/linux/usr/include else echo "ERROR: can't find suitable kernel headers; aborting." exit 1 fi cp -avrf ${headers_dir}/* %{buildroot}%{glibc_includedir} %if "%{_target_platform}" == "%{_host}" # install/create nscd service dirs and configuration files install -d %{buildroot}/var/log/nscd install -D -m644 %{SOURCE4} %{buildroot}%{_sysconfdir}/logrotate.d/nscd install -D -m644 %{SOURCE5} %{buildroot}%{_sysconfdir}/nscd.conf install -D -m644 nscd/nscd.service %{buildroot}%{_unitdir}/nscd.service install -D -m644 nscd/nscd.tmpfiles %{buildroot}%{_tmpfilesdir}/nscd.conf # Provide pre 2.34 legacy symlinks ln -s libdl.so.2 %{buildroot}%{glibc_libdir}/libdl.so ln -s libpthread.so.0 %{buildroot}%{glibc_libdir}/libpthread.so ln -s librt.so.1 %{buildroot}%{glibc_libdir}/librt.so ln -s libutil.so.1 %{buildroot}%{glibc_libdir}/libutil.so %else rm -rf %{buildroot}%{_sysconfdir} rm -rf %{buildroot}%{_infodir} rm -rf %{buildroot}%{_mandir} rm -f %{buildroot}%{_prefix}/%{_target_platform}/%{_sysconfdir}/localtime rm -f %{buildroot}%{_localstatedir}/db/Makefile rm -f %{buildroot}%{_prefix}/%{_target_platform}/%{_sysconfdir}/ld.so.cache %endif # work around to avoid stripping libthread_db-1.0.so for debugging %if "%{_target_platform}" == "%{_host}" %if "%{?stage1}" != "1" #chmod -x %{buildroot}/%{slibdir}/ld-*.so #chmod -x %{buildroot}/%{slibdir}/libc-*.so chmod -w %{buildroot}/%{slibdir}/libpthread*.so.* chmod -w %{buildroot}/%{slibdir}/libthread_db*.so.* %endif %endif %if "%{_target_platform}" == "%{_host}" # 2.26: workaround for header required by external libnss_nis install -D -m0644 resolv/mapv4v6addr.h %{buildroot}%{_includedir}/resolv/mapv4v6addr.h # legacy symlink ln -s locale.h %{buildroot}%{_includedir}/xlocale.h %endif %if "%{?stage1}" != "1" ## strip debug symbols #find %{buildroot}%{glibc_libdir} -maxdepth 1 -type f \ # -exec strip -g -R .comment {} 2>/dev/null \; ##strip -g -R .comment %{buildroot}%{_libexecdir}/pt_chown %find_lang libc %if "%{_target_platform}" == "%{_host}" #install api documentation %if %{build_doc} install -d %{buildroot}%{_docdir}/libc/html cp -a ../glibc-build/manual/libc/* %{buildroot}%{_docdir}/libc/html/ cp -a ../glibc-build/manual/libc.pdf %{buildroot}%{_docdir}/libc/ %endif # provide legacy /lib[64] after glibc migration to /usr/lib[64] install -d -m0755 %{buildroot}%{_sysconfdir}/ld.so.conf.d %ifarch x86_64 aarch64 cat >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/glibc64.conf << __EOF /%{_lib} __EOF %else cat >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/glibc.conf << __EOF /%{_lib} __EOF %endif %endif %endif rm -f %{buildroot}%{_sysconfdir}/ld.so.cache # updated zoneinfo provided by tzdata rm -rf %{buildroot}%{glibc_datadir}/zoneinfo %clean [ "%{buildroot}" != / ] && rm -rf %{buildroot} # this script does not permit the clean installation of glibc packages # during the setup: i.e. do NOT use pre script here! #%pre #if [ -d %{_bindir}/getconf ]; then # rm -fr %{_bindir}/getconf #fi #exit 0 %post if [ $1 -ge 1 ]; then cat > /tmp/migrate-libdirs.sh << _EOF #!/bin/bash d=\$1 echo "Migrating /\$d.notmigrated/* to /usr/\$d..." for f in \${d}.notmigrated/*; do dest=/usr\${f/.notmigrated} if [ -e \$dest ]; then #echo "\$f exists as \$dest" if [ -L \$f ]; then linkdest=\`readlink \$f\` #echo "\$f is a symlink to \$linkdest" /usr/bin/rm -f \$f elif [ -L \$dest ]; then linkdest=\`readlink \$dest\` #echo "\$dest is a symlink to \$linkdest" /usr/bin/rm -f \$dest && mv \$f \$dest else #echo "\$f exists as a file also as \$linkdest" if [ -d \${f} ]; then # second level for f1 in \${f}/*; do dest=/usr\${f1/.notmigrated} if [ -e \$dest ]; then #echo "$f1 exists as $dest" if [ -L \$f1 ]; then linkdest=\`readlink \$f1\` #echo "$f1 is a symlink to $linkdest" /usr/bin/rm -f \$f1 elif [ -L \$dest ]; then linkdest=\`readlink \$dest\` #echo "$dest is a symlink to $linkdest" /usr/bin/rm -f \$dest && mv \$f1 \$dest else /usr/bin/rm -f \$f1 fi else if [ -L \$f1 ]; then linkdest=\`readlink \$f1\` if [ "\${linkdest:0:3}" = "../" ]; then fulllinkdest=\`readlink -f \$f1\` #echo "$f1 is a symlink pointing to ../ -> fixing" /usr/bin/ln -s \$fulllinkdest \$dest /usr/bin/rm -f \$f1 else /usr/bin/mv \$f1 \$dest fi else /usr/bin/mv \$f1 \$dest fi fi [ -d \${f1} ] && /usr/bin/rmdir \${f1} done /usr/bin/rmdir \${f} else /usr/bin/rm -f \$f fi fi else if [ -L \$f ]; then linkdest=\`readlink \$f\` if [ "\${linkdest:0:3}" = "../" ]; then fulllinkdest=\`readlink -f \$f\` #echo "\$f is a symlink pointing to ../ -> fixing" /usr/bin/ln -s \$fulllinkdest \$dest /usr/bin/rm -f \$f else /usr/bin/mv \$f \$dest fi else /usr/bin/mv \$f \$dest fi fi done /usr/bin/rmdir \${d}.notmigrated _EOF chmod +x /tmp/migrate-libdirs.sh fi : %postun -p /usr/sbin/ldconfig # Restore ld-linux loader after removing from /lib[64] to fix /usr/lib[64] migration %triggerpostun -p -- glibc < 2.34-4mamba local libdirs = { [1] = "/lib64", [2] = "/lib", } for i, l in ipairs(libdirs) do stat_libdir = posix.stat(l) if stat_libdir ~= nil then if stat_libdir.mode ~= "rwxrwxrwx" then -- lib dir exists and is not already a symlink -- Check that old glibc has been cleaned in this dir (or fails on multilib glibc on x86_64) stat_check_cleaned = posix.stat(l .. "/libc.so.6") if stat_check_cleaned == nil then -- All seems ok to migrate print("Migrating " .. l .. " to /usr" .. l .. "..") os.rename(l, l .. ".notmigrated") posix.symlink("usr" .. l,l) local pid = posix.fork() if pid == 0 then posix.exec("/tmp/migrate-libdirs.sh", l) elseif pid > 0 then posix.wait(pid) end end end end end %transfiletriggerin -n ldconfig -P 2000000 -- /%{_lib} %{_libdir} /usr/sbin/ldconfig : %transfiletriggerpostun -n ldconfig -P 2000000 -- /%{_lib} %{_libdir} /usr/sbin/ldconfig : %pre devel [ -L %{_includedir}/asm ] && rm -f %{_includedir}/asm # Remove old directory asm- case %{target_cpu} in i*86 | athlon*) platform_includes=asm-i386 ;; ppc | powerpc) platform_includes=asm-ppc ;; arm) platform_includes=asm-arm ;; *) platform_includes=asm-orphan ;; esac if [ "$platform_includes" -a -d %{_includedir}/$platform_includes ]; then rm -f %{_includedir}/$platform_includes/* rmdir %{_includedir}/$platform_includes fi : %post devel %install_info libc.info : %postun devel %uninstall_info libc.info : %posttrans i18ndata # update locale-archive for current language settings LOCALES=(`grep ${LANG:0:5} %{glibc_datadir}/i18n/locales/SUPPORTED | awk '{ print $1 }'`); for l in ${LOCALES[*]}; do charset=`echo $l | sed -e 's,.*/,,'` locale=`echo $l | sed -e 's,/[^/]*,,'` input=`echo $locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'` localedef -i $input -c -f $charset $locale done : %pre -n nscd if [ $1 -ge 1 ]; then /usr/sbin/groupadd -g 65001 nscd &>/dev/null || true /usr/sbin/useradd -u 65001 -g nscd -d /dev/null nscd -s /bin/false &>/dev/null || true fi %systemd_pre nscd : %post -n nscd if [ $1 -ge 1 ]; then %tmpfiles_create nscd.conf fi %systemd_post nscd : %preun -n nscd %systemd_preun nscd if [ $1 -eq 0 ]; then /usr/sbin/userdel nscd fi : %postun -n nscd %systemd_postun_with_restart nscd : %if "%{_target_platform}" == "%{_host}" %files %defattr(-,root,root) %{_sysconfdir}/ld.so.conf.d/glibc*.conf %config(noreplace) %{_sysconfdir}/rpc %attr(0755,-,-) /%{slibdir}/lib*.so.* %ifarch aarch64 %{_prefix}/lib/ld-linux-aarch64.so.1 %endif %{_libdir}/ld-linux*.so.* %exclude %{slibdir}/libmemusage.so %exclude %{slibdir}/libpcprofile.so %dir %{glibc_libdir}/gconv %{glibc_libdir}/gconv/* %dir %{glibc_libexecdir}/getconf %ifnarch x86_64 aarch64 %{glibc_libexecdir}/getconf/POSIX_V6_ILP32_OFF32 %{glibc_libexecdir}/getconf/POSIX_V6_ILP32_OFFBIG %{glibc_libexecdir}/getconf/POSIX_V7_ILP32_OFF32 %{glibc_libexecdir}/getconf/POSIX_V7_ILP32_OFFBIG %{glibc_libexecdir}/getconf/XBS5_ILP32_OFF32 %{glibc_libexecdir}/getconf/XBS5_ILP32_OFFBIG %endif %ifarch x86_64 aarch64 %{glibc_libexecdir}/getconf/POSIX_V6_LP64_OFF64 %{glibc_libexecdir}/getconf/POSIX_V7_LP64_OFF64 %{glibc_libexecdir}/getconf/XBS5_LP64_OFF64 %endif %doc COPYING* LICENSES %files devel %defattr(-,root,root) %{glibc_includedir}/* %{glibc_libdir}/*.o %{glibc_libdir}/*.so %{glibc_libdir}/*.a %if "%{build_profile}" == "1" %exclude %{glibc_libdir}/lib*_p.a %endif %{_infodir}/* %{_localstatedir}/db/Makefile %doc NEWS README* %ifarch x86_64 %files multilib %defattr(-,root,root) %{_sysconfdir}/ld.so.conf.d/lib32-glibc.conf %{_prefix}/lib32/lib*.so.* %dir %{_prefix}/lib32/audit %{_prefix}/lib32/audit/sotruss-lib.so %{_prefix}/lib32/ld-linux.so.* %dir %{_prefix}/lib32/gconv %{_prefix}/lib32/gconv/* %{_prefix}/lib32/locale %files multilib-devel %defattr(-,root,root) %{_prefix}/lib32/*.o %{_prefix}/lib32/lib*.a %{_prefix}/lib32/lib*.so #%exclude %{_prefix}/lib32/lib*-%{version}.so %endif %if %{build_doc} %files apidocs %defattr(-,root,root) %dir %{_docdir}/libc/ %{_docdir}/libc/* %endif %files i18ndata %defattr(-,root,root) %dir %{glibc_datadir}/i18n %{glibc_datadir}/i18n/* %files utils %defattr(-,root,root) %{_sbindir}/sln %{_bindir}/catchsegv %{_bindir}/gencat %{_bindir}/getconf %{_bindir}/getent %{_bindir}/iconv %{_bindir}/iconvconfig %{_bindir}/ldd %ifarch %{ix86} %{_bindir}/lddlibc4 %endif %{_bindir}/locale %{_bindir}/localedef %{_bindir}/pldd #%{_bindir}/rpcgen %{_bindir}/sprof %{_bindir}/tzselect %{_bindir}/mtrace %{_bindir}/pcprofiledump %{_bindir}/sotruss %{_bindir}/xtrace %if "%{glibc_target_cpu}" == "%{_build_cpu}" %{_bindir}/memusage %{_bindir}/memusagestat %{_bindir}/makedb %endif %{glibc_libdir}/audit/sotruss-lib.so #%{glibc_libexecdir}/pt_chown %{slibdir}/libmemusage.so %{slibdir}/libpcprofile.so %files -n ldconfig %defattr(-,root,root) %config(noreplace) %{_sysconfdir}/ld.so.conf %dir %{_sysconfdir}/ld.so.conf.d %{_sbindir}/ldconfig %files -n locales -f libc.lang %defattr(-,root,root) %{glibc_datadir}/locale/locale.alias %dir %{_prefix}/lib/locale %{_prefix}/lib/locale/locale-archive %files -n nscd %defattr(-,root,root) %config(noreplace) %{_sysconfdir}/logrotate.d/nscd %config(noreplace) %{_sysconfdir}/nscd.conf %{_unitdir}/nscd.service %{_tmpfilesdir}/nscd.conf %{_bindir}/nscd %attr(0755,nscd,nscd) /var/log/nscd %files -n timezone %defattr(-,root,root) %{_bindir}/zdump %{_bindir}/zic %else %files -n cross-%{_target_platform}-%{name}%{?bootstrap_append}%{?bigendian_append}%{?softfloat_append} %defattr(-,root,root) %if "%{?stage1}" != "1" %{glibc_prefix}/etc/rpc %{glibc_libexecdir}/* %{glibc_prefix}/bin/* %{glibc_prefix}/sbin/* %{glibc_libdir}/* %{glibc_prefix}/share/* %{glibc_prefix}/%{_localstatedir}/db/Makefile %endif %{glibc_includedir}/* %endif %changelog * Wed Sep 29 2021 Silvan Calarco 2.34-5mamba - added pre-2.34 legacy .so symlinks * Sun Aug 15 2021 Silvan Calarco 2.34-4mamba - triggerpostun glibc < 2.34-4mamba: lua script to finally migrate /lib[64] to /usr/lib[64] and symlink to them * Mon Aug 09 2021 Silvan Calarco 2.34-3mamba - triggerpostun from glibc 2.33: this time use lua to really fix the lib -> /usr/lib migration * Sat Aug 07 2021 Silvan Calarco 2.34-2mamba - fixes for migration of ld-linux.so.2 from /lib[64] to /usr/lib[64] * Fri Aug 06 2021 Automatic Build System 2.34-1mamba - automatic version update by autodist * Fri Feb 05 2021 Automatic Build System 2.33-1mamba - automatic version update by autodist * Thu Aug 06 2020 Automatic Build System 2.32-1mamba - automatic version update by autodist * Tue Mar 03 2020 Automatic Build System 2.31-1mamba - automatic version update by autodist * Thu Dec 26 2019 Silvan Calarco 2.30-7mamba - restore passing buildflags and don't strip libpthread-* and libthread_db-* for debugging - x86_64: restore glibc-multilib and glibc-multilib-devel subpackages since conflicts with glibc.i586 are resolved by using /usr/lib32 * Tue Dec 10 2019 Silvan Calarco 2.30-6mamba - install tmpfiles.d/nscd.conf * Thu Dec 05 2019 Silvan Calarco 2.30-5mamba - x86: rebuilt with gcc with cet support to fix 'ld-linux.so.2: corrupt GNU_PROPERTY_TYPE (5) size: 0' * Sat Nov 23 2019 Silvan Calarco 2.30-4mamba - x86_64: build 32 bit multilib library in unique build * Fri Nov 22 2019 Silvan Calarco 2.30-3mamba - specfile simplification - removed profile static target support - added --enable-cet --enable-lock-elision --enable-stack-protector=strong --enable-stackguard-randomization * Sat Oct 26 2019 Silvan Calarco 2.30-2mamba - remove workaround to not strip libthread_db.so to fix provides (check later if debugging works) * Fri Aug 16 2019 Automatic Build System 2.30-1mamba - automatic version update by autodist * Thu Feb 28 2019 Automatic Build System 2.29-1mamba - automatic version update by autodist * Sun Sep 23 2018 Silvan Calarco 2.28-3mamba - glibc: require locales package * Fri Sep 21 2018 Silvan Calarco 2.28-2mamba - multiarch: move tools from glibc to glibc-utils and require it; ix86: obsolete glibc-multilib * Wed Aug 01 2018 Automatic Build System 2.28-1mamba - automatic version update by autodist * Fri Feb 09 2018 Automatic Build System 2.27-1mamba - automatic version update by autodist * Sat Dec 23 2017 Silvan Calarco 2.26-3mamba - added xlocale.h legacy symlink to locale.h - nscd: switch to systemd * Sat Sep 30 2017 Silvan Calarco 2.26-2mamba - rebuilt without --enable-obsolete-rpc * Sat Sep 09 2017 Automatic Build System 2.26-1mamba - automatic version update by autodist * Sun Jul 23 2017 Silvan Calarco 2.25-2mamba - patch to fix unexported function in libresolv breaking runtime and buildtime things * Fri Jul 21 2017 Automatic Build System 2.25-1mamba - automatic version update by autodist * Fri Aug 05 2016 Automatic Build System 2.24-1mamba - automatic version update by autodist * Fri Feb 19 2016 Automatic Build System 2.23-1mamba - automatic version update by autodist * Mon Aug 17 2015 Automatic Build System 2.22-1mamba - automatic version update by autodist * Sun Apr 12 2015 Silvan Calarco 2.21-3mamba - new cross target: arm-openmamba-linux-gnueabihf * Thu Mar 26 2015 Silvan Calarco 2.21-2mamba - patch to prevent exhaustion of tls slots (vlc), see https://bugzilla.redhat.com/show_bug.cgi?id=1124987 * Mon Feb 09 2015 Automatic Build System 2.21-1mamba - automatic version update by autodist * Mon Sep 08 2014 Automatic Build System 2.20-1mamba - automatic version update by autodist * Sat Aug 23 2014 Silvan Calarco 2.19-4mamba - timezone: remove post script to avoid messing /etc/localtime and /etc/timezone - x86_64: remove nscd and memusagestat to hopefully silent multiling warning about missing 32bit libs * Wed Jun 11 2014 Silvan Calarco 2.19-3mamba - fix %pre old %{_includedir}/asm symlink stuff * Sun Apr 20 2014 Silvan Calarco 2.19-2mamba - rebuilt with enable-obsolete-rpc required by pwdutils * Sun Feb 09 2014 Automatic Build System 2.19-1mamba - automatic version update by autodist * Sat Aug 17 2013 Automatic Build System 2.18-1mamba - automatic version update by autodist * Tue Jan 15 2013 Automatic Build System 2.17-1mamba - update to 2.17 * Mon Oct 01 2012 Silvan Calarco 2.16.0-2mamba - restore installing rpcnis headers needed by samba - source edit: install de_AT locale because required by perl-libintl * Fri Sep 28 2012 Automatic Build System 2.16.0-1mamba - automatic version update by autodist * Thu Jun 14 2012 Automatic Build System 2.15-1mamba - automatic version update by autodist * Mon Oct 10 2011 Automatic Build System 2.14.1-1mamba - automatic version update by autodist * Wed Aug 24 2011 Silvan Calarco 2.14-5mamba - complete rpc/nis patch by reexporting symbols * Tue Aug 23 2011 Silvan Calarco 2.14-4mamba - rebuilt with 2.6.38 kernel headers for x86 and x86_64 targets (for arm still use 2.6.35) - added a patch to restore rpc/nis headers (http://permalink.gmane.org/gmane.linux.pld.devel.english/7397) * Sat Aug 13 2011 Silvan Calarco 2.14-3mamba - added patch to fix resolver crash in __libc_res_query * Thu Aug 11 2011 Silvan Calarco 2.14-2mamba - added patch to fix several crashes in dl_lookup (eg. libSDL). See http://sourceware.org/bugzilla/show_bug.cgi?id=12871 * Thu Jul 07 2011 Automatic Build System 2.14-1mamba - automatic update by autodist * Tue Apr 19 2011 Silvan Calarco 2.13-4mamba - don't build debug package for cross-platform targets to avoid overwriting native glibc-debug package * Fri Apr 01 2011 Silvan Calarco 2.13-3mamba - timezone: modify to use zoneinfo from tzdata * Sat Feb 19 2011 Silvan Calarco 2.13-2mamba - add patch to fix a prelink segmentation fault in ld.so causing whole system crash * Sat Feb 12 2011 Automatic Build System 2.13-1mamba - update to 2.13 * Tue Dec 14 2010 Automatic Build System 2.12.2-1mamba - automatic update to 2.12.2 by autodist * Mon Dec 13 2010 Davide Madrisan 2.12.1-3mamba - provides rtld(GNU_HASH) for google-talkplugin and other closed-source packages * Wed Nov 24 2010 Silvan Calarco 2.12.1-2mamba - rebuilt with debug package - don't strip libthread_db.so.1 to allow multithreaded debugging * Tue Aug 17 2010 Automatic Build System 2.12.1-1mamba - update to 2.12.1 * Fri May 28 2010 Automatic Build System 2.11.2-1mamba - automatic update to 2.11.2 by autodist * Sat Mar 13 2010 Silvan Calarco 2.11.1-2mamba - rebuilt with kernel 2.6.31 headers * Fri Nov 13 2009 Automatic Build System 2.11-1mamba - update to 2.11 * Tue Nov 03 2009 Silvan Calarco 2.10.1-5mamba - added es_ES* locale support * Thu Sep 24 2009 Silvan Calarco 2.10.1-4mamba - revert back previous patch because kde and maybe other software need to be rebuilt without internal str* functions * Fri Sep 11 2009 Automatic Build System 2.10.1-3mamba - automatic rebuild by autodist - readded BSD-like strlcpy strlcat patch * Wed Aug 12 2009 Automatic Build System 2.10.1-2mamba - automatic rebuild by autodist * Thu May 28 2009 Automatic Build System 2.10.1-1mamba - update to 2.10.1 * Wed Apr 29 2009 Automatic Build System 2.9-3mamba - build with ports and libidn * Wed Apr 29 2009 Automatic Build System 2.9-2mamba - automatic rebuild by autodist * Wed Apr 15 2009 Silvan Calarco 2.9-1mamba - update to 2.9 * Wed Jan 28 2009 Davide Madrisan 2.7-6mamba - patch: x86-fnstsw.patch (fixes "suffix or operands invalid for `fnstsw'" in ftestexcept.c) * Tue Sep 16 2008 Silvan Calarco 2.7-5mamba - rebuilt with gcc 4.3.2 and 2.6.26.5 kernel headers * Tue Feb 05 2008 Silvan Calarco 2.7-4mamba - patch: only-lookup-ipv6-if-it-makes-sense (should fix ipv6 dns requests resolved to 1.0.0.0) - patch: arm_lowlevellock fixed and renamed to lowlevellock * Tue Dec 18 2007 Silvan Calarco 2.7-3mamba - post script: update /etc/localtime file * Fri Dec 14 2007 Silvan Calarco 2.7-2mamba - move i18ndata script to posttrans to avoid missing prereqs errors - added stricter version requirements for glibc-profile and others - fixed a couple of errors in i18ndata postrans script * Wed Nov 28 2007 Silvan Calarco 2.7-1mamba - update to 2.7 - added html documentation - added cross--glibc-stage2 provide to cross--glibc - added support for a limited set of default locales - i18ndata: update locale-archive according to current LANG setting * Fri Mar 30 2007 Silvan Calarco 2.5-4mamba - rebuilt with sanitized headers from clfs - added patch that adds strlcpy and strlcat functions * Sat Mar 24 2007 Silvan Calarco 2.5-3qilnx - rebuild for the openmamba platform - cross packages obsoletion of both stage1 and stage2 transient packages * Fri Mar 09 2007 Silvan Calarco 2.5-2qilnx - kernel headers update to 2.6.20 - sln moved from tools to main package for LSB compliance - ld.so.conf: add support for includes directory ld.so.conf.d * Fri Nov 24 2006 Silvan Calarco 2.5-1qilnx - new version build * Sat Jun 24 2006 Silvan Calarco 2.4-2qilnx - rebuilt with cleaned headers from kernel 2.6.17 * Fri Jun 09 2006 Silvan Calarco 2.4-1qilnx - new version build - added arm support - added stage1 (only headers) and stage2 (only c cross compiler) build support * Wed Jan 25 2006 Davide Madrisan 2.3.6-3qilnx - patched sys/kd.h header to make linux/agpgart.h usable from userspace * Fri Nov 04 2005 Silvan Calarco 2.3.6-2qilnx - added /usr/include/sound headers from kernel sources - removed the now obsolete linuxthreads stuff * Fri Nov 04 2005 Silvan Calarco 2.3.6-1qilnx - update to version 2.3.6 by autospec * Wed Sep 07 2005 Silvan Calarco 2.3.5-5qilnx - add qilinux headers installation (currently for sisfb.h) - add cross-platform (cross-glibc) build target * Thu Aug 25 2005 Silvan Calarco 2.3.5-4qilnx - add specfile code for cross-platform builds - add maintained sanitized kernel headers - /sbin/sln moved to glibc-utils package * Mon Jun 06 2005 Davide Madrisan 2.3.5-3qilnx - run make check - install man pages for linuxthread (devel package) * Mon Jun 06 2005 Davide Madrisan 2.3.5-2qilnx - updated kernel headers to release 2.6.11 - added package 'glibc-profile' (support for gprof profiling) - enabled selinux support * Thu Apr 07 2005 Davide Madrisan 2.3.5-1qilnx - update to version 2.3.5 by autospec - updated kernel headers to release 2.4.30 * Fri Feb 11 2005 Davide Madrisan 2.3.4-3qilnx - removed pre scriptlet * Wed Feb 02 2005 Davide Madrisan 2.3.4-2qilnx - moved `ld.so.conf' and `ld.so.cache' to package ldconfig - removed configure option `--libexecdir=${_bindir}' * Fri Jan 28 2005 Davide Madrisan 2.3.4-1qilnx - update to 2.3.4 * Mon Jan 12 2004 Davide Madrisan 2.3.2-9qilnx - fixed specfile summary * Mon Dec 15 2003 Davide Madrisan 2.3.2-8qilnx - disabled nscd hosts caching, specfile updates - kernel headers updated to version 2.4.22 * Tue Sep 30 2003 Silvan Calarco 2.3.2-7qilnx - added nscd package and automatic service configuration * Mon Jun 16 2003 Silvan Calarco 2.3.2-6qilnx - rebuilt against gcc 3.2.3 * Mon May 05 2003 Silvan Calarco 2.3.2-5qilnx - removed /etc/localtime link (will be in setup package) * Thu Apr 24 2003 Silvan Calarco 2.3.2-4qilnx - added linux kernel includes: /usr/include/linux, /usr/include/asm - addded _libdir files in devel package * Wed Apr 16 2003 Silvan Calarco 2.3.2-3qilnx - removed _libdir and _bindir * references not to include util package files * Wed Apr 16 2003 Silvan Calarco 2.3.2-2qilnx - fixed find_requires and find_provides scripts: ignore GLIBC_PRIVATE references - added util package, so glibc doesn't need perl as a dependancy * Tue Apr 08 2003 Silvan Calarco 2.3.2-1qilnx - first build for 2.3.2