2 # spec file for package glibc
4 # Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
6 # All modifications and additions to the file contributed by third parties
7 # remain the property of their copyright owners, unless otherwise agreed
8 # upon. The license for this file, and modifications and additions to the
9 # file, is the same license as for the pristine package itself (unless the
10 # license for the pristine package is not an Open Source License, in which
11 # case the license is the MIT License). An "Open Source License" is a
12 # license that conforms to the Open Source Definition (Version 1.9)
13 # published by the Open Source Initiative.
15 # This will avoid building some parts of glibc
16 %bcond_with fast_build
19 Summary: Standard Shared Libraries (from the GNU C Library)
20 License: LGPL-2.1+ and LGPL-2.1+-with-GCC-exception and GPL-2.0+
23 BuildRequires: makeinfo
25 BuildRequires: gcc-c++
26 BuildRequires: gettext-tools
27 BuildRequires: libstdc++-devel
28 #BuildRequires: pkgconfig(systemd)
30 %define _filter_GLIBC_PRIVATE 1
31 %if %_target_cpu == "i686"
32 # For i686 let's only build what's different from i586, so
33 # no need to build documentation
34 %define build_profile 1
35 %define build_locales 0
38 %if %{with fast_build}
39 %define build_profile 0
40 %define build_locales 0
44 %define build_profile 1
45 %define build_locales 0
50 %define disable_assert 0
51 %define enable_stackguard_randomization 1
52 %define multiarcharches %{ix86} x86_64
55 %define enablekernel 2.6.16
57 %define enablekernel 2.6.16
59 Conflicts: kernel < %{enablekernel}
60 %ifarch armv7l armv7hl
61 # The old runtime linker link gets not provided by rpm find.provides, but it exists
62 Provides: ld-linux.so.3
63 Provides: ld-linux.so.3(GLIBC_2.4)
67 %define glibc_major_version 2.24
68 %define git_id 4e42b5b8f89f
70 Url: http://www.gnu.org/software/libc/libc.html
71 Source: glibc-%{version}.tar.xz
72 Source5: nsswitch.conf
73 Source7: bindresvport.blacklist
74 Source8: glibc_post_upgrade.c
75 Source9: glibc.rpmlintrc
76 Source10: baselibs.conf
78 Source1001: glibc.manifest
80 Requires(pre): filesystem
81 Provides: rtld(GNU_HASH)
84 The GNU C Library provides the most important standard libraries used
85 by nearly all programs: the standard C library, the standard math
86 library, and the POSIX thread library. A system is not functional
87 without these libraries.
90 Summary: Info Files for the GNU C Library
96 This package contains the documentation for the GNU C library stored as
97 info files. Due to a lack of resources, this documentation is not
98 complete and is partially out of date.
101 Summary: HTML Documentation for the GNU C Library
107 This package contains the HTML documentation for the GNU C library. Due
108 to a lack of resources, this documentation is not complete and is
109 partially out of date.
112 Summary: Database Sources for 'locale'
113 License: GPL-2.0+ and MIT
114 Group: Base/Libraries
117 %description i18ndata
118 This package contains the data needed to build the locale data files to
119 use the internationalization features of the GNU libc. It is normally
120 not necessary to install this packages, the data files are already
124 Summary: Locale Data for Localized Programs
125 License: GPL-2.0+ and MIT and LGPL-2.1+
126 Requires(post): /usr/bin/cat
127 Requires: glibc = %{version}
129 Locale data for the internationalisation features of the GNU C library.
132 Summary: Libc Profiling and Debugging Versions
133 License: LGPL-2.1+ and LGPL-2.1+-with-GCC-exception and GPL-2.0+
134 Group: Base/Utilities
135 Requires: glibc = %{version}
138 This package contains special versions of the GNU C library which are
139 necessary for profiling and debugging.
142 Summary: Include Files and Libraries Mandatory for Development
143 License: BSD-3-Clause and LGPL-2.1+ and LGPL-2.1+-with-GCC-exception and GPL-2.0+
144 Requires: glibc = %{version}
145 Requires: linux-kernel-headers
148 These libraries are needed to develop programs which use the standard C
151 %package devel-static
152 Summary: C library static libraries for -static linking
153 License: BSD-3-Clause and LGPL-2.1+ and LGPL-2.1+-with-GCC-exception and GPL-2.0+
154 Requires: %{name}-devel = %{version}
155 # Provide Fedora name for package to make packaging easier
156 Provides: %{name}-static = %version
158 %description devel-static
159 The glibc-devel-static package contains the C library static libraries
160 for -static linking. You don't need these, unless you link statically,
161 which is highly discouraged.
164 Summary: Development utilities from GNU C library
166 Requires: glibc = %{version}
168 %description devel-utils
169 The glibc-devel-utils package contains various binaries which can be helpful during program
172 If you are unsure if you need this, don't install this package.
175 Summary: Extra binaries from GNU C Library
177 Requires: glibc = %{version}
180 The glibc-extra package contains some extra binaries for glibc that
181 are not essential but recommend to use.
183 makedb: A program to create a database for nss
186 Summary: Obsolete Shared Libraries from the GNU C Library
188 Requires: glibc = %{version}
190 %description obsolete
191 This package provides some old libraries from the GNU C Library which
192 are no longer supported. Additional it provides a compatibility library
193 for old binaries linked against glibc 2.0.
195 Install this package if you need one of this libraries to get old
196 binaries working, but since this libraries are not supported and there
197 is no gurantee that they work for you, you should try to get newer
198 versions of your software.
201 %setup -n glibc-%{version} -q
205 %{?asan:%gcc_unforce_options}
206 if [ -x /bin/uname.bin ]; then
214 # We do not want configure to figure out the system its building one
215 # to support a common ground and thus set build and host to the
218 %define target %{_target_cpu}-tizen-linux-gnueabi
220 %define target %{_target_cpu}-tizen-linux
222 # Don't use as-needed, it breaks glibc assumptions
223 # Before enabling it, run the testsuite and verify that it
225 export LD_AS_NEEDED=0
226 # Adjust glibc version.h
227 echo "#define CONFHOST \"%{target}\"" >> version.h
228 echo "#define GITID \"%{git_id}\"" >> version.h
230 # Default CFLAGS and Compiler
232 BuildFlags=$(echo %{optflags} | sed -e "s/-Wp,-D_FORTIFY_SOURCE=2//g" | sed -e "s/-ffast-math//" | sed -e "s/atom/i686/g" | sed -e "s/-fexceptions//" | sed -e "s/-fno-omit-frame-pointer//" )
233 BuildFlags="$BuildFlags -O2 -g -U_FORTIFY_SOURCE"
234 BuildFlags="$(echo $BuildFlags | sed -e 's#-fstack-protector##' -e 's#-ffortify=[0-9]*##')"
235 BuildFlags="$(echo $BuildFlags | sed -e 's/-Wa,-mimplicit-it=thumb//g' | sed -e 's/-mthumb//g')"
241 BuildFlags="$BuildFlags -g"
242 %if %{disable_assert}
243 BuildFlags="$BuildFlags -DNDEBUG=1"
252 # fails to build otherwise - need to recheck and fix
253 %define enable_stackguard_randomization 0
256 configure_and_build_glibc() {
257 local dirname="$1"; shift
258 local cflags="$1"; shift
259 local addons="$1"; shift
262 conf_cflags="$cflags -funwind-tables"
264 profile="--disable-profile"
266 if [ "$dirname" = "base" ] ; then
267 profile="--enable-profile"
270 CFLAGS="$conf_cflags" BUILD_CFLAGS="$conf_cflags" \
271 CC="$BuildCC" CXX="$BuildCCplus" ../configure \
272 --prefix=%{_prefix} \
273 --libexecdir=%{_libexecdir} --infodir=%{_infodir} \
274 --enable-add-ons=$addons \
277 %if %{enable_stackguard_randomization}
278 --enable-stackguard-randomization \
280 --build=%{target} --host=%{target} \
281 %ifnarch %{multiarcharches}
282 --disable-multi-arch \
284 %ifarch %{ix86} x86_64
287 --enable-kernel=%{enablekernel} \
288 --enable-bind-now --enable-obsolete-rpc \
290 # explicitly set CFLAGS to use the full CFLAGS (not the reduced one for configure)
291 make %{?_smp_mflags} #CFLAGS="$cflags" BUILD_CFLAGS="$cflags"
298 configure_and_build_glibc base "$BuildFlags" "$add_ons"
301 # Build html documentation
308 # Build glibc_post_upgrade binary
310 $BuildCC -static %{optflags} -Os $RPM_SOURCE_DIR/glibc_post_upgrade.c -o glibc_post_upgrade \
311 -Lcc-base -Bcc-base/csu \
312 '-DREMOVE_TLS_DIRS' '-DREMOVE_PPC_OPTIMIZE_POWER5' \
313 '-DLIBDIR="/%{_lib}"' '-DGCONV_MODULES_DIR="%{_libdir}/gconv"'
316 #######################################################################
320 #######################################################################
323 # The testsuite will fail if asneeded is used
324 export LD_AS_NEEDED=0
325 # This has to pass on all platforms!
328 make %{?_smp_mflags} -C cc-base check-abi
330 #######################################################################
334 #######################################################################
337 # We don't want to strip the .symtab from our libraries in find-debuginfo.sh,
338 # certainly not from libpthread.so.* because it is used by libthread_db to find
339 # some non-exported symbols in order to detect if threading support
340 # should be enabled. These symbols are _not_ exported, and we can't easily
341 # export them retroactively without changing the ABI. So we have to
342 # continue to "export" them via .symtab, instead of .dynsym :-(
343 # But we also want to keep .symtab and .strtab of other libraries since some
344 # debugging tools currently require these sections directly inside the main
345 # files - specifically valgrind and PurifyPlus.
346 export STRIP_KEEP_SYMTAB=*.so*
348 # Make sure we will create the gconv-modules.cache
349 mkdir -p %{buildroot}%{_libdir}/gconv
350 touch %{buildroot}%{_libdir}/gconv/gconv-modules.cache
353 make %{?_smp_mflags} install_root=%{buildroot} install -C cc-base
355 install_optimized_variant() {
356 local dirname="$1"; shift
357 local subdir="$1"; shift
358 local subdir_up="$1"; shift
361 destdir=$RPM_BUILD_ROOT/%{_lib}/$subdir
363 # Don't run a complete make install, we know which libraries
365 for lib in libc math/libm nptl/libpthread rt/librt nptl_db/libthread_db
368 libbaseso=$(basename $RPM_BUILD_ROOT/%{_lib}/${libbase}-*.so)
369 # Only install if different from base lib
370 if cmp -s ${lib}.so ../cc-base/${lib}.so; then
371 ln -sf $subdir_up/$libbaseso $destdir/$libbaseso
373 cp -a ${lib}.so $destdir/$libbaseso
376 ln -sf $libbaseso $destdir/$(basename $RPM_BUILD_ROOT/%{_lib}/${libbase}.so.*)
384 # XXX Do not install locales in parallel!
386 # localedef creates hardlinks to other locales if possible
387 # this will not work if we generate them in parallel.
388 # thus we need to run fdupes on /usr/lib/locale/
389 # Still, on my system this is a speed advantage:
390 # non-parallel build for install-locales: 9:34mins
391 # parallel build with fdupes: 7:08mins
392 make %{?_smp_mflags} install_root=%{buildroot} localedata/install-locales
393 %fdupes %{buildroot}/usr/lib/locale
396 # Create file list for glibc-locale package
399 # Prepare obsolete/, used only on some architectures:
400 export RPM_BUILD_ROOT
402 mkdir -p %{buildroot}/%{_lib}/obsolete
405 # NPTL <bits/stdio-lock.h> is not usable outside of glibc, so include
406 # the generic one (RH#162634)
407 # cp -av bits/stdio-lock.h %{buildroot}%{_includedir}/bits/stdio-lock.h
412 install -m 0700 glibc_post_upgrade %{buildroot}%{_sbindir}
414 install -m 644 %{SOURCE7} %{buildroot}/etc
415 install -m 644 %{SOURCE5} %{buildroot}/etc
416 install -m 644 posix/gai.conf %{buildroot}/etc
418 mkdir -p %{buildroot}/etc/default
419 install -m 644 nis/nss %{buildroot}/etc/default/
421 mkdir -p %{buildroot}%{_includedir}/resolv
422 install -m 0644 resolv/mapv4v6addr.h %{buildroot}%{_includedir}/resolv/
423 install -m 0644 resolv/mapv4v6hostent.h %{buildroot}%{_includedir}/resolv/
426 mkdir -p %{buildroot}%{_datadir}/doc/glibc
427 cp -p cc-base/manual/libc/*.html %{buildroot}%{_datadir}/doc/glibc
434 cat > %{buildroot}/etc/ld.so.conf <<EOF
435 %if "%{_lib}" == "lib64"
439 include /etc/ld.so.conf.d/*.conf
440 # /lib64, /lib, /usr/lib64 and /usr/lib gets added
441 # automatically by ldconfig after parsing this file.
442 # So, they do not need to be listed.
444 # Add ldconfig cache directory for directory ownership
445 mkdir -p %{buildroot}/var/cache/ldconfig
446 # Empty the ld.so.cache:
447 rm -f %{buildroot}/etc/ld.so.cache
448 touch %{buildroot}/etc/ld.so.cache
450 # Don't look at ldd! We don't wish a /bin/sh requires
451 chmod 644 %{buildroot}%{_bindir}/ldd
453 # Remove timezone data, now coming in standalone package:
454 for i in sbin/sln usr/bin/tzselect usr/sbin/zic usr/sbin/zdump etc/localtime; do
455 rm -f %{buildroot}/$i
457 rm -rf %{buildroot}%{_datadir}/zoneinfo
460 # Provide compatibility link
461 ln -s ld-%{glibc_major_version}.so %{buildroot}/lib/ld-linux.so.3
464 # Move getconf to %{_libexecdir}/getconf/ to avoid cross device link
465 mv %{buildroot}%{_bindir}/getconf %{buildroot}%{_libexecdir}/getconf/getconf
466 ln -s %{_libexecdir}/getconf/getconf %{buildroot}%{_bindir}/getconf
468 #######################################################################
472 #######################################################################
474 %post -p %{_sbindir}/glibc_post_upgrade
476 %postun -p /sbin/ldconfig
479 for l in /usr/share/locale/locale.alias %{_libdir}/gconv/gconv-modules; do
480 [ -d "$l.d" ] || continue
481 echo "###X# The following is autogenerated from extra files in the .d directory:" >>"$l"
484 /usr/sbin/iconvconfig
487 %install_info --info-dir=%{_infodir} %{_infodir}/libc.info.gz
490 %install_info_delete --info-dir=%{_infodir} %{_infodir}/libc.info.gz
493 %manifest %{name}.manifest
495 %defattr(-,root,root)
496 %license LICENSES COPYING COPYING.LIB
497 %config(noreplace) /etc/bindresvport.blacklist
498 %config /etc/ld.so.conf
499 %attr(0644,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /etc/ld.so.cache
500 %config(noreplace) /etc/rpc
501 %verify(not md5 size mtime) %config(noreplace) /etc/nsswitch.conf
502 %verify(not md5 size mtime) %config(noreplace) /etc/gai.conf
503 %config(noreplace) /etc/default/nss
504 /%{_lib}/ld-%{glibc_major_version}.so
506 # Each architecture has a different name for the dynamic linker:
509 /%{_lib}/ld-linux-armhf.so.3
510 # Keep compatibility link
511 /%{_lib}/ld-linux.so.3
513 /%{_lib}/ld-linux.so.3
517 /%{_lib}/ld-linux-x86-64.so.2
520 /%{_lib}/ld-linux.so.2
523 /lib/ld-linux-aarch64.so.1
524 /%{_lib}/ld-linux-aarch64.so.1
527 /%{_lib}/libanl-%{glibc_major_version}.so
529 /%{_lib}/libc-%{glibc_major_version}.so
531 /%{_lib}/libcidn-%{glibc_major_version}.so
532 /%{_lib}/libcidn.so.1
533 /%{_lib}/libcrypt-%{glibc_major_version}.so
534 /%{_lib}/libcrypt.so.1
535 /%{_lib}/libdl-%{glibc_major_version}.so
537 /%{_lib}/libm-%{glibc_major_version}.so
539 /%{_lib}/libnsl-%{glibc_major_version}.so
541 /%{_lib}/libnss_compat-%{glibc_major_version}.so
542 /%{_lib}/libnss_compat.so.2
543 /%{_lib}/libnss_db-%{glibc_major_version}.so
544 /%{_lib}/libnss_db.so.2
545 /%{_lib}/libnss_dns-%{glibc_major_version}.so
546 /%{_lib}/libnss_dns.so.2
547 /%{_lib}/libnss_files-%{glibc_major_version}.so
548 /%{_lib}/libnss_files.so.2
549 /%{_lib}/libnss_hesiod-%{glibc_major_version}.so
550 /%{_lib}/libnss_hesiod.so.2
551 /%{_lib}/libnss_nis-%{glibc_major_version}.so
552 /%{_lib}/libnss_nis.so.2
553 /%{_lib}/libnss_nisplus-%{glibc_major_version}.so
554 /%{_lib}/libnss_nisplus.so.2
555 /%{_lib}/libpthread-%{glibc_major_version}.so
556 /%{_lib}/libpthread.so.0
557 /%{_lib}/libthread_db-1.0.so
558 /%{_lib}/libthread_db.so.1
559 /%{_lib}/libresolv-%{glibc_major_version}.so
560 /%{_lib}/libresolv.so.2
561 /%{_lib}/librt-%{glibc_major_version}.so
563 /%{_lib}/libutil-%{glibc_major_version}.so
564 /%{_lib}/libutil.so.1
565 %define optimized_libs() \
566 %dir %attr(0755,root,root) /%{_lib}/%1\
567 /%{_lib}/%1/libc-%{glibc_major_version}.so\
568 /%{_lib}/%1/libc.so.6*\
569 /%{_lib}/%1/libm-%{glibc_major_version}.so\
570 /%{_lib}/%1/libm.so.6*\
571 /%{_lib}/%1/libpthread-%{glibc_major_version}.so\
572 /%{_lib}/%1/libpthread.so.0\
573 /%{_lib}/%1/librt-%{glibc_major_version}.so\
574 /%{_lib}/%1/librt.so.1\
575 /%{_lib}/%1/libthread_db-1.0.so\
576 /%{_lib}/%1/libthread_db.so.1
578 %dir %attr(0700,root,root) /var/cache/ldconfig
584 %attr(755,root,root) %{_bindir}/ldd
585 %ifarch %ix86 sparc sparcv9
590 %dir %attr(0755,root,root) %{_libexecdir}/getconf
591 %{_libexecdir}/getconf/*
592 %{_sbindir}/glibc_post_upgrade
593 %{_sbindir}/iconvconfig
594 /%{_lib}/libBrokenLocale-%{glibc_major_version}.so
595 /%{_lib}/libBrokenLocale.so.1
600 %manifest %{name}.manifest
602 %defattr (755,root,root,755)
603 %dir /%{_lib}/obsolete/
604 #%dir /%{_lib}/obsolete/noversion
605 #/%{_lib}/obsolete/noversion/libNoVersion-%{glibc_major_version}.so
606 #/%{_lib}/obsolete/noversion/libNoVersion.so.1
609 %files locale -f libc.lang
610 %manifest %{name}.manifest
611 %license COPYING COPYING.LIB
612 %defattr(-,root,root)
613 %{_datadir}/locale/locale.alias
620 %manifest %{name}.manifest
621 %defattr(-,root,root)
622 %license COPYING COPYING.LIB
623 %doc NEWS README BUGS CONFORMANCE
628 # These static libraries are needed even for shared builds
629 %{_libdir}/libc_nonshared.a
632 %ifarch ppc ppc64 s390 s390x sparc sparcv8 sparcv9 sparcv9v
633 # This is not built on sparc64.
634 %{_libdir}/libnldbl_nonshared.a
636 %{_libdir}/libmcheck.a
637 %{_libdir}/libpthread_nonshared.a
638 %{_libdir}/librpcsvc.a
641 %manifest %{name}.manifest
642 %defattr(-,root,root)
643 %{_libdir}/libBrokenLocale.a
646 %{_libdir}/libcrypt.a
650 %{_libdir}/libpthread.a
651 %{_libdir}/libresolv.a
656 %manifest %{name}.manifest
657 %defattr(-,root,root)
658 %doc %{_infodir}/libc.info.gz
659 %doc %{_infodir}/libc.info-?.gz
660 %doc %{_infodir}/libc.info-??.gz
664 %manifest %{name}.manifest
665 %defattr(-,root,root)
666 %doc %{_prefix}/share/doc/glibc
670 %manifest %{name}.manifest
671 %defattr(-,root,root)
672 %{_prefix}/share/i18n
676 %manifest %{name}.manifest
677 %license COPYING COPYING.LIB
678 %defattr(-,root,root)
680 %{_libdir}/libBrokenLocale_p.a
681 %{_libdir}/libanl_p.a
683 %{_libdir}/libcrypt_p.a
684 %{_libdir}/libpthread_p.a
685 %{_libdir}/libresolv_p.a
686 %{_libdir}/libnsl_p.a
688 %{_libdir}/librpcsvc_p.a
689 %{_libdir}/libutil_p.a
694 %manifest %{name}.manifest
695 %defattr(-,root,root)
696 /%{_lib}/libmemusage.so
697 /%{_lib}/libpcprofile.so
698 /%{_libdir}/libBrokenLocale.so
699 /%{_lib}/libSegFault.so
700 /%{_lib}/libthread_db-1.0.so
701 /%{_lib}/libthread_db.so.1
702 /%{_libdir}/libthread_db.so
703 %dir /%{_libdir}/audit
704 /%{_libdir}/audit/sotruss-lib.so
705 # These need gd-devel for building
706 # %%{_bindir}/memusage
707 # %%{_bindir}/memusagestat
709 %{_bindir}/pcprofiledump
717 %manifest %{name}.manifest
719 %defattr(-,root,root)