@ -12,6 +12,16 @@ import zipfile
@@ -12,6 +12,16 @@ import zipfile
DIR = os . path . abspath ( os . path . dirname ( __file__ ) )
MAIN_DIR = os . path . dirname ( os . path . dirname ( DIR ) )
PKGCONFIG = """ \
prefix = $ { { pcfiledir } } / . . / . . /
includedir = $ { { prefix } } / include
Name : pybind11
Description : Seamless operability between C + + 11 and Python
Version : { VERSION }
Cflags : - I $ { { includedir } }
"""
main_headers = {
" include/pybind11/attr.h " ,
@ -59,6 +69,10 @@ cmake_files = {
@@ -59,6 +69,10 @@ cmake_files = {
" share/cmake/pybind11/pybind11Tools.cmake " ,
}
pkgconfig_files = {
" share/pkgconfig/pybind11.pc " ,
}
py_files = {
" __init__.py " ,
" __main__.py " ,
@ -69,7 +83,7 @@ py_files = {
@@ -69,7 +83,7 @@ py_files = {
}
headers = main_headers | detail_headers | stl_headers
src_files = headers | cmake_files
src_files = headers | cmake_files | pkgconfig_files
all_files = src_files | py_files
@ -82,6 +96,7 @@ sdist_files = {
@@ -82,6 +96,7 @@ sdist_files = {
" pybind11/share " ,
" pybind11/share/cmake " ,
" pybind11/share/cmake/pybind11 " ,
" pybind11/share/pkgconfig " ,
" pyproject.toml " ,
" setup.cfg " ,
" setup.py " ,
@ -101,22 +116,25 @@ local_sdist_files = {
@@ -101,22 +116,25 @@ local_sdist_files = {
}
def read_tz_file ( tar : tarfile . TarFile , name : str ) - > bytes :
start = tar . getnames ( ) [ 0 ] + " / "
inner_file = tar . extractfile ( tar . getmember ( f " { start } { name } " ) )
assert inner_file
with contextlib . closing ( inner_file ) as f :
return f . read ( )
def normalize_line_endings ( value : bytes ) - > bytes :
return value . replace ( os . linesep . encode ( " utf-8 " ) , b " \n " )
def test_build_sdist ( monkeypatch , tmpdir ) :
monkeypatch . chdir ( MAIN_DIR )
out = subprocess . check_output (
[
sys . executable ,
" -m " ,
" build " ,
" --sdist " ,
" --outdir " ,
str ( tmpdir ) ,
]
subprocess . run (
[ sys . executable , " -m " , " build " , " --sdist " , f " --outdir= { tmpdir } " ] , check = True
)
if hasattr ( out , " decode " ) :
out = out . decode ( )
( sdist , ) = tmpdir . visit ( " *.tar.gz " )
@ -125,25 +143,17 @@ def test_build_sdist(monkeypatch, tmpdir):
@@ -125,25 +143,17 @@ def test_build_sdist(monkeypatch, tmpdir):
version = start [ 9 : - 1 ]
simpler = { n . split ( " / " , 1 ) [ - 1 ] for n in tar . getnames ( ) [ 1 : ] }
with contextlib . closing (
tar . extractfile ( tar . getmember ( start + " setup.py " ) )
) as f :
setup_py = f . read ( )
with contextlib . closing (
tar . extractfile ( tar . getmember ( start + " pyproject.toml " ) )
) as f :
pyproject_toml = f . read ( )
with contextlib . closing (
tar . extractfile (
tar . getmember (
start + " pybind11/share/cmake/pybind11/pybind11Config.cmake "
)
)
) as f :
contents = f . read ( ) . decode ( " utf8 " )
assert ' set(pybind11_INCLUDE_DIR " $ {PACKAGE_PREFIX_DIR} /include " ) ' in contents
setup_py = read_tz_file ( tar , " setup.py " )
pyproject_toml = read_tz_file ( tar , " pyproject.toml " )
pkgconfig = read_tz_file ( tar , " pybind11/share/pkgconfig/pybind11.pc " )
cmake_cfg = read_tz_file (
tar , " pybind11/share/cmake/pybind11/pybind11Config.cmake "
)
assert (
' set(pybind11_INCLUDE_DIR " $ {PACKAGE_PREFIX_DIR} /include " ) '
in cmake_cfg . decode ( " utf-8 " )
)
files = { f " pybind11/ { n } " for n in all_files }
files | = sdist_files
@ -154,9 +164,9 @@ def test_build_sdist(monkeypatch, tmpdir):
@@ -154,9 +164,9 @@ def test_build_sdist(monkeypatch, tmpdir):
with open ( os . path . join ( MAIN_DIR , " tools " , " setup_main.py.in " ) , " rb " ) as f :
contents = (
string . Template ( f . read ( ) . decode ( ) )
string . Template ( f . read ( ) . decode ( " utf-8 " ) )
. substitute ( version = version , extra_cmd = " " )
. encode ( )
. encode ( " utf-8 " )
)
assert setup_py == contents
@ -164,25 +174,19 @@ def test_build_sdist(monkeypatch, tmpdir):
@@ -164,25 +174,19 @@ def test_build_sdist(monkeypatch, tmpdir):
contents = f . read ( )
assert pyproject_toml == contents
simple_version = " . " . join ( version . split ( " . " ) [ : 3 ] )
pkgconfig_expected = PKGCONFIG . format ( VERSION = simple_version ) . encode ( " utf-8 " )
assert normalize_line_endings ( pkgconfig ) == pkgconfig_expected
def test_build_global_dist ( monkeypatch , tmpdir ) :
monkeypatch . chdir ( MAIN_DIR )
monkeypatch . setenv ( " PYBIND11_GLOBAL_SDIST " , " 1 " )
out = subprocess . check_output (
[
sys . executable ,
" -m " ,
" build " ,
" --sdist " ,
" --outdir " ,
str ( tmpdir ) ,
]
subprocess . run (
[ sys . executable , " -m " , " build " , " --sdist " , " --outdir " , str ( tmpdir ) ] , check = True
)
if hasattr ( out , " decode " ) :
out = out . decode ( )
( sdist , ) = tmpdir . visit ( " *.tar.gz " )
with tarfile . open ( str ( sdist ) , " r:gz " ) as tar :
@ -190,15 +194,17 @@ def test_build_global_dist(monkeypatch, tmpdir):
@@ -190,15 +194,17 @@ def test_build_global_dist(monkeypatch, tmpdir):
version = start [ 16 : - 1 ]
simpler = { n . split ( " / " , 1 ) [ - 1 ] for n in tar . getnames ( ) [ 1 : ] }
with contextlib . closing (
tar . extractfile ( tar . getmember ( start + " setup.py " ) )
) as f :
setup_py = f . read ( )
setup_py = read_tz_file ( tar , " setup.py " )
pyproject_toml = read_tz_file ( tar , " pyproject.toml " )
pkgconfig = read_tz_file ( tar , " pybind11/share/pkgconfig/pybind11.pc " )
cmake_cfg = read_tz_file (
tar , " pybind11/share/cmake/pybind11/pybind11Config.cmake "
)
with contextlib . closing (
tar . extractfile ( tar . getmember ( start + " pyproject.toml " ) )
) as f :
pyproject_toml = f . read ( )
assert (
' set(pybind11_INCLUDE_DIR " $ {PACKAGE_PREFIX_DIR} /include " ) '
in cmake_cfg . decode ( " utf-8 " )
)
files = { f " pybind11/ { n } " for n in all_files }
files | = sdist_files
@ -209,7 +215,7 @@ def test_build_global_dist(monkeypatch, tmpdir):
@@ -209,7 +215,7 @@ def test_build_global_dist(monkeypatch, tmpdir):
contents = (
string . Template ( f . read ( ) . decode ( ) )
. substitute ( version = version , extra_cmd = " " )
. encode ( )
. encode ( " utf-8 " )
)
assert setup_py == contents
@ -217,12 +223,16 @@ def test_build_global_dist(monkeypatch, tmpdir):
@@ -217,12 +223,16 @@ def test_build_global_dist(monkeypatch, tmpdir):
contents = f . read ( )
assert pyproject_toml == contents
simple_version = " . " . join ( version . split ( " . " ) [ : 3 ] )
pkgconfig_expected = PKGCONFIG . format ( VERSION = simple_version ) . encode ( " utf-8 " )
assert normalize_line_endings ( pkgconfig ) == pkgconfig_expected
def tests_build_wheel ( monkeypatch , tmpdir ) :
monkeypatch . chdir ( MAIN_DIR )
subprocess . check_output (
[ sys . executable , " -m " , " pip " , " wheel " , " . " , " -w " , str ( tmpdir ) ]
subprocess . run (
[ sys . executable , " -m " , " pip " , " wheel " , " . " , " -w " , str ( tmpdir ) ] , check = True
)
( wheel , ) = tmpdir . visit ( " *.whl " )
@ -249,8 +259,8 @@ def tests_build_global_wheel(monkeypatch, tmpdir):
@@ -249,8 +259,8 @@ def tests_build_global_wheel(monkeypatch, tmpdir):
monkeypatch . chdir ( MAIN_DIR )
monkeypatch . setenv ( " PYBIND11_GLOBAL_SDIST " , " 1 " )
subprocess . check_output (
[ sys . executable , " -m " , " pip " , " wheel " , " . " , " -w " , str ( tmpdir ) ]
subprocess . run (
[ sys . executable , " -m " , " pip " , " wheel " , " . " , " -w " , str ( tmpdir ) ] , check = True
)
( wheel , ) = tmpdir . visit ( " *.whl " )