1# Dockerfile to build aria2 Windows binary using ubuntu mingw-w64
2# cross compiler chain.
3#
4# $ sudo docker build -t aria2-mingw - < Dockerfile.mingw
5#
6# After successful build, windows binary is located at
7# /aria2/src/aria2c.exe.  You can copy the binary using following
8# commands:
9#
10# $ id=$(sudo docker create aria2-mingw)
11# $ sudo docker cp $id:/aria2/src/aria2c.exe <dest>
12# $ sudo docker rm -v $id
13
14FROM ubuntu:20.04
15
16MAINTAINER Tatsuhiro Tsujikawa
17
18# Change HOST to x86_64-w64-mingw32 to build 64-bit binary
19ENV HOST i686-w64-mingw32
20
21# It would be better to use nearest ubuntu archive mirror for faster
22# downloads.
23# RUN sed -ie 's/archive\.ubuntu/jp.archive.ubuntu/g' /etc/apt/sources.list
24
25RUN apt-get update && \
26    DEBIAN_FRONTEND="noninteractive" \
27    apt-get install -y --no-install-recommends \
28        make binutils autoconf automake autotools-dev libtool \
29        patch ca-certificates \
30        pkg-config git curl dpkg-dev gcc-mingw-w64 g++-mingw-w64 \
31        autopoint libcppunit-dev libxml2-dev libgcrypt20-dev lzip
32
33RUN curl -L -O https://gmplib.org/download/gmp/gmp-6.2.1.tar.lz && \
34    curl -L -O https://github.com/libexpat/libexpat/releases/download/R_2_4_1/expat-2.4.1.tar.bz2 && \
35    curl -L -O https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz && \
36    curl -L -O http://zlib.net/zlib-1.2.11.tar.gz && \
37    curl -L -O https://c-ares.haxx.se/download/c-ares-1.17.2.tar.gz && \
38    curl -L -O https://www.libssh2.org/download/libssh2-1.9.0.tar.gz && \
39    curl -L -O https://github.com/libssh2/libssh2/commit/ba149e804ef653cc05ed9803dfc94519ce9328f7.patch
40
41RUN tar xf gmp-6.2.1.tar.lz && \
42    cd gmp-6.2.1 && \
43    ./configure \
44        --disable-shared \
45        --enable-static \
46        --prefix=/usr/local/$HOST \
47        --host=$HOST \
48        --disable-cxx \
49        --enable-fat \
50        CFLAGS="-mtune=generic -O2 -g0" && \
51    make install
52
53RUN tar xf expat-2.4.1.tar.bz2 && \
54    cd expat-2.4.1 && \
55    ./configure \
56        --disable-shared \
57        --enable-static \
58        --prefix=/usr/local/$HOST \
59        --host=$HOST \
60        --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` && \
61    make install
62
63RUN tar xf sqlite-autoconf-3360000.tar.gz && \
64    cd sqlite-autoconf-3360000 && \
65    ./configure \
66        --disable-shared \
67        --enable-static \
68        --prefix=/usr/local/$HOST \
69        --host=$HOST \
70        --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` && \
71    make install
72
73RUN tar xf zlib-1.2.11.tar.gz && \
74    cd zlib-1.2.11 && \
75    CC=$HOST-gcc \
76    AR=$HOST-ar \
77    LD=$HOST-ld \
78    RANLIB=$HOST-ranlib \
79    STRIP=$HOST-strip \
80    ./configure \
81        --prefix=/usr/local/$HOST \
82        --libdir=/usr/local/$HOST/lib \
83        --includedir=/usr/local/$HOST/include \
84        --static && \
85    make install
86
87RUN tar xf c-ares-1.17.2.tar.gz && \
88    cd c-ares-1.17.2 && \
89    ./configure \
90        --disable-shared \
91        --enable-static \
92        --without-random \
93        --prefix=/usr/local/$HOST \
94        --host=$HOST \
95        --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
96        LIBS="-lws2_32" && \
97    make install
98
99RUN tar xf libssh2-1.9.0.tar.gz && \
100    cd libssh2-1.9.0 && \
101    patch -p1 < ../ba149e804ef653cc05ed9803dfc94519ce9328f7.patch && \
102    ./configure \
103        --disable-shared \
104        --enable-static \
105        --prefix=/usr/local/$HOST \
106        --host=$HOST \
107        --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
108        --without-openssl \
109        --with-wincng \
110        LIBS="-lws2_32" && \
111    make install
112ADD https://api.github.com/repos/aria2/aria2/git/refs/heads/master version.json
113RUN git clone https://github.com/aria2/aria2 && \
114    cd aria2 && autoreconf -i && ./mingw-config && make && \
115    $HOST-strip src/aria2c.exe
116