summaryrefslogtreecommitdiff
path: root/ai-toolset-libstdc++.spec
blob: c767626ed503a39cfea1ef58e1e62ba3d7be2c2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
%global gcc_toolset_root /opt/openEuler/gcc-toolset-7/root
%global libstdcxx_soname libstdc++.so.6
%global libstdcxx_realname libstdc++.so.6.0.19
%global debug_package %{nil}

%ifarch x86_64
%global source_archive %{SOURCE0}
%global multiarch_dir x86_64-linux-gnu
%global gcc_triplet x86_64-pc-linux-gnu
%endif

%ifarch aarch64
%global source_archive %{SOURCE1}
%global multiarch_dir aarch64-linux-gnu
%global gcc_triplet aarch64-unknown-linux-gnu
%endif

Name:           ai-toolset-libstdc++
Version:        4.8.5
Release:        45
Summary:        Extract EL7 libstdc++ runtime for gcc-toolset-7 sysroot
License:        GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions
URL:            https://gcc.gnu.org/

# Put both tar.gz files into rpmbuild SOURCES.  The package build selects the
# matching one by target architecture.
Source0:        libstdc++-4.8.5-44.el7.x86_64.tar.gz
Source1:        libstdc++-4.8.5-44.el7.aarch64.tar.gz

ExclusiveArch:  x86_64 aarch64
BuildRequires:  gzip
BuildRequires:  tar

# The extracted EL7 library is private to %%{gcc_toolset_root}.  Do not
# let RPM dependency generators advertise it as the system libstdc++ provider.
AutoReqProv:    no
Provides:       bundled(libstdc++) = %{version}-%{release}

%description
This package extracts libstdc++.so.6.0.19 from the EL7 libstdc++ archive
and installs it into the gcc-toolset-7 sysroot layout used on openEuler 24.03.

%prep
rm -rf extract-root
mkdir -p extract-root
tar -xzf "%{source_archive}" -C extract-root \
    './usr/lib64/%{libstdcxx_realname}'

%build
# Nothing to build.  This package only repackages the runtime library.

%install
rm -rf %{buildroot}

install -d -m 0755 \
    %{buildroot}%{gcc_toolset_root}/usr/lib/%{multiarch_dir} \
    %{buildroot}%{gcc_toolset_root}/usr/lib/gcc/%{gcc_triplet}/7

install -m 0755 \
    extract-root/usr/lib64/%{libstdcxx_realname} \
    %{buildroot}%{gcc_toolset_root}/usr/lib/%{multiarch_dir}/%{libstdcxx_realname}

ln -s %{libstdcxx_realname} \
    %{buildroot}%{gcc_toolset_root}/usr/lib/%{multiarch_dir}/%{libstdcxx_soname}

# gcc-toolset-7 expects the GCC private directory to contain the
# old runtime as libstdc++.so.6.  Install a real file here to match the script's
# final copy behavior.
install -m 0755 \
    extract-root/usr/lib64/%{libstdcxx_realname} \
    %{buildroot}%{gcc_toolset_root}/usr/lib/gcc/%{gcc_triplet}/7/%{libstdcxx_soname}

%files
%dir /opt/openEuler
%dir /opt/openEuler/gcc-toolset-7
%dir %{gcc_toolset_root}
%dir %{gcc_toolset_root}/usr
%dir %{gcc_toolset_root}/usr/lib
%dir %{gcc_toolset_root}/usr/lib/%{multiarch_dir}
%{gcc_toolset_root}/usr/lib/%{multiarch_dir}/%{libstdcxx_realname}
%{gcc_toolset_root}/usr/lib/%{multiarch_dir}/%{libstdcxx_soname}
%dir %{gcc_toolset_root}/usr/lib/gcc
%dir %{gcc_toolset_root}/usr/lib/gcc/%{gcc_triplet}
%dir %{gcc_toolset_root}/usr/lib/gcc/%{gcc_triplet}/7
%{gcc_toolset_root}/usr/lib/gcc/%{gcc_triplet}/7/%{libstdcxx_soname}

%changelog
* Thu May 28 2026 Example Maintainer <example@example.com> - 4.8.5-44
- Extract EL7 libstdc++.so.6.0.19 into gcc-toolset-7 sysroot for openEuler 24.03