123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #
- # Build Awlsim Cython test cases
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- from __future__ import division, absolute_import, print_function
- # Avoid __future__.unicode_literals. It breaks on pypy2.
- import sys, os, re
- basedir = os.path.abspath(os.path.dirname(__file__))
- # Add the basedir and basedir/misc to PYTHONPATH before
- # we try to import setup_cython.
- for base in (os.getcwd(), basedir):
- sys.path.insert(0, os.path.join(base, "..", "misc"))
- sys.path.insert(0, base)
- from distutils.core import setup
- import setup_cython
- # Find the test case directories.
- packages = []
- for tc_dir in os.listdir(basedir):
- if not re.match(r"^tc\d\d\d_[\w\d_\-]+$", tc_dir):
- continue
- tc_dir = os.path.join(basedir, tc_dir)
- if not os.path.isdir(tc_dir):
- continue
- for dirpath, dirnames, filenames in os.walk(tc_dir):
- if "no_cython" in filenames:
- continue
- if not any(f.endswith(".py") and f != "__init__.py"
- for f in filenames):
- continue
- packages.append(os.path.relpath(dirpath, basedir))
- # Generate an __init__.py, so that the directory
- # is a valid Python package.
- initpy = os.path.join(tc_dir, "__init__.py")
- if not os.path.exists(initpy):
- with open(initpy, "w") as fd:
- fd.write("# GENERATED dummy __init__.py file\n")
- print("Discovered test case packages:", ", ".join(packages))
- # Setup Cython build.
- def pyCythonPatchLine(line):
- # Patch the import statements
- line = re.sub(r'^(\s*from awlsim[0-9a-zA-Z_]*)\.([0-9a-zA-Z_\.]+) import', r'\1_cython.\2 import', line)
- line = re.sub(r'^(\s*from awlsim[0-9a-zA-Z_]*)\.([0-9a-zA-Z_\.]+) cimport', r'\1_cython.\2 cimport', line)
- line = re.sub(r'^(\s*import awlsim[0-9a-zA-Z_]*)\.', r'\1_cython.', line)
- line = re.sub(r'^(\s*cimport awlsim[0-9a-zA-Z_]*)\.', r'\1_cython.', line)
- return line
- os.environ["CFLAGS"] = os.environ["CXXFLAGS"] = "-O0"
- os.environ["CPPFLAGS"] = ""
- os.environ["LDFLAGS"] = ""
- if not setup_cython.cythonBuildPossible():
- print("ERROR: Cannot build Cython modules.", file=sys.stderr)
- sys.exit(1)
- cmdclass = {}
- cmdclass["build_ext"] = setup_cython.CythonBuildExtension
- setup_cython.setupFileName = os.path.basename(__file__)
- setup_cython.parallelBuild = True
- setup_cython.pyCythonPatchLine = pyCythonPatchLine
- setup_cython.registerCythonModules()
- ext_modules = setup_cython.ext_modules
- # Create links to the awlsim packages.
- awlsimBuildPatchDir = os.path.join("..", "build", setup_cython.patchDirName)
- if not os.path.isdir(awlsimBuildPatchDir):
- print(("Awlsim build directory '%s' does not exist.\n"
- "Has awlsim been built?") % awlsimBuildPatchDir,
- file=sys.stderr)
- sys.exit(1)
- for awlsimPack in os.listdir(awlsimBuildPatchDir):
- linkFrom = os.path.join("..", "..", awlsimBuildPatchDir, awlsimPack)
- linkToDir = os.path.join("build", setup_cython.patchDirName)
- linkTo = os.path.join(linkToDir, awlsimPack)
- if not os.path.lexists(linkTo):
- print("Linking awlsim package '%s' to '%s'" % (linkFrom, linkTo))
- os.makedirs(linkToDir, exist_ok=True)
- os.symlink(linkFrom, linkTo)
- setup( name = "awlsim-cython-unittests",
- packages = packages,
- cmdclass = cmdclass,
- ext_modules = ext_modules,
- )
|