mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-29 17:47:14 +02:00
Added global “lib_extra_dirs” option to “[platformio]” section // Resolve #842
This commit is contained in:
@ -41,6 +41,9 @@ PlatformIO 3.0
|
||||
(`issue #837 <https://github.com/platformio/platformio-core/issues/837>`_)
|
||||
* Added new `LDF Modes <http://docs.platformio.org/en/latest/librarymanager/ldf.html#ldf-mode>`__:
|
||||
``chain+`` and ``deep+`` and set ``chain+`` as default
|
||||
* Added global ``lib_extra_dirs`` option to ``[platformio]`` section for
|
||||
`Project Configuration File "platformio.ini" <http://docs.platformio.org/en/stable/projectconf.html>`__
|
||||
(`issue #842 <https://github.com/platformio/platformio-core/issues/842>`_)
|
||||
* Changed a default exit combination for Device Monitor from ``Ctrl+]`` to ``Ctrl+C``
|
||||
* Improved detecting of ARM mbed media disk for uploading
|
||||
* Improved Project Generator for CLion IDE when source folder contains nested items
|
||||
|
@ -113,8 +113,8 @@ if :option:`platformio run --environment` option is not specified.
|
||||
:ref:`projectconf_pio_env_default` allows to define environments which
|
||||
should be processed by default.
|
||||
|
||||
Multiple environments are allowed if they are separated with ", "
|
||||
(comma+space). For example.
|
||||
Multiple environments are allowed if they *are separated with ", "
|
||||
(comma+space)*. For example.
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
@ -225,6 +225,21 @@ that folder is located in the root of project.
|
||||
This option can be overridden by global environment variable
|
||||
:envvar:`PLATFORMIO_LIBDEPS_DIR`.
|
||||
|
||||
``lib_extra_dirs``
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. versionadded:: 3.2
|
||||
|
||||
A list with global extra directories for a project where :ref:`ldf` will look
|
||||
for libraries.
|
||||
|
||||
This option has the same behavior as :ref:`projectconf_lib_extra_dirs` option
|
||||
for a specific build environment defined in ``[env:]`` section. The main
|
||||
difference is that the option that is defined in ``[platofrmio]`` section
|
||||
will be applied automatically for all ``[env:]`` sections.
|
||||
|
||||
For the possible values and examples please follow to :ref:`projectconf_lib_extra_dirs`.
|
||||
|
||||
.. _projectconf_pio_src_dir:
|
||||
|
||||
``src_dir``
|
||||
@ -381,7 +396,7 @@ Examples:
|
||||
|
||||
:ref:`frameworks` name.
|
||||
|
||||
The multiple frameworks are allowed, split them with comma+space ", ".
|
||||
The multiple frameworks are allowed, *split them with comma+space ", "*.
|
||||
|
||||
.. _projectconf_env_board:
|
||||
|
||||
@ -735,7 +750,7 @@ Library options
|
||||
|
||||
Specify project dependencies that should be installed automatically to
|
||||
:ref:`projectconf_pio_libdeps_dir` before environment processing.
|
||||
Multiple dependencies are allowed (multi-lines or separated with comma+space ", ").
|
||||
Multiple dependencies are allowed (*multi-lines or separated with comma+space ", "*).
|
||||
|
||||
If you have multiple build environments that depend on the same libraries,
|
||||
you can use :ref:`projectconf_dynamic_vars` to use common configuration.
|
||||
@ -784,7 +799,7 @@ Specify libraries which should be ignored by Library Dependency Finder.
|
||||
The correct value for this option is library name (not
|
||||
folder name). In the most cases, library name is pre-defined in manifest file
|
||||
(:ref:`library_config`, ``library.properties``, ``module.json``). The multiple
|
||||
library names are allowed, split them with comma+space ", ".
|
||||
library names are allowed, *split them with comma+space ", "*.
|
||||
|
||||
Example:
|
||||
|
||||
@ -803,8 +818,8 @@ Example:
|
||||
Please make sure to read :ref:`ldf` guide first.
|
||||
|
||||
A list with extra directories/storages where :ref:`ldf` will
|
||||
look for dependencies. Multiple paths are allowed. Please separate them
|
||||
using comma+space ", ".
|
||||
look for dependencies. Multiple paths are allowed. *Please separate them
|
||||
using comma+space ", "*.
|
||||
|
||||
This option can be set by global environment variable
|
||||
:envvar:`PLATFORMIO_LIB_EXTRA_DIRS`.
|
||||
@ -865,8 +880,8 @@ Test options
|
||||
Please make sure to read :ref:`unit_testing` guide first.
|
||||
|
||||
Ignore :ref:`unit_testing` tests where the name matches specified patterns.
|
||||
Multiple names are allowed. Please separate them using comma+space ", ". Also,
|
||||
you can ignore some tests using :option:`platformio test --ignore` command.
|
||||
Multiple names are allowed. *Please separate them using comma+space ", "*.
|
||||
Also, you can ignore some tests using :option:`platformio test --ignore` command.
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
@ -126,7 +126,15 @@ for opt in ("PIOFRAMEWORK", "LIB_DEPS", "LIB_IGNORE", "LIB_EXTRA_DIRS"):
|
||||
continue
|
||||
env[opt] = [l.strip() for l in env[opt].split(", ") if l.strip()]
|
||||
|
||||
# Configure extra library source directories for LDF
|
||||
if util.get_project_optional_dir("lib_extra_dirs"):
|
||||
env.Prepend(LIBSOURCE_DIRS=[
|
||||
l.strip()
|
||||
for l in util.get_project_optional_dir("lib_extra_dirs").split(", ")
|
||||
if l.strip()
|
||||
])
|
||||
env.Prepend(LIBSOURCE_DIRS=env.get("LIB_EXTRA_DIRS", []))
|
||||
|
||||
env.LoadPioPlatform(commonvars)
|
||||
|
||||
env.SConscriptChdir(0)
|
||||
|
@ -345,7 +345,7 @@ def check_project_defopts(config):
|
||||
if not config.has_section("platformio"):
|
||||
return True
|
||||
known = ("home_dir", "lib_dir", "libdeps_dir", "src_dir", "envs_dir",
|
||||
"data_dir", "test_dir", "env_default")
|
||||
"data_dir", "test_dir", "env_default", "lib_extra_dirs")
|
||||
unknown = set([k for k, _ in config.items("platformio")]) - set(known)
|
||||
if not unknown:
|
||||
return True
|
||||
|
@ -175,26 +175,33 @@ def pioversion_to_intstr():
|
||||
return [int(i) for i in vermatch.group(1).split(".")[:3]]
|
||||
|
||||
|
||||
def _get_projconf_option_dir(name, default=None):
|
||||
_env_name = "PLATFORMIO_%s" % name.upper()
|
||||
if _env_name in os.environ:
|
||||
return os.getenv(_env_name)
|
||||
def get_project_optional_dir(name, default=None):
|
||||
data = None
|
||||
var_name = "PLATFORMIO_%s" % name.upper()
|
||||
if var_name in os.environ:
|
||||
data = os.getenv(var_name)
|
||||
else:
|
||||
try:
|
||||
config = load_project_config()
|
||||
if (config.has_section("platformio") and
|
||||
config.has_option("platformio", name)):
|
||||
data = config.get("platformio", name)
|
||||
except exception.NotPlatformIOProject:
|
||||
pass
|
||||
|
||||
try:
|
||||
config = load_project_config()
|
||||
if (config.has_section("platformio") and
|
||||
config.has_option("platformio", name)):
|
||||
option_dir = config.get("platformio", name)
|
||||
if option_dir.startswith("~"):
|
||||
option_dir = expanduser(option_dir)
|
||||
return abspath(option_dir)
|
||||
except exception.NotPlatformIOProject:
|
||||
pass
|
||||
return default
|
||||
if not data:
|
||||
return default
|
||||
|
||||
items = []
|
||||
for item in data.split(", "):
|
||||
if item.startswith("~"):
|
||||
item = expanduser(item)
|
||||
items.append(abspath(item))
|
||||
return ", ".join(items)
|
||||
|
||||
|
||||
def get_home_dir():
|
||||
home_dir = _get_projconf_option_dir("home_dir",
|
||||
home_dir = get_project_optional_dir("home_dir",
|
||||
join(expanduser("~"), ".platformio"))
|
||||
|
||||
if "windows" in get_systype():
|
||||
@ -241,30 +248,30 @@ def is_platformio_project(project_dir=None):
|
||||
|
||||
|
||||
def get_projectlib_dir():
|
||||
return _get_projconf_option_dir("lib_dir", join(get_project_dir(), "lib"))
|
||||
return get_project_optional_dir("lib_dir", join(get_project_dir(), "lib"))
|
||||
|
||||
|
||||
def get_projectlibdeps_dir():
|
||||
return _get_projconf_option_dir("libdeps_dir",
|
||||
return get_project_optional_dir("libdeps_dir",
|
||||
join(get_project_dir(), ".piolibdeps"))
|
||||
|
||||
|
||||
def get_projectsrc_dir():
|
||||
return _get_projconf_option_dir("src_dir", join(get_project_dir(), "src"))
|
||||
return get_project_optional_dir("src_dir", join(get_project_dir(), "src"))
|
||||
|
||||
|
||||
def get_projecttest_dir():
|
||||
return _get_projconf_option_dir("test_dir",
|
||||
return get_project_optional_dir("test_dir",
|
||||
join(get_project_dir(), "test"))
|
||||
|
||||
|
||||
def get_projectboards_dir():
|
||||
return _get_projconf_option_dir("boards_dir",
|
||||
return get_project_optional_dir("boards_dir",
|
||||
join(get_project_dir(), "boards"))
|
||||
|
||||
|
||||
def get_projectpioenvs_dir(force=False):
|
||||
path = _get_projconf_option_dir("envs_dir",
|
||||
path = get_project_optional_dir("envs_dir",
|
||||
join(get_project_dir(), ".pioenvs"))
|
||||
try:
|
||||
if not isdir(path):
|
||||
@ -283,7 +290,7 @@ URL=http://docs.platformio.org/en/stable/projectconf.html#envs-dir
|
||||
|
||||
|
||||
def get_projectdata_dir():
|
||||
return _get_projconf_option_dir("data_dir",
|
||||
return get_project_optional_dir("data_dir",
|
||||
join(get_project_dir(), "data"))
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user