devtools: add new SPDX license compliance checker
[dpdk.git] / doc / guides / contributing / coding_style.rst
index d96698a..b55075e 100644 (file)
@@ -54,8 +54,13 @@ To document a public API, a doxygen-like format must be used: refer to :ref:`dox
 License Header
 ~~~~~~~~~~~~~~
 
 License Header
 ~~~~~~~~~~~~~~
 
-Each file should begin with a special comment containing the appropriate copyright and license for the file.
-Generally this is the BSD License, except for code for Linux Kernel modules.
+Each file must begin with a special comment containing the
+`Software Package Data Exchange (SPDX) License Identfier <https://spdx.org/using-spdx-license-identifier>`_.
+
+Generally this is the BSD License, except for code granted special exceptions.
+The SPDX licences identifier is sufficient, a file should not contain
+an additional text version of the license (boilerplate).
+
 After any copyright header, a blank line should be left before any other contents, e.g. include statements in a C file.
 
 C Preprocessor Directives
 After any copyright header, a blank line should be left before any other contents, e.g. include statements in a C file.
 
 C Preprocessor Directives
@@ -631,10 +636,10 @@ In the DPDK environment, use the logging interface provided:
 
  /* log in debug level */
  rte_log_set_global_level(RTE_LOG_DEBUG);
 
  /* log in debug level */
  rte_log_set_global_level(RTE_LOG_DEBUG);
- RTE_LOG(DEBUG, my_logtype1, "this is is a debug level message\n");
- RTE_LOG(INFO, my_logtype1, "this is is a info level message\n");
- RTE_LOG(WARNING, my_logtype1, "this is is a warning level message\n");
- RTE_LOG(WARNING, my_logtype2, "this is is a debug level message (not displayed)\n");
+ RTE_LOG(DEBUG, my_logtype1, "this is a debug level message\n");
+ RTE_LOG(INFO, my_logtype1, "this is a info level message\n");
+ RTE_LOG(WARNING, my_logtype1, "this is a warning level message\n");
+ RTE_LOG(WARNING, my_logtype2, "this is a debug level message (not displayed)\n");
 
  /* log in info level */
  rte_log_set_global_level(RTE_LOG_INFO);
 
  /* log in info level */
  rte_log_set_global_level(RTE_LOG_INFO);
@@ -803,9 +808,8 @@ lpm, etc. For drivers, the same format of Makefile is used.
        CFLAGS += -O3
        CFLAGS += $(WERROR_FLAGS)
 
        CFLAGS += -O3
        CFLAGS += $(WERROR_FLAGS)
 
-       # the symbol version information for the library, and .so version
+       # the symbol version information for the library
        EXPORT_MAP := rte_<name>_version.map
        EXPORT_MAP := rte_<name>_version.map
-       LIBABIVER := 1
 
        # all source filenames are stored in SRCS-y
        SRCS-$(CONFIG_RTE_LIBRTE_<NAME>) += rte_<name>.c
 
        # all source filenames are stored in SRCS-y
        SRCS-$(CONFIG_RTE_LIBRTE_<NAME>) += rte_<name>.c
@@ -825,10 +829,10 @@ format.
 .. code-block:: python
 
        sources = files('file1.c', ...)
 .. code-block:: python
 
        sources = files('file1.c', ...)
-       headers = files('file1.c', ...)
+       headers = files('file1.h', ...)
 
 
 
 
-The will build based on a number of conventions and assumptions within the DPDK
+This will build based on a number of conventions and assumptions within the DPDK
 itself, for example, that the library name is the same as the directory name in
 which the files are stored.
 
 itself, for example, that the library name is the same as the directory name in
 which the files are stored.
 
@@ -843,21 +847,18 @@ sources
 
 The optional fields are:
 
 
 The optional fields are:
 
-allow_experimental_apis
-       **Default Value = false**
-       Used to allow the library to make use of APIs marked as experimental.
-       Set to ``true`` if the C files in the library call any functions
-       marked as experimental in any included header files.
-
 build
        **Default Value = true**
        Used to optionally compile a library, based on its dependencies or
 build
        **Default Value = true**
        Used to optionally compile a library, based on its dependencies or
-       environment. A simple example of use would be:
+       environment. When set to "false" the ``reason`` value, explained below, should
+       also be set to explain to the user why the component is not being built.
+       A simple example of use would be:
 
 .. code-block:: python
 
 
 .. code-block:: python
 
-       if host_machine.system() != 'linux'
+       if not is_linux
                build = false
                build = false
+               reason = 'only supported on Linux'
        endif
 
 
        endif
 
 
@@ -938,10 +939,19 @@ objs
        objects that were compiled up as part of another target given in the
        included library ``meson.build`` file.
 
        objects that were compiled up as part of another target given in the
        included library ``meson.build`` file.
 
-version
-       **Default Value = 1**.
-       Specifies the ABI version of the library, and is used as the major
-       version number of the resulting ``.so`` library.
+reason
+       **Default Value = '<unknown reason>'**.
+       This variable should be used when a library is not to be built i.e. when
+       ``build`` is set to "false", to specify the reason why a library will not be
+       built. For missing dependencies this should be of the form
+       ``'missing dependency, "libname"'``.
+
+use_function_versioning
+       **Default Value = false**.
+       Specifies if the library in question has ABI versioned functions. If it
+       has, this value should be set to ensure that the C files are compiled
+       twice with suitable parameters for each of shared or static library
+       builds.
 
 Meson Build File Contents - Drivers
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Meson Build File Contents - Drivers
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -949,9 +959,6 @@ Meson Build File Contents - Drivers
 For drivers, the values are largely the same as for libraries. The variables
 supported are:
 
 For drivers, the values are largely the same as for libraries. The variables
 supported are:
 
-allow_experimental_apis
-       As above.
-
 build
        As above.
 
 build
        As above.
 
@@ -991,6 +998,9 @@ pkgconfig_extra_libs
        using static libraries. Anything added here will be appended to the end
        of the ``pkgconfig --libs`` output.
 
        using static libraries. Anything added here will be appended to the end
        of the ``pkgconfig --libs`` output.
 
+reason
+       As above.
+
 sources [mandatory]
        As above
 
 sources [mandatory]
        As above