get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/63166/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 63166,
    "url": "http://patches.dpdk.org/api/patches/63166/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/d77a31dfc127c00d11cfbdd5d471c78810503adb.1574270323.git.anatoly.burakov@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<d77a31dfc127c00d11cfbdd5d471c78810503adb.1574270323.git.anatoly.burakov@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/d77a31dfc127c00d11cfbdd5d471c78810503adb.1574270323.git.anatoly.burakov@intel.com",
    "date": "2019-11-20T17:23:28",
    "name": "[v8,01/12] config: change ABI versioning to global",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "e0df012a0d82712788f48465260a60fd85cb315d",
    "submitter": {
        "id": 4,
        "url": "http://patches.dpdk.org/api/people/4/?format=api",
        "name": "Anatoly Burakov",
        "email": "anatoly.burakov@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/d77a31dfc127c00d11cfbdd5d471c78810503adb.1574270323.git.anatoly.burakov@intel.com/mbox/",
    "series": [
        {
            "id": 7549,
            "url": "http://patches.dpdk.org/api/series/7549/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=7549",
            "date": "2019-11-20T17:23:27",
            "name": "Implement the new ABI policy and add helper scripts",
            "version": 8,
            "mbox": "http://patches.dpdk.org/series/7549/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/63166/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/63166/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 95403A04C1;\n\tWed, 20 Nov 2019 18:23:53 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id B41502BE2;\n\tWed, 20 Nov 2019 18:23:49 +0100 (CET)",
            "from mga05.intel.com (mga05.intel.com [192.55.52.43])\n by dpdk.org (Postfix) with ESMTP id D20862B87\n for <dev@dpdk.org>; Wed, 20 Nov 2019 18:23:44 +0100 (CET)",
            "from orsmga008.jf.intel.com ([10.7.209.65])\n by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n 20 Nov 2019 09:23:44 -0800",
            "from silpixa00399498.ir.intel.com (HELO\n silpixa00399498.ger.corp.intel.com) ([10.237.223.151])\n by orsmga008.jf.intel.com with ESMTP; 20 Nov 2019 09:23:41 -0800"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.69,222,1571727600\"; d=\"scan'208\";a=\"200793875\"",
        "From": "Anatoly Burakov <anatoly.burakov@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "Marcin Baran <marcinx.baran@intel.com>,\n Thomas Monjalon <thomas@monjalon.net>, Ray Kinsella <mdr@ashroe.eu>,\n John McNamara <john.mcnamara@intel.com>,\n Marko Kovacevic <marko.kovacevic@intel.com>,\n Bruce Richardson <bruce.richardson@intel.com>, ray.kinsella@intel.com,\n david.marchand@redhat.com, Pawel Modrak <pawelx.modrak@intel.com>",
        "Date": "Wed, 20 Nov 2019 17:23:28 +0000",
        "Message-Id": "\n <d77a31dfc127c00d11cfbdd5d471c78810503adb.1574270323.git.anatoly.burakov@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": [
            "<cover.1574270323.git.anatoly.burakov@intel.com>",
            "<cover.1574270323.git.anatoly.burakov@intel.com>"
        ],
        "References": [
            "<cover.1574270323.git.anatoly.burakov@intel.com>",
            "<cover.1573230233.git.anatoly.burakov@intel.com>\n <cover.1574270323.git.anatoly.burakov@intel.com>"
        ],
        "Subject": "[dpdk-dev] [PATCH v8 01/12] config: change ABI versioning to global",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Marcin Baran <marcinx.baran@intel.com>\n\nAs per new ABI policy [1], all of the libraries are now versioned using\none global ABI version. Stable libraries use the MAJOR.MINOR ABI\nversion for their shared objects, while experimental libraries\nuse the 0.MAJORMINOR convention for their versioning.\nExperimental library versioning is managed globally. Changes in this\npatch implement the necessary steps to enable that.\n\n[1] https://doc.dpdk.org/guides/contributing/abi_policy.html\n\nSigned-off-by: Marcin Baran <marcinx.baran@intel.com>\nSigned-off-by: Pawel Modrak <pawelx.modrak@intel.com>\nSigned-off-by: Anatoly Burakov <anatoly.burakov@intel.com>\nAcked-by: Bruce Richardson <bruce.richardson@intel.com>\n---\n\nNotes:\n    v6:\n    - Silenced grep error message on trying to grep a directory\n    \n    v3:\n    - Removed Windows support from Makefile changes\n    - Removed unneeded path conversions from meson files\n    \n    v2:\n    - Moved this to before ABI version bump to avoid compile breakage\n\n ABI_VERSION                                |  1 +\n buildtools/meson.build                     |  3 +++\n config/meson.build                         |  7 ++++++-\n doc/guides/contributing/abi_versioning.rst | 17 +++++++++--------\n doc/guides/contributing/coding_style.rst   |  8 +-------\n drivers/meson.build                        | 18 ++++++++++++------\n lib/meson.build                            | 17 +++++++++++------\n meson_options.txt                          |  2 --\n mk/rte.lib.mk                              | 14 +++++---------\n 9 files changed, 48 insertions(+), 39 deletions(-)\n create mode 100644 ABI_VERSION",
    "diff": "diff --git a/ABI_VERSION b/ABI_VERSION\nnew file mode 100644\nindex 0000000000..9a7c1e503f\n--- /dev/null\n+++ b/ABI_VERSION\n@@ -0,0 +1 @@\n+20.0\ndiff --git a/buildtools/meson.build b/buildtools/meson.build\nindex 8d0b9e0cd0..6ef2c5721c 100644\n--- a/buildtools/meson.build\n+++ b/buildtools/meson.build\n@@ -14,3 +14,6 @@ if python3.found()\n else\n \tmap_to_def_cmd = ['meson', 'runpython', files('map_to_def.py')]\n endif\n+\n+# stable ABI always starts with \"DPDK_\"\n+is_experimental_cmd = [find_program('grep', 'findstr'), '^DPDK_']\ndiff --git a/config/meson.build b/config/meson.build\nindex 2b1cb92e7e..3ffb73ab9c 100644\n--- a/config/meson.build\n+++ b/config/meson.build\n@@ -18,6 +18,11 @@ endforeach\n # depending on the configuration options\n pver = meson.project_version().split('.')\n major_version = '@0@.@1@'.format(pver.get(0), pver.get(1))\n+abi_version = run_command(find_program('cat', 'more'),\n+\tfiles('../ABI_VERSION')).stdout().strip()\n+# experimental libraries are versioned as 0.majorminor versions, e.g. 0.201\n+ever = abi_version.split('.')\n+experimental_abi_version = '0.@0@@1@'.format(ever.get(0), ever.get(1))\n \n # extract all version information into the build configuration\n dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int())\n@@ -37,7 +42,7 @@ endif\n \n pmd_subdir_opt = get_option('drivers_install_subdir')\n if pmd_subdir_opt.contains('<VERSION>')\n-\tpmd_subdir_opt = major_version.join(pmd_subdir_opt.split('<VERSION>'))\n+\tpmd_subdir_opt = abi_version.join(pmd_subdir_opt.split('<VERSION>'))\n endif\n driver_install_path = join_paths(get_option('libdir'), pmd_subdir_opt)\n eal_pmd_path = join_paths(get_option('prefix'), driver_install_path)\ndiff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst\nindex 050c971dd8..a21f4e7a41 100644\n--- a/doc/guides/contributing/abi_versioning.rst\n+++ b/doc/guides/contributing/abi_versioning.rst\n@@ -111,16 +111,17 @@ how this may be done.\n  ...\n \n At the same time, the major ABI version is changed atomically across all\n-libraries by incrementing the major version in individual library's soname, e.g.\n-``libacl.so.21``. This is done by bumping the LIBABIVER number in the libraries\n-Makefile to indicate to dynamic linking applications that this is a later, and\n-possibly incompatible library version:\n+libraries by incrementing the major version in the ABI_VERSION file. This is\n+done globally for all libraries that declare a stable ABI. For libraries marked\n+as EXPERIMENTAL, their major ABI version is always set to 0.\n \n-.. code-block:: c\n-\n-   -LIBABIVER := 20\n-   +LIBABIVER := 21\n+Minor ABI versions\n+~~~~~~~~~~~~~~~~~~\n \n+Each non-LTS release will also increment minor ABI version, to permit multiple\n+DPDK versions being installed alongside each other. Both stable and\n+experimental ABI's are versioned using the global version file that is updated\n+at the start of each release cycle, and are managed at the project level.\n \n Versioning Macros\n -----------------\ndiff --git a/doc/guides/contributing/coding_style.rst b/doc/guides/contributing/coding_style.rst\nindex a6843de5ad..841ef6d5c8 100644\n--- a/doc/guides/contributing/coding_style.rst\n+++ b/doc/guides/contributing/coding_style.rst\n@@ -803,9 +803,8 @@ lpm, etc. For drivers, the same format of Makefile is used.\n \tCFLAGS += -O3\n \tCFLAGS += $(WERROR_FLAGS)\n \n-\t# the symbol version information for the library, and .so version\n+\t# the symbol version information for the library\n \tEXPORT_MAP := rte_<name>_version.map\n-\tLIBABIVER := 1\n \n \t# all source filenames are stored in SRCS-y\n \tSRCS-$(CONFIG_RTE_LIBRTE_<NAME>) += rte_<name>.c\n@@ -955,11 +954,6 @@ use_function_versioning\n \ttwice with suitable parameters for each of shared or static library\n \tbuilds.\n \n-version\n-\t**Default Value = 1**.\n-\tSpecifies the ABI version of the library, and is used as the major\n-\tversion number of the resulting ``.so`` library.\n-\n Meson Build File Contents - Drivers\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n \ndiff --git a/drivers/meson.build b/drivers/meson.build\nindex 823e3ef839..80cc7001fe 100644\n--- a/drivers/meson.build\n+++ b/drivers/meson.build\n@@ -41,7 +41,6 @@ foreach class:dpdk_driver_classes\n \t\tbuild = true # set to false to disable, e.g. missing deps\n \t\treason = '<unknown reason>' # set if build == false to explain\n \t\tname = drv\n-\t\tversion = 1\n \t\tallow_experimental_apis = false\n \t\tsources = []\n \t\tobjs = []\n@@ -124,12 +123,19 @@ foreach class:dpdk_driver_classes\n \t\t\t\t\toutput: out_filename,\n \t\t\t\t\tdepends: [pmdinfogen, tmp_lib])\n \n-\t\t\tif get_option('per_library_versions')\n-\t\t\t\tlib_version = '@0@.1'.format(version)\n-\t\t\t\tso_version = '@0@'.format(version)\n+\t\t\tversion_map = '@0@/@1@/@2@_version.map'.format(\n+\t\t\t\t\tmeson.current_source_dir(),\n+\t\t\t\t\tdrv_path, lib_name)\n+\n+\t\t\tis_experimental = run_command(is_experimental_cmd,\n+\t\t\t\tfiles(version_map)).returncode()\n+\n+\t\t\tif is_experimental != 0\n+\t\t\t\tlib_version = experimental_abi_version\n+\t\t\t\tso_version = experimental_abi_version\n \t\t\telse\n-\t\t\t\tlib_version = major_version\n-\t\t\t\tso_version = major_version\n+\t\t\t\tlib_version = abi_version\n+\t\t\t\tso_version = abi_version\n \t\t\tendif\n \n \t\t\t# now build the static driver\ndiff --git a/lib/meson.build b/lib/meson.build\nindex bc8eb1d218..6ceb5e756e 100644\n--- a/lib/meson.build\n+++ b/lib/meson.build\n@@ -47,7 +47,6 @@ foreach l:libraries\n \tbuild = true\n \treason = '<unknown reason>' # set if build == false to explain why\n \tname = l\n-\tversion = 1\n \tallow_experimental_apis = false\n \tuse_function_versioning = false\n \tsources = []\n@@ -106,12 +105,18 @@ foreach l:libraries\n \t\t\t\tcflags += '-DRTE_USE_FUNCTION_VERSIONING'\n \t\t\tendif\n \n-\t\t\tif get_option('per_library_versions')\n-\t\t\t\tlib_version = '@0@.1'.format(version)\n-\t\t\t\tso_version = '@0@'.format(version)\n+\t\t\tversion_map = '@0@/@1@/rte_@2@_version.map'.format(\n+\t\t\t\t\tmeson.current_source_dir(), dir_name, name)\n+\n+\t\t\tis_experimental = run_command(is_experimental_cmd,\n+\t\t\t\t\tfiles(version_map)).returncode()\n+\n+\t\t\tif is_experimental != 0\n+\t\t\t\tlib_version = experimental_abi_version\n+\t\t\t\tso_version = experimental_abi_version\n \t\t\telse\n-\t\t\t\tlib_version = major_version\n-\t\t\t\tso_version = major_version\n+\t\t\t\tlib_version = abi_version\n+\t\t\t\tso_version = abi_version\n \t\t\tendif\n \n \t\t\t# first build static lib\ndiff --git a/meson_options.txt b/meson_options.txt\nindex e6fcb884be..bc369d06c9 100644\n--- a/meson_options.txt\n+++ b/meson_options.txt\n@@ -28,8 +28,6 @@ option('max_lcores', type: 'integer', value: 128,\n \tdescription: 'maximum number of cores/threads supported by EAL')\n option('max_numa_nodes', type: 'integer', value: 4,\n \tdescription: 'maximum number of NUMA nodes supported by EAL')\n-option('per_library_versions', type: 'boolean', value: true,\n-\tdescription: 'true: each lib gets its own version number, false: DPDK version used for each lib')\n option('tests', type: 'boolean', value: true,\n \tdescription: 'build unit tests')\n option('use_hpet', type: 'boolean', value: false,\ndiff --git a/mk/rte.lib.mk b/mk/rte.lib.mk\nindex 4df8849a08..3b318a5306 100644\n--- a/mk/rte.lib.mk\n+++ b/mk/rte.lib.mk\n@@ -11,20 +11,16 @@ EXTLIB_BUILD ?= n\n # VPATH contains at least SRCDIR\n VPATH += $(SRCDIR)\n \n-ifneq ($(CONFIG_RTE_MAJOR_ABI),)\n-ifneq ($(LIBABIVER),)\n-LIBABIVER := $(CONFIG_RTE_MAJOR_ABI)\n-endif\n+ifneq ($(shell grep -s \"^DPDK_\" $(SRCDIR)/$(EXPORT_MAP)),)\n+LIBABIVER := $(shell cat $(RTE_SRCDIR)/ABI_VERSION)\n+else\n+# EXPERIMENTAL ABI is versioned as 0.major+minor, e.g. 0.201 for 20.1 ABI\n+LIBABIVER := 0.$(shell cat $(RTE_SRCDIR)/ABI_VERSION | td -d '.')\n endif\n \n ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)\n LIB := $(patsubst %.a,%.so.$(LIBABIVER),$(LIB))\n ifeq ($(EXTLIB_BUILD),n)\n-ifeq ($(CONFIG_RTE_MAJOR_ABI),)\n-ifeq ($(CONFIG_RTE_NEXT_ABI),y)\n-LIB := $(LIB).1\n-endif\n-endif\n CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP)\n endif\n endif\n",
    "prefixes": [
        "v8",
        "01/12"
    ]
}