]> SALOME platform Git repositories - modules/kernel.git/blob - salome_adm/cmake_files/deprecated/am2cmake.py
Salome HOME
Fix to build by CMAKE with VTK-6.0
[modules/kernel.git] / salome_adm / cmake_files / deprecated / am2cmake.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 import re
22
23 # ----
24 # A set of regular expressions used ...
25 # ----
26
27 p_multiline = re.compile(r"""
28 \\           # One backslash
29 \s*          # 0 or more space
30 \n           # One CR
31 """, re.VERBOSE)
32
33 p_dollar = re.compile(r"""
34 \$\(           # a $ then a (
35 (?P<val>       # open the group val
36 [^)]*          # the group contain 0 or more non ) characters
37 )              # close the group
38 \)             # a ) at the end
39 """, re.VERBOSE)
40
41 p_arobas = re.compile(r"""
42 @              # a @
43 (?P<val>       # open the group val
44 [^@]*            # the group contain 0 or more non @ characters
45 )              # close the group
46 @              # a @ at the end
47 """, re.VERBOSE)
48
49 p_if = re.compile(r"""
50 ^          # beginning of the string
51 \s*        # 0 or more space
52 if         # an if
53 \s+        # 1 or more space
54 (?P<val>   # open the group val
55 .+         # the group contain 1 or more non space characters
56 )          # close the group
57 """, re.VERBOSE)
58
59 p_else = re.compile(r"""
60 ^          # beginning of the line
61 \s*        # 0 or more space
62 else       #
63 \s*        # 0 or more space
64 """, re.VERBOSE)
65
66 p_endif = re.compile(r"""
67 ^          # beginning of the line
68 \s*        # 0 or more space
69 endif      # a endif
70 \s*        # 0 or more space
71 """, re.VERBOSE)
72
73 p_attribution = re.compile(r"""
74 ^              # beginning of the line
75 (?P<spaces>    # open the group spaces
76 \s*            # 0 or more space
77 )              # close the group
78 (?P<key>       # open the group key
79 \w+            # the group contain 1 or more alphanumeric characters
80 )              # close the group
81 \s*            # 0 or more space
82 (?P<method>    # open the group method
83 \+?            # 0 or 1 +
84 =              # One =
85 )              # close the group
86 (?P<value>     # open the group value
87 .*             # 0 or more any characters 
88 )              # close the group
89 """, re.VERBOSE)
90
91 # -----
92
93 class CMakeFile(object):
94     
95     def __init__(self, the_root, root, dirs, files, f, module):
96         #
97         self.the_root = the_root
98         self.root = root
99         self.dirs = dirs
100         self.files = files
101         self.module = module
102         #
103         from os.path import join
104         self.amFile = join(root, f)
105         self.listsFile = join(root, "CMakeLists.txt")
106         #
107         self.parseFile()
108         #
109         return
110     
111     def parseFile(self):
112         
113         # --
114         # Read the Makefile.am file
115         # --
116         amFile = self.amFile
117         stream = open(amFile)
118         content = stream.read()
119         stream.close()
120         
121         # --
122         # Replace the composed lines separated by "\\n" by an unique line
123         # --
124         content = p_multiline.sub(r' ', content)
125         
126         # --
127         # Compatibility netgen plugin
128         # --
129         content = content.replace("../NETGEN/libNETGEN.la", "${NETGEN_LIBS}")
130         
131         # --
132         # Compatibility VTK 6.0
133         # --
134         content = content.replace("VTK_LIBS", "VTK_LIBRARIES")
135         
136         # --
137         cas_list = [
138             "BinLPlugin",
139             "BinPlugin",
140             "BinTObjPlugin",
141             "BinXCAFPlugin",
142             "FWOSPlugin",
143             "PTKernel",
144             "StdLPlugin",
145             "StdPlugin",
146             "TKAdvTools",
147             "TKBin",
148             "TKBinL",
149             "TKBinTObj",
150             "TKBinXCAF",
151             "TKBO",
152             "TKBool",
153             "TKBRep",
154             "TKCAF",
155             "TKCDF",
156             "TKernel",
157             "TKFeat",
158             "TKFillet",
159             "TKG2d",
160             "TKG3d",
161             "TKGeomAlgo",
162             "TKGeomBase",
163             "TKHLR",
164             "TKIGES",
165             "TKLCAF",
166             "TKMath",
167             "TKMesh",
168             "TKMeshVS",
169             "TKNIS",
170             "TKOffset",
171             "TKOpenGl",
172             "TKPCAF",
173             "TKPLCAF",
174             "TKPrim",
175             "TKPShape",
176             "TKService",
177             "TKShapeSchema",
178             "TKShHealing",
179             "TKStdLSchema",
180             "TKStdSchema",
181             "TKSTEP",
182             "TKSTEP209",
183             "TKSTEPAttr",
184             "TKSTEPBase",
185             "TKSTL",
186             "TKTObj",
187             "TKTopAlgo",
188             "TKV2d",
189             "TKV3d",
190             "TKVRML",
191             "TKXCAF",
192             "TKXCAFSchema",
193             "TKXDEIGES",
194             "TKXDESTEP",
195             "TKXMesh",
196             "TKXml",
197             "TKXmlL",
198             "TKXmlTObj",
199             "TKXmlXCAF",
200             "TKXSBase",
201             "XCAFPlugin",
202             "XmlLPlugin",
203             "XmlPlugin",
204             "XmlTObjPlugin",
205             "XmlXCAFPlugin",
206             ]
207         vtk_list = [
208             "vtkCommonPythonD",
209             "vtkGraphicsPythonD",
210             "vtkImagingPythonD",
211             "vtkPythonCore",
212             "vtkIOImage",
213             ]
214         kernel_list  = [
215             "CalciumC",
216             "DF",
217             "Launcher",
218             "LifeCycleCORBATest",
219             "NamingServiceTest",
220             "OpUtil",
221             "Registry",
222             "ResourcesManager",
223             "SALOMEBasics",
224             "SalomeCatalog",
225             "SalomeCommunication",
226             "SalomeContainer",
227             "SalomeDatastream",
228             "SalomeDSCContainer",
229             "SalomeDSClient",
230             "SalomeDSCSupervBasic",
231             "SalomeDSCSuperv",
232             "SalomeDSImpl",
233             "SALOMEDSImplTest",
234             "SalomeDS",
235             "SALOMEDSTest",
236             "SalomeGenericObj",
237             "SalomeHDFPersist",
238             "SalomeIDLKernel",
239             "SalomeLauncher",
240             "SalomeLifeCycleCORBA",
241             "SALOMELocalTrace",
242             "SALOMELocalTraceTest",
243             "SalomeLoggerServer",
244             "SalomeMPIContainer",
245             "SalomeNotification",
246             "SalomeNS",
247             "SalomeResourcesManager",
248             "SalomeTestComponentEngine",
249             "SalomeTestMPIComponentEngine",
250             "SALOMETraceCollectorTest",
251             "TOOLSDS",
252             "UtilsTest",
253             "with_loggerTraceCollector",
254             "SalomeKernelHelpers",
255             ]
256         gui_list = [
257             "caf",
258             "CAM",
259             "CASCatch",
260             "DDS",
261             "Event",
262             "GLViewer",
263             "LightApp",
264             "LogWindow",
265             "ObjBrowser",
266             "OCCViewer",
267             "OpenGLUtils",
268             "Plot2d",
269             "PyConsole",
270             "PyInterp",
271             "QDS",
272             "qtx",
273             "QxScene",
274             "SalomeApp",
275             "SalomeAppTest",
276             "SalomeIDLGUI",
277             "SalomeObject",
278             "SalomePrs",
279             "SalomePyQtGUILight",
280             "SalomePyQtGUI",
281             "SalomePyQt",
282             "SalomePy",
283             "SalomeSession",
284             "SalomeStyle",
285             "SOCC",
286             "SPlot2d",
287             "std",
288             "SUITApp",
289             "suit",
290             "SUPERVGraph",
291             "SVTK",
292             "ToolsGUI",
293             "ViewerTools",
294             "VTKViewer",
295             "vtkEDFOverloads",
296             "vtkTools"
297             ]
298         geom_list = [
299             "AdvancedGUI",
300             "BasicGUI",
301             "BlocksGUI",
302             "BooleanGUI",
303             "BREPExport",
304             "BREPImport",
305             "BuildGUI",
306             "DisplayGUI",
307             "DlgRef",
308             "EntityGUI",
309             "GenerationGUI",
310             "GEOMAlgo",
311             "GEOMAlgo_NEW",
312             "GEOMArchimede",
313             "GEOMBase",
314             "GEOMbasic",
315             "GEOMClient",
316             "GEOMEngine",
317             "GEOMFiltersSelection",
318             "GEOMimpl",
319             "GEOMObject",
320             "GEOMSketcher",
321             "GEOM",
322             "GEOM_SupervEngine",
323             "GEOMToolsGUI",
324             "GroupGUI",
325             "IGESExport",
326             "IGESImport",
327             "MeasureGUI",
328             "Material",
329             "NMTDS",
330             "NMTDS_NEW",
331             "NMTTools",
332             "NMTTools_NEW",
333             "OCC2VTK",
334             "OperationGUI",
335             "PrimitiveGUI",
336             "RepairGUI",
337             "SalomeIDLGEOM",
338             "ShHealOper",
339             "STEPExport",
340             "STEPImport",
341             "STLExport",
342             "TransformationGUI",
343             "VTKExport",
344             ]
345         med_list = [
346             "interpkernel",
347             "InterpKernelTest",
348             "MEDClientcmodule",
349             "medcouplingclient",
350             "medcouplingcorba",
351             "medcouplingremapper",
352             "medcoupling",
353             "MEDEngine",
354             "medloader",
355             "MEDMEMCppTest",
356             "MEDMEMImpl",
357             "medmem",
358             "MED",
359             "medsplitter",
360             "MEDSPLITTERTest",
361             "med_V2_1",
362             "MEDWrapperBase",
363             "MEDWrapper",
364             "MEDWrapper_V2_1",
365             "MEDWrapper_V2_2",
366             "paramedcouplingcorba",
367             "paramedloader",
368             "paramedmemcompo",
369             "paramedmem",
370             "ParaMEDMEMTest",
371             "SalomeIDLMED",
372             "SalomeIDLMEDTests",
373             ]
374         smesh_list = [
375             "GeomSelectionTools",
376             "MEFISTO2D",
377             "MeshDriverDAT",
378             "MeshDriverMED",
379             "MeshDriverGMF",
380             "MeshDriver",
381             "MeshDriverSTL",
382             "MeshDriverUNV",
383             "SalomeIDLSMESH",
384             "SMDS",
385             "SMESHClient",
386             "SMESHControls",
387             "SMESHDS",
388             "SMESHEngine",
389             "SMESHFiltersSelection",
390             "SMESHimpl",
391             "SMESHObject",
392             "SMESH",
393             "SMESHUtils",
394             "StdMeshersEngine",
395             "StdMeshersGUI",
396             "StdMeshers",
397             ]
398         full_list  = cas_list + vtk_list
399         full_list += kernel_list + gui_list
400         full_list += geom_list + med_list + smesh_list
401         # --
402         # E.A. : sort by len before substitution ...
403         # Why ? Thing to "-lMEDWrapper" then "-lMEDWrapper_V2_1" substition
404         # And you understand ...
405         # --
406         full_list.sort(cmp = lambda x, y : cmp(len(y), len(x)))
407         # --
408         for key in full_list:
409             content = content.replace("-l%s"%(key), "${%s}"%(key))
410          
411             pass
412         
413         # --
414         # Split content in lines to treat each one separately
415         # --
416         lines = content.split('\n')
417         
418         # --
419         # newlines contains the lines of the future CMakeLists.txt file
420         # --
421         newlines = []
422         
423         # --
424         # opened_ifs is used to deals with nested conditionnals
425         # --
426         opened_ifs = []
427         
428         # --
429         # the __thedict__ dictionnary contains key, val
430         # of the Makefile.am file
431         # --
432         self.__thedict__ = {}
433         
434         # --
435         # Initialize file ... mainly includes other cmake files
436         # --
437         self.initialize(newlines)
438         
439         # --
440         # Do the job for each line
441         # --
442         for line in lines:
443             self.treatLine(line, newlines, opened_ifs)
444             pass
445         
446         # --
447         # Finalize file ... it is in here the cmake job is done
448         # --
449         self.finalize(newlines)
450         
451         # --
452         # Concatenate newlines into content
453         # --
454         content = '\n'.join(newlines)
455         
456         # --
457         # Add a CR at end if necessary
458         # --
459         lines = content.split('\n')
460         # lines = [ l.strip() for l in lines ]
461         if len(lines[-1]) != 0:
462             lines.append('')
463             pass
464         content = '\n'.join(lines)
465         
466         # --
467         self.content  = "# ---------------------------------------------------------------------\n"
468         self.content += "# This file was automatically generated by am2cmake (erwan.adam@cea.fr)\n"
469         self.content += "# ---------------------------------------------------------------------\n"
470         self.content += content
471         
472         # --
473         return
474     
475     def initialize(self, newlines):
476         if self.root == self.the_root:
477             # --
478             newlines.append("""
479             CMAKE_MINIMUM_REQUIRED(VERSION 2.4.7 FATAL_ERROR)
480             IF(COMMAND cmake_policy)
481             cmake_policy(SET CMP0003 NEW)
482             ENDIF(COMMAND cmake_policy)
483             """)
484             # --
485             newlines.append("""
486             ENABLE_TESTING()
487             """)
488             # --
489             newlines.append("""
490             SET(MODULE %s)
491             """%(self.module.upper()))
492             # --
493             if self.module == "netgen":
494                 newlines.append("""
495                 INCLUDE(${CMAKE_SOURCE_DIR}/cmake/FindPLATFORM.cmake)
496                 INCLUDE(${CMAKE_SOURCE_DIR}/cmake/FindCAS.cmake)
497                 """)
498             else:
499                 if self.module == "kernel":
500                     newlines.append("""
501                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindPLATFORM.cmake)
502                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindPYTHON.cmake)
503                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindOMNIORB.cmake)
504                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindPTHREADS.cmake)
505                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindMPI.cmake)
506                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindHDF5.cmake)
507                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindBOOST.cmake)
508                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindLIBXML2.cmake)
509                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindSWIG.cmake)
510                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindCPPUNIT.cmake)
511                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindDOXYGEN.cmake)
512                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindSalomeLIBBATCH.cmake)
513                     INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindSPHINX.cmake)
514                     """)
515                     pass
516                 else:
517                     if self.module == "med":
518                         newlines.append("""
519                         SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR})
520                         IF(KERNEL_ROOT_DIR)
521                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindPLATFORM.cmake)
522                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindPYTHON.cmake)
523                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindOMNIORB.cmake)
524                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindPTHREADS.cmake)
525                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindMPI.cmake)
526                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindHDF5.cmake)
527                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindBOOST.cmake)
528                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindLIBXML2.cmake)
529                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSWIG.cmake)
530                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindCPPUNIT.cmake)
531                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindDOXYGEN.cmake)
532                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSalomeLIBBATCH.cmake)
533                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindKERNEL.cmake)
534                         ELSE(KERNEL_ROOT_DIR)
535                         INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindPLATFORM.cmake)
536                         INCLUDE(${CMAKE_SOURCE_DIR}/adm_local_without_kernel/cmake_files/FindMPI.cmake)
537                         ENDIF(KERNEL_ROOT_DIR)
538                         """)
539                     else:
540                         newlines.append("""
541                         SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR})
542                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/FindPLATFORM.cmake)
543                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/FindPYTHON.cmake)
544                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/FindOMNIORB.cmake)
545                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/FindPTHREADS.cmake)
546                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/FindMPI.cmake)
547                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/FindHDF5.cmake)
548                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/FindBOOST.cmake)
549                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/FindLIBXML2.cmake)
550                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/FindSWIG.cmake)
551                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindCPPUNIT.cmake)
552                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/FindDOXYGEN.cmake)
553                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSalomeLIBBATCH.cmake)
554                         INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/FindKERNEL.cmake)
555                         """)
556                         pass
557                     if self.module == "gui":
558                         newlines.append("""
559                         INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindCAS.cmake)
560                         INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindQT4.cmake)
561                         INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindOPENGL.cmake)
562                         INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindVTK.cmake)
563                         INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindQWT.cmake)
564                         INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindSIPPYQT.cmake)
565                         """)
566                     else:
567                         newlines.append("""
568                         SET(GUI_ROOT_DIR $ENV{GUI_ROOT_DIR})
569                         IF(GUI_ROOT_DIR)
570                         INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/deprecated/FindCAS.cmake)
571                         INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/deprecated/FindQT4.cmake)
572                         INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/deprecated/FindOPENGL.cmake)
573                         INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/deprecated/FindVTK.cmake)
574                         INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/deprecated/FindQWT.cmake)
575                         INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/deprecated/FindSIPPYQT.cmake)
576                         INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/deprecated/FindGUI.cmake)
577                         ENDIF(GUI_ROOT_DIR)
578                         """)
579                         if self.module == "med":
580                             #METIS must be after PARMETIS to prevent to activate METIS if PARMETIS already exists
581                             newlines.append("""
582                             INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindPARMETIS.cmake)
583                             INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindMETIS.cmake)
584                             INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindSCOTCH.cmake)
585                             INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindSPLITTER.cmake)
586                             INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindRENUMBER.cmake)
587                             INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindMEDFILE.cmake)
588                             IF(WINDOWS)
589                             INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindXDR.cmake)
590                             ENDIF(WINDOWS)
591                             """)
592                             pass
593                         if self.module == "smesh":
594                             newlines.append("""
595                             SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR})
596                             SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
597                             INCLUDE(${GEOM_ROOT_DIR}/adm_local/cmake_files/FindGEOM.cmake)
598                             INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMEDFILE.cmake)
599                             INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
600                             INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSPHINX.cmake)
601                             """)
602                             pass
603                         if self.module == "geom":
604                             newlines.append("""
605                             INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSPHINX.cmake)
606                             """)
607                             pass
608
609                         if self.module == "netgenplugin":
610                             newlines.append("""
611                             SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR})
612                             SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
613                             SET(SMESH_ROOT_DIR $ENV{SMESH_ROOT_DIR})
614                             INCLUDE(${GEOM_ROOT_DIR}/adm_local/cmake_files/FindGEOM.cmake)
615                             INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
616                             INCLUDE(${SMESH_ROOT_DIR}/adm_local/cmake_files/FindSMESH.cmake)
617                             INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindNETGEN.cmake)
618                             """)
619                             pass
620                         if self.module == "blsurfplugin":
621                             newlines.append("""
622                             SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR})
623                             SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
624                             SET(SMESH_ROOT_DIR $ENV{SMESH_ROOT_DIR})
625                             INCLUDE(${GEOM_ROOT_DIR}/adm_local/cmake_files/FindGEOM.cmake)
626                             INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
627                             INCLUDE(${SMESH_ROOT_DIR}/adm_local/cmake_files/FindSMESH.cmake)
628                             INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindCADSURF.cmake)
629                             """)
630                             pass
631                         if self.module in ["ghs3dplugin", "hexoticplugin"]:
632                             newlines.append("""
633                             SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR})
634                             SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
635                             SET(SMESH_ROOT_DIR $ENV{SMESH_ROOT_DIR})
636                             INCLUDE(${GEOM_ROOT_DIR}/adm_local/cmake_files/FindGEOM.cmake)
637                             INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
638                             INCLUDE(${SMESH_ROOT_DIR}/adm_local/cmake_files/FindSMESH.cmake)
639                             """)
640                             pass
641                         if self.module == "ghs3dprlplugin":
642                             newlines.append("""
643                             SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR})
644                             SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
645                             SET(SMESH_ROOT_DIR $ENV{SMESH_ROOT_DIR})
646                             INCLUDE(${GEOM_ROOT_DIR}/adm_local/cmake_files/FindGEOM.cmake)
647                             INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMEDFILE.cmake)
648                             INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
649                             INCLUDE(${SMESH_ROOT_DIR}/adm_local/cmake_files/FindSMESH.cmake)
650                             """)
651                             pass
652                         if self.module == "visu":
653                             newlines.append("""
654                             SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
655                             INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
656                             """)
657                             pass
658                         if self.module == "yacs":
659                             newlines.append("""
660                             INCLUDE(${CMAKE_SOURCE_DIR}/adm/cmake/FindEXPAT.cmake)
661                             INCLUDE(${CMAKE_SOURCE_DIR}/adm/cmake/FindGRAPHVIZ.cmake)
662                             INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSPHINX.cmake)
663                             """)
664                             pass
665                         if self.module == "jobmanager":
666                             newlines.append("""
667                             INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSPHINX.cmake)
668                             """)
669                             pass
670                         if self.module == "hxx2salome":
671                             newlines.append("""
672                             SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
673                             INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMEDFILE.cmake)
674                             INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
675                             """)
676                             pass
677                         pass
678                     pass
679                 pass
680             # --
681             newlines.append("""
682             SET(DOXYGEN_IS_OK 0)
683             """)
684             if self.module not in ['med']:
685                 newlines.append("""
686                 IF(WINDOWS)
687                 SET(CPPUNIT_IS_OK 0)
688                 MESSAGE(STATUS "cppunit is disabled.")
689                 ENDIF(WINDOWS)
690                 """)
691                 pass
692             # --
693             if self.module == "kernel":
694                 newlines.append("""
695                 SET(WITH_LOCAL 1)
696                 SET(WITH_BATCH 1)
697                 SET(CALCIUM_IDL_INT_F77 long)
698                 SET(CALCIUM_CORBA_INT_F77 CORBA::Long)
699                 SET(LONG_OR_INT int)
700                 """)
701             elif self.module == "gui":
702                 newlines.append("""
703                 SET(GUI_ENABLE_CORBA ${CORBA_GEN})
704                 SET(ENABLE_VTKVIEWER ON)
705                 SET(ENABLE_SALOMEOBJECT ON)
706                 SET(ENABLE_OCCVIEWER ON)
707                 SET(ENABLE_GLVIEWER ON)
708                 SET(ENABLE_PLOT2DVIEWER ON)
709                 SET(ENABLE_PYCONSOLE ON)
710                 SET(ENABLE_SUPERVGRAPHVIEWER ON)
711                 SET(ENABLE_QXGRAPHVIEWER ON)
712                 """)
713                 pass
714             elif self.module == "jobmanager":
715                 newlines.append("""
716                 IF(GUI_ROOT_DIR)
717                 SET(HAS_GUI ON)
718                 ENDIF(GUI_ROOT_DIR)
719                 """)
720                 pass
721             elif self.module == "geom":
722                 newlines.append("""
723                 IF(GUI_ROOT_DIR)
724                 SET(GEOM_ENABLE_GUI ON)
725                 ENDIF(GUI_ROOT_DIR)
726                 """)
727                 pass
728             elif self.module == "medfile":
729                 newlines.append("""
730                 SET(MED_NUM_MAJEUR 3)
731                 SET(MED_NUM_MINEUR 0)
732                 SET(MED_NUM_RELEASE 3)
733                 SET(LONG_OR_INT int)
734                 IF(NOT WINDOWS)
735                 SET(FLIBS -lgfortranbegin -lgfortran)
736                 ENDIF(NOT WINDOWS)
737                 """)
738                 pass
739             elif self.module == "med":
740                 newlines.append("""
741                 IF(KERNEL_ROOT_DIR)
742                 SET(MED_ENABLE_KERNEL ON)
743                 IF(NOT WINDOWS)
744                 SET(MED_ENABLE_SPLITTER ON)
745                 ENDIF(NOT WINDOWS)
746                 ENDIF(KERNEL_ROOT_DIR)
747                 IF(GUI_ROOT_DIR)
748                 SET(MED_ENABLE_GUI ON)
749                 ENDIF(GUI_ROOT_DIR)
750                 """)
751                 pass
752             elif self.module == "smesh":
753                 newlines.append("""
754                 IF(GUI_ROOT_DIR)
755                 SET(SMESH_ENABLE_GUI ON)
756                 ENDIF(GUI_ROOT_DIR)
757                 """)
758                 pass
759             elif self.module == "netgen":
760                 newlines.append("""
761                 SET(OCCFLAGS ${CAS_CPPFLAGS})
762                 SET(OCCLIBS ${CAS_LDPATH})
763                 SET(OCCLIBS ${OCCLIBS} ${TKernel} ${TKGeomBase} ${TKMath} ${TKG2d} ${TKG3d} ${TKXSBase} ${TKOffset} ${TKFillet} ${TKShHealing})
764                 SET(OCCLIBS ${OCCLIBS} ${TKMesh} ${TKMeshVS} ${TKTopAlgo} ${TKGeomAlgo} ${TKBool} ${TKPrim} ${TKBO} ${TKIGES} ${TKBRep})
765                 SET(OCCLIBS ${OCCLIBS} ${TKSTEPBase} ${TKSTEP} ${TKSTL} ${TKSTEPAttr} ${TKSTEP209} ${TKXDESTEP} ${TKXDEIGES} ${TKXCAF} ${TKLCAF} ${FWOSPlugin})
766                 """)
767                 pass
768             elif self.module == "netgenplugin":
769                 newlines.append("""
770                 IF(GUI_ROOT_DIR)
771                 SET(NETGENPLUGIN_ENABLE_GUI ON)
772                 ENDIF(GUI_ROOT_DIR)
773                 """)
774                 pass
775             elif self.module == "blsurfplugin":
776                 newlines.append("""
777                 IF(GUI_ROOT_DIR)
778                 SET(BLSURFPLUGIN_ENABLE_GUI ON)
779                 ENDIF(GUI_ROOT_DIR)
780                 """)
781                 pass
782             elif self.module == "ghs3dplugin":
783                 newlines.append("""
784                 IF(GUI_ROOT_DIR)
785                 SET(GHS3DPLUGIN_ENABLE_GUI ON)
786                 ENDIF(GUI_ROOT_DIR)
787                 """)
788                 pass
789             elif self.module == "hexoticplugin":
790                 newlines.append("""
791                 IF(GUI_ROOT_DIR)
792                 SET(HEXOTICPLUGIN_ENABLE_GUI ON)
793                 ENDIF(GUI_ROOT_DIR)
794                 """)
795                 pass
796             elif self.module == "ghs3dprlplugin":
797                 newlines.append("""
798                 IF(GUI_ROOT_DIR)
799                 SET(GHS3DPRLPLUGIN_ENABLE_GUI ON)
800                 ENDIF(GUI_ROOT_DIR)
801                 """)
802                 pass
803             elif self.module == "yacs":
804                 newlines.append("""
805                 SET(SALOME_KERNEL ON)
806                 SET(HAS_GUI ON)
807                 SET(WITH_QT4 ON)
808                 """)
809                 pass
810             # --
811             newlines.append("""
812             set(VERSION 7.0.0)
813             set(SHORT_VERSION 7.0)
814             set(XVERSION 0x070000)
815             set(VERSION_DEV 1)
816             """)
817             pass
818         # --
819         newlines.append("""
820         SET(VERSION_INFO 0.0.0)
821         SET(SOVERSION_INFO 0)
822         SET(SUBDIRS)
823         SET(bin_PROGRAMS)
824         SET(AM_CPPFLAGS -I${CMAKE_BINARY_DIR} )
825         SET(AM_CXXFLAGS -I${CMAKE_BINARY_DIR})
826         SET(LDADD)
827         SET(pythondir lib/python${PYTHON_VERSION}/site-packages)
828         SET(salomepythondir ${pythondir}/salome)
829         SET(salomepypkgdir ${salomepythondir}/salome)
830         """)
831         
832         if self.module == "smesh" and self.root[-len('SMESH_PY'):] == 'SMESH_PY':
833            newlines.append("""
834            SET(smeshpypkgdir ${salomepythondir}/salome/smesh)
835            """)
836            pass
837         if self.module == "netgen":
838             newlines.append(r'''
839             SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DNO_PARALLEL_THREADS -DOCCGEOMETRY -I${CMAKE_CURRENT_SOURCE_DIR})
840             ''')
841         elif self.module == "kernel":
842             newlines.append(r'''
843             SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${CMAKE_BINARY_DIR}/salome_adm -include SALOMEconfig.h)
844             SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${CMAKE_BINARY_DIR}/salome_adm -include SALOMEconfig.h)
845             ''')
846         else:
847             if self.module not in ["yacs"]:
848                 newlines.append(r'''
849                 IF(KERNEL_ROOT_DIR)
850                 SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h)
851                 SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h)
852                 ENDIF(KERNEL_ROOT_DIR)
853                 ''')
854                 pass
855             if self.module == "gui":
856                 newlines.append(r'''
857                 IF(KERNEL_ROOT_DIR)
858                 SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DWITH_SALOMEDS_OBSERVER -DSUIT_ENABLE_PYTHON)
859                 SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DWITH_SALOMEDS_OBSERVER -DSUIT_ENABLE_PYTHON)
860                 ENDIF(KERNEL_ROOT_DIR)
861                 ''')
862                 pass
863             if self.module in ["smesh", "netgenplugin", "blsurfplugin", "ghs3dplugin", "hexoticplugin"]:
864                 newlines.append(r'''
865                 SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DWITH_SMESH_CANCEL_COMPUTE)
866                 SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DWITH_SMESH_CANCEL_COMPUTE)
867                 ''')
868                 pass
869             if self.module == "ghs3dplugin":
870     # TODO: Auto-detect TetGen-GHS3D version automatically
871                 newlines.append(r'''
872                 SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DGHS3D_VERSION=42)
873                 SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DGHS3D_VERSION=42)
874                 ''')
875                 pass              
876             if self.module == "hxx2salome":
877                 key = "_SRC"
878                 if self.the_root[-len(key):] != key:
879                     msg = "Source dir must finished with %s !"%(key)
880                     raise Exception(msg)
881                 hxxmodule = self.the_root[:-len(key)]
882                 from os.path import basename
883                 hxxmodule = basename(hxxmodule)
884                 hxxmodule = hxxmodule.lower()
885                 self.hxxmodule = hxxmodule
886                 newlines.append(r'''
887                 SET(HXXCPP_ROOT_DIR $ENV{%sCPP_ROOT_DIR})
888                 SET(AM_CPPFLAGS ${AM_CPPFLAGS} -I${HXXCPP_ROOT_DIR}/include)
889                 SET(AM_CXXFLAGS ${AM_CXXFLAGS} -I${HXXCPP_ROOT_DIR}/include)
890                 SET(LDADD ${LDADD} -L${HXXCPP_ROOT_DIR}/lib)
891                 '''%(hxxmodule.upper()))
892                 pass
893             pass
894         # --
895         return
896     
897     def treatLine(self, line, newlines, opened_ifs):
898         
899         # --
900         # Print the comment above the line itself
901         # --
902         if line.find('#') >= 0:
903             fields = line.split('#')
904             line = fields[0]
905             comment = '#'.join([''] + fields[1:])
906             newlines.append(comment)
907             if len(line) == 0:
908                 return
909             pass
910         
911         # --
912         # If the line begins with 'include ', just comment it
913         # --
914         if line.find("include ") == 0:
915             if line.find("include $(top_srcdir)/config/automake.common") == 0:
916                 for l in [
917                     "MAINTAINERCLEANFILES = Makefile.in",
918                     "AM_CPPFLAGS=-I$(top_srcdir)/include -I$(top_builddir)/include",
919                     "AM_FFLAGS=-I$(top_srcdir)/include  -I$(top_builddir)/include",
920                     "AM_FCFLAGS=-I$(top_srcdir)/include  -I$(top_builddir)/include",
921                     "AM_CPPFLAGS+=@HDF5_CPPFLAGS@",
922                     "AM_LDFLAGS=@HDF5_LDFLAGS@",
923                     ]:
924                     self.treatLine(l, newlines, opened_ifs)
925                     pass
926                 pass
927             else:
928                 newlines.append("# " + line)
929                 pass
930             return
931         
932         # --
933         # If the line begins with '-include', just comment it
934         # --
935         if line.find("-include") == 0:
936             newlines.append("# " + line)
937             return
938         
939         # --
940         # If the line is a definition of a make rule, just comment it
941         # --
942         if line.count(':') == 1:
943             newlines.append("# " + line)
944             return
945         
946         # --
947         # A particuliar case where there are two ":" on the same line
948         # --
949         if line.find('install-exec-local:') == 0:
950             newlines.append("# " + line)
951             return
952         
953         # --
954         # If the line begin by a tabulation, consider it's a makefile command and comment it
955         # --
956         if line.find("\t") == 0:
957             newlines.append("# " + line)
958             return
959         
960         # --
961         # --
962         key = "-version-info"
963         if line.find(key) >= 0:
964             # --
965             before = line.split(key)[0]
966             after = line[len(before)+len(key):]
967             sep = after[0]
968             after = after[1:]
969             version_info = after.split()[0]
970             line = line.replace(key+sep+version_info, "")
971             # --
972             version_info = version_info.replace(':', '.')
973             soversion_info = version_info.split('.')[0]
974             newlines.append("SET(VERSION_INFO " + version_info + ")")
975             newlines.append("SET(SOVERSION_INFO " + soversion_info + ")")
976             # --
977             pass
978         
979         # --
980         # Replace the $(TOTO) by ${TOTO}
981         # Replace the @TOTO@  by ${TOTO}
982         # --
983         line = p_dollar.sub(r"${\1}", line)
984         line = p_arobas.sub(r"${\1}", line)
985         
986         # --
987         line = line.replace(r"${top_builddir}", r"${CMAKE_BINARY_DIR}")
988         line = line.replace(r"${top_srcdir}", r"${CMAKE_SOURCE_DIR}")
989         line = line.replace(r"${srcdir}", r"${CMAKE_CURRENT_SOURCE_DIR}")
990         line = line.replace(r"${builddir}", r"${CMAKE_CURRENT_BINARY_DIR}")
991         line = line.replace(r"${datadir}", r"${CMAKE_INSTALL_PREFIX}/share")
992         
993         # --
994         # Check if the line is a 'if' condition
995         # If yes, replace it by a cmake grammar
996         # --
997         match = p_if.match(line)
998         if match:
999             theif = match.group("val")
1000             if theif[0] == "!":
1001                 theif = "NOT " + theif[1:]
1002                 pass
1003             line = p_if.sub(r"IF(%s)"%(theif), line)
1004             opened_ifs.append(theif)
1005             newlines.append(line)
1006             return
1007         
1008         # --
1009         # Check if the line is a 'else' condition
1010         # If yes, replace it by a cmake grammar
1011         # --
1012         match = p_else.match(line)
1013         if match:
1014             line = "ELSE(%s)"%(opened_ifs[-1])
1015             newlines.append(line)
1016             return
1017         
1018         # --
1019         # Check if the line is a 'endif' condition
1020         # If yes, replace it by a cmake grammar
1021         # --
1022         match = p_endif.match(line)
1023         if match:
1024             line = "ENDIF(%s)"%(opened_ifs[-1])
1025             opened_ifs[-1:] = []
1026             newlines.append(line)
1027             return
1028         
1029         # --
1030         # Check if the line is an attribution '=' or '+='
1031         # --
1032         match = p_attribution.match(line)
1033         if match:
1034             self.treatAttribution(match, newlines)
1035             return
1036         
1037         # --
1038         newlines.append(line)
1039         
1040         # --
1041         return
1042     
1043     def treatAttribution(self, match, newlines):
1044         
1045         spaces = match.group("spaces")
1046         key = match.group("key")
1047         method = match.group("method")
1048         value = match.group("value")
1049         # print [spaces, key, method, value]
1050         
1051         # --
1052         # Open cmake SET command
1053         # --
1054         newlines.append(spaces + "SET(" + key)
1055         
1056         # --
1057         # If method is '+=', put the previous definition as first value
1058         # --
1059         if method == "+=":
1060             newlines.append("%s    ${%s}"%(spaces, key))
1061             pass
1062         
1063         # --
1064         fields = value.split()
1065         
1066         for i in range(len(fields)):
1067             newlines.append("%s    %s"%(spaces, fields[i]))
1068             pass
1069         
1070         # --
1071         if method == "+=":
1072             # --
1073             # The try: except KeyError is here if the +=
1074             # is an error which occurs in salome ...
1075             # --
1076             try:
1077                 self.__thedict__[key] += fields[:]
1078             except KeyError:
1079                 self.__thedict__[key] = fields[:]
1080                 pass
1081             pass
1082         else:
1083             self.__thedict__[key]  = fields[:]
1084             pass
1085         
1086         # --
1087         # Close cmake SET command
1088         # --
1089         
1090         newlines.append("%s)"%(spaces))
1091         
1092         return
1093     
1094     def finalize(self, newlines):
1095       
1096         # --
1097         # Convert the .in files in build dir
1098         # --
1099         upmod = ""
1100         if self.module == "hexoticplugin" :
1101           upmod = "HexoticPLUGIN"
1102         else :
1103           upmod = self.module.upper()
1104
1105         import operator
1106         mod = self.module
1107         if mod in ['kernel', 'gui'] and self.root[-len('gui'):] == 'gui' or mod == 'med' and operator.contains(self.root, 'doxygen'):
1108             newlines.append(r'''
1109             SET(top_builddir
1110                 ${CMAKE_BINARY_DIR}
1111             )
1112             SET(top_srcdir 
1113                 ${CMAKE_SOURCE_DIR}
1114             )
1115             SET(srcdir 
1116                 ${CMAKE_CURRENT_SOURCE_DIR}
1117             )
1118             SET(builddir 
1119                 ${CMAKE_CURRENT_BINARY_DIR}
1120             )
1121             SET(datadir
1122                 ${CMAKE_INSTALL_PREFIX}/share
1123             )
1124             SET(docdir 
1125                 ${datadir}/doc/salome
1126             )
1127             ''')
1128             self.files.append("static/header.html.in")
1129         elif self.root[-len(mod):] == upmod and operator.contains(self.root, 'doc') or mod in ['kernel', 'gui', 'geom', 'med', 'smesh', 'visu', 'blsurfplugin'] and self.root[-len('tui'):] == 'tui' or operator.contains(self.root, 'doc') and mod in ['pyhello']:
1130             newlines.append(r'''
1131             SET(top_builddir
1132                 ${CMAKE_BINARY_DIR}
1133             )
1134             SET(top_srcdir 
1135                 ${CMAKE_SOURCE_DIR}
1136             )
1137             SET(srcdir 
1138                 ${CMAKE_CURRENT_SOURCE_DIR}
1139             )
1140             SET(builddir 
1141                 ${CMAKE_CURRENT_BINARY_DIR}
1142             )
1143             SET(datadir
1144                 ${CMAKE_INSTALL_PREFIX}/share
1145             )
1146             SET(docdir 
1147                 ${datadir}/doc/salome
1148             )
1149             ''')
1150             if mod not in ['blsurfplugin']:
1151                 self.files.append("static/header.html.in")
1152             if mod in ['geom', 'smesh', 'visu','netgenplugin','blsurfplugin','hexoticplugin','ghs3dplugin',"ghs3dprlplugin"] and self.root[-len(mod):] == upmod:
1153               self.files.append("static/header_py.html.in")
1154      
1155         if self.module == "yacs":
1156             key = "salomegui"
1157             if self.root[-len(key):] == key:
1158                 self.files.append("resources/YACSCatalog.xml.in")
1159                 self.files.append("resources/SalomeApp.xml.in")
1160                 pass
1161             pass
1162             from os import path
1163             if operator.contains(self.root, 'YACS_SRC'+path.sep+'doc'):
1164                 newlines.append(r'''
1165                 SET(srcdir 
1166                   ${CMAKE_CURRENT_SOURCE_DIR}
1167                 )
1168                 ''')
1169             
1170         if self.module == "jobmanager":
1171             key = "salomegui"
1172             if self.root[-len(key):] == key:
1173                 self.files.append("resources/SalomeApp.xml.in")
1174                 pass
1175             pass
1176         for f in self.files:
1177             if f[-3:] == ".in":
1178                 if self.module == 'yacs' and f == "Doxyfile.in":
1179                     continue
1180                 if f == "sstream.in":
1181                     continue
1182                 if f in ["runContainer.in", "stopContainer.in"]:
1183                     if self.module == "med":
1184                         if self.root[-3:] == "csh":
1185                             continue
1186                         pass
1187                     pass
1188                 if f == "SALOMEconfig.ref.in":
1189                     out = "SALOMEconfig.h"
1190                 else:
1191                     out = f[:-3]
1192                     pass
1193                 newlines.append(r'''
1194                 SET(input ${CMAKE_CURRENT_SOURCE_DIR}/%s)
1195                 '''%(f))
1196                 newlines.append(r'''
1197                 SET(output ${CMAKE_CURRENT_BINARY_DIR}/%s)
1198                 '''%(out))
1199                 newlines.append(r'''
1200                 MESSAGE(STATUS "Creation of ${output}")
1201                 CONFIGURE_FILE(${input} ${output})
1202                 ''')
1203                 pass
1204             pass
1205
1206         # --
1207         # add commands for generating of user's documentation
1208         # --
1209         doc_gui_destination = "${CMAKE_INSTALL_PREFIX}/share/doc/salome/gui/%s"%(upmod)
1210         doc_tui_destination = "${CMAKE_INSTALL_PREFIX}/share/doc/salome/tui/%s"%(upmod)
1211         doc_destination = "${CMAKE_INSTALL_PREFIX}/share/doc/salome"
1212         head_source = "${CMAKE_CURRENT_SOURCE_DIR}/images/head.png"
1213         if mod == 'kernel':
1214             prepare_generating_doc_src = "${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/prepare_generating_doc.py"
1215         else:
1216             prepare_generating_doc_src = "$ENV{KERNEL_ROOT_DIR}/bin/salome/prepare_generating_doc.py"
1217         if mod in ['kernel', 'gui'] and self.root[-len('gui'):] == 'gui' or mod == 'med' and operator.contains(self.root, 'doxygen'):
1218             if mod == 'med':
1219                 doc_source = "${CMAKE_CURRENT_BINARY_DIR}/doc_ref_user/html"
1220                 input = "Doxyfile_med_user"
1221             else:
1222                 doc_source = "${CMAKE_CURRENT_BINARY_DIR}/%s"%(upmod)
1223                 input = ""
1224             newlines.append("""\t    ADD_CUSTOM_TARGET(usr_docs ${DOXYGEN_EXECUTABLE} %s
1225             COMMAND ${PYTHON_EXECUTABLE} -c "import shutil, sys; shutil.rmtree(r'''%s''', True); shutil.copytree(r'''%s''', r'''%s'''); shutil.copy(r'''%s''', r'''%s''')"
1226             VERBATIM 
1227             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}             
1228             )"""%(input, doc_gui_destination, doc_source, doc_gui_destination, head_source, doc_gui_destination))
1229         from os import path
1230         if mod in ['geom', 'smesh', 'visu', 'netgenplugin','blsurfplugin','hexoticplugin','ghs3dplugin','ghs3dprlplugin','pyhello'] and self.root[-len(mod):] == upmod and operator.contains(self.root, 'doc')  or  mod in ['pyhello'] and operator.contains(self.root, 'doc'):
1231             ign = r"""'*usr_docs*', '*CMakeFiles*', '*.cmake', 'doxyfile*', '*.vcproj', 'static', 'Makefile*'"""
1232             if mod in ['geom', 'smesh']:
1233                 if mod == 'geom':
1234                     tmp = 'geompy'
1235                     input = "COMMAND ${DOXYGEN_EXECUTABLE} doxyfile_tui \n\t\t"
1236                 else:
1237                     tmp =  'smesh' 
1238                     input = ''
1239                 newlines.append(r"""
1240                 IF(WINDOWS)
1241                   STRING(REPLACE "/" "\\" f "%s")
1242                 ELSE(WINDOWS)
1243                   SET(f "%s")                       
1244                 ENDIF(WINDOWS)
1245                 ADD_CUSTOM_TARGET(usr_docs ${PYTHON_EXECUTABLE} ${f} %s.py ${CMAKE_SOURCE_DIR}/src/%s_SWIG/%sDC.py %s
1246                 %sCOMMAND ${DOXYGEN_EXECUTABLE} doxyfile_py
1247                 COMMAND ${DOXYGEN_EXECUTABLE} doxyfile
1248                 COMMAND ${PYTHON_EXECUTABLE} -c "import os; os.remove(r'''%s.py''')"
1249                 COMMAND ${PYTHON_EXECUTABLE} -c "import shutil, sys; shutil.rmtree(r'''%s''', True); shutil.copytree(r'''${CMAKE_CURRENT_BINARY_DIR}''', r'''%s''', ignore=shutil.ignore_patterns(%s)); shutil.copy(r'''%s''', r'''%s''')"
1250                 VERBATIM 
1251                 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}             
1252                 )"""%(prepare_generating_doc_src, prepare_generating_doc_src, tmp, upmod, tmp, tmp, input, tmp, doc_gui_destination, doc_gui_destination, ign, head_source, doc_gui_destination))
1253                 newlines.append(r"""ADD_DEPENDENCIES(usr_docs html_docs)""")
1254             else:
1255                 config_f = ""
1256                 if mod in ['netgenplugin','blsurfplugin','hexoticplugin','ghs3dplugin', "ghs3dprlplugin"] :
1257                     config_f = "${DOXYGEN_EXECUTABLE} doxyfile_py"
1258                 elif mod not in ['pyhello']:
1259                     config_f = "${DOXYGEN_EXECUTABLE} doxyfile_idl"
1260                 newlines.append("""\t    ADD_CUSTOM_TARGET(usr_docs %s
1261                 COMMAND ${DOXYGEN_EXECUTABLE} doxyfile
1262                 COMMAND ${PYTHON_EXECUTABLE} -c "import shutil, sys; shutil.rmtree(r'''%s''',True); shutil.copytree(r'''${CMAKE_CURRENT_BINARY_DIR}''',r'''%s''', ignore=shutil.ignore_patterns(%s)); shutil.copy(r'''%s''',r'''%s''')"
1263                 VERBATIM 
1264                 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
1265                 )"""%(config_f, doc_gui_destination, doc_gui_destination, ign, head_source, doc_gui_destination))
1266         elif mod in ['yacs', 'jobmanager'] and operator.contains(self.root, upmod + '_SRC'+path.sep+'doc'):
1267             from sys import platform
1268             params = '';
1269             if platform == "win32":
1270                 params = '-Q';
1271             newlines.append(r"""
1272             ADD_CUSTOM_TARGET(html_docs ${SPHINX_EXECUTABLE} %s -c ${CMAKE_BINARY_DIR}/doc -b html ${ALLSPHINXOPTS} html
1273             COMMAND ${PYTHON_EXECUTABLE} -c \"import shutil\;shutil.rmtree('''%s''', True)\;shutil.copytree('''${CMAKE_CURRENT_BINARY_DIR}/html''', '''%s''')\"
1274             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"""%(params, doc_gui_destination, doc_gui_destination))               
1275         elif mod in ['kernel', 'smesh', 'geom'] and operator.contains(self.root, upmod + '_SRC'+path.sep+'doc'+path.sep+'docutils'):
1276             from sys import platform
1277             params = ""
1278             ext = ""
1279             prf = ""
1280             if platform == "win32":
1281                 params = '-Q';
1282                 ext = "bat"
1283                 prf = "call"
1284                 cmd = "STRING(REPLACE \"/\" \"\\\\\" SCR"
1285             else:
1286                 ext = "sh"
1287                 prf = ". "
1288                 cmd = "SET(SCR"
1289             doc_gui_destination = "${CMAKE_INSTALL_PREFIX}/share/doc/salome/tui/%s/docutils"%(upmod)
1290             scr = self.writeEnvScript(upmod)                    
1291             newlines.append(r"""
1292             %s "%s")
1293             FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/env_s.%s "${SCR}")
1294             ADD_CUSTOM_TARGET(html_docs %s ${CMAKE_CURRENT_BINARY_DIR}/env_s.%s && ${SPHINX_EXECUTABLE} %s -c ${CMAKE_BINARY_DIR}/doc/docutils -b html ${ALLSPHINXOPTS} html
1295             COMMAND ${PYTHON_EXECUTABLE} -c \"import shutil\;shutil.rmtree('''%s''', True)\;shutil.copytree('''${CMAKE_CURRENT_BINARY_DIR}/html''', '''%s''')\"
1296             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"""%(cmd, scr, ext, prf, ext, params, doc_gui_destination, doc_gui_destination))
1297
1298
1299
1300
1301   # --
1302   # add commands for generating of developer's documentation
1303   # --
1304   
1305         upmod = self.module.upper()
1306         if mod in ['kernel', 'gui', 'med', 'smesh', 'visu', 'blsurfplugin'] and self.root[-len('tui'):] == 'tui':
1307             if mod == 'kernel':
1308                 tmp = """\tADD_CUSTOM_TARGET(dev_docs ${DOXYGEN_EXECUTABLE} -u
1309             COMMAND ${DOXYGEN_EXECUTABLE}
1310             COMMAND ${PYTHON_EXECUTABLE} -c "import os; os.remove(r'''${CMAKE_CURRENT_BINARY_DIR}/doxyfile.bak''')"  """
1311                 tmp1=""
1312             else: 
1313                 tmp = """\tADD_CUSTOM_TARGET(dev_docs ${DOXYGEN_EXECUTABLE}"""
1314                 if mod == 'visu':
1315                     tmp1= r"""\n           COMMAND ${PYTHON_EXECUTABLE} -c "from shutil import copy; copy(r'''${CMAKE_CURRENT_SOURCE_DIR}/images/visuscreen.png''', r'''%s''')" """%(doc_tui_destination)
1316                 elif mod == 'smesh':
1317                     tmp1= """\n            COMMAND ${PYTHON_EXECUTABLE} -c "from shutil import copy; copy(r'''${CMAKE_CURRENT_SOURCE_DIR}/images/smeshscreen.png''', r'''%s''')" """%(doc_tui_destination)
1318                 else:
1319                     tmp1=""
1320             doc_source = "${CMAKE_CURRENT_BINARY_DIR}/%s"%(upmod)
1321             inst_head_command=""
1322             if mod not in ['blsurfplugin']:
1323                 inst_head_command = "; shutil.copy(r'''%s''', r'''%s''')"%(head_source, doc_tui_destination)
1324             newlines.append(tmp + """
1325             COMMAND ${PYTHON_EXECUTABLE} -c "import shutil, sys; shutil.rmtree(r'''%s''', True); shutil.copytree(r'''%s''', r'''%s''')%s" """%(doc_tui_destination, doc_source, doc_tui_destination, inst_head_command) + tmp1 + """
1326             VERBATIM 
1327             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}             
1328             )""")
1329         if mod == 'geom' and self.root[-len('tui'):] == 'tui':
1330             tmp = 'geompy'
1331             doc_source = "${CMAKE_CURRENT_BINARY_DIR}/%s"%(upmod)
1332             newlines.append(r"""
1333             IF(WINDOWS)
1334               STRING(REPLACE "/" "\\" f "%s")
1335             ELSE(WINDOWS)
1336               SET(f "%s")
1337             ENDIF(WINDOWS)
1338             ADD_CUSTOM_TARGET(dev_docs ${PYTHON_EXECUTABLE} ${f} ${CMAKE_BINARY_DIR}/src/%s_SWIG/%s.py ${CMAKE_SOURCE_DIR}/src/%s_SWIG/%sDC.py %s
1339             COMMAND ${DOXYGEN_EXECUTABLE} doxyfile
1340             COMMAND ${PYTHON_EXECUTABLE} -c "import os; os.remove(r'''${CMAKE_BINARY_DIR}/src/%s_SWIG/%s.py''')"
1341             COMMAND ${PYTHON_EXECUTABLE} -c "import shutil, sys; shutil.rmtree(r'''%s''', True); shutil.copytree(r'''%s''', r'''%s'''); shutil.copy(r'''%s''', r'''%s'''); shutil.copy(r'''${CMAKE_CURRENT_SOURCE_DIR}/images/geomscreen.png''', r'''%s''')"
1342             VERBATIM 
1343             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}             
1344             )"""%(prepare_generating_doc_src, prepare_generating_doc_src, upmod, tmp, upmod, tmp, tmp, upmod, tmp, doc_tui_destination, doc_source, doc_tui_destination, head_source, doc_tui_destination, doc_tui_destination))
1345
1346         # --
1347         # convert the SUBDIRS in cmake grammar
1348         # --
1349         if 1: # self.__thedict__.has_key("SUBDIRS"):
1350             newlines.append(r'''
1351             FOREACH(dir ${SUBDIRS})
1352             IF(NOT dir STREQUAL .)
1353             ADD_SUBDIRECTORY(${dir})
1354             ENDIF(NOT dir STREQUAL .)
1355             ENDFOREACH(dir ${SUBDIRS})
1356             ''')
1357             pass
1358         
1359         # --
1360         # --
1361         for key in ["lib_LTLIBRARIES", "noinst_LTLIBRARIES", "salomepyexec_LTLIBRARIES", "libparaview_LTLIBRARIES"] :
1362             if self.__thedict__.has_key(key):
1363                 self.addLibTarget(key, newlines)
1364                 pass
1365             pass
1366         
1367         # --
1368         # --
1369         for key in ["bin_PROGRAMS", "check_PROGRAMS"]:
1370             if self.__thedict__.has_key(key):
1371                 self.addBinTarget(key, newlines)
1372                 pass
1373             pass
1374         
1375         # --
1376         # --
1377         if self.__thedict__.has_key("BASEIDL_FILES"):
1378             if not self.__thedict__.has_key("IDL_FILES"):
1379                 self.__thedict__["IDL_FILES"] = self.__thedict__["BASEIDL_FILES"]
1380                 newlines.append('''
1381                 SET(IDL_FILES ${BASEIDL_FILES})
1382                 ''')
1383                 pass
1384             pass
1385         
1386         # --
1387         # --
1388         
1389         key = "IDL_FILES"
1390         if self.__thedict__.has_key(key):
1391             if self.module == "kernel":
1392                 newlines.append('''
1393                 SET(IDL_FILES ${IDL_FILES} Calcium_Ports.idl)
1394                 ''')
1395                 pass
1396             newlines.append('''
1397             FOREACH(input ${IDL_FILES})
1398             STRING(REGEX REPLACE ".idl" "" base ${input})
1399             SET(src ${CMAKE_CURRENT_BINARY_DIR}/${base}SK.cc)
1400             SET(outputs ${src})
1401             SET(dynsrc ${CMAKE_CURRENT_BINARY_DIR}/${base}DynSK.cc)
1402             SET(outputs ${outputs} ${dynsrc})
1403             SET(inc ${CMAKE_CURRENT_BINARY_DIR}/${base}.hh)
1404             SET(outputs ${outputs} ${inc})
1405             IF(input STREQUAL Calcium_Ports.idl)
1406             SET(input ${CMAKE_CURRENT_BINARY_DIR}/${input})
1407             ELSE(input STREQUAL Calcium_Ports.idl)
1408             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1409             ENDIF(input STREQUAL Calcium_Ports.idl)
1410             SET(flags ${IDLCXXFLAGS} ${OMNIORB_IDLCXXFLAGS})
1411             STRING(REGEX MATCH "-bcxx" ISBCXX ${flags})
1412             IF(NOT ISBCXX)
1413             SET(flags -bcxx ${flags})
1414             ENDIF(NOT ISBCXX)
1415             ADD_CUSTOM_COMMAND(
1416             OUTPUT ${outputs}
1417             COMMAND ${OMNIORB_IDL} ${flags} ${input}
1418             MAIN_DEPENDENCY ${input}
1419             )
1420             ''')
1421             newlines.append('''
1422             install(FILES ${input} DESTINATION idl/salome)
1423             ''')
1424             if self.module not in ["pyhello"]:
1425                 newlines.append('''
1426                 SET(IDL_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${base}.hh)
1427                 install(FILES ${IDL_HEADER} DESTINATION include/salome)
1428                 ''')
1429                 pass
1430             newlines.append('''
1431             INSTALL(CODE "SET(IDL_FILE ${input})")
1432             INSTALL(CODE "SET(DIR ${salomepythondir})")
1433             IF(WINDOWS)
1434             INSTALL(CODE "SET(DIR bin/salome)")
1435             ENDIF(WINDOWS)
1436             INSTALL(CODE "SET(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})")
1437             INSTALL(CODE "SET(OMNIORB_IDL_PYTHON ${OMNIORB_IDL_PYTHON})")
1438             # --
1439             SET(flags)
1440             FOREACH(f ${IDLPYFLAGS})
1441             SET(flags "${flags} ${f}")
1442             ENDFOREACH(f ${IDLPYFLAGS})
1443             STRING(REGEX MATCH "-bpython" ISBPYTHON ${flags})
1444             IF(NOT ISBPYTHON)
1445             SET(flags "-bpython ${flags}")
1446             ENDIF(NOT ISBPYTHON)
1447             SET(IDLPYFLAGS ${flags})
1448             STRING(REPLACE "\\\\" "/" IDLPYFLAGS ${IDLPYFLAGS})
1449             INSTALL(CODE "SET(IDLPYFLAGS ${IDLPYFLAGS})")
1450             # --
1451             ''')
1452             if self.module == "kernel":
1453                 newlines.append('''
1454                 INSTALL(SCRIPT ${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/install_python_from_idl.cmake)
1455                 ''')
1456             else:
1457                 newlines.append('''
1458                 STRING(REPLACE "\\\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR})
1459                 INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/install_python_from_idl.cmake)
1460                 ''')
1461                 pass
1462             newlines.append('''
1463             ENDFOREACH(input ${IDL_FILES})
1464             ''')
1465             pass
1466         
1467         # --
1468         # --
1469         for key in ["SWIG_SRC", "SWIGSOURCES", "SWIG_DEF"]:
1470             if self.__thedict__.has_key(key):
1471                 newlines.append('''
1472                 SET(SWIG_SOURCES ${%s})
1473                 '''%(key))
1474                 self.__thedict__["SWIG_SOURCES"] = self.__thedict__[key]
1475                 pass
1476             pass
1477         
1478         # --
1479         # --
1480         if self.__thedict__.has_key("SWIG_SOURCES"):
1481             newlines.append('''
1482             IF(SWIG_SOURCES MATCHES ";")
1483             STRING(REGEX REPLACE ";.*" "" SWIG_SOURCES_FIRST "${SWIG_SOURCES}")
1484             ELSE(SWIG_SOURCES MATCHES ";")
1485             SET(SWIG_SOURCES_FIRST "${SWIG_SOURCES}")
1486             ENDIF(SWIG_SOURCES MATCHES ";")
1487             SET(flags)
1488             FOREACH(f ${SWIG_FLAGS} ${MY_SWIG_FLAGS})
1489             SET(test ON)
1490             IF(flags)
1491             LIST(FIND flags ${f} index)
1492             IF(NOT index EQUAL -1)
1493             SET(test OFF)
1494             ENDIF(NOT index EQUAL -1)
1495             ENDIF(flags)
1496             IF(test)
1497             SET(flags ${flags} ${f})
1498             ENDIF(test)
1499             ENDFOREACH(f ${SWIG_FLAGS} ${MY_SWIG_FLAGS})
1500             ADD_CUSTOM_COMMAND(
1501             OUTPUT ${build_srcs}
1502             COMMAND ${SWIG_EXECUTABLE} ${flags} -o ${build_srcs} ${CMAKE_CURRENT_SOURCE_DIR}/${SWIG_SOURCES_FIRST}
1503             MAIN_DEPENDENCY ${SWIG_SOURCES}
1504             )
1505             ''')
1506             pass
1507         
1508         # --
1509         # --
1510         if self.__thedict__.has_key("BUILT_SOURCES"):
1511             newlines.append('''
1512             FOREACH(f ${BUILT_SOURCES})
1513             IF(f MATCHES "WRAP.cxx$")
1514             # STRING(REGEX REPLACE "WRAP.cxx" "WRAP.h" inc ${f})
1515             STRING(REGEX REPLACE "WRAP.cxx" ".i" input ${f})
1516             ADD_CUSTOM_COMMAND(
1517             OUTPUT ${f} # ${inc}
1518             COMMAND ${SWIG_EXECUTABLE} ${SWIG_FLAGS} ${SWIG_PYTHON_INCLUDES} ${MYSWIG_FLAGS} -o ${f} ${CMAKE_CURRENT_SOURCE_DIR}/${input}
1519             MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/${input}
1520             )
1521             ENDIF(f MATCHES "WRAP.cxx$")
1522             ENDFOREACH(f ${BUILT_SOURCES})
1523             ''')
1524             pass
1525
1526         # --
1527         # --
1528         key = "MOC_FILES"
1529         if self.__thedict__.has_key(key):
1530             newlines.append('''
1531             FOREACH(output ${MOC_FILES})
1532             ''')
1533             if self.module in ["jobmanager", "yacs"]:
1534                 newlines.append('''
1535                 STRING(REGEX REPLACE _moc.cxx .hxx input ${output})
1536                 ''')
1537             else:
1538                 newlines.append('''
1539                 STRING(REGEX REPLACE _moc.cxx .h input ${output})
1540                 ''')
1541                 pass
1542             newlines.append('''
1543             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1544             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1545             ADD_CUSTOM_COMMAND(
1546             OUTPUT ${output}
1547             COMMAND ${QT_MOC_EXECUTABLE} ${MOC_FLAGS} ${input} -o ${output}
1548             MAIN_DEPENDENCY ${input}
1549             )
1550             ENDFOREACH(output ${MOC_FILES})
1551             ''')
1552             pass
1553         
1554         # --
1555         # --
1556         key = "MOC_FILES_HXX"
1557         if self.__thedict__.has_key(key):
1558             newlines.append('''
1559             FOREACH(output ${MOC_FILES_HXX})
1560             ''')
1561             newlines.append('''
1562             STRING(REGEX REPLACE _moc.cxx .hxx input ${output})
1563             ''')
1564             newlines.append('''
1565             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1566             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1567             ADD_CUSTOM_COMMAND(
1568             OUTPUT ${output}
1569             COMMAND ${QT_MOC_EXECUTABLE} ${MOC_FLAGS} ${input} -o ${output}
1570             MAIN_DEPENDENCY ${input}
1571             )
1572             ENDFOREACH(output ${MOC_FILES_HXX})
1573             ''')
1574             pass
1575         
1576         # --
1577         # --
1578         key = "UIC_FILES"
1579         if self.__thedict__.has_key(key):
1580             newlines.append('''
1581             FOREACH(output ${UIC_FILES})
1582             STRING(REPLACE "ui_" "" input ${output})
1583             STRING(REPLACE ".h" ".ui" input ${input})
1584             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1585             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1586             ADD_CUSTOM_COMMAND(
1587             OUTPUT ${output}
1588             COMMAND ${QT_UIC_EXECUTABLE} -o ${output} ${input}
1589             MAIN_DEPENDENCY ${input}
1590             )
1591             ENDFOREACH(output ${UIC_FILES})
1592             ''')
1593             pass
1594         
1595         # --
1596         # --
1597         key = "PYUIC_FILES"
1598         if self.__thedict__.has_key(key):
1599             newlines.append('''
1600             FOREACH(output ${PYUIC_FILES})
1601             STRING(REPLACE "_ui.py" ".ui" input ${output})
1602             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1603             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1604             ADD_CUSTOM_COMMAND(
1605             OUTPUT ${output}
1606             COMMAND ${PYUIC_EXECUTABLE} -o ${output} ${input}
1607             MAIN_DEPENDENCY ${input}
1608             )
1609             ENDFOREACH(output ${PYUIC_FILES})
1610             ADD_CUSTOM_TARGET(BUILD_PY_UI_FILES ALL DEPENDS ${PYUIC_FILES})
1611             ''')
1612             pass
1613         
1614         # --
1615         # --
1616         key = "QRC_FILES"
1617         if self.__thedict__.has_key(key):
1618             newlines.append('''
1619             FOREACH(output ${QRC_FILES})
1620             STRING(REGEX REPLACE "qrc_" "" input ${output})
1621             STRING(REGEX REPLACE ".cxx" ".qrc" input ${input})
1622             STRING(REGEX REPLACE ".qrc" "" name ${input})
1623             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1624             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1625             ADD_CUSTOM_COMMAND(
1626             OUTPUT ${output}
1627             COMMAND ${QT_RCC_EXECUTABLE} ${input} -o ${output} -name ${name}
1628             MAIN_DEPENDENCY ${input}
1629             )
1630             ENDFOREACH(output ${QRC_FILES})
1631             ''')
1632             pass
1633         
1634         # --
1635         # --
1636         key = "SIP_FILES"
1637         if self.__thedict__.has_key(key):
1638             newlines.append('''
1639             FOREACH(input ${SIP_FILES})
1640             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1641             SET(output)
1642             FOREACH(out ${SIP_SRC})
1643             SET(output ${output} ${CMAKE_CURRENT_BINARY_DIR}/${out})
1644             ENDFOREACH(out ${SIP_SRC})
1645             ADD_CUSTOM_COMMAND(
1646             OUTPUT ${output}
1647             COMMAND ${SIP_EXECUTABLE} ${PYQT_SIPFLAGS} ${input}
1648             MAIN_DEPENDENCY ${input}
1649             )
1650             ENDFOREACH(input ${SIP_FILES})
1651             ''')
1652             pass
1653
1654         # --
1655         # For GUI/tools/dlgfactory
1656         # --
1657         key = "UIC_FILES_QDIALOG"
1658         if self.__thedict__.has_key(key):
1659             newlines.append('''
1660             FOREACH(output ${UIC_FILES_QDIALOG} ${UIC_FILES_GDIALOG})
1661             STRING(REPLACE "ui_" "" input ${output})
1662             STRING(REPLACE ".hxx" ".ui" input ${input})
1663             SET(input_path ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1664             IF (NOT EXISTS ${input_path})
1665               SET(input_path ${CMAKE_CURRENT_BINARY_DIR}/${input})
1666             ENDIF (NOT EXISTS ${input_path})
1667             ADD_CUSTOM_COMMAND(
1668             OUTPUT ${output}
1669             COMMAND ${QT_UIC_EXECUTABLE} -o ${output} ${input_path}
1670             MAIN_DEPENDENCY ${input}
1671             )
1672             ENDFOREACH(output ${UIC_FILES})
1673
1674             FOREACH(output ${MOC_FILES_QDIALOG} ${MOC_FILES_GDIALOG})
1675             STRING(REGEX REPLACE _moc.cxx .hxx input ${output})
1676             SET(input_path ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1677             IF (NOT EXISTS ${input_path})
1678               SET(input_path ${CMAKE_CURRENT_BINARY_DIR}/${input})
1679             ENDIF (NOT EXISTS ${input_path})
1680             ADD_CUSTOM_COMMAND(
1681             OUTPUT ${output}
1682             COMMAND ${QT_MOC_EXECUTABLE} ${MOC_FLAGS} ${input_path} -o ${output}
1683             MAIN_DEPENDENCY ${input}
1684             )
1685             ENDFOREACH(output ${MOC_FILES})
1686             
1687             ADD_CUSTOM_COMMAND(
1688             OUTPUT QDialogTest.ui QDialogTest.hxx QDialogTest.cxx
1689             COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dlgfactory.py -n QDialogTest -t qdialog
1690             DEPENDS __QDIALOG__.ui __QDIALOG__.hxx __QDIALOG__.cxx dlgfactory.py
1691             )
1692             
1693             ADD_CUSTOM_COMMAND(
1694             OUTPUT GDialogTest.ui GDialogTest.hxx GDialogTest.cxx
1695             COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dlgfactory.py -n GDialogTest -t gdialog
1696             DEPENDS __GDIALOG__.ui __GDIALOG__.hxx __GDIALOG__.cxx dlgfactory.py
1697             )
1698             ''')
1699             pass
1700
1701         # --
1702         # For make check
1703         # --
1704         for key in ["TESTS"]:
1705             if self.__thedict__.has_key(key):
1706                 newlines.append('''
1707                 SET(UNIT_TEST_PROG ${%s})
1708                 '''%(key))
1709                 self.__thedict__["UNIT_TEST_PROG"] = self.__thedict__[key]
1710                 pass
1711             pass
1712         key = "UNIT_TEST_PROG"
1713         if self.__thedict__.has_key(key):
1714             newlines.append('''
1715             FOREACH(input ${UNIT_TEST_PROG})
1716             GET_FILENAME_COMPONENT(ext ${input} EXT)
1717             IF(ext STREQUAL .py)
1718             SET(test ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1719             ELSE(ext STREQUAL .py)
1720             IF(WINDOWS)
1721             SET(test ${CMAKE_CURRENT_BINARY_DIR}/${input}_exe.exe)
1722             ELSE()
1723             SET(test ${CMAKE_CURRENT_BINARY_DIR}/${input}_exe)
1724             ENDIF()
1725             ENDIF(ext STREQUAL .py)
1726             ADD_TEST(${input} ${test})
1727             SET(fail_regex "KO")
1728             SET_PROPERTY(TEST ${input} PROPERTY FAIL_REGULAR_EXPRESSION "${fail_regex}")
1729             # IF(NOT WINDOWS)
1730             # ADD_TEST(${input}_valgrind valgrind ${test})
1731             # SET_PROPERTY(TEST ${input}_valgrind PROPERTY FAIL_REGULAR_EXPRESSION "${fail_regex}")
1732             # SET_PROPERTY(TEST ${input}_valgrind PROPERTY PASS_REGULAR_EXPRESSION "no leaks are possible")
1733             # ENDIF()
1734             ENDFOREACH(input ${UNIT_TEST_PROG})
1735             ''')
1736             pass
1737         
1738         # --
1739         # Treat the install targets
1740         # --
1741         resdir = self.module
1742         if resdir == "hxx2salome":
1743             resdir = self.hxxmodule
1744             pass
1745         d = {
1746             "salomeadmux_DATA"                 :  "salome_adm/unix",
1747             "dist_salomeadmux_DATA"            :  "salome_adm/unix",
1748             "dist_salome_cmake_DATA"           :  "salome_adm/cmake_files",
1749             "dist_salomem4_DATA"               :  "salome_adm/unix/config_files",
1750             "dist_salome4depr_DATA"            :  "salome_adm/unix/config_files/DEPRECATED",
1751             "dist_admlocalm4_DATA"             :  "adm_local/unix/config_files",
1752             "dist_admlocal_cmake_DATA"         :  "adm_local/cmake_files",
1753             "salomeinclude_DATA"               :  "include/salome",
1754             "salomeinclude_HEADERS"            :  "include/salome",
1755             "nodist_salomeinclude_HEADERS"     :  "include/salome",
1756             "dist_salomeres_DATA"              :  "share/salome/resources/%s"%(resdir),
1757             "nodist_salomeres_DATA"            :  "share/salome/resources/%s"%(resdir),
1758             "nodist_salomeres_SCRIPTS"         :  "share/salome/resources/%s"%(resdir),
1759             "dist_salomescript_SCRIPTS"        :  "bin/salome",
1760             "dist_salomescript_DATA"           :  "bin/salome",
1761             "dist_salomescript_PYTHON"         :  "bin/salome",
1762             "dist_appliskel_SCRIPTS"           :  "bin/salome/appliskel",
1763             "dist_appliskel_PYTHON"            :  "bin/salome/appliskel",
1764             "nodist_salomescript_DATA"         :  "bin/salome",
1765             "salomepython_PYTHON"              :  "${salomepythondir}",
1766             "nodist_salomepython_PYTHON"       :  "${salomepythondir}",
1767             "dist_salomepython_DATA"           :  "${salomepythondir}",
1768             "sharedpkgpython_PYTHON"           :  "${salomepythondir}/shared_modules",
1769             "salomepypkg_PYTHON"               :  "${salomepypkgdir}",
1770             "mypkgpython_PYTHON"               :  "${mypkgpythondir}",
1771             "nodist_mypkgpython_PYTHON"        :  "${mypkgpythondir}",
1772             }
1773         if self.module == "jobmanager":
1774             d["bin_SCRIPTS"] = "bin"
1775             pass
1776         if self.module == "medfile":
1777             d = {
1778                 "include_HEADERS"        :  "include",
1779                 "nodist_include_HEADERS" :  "include",
1780                 "bin_SCRIPTS"            :  "bin",
1781                 "doc_DATA"               :  "${docdir}",
1782                 }
1783             pass
1784         if self.module == "netgen":
1785             d = {
1786                 "include_HEADERS"        :  "include",
1787                 "noinst_HEADERS"         :  "share/netgen/include",
1788                 "dist_pkgdata_DATA"      :  "share/netgen",
1789                 "dist_doc_DATA"          :  "share/doc/netgen",
1790                 }
1791             pass
1792         for key, value in d.items():
1793             if self.__thedict__.has_key(key):
1794                 self.addInstallTarget(key, value, newlines)
1795                 pass
1796             pass
1797         
1798         # --
1799         return
1800     
1801     def setLibAdd(self, key, newlines):
1802         # --
1803         newlines.append(r'''
1804         SET(libadd)
1805         ''')
1806         # --
1807         newlines.append(r'''
1808         IF(WINDOWS)
1809         SET(targets)
1810         SET(targets ${targets} MEFISTO2D)
1811         FOREACH(target ${targets})
1812         IF(name STREQUAL ${target})
1813         SET(dir $ENV{F2CHOME})
1814         STRING(REPLACE "\\\\" "/" dir ${dir})
1815         SET(libadd ${libadd} ${dir}/LIBF77.lib)
1816         SET(libadd ${libadd} ${dir}/LIBI77.lib)
1817         ENDIF(name STREQUAL ${target})
1818         ENDFOREACH(target ${targets})
1819         ELSE(WINDOWS)
1820         SET(targets)
1821         SET(targets ${targets} MEFISTO2D)
1822         FOREACH(target ${targets})
1823         IF(name STREQUAL ${target})
1824         SET(libadd ${libadd} -lf2c)
1825         ENDIF(name STREQUAL ${target})
1826         ENDFOREACH(target ${targets})
1827         ENDIF(WINDOWS)
1828         ''')
1829         # --
1830         newlines.append(r'''
1831         SET(libs ${PLATFORM_LIBADD} ${PLATFORM_LDFLAGS} ${LDADD} ${${amname}_LIBADD} ${${amname}_LDADD} ${${amname}_LDFLAGS})
1832         FOREACH(lib SALOMEBasics SalomeBatch)
1833         IF(name STREQUAL lib)
1834         SET(libs ${libs} ${PTHREAD_LIBS})
1835         ENDIF(name STREQUAL lib)
1836         ENDFOREACH(lib SALOMEBasics SalomeBatch)
1837         ''')
1838         # --
1839         newlines.append(r'''
1840         FOREACH(lib ${libs})
1841         GET_FILENAME_COMPONENT(ext ${lib} EXT)
1842         IF(ext STREQUAL .la)
1843         GET_FILENAME_COMPONENT(lib ${lib} NAME_WE)
1844         STRING(REGEX REPLACE "^lib" "" lib ${lib})
1845         ENDIF(ext STREQUAL .la)
1846         SET(vars)
1847         SET(vars ${vars} -no-undefined)
1848         SET(vars ${vars} -lvtkWidgets)
1849         IF(WINDOWS)
1850         SET(vars ${vars} -module)
1851         SET(vars ${vars} -Wl,-E)
1852         SET(vars ${vars} -Xlinker)
1853         SET(vars ${vars} -export-dynamic)
1854         SET(vars ${vars} -lm)
1855         SET(vars ${vars} -lboost_thread)
1856         SET(vars ${vars} -lboost_signals)
1857         SET(vars ${vars} -pthread -lpthread -ldl)
1858         ENDIF(WINDOWS)
1859         FOREACH(v ${vars})
1860         IF(lib STREQUAL v)
1861         SET(lib)
1862         ENDIF(lib STREQUAL v)
1863         ENDFOREACH(v ${vars})
1864         SET(test OFF)
1865         IF(lib)
1866         STRING(REGEX MATCH "^-lQt" test ${lib})
1867         ENDIF(lib)
1868         IF(NOT test)
1869         SET(libadd ${libadd} ${lib})
1870         ENDIF(NOT test)
1871         ENDFOREACH(lib ${libs})
1872         TARGET_LINK_LIBRARIES(${name} ${libadd})
1873         ''')
1874         # --
1875         newlines.append(r'''
1876         IF(WINDOWS)
1877         SET(targets)
1878         SET(targets ${targets} MEFISTO2D)
1879         FOREACH(target ${targets})
1880         IF(name STREQUAL ${target})
1881         IF(CMAKE_BUILD_TYPE STREQUAL Debug)
1882         SET_TARGET_PROPERTIES(${name} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:MSVCRT")
1883         ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug)
1884         ENDIF(name STREQUAL ${target})
1885         ENDFOREACH(target ${targets})
1886         ENDIF(WINDOWS)
1887         ''')
1888         # --
1889         return
1890     
1891     def setCompilationFlags(self, key, newlines):
1892         newlines.append(r'''
1893         SET(var)
1894         IF(WINDOWS)
1895         SET(targets)
1896         SET(targets ${targets} SalomeIDLKernel)
1897         SET(targets ${targets} SalomeDS)
1898         SET(targets ${targets} SALOMEDSTest)
1899         SET(targets ${targets} SALOMEDS_Client_exe)
1900         SET(targets ${targets} SalomeIDLGEOM)
1901         SET(targets ${targets} GEOMEngine)
1902         SET(targets ${targets} MEDEngine)
1903         SET(targets ${targets} SMESHEngine)
1904         SET(targets ${targets} SMESH)
1905         SET(targets ${targets} SalomeIDLSPADDER)
1906         SET(targets ${targets} MeshJobManagerEngine)
1907         SET(targets ${targets} StdMeshersEngine)
1908         SET(targets ${targets} VISUEngineImpl)
1909         FOREACH(target ${targets})
1910         IF(name STREQUAL ${target})
1911         SET(var ${var} -DNOGDI)
1912         ENDIF(name STREQUAL ${target})
1913         ENDFOREACH(target ${targets})
1914         ENDIF(WINDOWS)
1915         ''')
1916         # --
1917         if self.module in ["medfile", "yacs"]:
1918             newlines.append(r'''
1919             IF(WINDOWS)
1920             SET(var ${var} -DNOGDI)
1921             ENDIF(WINDOWS)
1922             ''')
1923             pass
1924         # --
1925         newlines.append(r'''
1926         IF(WINDOWS)
1927         SET(targets)
1928         SET(targets ${targets} MEFISTO2D)
1929         FOREACH(target ${targets})
1930         IF(name STREQUAL ${target})
1931         SET(dir $ENV{F2CHOME})
1932         STRING(REPLACE "\\\\" "/" dir ${dir})
1933         SET(var ${var} -I${dir})
1934         SET(var ${var} -DF2C_BUILD)
1935         ENDIF(name STREQUAL ${target})
1936         ENDFOREACH(target ${targets})
1937         ENDIF(WINDOWS)
1938         ''')
1939         # --
1940         if self.module in ["geom", "med", "hexoticplugin", "blsurfplugin"]:
1941             newlines.append(r'''
1942             SET(var ${var} -I${CMAKE_CURRENT_SOURCE_DIR})
1943             SET(var ${var} -I${CMAKE_CURRENT_BINARY_DIR})
1944             ''')
1945             pass
1946         newlines.append(r'''
1947         SET(var ${var} ${AM_CPPFLAGS})
1948         SET(var ${var} ${AM_CXXFLAGS})
1949         ''')
1950         # --
1951         newlines.append(r'''
1952         IF(type STREQUAL STATIC)
1953         SET(var ${var} -fPIC)
1954         ENDIF(type STREQUAL STATIC)
1955         ''')
1956         # --
1957         if self.module == "yacs":
1958             newlines.append(r'''
1959             SET(var ${var} -DYACS_PTHREAD)
1960             SET(var ${var} -DCMAKE_BUILD)
1961             SET(var ${var} -DSALOME_KERNEL)
1962             SET(var ${var} -DDSC_PORTS)
1963             SET(var ${var} -DOMNIORB)
1964             ''')
1965             pass
1966         newlines.append(r'''
1967   SET(var ${var} ${PLATFORM_CPPFLAGS})
1968   SET(var ${var} ${PTHREAD_CFLAGS})
1969   SET(var ${var} ${${amname}_CPPFLAGS})
1970   SET(var ${var} ${${amname}_CXXFLAGS})
1971   SET(var ${var} ${${amname}_CFLAGS})
1972         SET(vars)
1973         IF(WINDOWS)
1974         SET(vars ${vars} -include SALOMEconfig.h)
1975         SET(vars ${vars} -ftemplate-depth-32)
1976         SET(vars ${vars} -fPIC)
1977         SET(vars ${vars} -g)
1978         IF("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")          # if platform is Windows 64 bit 
1979         IF(name STREQUAL _pilot)
1980         SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")    # to avoid error C1128
1981         ENDIF(name STREQUAL _pilot)
1982         ENDIF("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
1983         ENDIF(WINDOWS)
1984         SET(flags)
1985         FOREACH(f ${var})
1986         FOREACH(v ${vars})
1987         IF(f STREQUAL v)
1988         SET(f)
1989         ENDIF(f STREQUAL v)
1990         ENDFOREACH(v ${vars})
1991         IF(f)
1992         string(REGEX MATCH "^-I" test_include ${f})
1993         if(test_include)
1994         string(REGEX REPLACE "^-I" "" include_dir ${f})
1995         if(include_dir)
1996         if(include_dir STREQUAL /usr/include)
1997         else(include_dir STREQUAL /usr/include)
1998         string(REGEX MATCH "^\\." test_dot ${include_dir})
1999         if(test_dot)
2000         set(include_dir ${CMAKE_CURRENT_BINARY_DIR}/${include_dir})
2001         endif(test_dot)
2002         include_directories(${include_dir})
2003         endif(include_dir STREQUAL /usr/include)
2004         endif(include_dir)
2005         else(test_include)
2006         SET(flags "${flags} ${f}")
2007         endif(test_include)
2008         ENDIF(f)
2009         ENDFOREACH(f ${var})
2010         SET_TARGET_PROPERTIES(${name} PROPERTIES COMPILE_FLAGS "${flags}")
2011         ''')
2012         return
2013     
2014     def addLibTarget(self, key, newlines):
2015         newlines.append(r'''
2016         FOREACH(amname ${%s})
2017         '''%(key))
2018         # --
2019         # Replace .la by _la ...
2020         # --
2021         newlines.append(r'''
2022         STRING(REPLACE .la _la amname ${amname})
2023         ''')
2024         # --
2025         # Remove the _la for the cmake name
2026         # --
2027         newlines.append(r'''
2028         STRING(LENGTH ${amname} len)
2029         MATH(EXPR newlen "${len}-3")
2030         STRING(SUBSTRING ${amname} 0 ${newlen} name)
2031         ''')
2032         # --
2033         # Does the target begins with lib ??
2034         # If yes, remove lib at beginning for cmake name
2035         # --
2036         newlines.append(r'''
2037         STRING(REGEX MATCH "^lib" BEGIN_WITH_lib ${name})
2038         IF(BEGIN_WITH_lib)
2039         STRING(LENGTH ${name} len)
2040         MATH(EXPR newlen "${len}-3")
2041         STRING(SUBSTRING ${name} 3 ${newlen} name)
2042         ENDIF(BEGIN_WITH_lib)
2043         ''')
2044         # --
2045         # Does the target is an idl library
2046         # --
2047         newlines.append(r'''
2048         STRING(REGEX MATCH "IDL" ISIDL ${name})
2049         ''')
2050         # --
2051         # Set the type of the library
2052         # --
2053         newlines.append(r'''
2054         IF(ISIDL)
2055         IF(WINDOWS)
2056         SET(type STATIC)
2057         ELSE(WINDOWS)
2058         SET(type SHARED)
2059         ENDIF(WINDOWS)
2060         ELSE(ISIDL)
2061         SET(type SHARED)
2062         ENDIF(ISIDL)
2063         ''')
2064         if key == "noinst_LTLIBRARIES":
2065             newlines.append(r'''
2066             IF(WINDOWS)
2067             SET(type STATIC)
2068             ELSE(WINDOWS)
2069             SET(type STATIC)
2070             ENDIF(WINDOWS)
2071             ''')
2072             pass
2073         # --
2074         # Set sources for the library
2075         # --
2076         newlines.append(r'''
2077         SET(srcs)
2078         FOREACH(src ${${amname}_SOURCES} ${dist_${amname}_SOURCES})
2079         GET_FILENAME_COMPONENT(ext ${src} EXT)
2080         IF(ext STREQUAL .f)
2081         IF(src STREQUAL trte.f)
2082         SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${src})
2083         STRING(REPLACE ".f" ".c" src ${src})
2084         SET(src ${CMAKE_CURRENT_BINARY_DIR}/${src})
2085         SET(output ${src})
2086         SET(cmd f2c)
2087         IF(NOT WINDOWS)
2088         IF(CMAKE_SIZEOF_VOID_P STREQUAL 8)
2089         SET(cmd valgrind f2c)  # f2c seems to be buggy on 64 bits ... but with valgrind, it works :)
2090         ENDIF()
2091         ENDIF(NOT WINDOWS)
2092         ADD_CUSTOM_COMMAND(
2093         OUTPUT ${output}
2094         COMMAND ${cmd} ${input}
2095         MAIN_DEPENDENCY ${input}
2096         )
2097         ELSE(src STREQUAL trte.f)
2098         SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${src})
2099         STRING(REPLACE ".f" ".o" src ${src})
2100         SET(src ${CMAKE_CURRENT_BINARY_DIR}/${src})
2101         SET(output ${src})
2102         IF(WINDOWS)
2103         SET(F77 g77)
2104         ELSE(WINDOWS)
2105         SET(F77 gfortran)
2106         ENDIF(WINDOWS)
2107         ADD_CUSTOM_COMMAND(
2108         OUTPUT ${output}
2109         COMMAND ${F77} -c -o ${output} ${input}
2110         MAIN_DEPENDENCY ${input}
2111         )
2112         ENDIF(src STREQUAL trte.f)
2113         ENDIF(ext STREQUAL .f)
2114         SET(srcs ${srcs} ${src})
2115         ENDFOREACH(src ${${amname}_SOURCES} ${dist_${amname}_SOURCES})
2116         ''')
2117         newlines.append(r'''
2118         SET(l ${nodist_${amname}_SOURCES} ${UIC_FILES})
2119         FOREACH(f ${l})
2120         SET(src ${CMAKE_CURRENT_BINARY_DIR}/${f})
2121         SET(srcs ${srcs} ${src})
2122         ENDFOREACH(f ${l})
2123         ''')
2124         newlines.append(r'''
2125         SET(build_srcs)
2126         SET(l ${nodist_${amname}_SOURCES} ${BUILT_SOURCES})
2127         FOREACH(f ${l})
2128         GET_FILENAME_COMPONENT(ext ${f} EXT)
2129         IF(ext STREQUAL .py)
2130         SET(fff)
2131         ELSE(ext STREQUAL .py)
2132         SET(fff ${CMAKE_CURRENT_BINARY_DIR}/${f})
2133         ENDIF(ext STREQUAL .py)
2134         IF(fff)
2135         IF(build_srcs)
2136         LIST(FIND build_srcs ${fff} index)
2137         IF(NOT index EQUAL -1)
2138         SET(fff)
2139         ENDIF(NOT index EQUAL -1)
2140         ENDIF(build_srcs)
2141         ENDIF(fff)
2142         IF(fff)
2143         SET(build_srcs ${build_srcs} ${fff})
2144         ENDIF(fff)
2145         ENDFOREACH(f ${l})
2146         ''')
2147         # --
2148         # Add the library to cmake
2149         # --
2150         newlines.append(r'''
2151         ADD_LIBRARY(${name} ${type} ${srcs})
2152         ''')
2153         # --
2154         # The compilation flags
2155         # --
2156         self.setCompilationFlags(key, newlines)
2157         # --
2158         newlines.append(r'''
2159         SET_TARGET_PROPERTIES(${name} PROPERTIES VERSION ${VERSION_INFO} SOVERSION ${SOVERSION_INFO})
2160         ''')
2161         # --
2162         self.setLibAdd(key, newlines)
2163         # --
2164         if 1: # key != "noinst_LTLIBRARIES":
2165             newlines.append(r'''
2166             SET(key %s)
2167             '''%(key))
2168             newlines.append(r'''
2169             SET(test ON)
2170             IF(${key} STREQUAL noinst_LTLIBRARIES)
2171             SET(test OFF)
2172             ENDIF(${key} STREQUAL noinst_LTLIBRARIES)
2173             ''')
2174             if self.module == "netgen" :
2175                 newlines.append(r'''
2176                 IF(${key} STREQUAL noinst_LTLIBRARIES)
2177                 IF(WINDOWS)
2178                 SET(test ON)
2179                 ENDIF(WINDOWS)
2180                 ENDIF(${key} STREQUAL noinst_LTLIBRARIES)
2181                 ''')
2182                 pass
2183             newlines.append(r'''
2184             IF(test)
2185             ''')
2186             if self.module in ["medfile", "netgen"]:
2187                 newlines.append(r'''
2188                 SET(DEST lib)
2189                 ''')
2190             elif key == "libparaview_LTLIBRARIES":
2191                 newlines.append(r'''
2192                 SET(DEST lib/paraview)
2193                 ''')                
2194             else:
2195                 newlines.append(r'''
2196                 SET(DEST lib/salome)
2197                 ''')
2198                 pass
2199             newlines.append(r'''
2200             IF(BEGIN_WITH_lib)
2201             INSTALL(TARGETS ${name} DESTINATION ${DEST})
2202             ''')
2203             if self.module == "gui":
2204                 newlines.append(r'''
2205                 FOREACH(lib SalomePyQt)
2206                 IF(name STREQUAL lib)
2207                 IF(WINDOWS)
2208                 IF(CMAKE_BUILD_TYPE STREQUAL Release)
2209                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME ${name}.pyd)
2210                 ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
2211                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME ${name}_d.pyd)
2212                 ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
2213                 ELSE(WINDOWS)
2214                 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so DESTINATION ${DEST} RENAME ${name}.so)
2215                 ENDIF(WINDOWS)
2216                 ENDIF(name STREQUAL lib)
2217                 ENDFOREACH(lib SalomePyQt)
2218                 FOREACH(lib SalomePy)
2219                 IF(name STREQUAL lib)
2220                 IF(WINDOWS)
2221                 IF(CMAKE_BUILD_TYPE STREQUAL Release)
2222                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME lib${name}.pyd)
2223                 ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
2224                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME lib${name}_d.pyd)
2225                 ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
2226                 ENDIF(WINDOWS)
2227                 ENDIF(name STREQUAL lib)
2228                 ENDFOREACH(lib SalomePy)
2229                 ''')
2230                 pass
2231             if self.module == "geom":
2232                 newlines.append(r'''
2233                 IF(WINDOWS)
2234                 STRING(REGEX MATCH "Export" ISExport ${name})
2235                 IF(ISExport)
2236                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME lib${name}.dll)
2237                 ENDIF(ISExport)
2238                 STRING(REGEX MATCH "Import" ISImport ${name})
2239                 IF(ISImport)
2240                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME lib${name}.dll)
2241                 ENDIF(ISImport)
2242                 ENDIF(WINDOWS)
2243                 ''')
2244                 pass
2245             newlines.append(r'''
2246             ELSE(BEGIN_WITH_lib)
2247             ''')
2248             newlines.append(r'''
2249             IF(WINDOWS)
2250             INSTALL(TARGETS ${name} DESTINATION ${salomepythondir})
2251             IF(CMAKE_BUILD_TYPE STREQUAL Release)
2252             INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${salomepythondir}/${name}.dll DESTINATION ${salomepythondir} RENAME ${name}.pyd)
2253             ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
2254             INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${salomepythondir}/${name}.dll DESTINATION ${salomepythondir} RENAME ${name}_d.pyd)
2255             ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
2256             ELSE(WINDOWS)
2257             GET_TARGET_PROPERTY(version ${name} VERSION)
2258             GET_TARGET_PROPERTY(soversion ${name} SOVERSION)
2259             INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION ${salomepythondir} RENAME ${name}.so.${version})
2260             INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION ${salomepythondir} RENAME ${name}.so.${soversion})
2261             INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION ${salomepythondir} RENAME ${name}.so)
2262             ENDIF(WINDOWS)
2263             ''')
2264             newlines.append(r'''
2265             ENDIF(BEGIN_WITH_lib)
2266             ''')
2267             newlines.append(r'''
2268             ENDIF(test)
2269             ''')
2270             pass
2271         # --
2272         newlines.append(r'''
2273         ENDFOREACH(amname ${%s})
2274         '''%(key))
2275         # --
2276         return
2277     
2278     def addBinTarget(self, key, newlines):
2279         # --
2280         newlines.append(r'''
2281         FOREACH(amname ${%s})
2282         '''%(key))
2283         # --
2284         newlines.append(r'''
2285         SET(test ON)
2286         ''')
2287         if key == "check_PROGRAMS":
2288             newlines.append(r'''
2289             IF(bin_PROGRAMS)
2290             STRING(REGEX MATCH ${amname} is_present ${bin_PROGRAMS})
2291             IF(is_present)
2292             SET(test OFF)
2293             ENDIF(is_present)
2294             ENDIF(bin_PROGRAMS)
2295             ''')
2296             pass
2297         newlines.append(r'''
2298         IF(test)
2299         ''')
2300         # --
2301         newlines.append(r'''
2302         SET(name "${amname}_exe")
2303         SET(srcs ${${amname}_SOURCES} ${dist_${amname}_SOURCES})
2304         SET(l ${nodist_${amname}_SOURCES})
2305         FOREACH(f ${l})
2306         SET(src ${CMAKE_CURRENT_BINARY_DIR}/${f})
2307         SET(srcs ${srcs} ${src})
2308         ENDFOREACH(f ${l})
2309         LIST(LENGTH srcs nb)
2310         IF(nb)
2311         ADD_EXECUTABLE(${name} ${srcs})
2312         ''')
2313         # --
2314         self.setCompilationFlags(key, newlines)
2315         # --
2316         self.setLibAdd(key, newlines)
2317         # --
2318         if self.module in ["jobmanager", "medfile", "netgen"]:
2319             newlines.append(r'''
2320             SET(DEST bin)
2321             ''')
2322         else:
2323             newlines.append(r'''
2324             SET(DEST bin/salome)
2325             ''')
2326             pass
2327         # --
2328         if key == "bin_PROGRAMS":
2329             newlines.append(r'''
2330             IF(WINDOWS)
2331             INSTALL(TARGETS ${name} DESTINATION ${DEST})
2332             INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.exe DESTINATION ${DEST} RENAME ${amname}.exe)
2333             INSTALL(CODE "FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.exe)")
2334             ELSE(WINDOWS)
2335             SET(PERMS)
2336             SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE)
2337             SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE)
2338             SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE)
2339             INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name} DESTINATION ${DEST} PERMISSIONS ${PERMS} RENAME ${amname})
2340             ENDIF(WINDOWS)
2341             ''')
2342             pass
2343         # --
2344         newlines.append(r'''
2345         ENDIF(nb)
2346         ''')
2347         # --
2348         newlines.append(r'''
2349         ENDIF(test)
2350         ''')
2351         newlines.append(r'''
2352         ENDFOREACH(amname ${%s})
2353         '''%(key))
2354         # --
2355         return
2356     
2357     def addInstallTarget(self, key, destination, newlines):
2358         newlines.append(r"FOREACH(f ${%s})"%(key))
2359         newlines.append(r'''
2360         SET(DEST %s)
2361         '''%(destination))
2362         newlines.append(r'''
2363         STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in)
2364         IF(test_SALOMEconfig.h.in)
2365         INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in)
2366         ELSE(test_SALOMEconfig.h.in)
2367         SET(dummy dummy-NOTFOUND)
2368         MARK_AS_ADVANCED(dummy)
2369         # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f})
2370         FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH)
2371         IF(dummy)
2372         ''')
2373         if key in ['dist_salomescript_SCRIPTS',
2374                    'dist_appliskel_SCRIPTS',
2375                    'dist_appliskel_PYTHON']:
2376             newlines.append(r'''
2377             SET(PERMS)
2378             SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE)
2379             SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE)
2380             SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE)
2381             INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS})
2382             ''')
2383         else:
2384             newlines.append(r'''
2385             GET_FILENAME_COMPONENT(ext ${f} EXT)
2386             IF(ext STREQUAL .py)
2387             IF(DEST STREQUAL bin/salome)
2388             SET(PERMS)
2389             SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE)
2390             SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE)
2391             SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE)
2392             INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS})
2393             ELSE(DEST STREQUAL bin/salome)
2394             INSTALL(FILES ${f} DESTINATION ${DEST})
2395             ENDIF(DEST STREQUAL bin/salome)
2396             ELSE(ext STREQUAL .py)
2397             INSTALL(FILES ${f} DESTINATION ${DEST})
2398             ENDIF(ext STREQUAL .py)
2399             ''')
2400             pass
2401         newlines.append(r'''
2402         ELSE(dummy)
2403         GET_FILENAME_COMPONENT(ext ${f} EXT)
2404         IF(ext STREQUAL .qm)
2405         STRING(REGEX REPLACE .qm .ts input ${f})
2406         ''')
2407         if self.module in ["kernel", "gui", "yacs"]:
2408             newlines.append(r'''
2409             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input})
2410             ''')
2411         else:
2412             newlines.append(r'''
2413             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
2414             ''')
2415             pass
2416         newlines.append(r'''
2417         SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f})
2418         # ADD_CUSTOM_COMMAND(
2419         # OUTPUT ${output}
2420         # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}
2421         # MAIN_DEPENDENCY ${input}
2422         # )
2423         EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output})
2424         ENDIF(ext STREQUAL .qm)
2425         INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST})
2426         ENDIF(dummy)
2427         ENDIF(test_SALOMEconfig.h.in)
2428         ''')
2429         newlines.append(r'''
2430         GET_FILENAME_COMPONENT(ext ${f} EXT)
2431         IF(ext STREQUAL .py)
2432         INSTALL(CODE "SET(PYTHON_FILE ${f})")
2433         INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})")
2434         INSTALL(CODE "SET(DEST ${DEST})")
2435         INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})")
2436         ''')
2437         if self.module == "kernel":
2438             newlines.append('''
2439             IF(f STREQUAL SALOME_ContainerPy.py)
2440             ELSE(f STREQUAL SALOME_ContainerPy.py)
2441             IF(f STREQUAL am2cmake.py)
2442             ELSE(f STREQUAL am2cmake.py)
2443             INSTALL(SCRIPT ${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake)
2444             ENDIF(f STREQUAL am2cmake.py)
2445             ENDIF(f STREQUAL SALOME_ContainerPy.py)
2446             ''')
2447         else:
2448             newlines.append('''
2449             STRING(REPLACE "\\\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR})
2450             INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/install_and_compile_python_file.cmake)
2451             ''')
2452             pass
2453         newlines.append(r'''
2454         ENDIF(ext STREQUAL .py)
2455         ''') 
2456         newlines.append(r"ENDFOREACH(f ${%s})"%(key))
2457         return
2458     
2459     def writeListsFile(self):
2460         f = open(self.listsFile, "w")
2461         f.write(self.content)
2462         f.close()
2463         return
2464
2465     def writeEnvScript(self, upmod, buildmod=True):
2466         import os, sys
2467         p_version = sys.version[:3]
2468         python_path = "PYTHONPATH"
2469         root_dir    = "%s_ROOT_DIR" % upmod
2470         if sys.platform == "win32":
2471             script_line = '@SET %(var)s=%(val)s;%%%(var)s%%\n'
2472             var_line    = '%%%s%%'
2473             lib_path = "PATH"
2474             omni = "x86_win32"
2475             omni_py = "python"
2476             pass
2477         else:
2478             script_line = 'export %(var)s=%(val)s:\$%(var)s\n'
2479             var_line    = '\${%s}'
2480             lib_path = "LD_LIBRARY_PATH"
2481             omni = ""
2482             omni_py = "/".join( ["python%s"%p_version , "site-packages"] )
2483             pass
2484         #
2485         script = ""
2486         #
2487         if buildmod:
2488             script += script_line % { 'var':python_path, 'val':"/".join( ["${CMAKE_INSTALL_PREFIX}", "lib", "python%s"%p_version, "site-packages", "salome"] ) }
2489             script += script_line % { 'var':python_path, 'val':"/".join( ["${CMAKE_INSTALL_PREFIX}", "bin", "salome"] ) }
2490             script += script_line % { 'var':lib_path,    'val':"/".join( ["${CMAKE_INSTALL_PREFIX}", "lib", "salome"] ) }
2491             pass
2492         else:
2493             script += script_line % { 'var':python_path, 'val':"/".join( [var_line % root_dir, "lib", "python%s"%p_version, "site-packages", "salome"] ) }
2494             script += script_line % { 'var':python_path, 'val':"/".join( [var_line % root_dir, "bin", "salome"] ) }
2495             script += script_line % { 'var':lib_path,    'val':"/".join( [var_line % root_dir, "lib", "salome"] ) }
2496             pass
2497         #
2498         if upmod == "KERNEL" :
2499             script += "\n"
2500             if omni:
2501                 script += script_line % { 'var':python_path, 'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib", omni] ) }
2502                 script += script_line % { 'var':lib_path,    'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib", omni] ) }
2503                 pass
2504             else:
2505                 script += script_line % { 'var':python_path, 'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib"] ) }
2506                 script += script_line % { 'var':lib_path,    'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib"] ) }
2507                 pass
2508             script += script_line % { 'var':python_path, 'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib", omni_py] ) }
2509             pass
2510         #
2511         if upmod == "GEOM" :
2512             script = self.writeEnvScript("KERNEL", False) + "\n" + script
2513             script = self.writeEnvScript("GUI",    False) + "\n" + script
2514             pass
2515         #
2516         if upmod == "SMESH" :
2517             script = self.writeEnvScript("GEOM", False) + "\n" + script
2518             pass
2519         
2520         return script    
2521     pass
2522
2523 def convertAmFile(the_root, root, dirs, files, f, module):
2524     cmake = CMakeFile(the_root, root, dirs, files, f, module)
2525     cmake.writeListsFile()
2526     return
2527
2528 def usage(exit_status):
2529     from sys import exit
2530     from sys import argv
2531     print "Usage: %s --module"%(argv[0])
2532     exit(exit_status)
2533     return
2534
2535 if __name__ == "__main__":
2536     #
2537     from sys import argv
2538     if len(argv) != 2:
2539         usage(1)
2540         pass
2541     #
2542     module = argv[1]
2543     if module.find('--') != 0:
2544         usage(1)
2545         pass
2546     module = module[2:]
2547     if len(module) == 0:
2548         usage(1)
2549         pass
2550     #
2551     from os import getcwd
2552     the_root = getcwd()
2553     #
2554     nok = 0
2555     #
2556     from os import getenv
2557     from os import walk
2558     for root, dirs, files in walk(the_root):
2559         # --
2560         # E.A. : Remove 'CVS' in dirs
2561         # E.A. : It allows to not recurse in CVS dirs
2562         # E.A. : See os module python documentation
2563         # --
2564         try:
2565             dirs.remove('CVS')
2566         except ValueError:
2567             pass
2568         # --
2569         if "Makefile.am.cmake" in files:
2570             if "Makefile.am" in files:
2571                 files.remove("Makefile.am")
2572                 pass
2573             pass
2574         # --
2575         for f in files:
2576             if f in ["Makefile.am", "Makefile.am.cmake"]:
2577                 convert = True # convert files by default
2578                 forced = getenv("AM2CMAKE_FORCE_GENERATION", "0")=="1" or \
2579                          getenv("AM2CMAKE_FORCE_%s_GENERATION"%module.upper(), "0")=="1"
2580                 if not forced:
2581                     # detect if conversion should be done
2582                     if "CMakeLists.txt" in files:
2583                         from os.path import join
2584                         ff = open(join(root, "CMakeLists.txt"))
2585                         content = ff.read()
2586                         ff.close()
2587                         if content.find("generated by am2cmake") == -1:
2588                             convert = False
2589                             pass
2590                         pass                       
2591                     pass
2592                 if convert:
2593                     convertAmFile(the_root, root, dirs, files, f, module)
2594                     nok += 1
2595                 pass
2596             pass
2597         pass
2598     #
2599     from sys import stdout
2600     if nok:
2601         if nok == 1:
2602             msg = "%s file has been converted to cmake"%(nok)
2603         else:
2604             msg = "%s files have been converted to cmake"%(nok)
2605             pass
2606         stdout.write(msg)
2607         stdout.write("\n")
2608         stdout.flush()
2609         pass
2610     pass