{ "info": { "author": "Anderson Toshiyuki Sasaki", "author_email": "ansasaki@redhat.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Build Tools" ], "description": ".. start-badges\n\n|docs| |travis| |coveralls| |codecov|\n\n.. |docs| image:: https://readthedocs.org/projects/abimap/badge/?style=flat\n :target: https://readthedocs.org/projects/abimap\n :alt: Documentation Status\n\n.. |travis| image:: https://travis-ci.org/ansasaki/abimap.svg?branch=master\n :alt: Travis-CI Build Status\n :target: https://travis-ci.org/ansasaki/abimap\n\n.. |coveralls| image:: https://coveralls.io/repos/github/ansasaki/abimap/badge.svg?branch=master\n :alt: Coverage Status\n :target: https://coveralls.io/github/ansasaki/abimap?branch=master\n\n.. |codecov| image:: https://codecov.io/github/ansasaki/abimap/coverage.svg?branch=master\n :alt: Coverage Status\n :target: https://codecov.io/github/ansasaki/abimap\n\n\n.. end-badges\n\nabimap\n======\n\nA helper for library maintainers to use symbol versioning\n\nWhy use symbol versioning?\n--------------------------\n\nThe main reason is to be able to keep the library [ABI]_ stable.\n\nIf a library is intended to be used for a long time, it will need updates for\neventual bug fixes and/or improvement.\nThis can lead to changes in the [API]_ and, in the worst case, changes to the\n[ABI]_.\n\nUsing symbol versioning, it is possible to make compatible changes and keep the\napplications working without recompiling.\nIf incompatible changes were made (breaking the [ABI]_), symbol versioning allows both\nincompatible versions to live in the same system without conflict.\nAnd even more uncommon situations, like an application to be linked to\ndifferent (incompatible) versions of the same library.\n\nFor more information, I strongly recommend reading:\n\n- [HOW_TO]_ How to write shared libraries, by Ulrich Drepper\n\nHow to add symbol versioning to my library?\n-------------------------------------------\n\nAdding version information to the symbols is easy.\nKeeping the [ABI]_ stable, unfortunately, is not. This project intends to help in the first part.\n\nTo add version information to symbols of a library, one can use version scripts (in Linux).\nVersion scripts are files used by linkers to map symbols to a given version.\nIt contains the symbols exported by the library grouped by the releases where they were introduced. For example::\n\n LIB_EXAMPLE_1_0_0\n {\n global:\n symbol;\n another_symbol;\n local:\n *;\n };\n\nIn this example, the release ``LIB_EXAMPLE_1_0_0`` introduces the symbols ``symbol`` and ``another_symbol``.\nThe ``*`` wildcard in ``local`` catches all other symbols, meaning only ``symbol`` and ``another_symbol`` are globally exported as part of the library [API]_.\n\nIf a compatible change is made, it would introduce a new release, like::\n\n LIB_EXAMPLE_1_0_0\n {\n global:\n symbol;\n another_symbol;\n local:\n *;\n };\n\n LIB_EXAMPLE_1_1_0\n {\n global:\n new_symbol;\n } LIB_EXAMPLE_1_0_0;\n\n\nThe new release ``LIB_EXAMPLE_1_1_0`` introduces the symbol ``new_symbol``.\nThe ``*`` wildcard should be only in one version, usually in the oldest version.\nThe ``} LIB_EXAMPLE_1_0_0;`` part in the end of the new release means the new release depends on the old release.\n\nSuppose a new incompatible version ``LIB_EXAMPLE_2_0_0`` released after ``LIB_EXAMPLE_1_1_0``. Its map would look like::\n\n LIB_EXAMPLE_2_0_0\n {\n global:\n a_newer_symbol;\n another_symbol;\n new_symbol;\n local:\n *;\n };\n\nThe symbol ``symbol`` was removed (and that is why it was incompatible). And a new symbol was introduced, ``a_newer_symbol``.\n\nNote that all global symbols in all releases were merged in a unique new release.\n\nInstallation:\n-------------\n\nAt the command line::\n\n pip install abimap\n\nUsage:\n------\n\nThis project delivers a script, ``abimap``. This is my first project in python, so feel free to point out ways to improve it.\n\nThe sub-commands ``update`` and ``new`` expect a list of symbols given in stdin. The list of symbols are words separated by non-alphanumeric characters (matches with the regular expression ``[a-zA-Z0-9_]+``). For example::\n\n symbol, another, one_more\n\nand::\n\n symbol\n another\n one_more\n\nare valid inputs.\n\nThe last sub-command, ``check``, expects only the path to the map file to be\nchecked.\n\ntl;dr\n-----\n::\n\n $ abimap update lib_example.map < symbols_list\n\nor (setting an output)::\n\n $ abimap update lib_example.map -o new.map < symbols_list\n\nor::\n\n $ cat symbols_list | abimap update lib_example.map -o new.map\n\nor (to create a new map)::\n\n $ cat symbols_list | abimap new -r lib_example_1_0_0 -o new.map\n\nor (to check the content of a existing map)::\n\n $ abimap check my.map\n\nor (to check the current version)::\n\n $ abimap version\n\nLong version\n------------\n\nRunning ``abimap -h`` will give::\n\n usage: abimap [-h] {update,new,check,version} ...\n\n Helper tools for linker version script maintenance\n\n optional arguments:\n -h, --help show this help message and exit\n\n Subcommands:\n {update,new,check,version}\n These subcommands have their own set of options\n update Update the map file\n new Create a new map file\n check Check the map file\n version Print version\n\n Call a subcommand passing '-h' to see its specific options\n\nCall a subcommand passing '-h' to see its specific options\nThere are four subcommands, ``update``, ``new``, ``check``, and ``version``\n\nRunning ``abimap update -h`` will give::\n\n usage: abimap update [-h] [-o OUT] [-i INPUT] [-d]\n [--verbosity {quiet,error,warning,info,debug} | --quiet | --debug]\n [-l LOGFILE] [-n NAME] [-v VERSION] [-r RELEASE]\n [--no_guess] [--allow-abi-break] [-f] [-a | --remove]\n file\n\n positional arguments:\n file The map file being updated\n\n optional arguments:\n -h, --help show this help message and exit\n -o OUT, --out OUT Output file (defaults to stdout)\n -i INPUT, --in INPUT Read from this file instead of stdio\n -d, --dry Do everything, but do not modify the files\n --verbosity {quiet,error,warning,info,debug}\n Set the program verbosity\n --quiet Makes the program quiet\n --debug Makes the program print debug info\n -l LOGFILE, --logfile LOGFILE\n Log to this file\n -n NAME, --name NAME The name of the library (e.g. libx)\n -v VERSION, --version VERSION\n The release version (e.g. 1_0_0 or 1.0.0)\n -r RELEASE, --release RELEASE\n The full name of the release to be used (e.g.\n LIBX_1_0_0)\n --no_guess Disable next release name guessing\n --allow-abi-break Allow removing symbols, and to break ABI\n -f, --final Mark the modified release as final, preventing later\n changes.\n -a, --add Adds the symbols to the map file.\n --remove Remove the symbols from the map file. This breaks the\n ABI.\n\n A list of symbols is expected as the input. If a file is provided with '-i',\n the symbols are read from the given file. Otherwise the symbols are read from\n stdin.\n\nRunning ``abimap new -h`` will give::\n\n usage: abimap new [-h] [-o OUT] [-i INPUT] [-d]\n [--verbosity {quiet,error,warning,info,debug} | --quiet | --debug]\n [-l LOGFILE] [-n NAME] [-v VERSION] [-r RELEASE]\n [--no_guess] [-f]\n\n optional arguments:\n -h, --help show this help message and exit\n -o OUT, --out OUT Output file (defaults to stdout)\n -i INPUT, --in INPUT Read from this file instead of stdio\n -d, --dry Do everything, but do not modify the files\n --verbosity {quiet,error,warning,info,debug}\n Set the program verbosity\n --quiet Makes the program quiet\n --debug Makes the program print debug info\n -l LOGFILE, --logfile LOGFILE\n Log to this file\n -n NAME, --name NAME The name of the library (e.g. libx)\n -v VERSION, --version VERSION\n The release version (e.g. 1_0_0 or 1.0.0)\n -r RELEASE, --release RELEASE\n The full name of the release to be used (e.g.\n LIBX_1_0_0)\n --no_guess Disable next release name guessing\n -f, --final Mark the new release as final, preventing later\n changes.\n\n A list of symbols is expected as the input. If a file is provided with '-i',\n the symbols are read from the given file. Otherwise the symbols are read from\n stdin.\n\nRunning ``abimap check -h`` will give::\n\n usage: abimap check [-h]\n [--verbosity {quiet,error,warning,info,debug} | --quiet | --debug]\n [-l LOGFILE]\n file\n\n positional arguments:\n file The map file to be checked\n\n optional arguments:\n -h, --help show this help message and exit\n --verbosity {quiet,error,warning,info,debug}\n Set the program verbosity\n --quiet Makes the program quiet\n --debug Makes the program print debug info\n -l LOGFILE, --logfile LOGFILE\n Log to this file\n\nRunning ``abimap version -h`` will give::\n\n usage: abimap version [-h]\n\n optional arguments:\n -h, --help show this help message and exit\n\nImport as a library:\n--------------------\n\nTo use abimap in a project as a library::\n\n\tfrom abimap import symver\n\nDocumentation:\n--------------\n\nCheck in `Read the docs`_\n\nReferences:\n-----------\n.. [ABI] https://en.wikipedia.org/wiki/Application_binary_interface\n.. [API] https://en.wikipedia.org/wiki/Application_programming_interface\n.. [HOW_TO] https://www.akkadia.org/drepper/dsohowto.pdf, How to write shared libraries by Ulrich Drepper\n.. _Read the docs: https://abimap.readthedocs.io/en/latest/index.html\n\n\n=======\nHistory\n=======\n\n0.3.2 (2019-08-05)\n------------------\n\n* Fixed broken builds due to changes in warning output\n* Changed tests to check error messages\n* Added python 3.7 to testing matrix\n* Added requirement to verify SNI when checking URLs in docs\n\n0.3.1 (2018-08-20)\n------------------\n\n* Fixed bug when sorting releases: the older come first\n* Added missing runtime requirement for setuptools\n* Added manpage generation\n\n0.3.0 (2018-08-03)\n------------------\n\n* Complete rename of the project to abimap\n\n0.2.5 (2018-07-26)\n------------------\n\n* Add tests using different program names\n* Use the command line application name in output strings\n* Add a new entry point symver-smap for console scripts\n* Skip tests which use caplog if pytest version is < 3.4\n* Added an alias for pytest in setup.cfg. This fixed setup.py for test target\n\n0.2.4 (2018-06-15)\n------------------\n\n* Removed dead code, removed executable file permission\n* Removed appveyor related files\n\n0.2.3 (2018-06-15)\n------------------\n\n* Removed shebangs from scripts\n\n0.2.2 (2018-06-01)\n------------------\n\n* Fixed a bug in updates with provided release information\n* Fixed a bug in get_info_from_release_string()\n\n0.2.1 (2018-05-30)\n------------------\n\n* Fixed a bug where invalid characters were accepted in release name\n\n0.2.0 (2018-05-29)\n------------------\n\n* Added version information in output files\n* Added sub-command \"version\" to output name and version\n* Added option \"--final\" to mark modified release as released\n* Prevent releases marked with the special comment \"# Released\" to be modified\n* Allow existing release update\n* Detect duplicated symbols given as input\n\n0.1.0 (2018-05-09)\n------------------\n\n* First release on PyPI.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ansasaki/abimap", "keywords": "symver abimap symbol version versioning linker script library maintenance", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "abimap", "package_url": "https://pypi.org/project/abimap/", "platform": "", "project_url": "https://pypi.org/project/abimap/", "project_urls": { "Homepage": "https://github.com/ansasaki/abimap" }, "release_url": "https://pypi.org/project/abimap/0.3.2/", "requires_dist": [ "setuptools" ], "requires_python": "", "summary": "A helper for library maintainers to use symbol versioning", "version": "0.3.2" }, "last_serial": 5633805, "releases": { "0.3.0": [ { "comment_text": "", "digests": { "md5": "202fe6660ccf83fc6efc5a5c0b6b6a0d", "sha256": "ff41025ba6995501e0c320fd58a98f80edc76c3ddf3632b5a3beab677ae3181e" }, "downloads": -1, "filename": "abimap-0.3.0.tar.gz", "has_sig": false, "md5_digest": "202fe6660ccf83fc6efc5a5c0b6b6a0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51436, "upload_time": "2018-08-03T15:14:24", "url": "https://files.pythonhosted.org/packages/a3/c4/13e1dc93fe0191cd2ea1b398bff8dc7689529e21d669c37127482d8214a3/abimap-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "ea8e2f4be1a4bed62ebde95be254aa85", "sha256": "d2c4c7ff6ef2e1b42e0385af5995c5432027fe10ce3278408841e23cb3ca5dcd" }, "downloads": -1, "filename": "abimap-0.3.1.tar.gz", "has_sig": false, "md5_digest": "ea8e2f4be1a4bed62ebde95be254aa85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53265, "upload_time": "2018-08-20T08:32:13", "url": "https://files.pythonhosted.org/packages/02/10/c298e103b66bc3b7a7cc7d7ff135a15a0713ed1bf1c731caa131e1b45f5d/abimap-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "e716e136e555185ea79f7f34101fcf02", "sha256": "fcdf06cfd508a13943ea4d2b6c734ba54ade4638af18bd2fd5815b6aea632d73" }, "downloads": -1, "filename": "abimap-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e716e136e555185ea79f7f34101fcf02", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19832, "upload_time": "2019-08-05T11:45:07", "url": "https://files.pythonhosted.org/packages/d4/b0/f45a80a597b5a14f7d4aeb7cccc92448149ba621e3504aa489891b9ce374/abimap-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a33321d02b6f37798b72bb997172c4fe", "sha256": "85797f8c99ca240c43130dbd3b51b85d7772735164d4299f9b453b98bf84559a" }, "downloads": -1, "filename": "abimap-0.3.2.tar.gz", "has_sig": false, "md5_digest": "a33321d02b6f37798b72bb997172c4fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51744, "upload_time": "2019-08-05T11:45:08", "url": "https://files.pythonhosted.org/packages/c0/a7/c56ec99fd386214c62ca84a05fa561ddbaa9b567d69714a3bb85ecd95973/abimap-0.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e716e136e555185ea79f7f34101fcf02", "sha256": "fcdf06cfd508a13943ea4d2b6c734ba54ade4638af18bd2fd5815b6aea632d73" }, "downloads": -1, "filename": "abimap-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e716e136e555185ea79f7f34101fcf02", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19832, "upload_time": "2019-08-05T11:45:07", "url": "https://files.pythonhosted.org/packages/d4/b0/f45a80a597b5a14f7d4aeb7cccc92448149ba621e3504aa489891b9ce374/abimap-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a33321d02b6f37798b72bb997172c4fe", "sha256": "85797f8c99ca240c43130dbd3b51b85d7772735164d4299f9b453b98bf84559a" }, "downloads": -1, "filename": "abimap-0.3.2.tar.gz", "has_sig": false, "md5_digest": "a33321d02b6f37798b72bb997172c4fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51744, "upload_time": "2019-08-05T11:45:08", "url": "https://files.pythonhosted.org/packages/c0/a7/c56ec99fd386214c62ca84a05fa561ddbaa9b567d69714a3bb85ecd95973/abimap-0.3.2.tar.gz" } ] }