Change to out-of source build, Update build instructions (#3271)

* update build instructions

Usage of "modern" CMake syntax and using specific out of source build.
Further add example on how to build in parallel, build a specific target
and how to change the compiler.

This closes #3236.
This commit is contained in:
Felix Schurk 2024-02-25 19:27:52 +02:00 committed by GitHub
parent 34c0e67469
commit 8dd29e0a8a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 75 additions and 379 deletions

14
.gitignore vendored
View file

@ -1,24 +1,12 @@
cmake.h cmake.h
commit.h commit.h
Makefile
src/task
src/taskd
src/libtask.a
src/commands/libcommands.a
src/tc/libtc.a
src/columns/libcolumns.a
*~ *~
.*.swp .*.swp
Session.vim Session.vim
package-config/osx/binary/task package-config/osx/binary/task
/build/ /build*/
CMakeFiles
CMakeCache.txt
cmake_install.cmake
install_manifest.txt install_manifest.txt
_CPack_Packages _CPack_Packages
CPackConfig.cmake
CPackSourceConfig.cmake
patches patches
*.exe *.exe
tutorials tutorials

View file

@ -175,11 +175,6 @@ add_custom_target(problems DEPENDS show-problems)
set (CPACK_SOURCE_GENERATOR "TGZ") set (CPACK_SOURCE_GENERATOR "TGZ")
set (CPACK_SOURCE_PACKAGE_FILE_NAME ${PACKAGE_NAME}-${PACKAGE_VERSION}) set (CPACK_SOURCE_PACKAGE_FILE_NAME ${PACKAGE_NAME}-${PACKAGE_VERSION})
set (CPACK_SOURCE_IGNORE_FILES "CMakeCache" "CMakeFiles" "CPackConfig" "CPackSourceConfig" set (CPACK_SOURCE_IGNORE_FILES "build" "test" "misc/*" "performance" "swp$" "src/lex$" "task-.*.tar.gz"
"_CPack_Packages" "cmake_install" "install_manifest" "Makefile$" "commit.h" "cmake.h$" "\\\\.gitmodules" "src/libshared/\\\\.git" ".github/" ".*\\\\.gitignore$" "docker-compose.yml" "\\\\.git/")
"test" "package-config" "misc/*" "src/task$" "src/calc$" "performance"
"src/libtask.a" "src/columns/libcolumns.a" "src/commands/libcommands.a"
"src/tc/libtc.a" "swp$" "src/lex$" "task-.*.tar.gz" "commit.h" "cmake.h$"
"\\\\.gitmodules" "src/libshared/\\\\.git" ".github/" ".*\\\\.gitignore$"
"src/liblibshared.a" "docker-compose.yml" "\\\\.git/")
include (CPack) include (CPack)

View file

@ -16,26 +16,46 @@ See the [TaskChampion CONTRIBUTING guide](../../../taskchampion/CONTRIBUTING.md)
* Rust 1.64.0 or higher (hint: use https://rustup.rs/ instead of using your system's package manager) * Rust 1.64.0 or higher (hint: use https://rustup.rs/ instead of using your system's package manager)
## Obtain and Build Code: ## Obtain and Build Code:
``` The following documentation works with CMake 3.14 and later.
$ git clone --recursive https://github.com/GothenburgBitFactory/taskwarrior taskwarrior.git Here are the minimal steps to get started, using an out of source build directory and calling the underlying build tool over the CMake interface.
$ cd taskwarrior.git See the general CMake man pages or the [cmake-documentation](https://cmake.org/cmake/help/latest/manual/cmake.1.html) for more,
$ git checkout develop # Latest dev branch
$ git submodule init # This is now done by cmake as a test
$ git submodule update # Update the libhsared.git submodule
$ cmake -DCMAKE_BUILD_TYPE=debug . # debug or release. Default: neither
$ make VERBOSE=1 -j4 # Shows details, builds using 4 jobs
# Alternately 'export MAKEFLAGS=-j 4'
```
This will build several executables, but the one you want is probably `src/task`. ## Basic Building
```sh
git clone https://github.com/GothenburgBitFactory/taskwarrior
cd taskwarrior
cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build
```
Other possible build types can be `Release` and `Debug`.
This will build several executables, but the one you want is probably `src/task`, located in the `build` directory.
When you make changes, just run the last line again. When you make changes, just run the last line again.
## Run the Test Suite: ### Building a specific target
For **only** building the `task` executable, use
```sh
cmake --build build --target task_executable
```
### Building in parallel
If a parallel build is wanted use
```sh
cmake --build build -j <number-of-jobs>
```
### Building with clang as compiler
```sh
cmake -S . -B build-clang\
-DCMAKE_C_COMPILER=clang\
-DCMAKE_CXX_COMPILER=clang++
cmake --build build-clang
```
## Run the Test Suite:
First switch to the test directory: First switch to the test directory:
``` ```
$ cd test $ cd build/test
``` ```
Then you can run all tests, showing details, with Then you can run all tests, showing details, with
``` ```

View file

@ -30,13 +30,13 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
RUN git clean -dfx && \ RUN git clean -dfx && \
git submodule init && \ git submodule init && \
git submodule update && \ git submodule update && \
cmake -DCMAKE_BUILD_TYPE=release . && \ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release . && \
make -j8 cmake --build build -j 8
FROM base AS runner FROM base AS runner
# Install Taskwarrior # Install Taskwarrior
COPY --from=builder /root/code/src/task /usr/local/bin COPY --from=builder /root/code/build/src/task /usr/local/bin
# Initialize Taskwarrior # Initialize Taskwarrior
RUN ( echo "yes" | task ) || true RUN ( echo "yes" | task ) || true

View file

@ -31,18 +31,18 @@ while (my $line = <$fh>)
if ($. % 20 == 19) if ($. % 20 == 19)
{ {
my $anno_id = $id - 1; my $anno_id = $id - 1;
qx{../src/task rc:perf.rc rc.gc=off $anno_id annotate $line}; qx{../build/src/task rc:perf.rc rc.gc=off $anno_id annotate $line};
print "[$.] task rc:perf.rc rc.gc=off $anno_id annotate $line\n" if $?; print "[$.] task rc:perf.rc rc.gc=off $anno_id annotate $line\n" if $?;
} }
elsif ($. % 4 == 1) elsif ($. % 4 == 1)
{ {
qx{../src/task rc:perf.rc rc.gc=off add $line}; qx{../build/src/task rc:perf.rc rc.gc=off add $line};
print "[$.] task rc:perf.rc rc.gc=off add $line\n" if $?; print "[$.] task rc:perf.rc rc.gc=off add $line\n" if $?;
++$id; ++$id;
} }
else else
{ {
qx{../src/task rc:perf.rc rc.gc=off log $line}; qx{../build/src/task rc:perf.rc rc.gc=off log $line};
print "[$.] task rc:perf.rc rc.gc=off log $line\n" if $?; print "[$.] task rc:perf.rc rc.gc=off log $line\n" if $?;
} }
} }

View file

@ -16,7 +16,7 @@ fi
# Allow override. # Allow override.
if [[ -z $TASK ]] if [[ -z $TASK ]]
then then
TASK=../src/task TASK=../build/src/task
fi fi
# Run benchmarks. # Run benchmarks.

View file

@ -20,13 +20,13 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
RUN git clean -dfx RUN git clean -dfx
RUN git submodule init RUN git submodule init
RUN git submodule update RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug . RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug .
RUN make -j8 RUN cmake --build build -j 8
RUN make install RUN cmake --install build
RUN task --version RUN task --version
# Setup tests # Setup tests
WORKDIR /root/code/test/ WORKDIR /root/code/build/test/
RUN make -j8 RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"] CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -1,36 +0,0 @@
FROM centos:7
RUN yum update -y
RUN yum install python3 git gcc gcc-c++ make libuuid-devel -y
RUN yum install epel-release centos-release-scl -y
RUN yum install which cmake3 devtoolset-7-gcc* libfaketime curl -y
RUN source scl_source enable devtoolset-7; gcc --version; cmake3 --version
RUN ln -s /usr/bin/cmake3 /usr/bin/cmake
# Setup language environment
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
# Add source directory
ADD . /root/code/
WORKDIR /root/code/
# Setup Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
sh rustup.sh -y --profile minimal --default-toolchain stable --component rust-docs
# Setup taskwarrior
RUN git clean -dfx
RUN git submodule init
RUN git submodule update
RUN source scl_source enable devtoolset-7; cmake -DCMAKE_BUILD_TYPE=debug .
RUN source scl_source enable devtoolset-7; make -j8
RUN source scl_source enable devtoolset-7; make install
RUN task --version
# Setup tests
WORKDIR /root/code/test/
RUN source scl_source enable devtoolset-7; make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -1,39 +0,0 @@
FROM centos:8
# Fix missing repo metadata
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-*
RUN dnf update -y
RUN dnf install python3 git gcc gcc-c++ make libuuid-devel glibc-langpack-en -y
RUN dnf install epel-release -y
RUN dnf install which cmake libfaketime curl -y
RUN gcc --version; cmake --version
# Setup language environment
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
# Add source directory
ADD . /root/code/
WORKDIR /root/code/
# Setup Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
sh rustup.sh -y --profile minimal --default-toolchain stable --component rust-docs
# Setup taskwarrior
RUN git clean -dfx
RUN git submodule init
RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug .
RUN make -j8
RUN make install
RUN task --version
# Setup tests
WORKDIR /root/code/test/
RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -21,13 +21,13 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
RUN git clean -dfx RUN git clean -dfx
RUN git submodule init RUN git submodule init
RUN git submodule update RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug . RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug .
RUN make -j8 RUN cmake --build build -j 8
RUN make install RUN cmake --install build
RUN task --version RUN task --version
# Setup tests # Setup tests
WORKDIR /root/code/test/ WORKDIR /root/code/build/test
RUN make -j8 RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"] CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -21,13 +21,13 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
RUN git clean -dfx RUN git clean -dfx
RUN git submodule init RUN git submodule init
RUN git submodule update RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug . RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug .
RUN make -j8 RUN cmake --build build -j 8
RUN make install RUN cmake --install build
RUN task --version RUN task --version
# Setup tests # Setup tests
WORKDIR /root/code/test/ WORKDIR /root/code/build/test
RUN make -j8 RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"] CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -1,32 +0,0 @@
FROM fedora:32
RUN dnf update -y
RUN dnf install python3 git gcc gcc-c++ cmake make libuuid-devel libfaketime glibc-langpack-en curl -y
# Setup language environment
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
# Add source directory
ADD . /root/code/
WORKDIR /root/code/
# Setup Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
sh rustup.sh -y --profile minimal --default-toolchain stable --component rust-docs
# Setup taskwarrior
RUN git clean -dfx
RUN git submodule init
RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug .
RUN make -j8
RUN make install
RUN task --version
# Setup tests
WORKDIR /root/code/test/
RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -1,32 +0,0 @@
FROM fedora:33
RUN dnf update -y
RUN dnf install python3 git gcc gcc-c++ cmake make libuuid-devel libfaketime glibc-langpack-en curl -y
# Setup language environment
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
# Add source directory
ADD . /root/code/
WORKDIR /root/code/
# Setup Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
sh rustup.sh -y --profile minimal --default-toolchain stable --component rust-docs
# Setup taskwarrior
RUN git clean -dfx
RUN git submodule init
RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug .
RUN make -j8
RUN make install
RUN task --version
# Setup tests
WORKDIR /root/code/test/
RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -1,32 +0,0 @@
FROM fedora:34
RUN dnf update -y
RUN dnf install python3 git gcc gcc-c++ cmake make libuuid-devel libfaketime glibc-langpack-en curl -y
# Setup language environment
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
# Add source directory
ADD . /root/code/
WORKDIR /root/code/
# Setup Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
sh rustup.sh -y --profile minimal --default-toolchain stable --component rust-docs
# Setup taskwarrior
RUN git clean -dfx
RUN git submodule init
RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug .
RUN make -j8
RUN make install
RUN task --version
# Setup tests
WORKDIR /root/code/test/
RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -1,32 +0,0 @@
FROM fedora:35
RUN dnf update -y
RUN dnf install python3 git gcc gcc-c++ cmake make libuuid-devel libfaketime glibc-langpack-en curl -y
# Setup language environment
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
# Add source directory
ADD . /root/code/
WORKDIR /root/code/
# Setup Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
sh rustup.sh -y --profile minimal --default-toolchain stable --component rust-docs
# Setup taskwarrior
RUN git clean -dfx
RUN git submodule init
RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug .
RUN make -j8
RUN make install
RUN task --version
# Setup tests
WORKDIR /root/code/test/
RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -20,13 +20,13 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
RUN git clean -dfx RUN git clean -dfx
RUN git submodule init RUN git submodule init
RUN git submodule update RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug . RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug .
RUN make -j8 RUN cmake --build build -j 8
RUN make install RUN cmake --install build
RUN task --version RUN task --version
# Setup tests # Setup tests
WORKDIR /root/code/test/ WORKDIR /root/code/build/test
RUN make -j8 RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"] CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -20,13 +20,13 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
RUN git clean -dfx RUN git clean -dfx
RUN git submodule init RUN git submodule init
RUN git submodule update RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug . RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug .
RUN make -j8 RUN cmake --build build -j 8
RUN make install RUN cmake --install build
RUN task --version RUN task --version
# Setup tests # Setup tests
WORKDIR /root/code/test/ WORKDIR /root/code/build/test
RUN make -j8 RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"] CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -1,38 +0,0 @@
# name the portage image
FROM gentoo/portage:latest as portage
# image is based on stage3-x86
FROM gentoo/stage3-x86:latest
# copy the entire portage volume in
COPY --from=portage /usr/portage /usr/portage
RUN emerge -qv sys-libs/readline:0 sys-apps/util-linux dev-util/cmake sys-devel/make dev-vcs/git sys-libs/libfaketime net-misc/curl
# Setup language environment
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
# Add source directory
ADD . /root/code/
WORKDIR /root/code/
# Setup Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
sh rustup.sh -y --profile minimal --default-toolchain stable --component rust-docs
# Setup taskwarrior
RUN git clean -dfx
RUN git submodule init
RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug .
RUN make -j8
RUN make install
RUN task --version
# Setup tests
WORKDIR /root/code/test/
RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -19,13 +19,13 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
RUN git clean -dfx RUN git clean -dfx
RUN git submodule init RUN git submodule init
RUN git submodule update RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug . RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug .
RUN make -j8 RUN cmake --build build -j 8
RUN make install RUN cmake --install build
RUN task --version RUN task --version
# Setup tests # Setup tests
WORKDIR /root/code/test/ WORKDIR /root/code/build/test
RUN make -j8 RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"] CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -1,33 +0,0 @@
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y build-essential cmake git uuid-dev faketime locales python3 curl
# Setup language environment
RUN locale-gen en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
# Add source directory
ADD . /root/code/
WORKDIR /root/code/
# Setup Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
sh rustup.sh -y --profile minimal --default-toolchain stable --component rust-docs
# Setup taskwarrior
RUN git clean -dfx
RUN git submodule init
RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug .
RUN make -j2
RUN make install
RUN task --version
# Setup tests
WORKDIR /root/code/test/
RUN make
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -1,33 +0,0 @@
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get install -y build-essential cmake git uuid-dev faketime locales python3 curl
# Setup language environment
RUN locale-gen en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
# Add source directory
ADD . /root/code/
WORKDIR /root/code/
# Setup Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
sh rustup.sh -y --profile minimal --default-toolchain stable --component rust-docs
# Setup taskwarrior
RUN git clean -dfx
RUN git submodule init
RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug .
RUN make -j8
RUN make install
RUN task --version
# Setup tests
WORKDIR /root/code/test/
RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -21,13 +21,13 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
RUN git clean -dfx RUN git clean -dfx
RUN git submodule init RUN git submodule init
RUN git submodule update RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug . RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug .
RUN make -j8 RUN cmake --build build -j 8
RUN make install RUN cmake --install build
RUN task --version RUN task --version
# Setup tests # Setup tests
WORKDIR /root/code/test/ WORKDIR /root/code/build/test
RUN make -j8 RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"] CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]

View file

@ -21,13 +21,13 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
RUN git clean -dfx RUN git clean -dfx
RUN git submodule init RUN git submodule init
RUN git submodule update RUN git submodule update
RUN cmake -DCMAKE_BUILD_TYPE=debug . RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug .
RUN make -j8 RUN cmake --build build -j 8
RUN make install RUN cmake --install build
RUN task --version RUN task --version
# Setup tests # Setup tests
WORKDIR /root/code/test/ WORKDIR /root/code/build/test
RUN make -j8 RUN make -j8
CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"] CMD ["bash", "-c", "./run_all -v ; cat all.log | grep 'not ok' ; ./problems"]