Simplify docker image in several ways (#523)

- `--embeddded` mode is the now the default
- embedded cache and ports is also the default
- emsdk now fully polulates the cache by default so no need to do that.
- always "activate" the SDK avoiding that need things to work without
  that.
- avoid making extra symlinks.
- remove python2
diff --git a/docker/Dockerfile b/docker/Dockerfile
index a1a5363..57eb6c4 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -3,17 +3,11 @@
 # ------------------------------------------------------------------------------
 
 # Supports only 1.38.40+, accepts also '-upstream' variants
-ARG EMSCRIPTEN_VERSION=1.39.11
-ARG EMSDK_CHANGESET=master
+ARG EMSCRIPTEN_VERSION=1.39.18
 
 # ------------------------------------------------------------------------------
 
-# NOTE: Any change of following variables should be reflected in ./entrypoint file
 ENV EMSDK /emsdk
-ENV EM_DATA ${EMSDK}/.data
-ENV EM_CONFIG ${EMSDK}/.emscripten
-ENV EM_CACHE ${EM_DATA}/cache
-ENV EM_PORTS ${EM_DATA}/ports
 
 # ------------------------------------------------------------------------------
 
@@ -28,70 +22,27 @@
             ca-certificates \
             build-essential \
             file \
-            python python-pip \
             python3 python3-pip \
-    \
 &&  echo "## Done"
 
 RUN  echo "## Get EMSDK" \
     &&  git clone https://github.com/emscripten-core/emsdk.git ${EMSDK} \
-    &&  cd ${EMSDK} && git reset --hard ${EMSDK_CHANGESET} \
-    \
-    &&  ./emsdk.py update-tags \
 &&  echo "## Done"
 
 RUN  echo "## Install Emscripten" \
     &&  cd ${EMSDK} \
-    && ./emsdk install ${EMSCRIPTEN_VERSION} \
-    \
+    &&  ./emsdk install ${EMSCRIPTEN_VERSION} \
 &&  echo "## Done"
 
 # This generates configuration that contains all valid paths according to installed SDK
 RUN cd ${EMSDK} \
     &&  echo "## Generate standard configuration" \
-    \
-    &&  ./emsdk activate ${EMSCRIPTEN_VERSION} --embedded \
-    &&  ./emsdk construct_env > /dev/null \
+    &&  ./emsdk activate ${EMSCRIPTEN_VERSION} \
+    &&  ./emsdk construct_env \
     &&  cat ${EMSDK}/emsdk_set_env.sh \
-    \
-    # remove wrongly created entry with EM_CACHE, variable will be picked up from ENV
-    &&  sed -i -e "/EM_CACHE/d" ${EMSDK}/emsdk_set_env.sh \
-    # add a link to tools like asm2wasm in a system path
-    # asm2wasm (and friends might be places either in ./upstream of ./fastcomp folder, hence detection is needed)
-    &&  printf "export PATH=$(dirname $(find . -name asm2wasm -exec readlink -f {} +)):\$PATH\n" >> ${EMSDK}/emsdk_set_env.sh \
-    \
+    &&  chmod -R 777 ${EMSDK}/upstream/emscripten/cache \
 &&  echo "## Done"
 
-# Create a structure and make mutable folders accessible for r/w
-RUN cd ${EMSDK} \
-    &&  echo "## Create .data structure" \
-    &&  for mutable_dir in ${EM_DATA} ${EM_PORTS} ${EM_CACHE} ${EMSDK}/zips ${EMSDK}/tmp; do \
-            mkdir -p ${mutable_dir}; \
-            chmod -R 777 ${mutable_dir}; \
-        done \
-        \
-&&  echo "## Done"
-
-# Create an entrypoint that activates Emscripten SDK and helps running this image as non-root user
-COPY entrypoint ${EMSDK}/
-
-
-# Create symbolic links for critical Emscripten Tools
-# This is important for letting people using Emscripten in Dockerfiles without activation
-# As each Emscripten release is placed to a different folder (i.e. /emsdk/emscripten/tag-1.38.31)
-RUN echo "## Create symbolic links" \
-    &&  . ${EMSDK}/emsdk_set_env.sh \
-    \
-    &&  mkdir -p ${EMSDK}/llvm ${EMSDK}/emscripten ${EMSDK}/binaryen \
-    \
-    &&  ln -s $(dirname $(which node))/..       ${EMSDK}/node/current \
-    &&  ln -s $(dirname $(which clang))/..      ${EMSDK}/llvm/clang \
-    &&  ln -s $(dirname $(which emcc))          ${EMSDK}/emscripten/sdk \
-    \
-    &&  ln -s $(dirname $(which asm2wasm))      ${EMSDK}/binaryen/bin \
-    \
-    &&  echo "## Done"
-
 # Clean up emscripten installation and strip some symbols
 RUN echo "## Aggresive optimization: Remove debug symbols" \
 &&  apt-get -qq -y update && apt-get -qq install -y --no-install-recommends \
@@ -100,36 +51,21 @@
     # Remove debugging symbols from embedded node (extra 7MB)
     && strip -s `which node` \
     # Tests consume ~80MB disc space
-    && rm -fr ${EMSDK}/llvm/clang/emscripten/tests \
+    && rm -fr ${EMSDK}/upstream/emscripten/tests \
     # strip out symbols from clang (~extra 50MB disc space)
-    && find ${EMSDK}/llvm/clang/bin -type f -exec strip -s {} + || true \
-    && find ${EMSDK}/llvm/clang/fastcomp/bin -type f -exec strip -s {} + || true \
+    && find ${EMSDK}/upstream/bin -type f -exec strip -s {} + || true \
+    && find ${EMSDK}/upstream/fastcomp/bin -type f -exec strip -s {} + || true \
 &&  echo "## Done"
 
-# Populate Emscripten SDK cache with libc++, to improve further compilation times.
-RUN echo "## Pre-populate cache" \
-    &&  . ${EMSDK}/emsdk_set_env.sh \
-    \
-    &&  embuilder.py build SYSTEM \
-    \
-    &&  mkdir -p /tmp/emscripten_test \
-    &&  cd /tmp/emscripten_test \
-    \
-        &&  printf '#include <iostream>\nint main(){std::cout << "HELLO FROM DOCKER C++"<<std::endl;return 0;}' > test.cpp \
-        &&  em++ --std=c++11 test.cpp -o test.js -s WASM=0 &&  node test.js \
-        &&  em++ --std=c++11 -g3 test.cpp -o test.js -s WASM=0 &&  node test.js \
-        &&  em++ --std=c++11 test.cpp -o test.js -s WASM=1 &&  node test.js \
-    \
-    &&  cd / \
-    &&  rm -fr /tmp/emscripten_test \
-    \
-    # some files were created, and we need to make sure that those can be accessed by non-root people
-    &&  chmod -R 777 ${EM_DATA} \
-    \
-    # cleanup
-    &&  find ${EMSDK} -name "*.pyc" -exec rm {} \; \
-    \
-    &&  echo "## Done"
+# Generate sanity
+# TODO(sbc): We should be able to use just emcc -v here but it doesn't
+# currently create the sanity file.
+RUN echo "## Generate sanity" \
+   &&  . ${EMSDK}/emsdk_set_env.sh \
+   &&  echo "int main() { return 0; }" > hello.c \
+   &&  emcc -c hello.c \
+   &&  cat ${EMSDK}/.emscripten_sanity \
+&&  echo "## Done"
 
 # ------------------------------------------------------------------------------
 # -------------------------------- STAGE DEPLOY --------------------------------
@@ -140,33 +76,26 @@
 COPY --from=stage_build /emsdk /emsdk
 
 # Fallback in case Emscripten isn't activated.
-# This will let use tools offered by this image inside other Docker images (sub-stages) or with custom / no entrypoint
-ENV EMSDK /emsdk
-ENV EMSCRIPTEN=${EMSDK}/emscripten/sdk
-
-ENV EM_DATA ${EMSDK}/.data
-ENV EM_CONFIG ${EMSDK}/.emscripten
-ENV EM_CACHE ${EM_DATA}/cache
-ENV EM_PORTS ${EM_DATA}/ports
-
-# Fallback in case Emscripten isn't activated
-# Expose Major tools to system PATH, so that emcc, node, asm2wasm etc can be used without activation
-ENV PATH="${EMSDK}:${EMSDK}/emscripten/sdk:${EMSDK}/llvm/clang/bin:${EMSDK}/node/current/bin:${EMSDK}/binaryen/bin:${PATH}"
-
-# Use entrypoint that's coming from emscripten-slim image. It sets all required system paths and variables
-ENTRYPOINT ["/emsdk/entrypoint"]
-
+# This will let use tools offered by this image inside other Docker images
+# (sub-stages) or with custom / no entrypoint
+ENV EMSDK_NODE=/emsdk/node/12.9.1_64bit/bin/node
+ENV EMSDK=/emsdk
+ENV EM_CONFIG=/emsdk/.emscripten
+ENV PATH="${EMSDK}:${EMSDK}/upstream/emscripten:${EMSDK}/upstream/bin:emsdk/node/12.9.1_64bit/bin:${PATH}"
 
 # ------------------------------------------------------------------------------
 # Create a 'standard` 1000:1000 user
-# Thanks to that this image can be executed as non-root user and created files will not require root access level on host machine
-# Please note that this solution even if widely spread (i.e. Node.js uses it) is far from perfect as user 1000:1000 might not exist on
-# host machine, and in this case running any docker image will cause other random problems (mostly due `$HOME` pointing to `/`)
-# This extra user works nicely with entrypoint provided in `/emsdk/entrypoint` as it detects case explained before.
+# Thanks to that this image can be executed as non-root user and created files
+# will not require root access level on host machine Please note that this
+# solution even if widely spread (i.e. Node.js uses it) is far from perfect as
+# user 1000:1000 might not exist on host machine, and in this case running any
+# docker image will cause other random problems (mostly due `$HOME` pointing to
+# `/`)
 RUN echo "## Create emscripten user (1000:1000)" \
     &&  groupadd --gid 1000 emscripten \
     &&  useradd --uid 1000 --gid emscripten --shell /bin/bash --create-home emscripten \
-    \
+    &&  echo "umask 0000" >> /etc/bash.bashrc \
+    &&  echo ". /emsdk/emsdk_set_env.sh" >> /etc/bash.bashrc \
 &&  echo "## Done"
 
 # ------------------------------------------------------------------------------
@@ -178,9 +107,7 @@
     &&  apt-get -qq -y update && apt-get -qq install -y --no-install-recommends \
         libxml2 \
         ca-certificates \
-        python \
         python3 \
-        python-pip \
         python3-pip \
         wget \
         curl \
@@ -208,17 +135,10 @@
 
 # ------------------------------------------------------------------------------
 # Internal test suite of tools that this image provides
-COPY test_dockerimage.sh ${EMSDK}/
+COPY test_dockerimage.sh /emsdk/
 
-RUN echo "## Internal Testing of image (activated)" \
-    &&  . ${EMSDK}/emsdk_set_env.sh \
-    &&  ${EMSDK}/test_dockerimage.sh  \
-    \
-&&  echo "## Done"
-
-RUN echo "## Internal Testing of image (not-activated)" \
-    &&  ${EMSDK}/test_dockerimage.sh  \
-    \
+RUN echo "## Internal Testing of image" \
+    &&  /emsdk/test_dockerimage.sh  \
 &&  echo "## Done"
 
 # ------------------------------------------------------------------------------
diff --git a/docker/entrypoint b/docker/entrypoint
deleted file mode 100755
index 8e7c702..0000000
--- a/docker/entrypoint
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/sh
-
-# In case when mapped user id by `docker run -u` is not created inside docker image
-# The `$HOME` variable points to `/` - which prevents any tool to write to, as it requires root access
-# In such case we set `$HOME` to `/tmp` as it should r/w for everyone
-
-if [ "$HOME" = "/" ] ; then
-    export HOME=/tmp
-fi
-
-# In case of running as root, use `umask` to reduce problem of file permission on host
-if [ "$(id -g)" = "0" ] && [ "$(id -u)" = "0" ] ;
-then
-    umask 0000
-fi
-
-# Export this image specific Environment variables
-# Those variables are important to use dedicated folder for all cache and predefined config file
-export EM_CONFIG=/emsdk/.emscripten
-export EM_CACHE=/emsdk/.data/cache
-export EM_PORTS=/emsdk/.data/ports
-
-# Activate Emscripten SDK
-. ${EMSDK}/emsdk_set_env.sh
-
-# Evaluate a command that's coming after `docker run` / `docker exec`
-"$@"
diff --git a/docker/test_dockerimage.sh b/docker/test_dockerimage.sh
index 7f5cfbe..901ee92 100755
--- a/docker/test_dockerimage.sh
+++ b/docker/test_dockerimage.sh
@@ -8,8 +8,6 @@
 npm --version
 python3 --version
 pip3 --version
-python --version
-pip --version
 em++ --version
 emcc --version
 java -version