Closes https://github.com/pyodide/pyodide/issues/604

This creates an installable `pyodide-build` Python package that we can also upload to PyPi under https://pypi.org/project/pyodide-build/ (currently uploaded the dev version to reserve the name).

There is also the identically named `pyodide-build` CLI command which replaces `bin/pyodide`.

The short term goals is to use fewer hacks with `PATH` and `PYTHONPATH`. Long term goal make it a user facing interface for building packages instead of the Makefile.
Create an installable pyodide-build package. Closes https://github.com/pyodide/pyodide/issues/604

This creates an installable `pyodide-build` Python package that we can also upload to PyPi under https://pypi.org/project/pyodide-build/ (currently uploaded the dev version to reserve the name).

There is also the identically named `pyodide-build` CLI command which replaces `bin/pyodide`.

The short term goals is to use fewer hacks with `PATH` and `PYTHONPATH`. Long term goal make it a user facing interface for building packages instead of the Makefile.
commit f03d85c00ae993c3c87a5a7b2ea0c1215f57ee04
Author: Roman Yurchak <rth.yurchak@pm.me>
Date:   Mon Oct 8 10:53:11 2018 +0200

    Partial fixes for BLAS/LAPACK

diff --git a/scipy/linalg/setup.py b/scipy/linalg/setup.py
index 2c9b9ba22..e8c7336d5 100755
--- a/scipy/linalg/setup.py
+++ b/scipy/linalg/setup.py
@@ -14,7 +14,13 @@ def configuration(parent_package='', top_path=None):
 
     config = Configuration('linalg', parent_package, top_path)
 
-    lapack_opt = get_info('lapack_opt')
+    lapack_opt = {  # libraries will be auto-generated by pywasmcross
+                  'libraries': [],
+                  'include_dirs': [],
+                  'library_dirs': ['../../../CLAPACK/build/CLAPACK-3.2.1/'],
+                  'language': 'f77',
+                  'define_macros': [('NO_ATLAS_INFO', 1),
+                                    ('HAVE_CBLAS', None)]}
 
     if not lapack_opt:
         raise NotFoundError('no lapack/blas resources found')
@@ -117,9 +123,22 @@ def configuration(parent_package='', top_path=None):
     fnames = split_fortran_files(join(dirname, 'src', 'id_dist', 'src'),
                                  routines_to_split)
     fnames = [join('src', 'id_dist', 'src', f) for f in fnames]
-    config.add_extension('_interpolative', fnames + ["interpolative.pyf"],
-                         extra_info=lapack_opt
-                         )
+    # TODO: The following fails with,
+    # scipy/linalg/src/id_dist/src/idd_sfft.c:114:22: error: conflicting types for 'idd_sffti1__'
+    # /* Subroutine */ int idd_sffti1__(integer *ind, integer *n, doublereal *wsave)
+    #                      ^
+    # scipy/linalg/src/id_dist/src/idd_sfft.c:72:33: note: previous declaration is here
+    #     extern /* Subroutine */ int idd_sffti1__(integer *, integer *, 
+    #                                 ^
+    # scipy/linalg/src/id_dist/src/idd_sfft.c:371:22: error: conflicting types for 'idd_sfft1__'
+    # /* Subroutine */ int idd_sfft1__(integer *ind, integer *n, doublereal *v, 
+    #                      ^
+    # scipy/linalg/src/id_dist/src/idd_sfft.c:311:33: note: previous declaration is here
+    #    extern /* Subroutine */ int idd_sfft1__(integer *, integer *, doublereal *<Paste>
+    #
+    #config.add_extension('_interpolative', fnames + ["interpolative.pyf"],
+    #                     extra_info=lapack_opt
+    #                     )
 
     # _calc_lwork:
     config.add_extension('_calc_lwork',
diff --git a/scipy/sparse/linalg/eigen/arpack/setup.py b/scipy/sparse/linalg/eigen/arpack/setup.py
index a8175a9d5..88a717fe6 100755
--- a/scipy/sparse/linalg/eigen/arpack/setup.py
+++ b/scipy/sparse/linalg/eigen/arpack/setup.py
@@ -11,7 +11,13 @@ def configuration(parent_package='',top_path=None):
 
     config = Configuration('arpack',parent_package,top_path)
 
-    lapack_opt = get_info('lapack_opt')
+    lapack_opt = {  # libraries will be auto-generated by pywasmcross
+                  'libraries': [],
+                  'include_dirs': [],
+                  'library_dirs': ['../../../CLAPACK/build/CLAPACK-3.2.1/'],
+                  'language': 'f77',
+                  'define_macros': [('NO_ATLAS_INFO', 1),
+                                    ('HAVE_CBLAS', None)]}
 
     if not lapack_opt:
         raise NotFoundError('no lapack/blas resources found')
diff --git a/scipy/sparse/linalg/isolve/setup.py b/scipy/sparse/linalg/isolve/setup.py
index becb9237a..707e3f49d 100755
--- a/scipy/sparse/linalg/isolve/setup.py
+++ b/scipy/sparse/linalg/isolve/setup.py
@@ -11,7 +11,13 @@ def configuration(parent_package='',top_path=None):
 
     config = Configuration('isolve',parent_package,top_path)
 
-    lapack_opt = get_info('lapack_opt')
+    lapack_opt = { # libraries will be auto-generated by pywasmcross
+                  'libraries': [],
+                  'include_dirs': [],
+                  'library_dirs': ['../../../CLAPACK/build/CLAPACK-3.2.1/'],
+                  'language': 'f77',
+                  'define_macros': [('NO_ATLAS_INFO', 1),
+                                    ('HAVE_CBLAS', None)]}
 
     if not lapack_opt:
         raise NotFoundError('no lapack/blas resources found')

commit f03d85c00ae993c3c87a5a7b2ea0c1215f57ee04
Author: Roman Yurchak <rth.yurchak@pm.me>
Date:   Mon Oct 8 10:53:11 2018 +0200

    Partial fixes for BLAS/LAPACK

diff --git a/scipy/linalg/setup.py b/scipy/linalg/setup.py
index 2c9b9ba22..e8c7336d5 100755
--- a/scipy/linalg/setup.py
+++ b/scipy/linalg/setup.py
@@ -14,7 +14,13 @@ def configuration(parent_package='', top_path=None):
 
     config = Configuration('linalg', parent_package, top_path)
 
-    lapack_opt = get_info('lapack_opt')
+    lapack_opt = {  # libraries will be auto-generated by pywasmcross
+                  'libraries': [],
+                  'include_dirs': [],
+                  'library_dirs': ['../../../CLAPACK/build/CLAPACK-3.2.1/'],
+                  'language': 'f77',
+                  'define_macros': [('NO_ATLAS_INFO', 1),
+                                    ('HAVE_CBLAS', None)]}
 
     if not lapack_opt:
         raise NotFoundError('no lapack/blas resources found')
@@ -117,9 +123,22 @@ def configuration(parent_package='', top_path=None):
     fnames = split_fortran_files(join(dirname, 'src', 'id_dist', 'src'),
                                  routines_to_split)
     fnames = [join('src', 'id_dist', 'src', f) for f in fnames]
-    config.add_extension('_interpolative', fnames + ["interpolative.pyf"],
-                         extra_info=lapack_opt
-                         )
+    # TODO: The following fails with,
+    # scipy/linalg/src/id_dist/src/idd_sfft.c:114:22: error: conflicting types for 'idd_sffti1__'
+    # /* Subroutine */ int idd_sffti1__(integer *ind, integer *n, doublereal *wsave)
+    #                      ^
+    # scipy/linalg/src/id_dist/src/idd_sfft.c:72:33: note: previous declaration is here
+    #     extern /* Subroutine */ int idd_sffti1__(integer *, integer *, 
+    #                                 ^
+    # scipy/linalg/src/id_dist/src/idd_sfft.c:371:22: error: conflicting types for 'idd_sfft1__'
+    # /* Subroutine */ int idd_sfft1__(integer *ind, integer *n, doublereal *v, 
+    #                      ^
+    # scipy/linalg/src/id_dist/src/idd_sfft.c:311:33: note: previous declaration is here
+    #    extern /* Subroutine */ int idd_sfft1__(integer *, integer *, doublereal *<Paste>
+    #
+    #config.add_extension('_interpolative', fnames + ["interpolative.pyf"],
+    #                     extra_info=lapack_opt
+    #                     )
 
     # _calc_lwork:
     config.add_extension('_calc_lwork',
diff --git a/scipy/sparse/linalg/eigen/arpack/setup.py b/scipy/sparse/linalg/eigen/arpack/setup.py
index a8175a9d5..88a717fe6 100755
--- a/scipy/sparse/linalg/eigen/arpack/setup.py
+++ b/scipy/sparse/linalg/eigen/arpack/setup.py
@@ -11,7 +11,13 @@ def configuration(parent_package='',top_path=None):
 
     config = Configuration('arpack',parent_package,top_path)
 
-    lapack_opt = get_info('lapack_opt')
+    lapack_opt = {  # libraries will be auto-generated by pywasmcross
+                  'libraries': [],
+                  'include_dirs': [],
+                  'library_dirs': ['../../../CLAPACK/build/CLAPACK-3.2.1/'],
+                  'language': 'f77',
+                  'define_macros': [('NO_ATLAS_INFO', 1),
+                                    ('HAVE_CBLAS', None)]}
 
     if not lapack_opt:
         raise NotFoundError('no lapack/blas resources found')
diff --git a/scipy/sparse/linalg/isolve/setup.py b/scipy/sparse/linalg/isolve/setup.py
index becb9237a..707e3f49d 100755
--- a/scipy/sparse/linalg/isolve/setup.py
+++ b/scipy/sparse/linalg/isolve/setup.py
@@ -11,7 +11,13 @@ def configuration(parent_package='',top_path=None):
 
     config = Configuration('isolve',parent_package,top_path)
 
-    lapack_opt = get_info('lapack_opt')
+    lapack_opt = { # libraries will be auto-generated by pywasmcross
+                  'libraries': [],
+                  'include_dirs': [],
+                  'library_dirs': ['../../../CLAPACK/build/CLAPACK-3.2.1/'],
+                  'language': 'f77',
+                  'define_macros': [('NO_ATLAS_INFO', 1),
+                                    ('HAVE_CBLAS', None)]}
 
     if not lapack_opt:
         raise NotFoundError('no lapack/blas resources found')
