Salome HOME
18e69841a4e01c16d17e3b6a652fcf4126a77ff8
[modules/kernel.git] / salome_adm / cmake_files / deprecated / am2cmake.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013  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.2.0)
813             set(SHORT_VERSION 7.2)
814             set(XVERSION 0x070200)
815             set(VERSION_DEV 0)
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         # VSR 15.04.2013 - process nesting substitutions properly, e.g. $(aaa$(bbb))
984         #line = p_dollar.sub(r"${\1}", line)
985         m_dollar = p_dollar.search(line)
986         while m_dollar:
987             line = p_dollar.sub(r"${\1}", line)
988             m_dollar = p_dollar.search(line)
989             pass
990         line = p_arobas.sub(r"${\1}", line)
991         
992         # --
993         line = line.replace(r"${top_builddir}", r"${CMAKE_BINARY_DIR}")
994         line = line.replace(r"${top_srcdir}", r"${CMAKE_SOURCE_DIR}")
995         line = line.replace(r"${srcdir}", r"${CMAKE_CURRENT_SOURCE_DIR}")
996         line = line.replace(r"${builddir}", r"${CMAKE_CURRENT_BINARY_DIR}")
997         line = line.replace(r"${datadir}", r"${CMAKE_INSTALL_PREFIX}/share")
998         
999         # --
1000         # Check if the line is a 'if' condition
1001         # If yes, replace it by a cmake grammar
1002         # --
1003         match = p_if.match(line)
1004         if match:
1005             theif = match.group("val")
1006             if theif[0] == "!":
1007                 theif = "NOT " + theif[1:]
1008                 pass
1009             line = p_if.sub(r"IF(%s)"%(theif), line)
1010             opened_ifs.append(theif)
1011             newlines.append(line)
1012             return
1013         
1014         # --
1015         # Check if the line is a 'else' condition
1016         # If yes, replace it by a cmake grammar
1017         # --
1018         match = p_else.match(line)
1019         if match:
1020             line = "ELSE(%s)"%(opened_ifs[-1])
1021             newlines.append(line)
1022             return
1023         
1024         # --
1025         # Check if the line is a 'endif' condition
1026         # If yes, replace it by a cmake grammar
1027         # --
1028         match = p_endif.match(line)
1029         if match:
1030             line = "ENDIF(%s)"%(opened_ifs[-1])
1031             opened_ifs[-1:] = []
1032             newlines.append(line)
1033             return
1034         
1035         # --
1036         # Check if the line is an attribution '=' or '+='
1037         # --
1038         match = p_attribution.match(line)
1039         if match:
1040             self.treatAttribution(match, newlines)
1041             return
1042         
1043         # --
1044         newlines.append(line)
1045         
1046         # --
1047         return
1048     
1049     def treatAttribution(self, match, newlines):
1050         
1051         spaces = match.group("spaces")
1052         key = match.group("key")
1053         method = match.group("method")
1054         value = match.group("value")
1055         # print [spaces, key, method, value]
1056         
1057         # --
1058         # Open cmake SET command
1059         # --
1060         newlines.append(spaces + "SET(" + key)
1061         
1062         # --
1063         # If method is '+=', put the previous definition as first value
1064         # --
1065         if method == "+=":
1066             newlines.append("%s    ${%s}"%(spaces, key))
1067             pass
1068         
1069         # --
1070         fields = value.split()
1071         
1072         for i in range(len(fields)):
1073             newlines.append("%s    %s"%(spaces, fields[i]))
1074             pass
1075         
1076         # --
1077         if method == "+=":
1078             # --
1079             # The try: except KeyError is here if the +=
1080             # is an error which occurs in salome ...
1081             # --
1082             try:
1083                 self.__thedict__[key] += fields[:]
1084             except KeyError:
1085                 self.__thedict__[key] = fields[:]
1086                 pass
1087             pass
1088         else:
1089             self.__thedict__[key]  = fields[:]
1090             pass
1091         
1092         # --
1093         # Close cmake SET command
1094         # --
1095         
1096         newlines.append("%s)"%(spaces))
1097         
1098         return
1099     
1100     def finalize(self, newlines):
1101       
1102         # --
1103         # Convert the .in files in build dir
1104         # --
1105         upmod = ""
1106         if self.module == "hexoticplugin" :
1107           upmod = "HexoticPLUGIN"
1108         else :
1109           upmod = self.module.upper()
1110
1111         import operator
1112         mod = self.module
1113         if mod in ['kernel', 'gui'] and self.root[-len('gui'):] == 'gui' or mod == 'med' and operator.contains(self.root, 'doxygen'):
1114             newlines.append(r'''
1115             SET(top_builddir
1116                 ${CMAKE_BINARY_DIR}
1117             )
1118             SET(top_srcdir 
1119                 ${CMAKE_SOURCE_DIR}
1120             )
1121             SET(srcdir 
1122                 ${CMAKE_CURRENT_SOURCE_DIR}
1123             )
1124             SET(builddir 
1125                 ${CMAKE_CURRENT_BINARY_DIR}
1126             )
1127             SET(datadir
1128                 ${CMAKE_INSTALL_PREFIX}/share
1129             )
1130             SET(docdir 
1131                 ${datadir}/doc/salome
1132             )
1133             ''')
1134             self.files.append("static/header.html.in")
1135         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', 'yacs']:
1136             newlines.append(r'''
1137             SET(top_builddir
1138                 ${CMAKE_BINARY_DIR}
1139             )
1140             SET(top_srcdir 
1141                 ${CMAKE_SOURCE_DIR}
1142             )
1143             SET(srcdir 
1144                 ${CMAKE_CURRENT_SOURCE_DIR}
1145             )
1146             SET(builddir 
1147                 ${CMAKE_CURRENT_BINARY_DIR}
1148             )
1149             SET(datadir
1150                 ${CMAKE_INSTALL_PREFIX}/share
1151             )
1152             SET(docdir 
1153                 ${datadir}/doc/salome
1154             )
1155             ''')
1156             if mod in ['yacs']:
1157                 self.files.append("sources/header.html.in")
1158             else:
1159                 self.files.append("static/header.html.in")
1160             if mod in ['geom', 'smesh', 'visu','netgenplugin','blsurfplugin','hexoticplugin','ghs3dplugin',"ghs3dprlplugin"] and self.root[-len(mod):] == upmod:
1161               self.files.append("static/header_py.html.in")
1162      
1163         if self.module == "yacs":
1164             key = "salomegui"
1165             if self.root[-len(key):] == key:
1166                 self.files.append("resources/YACSCatalog.xml.in")
1167                 self.files.append("resources/SalomeApp.xml.in")
1168                 pass
1169             pass
1170             
1171         if self.module == "jobmanager":
1172             key = "salomegui"
1173             if self.root[-len(key):] == key:
1174                 self.files.append("resources/SalomeApp.xml.in")
1175                 pass
1176             pass
1177         for f in self.files:
1178             if f[-3:] == ".in":
1179                 if f == "sstream.in":
1180                     continue
1181                 if f in ["runContainer.in", "stopContainer.in"]:
1182                     if self.module == "med":
1183                         if self.root[-3:] == "csh":
1184                             continue
1185                         pass
1186                     pass
1187                 if f == "SALOMEconfig.ref.in":
1188                     out = "SALOMEconfig.h"
1189                 else:
1190                     out = f[:-3]
1191                     pass
1192                 newlines.append(r'''
1193                 SET(input ${CMAKE_CURRENT_SOURCE_DIR}/%s)
1194                 '''%(f))
1195                 newlines.append(r'''
1196                 SET(output ${CMAKE_CURRENT_BINARY_DIR}/%s)
1197                 '''%(out))
1198                 newlines.append(r'''
1199                 MESSAGE(STATUS "Creation of ${output}")
1200                 CONFIGURE_FILE(${input} ${output})
1201                 ''')
1202                 pass
1203             pass
1204
1205         # --
1206         # add commands for generating of user's documentation
1207         # --
1208         doc_gui_destination = "${CMAKE_INSTALL_PREFIX}/share/doc/salome/gui/%s"%(upmod)
1209         doc_tui_destination = "${CMAKE_INSTALL_PREFIX}/share/doc/salome/tui/%s"%(upmod)
1210         doc_destination = "${CMAKE_INSTALL_PREFIX}/share/doc/salome"
1211         head_source = "${CMAKE_CURRENT_SOURCE_DIR}/images/head.png"
1212         if mod == 'kernel':
1213             prepare_generating_doc_src = "${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/prepare_generating_doc.py"
1214         else:
1215             prepare_generating_doc_src = "$ENV{KERNEL_ROOT_DIR}/bin/salome/prepare_generating_doc.py"
1216         if mod in ['kernel', 'gui'] and self.root[-len('gui'):] == 'gui' or mod == 'med' and operator.contains(self.root, 'doxygen'):
1217             if mod == 'med':
1218                 doc_source = "${CMAKE_CURRENT_BINARY_DIR}/doc_ref_user/html"
1219                 input = "Doxyfile_med_user"
1220             else:
1221                 doc_source = "${CMAKE_CURRENT_BINARY_DIR}/%s"%(upmod)
1222                 input = ""
1223             newlines.append("""\t    ADD_CUSTOM_TARGET(usr_docs ${DOXYGEN_EXECUTABLE} %s
1224             COMMAND ${PYTHON_EXECUTABLE} -c "import shutil, sys; shutil.rmtree(r'''%s''', True); shutil.copytree(r'''%s''', r'''%s'''); shutil.copy(r'''%s''', r'''%s''')"
1225             VERBATIM 
1226             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}             
1227             )"""%(input, doc_gui_destination, doc_source, doc_gui_destination, head_source, doc_gui_destination))
1228         from os import path
1229         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'):
1230             ign = r"""'*usr_docs*', '*CMakeFiles*', '*.cmake', 'doxyfile*', '*.vcproj', 'static', 'Makefile*'"""
1231             if mod in ['geom']:
1232                 if mod == 'geom':
1233                     tmp = 'geomBuilder'
1234                     input = "COMMAND ${DOXYGEN_EXECUTABLE} doxyfile_tui \n\t\t"
1235                 newlines.append(r"""
1236                 IF(WINDOWS)
1237                   STRING(REPLACE "/" "\\" f "%s")
1238                 ELSE(WINDOWS)
1239                   SET(f "%s")                       
1240                 ENDIF(WINDOWS)
1241                 ADD_CUSTOM_TARGET(usr_docs ${PYTHON_EXECUTABLE} ${f} ${CMAKE_SOURCE_DIR}/src/%s_SWIG/%s.py
1242                 %sCOMMAND ${DOXYGEN_EXECUTABLE} doxyfile_py
1243                 COMMAND ${DOXYGEN_EXECUTABLE} doxyfile
1244                 COMMAND ${PYTHON_EXECUTABLE} -c "import os; os.remove(r'''%s.py''')"
1245                 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''')"
1246                 VERBATIM 
1247                 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}             
1248                 )"""%(prepare_generating_doc_src, prepare_generating_doc_src, upmod, tmp, input, tmp, doc_gui_destination, doc_gui_destination, ign, head_source, doc_gui_destination))
1249                 newlines.append(r"""ADD_DEPENDENCIES(usr_docs html_docs)""")
1250             else:
1251                 config_f = ""
1252                 extra_doc_dir = ""
1253                 if mod in ['netgenplugin','blsurfplugin','hexoticplugin','ghs3dplugin', "ghs3dprlplugin"] :
1254                     config_f = "${DOXYGEN_EXECUTABLE} doxyfile_py"
1255                     extra_doc_dir = "%spy_doc"%(mod)
1256                 elif mod not in ['pyhello']:
1257                     config_f = "${DOXYGEN_EXECUTABLE} doxyfile_idl"
1258                     if mod == 'visu':
1259                         extra_doc_dir = "%sgen_doc"%(mod)
1260                 inst_head_command = ""
1261                 if extra_doc_dir != "":
1262                     inst_head_command = "; shutil.copy(r'''%s''', r'''${CMAKE_INSTALL_PREFIX}/share/doc/salome/gui/%s/%s''')"%(head_source, upmod, extra_doc_dir)
1263                 newlines.append("""\t    ADD_CUSTOM_TARGET(usr_docs %s
1264                 COMMAND ${DOXYGEN_EXECUTABLE} doxyfile
1265                 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''')%s"
1266                 VERBATIM 
1267                 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
1268                 )"""%(config_f, doc_gui_destination, doc_gui_destination, ign, head_source, doc_gui_destination, inst_head_command))
1269         elif mod in ['yacs', 'jobmanager'] and operator.contains(self.root, upmod + '_SRC'+path.sep+'doc'):
1270             from sys import platform
1271             params = '';
1272             if platform == "win32":
1273                 params = '-Q';
1274             newlines.append(r"""
1275             ADD_CUSTOM_TARGET(html_docs ${SPHINX_EXECUTABLE} %s -c ${CMAKE_BINARY_DIR}/doc -b html ${ALLSPHINXOPTS} html
1276             COMMAND ${PYTHON_EXECUTABLE} -c \"import shutil\;shutil.rmtree('''%s''', True)\;shutil.copytree('''${CMAKE_CURRENT_BINARY_DIR}/html''', '''%s''')\"
1277             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"""%(params, doc_gui_destination, doc_gui_destination))               
1278         elif mod in ['kernel', 'smesh', 'geom'] and operator.contains(self.root, upmod + '_SRC'+path.sep+'doc'+path.sep+'docutils'):
1279             from sys import platform
1280             params = ""
1281             ext = ""
1282             prf = ""
1283             if platform == "win32":
1284                 params = '-Q';
1285                 ext = "bat"
1286                 prf = "call"
1287                 cmd = "STRING(REPLACE \"/\" \"\\\\\" SCR"
1288             else:
1289                 ext = "sh"
1290                 prf = ". "
1291                 cmd = "SET(SCR"
1292             doc_gui_destination = "${CMAKE_INSTALL_PREFIX}/share/doc/salome/tui/%s/docutils"%(upmod)
1293             scr = self.writeEnvScript(upmod)                    
1294             newlines.append(r"""
1295             %s "%s")
1296             FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/env_s.%s "${SCR}")
1297             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
1298             COMMAND ${PYTHON_EXECUTABLE} -c \"import shutil\;shutil.rmtree('''%s''', True)\;shutil.copytree('''${CMAKE_CURRENT_BINARY_DIR}/html''', '''%s''')\"
1299             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"""%(cmd, scr, ext, prf, ext, params, doc_gui_destination, doc_gui_destination))
1300
1301
1302
1303
1304   # --
1305   # add commands for generating of developer's documentation
1306   # --
1307   
1308         upmod = self.module.upper()
1309         if ( mod in ['kernel', 'gui', 'med', 'smesh', 'visu', 'blsurfplugin'] and self.root[-len('tui'):] == 'tui' ) or ( mod in ['yacs'] and self.root[-len('doc'):] == 'doc' ):
1310             if mod == 'kernel':
1311                 tmp = """\tADD_CUSTOM_TARGET(dev_docs ${DOXYGEN_EXECUTABLE} -u
1312             COMMAND ${DOXYGEN_EXECUTABLE}
1313             COMMAND ${PYTHON_EXECUTABLE} -c "import os; os.remove(r'''${CMAKE_CURRENT_BINARY_DIR}/doxyfile.bak''')"  """
1314                 tmp1=""
1315             else: 
1316                 tmp = """\tADD_CUSTOM_TARGET(dev_docs ${DOXYGEN_EXECUTABLE}"""
1317                 if mod == 'visu':
1318                     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)
1319                 elif mod == 'smesh':
1320                     tmp1= """\n            COMMAND ${PYTHON_EXECUTABLE} -c "from shutil import copy; copy(r'''${CMAKE_CURRENT_SOURCE_DIR}/images/smeshscreen.png''', r'''%s''')" """%(doc_tui_destination)
1321                 else:
1322                     tmp1=""
1323             if mod == 'yacs':
1324                 doc_source = "${CMAKE_CURRENT_BINARY_DIR}/htmldev"
1325             else:
1326                 doc_source = "${CMAKE_CURRENT_BINARY_DIR}/%s"%(upmod)
1327             inst_head_command=""
1328             inst_head_command = "; shutil.copy(r'''%s''', r'''%s''')"%(head_source, doc_tui_destination)
1329             newlines.append(tmp + """
1330             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 + """
1331             VERBATIM 
1332             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}             
1333             )""")
1334         if mod == 'geom' and self.root[-len('tui'):] == 'tui':
1335             tmp = 'geomBuilder'
1336             doc_source = "${CMAKE_CURRENT_BINARY_DIR}/%s"%(upmod)
1337             newlines.append(r"""
1338             IF(WINDOWS)
1339               STRING(REPLACE "/" "\\" f "%s")
1340             ELSE(WINDOWS)
1341               SET(f "%s")
1342             ENDIF(WINDOWS)
1343             ADD_CUSTOM_TARGET(dev_docs ${PYTHON_EXECUTABLE} ${f} ${CMAKE_SOURCE_DIR}/src/%s_SWIG/%s.py 
1344             COMMAND ${DOXYGEN_EXECUTABLE} doxyfile
1345             COMMAND ${PYTHON_EXECUTABLE} -c "import os; os.remove(r'''${CMAKE_CURRENT_BINARY_DIR}/%s.py''')"
1346             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''')"
1347             VERBATIM 
1348             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}             
1349             )"""%(prepare_generating_doc_src, prepare_generating_doc_src, upmod, tmp, tmp, doc_tui_destination, doc_source, doc_tui_destination, head_source, doc_tui_destination, doc_tui_destination))
1350
1351         # --
1352         # convert the SUBDIRS in cmake grammar
1353         # --
1354         if 1: # self.__thedict__.has_key("SUBDIRS"):
1355             newlines.append(r'''
1356             FOREACH(dir ${SUBDIRS})
1357             IF(NOT dir STREQUAL .)
1358             ADD_SUBDIRECTORY(${dir})
1359             ENDIF(NOT dir STREQUAL .)
1360             ENDFOREACH(dir ${SUBDIRS})
1361             ''')
1362             pass
1363         
1364         # --
1365         # --
1366         for key in ["lib_LTLIBRARIES", "noinst_LTLIBRARIES", "salomepyexec_LTLIBRARIES", "libparaview_LTLIBRARIES"] :
1367             if self.__thedict__.has_key(key):
1368                 self.addLibTarget(key, newlines)
1369                 pass
1370             pass
1371         
1372         # --
1373         # --
1374         for key in ["bin_PROGRAMS", "check_PROGRAMS"]:
1375             if self.__thedict__.has_key(key):
1376                 self.addBinTarget(key, newlines)
1377                 pass
1378             pass
1379         
1380         # --
1381         # --
1382         if self.__thedict__.has_key("BASEIDL_FILES"):
1383             if not self.__thedict__.has_key("IDL_FILES"):
1384                 self.__thedict__["IDL_FILES"] = self.__thedict__["BASEIDL_FILES"]
1385                 newlines.append('''
1386                 SET(IDL_FILES ${BASEIDL_FILES})
1387                 ''')
1388                 pass
1389             pass
1390         
1391         # --
1392         # --
1393         
1394         key = "IDL_FILES"
1395         if self.__thedict__.has_key(key):
1396             if self.module == "kernel":
1397                 newlines.append('''
1398                 SET(IDL_FILES ${IDL_FILES} Calcium_Ports.idl)
1399                 ''')
1400                 pass
1401             newlines.append('''
1402             FOREACH(input ${IDL_FILES})
1403             STRING(REGEX REPLACE ".idl" "" base ${input})
1404             SET(src ${CMAKE_CURRENT_BINARY_DIR}/${base}SK.cc)
1405             SET(outputs ${src})
1406             SET(dynsrc ${CMAKE_CURRENT_BINARY_DIR}/${base}DynSK.cc)
1407             SET(outputs ${outputs} ${dynsrc})
1408             SET(inc ${CMAKE_CURRENT_BINARY_DIR}/${base}.hh)
1409             SET(outputs ${outputs} ${inc})
1410             IF(input STREQUAL Calcium_Ports.idl)
1411             SET(input ${CMAKE_CURRENT_BINARY_DIR}/${input})
1412             ELSE(input STREQUAL Calcium_Ports.idl)
1413             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1414             ENDIF(input STREQUAL Calcium_Ports.idl)
1415             SET(flags ${IDLCXXFLAGS} ${OMNIORB_IDLCXXFLAGS})
1416             STRING(REGEX MATCH "-bcxx" ISBCXX ${flags})
1417             IF(NOT ISBCXX)
1418             SET(flags -bcxx ${flags})
1419             ENDIF(NOT ISBCXX)
1420             ADD_CUSTOM_COMMAND(
1421             OUTPUT ${outputs}
1422             COMMAND ${OMNIORB_IDL} ${flags} ${input}
1423             MAIN_DEPENDENCY ${input}
1424             )
1425             ''')
1426             newlines.append('''
1427             install(FILES ${input} DESTINATION idl/salome)
1428             ''')
1429             if self.module not in ["pyhello"]:
1430                 newlines.append('''
1431                 SET(IDL_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${base}.hh)
1432                 install(FILES ${IDL_HEADER} DESTINATION include/salome)
1433                 ''')
1434                 pass
1435             newlines.append('''
1436             INSTALL(CODE "SET(IDL_FILE ${input})")
1437             INSTALL(CODE "SET(DIR ${salomepythondir})")
1438             IF(WINDOWS)
1439             INSTALL(CODE "SET(DIR bin/salome)")
1440             ENDIF(WINDOWS)
1441             INSTALL(CODE "SET(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})")
1442             INSTALL(CODE "SET(OMNIORB_IDL_PYTHON ${OMNIORB_IDL_PYTHON})")
1443             # --
1444             SET(flags)
1445             FOREACH(f ${IDLPYFLAGS})
1446             SET(flags "${flags} ${f}")
1447             ENDFOREACH(f ${IDLPYFLAGS})
1448             STRING(REGEX MATCH "-bpython" ISBPYTHON ${flags})
1449             IF(NOT ISBPYTHON)
1450             SET(flags "-bpython ${flags}")
1451             ENDIF(NOT ISBPYTHON)
1452             SET(IDLPYFLAGS ${flags})
1453             STRING(REPLACE "\\\\" "/" IDLPYFLAGS ${IDLPYFLAGS})
1454             INSTALL(CODE "SET(IDLPYFLAGS ${IDLPYFLAGS})")
1455             # --
1456             ''')
1457             if self.module == "kernel":
1458                 newlines.append('''
1459                 INSTALL(SCRIPT ${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/install_python_from_idl.cmake)
1460                 ''')
1461             else:
1462                 newlines.append('''
1463                 STRING(REPLACE "\\\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR})
1464                 INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/install_python_from_idl.cmake)
1465                 ''')
1466                 pass
1467             newlines.append('''
1468             ENDFOREACH(input ${IDL_FILES})
1469             ''')
1470             pass
1471         
1472         # --
1473         # --
1474         for key in ["SWIG_SRC", "SWIGSOURCES", "SWIG_DEF"]:
1475             if self.__thedict__.has_key(key):
1476                 newlines.append('''
1477                 SET(SWIG_SOURCES ${%s})
1478                 '''%(key))
1479                 self.__thedict__["SWIG_SOURCES"] = self.__thedict__[key]
1480                 pass
1481             pass
1482         
1483         # --
1484         # --
1485         if self.__thedict__.has_key("SWIG_SOURCES"):
1486             newlines.append('''
1487             IF(SWIG_SOURCES MATCHES ";")
1488             STRING(REGEX REPLACE ";.*" "" SWIG_SOURCES_FIRST "${SWIG_SOURCES}")
1489             ELSE(SWIG_SOURCES MATCHES ";")
1490             SET(SWIG_SOURCES_FIRST "${SWIG_SOURCES}")
1491             ENDIF(SWIG_SOURCES MATCHES ";")
1492             SET(flags)
1493             FOREACH(f ${SWIG_FLAGS} ${MY_SWIG_FLAGS})
1494             SET(test ON)
1495             IF(flags)
1496             LIST(FIND flags ${f} index)
1497             IF(NOT index EQUAL -1)
1498             SET(test OFF)
1499             ENDIF(NOT index EQUAL -1)
1500             ENDIF(flags)
1501             IF(test)
1502             SET(flags ${flags} ${f})
1503             ENDIF(test)
1504             ENDFOREACH(f ${SWIG_FLAGS} ${MY_SWIG_FLAGS})
1505             ADD_CUSTOM_COMMAND(
1506             OUTPUT ${build_srcs}
1507             COMMAND ${SWIG_EXECUTABLE} ${flags} -o ${build_srcs} ${CMAKE_CURRENT_SOURCE_DIR}/${SWIG_SOURCES_FIRST}
1508             MAIN_DEPENDENCY ${SWIG_SOURCES}
1509             )
1510             ''')
1511             pass
1512         
1513         # --
1514         # --
1515         if self.__thedict__.has_key("BUILT_SOURCES"):
1516             newlines.append('''
1517             FOREACH(f ${BUILT_SOURCES})
1518             IF(f MATCHES "WRAP.cxx$")
1519             # STRING(REGEX REPLACE "WRAP.cxx" "WRAP.h" inc ${f})
1520             STRING(REGEX REPLACE "WRAP.cxx" ".i" input ${f})
1521             ADD_CUSTOM_COMMAND(
1522             OUTPUT ${f} # ${inc}
1523             COMMAND ${SWIG_EXECUTABLE} ${SWIG_FLAGS} ${SWIG_PYTHON_INCLUDES} ${MYSWIG_FLAGS} -o ${f} ${CMAKE_CURRENT_SOURCE_DIR}/${input}
1524             MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/${input}
1525             )
1526             ENDIF(f MATCHES "WRAP.cxx$")
1527             ENDFOREACH(f ${BUILT_SOURCES})
1528             ''')
1529             pass
1530
1531         # --
1532         # --
1533         key = "MOC_FILES"
1534         if self.__thedict__.has_key(key):
1535             newlines.append('''
1536             FOREACH(output ${MOC_FILES})
1537             ''')
1538             if self.module in ["jobmanager", "yacs"]:
1539                 newlines.append('''
1540                 STRING(REGEX REPLACE _moc.cxx .hxx input ${output})
1541                 ''')
1542             else:
1543                 newlines.append('''
1544                 STRING(REGEX REPLACE _moc.cxx .h input ${output})
1545                 ''')
1546                 pass
1547             newlines.append('''
1548             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1549             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1550             ADD_CUSTOM_COMMAND(
1551             OUTPUT ${output}
1552             COMMAND ${QT_MOC_EXECUTABLE} ${MOC_FLAGS} ${input} -o ${output}
1553             MAIN_DEPENDENCY ${input}
1554             )
1555             ENDFOREACH(output ${MOC_FILES})
1556             ''')
1557             pass
1558         
1559         # --
1560         # --
1561         key = "MOC_FILES_HXX"
1562         if self.__thedict__.has_key(key):
1563             newlines.append('''
1564             FOREACH(output ${MOC_FILES_HXX})
1565             ''')
1566             newlines.append('''
1567             STRING(REGEX REPLACE _moc.cxx .hxx input ${output})
1568             ''')
1569             newlines.append('''
1570             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1571             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1572             ADD_CUSTOM_COMMAND(
1573             OUTPUT ${output}
1574             COMMAND ${QT_MOC_EXECUTABLE} ${MOC_FLAGS} ${input} -o ${output}
1575             MAIN_DEPENDENCY ${input}
1576             )
1577             ENDFOREACH(output ${MOC_FILES_HXX})
1578             ''')
1579             pass
1580         
1581         # --
1582         # --
1583         key = "UIC_FILES"
1584         if self.__thedict__.has_key(key):
1585             newlines.append('''
1586             FOREACH(output ${UIC_FILES})
1587             STRING(REPLACE "ui_" "" input ${output})
1588             STRING(REPLACE ".h" ".ui" input ${input})
1589             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1590             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1591             ADD_CUSTOM_COMMAND(
1592             OUTPUT ${output}
1593             COMMAND ${QT_UIC_EXECUTABLE} -o ${output} ${input}
1594             MAIN_DEPENDENCY ${input}
1595             )
1596             ENDFOREACH(output ${UIC_FILES})
1597             ''')
1598             pass
1599         
1600         # --
1601         # --
1602         key = "PYUIC_FILES"
1603         if self.__thedict__.has_key(key):
1604             newlines.append('''
1605             FOREACH(output ${PYUIC_FILES})
1606             STRING(REPLACE "_ui.py" ".ui" input ${output})
1607             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1608             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1609             ADD_CUSTOM_COMMAND(
1610             OUTPUT ${output}
1611             COMMAND ${PYUIC_EXECUTABLE} -o ${output} ${input}
1612             MAIN_DEPENDENCY ${input}
1613             )
1614             ENDFOREACH(output ${PYUIC_FILES})
1615             ADD_CUSTOM_TARGET(BUILD_PY_UI_FILES ALL DEPENDS ${PYUIC_FILES})
1616             ''')
1617             pass
1618         
1619         # --
1620         # --
1621         key = "QRC_FILES"
1622         if self.__thedict__.has_key(key):
1623             newlines.append('''
1624             FOREACH(output ${QRC_FILES})
1625             STRING(REGEX REPLACE "qrc_" "" input ${output})
1626             STRING(REGEX REPLACE ".cxx" ".qrc" input ${input})
1627             STRING(REGEX REPLACE ".qrc" "" name ${input})
1628             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1629             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1630             ADD_CUSTOM_COMMAND(
1631             OUTPUT ${output}
1632             COMMAND ${QT_RCC_EXECUTABLE} ${input} -o ${output} -name ${name}
1633             MAIN_DEPENDENCY ${input}
1634             )
1635             ENDFOREACH(output ${QRC_FILES})
1636             ''')
1637             pass
1638         
1639         # --
1640         # --
1641         key = "SIP_FILES"
1642         if self.__thedict__.has_key(key):
1643             newlines.append('''
1644             FOREACH(input ${SIP_FILES})
1645             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1646             SET(output)
1647             FOREACH(out ${SIP_SRC})
1648             SET(output ${output} ${CMAKE_CURRENT_BINARY_DIR}/${out})
1649             ENDFOREACH(out ${SIP_SRC})
1650             ADD_CUSTOM_COMMAND(
1651             OUTPUT ${output}
1652             COMMAND ${SIP_EXECUTABLE} ${PYQT_SIPFLAGS} ${input}
1653             MAIN_DEPENDENCY ${input}
1654             )
1655             ENDFOREACH(input ${SIP_FILES})
1656             ''')
1657             pass
1658
1659         # --
1660         # For GUI/tools/dlgfactory
1661         # --
1662         key = "UIC_FILES_QDIALOG"
1663         if self.__thedict__.has_key(key):
1664             newlines.append('''
1665             FOREACH(output ${UIC_FILES_QDIALOG} ${UIC_FILES_GDIALOG})
1666             STRING(REPLACE "ui_" "" input ${output})
1667             STRING(REPLACE ".hxx" ".ui" input ${input})
1668             SET(input_path ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1669             IF (NOT EXISTS ${input_path})
1670               SET(input_path ${CMAKE_CURRENT_BINARY_DIR}/${input})
1671             ENDIF (NOT EXISTS ${input_path})
1672             ADD_CUSTOM_COMMAND(
1673             OUTPUT ${output}
1674             COMMAND ${QT_UIC_EXECUTABLE} -o ${output} ${input_path}
1675             MAIN_DEPENDENCY ${input}
1676             )
1677             ENDFOREACH(output ${UIC_FILES})
1678
1679             FOREACH(output ${MOC_FILES_QDIALOG} ${MOC_FILES_GDIALOG})
1680             STRING(REGEX REPLACE _moc.cxx .hxx input ${output})
1681             SET(input_path ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1682             IF (NOT EXISTS ${input_path})
1683               SET(input_path ${CMAKE_CURRENT_BINARY_DIR}/${input})
1684             ENDIF (NOT EXISTS ${input_path})
1685             ADD_CUSTOM_COMMAND(
1686             OUTPUT ${output}
1687             COMMAND ${QT_MOC_EXECUTABLE} ${MOC_FLAGS} ${input_path} -o ${output}
1688             MAIN_DEPENDENCY ${input}
1689             )
1690             ENDFOREACH(output ${MOC_FILES})
1691             
1692             ADD_CUSTOM_COMMAND(
1693             OUTPUT QDialogTest.ui QDialogTest.hxx QDialogTest.cxx
1694             COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dlgfactory.py -n QDialogTest -t qdialog
1695             DEPENDS __QDIALOG__.ui __QDIALOG__.hxx __QDIALOG__.cxx dlgfactory.py
1696             )
1697             
1698             ADD_CUSTOM_COMMAND(
1699             OUTPUT GDialogTest.ui GDialogTest.hxx GDialogTest.cxx
1700             COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dlgfactory.py -n GDialogTest -t gdialog
1701             DEPENDS __GDIALOG__.ui __GDIALOG__.hxx __GDIALOG__.cxx dlgfactory.py
1702             )
1703             ''')
1704             pass
1705
1706         # --
1707         # For make check
1708         # --
1709         for key in ["TESTS"]:
1710             if self.__thedict__.has_key(key):
1711                 newlines.append('''
1712                 SET(UNIT_TEST_PROG ${%s})
1713                 '''%(key))
1714                 self.__thedict__["UNIT_TEST_PROG"] = self.__thedict__[key]
1715                 pass
1716             pass
1717         key = "UNIT_TEST_PROG"
1718         if self.__thedict__.has_key(key):
1719             newlines.append('''
1720             FOREACH(input ${UNIT_TEST_PROG})
1721             GET_FILENAME_COMPONENT(ext ${input} EXT)
1722             IF(ext STREQUAL .py)
1723             SET(test ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1724             ELSE(ext STREQUAL .py)
1725             IF(WINDOWS)
1726             SET(test ${CMAKE_CURRENT_BINARY_DIR}/${input}_exe.exe)
1727             ELSE()
1728             SET(test ${CMAKE_CURRENT_BINARY_DIR}/${input}_exe)
1729             ENDIF()
1730             ENDIF(ext STREQUAL .py)
1731             ADD_TEST(${input} ${test})
1732             SET(fail_regex "KO")
1733             SET_PROPERTY(TEST ${input} PROPERTY FAIL_REGULAR_EXPRESSION "${fail_regex}")
1734             # IF(NOT WINDOWS)
1735             # ADD_TEST(${input}_valgrind valgrind ${test})
1736             # SET_PROPERTY(TEST ${input}_valgrind PROPERTY FAIL_REGULAR_EXPRESSION "${fail_regex}")
1737             # SET_PROPERTY(TEST ${input}_valgrind PROPERTY PASS_REGULAR_EXPRESSION "no leaks are possible")
1738             # ENDIF()
1739             ENDFOREACH(input ${UNIT_TEST_PROG})
1740             ''')
1741             pass
1742         
1743         # --
1744         # Treat the install targets
1745         # --
1746         resdir = self.module
1747         if resdir == "hxx2salome":
1748             resdir = self.hxxmodule
1749             pass
1750         d = {
1751             "salomeadmux_DATA"                 :  "salome_adm/unix",
1752             "dist_salomeadmux_DATA"            :  "salome_adm/unix",
1753             "dist_salome_cmake_DATA"           :  "salome_adm/cmake_files",
1754             "dist_salomem4_DATA"               :  "salome_adm/unix/config_files",
1755             "dist_salome4depr_DATA"            :  "salome_adm/unix/config_files/DEPRECATED",
1756             "dist_admlocalm4_DATA"             :  "adm_local/unix/config_files",
1757             "dist_admlocal_cmake_DATA"         :  "adm_local/cmake_files",
1758             "salomeinclude_DATA"               :  "include/salome",
1759             "salomeinclude_HEADERS"            :  "include/salome",
1760             "nodist_salomeinclude_HEADERS"     :  "include/salome",
1761             "dist_salomeres_DATA"              :  "share/salome/resources/%s"%(resdir),
1762             "nodist_salomeres_DATA"            :  "share/salome/resources/%s"%(resdir),
1763             "nodist_salomeres_SCRIPTS"         :  "share/salome/resources/%s"%(resdir),
1764             "dist_salomescript_SCRIPTS"        :  "bin/salome",
1765             "dist_salomescript_DATA"           :  "bin/salome",
1766             "dist_salomescript_PYTHON"         :  "bin/salome",
1767             "dist_appliskel_SCRIPTS"           :  "bin/salome/appliskel",
1768             "dist_appliskel_PYTHON"            :  "bin/salome/appliskel",
1769             "nodist_salomescript_DATA"         :  "bin/salome",
1770             "salomepython_PYTHON"              :  "${salomepythondir}",
1771             "nodist_salomepython_PYTHON"       :  "${salomepythondir}",
1772             "dist_salomepython_DATA"           :  "${salomepythondir}",
1773             "sharedpkgpython_PYTHON"           :  "${salomepythondir}/shared_modules",
1774             "salomepypkg_PYTHON"               :  "${salomepypkgdir}",
1775             "mypkgpython_PYTHON"               :  "${mypkgpythondir}",
1776             "stdpkgpython_PYTHON"              :  "${stdpkgpythondir}",
1777             "nodist_mypkgpython_PYTHON"        :  "${mypkgpythondir}",
1778             }
1779         if self.module == "jobmanager":
1780             d["bin_SCRIPTS"] = "bin"
1781             pass
1782         if self.module == "medfile":
1783             d = {
1784                 "include_HEADERS"        :  "include",
1785                 "nodist_include_HEADERS" :  "include",
1786                 "bin_SCRIPTS"            :  "bin",
1787                 "doc_DATA"               :  "${docdir}",
1788                 }
1789             pass
1790         if self.module == "netgen":
1791             d = {
1792                 "include_HEADERS"        :  "include",
1793                 "noinst_HEADERS"         :  "share/netgen/include",
1794                 "dist_pkgdata_DATA"      :  "share/netgen",
1795                 "dist_doc_DATA"          :  "share/doc/netgen",
1796                 }
1797             pass
1798         for key, value in d.items():
1799             if self.__thedict__.has_key(key):
1800                 self.addInstallTarget(key, value, newlines)
1801                 pass
1802             pass
1803         
1804         # --
1805         return
1806     
1807     def setLibAdd(self, key, newlines):
1808         # --
1809         newlines.append(r'''
1810         SET(libadd)
1811         ''')
1812         # --
1813         newlines.append(r'''
1814         IF(WINDOWS)
1815         SET(targets)
1816         SET(targets ${targets} MEFISTO2D)
1817         FOREACH(target ${targets})
1818         IF(name STREQUAL ${target})
1819         SET(dir $ENV{F2CHOME})
1820         STRING(REPLACE "\\\\" "/" dir ${dir})
1821         SET(libadd ${libadd} ${dir}/LIBF77.lib)
1822         SET(libadd ${libadd} ${dir}/LIBI77.lib)
1823         ENDIF(name STREQUAL ${target})
1824         ENDFOREACH(target ${targets})
1825         ELSE(WINDOWS)
1826         SET(targets)
1827         SET(targets ${targets} MEFISTO2D)
1828         FOREACH(target ${targets})
1829         IF(name STREQUAL ${target})
1830         SET(libadd ${libadd} -lf2c)
1831         ENDIF(name STREQUAL ${target})
1832         ENDFOREACH(target ${targets})
1833         ENDIF(WINDOWS)
1834         ''')
1835         # --
1836         newlines.append(r'''
1837         SET(libs ${PLATFORM_LIBADD} ${PLATFORM_LDFLAGS} ${LDADD} ${${amname}_LIBADD} ${${amname}_LDADD} ${${amname}_LDFLAGS})
1838         FOREACH(lib SALOMEBasics SalomeBatch)
1839         IF(name STREQUAL lib)
1840         SET(libs ${libs} ${PTHREAD_LIBS})
1841         ENDIF(name STREQUAL lib)
1842         ENDFOREACH(lib SALOMEBasics SalomeBatch)
1843         ''')
1844         # --
1845         newlines.append(r'''
1846         FOREACH(lib ${libs})
1847         GET_FILENAME_COMPONENT(ext ${lib} EXT)
1848         IF(ext STREQUAL .la)
1849         GET_FILENAME_COMPONENT(lib ${lib} NAME_WE)
1850         STRING(REGEX REPLACE "^lib" "" lib ${lib})
1851         ENDIF(ext STREQUAL .la)
1852         SET(vars)
1853         SET(vars ${vars} -no-undefined)
1854         SET(vars ${vars} -lvtkWidgets)
1855         IF(WINDOWS)
1856         SET(vars ${vars} -module)
1857         SET(vars ${vars} -Wl,-E)
1858         SET(vars ${vars} -Xlinker)
1859         SET(vars ${vars} -export-dynamic)
1860         SET(vars ${vars} -lm)
1861         SET(vars ${vars} -lboost_thread)
1862         SET(vars ${vars} -lboost_signals)
1863         SET(vars ${vars} -pthread -lpthread -ldl)
1864         ENDIF(WINDOWS)
1865         FOREACH(v ${vars})
1866         IF(lib STREQUAL v)
1867         SET(lib)
1868         ENDIF(lib STREQUAL v)
1869         ENDFOREACH(v ${vars})
1870         SET(test OFF)
1871         IF(lib)
1872         STRING(REGEX MATCH "^-lQt" test ${lib})
1873         ENDIF(lib)
1874         IF(NOT test)
1875         SET(libadd ${libadd} ${lib})
1876         ENDIF(NOT test)
1877         ENDFOREACH(lib ${libs})
1878         TARGET_LINK_LIBRARIES(${name} ${libadd})
1879         ''')
1880         # --
1881         newlines.append(r'''
1882         IF(WINDOWS)
1883         SET(targets)
1884         SET(targets ${targets} MEFISTO2D)
1885         FOREACH(target ${targets})
1886         IF(name STREQUAL ${target})
1887         IF(CMAKE_BUILD_TYPE STREQUAL Debug)
1888         SET_TARGET_PROPERTIES(${name} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:MSVCRT")
1889         ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug)
1890         ENDIF(name STREQUAL ${target})
1891         ENDFOREACH(target ${targets})
1892         ENDIF(WINDOWS)
1893         ''')
1894         # --
1895         return
1896     
1897     def setCompilationFlags(self, key, newlines):
1898         newlines.append(r'''
1899         SET(var)
1900         IF(WINDOWS)
1901         SET(targets)
1902         SET(targets ${targets} SalomeIDLKernel)
1903         SET(targets ${targets} SalomeDS)
1904         SET(targets ${targets} SALOMEDSTest)
1905         SET(targets ${targets} SALOMEDS_Client_exe)
1906         SET(targets ${targets} SalomeIDLGEOM)
1907         SET(targets ${targets} GEOMEngine)
1908         SET(targets ${targets} MEDEngine)
1909         SET(targets ${targets} SMESHEngine)
1910         SET(targets ${targets} SMESH)
1911         SET(targets ${targets} SalomeIDLSPADDER)
1912         SET(targets ${targets} MeshJobManagerEngine)
1913         SET(targets ${targets} StdMeshersEngine)
1914         SET(targets ${targets} VISUEngineImpl)
1915         FOREACH(target ${targets})
1916         IF(name STREQUAL ${target})
1917         SET(var ${var} -DNOGDI)
1918         ENDIF(name STREQUAL ${target})
1919         ENDFOREACH(target ${targets})
1920         ENDIF(WINDOWS)
1921         ''')
1922         # --
1923         if self.module in ["medfile", "yacs"]:
1924             newlines.append(r'''
1925             IF(WINDOWS)
1926             SET(var ${var} -DNOGDI)
1927             ENDIF(WINDOWS)
1928             ''')
1929             pass
1930         # --
1931         newlines.append(r'''
1932         IF(WINDOWS)
1933         SET(targets)
1934         SET(targets ${targets} MEFISTO2D)
1935         FOREACH(target ${targets})
1936         IF(name STREQUAL ${target})
1937         SET(dir $ENV{F2CHOME})
1938         STRING(REPLACE "\\\\" "/" dir ${dir})
1939         SET(var ${var} -I${dir})
1940         SET(var ${var} -DF2C_BUILD)
1941         ENDIF(name STREQUAL ${target})
1942         ENDFOREACH(target ${targets})
1943         ENDIF(WINDOWS)
1944         ''')
1945         # --
1946         if self.module in ["geom", "med", "hexoticplugin", "blsurfplugin"]:
1947             newlines.append(r'''
1948             SET(var ${var} -I${CMAKE_CURRENT_SOURCE_DIR})
1949             SET(var ${var} -I${CMAKE_CURRENT_BINARY_DIR})
1950             ''')
1951             pass
1952         newlines.append(r'''
1953         SET(var ${var} ${AM_CPPFLAGS})
1954         SET(var ${var} ${AM_CXXFLAGS})
1955         ''')
1956         # --
1957         newlines.append(r'''
1958         IF(type STREQUAL STATIC)
1959         SET(var ${var} -fPIC)
1960         ENDIF(type STREQUAL STATIC)
1961         ''')
1962         # --
1963         if self.module == "yacs":
1964             newlines.append(r'''
1965             SET(var ${var} -DYACS_PTHREAD)
1966             SET(var ${var} -DCMAKE_BUILD)
1967             SET(var ${var} -DSALOME_KERNEL)
1968             SET(var ${var} -DDSC_PORTS)
1969             SET(var ${var} -DOMNIORB)
1970             ''')
1971             pass
1972         newlines.append(r'''
1973   SET(var ${var} ${PLATFORM_CPPFLAGS})
1974   SET(var ${var} ${PTHREAD_CFLAGS})
1975   SET(var ${var} ${${amname}_CPPFLAGS})
1976   SET(var ${var} ${${amname}_CXXFLAGS})
1977   SET(var ${var} ${${amname}_CFLAGS})
1978         SET(vars)
1979         IF(WINDOWS)
1980         SET(vars ${vars} -include SALOMEconfig.h)
1981         SET(vars ${vars} -ftemplate-depth-32)
1982         SET(vars ${vars} -fPIC)
1983         SET(vars ${vars} -g)
1984         IF("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")          # if platform is Windows 64 bit 
1985         IF(name STREQUAL _pilot)
1986         SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")    # to avoid error C1128
1987         ENDIF(name STREQUAL _pilot)
1988         ENDIF("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
1989         ENDIF(WINDOWS)
1990         SET(flags)
1991         FOREACH(f ${var})
1992         FOREACH(v ${vars})
1993         IF(f STREQUAL v)
1994         SET(f)
1995         ENDIF(f STREQUAL v)
1996         ENDFOREACH(v ${vars})
1997         IF(f)
1998         string(REGEX MATCH "^-I" test_include ${f})
1999         if(test_include)
2000         string(REGEX REPLACE "^-I" "" include_dir ${f})
2001         if(include_dir)
2002         if(include_dir STREQUAL /usr/include)
2003         else(include_dir STREQUAL /usr/include)
2004         string(REGEX MATCH "^\\." test_dot ${include_dir})
2005         if(test_dot)
2006         set(include_dir ${CMAKE_CURRENT_BINARY_DIR}/${include_dir})
2007         endif(test_dot)
2008         include_directories(${include_dir})
2009         endif(include_dir STREQUAL /usr/include)
2010         endif(include_dir)
2011         else(test_include)
2012         SET(flags "${flags} ${f}")
2013         endif(test_include)
2014         ENDIF(f)
2015         ENDFOREACH(f ${var})
2016         SET_TARGET_PROPERTIES(${name} PROPERTIES COMPILE_FLAGS "${flags}")
2017         ''')
2018         return
2019     
2020     def addLibTarget(self, key, newlines):
2021         newlines.append(r'''
2022         FOREACH(amname ${%s})
2023         '''%(key))
2024         # --
2025         # Replace .la by _la ...
2026         # --
2027         newlines.append(r'''
2028         STRING(REPLACE .la _la amname ${amname})
2029         ''')
2030         # --
2031         # Remove the _la for the cmake name
2032         # --
2033         newlines.append(r'''
2034         STRING(LENGTH ${amname} len)
2035         MATH(EXPR newlen "${len}-3")
2036         STRING(SUBSTRING ${amname} 0 ${newlen} name)
2037         ''')
2038         # --
2039         # Does the target begins with lib ??
2040         # If yes, remove lib at beginning for cmake name
2041         # --
2042         newlines.append(r'''
2043         STRING(REGEX MATCH "^lib" BEGIN_WITH_lib ${name})
2044         IF(BEGIN_WITH_lib)
2045         STRING(LENGTH ${name} len)
2046         MATH(EXPR newlen "${len}-3")
2047         STRING(SUBSTRING ${name} 3 ${newlen} name)
2048         ENDIF(BEGIN_WITH_lib)
2049         ''')
2050         # --
2051         # Does the target is an idl library
2052         # --
2053         newlines.append(r'''
2054         STRING(REGEX MATCH "IDL" ISIDL ${name})
2055         ''')
2056         # --
2057         # Set the type of the library
2058         # --
2059         newlines.append(r'''
2060         IF(ISIDL)
2061         IF(WINDOWS)
2062         SET(type STATIC)
2063         ELSE(WINDOWS)
2064         SET(type SHARED)
2065         ENDIF(WINDOWS)
2066         ELSE(ISIDL)
2067         SET(type SHARED)
2068         ENDIF(ISIDL)
2069         ''')
2070         if key == "noinst_LTLIBRARIES":
2071             newlines.append(r'''
2072             IF(WINDOWS)
2073             SET(type STATIC)
2074             ELSE(WINDOWS)
2075             SET(type STATIC)
2076             ENDIF(WINDOWS)
2077             ''')
2078             pass
2079         # --
2080         # Set sources for the library
2081         # --
2082         newlines.append(r'''
2083         SET(srcs)
2084         FOREACH(src ${${amname}_SOURCES} ${dist_${amname}_SOURCES})
2085         GET_FILENAME_COMPONENT(ext ${src} EXT)
2086         IF(ext STREQUAL .f)
2087         IF(src STREQUAL trte.f)
2088         SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${src})
2089         STRING(REPLACE ".f" ".c" src ${src})
2090         SET(src ${CMAKE_CURRENT_BINARY_DIR}/${src})
2091         SET(output ${src})
2092         SET(cmd f2c)
2093         IF(NOT WINDOWS)
2094         IF(CMAKE_SIZEOF_VOID_P STREQUAL 8)
2095         SET(cmd valgrind f2c)  # f2c seems to be buggy on 64 bits ... but with valgrind, it works :)
2096         ENDIF()
2097         ENDIF(NOT WINDOWS)
2098         ADD_CUSTOM_COMMAND(
2099         OUTPUT ${output}
2100         COMMAND ${cmd} ${input}
2101         MAIN_DEPENDENCY ${input}
2102         )
2103         ELSE(src STREQUAL trte.f)
2104         SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${src})
2105         STRING(REPLACE ".f" ".o" src ${src})
2106         SET(src ${CMAKE_CURRENT_BINARY_DIR}/${src})
2107         SET(output ${src})
2108         IF(WINDOWS)
2109         SET(F77 g77)
2110         ELSE(WINDOWS)
2111         SET(F77 gfortran)
2112         ENDIF(WINDOWS)
2113         ADD_CUSTOM_COMMAND(
2114         OUTPUT ${output}
2115         COMMAND ${F77} -c -o ${output} ${input}
2116         MAIN_DEPENDENCY ${input}
2117         )
2118         ENDIF(src STREQUAL trte.f)
2119         ENDIF(ext STREQUAL .f)
2120         SET(srcs ${srcs} ${src})
2121         ENDFOREACH(src ${${amname}_SOURCES} ${dist_${amname}_SOURCES})
2122         ''')
2123         newlines.append(r'''
2124         SET(l ${nodist_${amname}_SOURCES} ${UIC_FILES})
2125         FOREACH(f ${l})
2126         SET(src ${CMAKE_CURRENT_BINARY_DIR}/${f})
2127         SET(srcs ${srcs} ${src})
2128         ENDFOREACH(f ${l})
2129         ''')
2130         newlines.append(r'''
2131         SET(build_srcs)
2132         SET(l ${nodist_${amname}_SOURCES} ${BUILT_SOURCES})
2133         FOREACH(f ${l})
2134         GET_FILENAME_COMPONENT(ext ${f} EXT)
2135         IF(ext STREQUAL .py)
2136         SET(fff)
2137         ELSE(ext STREQUAL .py)
2138         SET(fff ${CMAKE_CURRENT_BINARY_DIR}/${f})
2139         ENDIF(ext STREQUAL .py)
2140         IF(fff)
2141         IF(build_srcs)
2142         LIST(FIND build_srcs ${fff} index)
2143         IF(NOT index EQUAL -1)
2144         SET(fff)
2145         ENDIF(NOT index EQUAL -1)
2146         ENDIF(build_srcs)
2147         ENDIF(fff)
2148         IF(fff)
2149         SET(build_srcs ${build_srcs} ${fff})
2150         ENDIF(fff)
2151         ENDFOREACH(f ${l})
2152         ''')
2153         # --
2154         # Add the library to cmake
2155         # --
2156         newlines.append(r'''
2157         ADD_LIBRARY(${name} ${type} ${srcs})
2158         ''')
2159         # --
2160         # The compilation flags
2161         # --
2162         self.setCompilationFlags(key, newlines)
2163         # --
2164         newlines.append(r'''
2165         SET_TARGET_PROPERTIES(${name} PROPERTIES VERSION ${VERSION_INFO} SOVERSION ${SOVERSION_INFO})
2166         ''')
2167         # --
2168         self.setLibAdd(key, newlines)
2169         # --
2170         if 1: # key != "noinst_LTLIBRARIES":
2171             newlines.append(r'''
2172             SET(key %s)
2173             '''%(key))
2174             newlines.append(r'''
2175             SET(test ON)
2176             IF(${key} STREQUAL noinst_LTLIBRARIES)
2177             SET(test OFF)
2178             ENDIF(${key} STREQUAL noinst_LTLIBRARIES)
2179             ''')
2180             if self.module == "netgen" :
2181                 newlines.append(r'''
2182                 IF(${key} STREQUAL noinst_LTLIBRARIES)
2183                 IF(WINDOWS)
2184                 SET(test ON)
2185                 ENDIF(WINDOWS)
2186                 ENDIF(${key} STREQUAL noinst_LTLIBRARIES)
2187                 ''')
2188                 pass
2189             newlines.append(r'''
2190             IF(test)
2191             ''')
2192             if self.module in ["medfile", "netgen"]:
2193                 newlines.append(r'''
2194                 SET(DEST lib)
2195                 ''')
2196             elif key == "libparaview_LTLIBRARIES":
2197                 newlines.append(r'''
2198                 SET(DEST lib/paraview)
2199                 ''')                
2200             else:
2201                 newlines.append(r'''
2202                 SET(DEST lib/salome)
2203                 ''')
2204                 pass
2205             newlines.append(r'''
2206             IF(BEGIN_WITH_lib)
2207             INSTALL(TARGETS ${name} DESTINATION ${DEST})
2208             ''')
2209             if self.module == "gui":
2210                 newlines.append(r'''
2211                 FOREACH(lib SalomePyQt)
2212                 IF(name STREQUAL lib)
2213                 IF(WINDOWS)
2214                 IF(CMAKE_BUILD_TYPE STREQUAL Release)
2215                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME ${name}.pyd)
2216                 ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
2217                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME ${name}_d.pyd)
2218                 ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
2219                 ELSE(WINDOWS)
2220                 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so DESTINATION ${DEST} RENAME ${name}.so)
2221                 ENDIF(WINDOWS)
2222                 ENDIF(name STREQUAL lib)
2223                 ENDFOREACH(lib SalomePyQt)
2224                 FOREACH(lib SalomePy)
2225                 IF(name STREQUAL lib)
2226                 IF(WINDOWS)
2227                 IF(CMAKE_BUILD_TYPE STREQUAL Release)
2228                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME lib${name}.pyd)
2229                 ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
2230                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME lib${name}_d.pyd)
2231                 ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
2232                 ENDIF(WINDOWS)
2233                 ENDIF(name STREQUAL lib)
2234                 ENDFOREACH(lib SalomePy)
2235                 ''')
2236                 pass
2237             if self.module == "geom":
2238                 newlines.append(r'''
2239                 IF(WINDOWS)
2240                 STRING(REGEX MATCH "Export" ISExport ${name})
2241                 IF(ISExport)
2242                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME lib${name}.dll)
2243                 ENDIF(ISExport)
2244                 STRING(REGEX MATCH "Import" ISImport ${name})
2245                 IF(ISImport)
2246                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME lib${name}.dll)
2247                 ENDIF(ISImport)
2248                 ENDIF(WINDOWS)
2249                 ''')
2250                 pass
2251             newlines.append(r'''
2252             ELSE(BEGIN_WITH_lib)
2253             ''')
2254             newlines.append(r'''
2255             IF(WINDOWS)
2256             INSTALL(TARGETS ${name} DESTINATION ${salomepythondir})
2257             IF(CMAKE_BUILD_TYPE STREQUAL Release)
2258             INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${salomepythondir}/${name}.dll DESTINATION ${salomepythondir} RENAME ${name}.pyd)
2259             ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
2260             INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${salomepythondir}/${name}.dll DESTINATION ${salomepythondir} RENAME ${name}_d.pyd)
2261             ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
2262             ELSE(WINDOWS)
2263             GET_TARGET_PROPERTY(version ${name} VERSION)
2264             GET_TARGET_PROPERTY(soversion ${name} SOVERSION)
2265             INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION ${salomepythondir} RENAME ${name}.so.${version})
2266             INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION ${salomepythondir} RENAME ${name}.so.${soversion})
2267             INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION ${salomepythondir} RENAME ${name}.so)
2268             ENDIF(WINDOWS)
2269             ''')
2270             newlines.append(r'''
2271             ENDIF(BEGIN_WITH_lib)
2272             ''')
2273             newlines.append(r'''
2274             ENDIF(test)
2275             ''')
2276             pass
2277         # --
2278         newlines.append(r'''
2279         ENDFOREACH(amname ${%s})
2280         '''%(key))
2281         # --
2282         return
2283     
2284     def addBinTarget(self, key, newlines):
2285         # --
2286         newlines.append(r'''
2287         FOREACH(amname ${%s})
2288         '''%(key))
2289         # --
2290         newlines.append(r'''
2291         SET(test ON)
2292         ''')
2293         if key == "check_PROGRAMS":
2294             newlines.append(r'''
2295             IF(bin_PROGRAMS)
2296             STRING(REGEX MATCH ${amname} is_present ${bin_PROGRAMS})
2297             IF(is_present)
2298             SET(test OFF)
2299             ENDIF(is_present)
2300             ENDIF(bin_PROGRAMS)
2301             ''')
2302             pass
2303         newlines.append(r'''
2304         IF(test)
2305         ''')
2306         # --
2307         newlines.append(r'''
2308         SET(name "${amname}_exe")
2309         SET(srcs ${${amname}_SOURCES} ${dist_${amname}_SOURCES})
2310         SET(l ${nodist_${amname}_SOURCES})
2311         FOREACH(f ${l})
2312         SET(src ${CMAKE_CURRENT_BINARY_DIR}/${f})
2313         SET(srcs ${srcs} ${src})
2314         ENDFOREACH(f ${l})
2315         LIST(LENGTH srcs nb)
2316         IF(nb)
2317         ADD_EXECUTABLE(${name} ${srcs})
2318         ''')
2319         # --
2320         self.setCompilationFlags(key, newlines)
2321         # --
2322         self.setLibAdd(key, newlines)
2323         # --
2324         if self.module in ["jobmanager", "medfile", "netgen"]:
2325             newlines.append(r'''
2326             SET(DEST bin)
2327             ''')
2328         else:
2329             newlines.append(r'''
2330             SET(DEST bin/salome)
2331             ''')
2332             pass
2333         # --
2334         if key == "bin_PROGRAMS":
2335             newlines.append(r'''
2336             IF(WINDOWS)
2337             INSTALL(TARGETS ${name} DESTINATION ${DEST})
2338             INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.exe DESTINATION ${DEST} RENAME ${amname}.exe)
2339             INSTALL(CODE "FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.exe)")
2340             ELSE(WINDOWS)
2341             SET(PERMS)
2342             SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE)
2343             SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE)
2344             SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE)
2345             INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name} DESTINATION ${DEST} PERMISSIONS ${PERMS} RENAME ${amname})
2346             ENDIF(WINDOWS)
2347             ''')
2348             pass
2349         # --
2350         newlines.append(r'''
2351         ENDIF(nb)
2352         ''')
2353         # --
2354         newlines.append(r'''
2355         ENDIF(test)
2356         ''')
2357         newlines.append(r'''
2358         ENDFOREACH(amname ${%s})
2359         '''%(key))
2360         # --
2361         return
2362     
2363     def addInstallTarget(self, key, destination, newlines):
2364         newlines.append(r"FOREACH(f ${%s})"%(key))
2365         newlines.append(r'''
2366         SET(DEST %s)
2367         '''%(destination))
2368         newlines.append(r'''
2369         STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in)
2370         IF(test_SALOMEconfig.h.in)
2371         INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in)
2372         ELSE(test_SALOMEconfig.h.in)
2373         SET(dummy dummy-NOTFOUND)
2374         MARK_AS_ADVANCED(dummy)
2375         # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f})
2376         FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH)
2377         IF(dummy)
2378         ''')
2379         if key in ['dist_salomescript_SCRIPTS',
2380                    'dist_appliskel_SCRIPTS',
2381                    'dist_appliskel_PYTHON']:
2382             newlines.append(r'''
2383             SET(PERMS)
2384             SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE)
2385             SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE)
2386             SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE)
2387             INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS})
2388             ''')
2389         else:
2390             newlines.append(r'''
2391             GET_FILENAME_COMPONENT(ext ${f} EXT)
2392             IF(ext STREQUAL .py)
2393             IF(DEST STREQUAL bin/salome)
2394             SET(PERMS)
2395             SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE)
2396             SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE)
2397             SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE)
2398             INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS})
2399             ELSE(DEST STREQUAL bin/salome)
2400             INSTALL(FILES ${f} DESTINATION ${DEST})
2401             ENDIF(DEST STREQUAL bin/salome)
2402             ELSE(ext STREQUAL .py)
2403             INSTALL(FILES ${f} DESTINATION ${DEST})
2404             ENDIF(ext STREQUAL .py)
2405             ''')
2406             pass
2407         newlines.append(r'''
2408         ELSE(dummy)
2409         GET_FILENAME_COMPONENT(ext ${f} EXT)
2410         IF(ext STREQUAL .qm)
2411         STRING(REGEX REPLACE .qm .ts input ${f})
2412         ''')
2413         if self.module in ["kernel", "gui", "yacs"]:
2414             newlines.append(r'''
2415             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input})
2416             ''')
2417         else:
2418             newlines.append(r'''
2419             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
2420             ''')
2421             pass
2422         newlines.append(r'''
2423         SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f})
2424         # ADD_CUSTOM_COMMAND(
2425         # OUTPUT ${output}
2426         # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}
2427         # MAIN_DEPENDENCY ${input}
2428         # )
2429         EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output})
2430         ENDIF(ext STREQUAL .qm)
2431         INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST})
2432         ENDIF(dummy)
2433         ENDIF(test_SALOMEconfig.h.in)
2434         ''')
2435         newlines.append(r'''
2436         GET_FILENAME_COMPONENT(ext ${f} EXT)
2437         IF(ext STREQUAL .py)
2438         INSTALL(CODE "SET(PYTHON_FILE ${f})")
2439         INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})")
2440         INSTALL(CODE "SET(DEST ${DEST})")
2441         INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})")
2442         ''')
2443         if self.module == "kernel":
2444             newlines.append('''
2445             IF(f STREQUAL SALOME_ContainerPy.py)
2446             ELSE(f STREQUAL SALOME_ContainerPy.py)
2447             IF(f STREQUAL am2cmake.py)
2448             ELSE(f STREQUAL am2cmake.py)
2449             INSTALL(SCRIPT ${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake)
2450             ENDIF(f STREQUAL am2cmake.py)
2451             ENDIF(f STREQUAL SALOME_ContainerPy.py)
2452             ''')
2453         else:
2454             newlines.append('''
2455             STRING(REPLACE "\\\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR})
2456             INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/deprecated/install_and_compile_python_file.cmake)
2457             ''')
2458             pass
2459         newlines.append(r'''
2460         ENDIF(ext STREQUAL .py)
2461         ''') 
2462         newlines.append(r"ENDFOREACH(f ${%s})"%(key))
2463         return
2464     
2465     def writeListsFile(self):
2466         f = open(self.listsFile, "w")
2467         f.write(self.content)
2468         f.close()
2469         return
2470
2471     def writeEnvScript(self, upmod, buildmod=True):
2472         import os, sys
2473         p_version = sys.version[:3]
2474         python_path = "PYTHONPATH"
2475         root_dir    = "%s_ROOT_DIR" % upmod
2476         if sys.platform == "win32":
2477             script_line = '@SET %(var)s=%(val)s;%%%(var)s%%\n'
2478             var_line    = '%%%s%%'
2479             lib_path = "PATH"
2480             omni = "x86_win32"
2481             omni_py = "python"
2482             pass
2483         else:
2484             script_line = 'export %(var)s=%(val)s:\$%(var)s\n'
2485             var_line    = '\${%s}'
2486             lib_path = "LD_LIBRARY_PATH"
2487             omni = ""
2488             omni_py = "/".join( ["python%s"%p_version , "site-packages"] )
2489             pass
2490         #
2491         script = ""
2492         #
2493         if buildmod:
2494             script += script_line % { 'var':python_path, 'val':"/".join( ["${CMAKE_INSTALL_PREFIX}", "lib", "python%s"%p_version, "site-packages", "salome"] ) }
2495             script += script_line % { 'var':python_path, 'val':"/".join( ["${CMAKE_INSTALL_PREFIX}", "bin", "salome"] ) }
2496             script += script_line % { 'var':lib_path,    'val':"/".join( ["${CMAKE_INSTALL_PREFIX}", "lib", "salome"] ) }
2497             pass
2498         else:
2499             script += script_line % { 'var':python_path, 'val':"/".join( [var_line % root_dir, "lib", "python%s"%p_version, "site-packages", "salome"] ) }
2500             script += script_line % { 'var':python_path, 'val':"/".join( [var_line % root_dir, "bin", "salome"] ) }
2501             script += script_line % { 'var':lib_path,    'val':"/".join( [var_line % root_dir, "lib", "salome"] ) }
2502             pass
2503         #
2504         if upmod == "KERNEL" :
2505             script += "\n"
2506             if omni:
2507                 script += script_line % { 'var':python_path, 'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib", omni] ) }
2508                 script += script_line % { 'var':lib_path,    'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib", omni] ) }
2509                 pass
2510             else:
2511                 script += script_line % { 'var':python_path, 'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib"] ) }
2512                 script += script_line % { 'var':lib_path,    'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib"] ) }
2513                 pass
2514             script += script_line % { 'var':python_path, 'val':"/".join( ["${OMNIORB_ROOT_USER}", "lib", omni_py] ) }
2515             pass
2516         #
2517         if upmod == "GEOM" :
2518             script = self.writeEnvScript("KERNEL", False) + "\n" + script
2519             script = self.writeEnvScript("GUI",    False) + "\n" + script
2520             pass
2521         #
2522         if upmod == "SMESH" :
2523             script = self.writeEnvScript("GEOM", False) + "\n" + script
2524             pass
2525         
2526         return script    
2527     pass
2528
2529 def convertAmFile(the_root, root, dirs, files, f, module):
2530     cmake = CMakeFile(the_root, root, dirs, files, f, module)
2531     cmake.writeListsFile()
2532     return
2533
2534 def usage(exit_status):
2535     from sys import exit
2536     from sys import argv
2537     print "Usage: %s --module"%(argv[0])
2538     exit(exit_status)
2539     return
2540
2541 if __name__ == "__main__":
2542     #
2543     from sys import argv
2544     if len(argv) != 2:
2545         usage(1)
2546         pass
2547     #
2548     module = argv[1]
2549     if module.find('--') != 0:
2550         usage(1)
2551         pass
2552     module = module[2:]
2553     if len(module) == 0:
2554         usage(1)
2555         pass
2556     #
2557     from os import getcwd
2558     the_root = getcwd()
2559     #
2560     nok = 0
2561     #
2562     from os import getenv
2563     from os import walk
2564     for root, dirs, files in walk(the_root):
2565         # --
2566         # E.A. : Remove 'CVS' in dirs
2567         # E.A. : It allows to not recurse in CVS dirs
2568         # E.A. : See os module python documentation
2569         # --
2570         try:
2571             dirs.remove('CVS')
2572         except ValueError:
2573             pass
2574         # --
2575         if "Makefile.am.cmake" in files:
2576             if "Makefile.am" in files:
2577                 files.remove("Makefile.am")
2578                 pass
2579             pass
2580         # --
2581         for f in files:
2582             if f in ["Makefile.am", "Makefile.am.cmake"]:
2583                 convert = True # convert files by default
2584                 forced = getenv("AM2CMAKE_FORCE_GENERATION", "0")=="1" or \
2585                          getenv("AM2CMAKE_FORCE_%s_GENERATION"%module.upper(), "0")=="1"
2586                 if not forced:
2587                     # detect if conversion should be done
2588                     if "CMakeLists.txt" in files:
2589                         from os.path import join
2590                         ff = open(join(root, "CMakeLists.txt"))
2591                         content = ff.read()
2592                         ff.close()
2593                         if content.find("generated by am2cmake") == -1:
2594                             convert = False
2595                             pass
2596                         pass                       
2597                     pass
2598                 if convert:
2599                     convertAmFile(the_root, root, dirs, files, f, module)
2600                     nok += 1
2601                 pass
2602             pass
2603         pass
2604     #
2605     from sys import stdout
2606     if nok:
2607         if nok == 1:
2608             msg = "%s file has been converted to cmake"%(nok)
2609         else:
2610             msg = "%s files have been converted to cmake"%(nok)
2611             pass
2612         stdout.write(msg)
2613         stdout.write("\n")
2614         stdout.flush()
2615         pass
2616     pass