1
0
mirror of https://github.com/skeeto/w64devkit.git synced 2025-07-28 16:41:58 +03:00
Files
w64devkit/Dockerfile
Christopher Wellons 79e413e604 FAIL: Use batch script to "install" BusyBox
I'd like to eliminate the "busybox --install" step, and I hoped I could
do it via batch scripts command "aliases". However, each aliased command
has cmd.exe as its parent interfering with its operation, particularly
the infamous "Terminate batch job (Y/N)?" message which cannot be
disabled.

The usual suggestion when people complain about this misfeature is to
use PowerShell. However, unlike batch scripts, PowerShell scripts are
not first class citizens on Windows. PowerShell is not always available
(often disabled by the adminstrator), and its scripts generally can't be
installed on and executed via the PATH, at least not without system-wide
configuration (i.e. PATHEXT).
2021-01-23 21:22:43 -05:00

494 lines
20 KiB
Docker

FROM debian:buster-slim
ARG VERSION=1.5.0
ARG PREFIX=/w64devkit
ARG BINUTILS_VERSION=2.35.1
ARG BUSYBOX_VERSION=FRP-3812-g12e14ebba
ARG CTAGS_VERSION=20200824
ARG GCC_VERSION=10.2.0
ARG GDB_VERSION=10.1
ARG GMP_VERSION=6.2.0
ARG MAKE_VERSION=4.2
ARG MINGW_VERSION=7.0.0
ARG MPC_VERSION=1.2.1
ARG MPFR_VERSION=4.1.0
ARG NASM_VERSION=2.14.02
ARG VIM_VERSION=8.2
RUN apt-get update && apt-get install --yes --no-install-recommends \
build-essential curl file libgmp-dev libmpc-dev libmpfr-dev m4 texinfo zip
# Download, verify, and unpack
RUN curl --insecure --location --remote-name-all \
https://ftp.gnu.org/gnu/binutils/binutils-$BINUTILS_VERSION.tar.xz \
https://ftp.gnu.org/gnu/gcc/gcc-$GCC_VERSION/gcc-$GCC_VERSION.tar.xz \
https://ftp.gnu.org/gnu/gdb/gdb-$GDB_VERSION.tar.xz \
https://ftp.gnu.org/gnu/gmp/gmp-$GMP_VERSION.tar.xz \
https://ftp.gnu.org/gnu/mpc/mpc-$MPC_VERSION.tar.gz \
https://ftp.gnu.org/gnu/mpfr/mpfr-$MPFR_VERSION.tar.xz \
https://ftp.gnu.org/gnu/make/make-$MAKE_VERSION.tar.gz \
https://frippery.org/files/busybox/busybox-w32-$BUSYBOX_VERSION.tgz \
http://ftp.vim.org/pub/vim/unix/vim-$VIM_VERSION.tar.bz2 \
https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-$NASM_VERSION.tar.xz \
http://deb.debian.org/debian/pool/main/u/universal-ctags/universal-ctags_0+git$CTAGS_VERSION.orig.tar.gz \
https://downloads.sourceforge.net/project/mingw-w64/mingw-w64/mingw-w64-release/mingw-w64-v$MINGW_VERSION.tar.bz2
COPY SHA256SUMS .
RUN sha256sum -c SHA256SUMS \
&& tar xJf binutils-$BINUTILS_VERSION.tar.xz \
&& tar xzf busybox-w32-$BUSYBOX_VERSION.tgz \
&& tar xzf universal-ctags_0+git$CTAGS_VERSION.orig.tar.gz \
&& tar xJf gcc-$GCC_VERSION.tar.xz \
&& tar xJf gdb-$GDB_VERSION.tar.xz \
&& tar xJf gmp-$GMP_VERSION.tar.xz \
&& tar xzf mpc-$MPC_VERSION.tar.gz \
&& tar xJf mpfr-$MPFR_VERSION.tar.xz \
&& tar xzf make-$MAKE_VERSION.tar.gz \
&& tar xjf mingw-w64-v$MINGW_VERSION.tar.bz2 \
&& tar xJf nasm-$NASM_VERSION.tar.xz \
&& tar xjf vim-$VIM_VERSION.tar.bz2
# Build cross-compiler
WORKDIR /x-binutils
RUN /binutils-$BINUTILS_VERSION/configure \
--prefix=/bootstrap \
--with-sysroot=/bootstrap \
--target=x86_64-w64-mingw32 \
--disable-nls \
--enable-static \
--disable-shared \
--disable-multilib
RUN make -j$(nproc)
RUN make install
WORKDIR /x-mingw-headers
RUN /mingw-w64-v$MINGW_VERSION/mingw-w64-headers/configure \
--prefix=/bootstrap/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32
RUN make -j$(nproc)
RUN make install
WORKDIR /bootstrap
RUN ln -s x86_64-w64-mingw32 mingw
WORKDIR /x-gcc
RUN /gcc-$GCC_VERSION/configure \
--prefix=/bootstrap \
--with-sysroot=/bootstrap \
--target=x86_64-w64-mingw32 \
--enable-static \
--disable-shared \
--enable-languages=c,c++ \
--enable-libgomp \
--enable-threads=posix \
--enable-version-specific-runtime-libs \
--disable-dependency-tracking \
--disable-nls \
--disable-multilib \
CFLAGS="-Os" \
CXXFLAGS="-Os" \
LDFLAGS="-s"
RUN make -j$(nproc) all-gcc
RUN make install-gcc
ENV PATH="/bootstrap/bin:${PATH}"
WORKDIR /x-mingw-crt
RUN /mingw-w64-v$MINGW_VERSION/mingw-w64-crt/configure \
--prefix=/bootstrap/x86_64-w64-mingw32 \
--with-sysroot=/bootstrap/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--disable-dependency-tracking \
--disable-lib32 \
CFLAGS="-Os" \
LDFLAGS="-s"
RUN make -j$(nproc)
RUN make install
WORKDIR /x-winpthreads
RUN /mingw-w64-v$MINGW_VERSION/mingw-w64-libraries/winpthreads/configure \
--prefix=/bootstrap/x86_64-w64-mingw32 \
--with-sysroot=/bootstrap/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--enable-static \
--disable-shared \
CFLAGS="-Os" \
LDFLAGS="-s"
RUN make -j$(nproc)
RUN make install
WORKDIR /x-gcc
RUN make -j$(nproc)
RUN make install
# Cross-compile GCC
WORKDIR /
WORKDIR /binutils
RUN /binutils-$BINUTILS_VERSION/configure \
--prefix=$PREFIX \
--with-sysroot=$PREFIX \
--host=x86_64-w64-mingw32 \
--target=x86_64-w64-mingw32 \
--disable-nls \
--enable-static \
--disable-shared \
CFLAGS="-Os" \
LDFLAGS="-s"
RUN make -j$(nproc)
RUN make install
WORKDIR /
WORKDIR /gmp
RUN /gmp-$GMP_VERSION/configure \
--prefix=/deps \
--host=x86_64-w64-mingw32 \
--disable-assembly \
--enable-static \
--disable-shared \
CFLAGS="-Os" \
CXXFLAGS="-Os" \
LDFLAGS="-s"
RUN make -j$(nproc)
RUN make install
WORKDIR /
WORKDIR /mpfr
RUN /mpfr-$MPFR_VERSION/configure \
--prefix=/deps \
--host=x86_64-w64-mingw32 \
--with-gmp-include=/deps/include \
--with-gmp-lib=/deps/lib \
--enable-static \
--disable-shared \
CFLAGS="-Os" \
LDFLAGS="-s"
RUN make -j$(nproc)
RUN make install
WORKDIR /
WORKDIR /mpc
RUN /mpc-$MPC_VERSION/configure \
--prefix=/deps \
--host=x86_64-w64-mingw32 \
--with-gmp-include=/deps/include \
--with-gmp-lib=/deps/lib \
--with-mpfr-include=/deps/include \
--with-mpfr-lib=/deps/lib \
--enable-static \
--disable-shared \
CFLAGS="-Os" \
LDFLAGS="-s"
RUN make -j$(nproc)
RUN make install
WORKDIR /
WORKDIR /mingw-headers
RUN /mingw-w64-v$MINGW_VERSION/mingw-w64-headers/configure \
--prefix=$PREFIX/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32
RUN make -j$(nproc)
RUN make install
WORKDIR /mingw-crt
RUN /mingw-w64-v$MINGW_VERSION/mingw-w64-crt/configure \
--prefix=$PREFIX/x86_64-w64-mingw32 \
--with-sysroot=$PREFIX/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--disable-dependency-tracking \
--disable-lib32 \
CFLAGS="-Os" \
LDFLAGS="-s"
RUN make -j$(nproc)
RUN make install
WORKDIR /
RUN sed -i 's#=/mingw/include#=/include#' gcc-$GCC_VERSION/gcc/config.gcc
WORKDIR /gcc
RUN /gcc-$GCC_VERSION/configure \
--prefix=$PREFIX \
--with-sysroot=$PREFIX \
--target=x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--enable-static \
--disable-shared \
--with-gmp-include=/deps/include \
--with-gmp-lib=/deps/lib \
--with-mpc-include=/deps/include \
--with-mpc-lib=/deps/lib \
--with-mpfr-include=/deps/include \
--with-mpfr-lib=/deps/lib \
--enable-languages=c,c++ \
--enable-libgomp \
--enable-threads=posix \
--enable-version-specific-runtime-libs \
--disable-dependency-tracking \
--disable-multilib \
--disable-nls \
--enable-mingw-wildcard \
CFLAGS="-Os" \
CXXFLAGS="-Os" \
LDFLAGS="-s"
RUN make -j$(nproc)
RUN make install
RUN rm -rf $PREFIX/x86_64-w64-mingw32/bin/ $PREFIX/bin/x86_64-w64-mingw32-* \
$PREFIX/bin/ld.bfd.exe $PREFIX/bin/c++.exe
RUN echo '@"%~dp0/g++.exe" %*' >$PREFIX/bin/c++.bat
WORKDIR /winpthreads
RUN /mingw-w64-v$MINGW_VERSION/mingw-w64-libraries/winpthreads/configure \
--prefix=$PREFIX/x86_64-w64-mingw32 \
--with-sysroot=$PREFIX/x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--enable-static \
--disable-shared \
CFLAGS="-Os" \
LDFLAGS="-s"
RUN make -j$(nproc)
RUN make install
RUN echo '@"%~dp0/gcc.exe" %*' >$PREFIX/bin/cc.bat
# Enable non-broken, standards-compliant formatted output by default
RUN sed -i '1s/^/#ifndef __USE_MINGW_ANSI_STDIO\n# define __USE_MINGW_ANSI_STDIO 1\n#endif\n/' \
$PREFIX/x86_64-w64-mingw32/include/_mingw.h
# Build some extra development tools
WORKDIR /gdb
RUN /gdb-$GDB_VERSION/configure \
--host=x86_64-w64-mingw32 \
CFLAGS="-Os" \
CXXFLAGS="-Os" \
LDFLAGS="-s"
RUN make -j$(nproc)
RUN cp gdb/gdb.exe $PREFIX/bin/
WORKDIR /make
RUN sed -i 's/"sh\.exe"/"sh.bat"/' /make-$MAKE_VERSION/job.c
RUN /make-$MAKE_VERSION/configure \
--host=x86_64-w64-mingw32 \
--disable-nls \
CFLAGS="-I/make-$MAKE_VERSION/glob -Os" \
LDFLAGS="-s"
RUN make -j$(nproc)
RUN cp make.exe $PREFIX/bin/
RUN echo '@"%~dp0/make.exe" %*' >$PREFIX/bin/mingw32-make.bat
WORKDIR /busybox-w32
RUN make mingw64_defconfig
RUN sed -ri 's/^(CONFIG_(XXD|AR|STRINGS|DPKG|DPKG_DEB|TEST2|RPM|VI))=y/\1=n/' \
.config
RUN sed -i '/\\007/d' libbb/lineedit.c
RUN make -j$(nproc)
RUN cp busybox.exe $PREFIX/bin/
# Install all BusyBox commands as batch scripts (like busybox --install)
RUN echo '@"%~dp0/busybox" arch %*' >$PREFIX/bin/arch.bat \
&& echo '@"%~dp0/busybox" ash %*' >$PREFIX/bin/ash.bat \
&& echo '@"%~dp0/busybox" awk %*' >$PREFIX/bin/awk.bat \
&& echo '@"%~dp0/busybox" base32 %*' >$PREFIX/bin/base32.bat \
&& echo '@"%~dp0/busybox" base64 %*' >$PREFIX/bin/base64.bat \
&& echo '@"%~dp0/busybox" basename %*' >$PREFIX/bin/basename.bat \
&& echo '@"%~dp0/busybox" bash %*' >$PREFIX/bin/bash.bat \
&& echo '@"%~dp0/busybox" bunzip2 %*' >$PREFIX/bin/bunzip2.bat \
&& echo '@"%~dp0/busybox" bzcat %*' >$PREFIX/bin/bzcat.bat \
&& echo '@"%~dp0/busybox" bzip2 %*' >$PREFIX/bin/bzip2.bat \
&& echo '@"%~dp0/busybox" cal %*' >$PREFIX/bin/cal.bat \
&& echo '@"%~dp0/busybox" cat %*' >$PREFIX/bin/cat.bat \
&& echo '@"%~dp0/busybox" chattr %*' >$PREFIX/bin/chattr.bat \
&& echo '@"%~dp0/busybox" chmod %*' >$PREFIX/bin/chmod.bat \
&& echo '@"%~dp0/busybox" cksum %*' >$PREFIX/bin/cksum.bat \
&& echo '@"%~dp0/busybox" clear %*' >$PREFIX/bin/clear.bat \
&& echo '@"%~dp0/busybox" cmp %*' >$PREFIX/bin/cmp.bat \
&& echo '@"%~dp0/busybox" comm %*' >$PREFIX/bin/comm.bat \
&& echo '@"%~dp0/busybox" cp %*' >$PREFIX/bin/cp.bat \
&& echo '@"%~dp0/busybox" cpio %*' >$PREFIX/bin/cpio.bat \
&& echo '@"%~dp0/busybox" cut %*' >$PREFIX/bin/cut.bat \
&& echo '@"%~dp0/busybox" date %*' >$PREFIX/bin/date.bat \
&& echo '@"%~dp0/busybox" dc %*' >$PREFIX/bin/dc.bat \
&& echo '@"%~dp0/busybox" dd %*' >$PREFIX/bin/dd.bat \
&& echo '@"%~dp0/busybox" df %*' >$PREFIX/bin/df.bat \
&& echo '@"%~dp0/busybox" diff %*' >$PREFIX/bin/diff.bat \
&& echo '@"%~dp0/busybox" dirname %*' >$PREFIX/bin/dirname.bat \
&& echo '@"%~dp0/busybox" dos2unix %*' >$PREFIX/bin/dos2unix.bat \
&& echo '@"%~dp0/busybox" du %*' >$PREFIX/bin/du.bat \
&& echo '@"%~dp0/busybox" echo %*' >$PREFIX/bin/echo.bat \
&& echo '@"%~dp0/busybox" ed %*' >$PREFIX/bin/ed.bat \
&& echo '@"%~dp0/busybox" egrep %*' >$PREFIX/bin/egrep.bat \
&& echo '@"%~dp0/busybox" env %*' >$PREFIX/bin/env.bat \
&& echo '@"%~dp0/busybox" expand %*' >$PREFIX/bin/expand.bat \
&& echo '@"%~dp0/busybox" expr %*' >$PREFIX/bin/expr.bat \
&& echo '@"%~dp0/busybox" factor %*' >$PREFIX/bin/factor.bat \
&& echo '@"%~dp0/busybox" false %*' >$PREFIX/bin/false.bat \
&& echo '@"%~dp0/busybox" fgrep %*' >$PREFIX/bin/fgrep.bat \
&& echo '@"%~dp0/busybox" find %*' >$PREFIX/bin/find.bat \
&& echo '@"%~dp0/busybox" fold %*' >$PREFIX/bin/fold.bat \
&& echo '@"%~dp0/busybox" fsync %*' >$PREFIX/bin/fsync.bat \
&& echo '@"%~dp0/busybox" ftpget %*' >$PREFIX/bin/ftpget.bat \
&& echo '@"%~dp0/busybox" ftpput %*' >$PREFIX/bin/ftpput.bat \
&& echo '@"%~dp0/busybox" getopt %*' >$PREFIX/bin/getopt.bat \
&& echo '@"%~dp0/busybox" grep %*' >$PREFIX/bin/grep.bat \
&& echo '@"%~dp0/busybox" groups %*' >$PREFIX/bin/groups.bat \
&& echo '@"%~dp0/busybox" gunzip %*' >$PREFIX/bin/gunzip.bat \
&& echo '@"%~dp0/busybox" gzip %*' >$PREFIX/bin/gzip.bat \
&& echo '@"%~dp0/busybox" hd %*' >$PREFIX/bin/hd.bat \
&& echo '@"%~dp0/busybox" head %*' >$PREFIX/bin/head.bat \
&& echo '@"%~dp0/busybox" hexdump %*' >$PREFIX/bin/hexdump.bat \
&& echo '@"%~dp0/busybox" httpd %*' >$PREFIX/bin/httpd.bat \
&& echo '@"%~dp0/busybox" iconv %*' >$PREFIX/bin/iconv.bat \
&& echo '@"%~dp0/busybox" id %*' >$PREFIX/bin/id.bat \
&& echo '@"%~dp0/busybox" inotifyd %*' >$PREFIX/bin/inotifyd.bat \
&& echo '@"%~dp0/busybox" install %*' >$PREFIX/bin/install.bat \
&& echo '@"%~dp0/busybox" ipcalc %*' >$PREFIX/bin/ipcalc.bat \
&& echo '@"%~dp0/busybox" kill %*' >$PREFIX/bin/kill.bat \
&& echo '@"%~dp0/busybox" killall %*' >$PREFIX/bin/killall.bat \
&& echo '@"%~dp0/busybox" less %*' >$PREFIX/bin/less.bat \
&& echo '@"%~dp0/busybox" link %*' >$PREFIX/bin/link.bat \
&& echo '@"%~dp0/busybox" ln %*' >$PREFIX/bin/ln.bat \
&& echo '@"%~dp0/busybox" logname %*' >$PREFIX/bin/logname.bat \
&& echo '@"%~dp0/busybox" ls %*' >$PREFIX/bin/ls.bat \
&& echo '@"%~dp0/busybox" lsattr %*' >$PREFIX/bin/lsattr.bat \
&& echo '@"%~dp0/busybox" lzcat %*' >$PREFIX/bin/lzcat.bat \
&& echo '@"%~dp0/busybox" lzma %*' >$PREFIX/bin/lzma.bat \
&& echo '@"%~dp0/busybox" lzop %*' >$PREFIX/bin/lzop.bat \
&& echo '@"%~dp0/busybox" lzopcat %*' >$PREFIX/bin/lzopcat.bat \
&& echo '@"%~dp0/busybox" man %*' >$PREFIX/bin/man.bat \
&& echo '@"%~dp0/busybox" md5sum %*' >$PREFIX/bin/md5sum.bat \
&& echo '@"%~dp0/busybox" mkdir %*' >$PREFIX/bin/mkdir.bat \
&& echo '@"%~dp0/busybox" mktemp %*' >$PREFIX/bin/mktemp.bat \
&& echo '@"%~dp0/busybox" mv %*' >$PREFIX/bin/mv.bat \
&& echo '@"%~dp0/busybox" nc %*' >$PREFIX/bin/nc.bat \
&& echo '@"%~dp0/busybox" nl %*' >$PREFIX/bin/nl.bat \
&& echo '@"%~dp0/busybox" od %*' >$PREFIX/bin/od.bat \
&& echo '@"%~dp0/busybox" paste %*' >$PREFIX/bin/paste.bat \
&& echo '@"%~dp0/busybox" patch %*' >$PREFIX/bin/patch.bat \
&& echo '@"%~dp0/busybox" pgrep %*' >$PREFIX/bin/pgrep.bat \
&& echo '@"%~dp0/busybox" pidof %*' >$PREFIX/bin/pidof.bat \
&& echo '@"%~dp0/busybox" pipe_progress %*' >$PREFIX/bin/pipe_progress.bat \
&& echo '@"%~dp0/busybox" pkill %*' >$PREFIX/bin/pkill.bat \
&& echo '@"%~dp0/busybox" printenv %*' >$PREFIX/bin/printenv.bat \
&& echo '@"%~dp0/busybox" printf %*' >$PREFIX/bin/printf.bat \
&& echo '@"%~dp0/busybox" ps %*' >$PREFIX/bin/ps.bat \
&& echo '@"%~dp0/busybox" pwd %*' >$PREFIX/bin/pwd.bat \
&& echo '@"%~dp0/busybox" readlink %*' >$PREFIX/bin/readlink.bat \
&& echo '@"%~dp0/busybox" realpath %*' >$PREFIX/bin/realpath.bat \
&& echo '@"%~dp0/busybox" reset %*' >$PREFIX/bin/reset.bat \
&& echo '@"%~dp0/busybox" rev %*' >$PREFIX/bin/rev.bat \
&& echo '@"%~dp0/busybox" rm %*' >$PREFIX/bin/rm.bat \
&& echo '@"%~dp0/busybox" rmdir %*' >$PREFIX/bin/rmdir.bat \
&& echo '@"%~dp0/busybox" rpm2cpio %*' >$PREFIX/bin/rpm2cpio.bat \
&& echo '@"%~dp0/busybox" sed %*' >$PREFIX/bin/sed.bat \
&& echo '@"%~dp0/busybox" seq %*' >$PREFIX/bin/seq.bat \
&& echo '@"%~dp0/busybox" sh %*' >$PREFIX/bin/sh.bat \
&& echo '@"%~dp0/busybox" sha1sum %*' >$PREFIX/bin/sha1sum.bat \
&& echo '@"%~dp0/busybox" sha256sum %*' >$PREFIX/bin/sha256sum.bat \
&& echo '@"%~dp0/busybox" sha3sum %*' >$PREFIX/bin/sha3sum.bat \
&& echo '@"%~dp0/busybox" sha512sum %*' >$PREFIX/bin/sha512sum.bat \
&& echo '@"%~dp0/busybox" shred %*' >$PREFIX/bin/shred.bat \
&& echo '@"%~dp0/busybox" shuf %*' >$PREFIX/bin/shuf.bat \
&& echo '@"%~dp0/busybox" sleep %*' >$PREFIX/bin/sleep.bat \
&& echo '@"%~dp0/busybox" sort %*' >$PREFIX/bin/sort.bat \
&& echo '@"%~dp0/busybox" split %*' >$PREFIX/bin/split.bat \
&& echo '@"%~dp0/busybox" ssl_client %*' >$PREFIX/bin/ssl_client.bat \
&& echo '@"%~dp0/busybox" stat %*' >$PREFIX/bin/stat.bat \
&& echo '@"%~dp0/busybox" su %*' >$PREFIX/bin/su.bat \
&& echo '@"%~dp0/busybox" sum %*' >$PREFIX/bin/sum.bat \
&& echo '@"%~dp0/busybox" tac %*' >$PREFIX/bin/tac.bat \
&& echo '@"%~dp0/busybox" tail %*' >$PREFIX/bin/tail.bat \
&& echo '@"%~dp0/busybox" tar %*' >$PREFIX/bin/tar.bat \
&& echo '@"%~dp0/busybox" tee %*' >$PREFIX/bin/tee.bat \
&& echo '@"%~dp0/busybox" test %*' >$PREFIX/bin/test.bat \
&& echo '@"%~dp0/busybox" time %*' >$PREFIX/bin/time.bat \
&& echo '@"%~dp0/busybox" timeout %*' >$PREFIX/bin/timeout.bat \
&& echo '@"%~dp0/busybox" touch %*' >$PREFIX/bin/touch.bat \
&& echo '@"%~dp0/busybox" tr %*' >$PREFIX/bin/tr.bat \
&& echo '@"%~dp0/busybox" true %*' >$PREFIX/bin/true.bat \
&& echo '@"%~dp0/busybox" truncate %*' >$PREFIX/bin/truncate.bat \
&& echo '@"%~dp0/busybox" ts %*' >$PREFIX/bin/ts.bat \
&& echo '@"%~dp0/busybox" ttysize %*' >$PREFIX/bin/ttysize.bat \
&& echo '@"%~dp0/busybox" uname %*' >$PREFIX/bin/uname.bat \
&& echo '@"%~dp0/busybox" uncompress %*' >$PREFIX/bin/uncompress.bat \
&& echo '@"%~dp0/busybox" unexpand %*' >$PREFIX/bin/unexpand.bat \
&& echo '@"%~dp0/busybox" uniq %*' >$PREFIX/bin/uniq.bat \
&& echo '@"%~dp0/busybox" unix2dos %*' >$PREFIX/bin/unix2dos.bat \
&& echo '@"%~dp0/busybox" unlink %*' >$PREFIX/bin/unlink.bat \
&& echo '@"%~dp0/busybox" unlzma %*' >$PREFIX/bin/unlzma.bat \
&& echo '@"%~dp0/busybox" unlzop %*' >$PREFIX/bin/unlzop.bat \
&& echo '@"%~dp0/busybox" unxz %*' >$PREFIX/bin/unxz.bat \
&& echo '@"%~dp0/busybox" unzip %*' >$PREFIX/bin/unzip.bat \
&& echo '@"%~dp0/busybox" usleep %*' >$PREFIX/bin/usleep.bat \
&& echo '@"%~dp0/busybox" uudecode %*' >$PREFIX/bin/uudecode.bat \
&& echo '@"%~dp0/busybox" uuencode %*' >$PREFIX/bin/uuencode.bat \
&& echo '@"%~dp0/busybox" watch %*' >$PREFIX/bin/watch.bat \
&& echo '@"%~dp0/busybox" wc %*' >$PREFIX/bin/wc.bat \
&& echo '@"%~dp0/busybox" wget %*' >$PREFIX/bin/wget.bat \
&& echo '@"%~dp0/busybox" which %*' >$PREFIX/bin/which.bat \
&& echo '@"%~dp0/busybox" whoami %*' >$PREFIX/bin/whoami.bat \
&& echo '@"%~dp0/busybox" whois %*' >$PREFIX/bin/whois.bat \
&& echo '@"%~dp0/busybox" xargs %*' >$PREFIX/bin/xargs.bat \
&& echo '@"%~dp0/busybox" xz %*' >$PREFIX/bin/xz.bat \
&& echo '@"%~dp0/busybox" xzcat %*' >$PREFIX/bin/xzcat.bat \
&& echo '@"%~dp0/busybox" yes %*' >$PREFIX/bin/yes.bat \
&& echo '@"%~dp0/busybox" zcat %*' >$PREFIX/bin/zcat.bat
# TODO: Either somehow use $VIM_VERSION or normalize the workdir
WORKDIR /vim82/src
RUN make -j$(nproc) -f Make_ming.mak \
ARCH=x86-64 OPTIMIZE=SIZE STATIC_STDCPLUS=yes HAS_GCC_EH=no \
UNDER_CYGWIN=yes CROSS=yes CROSS_COMPILE=x86_64-w64-mingw32- \
FEATURES=HUGE OLE=no IME=no NETBEANS=no
RUN make -j$(nproc) -f Make_ming.mak \
ARCH=x86-64 OPTIMIZE=SIZE STATIC_STDCPLUS=yes HAS_GCC_EH=no \
UNDER_CYGWIN=yes CROSS=yes CROSS_COMPILE=x86_64-w64-mingw32- \
FEATURES=HUGE OLE=no IME=no NETBEANS=no \
GUI=no vim.exe
RUN rm -rf ../runtime/tutor/tutor.*
RUN cp -r ../runtime $PREFIX/share/vim
RUN cp gvim.exe vim.exe $PREFIX/share/vim/
RUN cp vimrun.exe xxd/xxd.exe $PREFIX/bin
RUN printf '@set SHELL=\r\n@"%%~dp0/../share/vim/gvim.exe" %%*\r\n' \
>$PREFIX/bin/gvim.bat
RUN printf '@set SHELL=\r\n@"%%~dp0/../share/vim/vim.exe" %%*\r\n' \
>$PREFIX/bin/vim.bat
RUN printf '@set SHELL=\r\n@"%%~dp0/../share/vim/vim.exe" %%*\r\n' \
>$PREFIX/bin/vi.bat
RUN printf '@vim -N -u NONE "+read %s" "+write" "%s"\r\n' \
'$VIMRUNTIME/tutor/tutor' '%TMP%/tutor%RANDOM%' \
>$PREFIX/bin/vimtutor.bat
# NOTE: nasm's configure script is broken, so no out-of-source build
WORKDIR /nasm-$NASM_VERSION
RUN ./configure \
--host=x86_64-w64-mingw32 \
CFLAGS="-Os" \
LDFLAGS="-s"
RUN make -j$(nproc)
RUN cp nasm.exe ndisasm.exe $PREFIX/bin
WORKDIR /ctags-master
RUN make -j$(nproc) -f mk_mingw.mak CC=gcc packcc.exe
RUN make -j$(nproc) -f mk_mingw.mak \
CC=x86_64-w64-mingw32-gcc WINDRES=x86_64-w64-mingw32-windres \
OPT= CFLAGS=-Os LDFLAGS=-s
RUN cp ctags.exe $PREFIX/bin/
# Pack up a release
WORKDIR /
RUN rm -rf $PREFIX/share/man/ $PREFIX/share/info/ $PREFIX/share/gcc-*
COPY README.md Dockerfile SHA256SUMS $PREFIX/
RUN cp /mingw-w64-v$MINGW_VERSION/COPYING.MinGW-w64-runtime/COPYING.MinGW-w64-runtime.txt \
$PREFIX/
RUN printf "\n===========\nwinpthreads\n===========\n\n" \
>>$PREFIX/COPYING.MinGW-w64-runtime.txt .
RUN cat /mingw-w64-v$MINGW_VERSION/mingw-w64-libraries/winpthreads/COPYING \
>>$PREFIX/COPYING.MinGW-w64-runtime.txt
RUN printf '@set PATH=%%~dp0\\bin;%%PATH%%\r\n@busybox sh -l\r\n' \
>$PREFIX/activate.bat
RUN echo $VERSION >$PREFIX/VERSION.txt
ENV PREFIX=${PREFIX}
CMD zip -qXr - $PREFIX