For reasons that are a bit beyond me, `--host` and `PLATFORM_TRIPLET`
seem to be independent, in particular we've had an empty
`PLATFORM_TRIPLET`. This is unfortunate because `PLATFORM_TRIPLET`
is used to generate the SOABI config variable which in turn is used
to decide whether a .so file is a good match for loading. We'd like
for linux Pythons not to try to import emscripten .so files (it
raises `ImportError: some_file.so: invalid ELF header`). Similarly,
we'd like to avoid attempting to load linux .so files in wasm. These
platform tags are our friends.

Anyways, this PR sets `PLATFORM_TRIPLET` and ensures that .so files
built by pywasmcross are tagged with our SOABI tag.

I moved the .so file renaming from pywasmcross to buildpkg just
before running the post script. That is a better place to put it in
case the package wants to look at the .so file after linking it. It
might be surprised that we moved it.

I also improved the error message if we try to `loadWebAssemblyModule`
something that is actually say a Linux .so file and updated get_dynlibs
to filter out .so files that have an incompatible abi tag.
Set PLATFORM_TRIPLET, include platform in so names, only load compatible so files. For reasons that are a bit beyond me, `--host` and `PLATFORM_TRIPLET`
seem to be independent, in particular we've had an empty
`PLATFORM_TRIPLET`. This is unfortunate because `PLATFORM_TRIPLET`
is used to generate the SOABI config variable which in turn is used
to decide whether a .so file is a good match for loading. We'd like
for linux Pythons not to try to import emscripten .so files (it
raises `ImportError: some_file.so: invalid ELF header`). Similarly,
we'd like to avoid attempting to load linux .so files in wasm. These
platform tags are our friends.

Anyways, this PR sets `PLATFORM_TRIPLET` and ensures that .so files
built by pywasmcross are tagged with our SOABI tag.

I moved the .so file renaming from pywasmcross to buildpkg just
before running the post script. That is a better place to put it in
case the package wants to look at the .so file after linking it. It
might be surprised that we moved it.

I also improved the error message if we try to `loadWebAssemblyModule`
something that is actually say a Linux .so file and updated get_dynlibs
to filter out .so files that have an incompatible abi tag.
# http://stackoverflow.com/questions/26823312/numba-or-cython-acceleration-in-reaction-diffusion-algorithm
# setup: pass
# run: grayscott(40, 0.16, 0.08, 0.04, 0.06)

# pythran export grayscott(int, float, float, float, float)
import numpy as np


def grayscott(counts, Du, Dv, F, k):
    n = 100
    U = np.zeros((n + 2, n + 2), dtype=np.float32)
    V = np.zeros((n + 2, n + 2), dtype=np.float32)
    u, v = U[1:-1, 1:-1], V[1:-1, 1:-1]

    r = 20
    u[:] = 1.0
    U[n // 2 - r : n // 2 + r, n // 2 - r : n // 2 + r] = 0.50
    V[n // 2 - r : n // 2 + r, n // 2 - r : n // 2 + r] = 0.25
    u += 0.15 * np.random.random((n, n))
    v += 0.15 * np.random.random((n, n))

    for _ in range(counts):
        Lu = (
            U[0:-2, 1:-1]
            + U[1:-1, 0:-2]
            - 4 * U[1:-1, 1:-1]
            + U[1:-1, 2:]
            + U[2:, 1:-1]
        )
        Lv = (
            V[0:-2, 1:-1]
            + V[1:-1, 0:-2]
            - 4 * V[1:-1, 1:-1]
            + V[1:-1, 2:]
            + V[2:, 1:-1]
        )
        uvv = u * v * v
        u += Du * Lu - uvv + F * (1 - u)
        v += Dv * Lv + uvv - (F + k) * v

    return V

# http://stackoverflow.com/questions/26823312/numba-or-cython-acceleration-in-reaction-diffusion-algorithm
# setup: pass
# run: grayscott(40, 0.16, 0.08, 0.04, 0.06)

# pythran export grayscott(int, float, float, float, float)
import numpy as np


def grayscott(counts, Du, Dv, F, k):
    n = 100
    U = np.zeros((n + 2, n + 2), dtype=np.float32)
    V = np.zeros((n + 2, n + 2), dtype=np.float32)
    u, v = U[1:-1, 1:-1], V[1:-1, 1:-1]

    r = 20
    u[:] = 1.0
    U[n // 2 - r : n // 2 + r, n // 2 - r : n // 2 + r] = 0.50
    V[n // 2 - r : n // 2 + r, n // 2 - r : n // 2 + r] = 0.25
    u += 0.15 * np.random.random((n, n))
    v += 0.15 * np.random.random((n, n))

    for _ in range(counts):
        Lu = (
            U[0:-2, 1:-1]
            + U[1:-1, 0:-2]
            - 4 * U[1:-1, 1:-1]
            + U[1:-1, 2:]
            + U[2:, 1:-1]
        )
        Lv = (
            V[0:-2, 1:-1]
            + V[1:-1, 0:-2]
            - 4 * V[1:-1, 1:-1]
            + V[1:-1, 2:]
            + V[2:, 1:-1]
        )
        uvv = u * v * v
        u += Du * Lu - uvv + F * (1 - u)
        v += Dv * Lv + uvv - (F + k) * v

    return V
