Skip to content

Commit 23f893c

Browse files
authored
Merge pull request #1181 from ericmehl/IECore-Windows-Tests
IECorePython Windows tests
2 parents 7f9d1b1 + 0d3be55 commit 23f893c

39 files changed

+558
-447
lines changed

.github/workflows/main.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ jobs:
8282
buildType: RELEASE
8383
options: .github/workflows/main/options.windows
8484
dependenciesURL: "https://github.com/hypothetical-inc/gafferDependencies/releases/download/3.0.0a1/gafferDependencies-3.0.0a1-Python3-windows.zip"
85+
tests: testCorePython
8586
publish: false
8687

8788
runs-on: ${{ matrix.os }}
@@ -157,10 +158,6 @@ jobs:
157158
scons ${{ matrix.tests }} BUILD_TYPE=${{ matrix.buildType }} OPTIONS=${{ matrix.options }} CXXSTD=c++14 BUILD_CACHEDIR=sconsCache
158159
env:
159160
IECORE_RTLD_GLOBAL: 0
160-
# We have some work to do before we can run the tests
161-
# successfully on Windows. Until then, we satisfy ourselves
162-
# with checking that it at least _builds_.
163-
if: runner.os != 'Windows'
164161

165162
- name: Build Package
166163
run: |

.github/workflows/main/options.windows

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ CXXFLAGS = ["/permissive-", "/D_USE_MATH_DEFINES", "/Zc:externC-"]
2424

2525
LIBPATH = deps + "\\lib"
2626

27+
TEST_LIBPATH = deps + "\\lib"
28+
2729
PYTHON = deps + "\\bin\\python"
2830
PYTHON_INCLUDE_PATH = deps + "\\include"
2931
PYTHON_LINK_FLAGS = ""
@@ -59,5 +61,7 @@ APPLESEED_ROOT = deps + "\\appleseed"
5961
APPLESEED_INCLUDE_PATH = deps + "\\appleseed\\include"
6062
APPLESEED_LIB_PATH = deps + "\\appleseed\\lib"
6163

62-
ENV_VARS_TO_IMPORT = "PATH"
64+
# PATH is needed to locate the MSVC compiler. PROCESSOR_ARCHITECTURE and USERNAME
65+
# are needed by the HeaderGenerator and accompanying tests.
66+
ENV_VARS_TO_IMPORT = "PATH PROCESSOR_ARCHITECTURE USERNAME"
6367

Changes

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
2+
13
10.3.x.x (relative to 10.2.x.x)
24
========
35

@@ -6,6 +8,11 @@ Improvements
68

79
- IECoreArnold : Prepare for multiple universes (#1171)
810

11+
Breaking Changes
12+
----------------
13+
- HeaderGenerator : `machineName`, `systemRelease`, `systemVersion`, may differ from previous versions on Windows. Linux and MacOS are unaffected.
14+
- HeaderGenerator : `nodeName` is no longer converted to all capital letters and may differ from previous versions on Windows. Linux and MacOS are unaffected.
15+
916
10.2.x.x (relative to 10.2.2.0)
1017
========
1118

SConstruct

Lines changed: 48 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -274,19 +274,19 @@ o.Add(
274274

275275
o.Add(
276276
"CPPPATH",
277-
"A colon separated list of paths to search for headers on.",
277+
"A colon (semi-colon on Windows) separated list of paths to search for headers on.",
278278
"",
279279
)
280280

281281
o.Add(
282282
"LIBPATH",
283-
"A colon separated list of paths to search for libraries on.",
283+
"A colon (semi-colon on Windows) separated list of paths to search for libraries on.",
284284
"",
285285
)
286286

287287
o.Add(
288288
"PYTHONPATH",
289-
"A colon separated list of paths to search for python modules on.",
289+
"A colon (semi-colon on Windows) separated list of paths to search for python modules on.",
290290
"",
291291
)
292292

@@ -991,8 +991,8 @@ o.Add(
991991

992992
o.Add(
993993
"TEST_LIBPATH",
994-
"Additional colon separated paths to be prepended to the library path"
995-
"used when running tests.",
994+
"Additional colon separated (semi-colon on Windows) paths to be prepended to the "
995+
"library path used when running tests.",
996996
""
997997
)
998998

@@ -1001,17 +1001,14 @@ if Environment()["PLATFORM"]=="darwin" :
10011001
elif Environment()["PLATFORM"] != "win32":
10021002
libraryPathEnvVar = "LD_LIBRARY_PATH"
10031003
else:
1004-
# Windows. We don't have a library path, but we
1005-
# can't use an empty string for an environment
1006-
# variable name.
1007-
libraryPathEnvVar = "UNUSED_LIBRARY_PATH"
1004+
libraryPathEnvVar = "PATH"
10081005

10091006
o.Add(
10101007
"TEST_LIBRARY_PATH_ENV_VAR",
10111008
"This is a curious one, probably only ever necessary at image engine. It "
10121009
"specifies the name of an environment variable used to specify the library "
10131010
"search paths correctly when running the tests. Defaults to LD_LIBRARY_PATH on "
1014-
"Linux and DYLD_LIBRARY_PATH on OSX.",
1011+
"Linux, DYLD_LIBRARY_PATH on OSX and PATH on Windows.",
10151012
libraryPathEnvVar
10161013
)
10171014

@@ -1036,7 +1033,7 @@ env = Environment(
10361033
)
10371034

10381035
if isinstance( env["LIBPATH"], str ) :
1039-
env["LIBPATH"] = env["LIBPATH"].split( ":" )
1036+
env["LIBPATH"] = env["LIBPATH"].split( os.pathsep )
10401037

10411038
for e in env["ENV_VARS_TO_IMPORT"].split() :
10421039
if e in os.environ :
@@ -1482,25 +1479,32 @@ if pythonModuleEnv["PLATFORM"]=="darwin" :
14821479

14831480
testEnv = env.Clone()
14841481

1485-
testEnvLibPath = ":".join( testEnv["LIBPATH"] )
1482+
testEnvLibPath = os.pathsep.join( testEnv["LIBPATH"] )
14861483
if testEnv["TEST_LIBPATH"] != "" :
1487-
testEnvLibPath = testEnv["TEST_LIBPATH"] + ":" + testEnvLibPath
1484+
testEnvLibPath = testEnv["TEST_LIBPATH"] + os.pathsep + testEnvLibPath
14881485
testEnvLibPath = testEnv.subst( testEnvLibPath )
14891486

1490-
testEnv["ENV"][testEnv["TEST_LIBRARY_PATH_ENV_VAR"]] = testEnvLibPath
1491-
if libraryPathEnvVar :
1492-
testEnv["ENV"][libraryPathEnvVar] = testEnvLibPath
1493-
testEnv["ENV"]["IECORE_OP_PATHS"] = "test/IECore/ops"
1487+
testEnv["ENV"][testEnv["TEST_LIBRARY_PATH_ENV_VAR"]] = os.pathsep.join( [ testEnv["ENV"].get(testEnv["TEST_LIBRARY_PATH_ENV_VAR"], ""), testEnvLibPath ] )
1488+
if testEnv["TEST_LIBRARY_PATH_ENV_VAR"] != libraryPathEnvVar :
1489+
testEnv["ENV"][libraryPathEnvVar] = os.pathsep.join( [ testEnv["ENV"].get(libraryPathEnvVar, ""), testEnvLibPath ] )
1490+
testEnv["ENV"]["IECORE_OP_PATHS"] = os.path.join( "test", "IECore", "ops" )
14941491

14951492
c = Configure( testEnv )
14961493

14971494
withBoostUnitTest = c.CheckLibWithHeader( env.subst( "boost_unit_test_framework" + env["BOOST_LIB_SUFFIX"] ), "boost/test/unit_test.hpp", "CXX" )
1498-
withBoostTestExecMonitor = c.CheckLibWithHeader( env.subst( "boost_test_exec_monitor" + env["BOOST_LIB_SUFFIX"] ), "boost/test/test_exec_monitor.hpp", "CXX" )
1495+
# Boost on Windows does includes the "lib" prefix for the boost_test_exec_monitor
1496+
boostTestExecMonitorLibName = "libboost_test_exec_monitor" if testEnv["PLATFORM"] == "win32" else "boost_test_exec_monitor"
1497+
withBoostTestExecMonitor = c.CheckLibWithHeader( env.subst( boostTestExecMonitorLibName + env["BOOST_LIB_SUFFIX"] ), "boost/test/test_exec_monitor.hpp", "CXX" )
14991498
withBoostTest = withBoostUnitTest and withBoostTestExecMonitor
15001499

15011500
c.Finish()
15021501

1503-
testEnv["ENV"]["PYTHONPATH"] = "./python:" + testEnv.subst( "$PYTHONPATH" )
1502+
testEnv["ENV"]["PYTHONPATH"] = os.pathsep.join(
1503+
[
1504+
os.path.join( ".", "python" ),
1505+
testEnv.subst( "$PYTHONPATH" )
1506+
]
1507+
)
15041508

15051509
if testEnv["PLATFORM"] == "darwin" :
15061510

@@ -1689,6 +1693,8 @@ def writePkgConfig( env, python_env ):
16891693

16901694
coreEnv = env.Clone( IECORE_NAME="IECore" )
16911695
coreEnv.Append( CXXFLAGS="-DIECore_EXPORTS" )
1696+
if coreEnv["PLATFORM"] == "win32" :
1697+
coreEnv.Append( LIBS="version.lib" )
16921698
corePythonEnv = pythonEnv.Clone( IECORE_NAME="IECorePython" )
16931699
corePythonEnv.Append( CXXFLAGS="-DIECorePython_EXPORTS" )
16941700
corePythonModuleEnv = pythonModuleEnv.Clone( IECORE_NAME="IECore" )
@@ -1827,9 +1833,9 @@ imageEnvPrepends = {
18271833
}
18281834

18291835
imageEnv.Prepend( **imageEnvPrepends )
1830-
# Windows does not have a default library path, it will find the needed libraries based on PATH environment variable
1831-
if libraryPathEnvVar :
1832-
imageEnv["ENV"][libraryPathEnvVar] = imageEnv["LIBPATH"]
1836+
# Windows uses PATH for to find libraries, we must append to it to make sure we don't overwrite existing PATH entries.
1837+
# On Linux and MacOS this will append to an empty library path.
1838+
imageEnv["ENV"][libraryPathEnvVar] = os.pathsep.join( [ imageEnv["ENV"].get(libraryPathEnvVar, "") ] + imageEnv["LIBPATH"] )
18331839

18341840
if doConfigure :
18351841

@@ -1920,12 +1926,12 @@ if doConfigure :
19201926

19211927
# testing
19221928
imageTestEnv = testEnv.Clone()
1923-
imageTestEnv["ENV"]["PYTHONPATH"] = imageTestEnv["ENV"]["PYTHONPATH"] + ":python"
1929+
imageTestEnv["ENV"]["PYTHONPATH"] = os.pathsep.join( [ imageTestEnv["ENV"]["PYTHONPATH"], "python" ] )
19241930

1925-
imageEnvLibPath = ":".join( imageEnvPrepends["LIBPATH"] )
1931+
imageEnvLibPath = os.pathsep.join( imageEnvPrepends["LIBPATH"] )
19261932
imageLibs = imageTestEnv.subst( imageEnvLibPath )
19271933
imageTestLibs = imageTestEnv["ENV"][imageTestEnv["TEST_LIBRARY_PATH_ENV_VAR"]]
1928-
imageTestEnv["ENV"][imageTestEnv["TEST_LIBRARY_PATH_ENV_VAR"]] = ":".join( [imageLibs, imageTestLibs] )
1934+
imageTestEnv["ENV"][imageTestEnv["TEST_LIBRARY_PATH_ENV_VAR"]] = os.pathsep.join( [imageLibs, imageTestLibs] )
19291935

19301936
imageTest = imageTestEnv.Command( "test/IECoreImage/results.txt", imagePythonModule, "$PYTHON $TEST_IMAGE_SCRIPT --verbose" )
19311937
NoCache( imageTest )
@@ -2097,7 +2103,7 @@ if doConfigure :
20972103
# testing
20982104
vdbTestEnv = testEnv.Clone()
20992105

2100-
vdbTestEnv["ENV"]["PYTHONPATH"] = vdbTestEnv["ENV"]["PYTHONPATH"] + ":" + vdbTestEnv["VDB_PYTHON_PATH"]
2106+
vdbTestEnv["ENV"]["PYTHONPATH"] = vdbTestEnv["ENV"]["PYTHONPATH"] + os.pathsep + vdbTestEnv["VDB_PYTHON_PATH"]
21012107

21022108
vdbTest = vdbTestEnv.Command( "test/IECoreVDB/results.txt", vdbPythonModule, "$PYTHON $TEST_VDB_SCRIPT --verbose" )
21032109
NoCache( vdbTest )
@@ -2473,9 +2479,9 @@ if doConfigure :
24732479

24742480
mayaTestEnv = testEnv.Clone()
24752481

2476-
mayaTestLibPaths = mayaEnv.subst( ":".join( mayaPythonModuleEnv["LIBPATH"] ) )
2477-
mayaTestEnv["ENV"][mayaTestEnv["TEST_LIBRARY_PATH_ENV_VAR"]] += ":" + mayaTestLibPaths
2478-
mayaTestEnv["ENV"][libraryPathEnvVar] += ":" + mayaTestLibPaths
2482+
mayaTestLibPaths = mayaEnv.subst( os.pathsep.join( mayaPythonModuleEnv["LIBPATH"] ) )
2483+
mayaTestEnv["ENV"][mayaTestEnv["TEST_LIBRARY_PATH_ENV_VAR"]] += os.pathsep + mayaTestLibPaths
2484+
mayaTestEnv["ENV"][libraryPathEnvVar] += os.pathsep + mayaTestLibPaths
24792485

24802486
mayaTestEnv["ENV"]["PATH"] = mayaEnv.subst( "$MAYA_ROOT/bin:" ) + mayaEnv["ENV"]["PATH"]
24812487
mayaTestEnv["ENV"]["MAYA_PLUG_IN_PATH"] = "./plugins/maya:./test/IECoreMaya/plugins"
@@ -2940,9 +2946,9 @@ if doConfigure :
29402946
#=====
29412947
houdiniTestEnv = testEnv.Clone()
29422948

2943-
houdiniTestLibPaths = houdiniEnv.subst( ":".join( houdiniPythonModuleEnv["LIBPATH"] ) )
2944-
houdiniTestEnv["ENV"][houdiniTestEnv["TEST_LIBRARY_PATH_ENV_VAR"]] += ":" + houdiniTestLibPaths
2945-
houdiniTestEnv["ENV"][libraryPathEnvVar] += ":" + houdiniTestLibPaths
2949+
houdiniTestLibPaths = houdiniEnv.subst( os.pathsep.join( houdiniPythonModuleEnv["LIBPATH"] ) )
2950+
houdiniTestEnv["ENV"][houdiniTestEnv["TEST_LIBRARY_PATH_ENV_VAR"]] += os.pathsep + houdiniTestLibPaths
2951+
houdiniTestEnv["ENV"][libraryPathEnvVar] += os.pathsep + houdiniTestLibPaths
29462952

29472953
houdiniTestEnv["ENV"]["PATH"] = houdiniEnv.subst( "$HOUDINI_ROOT/bin:" ) + houdiniEnv["ENV"]["PATH"]
29482954

@@ -3121,9 +3127,9 @@ if doConfigure :
31213127
# tests
31223128
arnoldTestEnv = testEnv.Clone()
31233129
arnoldTestEnv["ENV"]["PYTHONPATH"] += ":./contrib/IECoreArnold/python:" + arnoldEnv.subst( "$ARNOLD_ROOT/python" )
3124-
arnoldTestEnv["ENV"][testEnv["TEST_LIBRARY_PATH_ENV_VAR"]] += ":" + arnoldEnv.subst( ":".join( arnoldPythonModuleEnv["LIBPATH"] ) )
3125-
arnoldTestEnv["ENV"]["PATH"] = arnoldEnv.subst( "$ARNOLD_ROOT/bin" ) + ":" + arnoldTestEnv["ENV"]["PATH"]
3126-
arnoldTestEnv["ENV"]["ARNOLD_PLUGIN_PATH"] = "contrib/IECoreArnold/test/IECoreArnold/plugins:contrib/IECoreArnold/test/IECoreArnold/metadata"
3130+
arnoldTestEnv["ENV"][testEnv["TEST_LIBRARY_PATH_ENV_VAR"]] += os.pathsep + arnoldEnv.subst( os.pathsep.join( arnoldPythonModuleEnv["LIBPATH"] ) )
3131+
arnoldTestEnv["ENV"]["PATH"] = arnoldEnv.subst( "$ARNOLD_ROOT/bin" ) + os.pathsep + arnoldTestEnv["ENV"]["PATH"]
3132+
arnoldTestEnv["ENV"]["ARNOLD_PLUGIN_PATH"] = os.pathsep.join( [ "contrib/IECoreArnold/test/IECoreArnold/plugins", "contrib/IECoreArnold/test/IECoreArnold/metadata" ] )
31273133
arnoldTest = arnoldTestEnv.Command( "contrib/IECoreArnold/test/IECoreArnold/results.txt", arnoldPythonModule, "$PYTHON $TEST_ARNOLD_SCRIPT --verbose" )
31283134
NoCache( arnoldTest )
31293135
arnoldTestEnv.Depends( arnoldTest, [ arnoldPythonModule + arnoldDriverForTest + arnoldLibrary ] )
@@ -3285,8 +3291,8 @@ if doConfigure :
32853291
usdLibPath = coreEnv.subst("$USD_LIB_PATH")
32863292
usdPythonPath = os.path.join(usdLibPath, "python")
32873293

3288-
usdTestEnv["ENV"]["PYTHONPATH"] += ":" + usdPythonPath
3289-
usdTestEnv["ENV"][testEnv["TEST_LIBRARY_PATH_ENV_VAR"]] += ":" + usdLibPath
3294+
usdTestEnv["ENV"]["PYTHONPATH"] += os.pathsep + usdPythonPath
3295+
usdTestEnv["ENV"][testEnv["TEST_LIBRARY_PATH_ENV_VAR"]] += os.pathsep + usdLibPath
32903296

32913297
# setup pluginInfo for custom file format registration
32923298
testSdfPlugInfo = os.path.join( os.getcwd(), "plugins", "usd", "plugInfo.json" )
@@ -3429,8 +3435,8 @@ if doConfigure :
34293435

34303436
# tests
34313437
alembicTestEnv = testEnv.Clone()
3432-
alembicTestLibPaths = alembicEnv.subst( ":".join( alembicPythonModuleEnv["LIBPATH"] ) )
3433-
alembicTestEnv["ENV"][alembicTestEnv["TEST_LIBRARY_PATH_ENV_VAR"]] += ":" + alembicTestLibPaths
3438+
alembicTestLibPaths = alembicEnv.subst( os.pathsep.join( alembicPythonModuleEnv["LIBPATH"] ) )
3439+
alembicTestEnv["ENV"][alembicTestEnv["TEST_LIBRARY_PATH_ENV_VAR"]] += os.pathsep + alembicTestLibPaths
34343440
alembicTestEnv["ENV"]["PYTHONPATH"] += ":./contrib/IECoreAlembic/python"
34353441
alembicTest = alembicTestEnv.Command( "contrib/IECoreAlembic/test/IECoreAlembic/results.txt", alembicPythonModule, "$PYTHON $TEST_ALEMBIC_SCRIPT --verbose" )
34363442
NoCache( alembicTest )
@@ -3587,9 +3593,9 @@ if doConfigure :
35873593

35883594
# tests
35893595
appleseedTestEnv = testEnv.Clone()
3590-
appleseedTestEnv["ENV"]["PYTHONPATH"] += ":./contrib/IECoreAppleseed/python" + ":" + appleseedEnv.subst( "$APPLESEED_LIB_PATH/python" + pythonEnv["PYTHON_VERSION"] )
3591-
appleseedTestEnv["ENV"][testEnv["TEST_LIBRARY_PATH_ENV_VAR"]] += ":" + appleseedEnv.subst( ":".join( appleseedPythonModuleEnv["LIBPATH"] ) )
3592-
appleseedTestEnv["ENV"]["PATH"] = appleseedEnv.subst( "$APPLESEED_ROOT/bin" ) + ":" + appleseedTestEnv["ENV"]["PATH"]
3596+
appleseedTestEnv["ENV"]["PYTHONPATH"] += ":./contrib/IECoreAppleseed/python" + os.pathsep + appleseedEnv.subst( "$APPLESEED_LIB_PATH/python" + pythonEnv["PYTHON_VERSION"] )
3597+
appleseedTestEnv["ENV"][testEnv["TEST_LIBRARY_PATH_ENV_VAR"]] += os.pathsep + appleseedEnv.subst( os.pathsep.join( appleseedPythonModuleEnv["LIBPATH"] ) )
3598+
appleseedTestEnv["ENV"]["PATH"] = appleseedEnv.subst( "$APPLESEED_ROOT/bin" ) + os.pathsep + appleseedTestEnv["ENV"]["PATH"]
35933599
appleseedTestEnv["ENV"]["APPLESEED_SEARCHPATH"] = os.getcwd() + "/contrib/IECoreAppleseed/test/IECoreAppleseed/plugins"
35943600
appleseedTest = appleseedTestEnv.Command( "contrib/IECoreAppleseed/test/IECoreAppleseed/results.txt", appleseedPythonModule, "$PYTHON $TEST_APPLESEED_SCRIPT --verbose" )
35953601
NoCache( appleseedTest )

config/azure/build.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@ jobs:
6060

6161
- script: |
6262
${{ parameters.envSetupCmd }}
63-
scons -j ${{ parameters.threads }} install BUILD_TYPE=${{ parameters.buildType }} OPTIONS=${{ parameters.options }}
63+
scons -j ${{ parameters.threads }} install BUILD_TYPE=${{ parameters.buildType }} OPTIONS=${{ parameters.options }} CXXSTD=c++14
6464
displayName: 'Build'
6565
6666
- script: |
67-
scons testCore testCorePython testScene testImage testAlembic testAppleseed OPTIONS=${{ parameters.options }}
67+
scons testCore testCorePython testScene testImage testAlembic testAppleseed OPTIONS=${{ parameters.options }} CXXSTD=c++14
6868
cat test/IECore/results.txt
6969
displayName: 'Test'
7070
condition: and( succeeded(), eq( variables['Agent.OS'], 'Linux' ) )

0 commit comments

Comments
 (0)