@@ -367,42 +367,26 @@ def test_SetProgramOptionsCMake_param_order_01(self):
367367 self ._execute_parser (parser , section )
368368
369369 option_list_bash_expect = [
370- '-DCMAKE_VAR_A=ON ' ,
370+ '-DCMAKE_VAR_A:STRING="ON" ' ,
371371 '-DCMAKE_VAR_B=ON' ,
372372 '-DCMAKE_VAR_C:BOOL=ON' ,
373- '-DCMAKE_VAR_D=ON' ,
374- '-DCMAKE_VAR_E=ON' ,
375373 '-DCMAKE_VAR_F:BOOL=ON' ,
376374 '-DCMAKE_VAR_G:BOOL=ON' ,
377- '-DCMAKE_VAR_H:BOOL=ON' ,
378- '-DCMAKE_VAR_I:BOOL=ON' ,
379- '-DCMAKE_VAR_J:BOOL=ON' ,
380- '-DCMAKE_VAR_K:BOOL=ON' ,
381- '-DCMAKE_VAR_L:BOOL=ON' ,
382- '-DCMAKE_VAR_M:BOOL=ON' ,
383- '-DCMAKE_VAR_N:BOOL=ON' ,
384- '-DCMAKE_VAR_O:BOOL=ON'
375+ '-DCMAKE_VAR_H=ON;CACHE;BOOL;' ,
376+ '-DCMAKE_VAR_I=ON;CACHE;BOOL;'
385377 ]
386378
387379 option_list_bash_actual = parser .gen_option_list (section , generator = "bash" )
388380 self .assertListEqual (option_list_bash_expect , option_list_bash_actual )
389381
390382 option_list_cmake_fragment_expect = [
391- 'set(CMAKE_VAR_A ON FORCE)' ,
383+ 'set(CMAKE_VAR_A ON CACHE STRING "from .ini configuration" FORCE)' ,
392384 'set(CMAKE_VAR_B ON PARENT_SCOPE)' ,
393385 'set(CMAKE_VAR_C ON CACHE BOOL "from .ini configuration")' ,
394- 'set(CMAKE_VAR_D ON PARENT_SCOPE FORCE)' ,
395- 'set(CMAKE_VAR_E ON PARENT_SCOPE FORCE)' ,
396386 'set(CMAKE_VAR_F ON CACHE BOOL "from .ini configuration" FORCE)' ,
397387 'set(CMAKE_VAR_G ON CACHE BOOL "from .ini configuration" FORCE)' ,
398388 'set(CMAKE_VAR_H ON CACHE BOOL "from .ini configuration" PARENT_SCOPE)' ,
399389 'set(CMAKE_VAR_I ON CACHE BOOL "from .ini configuration" PARENT_SCOPE)' ,
400- 'set(CMAKE_VAR_J ON CACHE BOOL "from .ini configuration" PARENT_SCOPE FORCE)' ,
401- 'set(CMAKE_VAR_K ON CACHE BOOL "from .ini configuration" PARENT_SCOPE FORCE)' ,
402- 'set(CMAKE_VAR_L ON CACHE BOOL "from .ini configuration" PARENT_SCOPE FORCE)' ,
403- 'set(CMAKE_VAR_M ON CACHE BOOL "from .ini configuration" PARENT_SCOPE FORCE)' ,
404- 'set(CMAKE_VAR_N ON CACHE BOOL "from .ini configuration" PARENT_SCOPE FORCE)' ,
405- 'set(CMAKE_VAR_O ON CACHE BOOL "from .ini configuration" PARENT_SCOPE FORCE)'
406390 ]
407391
408392 option_list_cmake_fragment_actual = parser .gen_option_list (section , generator = "cmake_fragment" )
@@ -414,6 +398,8 @@ def test_SetProgramOptionsCMake_param_order_01(self):
414398
415399 def test_SetProgramOptionsCMake_param_order_02 (self ):
416400 """
401+ Tests that we correctly generate output if extra flags
402+ are provided such as something to uniqueify a .ini option entry.
417403 """
418404 parser = self ._create_standard_parser ()
419405
@@ -424,7 +410,7 @@ def test_SetProgramOptionsCMake_param_order_02(self):
424410 # parse a section
425411 self ._execute_parser (parser , section )
426412
427- option_list_bash_expect = ['-DCMAKE_VAR_A=ON ' ]
413+ option_list_bash_expect = ['-DCMAKE_VAR_A:STRING="ON" ' ]
428414
429415 option_list_bash_actual = parser .gen_option_list (section , generator = "bash" )
430416 self .assertListEqual (option_list_bash_expect , option_list_bash_actual )
@@ -433,6 +419,34 @@ def test_SetProgramOptionsCMake_param_order_02(self):
433419 print ("OK" )
434420 return
435421
422+ def test_SetProgramOptionsCMake_fail_on_FORCE_and_PARENT_SCOPE (self ):
423+ """
424+ Tests the case that both PARENT_SCOPE and FORCE are provided.
425+ This will cause a CMake error beacuse the existence of PARENT_SCOPE
426+ forces CMake to use a Type-1 set operation, i.e. a NON-CACHEd
427+ variable. However ``FORCE`` is only valid for a CACHED variable (Type-2).
428+ These two options are mutually exclusive and CMake will fail.
429+
430+ In this case SetProgramOptionsCMake should raise a CATASTROPHIC
431+ error because the operation provided is invalid.
432+ """
433+ parser = self ._create_standard_parser ()
434+
435+ print ("-----[ TEST BEGIN ]----------------------------------------" )
436+ section = "TEST_CMAKE_FAIL_ON_PARENT_SCOPE_AND_FORCE"
437+ print ("Section : {}" .format (section ))
438+
439+ # parse a section
440+ self ._execute_parser (parser , section )
441+
442+ with self .assertRaises (ValueError ):
443+ parser .gen_option_list (section , generator = "bash" )
444+
445+ print ("-----[ TEST END ]------------------------------------------" )
446+
447+ print ("OK" )
448+ return
449+
436450 def test_SetProgramOptionsCMake_test_STRING_value_surrounded_by_double_quotes (self ):
437451 """
438452 Test STRING values are surrounded by double quotes.
@@ -445,10 +459,7 @@ def test_SetProgramOptionsCMake_test_STRING_value_surrounded_by_double_quotes(se
445459 section = "TEST_STRING_DOUBLE_QUOTES"
446460 print ("Section : {}" .format (section ))
447461
448- option_list_expect = [
449- '-DFOO:STRING="foo::bar::baz<Type>"' ,
450- '-DBAR:STRING="600"'
451- ]
462+ option_list_expect = ['-DFOO:STRING="foo::bar::baz<Type>"' , '-DBAR:STRING="600"' ]
452463 option_list_actual = parser .gen_option_list (section , generator = "bash" )
453464
454465 print ("-" * 40 )
@@ -478,15 +489,15 @@ def test_SetProgramOptionsCMake_opt_remove(self):
478489 section = "TEST_CMAKE_VAR_REMOVE"
479490 print ("Section : {}" .format (section ))
480491 option_list_bash_actual = parser .gen_option_list ('TEST_CMAKE_VAR_REMOVE' , 'bash' )
481- option_list_bash_expect = [ '-DBAR_TEST=BAR' , '-DFOO=BAZ' ]
492+ option_list_bash_expect = ['-DBAR_TEST=BAR' , '-DFOO=BAZ' ]
482493 self .assertListEqual (option_list_bash_expect , option_list_bash_actual )
483494 print ("-----[ TEST END ]------------------------------------------" )
484495
485496 print ("-----[ TEST BEGIN ]----------------------------------------" )
486497 section = "TEST_CMAKE_VAR_REMOVE"
487498 print ("Section : {}" .format (section ))
488499 option_list_cmake_fragment_actual = parser .gen_option_list ('TEST_CMAKE_VAR_REMOVE' , 'cmake_fragment' )
489- option_list_cmake_fragment_expect = [ 'set(BAR_TEST BAR)' , 'set(FOO BAZ)' ]
500+ option_list_cmake_fragment_expect = ['set(BAR_TEST BAR)' , 'set(FOO BAZ)' ]
490501 self .assertListEqual (option_list_cmake_fragment_expect , option_list_cmake_fragment_actual )
491502 print ("-----[ TEST END ]------------------------------------------" )
492503
0 commit comments