88 name : Build WavPack for glibc ${{ matrix.glibc_version }}
99 runs-on : ubuntu-latest
1010 strategy :
11+ fail-fast : false
12+ max-parallel : 4
1113 matrix :
12- glibc_version : ['2.31', '2.32', '2. 33', '2.34', '2. 35', '2.36', '2.37', '2.38', '2. 39', '2.40', '2.41']
13- wavpack_version : ['5.7.0', '5.8.0']
14+ glibc_version : ['2.31', '2.33', '2.35', '2.36', '2.37', '2.39'] # Common versions from Ubuntu LTS releases
15+ wavpack_version : ['5.7.0'] # Stick to stable version for now
1416
1517 steps :
1618 - uses : actions/checkout@v4
@@ -35,30 +37,81 @@ jobs:
3537 automake \
3638 libtool \
3739 gcc-multilib \
40+ gawk \
41+ bison \
42+ python3 \
43+ gettext \
44+ texinfo \
45+ pkg-config \
46+ file \
47+ patchelf \
48+ && ln -s /usr/bin/python3 /usr/bin/python \
3849 && rm -rf /var/lib/apt/lists/*
3950
51+ # Create a dedicated user for building
52+ RUN useradd -m builder
53+ USER builder
54+ WORKDIR /home/builder
55+
4056 # Download and build glibc
41- RUN wget https://ftp.gnu.org/gnu/glibc/glibc-${GLIBC_VERSION}.tar.bz2 \
57+ RUN set -x \
58+ && echo "Building glibc version ${GLIBC_VERSION}" \
59+ && wget https://ftp.gnu.org/gnu/glibc/glibc-${GLIBC_VERSION}.tar.bz2 \
60+ && echo "Extracting glibc source..." \
4261 && tar xjf glibc-${GLIBC_VERSION}.tar.bz2 \
4362 && mkdir glibc-build \
4463 && cd glibc-build \
45- && ../glibc-${GLIBC_VERSION}/configure --prefix=/usr \
46- && make -j$(nproc) \
47- && make install
64+ && echo "Configuring glibc..." \
65+ && ../glibc-${GLIBC_VERSION}/configure \
66+ --prefix=/home/builder/glibc-install \
67+ --disable-werror \
68+ --enable-add-ons \
69+ --with-headers=/usr/include \
70+ --without-selinux \
71+ > ../configure.log 2>&1 || (cat ../configure.log && false) \
72+ && echo "Building glibc..." \
73+ && make -j$(nproc) > ../make.log 2>&1 || (cat ../make.log && false) \
74+ && echo "Installing glibc..." \
75+ && make install > ../install.log 2>&1 || (cat ../install.log && false) \
76+ && echo "glibc build completed successfully"
77+
78+ # Verify glibc installation
79+ RUN /home/builder/glibc-install/lib/libc.so.6 --version
80+
81+ USER root
82+
83+ ENV PATH=/home/builder/glibc-install/bin:$PATH \
84+ LD_LIBRARY_PATH=/home/builder/glibc-install/lib:$LD_LIBRARY_PATH \
85+ CFLAGS="-I/home/builder/glibc-install/include" \
86+ LDFLAGS="-L/home/builder/glibc-install/lib"
4887
4988 # Now build WavPack
5089 ARG WAVPACK_VERSION
90+ USER builder
5191 RUN wget https://github.com/dbry/WavPack/releases/download/${WAVPACK_VERSION}/wavpack-${WAVPACK_VERSION}.tar.bz2 \
5292 && tar xjf wavpack-${WAVPACK_VERSION}.tar.bz2 \
5393 && cd wavpack-${WAVPACK_VERSION} \
54- && ./configure --enable-shared --prefix=/usr/local \
94+ && ./configure --enable-shared --prefix=/home/builder/wavpack-install \
95+ --with-libtool-sysroot=/home/builder/glibc-install \
5596 && make \
5697 && make install
5798
58- # Create output directory
99+ USER root
100+
101+ # Create output directory with the built libraries
59102 RUN mkdir -p /output/linux-x86_64-glibc${GLIBC_VERSION} \
60- && cp /usr/local/lib/libwavpack.so* /output/linux-x86_64-glibc${GLIBC_VERSION}/ \
61- && cp /usr/local/lib/libwavpack.so /output/linux-x86_64-glibc${GLIBC_VERSION}/libwavpack.so.1
103+ && cp /home/builder/wavpack-install/lib/libwavpack.so* /output/linux-x86_64-glibc${GLIBC_VERSION}/ \
104+ && cp /home/builder/wavpack-install/lib/libwavpack.so /output/linux-x86_64-glibc${GLIBC_VERSION}/libwavpack.so.1 \
105+ && patchelf --set-rpath '$ORIGIN' /output/linux-x86_64-glibc${GLIBC_VERSION}/*.so* \
106+ && echo "Built libraries:" \
107+ && ls -l /output/linux-x86_64-glibc${GLIBC_VERSION}/ \
108+ && ldd /output/linux-x86_64-glibc${GLIBC_VERSION}/libwavpack.so
109+
110+ # Clean up build files to reduce image size
111+ RUN rm -rf \
112+ /home/builder/glibc-* \
113+ /home/builder/wavpack-* \
114+ /var/lib/apt/lists/*
62115 EOF
63116
64117 - name : Build Docker image and extract libraries
0 commit comments