This is the list of changes to scikit-build between each release. For full details, see the commit logs at http://github.com/scikit-build/scikit-build
- Add support for passing :ref:`CMake configure options <usage_cmake_configure_options>` like -DFOO:STRING:bar as global setuptools or pip options.
- Add support for building project using PyPy or PyPy3. See https://pypy.org See :issue:`407`.
- Add support for OS/400 (now known as IBM i). Thanks :user:`jwoehr` for the contribution. See :issue:`444`.
- Display CMake command used to configure the project. Thanks :user:`native-api` for the contribution. See :issue:`443`.
- CMake modules:
- Improve CMake module :doc:`/cmake-modules/F2PY` adding add_f2py_target() CMake function allowing to generate *-f2pywrappers.f and *module.c files from *.pyf files. Thanks :user:`xoviat` for the contribution.
- Update CMake module :doc:`/cmake-modules/PythonExtensions` adding add_python_library() and add_python_extension(). Thanks :user:`xoviat` for the contribution.
- Fix unclosed file resource in :meth:`skbuild.cmaker.CMaker.check_for_bad_installs`. Thanks :user:`Nic30` for the suggestion. See :issue:`429`.
- Update CMake module :doc:`/cmake-modules/PythonExtensions`:
- Ensure correct suffix is used for compiled python module on windows. See :issue:`383`.
- Fix warning using EXT_SUFFIX config variable instead of deprecated SO variable. See :issue:`381`.
- Honor the MACOSX_DEPLOYMENT_TARGET environment variable if it is defined on macOS. Thanks :user:`certik` for the contribution. See :issue:`441`.
- Fix CMake module :doc:`/cmake-modules/F2PY` to ensure the f2py executable specific to the python version being used is found. See :issue:`449`. Thanks :user:`bnavigator` for the contribution.
- Replace platform.linux_distribution() which was removed in Python 3.8 by a call to distro.id(). This adds the distro package as dependency. See :issue:`458`. Thanks :user:`bnavigator` for the contribution.
- Add :doc:`/notes` section to the For maintainers top-level category that includes a comparison between sysconfig and distutils.sysconfig modules.
- Remove obsolete comment in cmaker.py. See :issue:`439`. Thanks :user:`isuruf`
- Continuous Integration
- Update Azure Pipelines configuration for running tests using PyPy3 on Linux. Thanks :user:`mattip` for the contribution. See :issue:`418`.
- Improve message displayed when discovering a working environment for building projects.
For example, instead of displaying
-- Trying "Ninja" generator
, it now displays a message like-- Trying "Ninja (Visual Studio 15 2017 Win64 v140)" generator
.
- Checking generator candidates can now handle handle paths and binaries with
spaces, so that
setup.py --cmake-executable "C:/Program Files (x86)/cmake/cmake.exe"
works as expected. Contributed by :user:`jokva`. See :issue:`400`. - Fix sdist command to ensure symlinks in original source tree are maintained. Contributed by :user:`anibali`. See :issue:`401`.
- Ensure use of bdist_egg or bdist_rpm commands trigger build using cmake.
- Fix default value returned by :func:`skbuild.constants.skbuild_plat_name()` on macOS. See :issue:`417`.
- Fix typo in example associated with :doc:`/cmake-modules/PythonExtensions`. Thanks :user:`eirrgang` for the contribution.
- Update :doc:`/make_a_release` section to include Conda: Step-by-step release guide.
- Introduce
check_sdist_content()
and fix tests that are checking content of sdist to account for changes introduced in Python 3.8 and backported to python 2.7, 3.6 and 3.7. The changes introduced in python/cpython#9419 adds directory entries to ZIP files created by distutils. Thanks :user:`anibali` for the contribution. See :issue:`404`. - Fix
check_wheel_content()
to consider changes in0.33.1 < wheel.__version__ < 0.33.4
where directory entries are included when building wheel. See pypa/wheel#294 <pypa/wheel#294>. - Fix reporting of
AssertionError
raised incheck_wheel_content()
function by relocating the source code into a dedicated moduletests.pytest_helpers
and by adding aconftest.py
configuration file registering it for pytest assertion rewriting. See https://docs.pytest.org/en/latest/writing_plugins.html#assertion-rewriting and :issue:`403`. - Fix
test_generator_selection
when building with "Visual C++ for Python 2.7" installed for all users. This addresses failure associated withwin_c_compilervs2008cxx_compilervs2008python2.7
when running test in scikit-build-feedstock where "Visual C++ for Python 2.7" is installed using (vcpython27 chocolatey package. - Continuous Integration
- Add support for Azure Pipelines for Python 3.7 32-bit and 64-bit
- AppVeyor: Disable test for Python 3.7 32-bit and 64-bit.
- CircleCI: Update version of docker images from jessie to stretch. This addresses issue circleci/circleci-images#370.
- TravisCI: Remove obsolete Python 3.4 testing. It reached end-of-life on March 18 2019.
- Add support for building distutils based extensions associated with
ext_modules
setup keyword along side skbuild based extensions. This means usingbuild_ext
command (and associated--inplace
argument) is supported. Thanks :user:`Erotemic` for the contribution. See :issue:`284`.
- Fix build of wheels if path includes spaces. See issue :issue:`375`. Thanks :user:`padraic-padraic` for the contribution.
- Ensure wheel platform name is correctly set when providing custom
CMAKE_OSX_DEPLOYMENT_TARGET
andCMAKE_OSX_ARCHITECTURES
values are provided. Thanks :user:`nonhermitian` for the contribution. See :issue:`377`. - Fix testing with recent version of pytest by updating the pytest-runner requirements expression in setup.py. Thanks :user:`mackelab` for the contribution.
- Fix
bdist_wheel
command to supportwheel >= 0.32.0
. Thanks :user:`fbudin69500` for reporting issue :issue:`360`.
- Fix
test_distribution.py
updating use ofPath.files()
and requiringpath.py>=11.5.0
.
- Introduced :const:`skbuild.constants.CMAKE_DEFAULT_EXECUTABLE` to facilitate distribution of scikit-build in package manager like Nixpkgs where all paths to dependencies are hardcoded. Suggested by :user:`FRidh`.
- Setup keywords:
- If not already set,
zip_safe
option is set toFalse
. Suggested by :user:`blowekamp`.
- If not already set,
- Add support for
--skip-generator-test
when a generator is explicitly selected using--generator
. This allows to speed up overall build when the build environment is known.
- Fix support for building project with CMake source directory outside of the
setup.py
directory. See :issue:`335` fixed by :user:`massich`. - Fix reading of .cmake files having any character not available in CP-1252 (the default code page on windows). See :issue:`334` fixed by :user:`bgermann`.
- Fix parsing of macOS specific arguments like
--plat-name macosx-X.Y-x86_64
and-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=X.Y
and ensure that the ones specified as command line arguments override the default values or the one hard-coded in thecmake_args
setup keyword. Thanks :user:`yonip` for the help addressing :issue:`342`. - Support case where relative directory set in package_dir has an ending slash.
For example, specifying
package_dir={'awesome': 'src/awesome/'},
is now properly handled. - Fix support for isolated build environment ensuring the CMake project is reconfigured
when
pip install -e .
is called multiple times. See :issue:`352`.
- README: Update overall download count.
- Add logo and update sphinx configuration. Thanks :user:`SteveJordanKW` for the design work.
- Update :ref:`CMake installation <installation_cmake>` section. Thanks :user:`thewtex`.
- Add :ref:`support_isolated_build` section.
- Add :ref:`optimized_incremental_build` section.
- Update :ref:`usage documentation <usage-setuptools_options>` to specify that
--universal
and--python-tags
have no effect. Thanks :user:`bgermann` for the suggestion. See :issue:`353`. - Simplify documentation merging Extension Build System section with the Advanced Usage section. Thanks :user:`thewtex` for the suggestion.
- Add
check_wheel_content
utility function. - Skip test_setup_requires_keyword_include_cmake if running in conda test environment or if https://pypi.org is not reachable. Suggested by :user:`Luthaf`.
- Continuous Integration
- TravisCI:
- Remove testing of linux now covered by CircleCI, add testing for Python 3.5, 3.6 and 3.7 on macOS.
- Ensure system python uses latest version of pip
- AppVeyor, CircleCI: Add testing for Python 3.7
- Remove uses of unneeded
$<RUN_ENV>
command wrapper. scikit-build should already take care of setting up the expected environment. - Always install up-to-date scikit-ci and scikit-ci-addons.
- Simplify release process managing versioning with python-versioneer and update :ref:`making_a_release` documentation.
- TravisCI:
- Fix description and classifier list in setup.py.
- Fix link in README.
- Faster incremental build by re-configuring the project only if needed. This was achieved by (1) adding support
to retrieve the environment mapping associated with the generator set in the
CMakeCache.txt
file, (2) introducing a :func:`CMake spec file <skbuild.constants.CMAKE_SPEC_FILE()>` storing the CMake version as well as the the CMake arguments and (3) re-configuring only if either the generator or the CMake specs change. Thanks :user:`xoviat` for the contribution. See :issue:`301`. - CMake modules:
- CMake module :doc:`/cmake-modules/PythonExtensions`: Set symbol visibility to export only the module init function. This applies to GNU and MSVC compilers. Thanks :user:`xoviat`. See :issue:`299`.
- Add CMake module :doc:`/cmake-modules/F2PY` useful to find the
f2py
executable for building Python extensions with Fortran. Thanks to :user:`xoviat` for moving forward with the integration. Concept for the module comes from the work of :user:`scopatz` done in PyNE project. See :issue:`273`. - Update CMake module :doc:`/cmake-modules/NumPy` setting variables
NumPy_CONV_TEMPLATE_EXECUTABLE
andNumPy_FROM_TEMPLATE_EXECUTABLE
. Thanks :user:`xoviat` for the contribution. See :issue:`278`.
- Setup keywords:
- Add support for :ref:`cmake_languages <usage-cmake_languages>` setup keyword.
- Add support for
include_package_data
andexclude_package_data
setup keywords as well as parsing ofMANIFEST.in
. See :issue:`315`. Thanks :user:`reiver-dev` for reporting the issue. - Add support for
cmake_minimum_required_version
setup keyword. See :issue:`312`. Suggested by :user:`henryiii`. - Install cmake if found in
setup_requires
list. See :issue:`313`. Suggested by :user:`henryiii`.
- Add support for
--cmake-executable
scikit-build command line option. Thanks :user:`henryborchers` for the suggestion. See :issue:`317`. - Use
_skbuild/platform-X.Y
instead of_skbuild
to build package. This allows to have a different build directory for each python version. Thanks :user:`isuruf` for the suggestion and :user:`xoviat` for contributing the feature. See :issue:`283`. - Run cmake and
develop
command when commandtest
is executed.
- Fix support of
--hide-listing
when building wheel. - CMake module :doc:`/cmake-modules/Cython`: Fix escaping of spaces associated with
CYTHON_FLAGS
when provided as command line arguments to the cython executable through CMake cache entries. See :issue:`265` fixed by :user:`neok-m4700`. - Ensure package data files specified in the
setup()
function usingpackage_data
keyword are packaged and installed. - Support specifying a default directory for all packages not already associated with one using syntax like
package_dir={'':'src'}
insetup.py
. Thanks :user:`benjaminjack` for reporting the issue. See :issue:`274`. - Improve
--skip-cmake
command line option support so that it can re-generate a source distribution or a python wheel without having to run cmake executable to re-configure and build. Thanks to :user:`jonwoodring` for reporting the issue on the mailing list. - Set
skbuild <version>
as wheel generator. See PEP-0427 and :issue:`191`. - Ensure
MANIFEST.in
is considered when generating source distribution. Thanks :user:`seanlis` for reporting the problem and providing an initial patch, and thanks :user:`henryiii` for implementing the corresponding test. See :issue:`260`. - Support generation of source distribution for git repository having submodules. This works only for version
of git >= 2.11 supporting the
--recurse-submodules
option withls-files
command.
- Tests using Python 3.3.x were removed and support for this version of python is not guaranteed anymore. Support was
removed following the deprecation warnings reported by version 0.31.0 of wheel package, these were causing the tests
test_source_distribution
andtest_wheel
to fail.
Speedup execution of tests that do not require any CMake language enabled. This is achieved by (1) introducing the test project
hello-no-language
, (2) updating test utility functionsexecute_setup_py
andproject_setup_py_test
to accept the optional parameterdisable_languages_test
allowing to skip unneeded compiler detection in test project used to verify that the selected CMake generator works as expected, and (3) updating relevant tests to use the new test project and parameters.Overall testing time on all continuous integration services was reduced:
- AppVeyor:
- from ~16 to ~7 minutes for 64 and 32-bit Python 2.7 tests done using Visual Studio Express 2008
- from more than 2 hours to ~50 minutes for 64 and 32-bit Python 3.5 tests done using Visual Studio 2015. Improvement specific
to Python 3.x were obtained by caching the results of slow calls to
distutils.msvc9compiler.query_vcvarsall
(for Python 3.3 and 3.4) anddistutils._msvccompiler._get_vc_env
(for Python 3.5 and above). These functions were called multiple times to create the list of :class:`skbuild.platform_specifics.windows.CMakeVisualStudioCommandLineGenerator` used in :class:`skbuild.platform_specifics.windows.WindowsPlatform`.
- CircleCI: from ~7 to ~5 minutes.
- TravisCI: from ~21 to ~10 minutes.
- AppVeyor:
Update maximum line length specified in flake8 settings from 80 to 120 characters.
Add
prepend_sys_path
utility function.Ensure that the project directory is prepended to
sys.path
when executing test building sample project with the help ofexecute_setup_py
function.Add codecov config file for better defaults and prevent associated Pull Request checks from reporting failure when coverage only slightly changes.
- Improve internal API documentation:
- Split usage documentation into a Basic Usage and Advanced Usage sections.
- Fix miscellaneous pylint warnings.
- Ensure CMake arguments passed to scikit-build and starting with
-DCMAKE_*
are passed to the test project allowing to determine which generator to use. For example, this ensures that arguments like-DCMAKE_MAKE_PROGRAM:FILEPATH=/path/to/program
are passed. See :issue:`256`.
- Update :doc:`/make_a_release` section including instructions to update
README.rst
with up-to-date pypi download statistics based on Google big table.
- Improve
py_modules
support: Python modules generated by CMake are now properly included in binary distribution. - Improve developer mode support for
py_modules
generated by CMake.
- Do not implicitly install python modules when the beginning of their name
match a package explicitly listed. For example, if a project has a package
foo/__init__.py
and a modulefooConfig.py
, and only packagefoo
was listed insetup.py
,fooConfig.py
is not installed anymore. - CMake module :doc:`/cmake-modules/targetLinkLibrariesWithDynamicLookup`: Fix the caching of dynamic lookup variables. See :issue:`240` fixed by :user:`blowekamp`.
- wheel: As suggested by :user:`thewtex`, unpinning version of the package
by requiring
>=0.29.0
instead of==0.29.0
will avoid uninstalling a newer version of wheel package on up-to-date system.
- Add a command line :ref:`CMake Options <usage_cmake_options>` section to :doc:`Usage <\usage>`.
- Fix :ref:`table <Visual Studio>` listing Visual Studio IDE version and corresponding with CPython version in :doc:`/generators`.
- Improve :doc:`/make_a_release` section.
- Extend
test_hello
,test_setup
, andtest_sdist_hide_listing
to (1) check if python modules are packaged into source and wheel distributions and (2) check if python modules are copied into the source tree when developer mode is enabled.
- Fix :meth:`skbuild.setuptools_wrap.strip_package` to handle empty package.
- Teach :meth:`skbuild.command.build_py.build_py.find_modules` function to look
for py_module file in
CMAKE_INSTALL_DIR
. - Teach :class:`skbuild.utils.PythonModuleFinder` to search for python module in the CMake install tree.
- Update :meth:`skbuild.setuptools_wrap._consolidate` to copy file into the CMake tree only if it exists.
- Update :meth:`skbuild.setuptools_wrap._copy_file` to create directory only if there is one associated with the destination file.
- Ensure file copied in "develop" mode have "mode bits" maintained.
- Improve user experience by running CMake only if needed. See :issue:`207`
- Add support for :ref:`cmake_with_sdist <usage-cmake_with_sdist>` setup keyword argument.
- Add support for
--force-cmake
and--skip-cmake
global :ref:`setup command-line options <usage-setuptools_options>`. - scikit-build conda-forge recipe added by :user:`isuruf`. See conda-forge/staged-recipes#1989
- Add support for development mode. (:issue:`187`).
- Improved :doc:`/generators` selection:
- If available, uses :ref:`Ninja` build system generator on all platforms. An advantages is that ninja automatically parallelizes the build based on the number of CPUs.
- Automatically set the expected Visual Studio environment when
Ninja
orNMake Makefiles
generators are used.- Support Microsoft Visual C++ Compiler for Python 2.7. See :issue:`216`.
- Prompt for user to install the required compiler if it is not available. See :issue:`27`.
- Improve :doc:`/cmake-modules/targetLinkLibrariesWithDynamicLookup` CMake Module extending
the API of
check_dynamic_lookup
function:
- Update long signature:
<LinkFlagsVar>
is now optional- Add support for short signature:
check_dynamic_lookup(<ResultVar>)
. See SimpleITK/SimpleITK#80.
- Fix scikit-build source distribution and add test. See :issue:`214` Thanks :user:`isuruf` for reporting the issue.
- Support building extension within a virtualenv on windows. See :issue:`119`.
- add :doc:`/generators` section
- add :doc:`/changes` section
- allow github issues and users to easily be referenced using
:issue:`XY`
and:user:`username`
markups. This functionality is enabled by the sphinx-issue sphinx extension - make_a_release: Ensure uploaded distributions are signed
- usage:
- Add empty cross-compilation / wheels building sections
- Add :ref:`Why should I use scikit-build ? <why>`
- Add :ref:`Setup options <usage-setup_options>` section
- hacking:
- Add :ref:`internal_api` section generated using sphinx-apidoc.
- Add :ref:`internal_cmake_modules` to document :doc:`/cmake-modules/targetLinkLibrariesWithDynamicLookup` CMake module.
- setuptools: As suggested by :user:`mivade` in :issue:`212`, remove the
hard requirement for
==28.8.0
and require version>= 28.0.0
. This allows to "play" nicely with conda where it is problematic to update the version of setuptools. See pypa/pip#2751 and ContinuumIO/anaconda-issues#542.
- Improve "push_dir" tests to not rely on build directory name. Thanks :user:`isuruf` for reporting the issue.
- travis/install_pyenv: Improve MacOSX build time updating scikit-ci-addons
- Add
get_cmakecache_variables
utility function.
- :meth:`skbuild.cmaker.CMaker.configure`: Change parameter name from
generator_id
togenerator_name
. This is consistent with how generator are identified in CMake documentation. This change breaks backward compatibility. - :meth:`skbuild.platform_specifics.abstract.CMakePlatform.get_best_generator`: Change parameter name
from
generator
togenerator_name
. Note that this function is also directly importable from :mod:`skbuild.platform_specifics`. This change breaks backward compatibility. - :class:`skbuild.platform_specifics.abstract.CMakeGenerator`: This class allows to handle generators as sophisticated object instead of simple string. This is done anticipating the support for CMAKE_GENERATOR_PLATFORM and CMAKE_GENERATOR_TOOLSET. Note also that the class is directly importable from :mod:`skbuild.platform_specifics` and is now returned by :meth:`skbuild.platform_specifics.get_best_generator`. This change breaks backward compatibility.
- appveyor.yml:
- Remove unused "on_failure: event logging" and "notifications: GitHubPullRequest"
- Remove unused SKIP env variable
- Add support for
--hide-listing
option
- allow to build distributions without displaying files being included
- useful when building large project on Continuous Integration service limiting the amount of log produced by the build
- CMake module:
skbuild/resources/cmake/FindPythonExtensions.cmake
- Function
python_extension_module
: add support for module suffix
- Do not package python modules under "purelib" dir in non-pure wheel
- CMake module:
skbuild/resources/cmake/targetLinkLibrariesWithDynamicLookup.cmake
:
- Fix the logic checking for cross-compilation (the regression was introduced by :issue:`51` and :issue:`47`
- It configure the text project setting CMAKE_ENABLE_EXPORTS to ON. Doing so ensure the executable compiled in the test exports symbols (if supported by the underlying platform)
- Add short note explaining how to include scikit-build CMake module
- Move "Controlling CMake using scikit-build" into a "hacking" section
- Add initial version of "extension_build_system" documentation
- tests/samples: Simplify project removing unneeded install rules and file copy
- Simplify continuous integration
- use scikit-ci and scikit-ci-addons
- speed up build setting up caching
- Makefile:
- Fix coverage target
- Add docs-only target allowing to regenerate the Sphinx documentation without opening a new page in the browser.
- Improve support for "pure", "CMake" and "hybrid" python package
- a "pure" package is a python package that have all files living in the project source tree
- an "hybrid" package is a python package that have some files living in the project source tree and some files installed by CMake
- a "CMake" package is a python package that is fully generated and installed by CMake without any of his files existing in the source tree
- Add support for source distribution. See :issue:`84`
- Add support for setup arguments specific to scikit-build:
cmake_args
: additional option passed to CMakecmake_install_dir
: relative directory where the CMake project being built should be installedcmake_source_dir
: location of the CMake project
- Add CMake module
FindNumPy.cmake
- Automatically set
package_dir
to reasonable defaults - Support building project without CMakeLists.txt
- Fix dispatch of arguments to setuptools, CMake and build tool. See :issue:`118`
- Force binary wheel generation. See :issue:`106`
- Fix support for
py_modules
(6716723) - Do not raise error if calling "clean" command twice
- Improvement of documentation published on http://scikit-build.readthedocs.io/en/latest/
- Add docstrings for most of the modules, classes and functions
- Ensure each test run in a dedicated temporary directory
- Add tests to raise coverage from 70% to 91%
- Refactor CI testing infrastructure introducing CI drivers written in python for AppVeyor, CircleCI and TravisCI
- Switch from
nose
topy.test
- Relocate sample projects into a dedicated home: https://github.com/scikit-build/scikit-build-sample-projects
- Refactor commands introducing
set_build_base_mixin
andnew_style
- Remove unused code