docs: def compile_cython(fpath, clean=True):
      r""" Compiles a cython pyx into a shared library
  
      This seems broken
      compiles pyx -> pyd/dylib/so
  
      Examples:
          REAL SETUP.PY OUTPUT
          cythoning vtool/linalg_cython.pyx to vtool\linalg_cython.c
          C:\MinGW\bin\gcc.exe -mdll -O -Wall ^
          -IC:\Python27\Lib\site-packages\numpy\core\include ^
          -IC:\Python27\include -IC:\Python27\PC ^
          -c vtool\linalg_cython.c ^
          -o build\temp.win32-2.7\Release\vtool\linalg_cython.o
  
          writing build\temp.win32-2.7\Release\vtool\linalg_cython.def
  
          C:\MinGW\bin\gcc.exe -shared \
          -s \
          build\temp.win32-2.7\Release\vtool\linalg_cython.o \
          build\temp.win32-2.7\Release\vtool\linalg_cython.def \
          -LC:\Python27\libs \
          -LC:\Python27\PCbuild \
          -lpython27 \
          -lmsvcr90 \
          -o build\lib.win32-2.7\vtool\linalg_cython.pyd
  
      """
      from utool import util_cplat
      from utool import util_path
      import utool
  
      # Get autogenerated filenames
      fpath = util_path.truepath(fpath)
      dpath_, fname_ = split(fpath)
      dpath = relpath(dpath_, os.getcwd())
      fname, ext = splitext(fname_)
      # Prefer pyx over py
      if exists(fname + '.pyx'):
          fpath = fname + '.pyx'
      fname_c  = join(dpath, fname + '.c')
      fname_lib = join(dpath, fname + util_cplat.get_pylib_ext())
  
      print('[utool.compile_cython] fpath=%r' % (fpath,))
      print(' --- PRECHECKS --- ')
      if clean:
          utool.delete(fname_c)
          utool.delete(fname_lib)
  
      utool.checkpath(fpath, verbose=True, n=4)
      utool.checkpath(fname_c, verbose=True, info=False, n=4)
      utool.checkpath(fname_lib, verbose=True, info=False, n=4)
  
      # Cython build arguments
      cython_exe = get_cython_exe()
      if util_cplat.WIN32:
          os.environ['LDFLAGS'] = '-march=i486'
          os.environ['CFLAGS'] = '-march=i486'
          cc_exe = r'C:\MinGW\bin\gcc.exe'
          pyinclude_list = [
              r'C:\Python27\Lib\site-packages\numpy\core\include',
              r'C:\Python27\include',
              r'C:\Python27\PC',
              np.get_include()]
          pylib_list     = [
              r'C:\Python27\libs',
              r'C:\Python27\PCbuild'
              #r'C:\Python27\DLLS',
          ]
          plat_gcc_flags = ' '.join([
              '-mdll',
              '-O',
              '-DNPY_NO_DEPRECATED_API',
              #'-DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION',
              '-Wall',
              '-Wno-unknown-pragmas',
              '-Wno-format',
              '-Wno-unused-function',
              '-m32',
              '-shared',
              #'-fPIC',
              #'-fwrapv',
          ])
          #plat_gcc_flags = ' '.join([
          #    '-shared',
          #    '-m32',
          #    '-mdll',
          #    '-march=i486',
          #    '-O',
          #])
          plat_link_flags = '-lpython27 -lmsvcr90'
  
      #C:\MinGW\bin\gcc.exe -shared -s
      #build\temp.win32-2.7\Release\vtool\linalg_cython.o
      #build\temp.win32-2.7\Release\vtool\linalg_cython.def -LC:\Python27\libs
      #-LC:\Python27\PCbuild -lpython27 -lmsvcr90 -o
      #build\lib.win32-2.7\linalg_cython.pyd
  
      else:
          cc_exe = 'gcc'
          cython_exe = 'cython'
          pyinclude_list = [r'/usr/include/python2.7', np.get_include()]
          pylib_list     = []
          plat_gcc_flags = ' '.join([
              '-shared',
              '-pthread',
              '-fPIC',
              '-fwrapv',
              '-O2',
              '-Wall',
              '-fno-strict-aliasing',
          ])
      #C:\MinGW\bin\gcc.exe -mdll -O -Wall
      #-IC:\Python27\Lib\site-packages\numpy\core\include -IC:\Python27\include
      #-IC:\Python27\PC -c vtool\linalg_cython.c -o
      #build\temp.win32-2.7\Release\vtool\linalg_cyth
  
      pyinclude = '' if len(pyinclude_list) == 0 else '-I' + ' -I'.join(pyinclude_list)
      pylib     = '' if len(pylib_list)     == 0 else '-L' + ' -L'.join(pylib_list)
      gcc_flag_list = [
          plat_gcc_flags,
          pyinclude,
          pylib,
          plat_link_flags,
      ]
      gcc_flags = ' '.join(filter(lambda x: len(x) > 0, gcc_flag_list))
      gcc_build_cmd = cc_exe + ' ' + gcc_flags + ' -o ' + fname_lib + ' -c ' + fname_c
  
      cython_build_cmd = cython_exe + ' ' + fpath
  
      # HACK
      print('\n --- CYTHON_COMMANDS ---')
      print(utool.pack_into(cython_build_cmd, textwidth=80, newline_prefix='  '))
      print('')
      print(utool.pack_into(gcc_build_cmd, textwidth=80, newline_prefix='  '))
      print(gcc_build_cmd)
      print('\n --- COMMAND_EXECUTION ---')
  
      def verbose_cmd(cmd):
          print('\n<CMD>')
          print(cmd)
          ret = os.system(cmd)
          print('> ret = %r' % ret)
          print('</CMD>\n')
          #print('-------------------')
          return ret
  
      ret = verbose_cmd(cython_build_cmd)
      assert utool.checkpath(fname_c, verbose=True, n=2), 'failed cython build'
      ret = verbose_cmd(gcc_build_cmd)
      assert utool.checkpath(fname_lib, verbose=True, n=2), 'failed gcc cython build'
      #try:
      #    #lib_dpath, lib_fname = split(fname_lib)
      #    #cwd = os.getcwd()
      #    #os.chdir(lib_dpath)
      #    ##exec('import ' + splitext(lib_fname)[0])
      #    #os.chdir(cwd)
      #    pass
      #except Exception:
      #    pass
      #    raise
  
      #out, err, ret = util_cplat.shell(cython_exe + ' ' + fpath)
      #out, err, ret = util_cplat.shell((cython_exe, fpath))
      #if ret == 0:
      #    out, err, ret = util_cplat.shell(cc_exe + ' ' + gcc_flags + ' -o ' +
      #    fname_so + ' ' + fname_c)
      return ret