Gaudi Framework, version v23r4

Home   Generated: Mon Sep 17 2012

test_cmt2cmake.py

Go to the documentation of this file.
00001 from tempfile import mkdtemp
00002 import shutil
00003 import os
00004 import re
00005 
00006 # use a private cache for the tests
00007 os.environ['CMT2CMAKECACHE'] = 'test.cache'
00008 
00009 import cmt2cmake
00010 
00011 # prepare the cache for the tests
00012 cmt2cmake.known_subdirs['GaudiKernel'] = {'libraries': ['GaudiKernel'],
00013                                           'includes': False}
00014 cmt2cmake.known_subdirs['GaudiUtils'] = {'libraries': ['GaudiUtilsLib'],
00015                                          'includes': False}
00016 cmt2cmake.known_subdirs['LHCbKernel'] = {'libraries': ['LHCbKernel'],
00017                                          'includes': False}
00018 cmt2cmake.known_subdirs['SomeSubdir'] = {'libraries': ['SubdirLib'],
00019                                          'includes': False}
00020 cmt2cmake.known_subdirs['JustHeaders'] = {'libraries': [],
00021                                           'includes': True}
00022 
00023 
00024 #
00025 # Helpers
00026 #
00027 
00028 def buildDir(files, rootdir=os.curdir):
00029     '''
00030     Create a directory structure from the content of files.
00031 
00032     @param files: a dictionary or list of pairs mapping a filename to the content
00033                   if the content is a dictionary, recurse
00034     @param rootdir: base directory
00035     '''
00036     if type(files) is dict:
00037         files = files.items()
00038 
00039     # ensure that the root exists (to allow empty directories)
00040     if not os.path.exists(rootdir):
00041         os.makedirs(rootdir)
00042 
00043     # create all the entries
00044     for filename, data in files:
00045         filename = os.path.join(rootdir, filename)
00046         if type(data) is dict:
00047             buildDir(data, filename)
00048         else:
00049             d = os.path.dirname(filename)
00050             if not os.path.exists(d):
00051                 os.makedirs(d)
00052             f = open(filename, "w")
00053             if data:
00054                 f.write(data)
00055             f.close()
00056 
00057 class PackWrap(cmt2cmake.Package):
00058     """
00059     Helper class to test the Package.
00060     """
00061     def __init__(self, name, requirements, files=None):
00062         if not files:
00063             files = {}
00064         files["cmt/requirements"] = requirements
00065 
00066         self.tmpdir = mkdtemp()
00067         rootdir = os.path.join(self.tmpdir, name)
00068         buildDir(files, rootdir)
00069 
00070         super(PackWrap, self).__init__(rootdir)
00071 
00072     def __del__(self):
00073         shutil.rmtree(self.tmpdir, ignore_errors=False)
00074 
00075 def getCalls(function, cmakelists):
00076     '''
00077     extracts the arguments to all the calls to a cmake function
00078     '''
00079     exp = re.compile(r'\b{}\s*\(([^)]*)\)'.format(function), flags=re.MULTILINE)
00080     return [m.group(1) for m in exp.finditer(cmakelists)]
00081 
00082 #
00083 # Tests
00084 #
00085 
00086 def test_not_a_package():
00087     d = mkdtemp()
00088     buildDir({'NoPackage': {'a_file.txt': None}}, d)
00089     try:
00090         cmt2cmake.Package(os.path.join(d, 'NoPackage'))
00091         assert False, 'bad package not recognized'
00092     except ValueError:
00093         pass
00094     finally:
00095         shutil.rmtree(d)
00096 
00097 
00098 def test_pack_header():
00099     requirements = """
00100     package ThisIsAPackage
00101     version v123r456
00102 
00103     branches   cmt branches are ignored
00104     macro test parsing of \\
00105           multi line
00106     """
00107     pkg = PackWrap("ThisIsAPackage", requirements)
00108 
00109     cmakelists = pkg.generate()
00110     print cmakelists
00111 
00112     calls = getCalls("gaudi_subdir", cmakelists)
00113     assert calls, "gaudi_subdir not called"
00114     assert len(calls) == 1, "gaudi_subdir called more than once"
00115 
00116     args = calls[0].strip().split()
00117     assert args == ["ThisIsAPackage", "v123r456"]
00118 
00119 def test_pack_deps():
00120     requirements = """
00121     package Test
00122     version v1r0
00123 
00124     # series of uses
00125     use GaudiKernel v*
00126     use GaudiAlg *
00127     use GaudiPolicy *
00128     use GaudiCoreSvc v* # comment
00129     use GaudiUtils * -no_auto_imports
00130 
00131     use LHCbKernel v* Kernel
00132     """
00133     pkg = PackWrap("Test", requirements)
00134 
00135     cmakelists = pkg.generate()
00136     print cmakelists
00137 
00138     calls = getCalls("gaudi_depends_on_subdirs", cmakelists)
00139     assert calls, "gaudi_depends_on_subdirs not called"
00140 
00141     args = set()
00142     for call in calls:
00143         args.update(call.strip().split())
00144     expected = set(['GaudiKernel', 'GaudiAlg', 'GaudiCoreSvc',
00145                     'GaudiUtils', 'Kernel/LHCbKernel'])
00146     assert args == expected
00147 
00148 def test_pack_no_deps():
00149     requirements = """
00150     package Test
00151     version v1r0
00152 
00153     # no uses
00154     """
00155     pkg = PackWrap("Test", requirements)
00156 
00157     cmakelists = pkg.generate()
00158     print cmakelists
00159 
00160     calls = getCalls("gaudi_depends_on_subdirs", cmakelists)
00161     assert not calls, "gaudi_depends_on_subdirs called"
00162 
00163 def test_pack_ext_deps():
00164     requirements = """
00165     package Test
00166     version v1r0
00167 
00168     # series of uses
00169     use Boost v* LCG_Interfaces
00170     use Python v* LCG_Interfaces
00171     use XercesC v* LCG_Interfaces -no_auto_imports
00172     """
00173     pkg = PackWrap("Test", requirements)
00174 
00175     cmakelists = pkg.generate()
00176     print cmakelists
00177 
00178     expected = set(['Boost', 'XercesC'])
00179 
00180     calls = getCalls("find_package", cmakelists)
00181     assert calls, "find_pacakge not called"
00182     assert len(calls) == len(expected)
00183 
00184     args = set()
00185     for call in calls:
00186         args.add(call.strip().split()[0])
00187     print args
00188     assert args == expected
00189 
00190 def test_install_headers():
00191     requirements = '''
00192 #============================================================================
00193 package           Tell1Kernel
00194 version           v1r12p1
00195 
00196 # Structure, i.e. directories to process.
00197 #============================================================================
00198 branches          cmt doc Tell1Kernel
00199 
00200 # Used packages
00201 #============================================================================
00202 use GaudiPolicy      v*
00203 
00204 apply_pattern install_more_includes more=Tell1Kernel
00205     '''
00206     pkg = PackWrap("Tell1Kernel", requirements, files={"Tell1Kernel/hdr.h": None})
00207 
00208     cmakelists = pkg.generate()
00209     print cmakelists
00210 
00211     calls = getCalls("gaudi_install_headers", cmakelists)
00212     assert calls
00213 
00214     args = set()
00215     for call in calls:
00216         args.update(call.strip().split())
00217     expected = set(['Tell1Kernel'])
00218     assert args == expected
00219 
00220 def test_install_python():
00221     requirements = '''
00222 package Test
00223 version v1r0
00224 
00225 apply_pattern install_python_modules
00226     '''
00227     pkg = PackWrap("Test", requirements, files={"python/Test/__init__.py": None})
00228 
00229     cmakelists = pkg.generate()
00230     print cmakelists
00231 
00232     calls = getCalls("gaudi_install_python_modules", cmakelists)
00233     assert calls
00234 
00235 def test_install_python2():
00236     requirements = '''
00237 package Test
00238 version v1r0
00239 
00240 macro TestConfUserModules "Test.CustomModule1 Test.CustomModule2"
00241 
00242 apply_pattern install_python_modules
00243     '''
00244     pkg = PackWrap("Test", requirements, files={"python/Test/__init__.py": None})
00245 
00246     cmakelists = pkg.generate()
00247     print cmakelists
00248 
00249     calls = getCalls("gaudi_install_python_modules", cmakelists)
00250     assert calls
00251 
00252     calls = getCalls("set_property", cmakelists)
00253     assert calls
00254     args = calls[0].strip().split()
00255     assert args == ['DIRECTORY', 'PROPERTY', 'CONFIGURABLE_USER_MODULES', 'Test.CustomModule1', 'Test.CustomModule2'], args
00256 
00257 def test_install_scripts():
00258     requirements = '''
00259 package Test
00260 version v1r0
00261 
00262 apply_pattern install_scripts
00263     '''
00264     pkg = PackWrap("Test", requirements, files={"scripts/someScript": None})
00265 
00266     cmakelists = pkg.generate()
00267     print cmakelists
00268 
00269     calls = getCalls("gaudi_install_scripts", cmakelists)
00270     assert calls
00271 
00272 def test_qmtest():
00273     requirements = '''
00274 package Test
00275 version v1r0
00276 
00277 apply_pattern QMTest
00278     '''
00279     pkg = PackWrap("Test", requirements, files={"tests/qmtest/test.qms/a_test.qmt": None})
00280 
00281     cmakelists = pkg.generate()
00282     print cmakelists
00283 
00284     calls = getCalls("gaudi_add_test", cmakelists)
00285     assert calls, "no test added"
00286     assert len(calls) == 1, "gaudi_add_test called more than once"
00287 
00288     args = calls[0].strip().split()
00289     assert args == ["QMTest", "QMTEST"]
00290 
00291 def test_libraries():
00292     requirements = '''
00293 package Test
00294 version v1r0
00295 
00296 library TestLib lib/*.cpp
00297 apply_pattern linker_library library=TestLib
00298 
00299 library TestComp component/*.cpp
00300 apply_pattern component_library library=TestComp
00301 
00302 library TestTestLib test/lib/*.cpp -group=tests
00303 apply_pattern linker_library library=TestTestLib
00304 
00305 library TestTestComp test/component/*.cpp -group=tests
00306 apply_pattern component_library library=TestTestComp
00307 
00308 apply_pattern install_more_includes more=TestIncludes
00309     '''
00310     pkg = PackWrap("Test", requirements, files={'TestIncludes': {}})
00311 
00312     print 'components', pkg.component_libraries
00313     print 'linker', pkg.linker_libraries
00314     print 'libraries', pkg.libraries
00315 
00316     assert pkg.component_libraries == set(['TestComp', 'TestTestComp'])
00317     assert pkg.linker_libraries == set(['TestLib', 'TestTestLib'])
00318     assert pkg.libraries
00319 
00320     cmakelists = pkg.generate()
00321     print cmakelists
00322 
00323     calls = getCalls("gaudi_add_library", cmakelists)
00324     assert len(calls) == 2, "gaudi_add_library wrong count %d" % len(calls)
00325     l = calls[0]
00326     assert re.match(r' *TestLib\b', l)
00327     assert re.search(r'\bPUBLIC_HEADERS +TestIncludes', l)
00328     l = calls[1]
00329     assert re.match(r' *TestTestLib\b', l)
00330     assert re.search(r'\bPUBLIC_HEADERS +TestIncludes', l)
00331     assert re.search(r'\bLINK_LIBRARIES +TestLib', l)
00332 
00333     calls = getCalls("gaudi_add_module", cmakelists)
00334     assert len(calls) == 2, "gaudi_add_module wrong count %d" % len(calls)
00335 
00336     l = calls[0]
00337     assert re.match(r' *TestComp\b', l)
00338     assert not re.search(r'\bPUBLIC_HEADERS\b', l)
00339     assert re.search(r'\bLINK_LIBRARIES +TestLib', l)
00340     l = calls[1]
00341     assert re.match(r' *TestTestComp\b', l)
00342     assert not re.search(r'\bPUBLIC_HEADERS', l)
00343     assert re.search(r'\bLINK_LIBRARIES +TestLib +TestTestLib', l)
00344 
00345 def test_libraries_2():
00346     requirements = '''
00347 package Test
00348 version v1r0
00349 
00350 use Boost v* LCG_Interfaces
00351 use XercesC v* LCG_Interfaces -no_auto_imports
00352 
00353 library Lib1 lib1/*.cpp
00354 apply_pattern component_library library=Lib1
00355 
00356 library Lib2 lib2/*.cpp -import=XercesC
00357 apply_pattern component_library library=Lib2
00358 
00359 # We do not use variables
00360 library Lib3 lib3/*.cpp a_variable=some_value
00361 apply_pattern component_library library=Lib3
00362     '''
00363     pkg = PackWrap("Test", requirements, files={})
00364 
00365     print 'components', pkg.component_libraries
00366     print 'libraries', pkg.libraries
00367 
00368     assert pkg.component_libraries == set(['Lib1', 'Lib2', 'Lib3'])
00369     assert pkg.libraries
00370 
00371     cmakelists = pkg.generate()
00372     print cmakelists
00373 
00374     calls = getCalls("gaudi_add_module", cmakelists)
00375     assert len(calls) == 3, "gaudi_add_module wrong count %d" % len(calls)
00376 
00377     l = calls[0]
00378     assert re.match(r' *Lib1\b', l)
00379     assert not re.search(r'\bPUBLIC_HEADERS\b', l)
00380     assert re.search(r'\bLINK_LIBRARIES +Boost', l)
00381     assert re.search(r'\bINCLUDE_DIRS +Boost', l)
00382     l = calls[1]
00383     assert re.match(r' *Lib2\b', l)
00384     assert not re.search(r'\bPUBLIC_HEADERS', l)
00385     assert re.search(r'\bLINK_LIBRARIES +Boost +XercesC', l)
00386     assert re.search(r'\bINCLUDE_DIRS +Boost +XercesC', l)
00387     l = calls[2]
00388     assert re.match(r' *Lib3\b', l)
00389     assert not re.search(r'\bPUBLIC_HEADERS', l)
00390     assert re.search(r'\bLINK_LIBRARIES +Boost', l)
00391     assert re.search(r'\bINCLUDE_DIRS +Boost', l)
00392 
00393 def test_libraries_3():
00394     # some corner cases
00395     # FIXME: we should actually test the warning messages
00396     requirements = '''
00397 package Test
00398 version v1r0
00399 
00400 library Lib1
00401 apply_pattern component_library library=Lib1
00402 
00403 library Lib2 lib2/*.cpp
00404 apply_pattern linker_library library=Lib2
00405 
00406 library Lib3 lib3/*.cpp
00407 
00408 library Lib4  lib4/*.cpp
00409 apply_pattern linker_library library="Lib4"
00410 
00411     '''
00412     pkg = PackWrap("Test", requirements, files={})
00413 
00414     print 'components', pkg.component_libraries
00415     print 'linker', pkg.linker_libraries
00416     print 'libraries', pkg.libraries
00417 
00418     assert pkg.component_libraries == set(['Lib1'])
00419     assert pkg.linker_libraries == set(['Lib2', 'Lib4'])
00420     assert len(pkg.libraries) == 4
00421 
00422     cmakelists = pkg.generate()
00423     print cmakelists
00424 
00425     calls = getCalls("gaudi_add_module", cmakelists)
00426     assert len(calls) == 1, "gaudi_add_module wrong count %d" % len(calls)
00427 
00428     l = calls[0]
00429     assert re.match(r' *Lib1\b', l)
00430     assert not re.search(r'\bPUBLIC_HEADERS\b', l)
00431 
00432     calls = getCalls("gaudi_add_library", cmakelists)
00433     assert len(calls) == 3, "gaudi_add_module wrong count %d" % len(calls)
00434 
00435     l = calls[0]
00436     assert re.match(r' *Lib2\b', l)
00437     assert re.search(r'\bNO_PUBLIC_HEADERS', l)
00438 
00439     l = calls[1]
00440     assert re.match(r' *Lib3\b', l)
00441     assert re.search(r'\bNO_PUBLIC_HEADERS', l)
00442 
00443     l = calls[2]
00444     assert re.match(r' *Lib4\b', l)
00445     assert re.search(r'\bNO_PUBLIC_HEADERS', l)
00446 
00447 def test_libraries_strip_src():
00448     requirements = '''
00449 package Test
00450 version v1r0
00451 
00452 library TestLib ../src/subdir/*.cpp
00453 apply_pattern linker_library library=TestLib
00454     '''
00455     pkg = PackWrap("Test", requirements, files={'TestIncludes': {}})
00456 
00457     assert pkg.linker_libraries == set(['TestLib'])
00458 
00459     cmakelists = pkg.generate()
00460     print cmakelists
00461 
00462     calls = getCalls("gaudi_add_library", cmakelists)
00463     assert len(calls) == 1, "gaudi_add_library wrong count %d" % len(calls)
00464     l = calls[0].strip().split()
00465     assert l[0] == 'TestLib'
00466     assert l[1] == 'subdir/*.cpp'
00467 
00468 def test_subdir_links():
00469     requirements = '''
00470 package Test
00471 version v1r0
00472 
00473 use Boost v* LCG_Interfaces
00474 use XercesC v* LCG_Interfaces -no_auto_imports
00475 
00476 use GaudiKernel *
00477 use GaudiUtils * -no_auto_imports
00478 
00479 
00480 library Lib1 *.cpp
00481 apply_pattern component_library library=Lib1
00482 
00483 library Lib2 *.cpp -import=XercesC
00484 apply_pattern component_library library=Lib2
00485 
00486 library Lib3 *.cpp -import=GaudiUtils
00487 apply_pattern component_library library=Lib3
00488     '''
00489     pkg = PackWrap("Test", requirements, files={})
00490 
00491     print 'components', pkg.component_libraries
00492     print 'linker', pkg.linker_libraries
00493     print 'libraries', pkg.libraries
00494 
00495     assert pkg.component_libraries == set(['Lib1', 'Lib2', 'Lib3'])
00496     assert len(pkg.libraries) == 3
00497 
00498     cmakelists = pkg.generate()
00499     print cmakelists
00500 
00501     calls = getCalls("gaudi_add_module", cmakelists)
00502     assert len(calls) == 3, "gaudi_add_module wrong count %d" % len(calls)
00503 
00504     l = calls[0].strip().split()
00505     assert l[0] == 'Lib1'
00506     links = set(l[l.index('LINK_LIBRARIES')+1:])
00507     assert links == set(['Boost', 'GaudiKernel'])
00508 
00509     l = calls[1].strip().split()
00510     assert l[0] == 'Lib2'
00511     assert 'LINK_LIBRARIES' in l
00512     links = set(l[l.index('LINK_LIBRARIES')+1:])
00513     assert links == set(['Boost', 'GaudiKernel', 'XercesC'])
00514 
00515     l = calls[2].strip().split()
00516     assert l[0] == 'Lib3'
00517     assert 'LINK_LIBRARIES' in l
00518     links = set(l[l.index('LINK_LIBRARIES')+1:])
00519     assert links == set(['Boost', 'GaudiKernel', 'GaudiUtilsLib'])
00520 
00521 def test_subdir_links_hat():
00522     requirements = '''
00523 package Test
00524 version v1r0
00525 
00526 use LHCbKernel * Kernel
00527 use SomeSubdir * Hat -no_auto_imports
00528 
00529 library Lib1 *.cpp
00530 apply_pattern component_library library=Lib1
00531 
00532 library Lib2 *.cpp -import=SomeSubdir
00533 apply_pattern component_library library=Lib2
00534     '''
00535     pkg = PackWrap("Test", requirements, files={})
00536 
00537     print 'components', pkg.component_libraries
00538     print 'linker', pkg.linker_libraries
00539     print 'libraries', pkg.libraries
00540 
00541     assert pkg.component_libraries == set(['Lib1', 'Lib2'])
00542     assert len(pkg.libraries) == 2
00543 
00544     cmakelists = pkg.generate()
00545     print cmakelists
00546 
00547     calls = getCalls("gaudi_add_module", cmakelists)
00548     assert len(calls) == 2, "gaudi_add_module wrong count %d" % len(calls)
00549 
00550     l = calls[0].strip().split()
00551     assert l[0] == 'Lib1'
00552     links = set(l[l.index('LINK_LIBRARIES')+1:])
00553     assert links == set(['LHCbKernel'])
00554 
00555     l = calls[1].strip().split()
00556     assert l[0] == 'Lib2'
00557     links = set(l[l.index('LINK_LIBRARIES')+1:])
00558     assert links == set(['LHCbKernel', 'SubdirLib'])
00559 
00560 def test_subdir_links_missing():
00561     requirements = '''
00562 package Test
00563 version v1r0
00564 
00565 use UnknownSubdir *
00566 
00567 library Lib1 *.cpp
00568 apply_pattern component_library library=Lib1
00569     '''
00570     pkg = PackWrap("Test", requirements, files={})
00571 
00572     assert pkg.component_libraries == set(['Lib1'])
00573     assert len(pkg.libraries) == 1
00574 
00575     cmakelists = pkg.generate()
00576     print cmakelists
00577 
00578     calls = getCalls("gaudi_add_module", cmakelists)
00579     assert len(calls) == 1, "gaudi_add_module wrong count %d" % len(calls)
00580 
00581     l = calls[0].strip().split()
00582     assert l[0] == 'Lib1'
00583     assert 'LINK_LIBRARIES' not in l
00584     # FIXME: we should test the warning
00585 
00586 def test_subdir_links_update():
00587     if 'GaudiDummy' in cmt2cmake.known_subdirs:
00588         del cmt2cmake.known_subdirs['GaudiDummy']
00589 
00590     requirements = '''
00591 package GaudiDummy
00592 version v1r0
00593 
00594 apply_pattern install_more_includes more=Dummy
00595 
00596 library Dummy *.cpp
00597 apply_pattern linker_library library=Dummy
00598     '''
00599     PackWrap("GaudiDummy", requirements, files={'Dummy':{}})
00600 
00601     assert cmt2cmake.known_subdirs['GaudiDummy']['libraries'] == ['Dummy']
00602     assert cmt2cmake.known_subdirs['GaudiDummy']['includes'] == False
00603 
00604 def test_subdir_headers():
00605     if 'GaudiDummy' in cmt2cmake.known_subdirs:
00606         del cmt2cmake.known_subdirs['GaudiDummy']
00607 
00608     requirements = '''
00609 package GaudiDummy
00610 version v1r0
00611 
00612 use JustHeaders v*
00613 use JustHeaders v* Hat
00614 
00615 library Dummy *.cpp
00616 apply_pattern linker_library library=Dummy
00617     '''
00618     pkg = PackWrap("GaudiDummy", requirements, files={'Dummy':{}})
00619 
00620     cmakelists = pkg.generate()
00621     print cmakelists
00622 
00623     calls = getCalls("gaudi_add_library", cmakelists)
00624     assert len(calls) == 1, "gaudi_add_library wrong count %d" % len(calls)
00625 
00626     l = calls[0].strip().split()
00627     assert l[0] == 'Dummy'
00628     assert 'INCLUDE_DIRS' in l
00629     links = set(l[l.index('INCLUDE_DIRS')+1:])
00630     assert links == set(['JustHeaders', 'Hat/JustHeaders'])
00631 
00632 def test_subdir_headers_update():
00633     if 'GaudiDummy' in cmt2cmake.known_subdirs:
00634         del cmt2cmake.known_subdirs['GaudiDummy']
00635 
00636     requirements = '''
00637 package GaudiDummy
00638 version v1r0
00639 
00640 apply_pattern install_more_includes more=Dummy
00641     '''
00642     PackWrap("GaudiDummy", requirements, files={'Dummy':{}})
00643 
00644     assert cmt2cmake.known_subdirs['GaudiDummy']['includes'] == True
00645     assert not cmt2cmake.known_subdirs['GaudiDummy']['libraries']
00646 
00647 def test_write_file():
00648     requirements = '''
00649 package Test
00650 version v1r0
00651 
00652 library Lib1 *.cpp
00653 apply_pattern component_library library=Lib1
00654     '''
00655     pkg = PackWrap("Test", requirements, files={})
00656 
00657     cmakelists = pkg.generate()
00658     print cmakelists
00659 
00660     cmakefile = os.path.join(pkg.path, 'CMakeLists.txt')
00661     pkg.process()
00662     assert os.path.exists(cmakefile)
00663     assert open(cmakefile).read() == cmakelists
00664 
00665 def test_write_file_exists():
00666     requirements = '''
00667 package Test
00668 version v1r0
00669 
00670 library Lib1 *.cpp
00671 apply_pattern component_library library=Lib1
00672     '''
00673     pkg = PackWrap("Test", requirements, files={'CMakeLists.txt': 'dummy data'})
00674 
00675     cmakefile = os.path.join(pkg.path, 'CMakeLists.txt')
00676     pkg.process()
00677     # FIXME: we should test the warning
00678     assert open(cmakefile).read() == 'dummy data'
00679 
00680 
00681 def test_god_1():
00682     # some corner cases
00683     # FIXME: we should actually test the warning messages
00684     requirements = '''
00685 package Test
00686 version v1r0
00687 
00688 apply_pattern god_headers files=../xml/*.xml
00689     '''
00690     pkg = PackWrap("Test", requirements, files={})
00691 
00692     cmakelists = pkg.generate()
00693     print cmakelists
00694 
00695     calls = getCalls("include", cmakelists)
00696     assert calls
00697     l = calls[0].strip()
00698     assert l == 'GaudiObjDesc'
00699 
00700     calls = getCalls("god_build_headers", cmakelists)
00701     assert len(calls) == 1, "god_build_headers wrong count %d" % len(calls)
00702 
00703     l = calls[0].strip()
00704     assert l == 'xml/*.xml'
00705 
00706 def test_god_2():
00707     requirements = '''
00708 package Test
00709 version v1r0
00710 
00711 apply_pattern god_dictionary files=../xml/*.xml
00712     '''
00713     pkg = PackWrap("Test", requirements, files={})
00714 
00715     cmakelists = pkg.generate()
00716     print cmakelists
00717 
00718     calls = getCalls("include", cmakelists)
00719     assert calls
00720     l = calls[0].strip()
00721     assert l == 'GaudiObjDesc'
00722 
00723     calls = getCalls("god_build_dictionary", cmakelists)
00724     assert len(calls) == 1, "god_build_dictionary wrong count %d" % len(calls)
00725 
00726     l = calls[0].strip()
00727     assert l == 'xml/*.xml'
00728 
00729 def test_god_3():
00730     requirements = '''
00731 package Test
00732 version v1r0
00733 
00734 use Boost v* LCG_Interfaces
00735 
00736 apply_pattern god_headers files=../xml/*.xml
00737 apply_pattern god_dictionary files=../xml/*.xml
00738     '''
00739     pkg = PackWrap("Test", requirements, files={})
00740 
00741     cmakelists = pkg.generate()
00742     print cmakelists
00743 
00744     calls = getCalls("include", cmakelists)
00745     assert calls
00746     l = calls[0].strip()
00747     assert l == 'GaudiObjDesc'
00748 
00749     calls = getCalls("god_build_headers", cmakelists)
00750     assert len(calls) == 1, "god_build_headers wrong count %d" % len(calls)
00751 
00752     calls = getCalls("god_build_dictionary", cmakelists)
00753     assert len(calls) == 1, "god_build_dictionary wrong count %d" % len(calls)
00754 
00755     l = calls[0].strip().split()
00756     assert l[0] == 'xml/*.xml'
00757     assert 'LINK_LIBRARIES' in l
00758     assert l[l.index('LINK_LIBRARIES')+1] == 'Boost'
00759     assert 'INCLUDE_DIRS' in l
00760     assert l[l.index('INCLUDE_DIRS')+1] == 'Boost'
00761 
00762 def test_god_4():
00763     requirements = '''
00764 package Test
00765 version v1r0
00766 
00767 use Boost v* LCG_Interfaces
00768 
00769 library Lib *.cpp
00770 apply_pattern linker_library library=Lib
00771 
00772 apply_pattern god_headers files=../xml/*.xml
00773 apply_pattern god_dictionary files=../xml/*.xml
00774     '''
00775     pkg = PackWrap("Test", requirements, files={})
00776 
00777     cmakelists = pkg.generate()
00778     print cmakelists
00779 
00780     calls = getCalls("include", cmakelists)
00781     assert calls
00782     l = calls[0].strip()
00783     assert l == 'GaudiObjDesc'
00784 
00785     calls = getCalls("god_build_headers", cmakelists)
00786     assert len(calls) == 1, "god_build_headers wrong count %d" % len(calls)
00787 
00788     calls = getCalls("gaudi_add_library", cmakelists)
00789     assert len(calls) == 1, "gaudi_add_library wrong count %d" % len(calls)
00790 
00791     calls = getCalls("god_build_dictionary", cmakelists)
00792     assert len(calls) == 1, "god_build_dictionary wrong count %d" % len(calls)
00793 
00794     l = calls[0].strip().split()
00795     assert l[0] == 'xml/*.xml'
00796     assert 'LINK_LIBRARIES' in l
00797     i = l.index('LINK_LIBRARIES')+1
00798     assert l[i:i+2] == ['Boost', 'Lib']
00799     assert 'INCLUDE_DIRS' in l
00800     assert l[l.index('INCLUDE_DIRS')+1] == 'Boost'
00801 
00802     hdr = cmakelists.find('god_build_headers')
00803     lib = cmakelists.find('gaudi_add_library')
00804     dct = cmakelists.find('god_build_dictionary')
00805     assert hdr < lib and lib < dct, "wrong order of calls"
00806 
00807 def test_god_5():
00808     requirements = '''
00809 package Test
00810 version v1r0
00811 
00812 apply_pattern god_headers files=../xml/*.xml
00813 macro TestObj2Doth_GODflags " -s ../Test/ "
00814     '''
00815     pkg = PackWrap("Test", requirements, files={})
00816 
00817     cmakelists = pkg.generate()
00818     print cmakelists
00819 
00820     calls = getCalls("include", cmakelists)
00821     assert calls
00822     l = calls[0].strip()
00823     assert l == 'GaudiObjDesc'
00824 
00825     calls = getCalls("god_build_headers", cmakelists)
00826     assert len(calls) == 1, "god_build_headers wrong count %d" % len(calls)
00827 
00828     l = calls[0].strip().split()
00829     assert l[0] == 'xml/*.xml'
00830     assert 'DESTINATION' in l
00831     assert l[l.index('DESTINATION')+1] == 'Test'
00832 
00833 def test_god_6():
00834     requirements = '''
00835 package Test
00836 version v1r0
00837 
00838 document customdict TestCustomDict ../dict/TestCustomDict.h
00839 
00840 apply_pattern god_dictionary files=../xml/*.xml
00841     '''
00842     pkg = PackWrap("Test", requirements, files={})
00843 
00844     cmakelists = pkg.generate()
00845     print cmakelists
00846 
00847     calls = getCalls("include", cmakelists)
00848     assert calls
00849     l = calls[0].strip()
00850     assert l == 'GaudiObjDesc'
00851 
00852     calls = getCalls("god_build_dictionary", cmakelists)
00853     assert len(calls) == 1, "god_build_dictionary wrong count %d" % len(calls)
00854 
00855     l = calls[0].strip().split()
00856     assert l == ['xml/*.xml', 'EXTEND', 'dict/TestCustomDict.h']
00857 
00858 def test_reflex():
00859     requirements = '''
00860 package Test
00861 version v1r0
00862 
00863 use ROOT v* LCG_Interfaces
00864 
00865 apply_pattern reflex_dictionary \\
00866               dictionary=Test \\
00867               headerfiles=$(TESTROOT)/dict/TestDict.h \\
00868               selectionfile=$(TESTROOT)/dict/TestDict.xml
00869 
00870 apply_pattern reflex_dictionary \\
00871               dictionary=Test2 \\
00872               headerfiles=$(TESTROOT)/dict/Test2Dict.h \\
00873               selectionfile=$(TESTROOT)/dict/Test2Dict.xml \\
00874               options="-DOPTION"
00875     '''
00876     pkg = PackWrap("Test", requirements, files={})
00877 
00878     cmakelists = pkg.generate()
00879     print cmakelists
00880 
00881     calls = getCalls("gaudi_add_dictionary", cmakelists)
00882     assert len(calls) == 2, "gaudi_add_dictionary wrong count %d" % len(calls)
00883 
00884     l = calls[0].strip().split()
00885     assert l[0:3] == ['Test', 'dict/TestDict.h', 'dict/TestDict.xml']
00886     assert 'LINK_LIBRARIES' in l
00887     assert l[l.index('LINK_LIBRARIES')+1] == 'ROOT'
00888     assert 'INCLUDE_DIRS' in l
00889     assert l[l.index('INCLUDE_DIRS')+1] == 'ROOT'
00890 
00891     l = calls[1].strip().split()
00892     assert l[0:3] == ['Test2', 'dict/Test2Dict.h', 'dict/Test2Dict.xml']
00893     assert 'LINK_LIBRARIES' in l
00894     assert l[l.index('LINK_LIBRARIES')+1] == 'ROOT'
00895     assert 'INCLUDE_DIRS' in l
00896     assert l[l.index('INCLUDE_DIRS')+1] == 'ROOT'
00897     assert 'OPTIONS' in l
00898     assert l[l.index('OPTIONS')+1:] == ['"-DOPTION"']
00899 
00900 
00901 def test_reflex_2():
00902     requirements = '''
00903 package Test
00904 version v1r0
00905 
00906 use ROOT v* LCG_Interfaces
00907 
00908 library Test *.ccp
00909 apply_pattern component_library library=Test
00910 
00911 apply_pattern reflex_dictionary \\
00912               dictionary=Test \\
00913               headerfiles=$(TESTROOT)/dict/TestDict.h \\
00914               selectionfile=$(TESTROOT)/dict/TestDict.xml
00915     '''
00916     pkg = PackWrap("Test", requirements, files={})
00917 
00918     cmakelists = pkg.generate()
00919     print cmakelists
00920 
00921     calls = getCalls("gaudi_add_module", cmakelists)
00922     assert len(calls) == 1, "gaudi_add_module wrong count %d" % len(calls)
00923 
00924     l = calls[0].strip().split()
00925     assert l[0] == 'Test'
00926 
00927     calls = getCalls("gaudi_add_dictionary", cmakelists)
00928     assert len(calls) == 1, "gaudi_add_dictionary wrong count %d" % len(calls)
00929 
00930     l = calls[0].strip().split()
00931     assert l[0:3] == ['Test', 'dict/TestDict.h', 'dict/TestDict.xml']
00932 
00933 def test_reflex_3():
00934     requirements = '''
00935 package Test
00936 version v1r0
00937 
00938 use ROOT v* LCG_Interfaces
00939 use COOL v* LCG_Interfaces -no_auto_imports
00940 use CORAL v* LCG_Interfaces -no_auto_imports
00941 use Boost v* LCG_Interfaces -no_auto_imports
00942 
00943 library Test *.ccp
00944 apply_pattern component_library library=Test
00945 
00946 apply_pattern reflex_dictionary \\
00947               dictionary=Test \\
00948               headerfiles=$(TESTROOT)/dict/TestDict.h \\
00949               selectionfile=$(TESTROOT)/dict/TestDict.xml \\
00950               imports="COOL -import=CORAL -import=Boost"
00951     '''
00952     pkg = PackWrap("Test", requirements, files={})
00953 
00954     cmakelists = pkg.generate()
00955     print cmakelists
00956 
00957     calls = getCalls("gaudi_add_module", cmakelists)
00958     assert len(calls) == 1, "gaudi_add_module wrong count %d" % len(calls)
00959 
00960     l = calls[0].strip().split()
00961     assert l[0] == 'Test'
00962 
00963     calls = getCalls("gaudi_add_dictionary", cmakelists)
00964     assert len(calls) == 1, "gaudi_add_dictionary wrong count %d" % len(calls)
00965 
00966     l = calls[0].strip().split()
00967     assert l[0:3] == ['Test', 'dict/TestDict.h', 'dict/TestDict.xml']
00968     assert 'INCLUDE_DIRS' in l
00969     i = l.index('INCLUDE_DIRS')
00970     assert 'LINK_LIBRARIES' in l
00971     j = l.index('LINK_LIBRARIES')
00972     assert set(l[i+1:j]) == set(['ROOT', 'COOL', 'CORAL', 'Boost'])
00973     assert set(l[j+1:]) == set(['ROOT', 'COOL', 'CORAL', 'Boost'])
00974 
00975 def test_linkopts():
00976     requirements = '''
00977 package Test
00978 version v1r0
00979 
00980 use ROOT v* LCG_Interfaces
00981 use Boost v* LCG_Interfaces
00982 
00983 macro_append ROOT_linkopts " -lMathCore"
00984 macro_append Boost_linkopts " $(Boost_linkopts_filesystem)"
00985 
00986     '''
00987     pkg = PackWrap("Test", requirements, files={})
00988 
00989     cmakelists = pkg.generate()
00990     print cmakelists
00991 
00992     calls = getCalls("find_package", cmakelists)
00993     assert len(calls) == 2, "find_package wrong count %d" % len(calls)
00994 
00995     l = calls[0].strip().split()
00996     assert l == ['Boost', 'COMPONENTS', 'filesystem'] # find_package are sorted
00997 
00998     l = calls[1].strip().split()
00999     assert l == ['ROOT', 'COMPONENTS', 'MathCore'] # find_package are sorted
01000 
01001 def test_application():
01002     requirements = '''
01003 package Test
01004 version v1r0
01005 
01006 application MyApp1 ../src/app1/*.cpp
01007 
01008 application MyApp2 -group=tests ../src/app2/*.cpp
01009 
01010 application MyApp3 -check ../src/app3/*.cpp
01011 
01012 application MyApp4 ../tests/src/app4.cpp
01013 
01014 application MyTestApp app5a.cpp app5b.cpp
01015     '''
01016     pkg = PackWrap("Test", requirements, files={})
01017 
01018     cmakelists = pkg.generate()
01019     print cmakelists
01020 
01021     calls = getCalls("gaudi_add_executable", cmakelists)
01022     assert len(calls) == 5, "gaudi_add_executable wrong count %d" % len(calls)
01023 
01024     l = calls[0].strip().split()
01025     assert l[0] == 'MyApp1'
01026     assert l[1:] == ['app1/*.cpp']
01027 
01028     l = calls[1].strip().split()
01029     assert l[0] == 'MyApp2'
01030     assert l[1:] == ['app2/*.cpp']
01031 
01032     l = calls[2].strip().split()
01033     assert l[0] == 'MyApp3'
01034     assert l[1:] == ['app3/*.cpp']
01035 
01036     l = calls[3].strip().split()
01037     assert l[0] == 'MyApp4'
01038     assert l[1:] == ['../tests/src/app4.cpp']
01039 
01040     l = calls[4].strip().split()
01041     assert l[0] == 'MyTestApp'
01042     assert l[1:] == ['app5a.cpp', 'app5b.cpp']
01043 
01044     calls = getCalls("if", cmakelists)
01045     assert calls == ['BUILD_TESTS'] * 4
01046 
01047 def test_pyqt_patterns():
01048     requirements = '''
01049 package Test
01050 version v1r0
01051 
01052 use pygraphics v* LCG_Interfaces -no_auto_imports
01053 use Qt v* LCG_Interfaces -no_auto_imports
01054 
01055 apply_pattern install_python_modules
01056 
01057 apply_pattern PyQtResource qrc_files=../qt_resources/*.qrc outputdir=../python/Test/QtApp
01058 apply_pattern PyQtUIC ui_files=../qt_resources/*.ui outputdir=../python/Test/QtApp
01059 macro_append Test_python_dependencies " PyQtResource PyQtUIC "
01060     '''
01061     pkg = PackWrap("Test", requirements, files={})
01062 
01063     cmakelists = pkg.generate()
01064     print cmakelists
01065 
01066     calls = getCalls("gen_pyqt_resource", cmakelists)
01067     assert len(calls) == 1, "gen_pyqt_resource wrong count %d" % len(calls)
01068     l = calls[0].strip().split()
01069     assert l == ['Test.QtApp.Resources', 'Test/QtApp', 'qt_resources/*.qrc']
01070 
01071     calls = getCalls("gen_pyqt_uic", cmakelists)
01072     assert len(calls) == 1, "gen_pyqt_uic wrong count %d" % len(calls)
01073     l = calls[0].strip().split()
01074     assert l == ['Test.QtApp.UI', 'Test/QtApp', 'qt_resources/*.ui']
01075 
01076 from nose.core import main
01077 main()
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Mon Sep 17 2012 13:49:25 for Gaudi Framework, version v23r4 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004