# Copyright (C) 2021-2024 Free Software Foundation, Inc. # # This file is part of GNU Emacs. # # GNU Emacs is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNU Emacs is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Emacs. If not, see . # GNU Emacs support for the GitLab-specific build of Docker images. # The presence of this file does not imply any FSF/GNU endorsement of # Docker or any other particular tool. Also, it is intended for # evaluation purposes, thus possibly temporary. # Maintainer: Ted Zlatanov # URL: https://emba.gnu.org/emacs/emacs FROM debian:bullseye as emacs-base RUN apt-get update && \ apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ libc-dev gcc g++ make autoconf automake libncurses-dev gnutls-dev \ libdbus-1-dev libacl1-dev acl git texinfo gdb \ && rm -rf /var/lib/apt/lists/* FROM emacs-base as emacs-inotify # We install clangd for Eglot tests. RUN apt-get update && \ apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ inotify-tools clangd \ && rm -rf /var/lib/apt/lists/* COPY . /checkout WORKDIR /checkout RUN ./autogen.sh autoconf RUN ./configure # 'make -j4 bootstrap' does not work reliably. RUN make bootstrap FROM emacs-base as emacs-filenotify-gio RUN apt-get update && \ apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ libglib2.0-dev libglib2.0-bin libglib2.0-0 \ && rm -rf /var/lib/apt/lists/* COPY . /checkout WORKDIR /checkout RUN ./autogen.sh autoconf RUN ./configure --with-file-notification=gfile RUN make bootstrap # Debian bullseye doesn't provide proper packages. So we use Debian # sid for this. FROM debian:sid as emacs-eglot # This corresponds to emacs-base. RUN apt-get update && \ apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ libc-dev gcc g++ make autoconf automake libncurses-dev gnutls-dev \ libdbus-1-dev libacl1-dev acl git texinfo gdb \ && rm -rf /var/lib/apt/lists/* # Install clangd. RUN apt-get update && \ apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ clangd \ && rm -rf /var/lib/apt/lists/* COPY . /checkout WORKDIR /checkout RUN ./autogen.sh autoconf RUN ./configure RUN make bootstrap # Debian bullseye doesn't provide proper packages. So we use Debian # sid for this. FROM debian:sid as emacs-tree-sitter # This corresponds to emacs-base. RUN apt-get update && \ apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ libc-dev gcc g++ make autoconf automake libncurses-dev gnutls-dev \ libdbus-1-dev libacl1-dev acl git texinfo gdb \ && rm -rf /var/lib/apt/lists/* # Install tree-sitter library. RUN apt-get update && \ apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ libtree-sitter0 libtree-sitter-dev \ && rm -rf /var/lib/apt/lists/* COPY . /checkout WORKDIR /checkout RUN ./autogen.sh autoconf RUN ./configure --with-tree-sitter RUN make bootstrap # Install language grammars. RUN mkdir -p /root/.emacs.d/tree-sitter RUN git config --global http.sslverify "false" # See https://github.com/emacs-tree-sitter/tree-sitter-langs/tree/master/repos RUN src/emacs -Q --batch \ --eval '(setq \ treesit-extra-load-path (list "/root/.emacs.d/tree-sitter") \ treesit-language-source-alist \ (quote ((bash "https://github.com/tree-sitter/tree-sitter-bash") \ (c "https://github.com/tree-sitter/tree-sitter-c") \ (cpp "https://github.com/tree-sitter/tree-sitter-cpp") \ (css "https://github.com/tree-sitter/tree-sitter-css") \ (elixir "https://github.com/elixir-lang/tree-sitter-elixir") \ (go "https://github.com/tree-sitter/tree-sitter-go") \ (gomod "https://github.com/camdencheek/tree-sitter-go-mod") \ (heex "https://github.com/phoenixframework/tree-sitter-heex") \ (html "https://github.com/tree-sitter/tree-sitter-html") \ (java "https://github.com/tree-sitter/tree-sitter-java") \ (javascript "https://github.com/tree-sitter/tree-sitter-javascript") \ (json "https://github.com/tree-sitter/tree-sitter-json") \ (lua "https://github.com/MunifTanjim/tree-sitter-lua") \ (python "https://github.com/tree-sitter/tree-sitter-python") \ (ruby "https://github.com/tree-sitter/tree-sitter-ruby") \ (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src") \ (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src"))))' \ --eval '(dolist (lang (mapcar (quote car) treesit-language-source-alist)) \ (treesit-install-language-grammar lang "/root/.emacs.d/tree-sitter"))' FROM emacs-base as emacs-gnustep RUN apt-get update && \ apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ gnustep-devel zlib1g-dev \ && rm -rf /var/lib/apt/lists/* COPY . /checkout WORKDIR /checkout RUN ./autogen.sh autoconf RUN ./configure --with-ns RUN make bootstrap FROM emacs-base as emacs-native-comp # The libgccjit version must correspond to the gcc version. RUN apt-get update && \ apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ libgccjit-10-dev zlib1g-dev \ && rm -rf /var/lib/apt/lists/* FROM emacs-native-comp as emacs-native-comp-speed0 COPY . /checkout WORKDIR /checkout RUN ./autogen.sh autoconf RUN ./configure --with-native-compilation RUN make bootstrap -j2 \ NATIVE_FULL_AOT=1 BYTE_COMPILE_EXTRA_FLAGS='--eval "(setq comp-speed 0)"' FROM emacs-native-comp as emacs-native-comp-speed1 COPY . /checkout WORKDIR /checkout RUN ./autogen.sh autoconf RUN ./configure --with-native-compilation RUN make bootstrap -j2 BYTE_COMPILE_EXTRA_FLAGS='--eval "(setq comp-speed 1)"' FROM emacs-native-comp as emacs-native-comp-speed2 COPY . /checkout WORKDIR /checkout RUN ./autogen.sh autoconf RUN ./configure --with-native-compilation RUN make bootstrap -j2