• Josh Smith's avatar
    Refactored project such that top level hdlmake directory is now a package. Added… · 089b2af4
    Josh Smith authored
    Refactored project such that top level hdlmake directory is now a package. Added setup.py for easy packaging of project with setuptools. Note that installation instructions (and how to run hdlmake) has changed!
    
    Related changes:
    - hdlmake/_version.py file now exists as a single location to manage the version of hdlmake. This is used by Sphinx docs, setup.py, and hdlmake itself.
    - Cleaned up some circular dependencies in hdlmake.fetch package. This changed the design of backend_factory such that it no longer depends on importing git/svn fetchers.
    - Added tests/run_tests.py. Right now it has one test which iterates through all of the top level sim and syn Manifest files and attempts to run hdlmake against them. This acts as a crude regression test.
    - Added ez_setup.py. This installs setuptools if it is not available in the python environment. This guarantees that setup.py will work.
    - Added Manifest.in. This lists non-hdlmake application data that should be included in a source distribution (documentation, test files, etc)
    - Updated Sphinx docs to agree with the new package/module structure (with hdlmake as a top level package). Note that the installation instructions have changed.
    
    Stealth changes:
    - hdlmake now will return a non-zero exit code when an exception is caught at the top level. Previously the exception was caught and hdlmake exited with 0 exit code. This was confusing because it actually was a failure.
    - Fixed a small bug in synthesis_project.py where version_key may not exist in env dictionary, causing an exception, instead of printing the helpful error message.
    
    Rationale:
    - Packages are the means of sharing Python code. The whole application should be bundled in a package.
    - Easier distribution of project via setuptools
    - Installation via setup.py / setuptools automatically creates executable hdlmake script
    - Utilizing setuptools allows for possibility of distributing releases via PyPI.
    - Possible to import from any module in hdlmake for purposes of unit testing without sys.path hacking.
    089b2af4