Reorganize %install phase.
The %install phase is reorganized into 3 distinct phases, the first phase where files are modified, a second phase where file lists are generated, and a final phase where files are only removed based on list information. This cleanup makes it very clear when we are done installing files, and therefore creates a place where we can put ABI instrumentation to compare the resulting ABI before stripping and debuginfo generation. No ABI instrumentation is added by this patch, and before-and-after testing verifies the %install phase remains functionally the same.
This commit is contained in:
		
							parent
							
								
									559f435759
								
							
						
					
					
						commit
						e4aafbc505
					
				
							
								
								
									
										241
									
								
								glibc.spec
									
									
									
									
									
								
							
							
						
						
									
										241
									
								
								glibc.spec
									
									
									
									
									
								
							| @ -1065,17 +1065,10 @@ truncate -s 0 $RPM_BUILD_ROOT/etc/gai.conf | ||||
| truncate -s 0 $RPM_BUILD_ROOT%{_libdir}/gconv/gconv-modules.cache | ||||
| chmod 644 $RPM_BUILD_ROOT%{_libdir}/gconv/gconv-modules.cache | ||||
| 
 | ||||
| ############################################################################## | ||||
| # Misc... | ||||
| ############################################################################## | ||||
| 
 | ||||
| # Install the upgrade program | ||||
| install -m 700 build-%{target}/elf/glibc_post_upgrade \ | ||||
|   $RPM_BUILD_ROOT%{_prefix}/sbin/glibc_post_upgrade.%{_target_cpu} | ||||
| 
 | ||||
| # Strip all of the installed object files. | ||||
| strip -g $RPM_BUILD_ROOT%{_libdir}/*.o | ||||
| 
 | ||||
| ############################################################################## | ||||
| # Install debug copies of unstripped static libraries | ||||
| # - This step must be last in order to capture any additional static | ||||
| @ -1091,6 +1084,116 @@ cp -a $RPM_BUILD_ROOT%{_libdir}/*.a \ | ||||
| rm -f $RPM_BUILD_ROOT%{_prefix}/lib/debug%{_libdir}/*_p.a | ||||
| %endif | ||||
| 
 | ||||
| # Remove the zoneinfo files | ||||
| rm -rf $RPM_BUILD_ROOT%{_prefix}/share/zoneinfo | ||||
| 
 | ||||
| # Make sure %config files have the same timestamp across multilib packages. | ||||
| # | ||||
| # XXX: Ideally ld.so.conf should have the timestamp of the spec file, but there | ||||
| # doesn't seem to be any macro to give us that.  So we do the next best thing, | ||||
| # which is to at least keep the timestamp consistent.  The choice of using | ||||
| # glibc_post_upgrade.c is arbitrary. | ||||
| touch -r %{SOURCE0} $RPM_BUILD_ROOT/etc/ld.so.conf | ||||
| touch -r sunrpc/etc.rpc $RPM_BUILD_ROOT/etc/rpc | ||||
| 
 | ||||
| pushd build-%{target} | ||||
| $GCC -Os -g -static -o build-locale-archive %{SOURCE1} \ | ||||
| 	../build-%{target}/locale/locarchive.o \ | ||||
| 	../build-%{target}/locale/md5.o \ | ||||
| 	../build-%{target}/locale/record-status.o \ | ||||
| 	-I. -DDATADIR=\"%{_datadir}\" -DPREFIX=\"%{_prefix}\" \ | ||||
| 	-L../build-%{target} \ | ||||
| 	-B../build-%{target}/csu/ -lc -lc_nonshared | ||||
| install -m 700 build-locale-archive $RPM_BUILD_ROOT%{_prefix}/sbin/build-locale-archive | ||||
| popd | ||||
| 
 | ||||
| # Lastly copy some additional documentation for the packages. | ||||
| rm -rf documentation | ||||
| mkdir documentation | ||||
| cp timezone/README documentation/README.timezone | ||||
| cp posix/gai.conf documentation/ | ||||
| 
 | ||||
| %ifarch s390x | ||||
| # Compatibility symlink | ||||
| mkdir -p $RPM_BUILD_ROOT/lib | ||||
| ln -sf /%{_lib}/ld64.so.1 $RPM_BUILD_ROOT/lib/ld64.so.1 | ||||
| %endif | ||||
| 
 | ||||
| %if %{with benchtests} | ||||
| # Build benchmark binaries.  Ignore the output of the benchmark runs. | ||||
| pushd build-%{target} | ||||
| make BENCH_DURATION=1 bench-build | ||||
| popd | ||||
| 
 | ||||
| # Copy over benchmark binaries. | ||||
| mkdir -p $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests | ||||
| cp $(find build-%{target}/benchtests -type f -executable) $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests/ | ||||
| # ... and the makefile. | ||||
| for b in %{SOURCE9} %{SOURCE10}; do | ||||
| 	cp $b $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests/ | ||||
| done | ||||
| # .. and finally, the comparison scripts. | ||||
| cp benchtests/scripts/benchout.schema.json $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests/ | ||||
| cp benchtests/scripts/compare_bench.py $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests/ | ||||
| cp benchtests/scripts/import_bench.py $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests/ | ||||
| cp benchtests/scripts/validate_benchout.py $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests/ | ||||
| 
 | ||||
| %if 0%{?_enable_debug_packages} | ||||
| # The #line directives gperf generates do not give the proper | ||||
| # file name relative to the build directory. | ||||
| pushd locale | ||||
| ln -s programs/*.gperf . | ||||
| popd | ||||
| pushd iconv | ||||
| ln -s ../locale/programs/charmap-kw.gperf . | ||||
| popd | ||||
| 
 | ||||
| %if %{with docs} | ||||
| # Remove the `dir' info-heirarchy file which will be maintained | ||||
| # by the system as it adds info files to the install. | ||||
| rm -f $RPM_BUILD_ROOT%{_infodir}/dir | ||||
| %endif | ||||
| 
 | ||||
| %ifnarch %{auxarches} | ||||
| truncate -s 0 $RPM_BUILD_ROOT/%{_prefix}/lib/locale/locale-archive | ||||
| mkdir -p $RPM_BUILD_ROOT/var/{db,run}/nscd | ||||
| touch $RPM_BUILD_ROOT/var/{db,run}/nscd/{passwd,group,hosts,services} | ||||
| touch $RPM_BUILD_ROOT/var/run/nscd/{socket,nscd.pid} | ||||
| %endif | ||||
| 
 | ||||
| # Move libpcprofile.so and libmemusage.so into the proper library directory. | ||||
| # They can be moved without any real consequences because users would not use | ||||
| # them directly. | ||||
| mkdir -p $RPM_BUILD_ROOT%{_libdir} | ||||
| mv -f $RPM_BUILD_ROOT/%{_lib}/lib{pcprofile,memusage}.so \ | ||||
| 	$RPM_BUILD_ROOT%{_libdir} | ||||
| 
 | ||||
| # Strip all of the installed object files. | ||||
| strip -g $RPM_BUILD_ROOT%{_libdir}/*.o | ||||
| 
 | ||||
| ############################################################################### | ||||
| # Rebuild libpthread.a using --whole-archive to ensure all of libpthread | ||||
| # is included in a static link. This prevents any problems when linking | ||||
| # statically, using parts of libpthread, and other necessary parts not | ||||
| # being included. Upstream has decided that this is the wrong approach to | ||||
| # this problem and that the full set of dependencies should be resolved | ||||
| # such that static linking works and produces the most minimally sized | ||||
| # static application possible. | ||||
| ############################################################################### | ||||
| pushd $RPM_BUILD_ROOT%{_prefix}/%{_lib}/ | ||||
| $GCC -r -nostdlib -o libpthread.o -Wl,--whole-archive ./libpthread.a | ||||
| rm libpthread.a | ||||
| ar rcs libpthread.a libpthread.o | ||||
| rm libpthread.o | ||||
| popd | ||||
| 
 | ||||
| ############################################################################## | ||||
| # Beyond this point in the install process we no longer modify the set of | ||||
| # installed files, with one exception, for auxarches we cleanup the file list | ||||
| # at the end and remove files which we don't intend to ship. We need the file | ||||
| # list to effect a proper cleanup, and so it happens last. | ||||
| ############################################################################## | ||||
| 
 | ||||
| ############################################################################## | ||||
| # Build the file lists used for describing the package and subpackages. | ||||
| ############################################################################## | ||||
| @ -1156,15 +1259,12 @@ rm -f $RPM_BUILD_ROOT%{_prefix}/lib/debug%{_libdir}/*_p.a | ||||
|       -e '\,.*/share/i18n/locales/.*,d' \ | ||||
|       -e '\,.*/share/i18n/charmaps/.*,d' \ | ||||
|       -e '\,/etc/\(localtime\|nsswitch.conf\|ld\.so\.conf\|ld\.so\.cache\|default\|rpc\|gai\.conf\),d' \ | ||||
|       -e '\,/%{_lib}/lib\(pcprofile\|memusage\)\.so,d' \ | ||||
|       -e '\,/%{_libdir}/lib\(pcprofile\|memusage\)\.so,d' \ | ||||
|       -e '\,bin/\(memusage\|mtrace\|xtrace\|pcprofiledump\),d' | ||||
| } | sort > rpm.filelist | ||||
| 
 | ||||
| touch common.filelist | ||||
| 
 | ||||
| mkdir -p $RPM_BUILD_ROOT%{_libdir} | ||||
| mv -f $RPM_BUILD_ROOT/%{_lib}/lib{pcprofile,memusage}.so $RPM_BUILD_ROOT%{_libdir} | ||||
| 
 | ||||
| # The xtrace and memusage scripts have hard-coded paths that need to be | ||||
| # translated to a correct set of paths using the $LIB token which is | ||||
| # dynamically translated by ld.so as the default lib directory. | ||||
| @ -1217,6 +1317,9 @@ grep '%{_libdir}/lib.*\.a' < rpm.filelist \ | ||||
| # devel package. | ||||
| grep '%{_libdir}/.*\.o' < rpm.filelist >> devel.filelist | ||||
| grep '%{_libdir}/lib.*\.so' < rpm.filelist >> devel.filelist | ||||
| # The exception is that libmemusage.so and libpcprofile.so are in glibc | ||||
| # because they are used by the utils. | ||||
| sed -i -e '\,libmemusage.so,d' -e '\,libpcprofile.so,d' devel.filelist | ||||
| 
 | ||||
| # Remove all of the static, object, unversioned DSOs, and nscd from the core | ||||
| # glibc package. | ||||
| @ -1294,110 +1397,25 @@ grep '/libnsl-[0-9.]*.so$' rpm.filelist > libnsl.filelist | ||||
| test $(wc -l < libnsl.filelist) -eq 1 | ||||
| sed -i -e '\,/libnsl,d' rpm.filelist | ||||
| 
 | ||||
| # Remove the zoneinfo files | ||||
| # XXX: Why isn't this don't earlier when we are removing files? | ||||
| #      Won't this impact what is shipped? | ||||
| rm -rf $RPM_BUILD_ROOT%{_prefix}/share/zoneinfo | ||||
| 
 | ||||
| # Make sure %config files have the same timestamp across multilib packages. | ||||
| # | ||||
| # XXX: Ideally ld.so.conf should have the timestamp of the spec file, but there | ||||
| # doesn't seem to be any macro to give us that.  So we do the next best thing, | ||||
| # which is to at least keep the timestamp consistent.  The choice of using | ||||
| # glibc_post_upgrade.c is arbitrary. | ||||
| touch -r %{SOURCE0} $RPM_BUILD_ROOT/etc/ld.so.conf | ||||
| touch -r sunrpc/etc.rpc $RPM_BUILD_ROOT/etc/rpc | ||||
| 
 | ||||
| pushd build-%{target} | ||||
| $GCC -Os -g -static -o build-locale-archive %{SOURCE1} \ | ||||
| 	../build-%{target}/locale/locarchive.o \ | ||||
| 	../build-%{target}/locale/md5.o \ | ||||
| 	../build-%{target}/locale/record-status.o \ | ||||
| 	-I. -DDATADIR=\"%{_datadir}\" -DPREFIX=\"%{_prefix}\" \ | ||||
| 	-L../build-%{target} \ | ||||
| 	-B../build-%{target}/csu/ -lc -lc_nonshared | ||||
| install -m 700 build-locale-archive $RPM_BUILD_ROOT%{_prefix}/sbin/build-locale-archive | ||||
| popd | ||||
| 
 | ||||
| # Lastly copy some additional documentation for the packages. | ||||
| rm -rf documentation | ||||
| mkdir documentation | ||||
| cp timezone/README documentation/README.timezone | ||||
| cp posix/gai.conf documentation/ | ||||
| 
 | ||||
| %ifarch s390x | ||||
| # Compatibility symlink | ||||
| mkdir -p $RPM_BUILD_ROOT/lib | ||||
| ln -sf /%{_lib}/ld64.so.1 $RPM_BUILD_ROOT/lib/ld64.so.1 | ||||
| %endif | ||||
| 
 | ||||
| %if %{with benchtests} | ||||
| # Build benchmark binaries.  Ignore the output of the benchmark runs. | ||||
| pushd build-%{target} | ||||
| make BENCH_DURATION=1 bench-build | ||||
| popd | ||||
| 
 | ||||
| # Copy over benchmark binaries. | ||||
| mkdir -p $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests | ||||
| cp $(find build-%{target}/benchtests -type f -executable) $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests/ | ||||
| 
 | ||||
| # List of benchmarks. | ||||
| find build-%{target}/benchtests -type f -executable | while read b; do | ||||
| 	echo "%{_prefix}/libexec/glibc-benchtests/$(basename $b)" | ||||
| done >> benchtests.filelist | ||||
| 
 | ||||
| # ... and the makefile. | ||||
| for b in %{SOURCE9} %{SOURCE10}; do | ||||
| 	cp $b $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests/ | ||||
| 	echo "%{_prefix}/libexec/glibc-benchtests/$(basename $b)" >> benchtests.filelist | ||||
| done | ||||
| 
 | ||||
| # .. and finally, the comparison scripts. | ||||
| cp benchtests/scripts/benchout.schema.json $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests/ | ||||
| cp benchtests/scripts/compare_bench.py $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests/ | ||||
| cp benchtests/scripts/import_bench.py $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests/ | ||||
| cp benchtests/scripts/validate_benchout.py $RPM_BUILD_ROOT%{_prefix}/libexec/glibc-benchtests/ | ||||
| 
 | ||||
| # ... and finally, the comparison scripts. | ||||
| echo "%{_prefix}/libexec/glibc-benchtests/benchout.schema.json" >> benchtests.filelist | ||||
| echo "%{_prefix}/libexec/glibc-benchtests/compare_bench.py*" >> benchtests.filelist | ||||
| echo "%{_prefix}/libexec/glibc-benchtests/import_bench.py*" >> benchtests.filelist | ||||
| echo "%{_prefix}/libexec/glibc-benchtests/validate_benchout.py*" >> benchtests.filelist | ||||
| %endif | ||||
| sed -i -e '\,glibc-benchtests,d' rpm.filelist | ||||
| 
 | ||||
| ############################################################################### | ||||
| # Rebuild libpthread.a using --whole-archive to ensure all of libpthread | ||||
| # is included in a static link. This prevents any problems when linking | ||||
| # statically, using parts of libpthread, and other necessary parts not | ||||
| # being included. Upstream has decided that this is the wrong approach to | ||||
| # this problem and that the full set of dependencies should be resolved | ||||
| # such that static linking works and produces the most minimally sized | ||||
| # static application possible. | ||||
| # Process debug information. | ||||
| ############################################################################### | ||||
| pushd $RPM_BUILD_ROOT%{_prefix}/%{_lib}/ | ||||
| $GCC -r -nostdlib -o libpthread.o -Wl,--whole-archive ./libpthread.a | ||||
| rm libpthread.a | ||||
| ar rcs libpthread.a libpthread.o | ||||
| rm libpthread.o | ||||
| popd | ||||
| ############################################################################### | ||||
| 
 | ||||
| %if 0%{?_enable_debug_packages} | ||||
| 
 | ||||
| # The #line directives gperf generates do not give the proper | ||||
| # file name relative to the build directory. | ||||
| pushd locale | ||||
| ln -s programs/*.gperf . | ||||
| popd | ||||
| pushd iconv | ||||
| ln -s ../locale/programs/charmap-kw.gperf . | ||||
| popd | ||||
| 
 | ||||
| # Print some diagnostic information in the builds about the | ||||
| # getconf binaries. | ||||
| # XXX: Why do we do this? | ||||
| ls -l $RPM_BUILD_ROOT%{_prefix}/bin/getconf | ||||
| ls -l $RPM_BUILD_ROOT%{_prefix}/libexec/getconf | ||||
| eu-readelf -hS $RPM_BUILD_ROOT%{_prefix}/bin/getconf \ | ||||
| 	$RPM_BUILD_ROOT%{_prefix}/libexec/getconf/* | ||||
| 
 | ||||
| find_debuginfo_args='--strict-build-id -g' | ||||
| %ifarch %{debuginfocommonarches} | ||||
| @ -1503,15 +1521,13 @@ exclude_common_dirs debuginfo.filelist | ||||
| 
 | ||||
| %endif # 0%{?_enable_debug_packages} | ||||
| 
 | ||||
| %if %{with docs} | ||||
| # Remove the `dir' info-heirarchy file which will be maintained | ||||
| # by the system as it adds info files to the install. | ||||
| rm -f $RPM_BUILD_ROOT%{_infodir}/dir | ||||
| %endif | ||||
| 
 | ||||
| %ifarch %{auxarches} | ||||
| 
 | ||||
| ############################################################################## | ||||
| # Delete files that we do not intended to ship with the auxarch. | ||||
| # This is the only place where we touch the installed files after generating | ||||
| # the file lists. | ||||
| ############################################################################## | ||||
| 
 | ||||
| echo Cutting down the list of unpackaged files | ||||
| sed -e '/%%dir/d;/%%config/d;/%%verify/d;s/%%lang([^)]*) //;s#^/*##' \ | ||||
| 	common.filelist devel.filelist static.filelist headers.filelist \ | ||||
| @ -1520,19 +1536,8 @@ sed -e '/%%dir/d;/%%config/d;/%%verify/d;s/%%lang([^)]*) //;s#^/*##' \ | ||||
| 	debuginfocommon.filelist \ | ||||
| %endif | ||||
| 	| (cd $RPM_BUILD_ROOT; xargs --no-run-if-empty rm -f 2> /dev/null || :) | ||||
| 
 | ||||
| %else | ||||
| 
 | ||||
| mkdir -p $RPM_BUILD_ROOT/var/{db,run}/nscd | ||||
| touch $RPM_BUILD_ROOT/var/{db,run}/nscd/{passwd,group,hosts,services} | ||||
| touch $RPM_BUILD_ROOT/var/run/nscd/{socket,nscd.pid} | ||||
| 
 | ||||
| %endif # %{auxarches} | ||||
| 
 | ||||
| %ifnarch %{auxarches} | ||||
| truncate -s 0 $RPM_BUILD_ROOT/%{_prefix}/lib/locale/locale-archive | ||||
| %endif | ||||
| 
 | ||||
| ############################################################################## | ||||
| # Run the glibc testsuite | ||||
| ############################################################################## | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user