]> SALOME platform Git repositories - modules/kernel.git/blob - salome_adm/cmake_files/am2cmake.py
Salome HOME
505ea0a35ea145bcdef19947d91eac1c997a0bd8
[modules/kernel.git] / salome_adm / cmake_files / am2cmake.py
1 #  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
2 #
3 #  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 #  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 #
6 #  This library is free software; you can redistribute it and/or
7 #  modify it under the terms of the GNU Lesser General Public
8 #  License as published by the Free Software Foundation; either
9 #  version 2.1 of the License.
10 #
11 #  This library is distributed in the hope that it will be useful,
12 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 #  Lesser General Public License for more details.
15 #
16 #  You should have received a copy of the GNU Lesser General Public
17 #  License along with this library; if not, write to the Free Software
18 #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 #
20 #  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 #
22 import re
23
24 # ----
25 # A set of regular expressions used ...
26 # ----
27
28 p_multiline = re.compile(r"""
29 \\           # One backslash
30 \s*          # 0 or more space
31 \n           # One CR
32 """, re.VERBOSE)
33
34 p_dollar = re.compile(r"""
35 \$\(           # a $ then a (
36 (?P<val>       # open the group val
37 [^)]*          # the group contain 0 or more non ) characters
38 )              # close the group
39 \)             # a ) at the end
40 """, re.VERBOSE)
41
42 p_arobas = re.compile(r"""
43 @              # a @
44 (?P<val>       # open the group val
45 [^@]*            # the group contain 0 or more non @ characters
46 )              # close the group
47 @              # a @ at the end
48 """, re.VERBOSE)
49
50 p_if = re.compile(r"""
51 ^          # beginning of the string
52 \s*        # 0 or more space
53 if         # an if
54 \s+        # 1 or more space
55 (?P<val>   # open the group val
56 [^\s]+     # the group contain 1 or more non space characters
57 )          # close the group
58 """, re.VERBOSE)
59
60 p_else = re.compile(r"""
61 ^          # beginning of the line
62 \s*        # 0 or more space
63 else       #
64 \s*        # 0 or more space
65 """, re.VERBOSE)
66
67 p_endif = re.compile(r"""
68 ^          # beginning of the line
69 \s*        # 0 or more space
70 endif      # a endif
71 \s*        # 0 or more space
72 """, re.VERBOSE)
73
74 p_attribution = re.compile(r"""
75 ^              # beginning of the line
76 (?P<spaces>    # open the group spaces
77 \s*            # 0 or more space
78 )              # close the group
79 (?P<key>       # open the group key
80 \w+            # the group contain 1 or more alphanumeric characters
81 )              # close the group
82 \s*            # 0 or more space
83 (?P<method>    # open the group method
84 \+?            # 0 or 1 +
85 =              # One =
86 )              # close the group
87 (?P<value>     # open the group value
88 .*             # 0 or more any characters 
89 )              # close the group
90 """, re.VERBOSE)
91
92 # -----
93
94 class CMakeFile(object):
95     
96     def __init__(self, the_root, root, dirs, files, f, module):
97         #
98         self.the_root = the_root
99         self.root = root
100         self.dirs = dirs
101         self.files = files
102         self.module = module
103         #
104         from os.path import join
105         self.amFile = join(root, f)
106         self.listsFile = join(root, "CMakeLists.txt")
107         #
108         self.parseFile()
109         #
110         return
111     
112     def parseFile(self):
113         
114         # --
115         # Read the Makefile.am file
116         # --
117         amFile = self.amFile
118         stream = open(amFile)
119         content = stream.read()
120         stream.close()
121         
122         # --
123         # Replace the composed lines separated by "\\n" by an unique line
124         # --
125         content = p_multiline.sub(r' ', content)
126         
127         # --
128         # Compatibility netgen plugin
129         # --
130         content = content.replace("../NETGEN/libNETGEN.la", "${NETGEN_LIBS}")
131         
132         # --
133         cas_list = [
134             "BinLPlugin",
135             "BinPlugin",
136             "BinTObjPlugin",
137             "BinXCAFPlugin",
138             "FWOSPlugin",
139             "PTKernel",
140             "StdLPlugin",
141             "StdPlugin",
142             "TKAdvTools",
143             "TKBin",
144             "TKBinL",
145             "TKBinTObj",
146             "TKBinXCAF",
147             "TKBO",
148             "TKBool",
149             "TKBRep",
150             "TKCAF",
151             "TKCDF",
152             "TKernel",
153             "TKFeat",
154             "TKFillet",
155             "TKG2d",
156             "TKG3d",
157             "TKGeomAlgo",
158             "TKGeomBase",
159             "TKHLR",
160             "TKIGES",
161             "TKLCAF",
162             "TKMath",
163             "TKMesh",
164             "TKMeshVS",
165             "TKNIS",
166             "TKOffset",
167             "TKOpenGl",
168             "TKPCAF",
169             "TKPLCAF",
170             "TKPrim",
171             "TKPShape",
172             "TKService",
173             "TKShapeSchema",
174             "TKShHealing",
175             "TKStdLSchema",
176             "TKStdSchema",
177             "TKSTEP",
178             "TKSTEP209",
179             "TKSTEPAttr",
180             "TKSTEPBase",
181             "TKSTL",
182             "TKTObj",
183             "TKTopAlgo",
184             "TKV2d",
185             "TKV3d",
186             "TKVRML",
187             "TKXCAF",
188             "TKXCAFSchema",
189             "TKXDEIGES",
190             "TKXDESTEP",
191             "TKXMesh",
192             "TKXml",
193             "TKXmlL",
194             "TKXmlTObj",
195             "TKXmlXCAF",
196             "TKXSBase",
197             "XCAFPlugin",
198             "XmlLPlugin",
199             "XmlPlugin",
200             "XmlTObjPlugin",
201             "XmlXCAFPlugin",
202             ]
203         vtk_list = [
204             "vtkCommonPythonD",
205             "vtkGraphicsPythonD",
206             "vtkImagingPythonD",
207             ]
208         kernel_list  = [
209             "DF",
210             "Launcher",
211             "OpUtil",
212             "Registry",
213             "ResourcesManager",
214             "SALOMEBasics",
215             "SalomeBatch",
216             "SalomeCatalog",
217             "SalomeCommunication",
218             "SalomeContainer",
219             "SalomeDSCContainer",
220             "SalomeDSClient",
221             "SalomeDSImpl",
222             "SalomeDS",
223             "SalomeGenericObj",
224             "SalomeHDFPersist",
225             "SalomeIDLKernel",
226             "SalomeLauncher",
227             "SalomeLifeCycleCORBA",
228             "SALOMELocalTrace",
229             "SalomeLoggerServer",
230             "SalomeNotification",
231             "SalomeNS",
232             "SalomeResourcesManager",
233             "TOOLSDS",
234             "with_loggerTraceCollector",
235             ]
236         gui_list = [
237             "caf",
238             "CAM",
239             "CASCatch",
240             "DDS",
241             "Event",
242             "GLViewer",
243             "LightApp",
244             "LogWindow",
245             "ObjBrowser",
246             "OCCViewer",
247             "Plot2d",
248             "PyConsole",
249             "PyInterp",
250             "QDS",
251             "qtx",
252             "QxScene",
253             "SalomeApp",
254             "SalomeIDLGUI",
255             "SalomeObject",
256             "SalomePrs",
257             "SalomeSession",
258             "SalomeStyle",
259             "SOCC",
260             "SPlot2d",
261             "std",
262             "SUITApp",
263             "suit",
264             "SUPERVGraph",
265             "SVTK",
266             "ToolsGUI",
267             "VTKViewer",
268             ]
269         geom_list = [
270             "BasicGUI",
271             "BlocksGUI",
272             "BooleanGUI",
273             "BREPExport",
274             "BREPImport",
275             "BuildGUI",
276             "DisplayGUI",
277             "DlgRef",
278             "EntityGUI",
279             "GenerationGUI",
280             "GEOMAlgo",
281             "GEOMArchimede",
282             "GEOMBase",
283             "GEOMbasic",
284             "GEOMClient",
285             "GEOMEngine",
286             "GEOMFiltersSelection",
287             "GEOMimpl",
288             "GEOMObject",
289             "GEOMSketcher",
290             "GEOM",
291             "GEOM_SupervEngine",
292             "GEOMToolsGUI",
293             "GroupGUI",
294             "IGESExport",
295             "IGESImport",
296             "MeasureGUI",
297             "NMTDS",
298             "NMTTools",
299             "OperationGUI",
300             "PrimitiveGUI",
301             "RepairGUI",
302             "SalomeIDLGEOM",
303             "ShHealOper",
304             "STEPExport",
305             "STEPImport",
306             "STLExport",
307             "TransformationGUI",
308             ]
309         med_list = [
310             "InterpGeometric2DAlg",
311             "interpkernelbases",
312             "interpkernel",
313             "MEDClientcmodule",
314             "medcoupling",
315             "MEDEngine",
316             "MEDMEMImpl",
317             "medmem",
318             "MED",
319             "med_V2_1",
320             "MEDWrapperBase",
321             "MEDWrapper",
322             "MEDWrapper_V2_1",
323             "MEDWrapper_V2_2",
324             "SalomeIDLMED",
325             ]
326         smesh_list = [
327             "MEFISTO2D",
328             "MeshDriverDAT",
329             "MeshDriverMED",
330             "MeshDriver",
331             "MeshDriverSTL",
332             "MeshDriverUNV",
333             "SalomeIDLSMESH",
334             "SMDS",
335             "SMESHClient",
336             "SMESHControls",
337             "SMESHDS",
338             "SMESHEngine",
339             "SMESHFiltersSelection",
340             "SMESHimpl",
341             "SMESHObject",
342             "SMESH",
343             "StdMeshersEngine",
344             "StdMeshersGUI",
345             "StdMeshers",
346             ]
347         full_list  = cas_list + vtk_list
348         full_list += kernel_list + gui_list
349         full_list += geom_list + med_list + smesh_list
350         # --
351         # E.A. : sort by len before substitution ...
352         # Why ? Thing to "-lMEDWrapper" then "-lMEDWrapper_V2_1" substition
353         # And you understand ...
354         # --
355         full_list.sort(cmp = lambda x, y : cmp(len(y), len(x)))
356         # --
357         for key in full_list:
358             content = content.replace("-l%s"%(key), "${%s}"%(key))
359             pass
360         
361         # --
362         # Split content in lines to treat each one separately
363         # --
364         lines = content.split('\n')
365         
366         # --
367         # newlines contains the lines of the future CMakeLists.txt file
368         # --
369         newlines = []
370         
371         # --
372         # opened_ifs is used to deals with nested conditionnals
373         # --
374         opened_ifs = []
375         
376         # --
377         # the __thedict__ dictionnary contains key, val
378         # of the Makefile.am file
379         # --
380         self.__thedict__ = {}
381         
382         # --
383         # Initialize file ... mainly includes other cmake files
384         # --
385         self.initialize(newlines)
386         
387         # --
388         # Do the job for each line
389         # --
390         for line in lines:
391             self.treatLine(line, newlines, opened_ifs)
392             pass
393         
394         # --
395         # Finalize file ... it is in here the cmake job is done
396         # --
397         self.finalize(newlines)
398         
399         # --
400         # Concatenate newlines into content
401         # --
402         content = '\n'.join(newlines)
403         
404         # --
405         # Add a CR at end if necessary
406         # --
407         lines = content.split('\n')
408         # lines = [ l.strip() for l in lines ]
409         if len(lines[-1]) != 0:
410             lines.append('')
411             pass
412         content = '\n'.join(lines)
413         
414         # --
415         self.content = content
416         
417         # --
418         return
419     
420     def initialize(self, newlines):
421         if self.root == self.the_root:
422             # --
423             newlines.append("""
424             CMAKE_MINIMUM_REQUIRED(VERSION 2.4.7 FATAL_ERROR)
425             IF(COMMAND cmake_policy)
426             cmake_policy(SET CMP0003 NEW)
427             ENDIF(COMMAND cmake_policy)
428             """)
429             # --
430             if self.module == "kernel":
431                 newlines.append("""
432                 INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindPLATFORM.cmake)
433                 INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindPYTHON.cmake)
434                 INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindOMNIORB.cmake)
435                 INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindPTHREADS.cmake)
436                 INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindHDF5.cmake)
437                 INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindBOOST.cmake)
438                 INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindLIBXML2.cmake)
439                 INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindSWIG.cmake)
440                 INCLUDE(${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/FindCPPUNIT.cmake)
441                 """)
442                 pass
443             else:
444                 newlines.append("""
445                 SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR})
446                 INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindPLATFORM.cmake)
447                 INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindPYTHON.cmake)
448                 INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindOMNIORB.cmake)
449                 INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindPTHREADS.cmake)
450                 INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindHDF5.cmake)
451                 INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindBOOST.cmake)
452                 INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindLIBXML2.cmake)
453                 INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindSWIG.cmake)
454                 INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindCPPUNIT.cmake)
455                 INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindKERNEL.cmake)
456                 """)
457                 if self.module == "gui":
458                     newlines.append("""
459                     INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindCAS.cmake)
460                     INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindQT4.cmake)
461                     INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindOPENGL.cmake)
462                     INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindVTK.cmake)
463                     INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindQWT.cmake)
464                     INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindSIPPYQT.cmake)
465                     """)
466                 else:
467                     newlines.append("""
468                     SET(GUI_ROOT_DIR $ENV{GUI_ROOT_DIR})
469                     INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindCAS.cmake)
470                     INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindQT4.cmake)
471                     INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindOPENGL.cmake)
472                     INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindVTK.cmake)
473                     INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindQWT.cmake)
474                     INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindSIPPYQT.cmake)
475                     INCLUDE(${GUI_ROOT_DIR}/adm_local/cmake_files/FindGUI.cmake)
476                     """)
477                     if self.module == "med":
478                         newlines.append("""
479                         INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindMEDFILE.cmake)
480                         """)
481                         pass
482                     if self.module == "smesh":
483                         newlines.append("""
484                         SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR})
485                         SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
486                         INCLUDE(${GEOM_ROOT_DIR}/adm_local/cmake_files/FindGEOM.cmake)
487                         INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMEDFILE.cmake)
488                         INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
489                         """)
490                         pass
491                     if self.module == "netgenplugin":
492                         newlines.append("""
493                         SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR})
494                         SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
495                         SET(SMESH_ROOT_DIR $ENV{SMESH_ROOT_DIR})
496                         INCLUDE(${GEOM_ROOT_DIR}/adm_local/cmake_files/FindGEOM.cmake)
497                         INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
498                         INCLUDE(${SMESH_ROOT_DIR}/adm_local/cmake_files/FindSMESH.cmake)
499                         INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindNETGEN.cmake)
500                         """)
501                         pass
502                     if self.module == "blsurfplugin":
503                         newlines.append("""
504                         SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR})
505                         SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
506                         SET(SMESH_ROOT_DIR $ENV{SMESH_ROOT_DIR})
507                         INCLUDE(${GEOM_ROOT_DIR}/adm_local/cmake_files/FindGEOM.cmake)
508                         INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
509                         INCLUDE(${SMESH_ROOT_DIR}/adm_local/cmake_files/FindSMESH.cmake)
510                         INCLUDE(${CMAKE_SOURCE_DIR}/adm_local/cmake_files/FindBLSURF.cmake)
511                         """)
512                         pass
513                     if self.module == "hexoticplugin":
514                         newlines.append("""
515                         SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR})
516                         SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
517                         SET(SMESH_ROOT_DIR $ENV{SMESH_ROOT_DIR})
518                         INCLUDE(${GEOM_ROOT_DIR}/adm_local/cmake_files/FindGEOM.cmake)
519                         INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
520                         INCLUDE(${SMESH_ROOT_DIR}/adm_local/cmake_files/FindSMESH.cmake)
521                         """)
522                         pass
523                     if self.module == "ghs3dplugin":
524                         newlines.append("""
525                         SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR})
526                         SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
527                         SET(SMESH_ROOT_DIR $ENV{SMESH_ROOT_DIR})
528                         INCLUDE(${GEOM_ROOT_DIR}/adm_local/cmake_files/FindGEOM.cmake)
529                         INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
530                         INCLUDE(${SMESH_ROOT_DIR}/adm_local/cmake_files/FindSMESH.cmake)
531                         """)
532                         pass
533                     if self.module == "visu":
534                         newlines.append("""
535                         SET(MED_ROOT_DIR $ENV{MED_ROOT_DIR})
536                         INCLUDE(${MED_ROOT_DIR}/adm_local/cmake_files/FindMED.cmake)
537                         """)
538                         pass
539                     if self.module == "yacs":
540                         newlines.append("""
541                         INCLUDE(${CMAKE_SOURCE_DIR}/adm/cmake/FindEXPAT.cmake)
542                         INCLUDE(${CMAKE_SOURCE_DIR}/adm/cmake/FindGRAPHVIZ.cmake)
543                         """)
544                         pass
545                     pass
546                 pass
547             # --
548             if self.module == "kernel":
549                 newlines.append("""
550                 SET(WITH_LOCAL 1)
551                 SET(WITH_BATCH 1)
552                 set(VERSION 5.1.2)
553                 set(XVERSION 0x050102)
554                 SET(CALCIUM_IDL_INT_F77 long)
555                 SET(CALCIUM_CORBA_INT_F77 CORBA::Long)
556                 SET(LONG_OR_INT int)
557                 """)
558             elif self.module == "gui":
559                 newlines.append("""
560                 SET(GUI_ENABLE_CORBA ${CORBA_GEN})
561                 SET(ENABLE_VTKVIEWER ON)
562                 SET(ENABLE_SALOMEOBJECT ON)
563                 SET(ENABLE_OCCVIEWER ON)
564                 SET(ENABLE_GLVIEWER ON)
565                 SET(ENABLE_PLOT2DVIEWER ON)
566                 SET(ENABLE_PYCONSOLE ON)
567                 SET(ENABLE_SUPERVGRAPHVIEWER ON)
568                 SET(ENABLE_QXGRAPHVIEWER ON)
569                 set(VERSION 5.1.2)
570                 set(XVERSION 0x050102)
571                 """)
572                 pass
573             elif self.module == "geom":
574                 newlines.append("""
575                 SET(GEOM_ENABLE_GUI ON)
576                 """)
577                 pass
578             elif self.module == "medfile":
579                 newlines.append("""
580                 SET(MED_NUM_MAJEUR 2)
581                 SET(MED_NUM_MINEUR 3)
582                 SET(MED_NUM_RELEASE 5)
583                 SET(LONG_OR_INT int)
584                 IF(NOT WINDOWS)
585                 SET(FLIBS -lgfortranbegin -lgfortran)
586                 ENDIF(NOT WINDOWS)
587                 """)
588                 pass
589             elif self.module == "med":
590                 newlines.append("""
591                 SET(MED_ENABLE_KERNEL ON)
592                 IF(NOT WINDOWS)
593                 SET(MED_ENABLE_SPLITTER ON)
594                 ENDIF(NOT WINDOWS)
595                 SET(MED_ENABLE_GUI ON)
596                 """)
597                 pass
598             elif self.module == "smesh":
599                 newlines.append("""
600                 SET(SMESH_ENABLE_GUI ON)
601                 """)
602                 pass
603             elif self.module == "netgenplugin":
604                 newlines.append("""
605                 SET(NETGENPLUGIN_ENABLE_GUI ON)
606                 """)
607                 pass
608             elif self.module == "blsurfplugin":
609                 newlines.append("""
610                 SET(BLSURFPLUGIN_ENABLE_GUI ON)
611                 """)
612                 pass
613             elif self.module == "ghs3dplugin":
614                 newlines.append("""
615                 SET(GHS3DPLUGIN_ENABLE_GUI ON)
616                 """)
617                 pass
618             elif self.module == "yacs":
619                 newlines.append("""
620                 SET(SALOME_KERNEL ON)
621                 SET(HAS_GUI ON)
622                 """)
623                 pass
624             # --
625             pass
626         # --
627         newlines.append("""
628         SET(VERSION_INFO 0.0.0)
629         SET(SOVERSION_INFO 0)
630         SET(SUBDIRS)
631         SET(AM_CPPFLAGS)
632         SET(AM_CXXFLAGS)
633         SET(LDADD)
634         """)
635         if self.module == "kernel":
636             newlines.append(r'''
637             SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${CMAKE_BINARY_DIR}/salome_adm/unix -include SALOMEconfig.h)
638             SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${CMAKE_BINARY_DIR}/salome_adm/unix -include SALOMEconfig.h)
639             ''')
640         else:
641             if self.module not in ["yacs"]:
642                 newlines.append(r'''
643                 SET(AM_CPPFLAGS ${AM_CPPFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h)
644                 SET(AM_CXXFLAGS ${AM_CXXFLAGS} -DHAVE_SALOME_CONFIG -I${KERNEL_ROOT_DIR}/include/salome -include SALOMEconfig.h)
645                 ''')
646                 pass
647             pass
648         # --
649         return
650     
651     def treatLine(self, line, newlines, opened_ifs):
652         
653         # --
654         # Print the comment above the line itself
655         # --
656         if line.find('#') >= 0:
657             fields = line.split('#')
658             line = fields[0]
659             comment = '#'.join([''] + fields[1:])
660             newlines.append(comment)
661             if len(line) == 0:
662                 return
663             pass
664         
665         # --
666         # If the line begins with 'include ', just comment it
667         # --
668         if line.find("include ") == 0:
669             newlines.append("# " + line)
670             return
671         
672         # --
673         # If the line begins with '-include', just comment it
674         # --
675         if line.find("-include") == 0:
676             newlines.append("# " + line)
677             return
678         
679         # --
680         # If the line is a definition of a make rule, just comment it
681         # --
682         if line.count(':') == 1:
683             newlines.append("# " + line)
684             return
685         
686         # --
687         # A particuliar case where there are two ":" on the same line
688         # --
689         if line.find('install-exec-local:') == 0:
690             newlines.append("# " + line)
691             return
692         
693         # --
694         # If the line begin by a tabulation, consider it's a makefile command and comment it
695         # --
696         if line.find("\t") == 0:
697             newlines.append("# " + line)
698             return
699         
700         # --
701         # --
702         key = "-version-info"
703         if line.find(key) >= 0:
704             # --
705             before = line.split(key)[0]
706             after = line[len(before)+len(key):]
707             sep = after[0]
708             after = after[1:]
709             version_info = after.split()[0]
710             line = line.replace(key+sep+version_info, "")
711             # --
712             version_info = version_info.replace(':', '.')
713             soversion_info = version_info.split('.')[0]
714             newlines.append("SET(VERSION_INFO " + version_info + ")")
715             newlines.append("SET(SOVERSION_INFO " + soversion_info + ")")
716             # --
717             pass
718         
719         # --
720         # Replace the $(TOTO) by ${TOTO}
721         # Replace the @TOTO@  by ${TOTO}
722         # --
723         line = p_dollar.sub(r"${\1}", line)
724         line = p_arobas.sub(r"${\1}", line)
725         
726         # --
727         line = line.replace(r"${top_builddir}", r"${CMAKE_BINARY_DIR}")
728         line = line.replace(r"${top_srcdir}", r"${CMAKE_SOURCE_DIR}")
729         line = line.replace(r"${srcdir}", r"${CMAKE_CURRENT_SOURCE_DIR}")
730         line = line.replace(r"${builddir}", r"${CMAKE_CURRENT_BINARY_DIR}")
731         line = line.replace(r"${datadir}", r"${CMAKE_INSTALL_PREFIX}/share")
732         
733         # --
734         # Check if the line is a 'if' condition
735         # If yes, replace it by a cmake grammar
736         # --
737         match = p_if.match(line)
738         if match:
739             theif = match.group("val")
740             if theif[0] == "!":
741                 theif = "NOT " + theif[1:]
742                 pass
743             line = p_if.sub(r"IF(%s)"%(theif), line)
744             opened_ifs.append(theif)
745             newlines.append(line)
746             return
747         
748         # --
749         # Check if the line is a 'else' condition
750         # If yes, replace it by a cmake grammar
751         # --
752         match = p_else.match(line)
753         if match:
754             line = "ELSE(%s)"%(opened_ifs[-1])
755             newlines.append(line)
756             return
757         
758         # --
759         # Check if the line is a 'endif' condition
760         # If yes, replace it by a cmake grammar
761         # --
762         match = p_endif.match(line)
763         if match:
764             line = "ENDIF(%s)"%(opened_ifs[-1])
765             opened_ifs[-1:] = []
766             newlines.append(line)
767             return
768         
769         # --
770         # Check if the line is an attribution '=' or '+='
771         # --
772         match = p_attribution.match(line)
773         if match:
774             self.treatAttribution(match, newlines)
775             return
776         
777         # --
778         newlines.append(line)
779         
780         # --
781         return
782     
783     def treatAttribution(self, match, newlines):
784         
785         spaces = match.group("spaces")
786         key = match.group("key")
787         method = match.group("method")
788         value = match.group("value")
789         # print [spaces, key, method, value]
790         
791         # --
792         # Open cmake SET command
793         # --
794         newlines.append(spaces + "SET(" + key)
795         
796         # --
797         # If method is '+=', put the previous definition as first value
798         # --
799         if method == "+=":
800             newlines.append("%s    ${%s}"%(spaces, key))
801             pass
802         
803         # --
804         fields = value.split()
805         for i in range(len(fields)):
806             newlines.append("%s    %s"%(spaces, fields[i]))
807             pass
808         
809         # --
810         if method == "+=":
811             # --
812             # The try: except KeyError is here if the +=
813             # is an error which occurs in salome ...
814             # --
815             try:
816                 self.__thedict__[key] += fields[:]
817             except KeyError:
818                 self.__thedict__[key] = fields[:]
819                 pass
820             pass
821         else:
822             self.__thedict__[key]  = fields[:]
823             pass
824         
825         # --
826         # Close cmake SET command
827         # --
828         
829         newlines.append("%s)"%(spaces))
830         
831         return
832     
833     def finalize(self, newlines):
834         
835         # --
836         # Convert the .in files in build dir
837         # --
838         for f in self.files:
839             if f[-3:] == ".in":
840                 if f == "sstream.in":
841                     continue
842                 if f in ["runContainer.in", "stopContainer.in"]:
843                     if self.module == "med":
844                         if self.root[-3:] == "csh":
845                             continue
846                         pass
847                     pass
848                 if f == "SALOMEconfig.ref.in":
849                     out = "SALOMEconfig.h"
850                 else:
851                     out = f[:-3]
852                     pass
853                 newlines.append(r'''
854                 SET(input ${CMAKE_CURRENT_SOURCE_DIR}/%s)
855                 '''%(f))
856                 newlines.append(r'''
857                 SET(output ${CMAKE_CURRENT_BINARY_DIR}/%s)
858                 '''%(out))
859                 newlines.append(r'''
860                 MESSAGE(STATUS "Creation of ${output}")
861                 CONFIGURE_FILE(${input} ${output})
862                 ''')
863                 pass
864             pass
865         
866         # --
867         # convert the SUBDIRS in cmake grammar
868         # --
869         if 1: # self.__thedict__.has_key("SUBDIRS"):
870             newlines.append(r'''
871             FOREACH(dir ${SUBDIRS})
872             IF(NOT dir STREQUAL .)
873             ADD_SUBDIRECTORY(${dir})
874             ENDIF(NOT dir STREQUAL .)
875             ENDFOREACH(dir ${SUBDIRS})
876             ''')
877             pass
878         
879         # --
880         # --
881         for key in ["lib_LTLIBRARIES", "noinst_LTLIBRARIES", "salomepyexec_LTLIBRARIES"]:
882             if self.__thedict__.has_key(key):
883                 self.addLibTarget(key, newlines)
884                 pass
885             pass
886         
887         # --
888         # --
889         for key in ["bin_PROGRAMS", "check_PROGRAMS"]:
890             if self.__thedict__.has_key(key):
891                 self.addBinTarget(key, newlines)
892                 pass
893             pass
894         
895         # --
896         # --
897         if self.__thedict__.has_key("BASEIDL_FILES"):
898             if not self.__thedict__.has_key("IDL_FILES"):
899                 self.__thedict__["IDL_FILES"] = self.__thedict__["BASEIDL_FILES"]
900                 newlines.append('''
901                 SET(IDL_FILES ${BASEIDL_FILES})
902                 ''')
903                 pass
904             pass
905         
906         # --
907         # --
908         
909         key = "IDL_FILES"
910         if self.__thedict__.has_key(key):
911             if self.module == "kernel":
912                 newlines.append('''
913                 SET(IDL_FILES ${IDL_FILES} Calcium_Ports.idl)
914                 ''')
915                 pass
916             newlines.append('''
917             FOREACH(input ${IDL_FILES})
918             STRING(REGEX REPLACE ".idl" "" base ${input})
919             SET(src ${CMAKE_CURRENT_BINARY_DIR}/${base}SK.cc)
920             SET(outputs ${src})
921             SET(dynsrc ${CMAKE_CURRENT_BINARY_DIR}/${base}DynSK.cc)
922             SET(outputs ${outputs} ${dynsrc})
923             IF(input STREQUAL Calcium_Ports.idl)
924             SET(input ${CMAKE_CURRENT_BINARY_DIR}/${input})
925             ELSE(input STREQUAL Calcium_Ports.idl)
926             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
927             ENDIF(input STREQUAL Calcium_Ports.idl)
928             SET(flags ${IDLCXXFLAGS} ${OMNIORB_IDLCXXFLAGS})
929             STRING(REGEX MATCH "-bcxx" ISBCXX ${flags})
930             IF(NOT ISBCXX)
931             SET(flags -bcxx ${flags})
932             ENDIF(NOT ISBCXX)
933             ADD_CUSTOM_COMMAND(
934             OUTPUT ${outputs}
935             COMMAND ${OMNIORB_IDL} ${flags} ${input}
936             MAIN_DEPENDENCY ${input}
937             )
938             install(FILES ${input} DESTINATION idl/salome)
939             SET(IDL_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${base}.hh)
940             install(FILES ${IDL_HEADER} DESTINATION include/salome)
941             INSTALL(CODE "SET(IDL_FILE ${input})")
942             INSTALL(CODE "SET(DIR lib/python${PYTHON_VERSION}/site-packages/salome)")
943             INSTALL(CODE "SET(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})")
944             INSTALL(CODE "SET(OMNIORB_IDL_PYTHON ${OMNIORB_IDL_PYTHON})")
945             # --
946             SET(flags)
947             FOREACH(f ${IDLPYFLAGS})
948             SET(flags "${flags} ${f}")
949             ENDFOREACH(f ${IDLPYFLAGS})
950             STRING(REGEX MATCH "-bpython" ISBPYTHON ${flags})
951             IF(NOT ISBPYTHON)
952             SET(flags "-bpython ${flags}")
953             ENDIF(NOT ISBPYTHON)
954             SET(IDLPYFLAGS ${flags})
955             STRING(REPLACE "\\\\" "/" IDLPYFLAGS ${IDLPYFLAGS})
956             INSTALL(CODE "SET(IDLPYFLAGS ${IDLPYFLAGS})")
957             # --
958             ''')
959             if self.module == "kernel":
960                 newlines.append('''
961                 INSTALL(SCRIPT ${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/install_python_from_idl.cmake)
962                 ''')
963             else:
964                 newlines.append('''
965                 STRING(REPLACE "\\\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR})
966                 INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_python_from_idl.cmake)
967                 ''')
968                 pass
969             newlines.append('''
970             ENDFOREACH(input ${IDL_FILES})
971             ''')
972             pass
973         
974         # --
975         # --
976         for key in ["SWIG_SRC", "SWIGSOURCES", "SWIG_DEF"]:
977             if self.__thedict__.has_key(key):
978                 newlines.append('''
979                 SET(SWIG_SOURCES ${%s})
980                 '''%(key))
981                 self.__thedict__["SWIG_SOURCES"] = self.__thedict__[key]
982                 pass
983             pass
984         
985         # --
986         # --
987         if self.__thedict__.has_key("SWIG_SOURCES"):
988             newlines.append('''
989             IF(SWIG_SOURCES MATCHES ";")
990             STRING(REGEX REPLACE ";.*" "" SWIG_SOURCES_FIRST "${SWIG_SOURCES}")
991             ELSE(SWIG_SOURCES MATCHES ";")
992             SET(SWIG_SOURCES_FIRST "${SWIG_SOURCES}")
993             ENDIF(SWIG_SOURCES MATCHES ";")
994             ADD_CUSTOM_COMMAND(
995             OUTPUT ${build_srcs}
996             COMMAND ${SWIG_EXECUTABLE} ${SWIG_FLAGS} ${MY_SWIG_FLAGS} -o ${build_srcs} ${CMAKE_CURRENT_SOURCE_DIR}/${SWIG_SOURCES_FIRST}
997             MAIN_DEPENDENCY ${SWIG_SOURCES}
998             )
999             ''')
1000             pass
1001         
1002         # --
1003         # --
1004         if self.__thedict__.has_key("BUILT_SOURCES"):
1005             newlines.append('''
1006             FOREACH(f ${BUILT_SOURCES})
1007             IF(f MATCHES "WRAP.cxx$")
1008             # STRING(REGEX REPLACE "WRAP.cxx" "WRAP.h" inc ${f})
1009             STRING(REGEX REPLACE "WRAP.cxx" ".i" input ${f})
1010             ADD_CUSTOM_COMMAND(
1011             OUTPUT ${f} # ${inc}
1012             COMMAND ${SWIG_EXECUTABLE} ${SWIG_FLAGS} ${SWIG_PYTHON_INCLUDES} ${MYSWIG_FLAGS} -o ${f} ${CMAKE_CURRENT_SOURCE_DIR}/${input}
1013             MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/${input}
1014             )
1015             ENDIF(f MATCHES "WRAP.cxx$")
1016             ENDFOREACH(f ${BUILT_SOURCES})
1017             ''')
1018             pass
1019
1020         # --
1021         # --
1022         key = "MOC_FILES"
1023         if self.__thedict__.has_key(key):
1024             newlines.append('''
1025             FOREACH(output ${MOC_FILES})
1026             STRING(REGEX REPLACE _moc.cxx .h input ${output})
1027             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1028             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1029             ADD_CUSTOM_COMMAND(
1030             OUTPUT ${output}
1031             COMMAND ${QT_MOC_EXECUTABLE} ${MOC_FLAGS} ${input} -o ${output}
1032             MAIN_DEPENDENCY ${input}
1033             )
1034             ENDFOREACH(output ${MOC_FILES})
1035             ''')
1036             pass
1037         
1038         # --
1039         # --
1040         key = "UIC_FILES"
1041         if self.__thedict__.has_key(key):
1042             newlines.append('''
1043             FOREACH(output ${UIC_FILES})
1044             STRING(REPLACE "ui_" "" input ${output})
1045             STRING(REPLACE ".h" ".ui" input ${input})
1046             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1047             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1048             ADD_CUSTOM_COMMAND(
1049             OUTPUT ${output}
1050             COMMAND ${QT_UIC_EXECUTABLE} -o ${output} ${input}
1051             MAIN_DEPENDENCY ${input}
1052             )
1053             ENDFOREACH(output ${UIC_FILES})
1054             ''')
1055             pass
1056         
1057         # --
1058         # --
1059         key = "QRC_FILES"
1060         if self.__thedict__.has_key(key):
1061             newlines.append('''
1062             FOREACH(output ${QRC_FILES})
1063             STRING(REGEX REPLACE "qrc_" "" input ${output})
1064             STRING(REGEX REPLACE ".cxx" ".qrc" input ${input})
1065             STRING(REGEX REPLACE ".qrc" "" name ${input})
1066             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1067             SET(output ${CMAKE_CURRENT_BINARY_DIR}/${output})
1068             ADD_CUSTOM_COMMAND(
1069             OUTPUT ${output}
1070             COMMAND ${QT_RCC_EXECUTABLE} ${input} -o ${output} -name ${name}
1071             MAIN_DEPENDENCY ${input}
1072             )
1073             ENDFOREACH(output ${QRC_FILES})
1074             ''')
1075             pass
1076         
1077         # --
1078         # --
1079         key = "SIP_FILES"
1080         if self.__thedict__.has_key(key):
1081             newlines.append('''
1082             FOREACH(input ${SIP_FILES})
1083             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1084             SET(output)
1085             FOREACH(out ${SIP_SRC})
1086             SET(output ${output} ${CMAKE_CURRENT_BINARY_DIR}/${out})
1087             ENDFOREACH(out ${SIP_SRC})
1088             ADD_CUSTOM_COMMAND(
1089             OUTPUT ${output}
1090             COMMAND ${SIP_EXECUTABLE} ${PYQT_SIPFLAGS} ${input}
1091             MAIN_DEPENDENCY ${input}
1092             )
1093             ENDFOREACH(input ${SIP_FILES})
1094             ''')
1095             pass
1096         
1097         # --
1098         # Treat the install targets
1099         # --
1100         d = {
1101             "salomeadmux_DATA"            :  "salome_adm/unix",
1102             "dist_salomeadmux_DATA"       :  "salome_adm/unix",
1103             "dist_salome_cmake_DATA"      :  "salome_adm/cmake_files",
1104             "dist_salomem4_DATA"          :  "salome_adm/unix/config_files",
1105             "dist_salome4depr_DATA"       :  "salome_adm/unix/config_files/DEPRECATED",
1106             "dist_admlocalm4_DATA"        :  "adm_local/unix/config_files",
1107             "dist_admlocal_cmake_DATA"    :  "adm_local/cmake_files",
1108             "salomeinclude_DATA"          :  "include/salome",
1109             "salomeinclude_HEADERS"       :  "include/salome",
1110             "dist_salomeres_DATA"         :  "share/salome/resources/%s"%(self.module),
1111             "nodist_salomeres_DATA"       :  "share/salome/resources/%s"%(self.module),
1112             "nodist_salomeres_SCRIPTS"    :  "share/salome/resources/%s"%(self.module),
1113             "dist_salomescript_SCRIPTS"   :  "bin/salome",
1114             "dist_salomescript_DATA"      :  "bin/salome",
1115             "dist_salomescript_PYTHON"    :  "bin/salome",
1116             "nodist_salomescript_DATA"    :  "bin/salome",
1117             "salomepython_PYTHON"         :  "lib/python${PYTHON_VERSION}/site-packages/salome",
1118             "nodist_salomepython_PYTHON"  :  "lib/python${PYTHON_VERSION}/site-packages/salome",
1119             "dist_salomepython_DATA"      :  "lib/python${PYTHON_VERSION}/site-packages/salome",
1120             "sharedpkgpython_PYTHON"      :  "lib/python${PYTHON_VERSION}/site-packages/salome/shared_modules",
1121             }
1122         if self.module == "medfile":
1123             d = {
1124                 "include_HEADERS"        :  "include",
1125                 "nodist_include_HEADERS" :  "include",
1126                 "bin_SCRIPTS"            :  "bin",
1127                 "doc_DATA"               :  "${docdir}",
1128                 }
1129             pass
1130         for key, value in d.items():
1131             if self.__thedict__.has_key(key):
1132                 self.addInstallTarget(key, value, newlines)
1133                 pass
1134             pass
1135         
1136         # --
1137         return
1138     
1139     def setLibAdd(self, key, newlines):
1140         # --
1141         newlines.append(r'''
1142         SET(libadd)
1143         ''')
1144         # --
1145         newlines.append(r'''
1146         IF(WINDOWS)
1147         SET(targets)
1148         SET(targets ${targets} MEFISTO2D)
1149         FOREACH(target ${targets})
1150         IF(name STREQUAL ${target})
1151         SET(dir $ENV{F2CHOME})
1152         STRING(REPLACE "\\\\" "/" dir ${dir})
1153         SET(libadd ${libadd} ${dir}/LIBF77.lib)
1154         SET(libadd ${libadd} ${dir}/LIBI77.lib)
1155         ENDIF(name STREQUAL ${target})
1156         ENDFOREACH(target ${targets})
1157         ENDIF(WINDOWS)
1158         ''')
1159         # --
1160         newlines.append(r'''
1161         SET(libs ${PLATFORM_LIBADD} ${PLATFORM_LDFLAGS} ${${amname}_LIBADD} ${${amname}_LDADD} ${${amname}_LDFLAGS})
1162         FOREACH(lib SALOMEBasics SalomeBatch)
1163         IF(name STREQUAL lib)
1164         SET(libs ${libs} ${PTHREAD_LIBS})
1165         ENDIF(name STREQUAL lib)
1166         ENDFOREACH(lib SALOMEBasics SalomeBatch)
1167         ''')
1168         if key == "bin_PROGRAMS":
1169             newlines.append(r'''
1170             SET(libs ${libs} ${LDADD})
1171             ''')
1172             pass
1173         # --
1174         newlines.append(r'''
1175         FOREACH(lib ${libs})
1176         GET_FILENAME_COMPONENT(ext ${lib} EXT)
1177         IF(ext STREQUAL .la)
1178         GET_FILENAME_COMPONENT(lib ${lib} NAME_WE)
1179         STRING(REGEX REPLACE "^lib" "" lib ${lib})
1180         ENDIF(ext STREQUAL .la)
1181         SET(vars)
1182         SET(vars ${vars} -no-undefined)
1183         SET(vars ${vars} -lvtkWidgets)
1184         IF(WINDOWS)
1185         SET(vars ${vars} -module)
1186         SET(vars ${vars} -Wl,-E)
1187         SET(vars ${vars} -Xlinker)
1188         SET(vars ${vars} -export-dynamic)
1189         SET(vars ${vars} -lm)
1190         SET(vars ${vars} -lboost_thread)
1191         SET(vars ${vars} -lboost_signals)
1192         SET(vars ${vars} -pthread -lpthread -ldl)
1193         ENDIF(WINDOWS)
1194         FOREACH(v ${vars})
1195         IF(lib STREQUAL v)
1196         SET(lib)
1197         ENDIF(lib STREQUAL v)
1198         ENDFOREACH(v ${vars})
1199         SET(libadd ${libadd} ${lib})
1200         ENDFOREACH(lib ${libs})
1201         TARGET_LINK_LIBRARIES(${name} ${libadd})
1202         ''')
1203         # --
1204         newlines.append(r'''
1205         IF(WINDOWS)
1206         SET(targets)
1207         SET(targets ${targets} MEFISTO2D)
1208         FOREACH(target ${targets})
1209         IF(name STREQUAL ${target})
1210         IF(CMAKE_BUILD_TYPE STREQUAL Debug)
1211         SET_TARGET_PROPERTIES(${name} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:MSVCRT")
1212         ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug)
1213         ENDIF(name STREQUAL ${target})
1214         ENDFOREACH(target ${targets})
1215         ENDIF(WINDOWS)
1216         ''')
1217         # --
1218         return
1219     
1220     def setCompilationFlags(self, key, newlines):
1221         newlines.append(r'''
1222         SET(var)
1223         IF(WINDOWS)
1224         SET(targets)
1225         SET(targets ${targets} SalomeIDLKernel)
1226         SET(targets ${targets} SalomeDS)
1227         SET(targets ${targets} SALOMEDSTest)
1228         SET(targets ${targets} SALOMEDS_Client_exe)
1229         SET(targets ${targets} SalomeIDLGEOM)
1230         SET(targets ${targets} GEOMEngine)
1231         SET(targets ${targets} MEDEngine)
1232         SET(targets ${targets} SMESHEngine)
1233         SET(targets ${targets} SMESH)
1234         FOREACH(target ${targets})
1235         IF(name STREQUAL ${target})
1236         SET(var ${var} -DNOGDI)
1237         ENDIF(name STREQUAL ${target})
1238         ENDFOREACH(target ${targets})
1239         ENDIF(WINDOWS)
1240         ''')
1241         # --
1242         if self.module == "yacs":
1243             newlines.append(r'''
1244             IF(WINDOWS)
1245             SET(var ${var} -DNOGDI)
1246             ENDIF(WINDOWS)
1247             ''')
1248             pass
1249         # --
1250         newlines.append(r'''
1251         IF(WINDOWS)
1252         SET(targets)
1253         SET(targets ${targets} MEFISTO2D)
1254         FOREACH(target ${targets})
1255         IF(name STREQUAL ${target})
1256         SET(dir $ENV{F2CHOME})
1257         STRING(REPLACE "\\\\" "/" dir ${dir})
1258         SET(var ${var} -I${dir})
1259         SET(var ${var} -DF2C_BUILD)
1260         ENDIF(name STREQUAL ${target})
1261         ENDFOREACH(target ${targets})
1262         ENDIF(WINDOWS)
1263         ''')
1264         # --
1265         if self.module in ["geom", "med"]:
1266             newlines.append(r'''
1267             SET(var ${var} -I${CMAKE_CURRENT_SOURCE_DIR})
1268             SET(var ${var} -I${CMAKE_CURRENT_BINARY_DIR})
1269             ''')
1270             pass
1271         newlines.append(r'''
1272         SET(var ${var} ${AM_CPPFLAGS})
1273         SET(var ${var} ${AM_CXXFLAGS})
1274         ''')
1275         if self.module == "yacs":
1276             newlines.append(r'''
1277             SET(var ${var} -DYACS_PTHREAD)
1278             SET(var ${var} -DCMAKE_BUILD)
1279             SET(var ${var} -DSALOME_KERNEL)
1280             SET(var ${var} -DDSC_PORTS)
1281             SET(var ${var} -DOMNIORB)
1282             ''')
1283             pass
1284         newlines.append(r'''
1285         SET(var ${var} ${PLATFORM_CPPFLAGS})
1286         SET(var ${var} ${PTHREAD_CFLAGS})
1287         SET(var ${var} ${${amname}_CPPFLAGS})
1288         SET(var ${var} ${${amname}_CXXFLAGS})
1289         SET(var ${var} ${${amname}_CFLAGS})
1290         SET(vars)
1291         IF(WINDOWS)
1292         SET(vars ${vars} -include SALOMEconfig.h)
1293         SET(vars ${vars} -ftemplate-depth-32)
1294         SET(vars ${vars} -fPIC)
1295         ENDIF(WINDOWS)
1296         SET(flags)
1297         FOREACH(f ${var})
1298         FOREACH(v ${vars})
1299         IF(f STREQUAL v)
1300         SET(f)
1301         ENDIF(f STREQUAL v)
1302         ENDFOREACH(v ${vars})
1303         SET(flags "${flags} ${f}")
1304         ENDFOREACH(f ${var})
1305         SET_TARGET_PROPERTIES(${name} PROPERTIES COMPILE_FLAGS "${flags}")
1306         ''')
1307         return
1308     
1309     def addLibTarget(self, key, newlines):
1310         newlines.append(r'''
1311         FOREACH(amname ${%s})
1312         '''%(key))
1313         # --
1314         # Replace .la by _la ...
1315         # --
1316         newlines.append(r'''
1317         STRING(REPLACE .la _la amname ${amname})
1318         ''')
1319         # --
1320         # Remove the _la for the cmake name
1321         # --
1322         newlines.append(r'''
1323         STRING(LENGTH ${amname} len)
1324         MATH(EXPR newlen "${len}-3")
1325         STRING(SUBSTRING ${amname} 0 ${newlen} name)
1326         ''')
1327         # --
1328         # Does the target begins with lib ??
1329         # If yes, remove lib at beginning for cmake name
1330         # --
1331         newlines.append(r'''
1332         STRING(REGEX MATCH "^lib" BEGIN_WITH_lib ${name})
1333         IF(BEGIN_WITH_lib)
1334         STRING(LENGTH ${name} len)
1335         MATH(EXPR newlen "${len}-3")
1336         STRING(SUBSTRING ${name} 3 ${newlen} name)
1337         ENDIF(BEGIN_WITH_lib)
1338         ''')
1339         # --
1340         # Does the target is an idl library
1341         # --
1342         newlines.append(r'''
1343         STRING(REGEX MATCH "IDL" ISIDL ${name})
1344         ''')
1345         # --
1346         # Set the type of the library
1347         # --
1348         newlines.append(r'''
1349         IF(ISIDL)
1350         IF(WINDOWS)
1351         SET(type STATIC)
1352         ELSE(WINDOWS)
1353         SET(type SHARED)
1354         ENDIF(WINDOWS)
1355         ELSE(ISIDL)
1356         SET(type SHARED)
1357         ENDIF(ISIDL)
1358         ''')
1359         # --
1360         # Set sources for the library
1361         # --
1362         newlines.append(r'''
1363         SET(srcs)
1364         FOREACH(src ${${amname}_SOURCES} ${dist_${amname}_SOURCES})
1365         GET_FILENAME_COMPONENT(ext ${src} EXT)
1366         IF(ext STREQUAL .f)
1367         IF(src STREQUAL trte.f)
1368         SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${src})
1369         STRING(REPLACE ".f" ".c" src ${src})
1370         SET(src ${CMAKE_CURRENT_BINARY_DIR}/${src})
1371         SET(output ${src})
1372         ADD_CUSTOM_COMMAND(
1373         OUTPUT ${output}
1374         COMMAND f2c ${input}
1375         MAIN_DEPENDENCY ${input}
1376         )
1377         ELSE(src STREQUAL trte.f)
1378         SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${src})
1379         STRING(REPLACE ".f" ".o" src ${src})
1380         SET(src ${CMAKE_CURRENT_BINARY_DIR}/${src})
1381         SET(output ${src})
1382         IF(WINDOWS)
1383         SET(F77 g77)
1384         ELSE(WINDOWS)
1385         SET(F77 gfortran)
1386         ENDIF(WINDOWS)
1387         ADD_CUSTOM_COMMAND(
1388         OUTPUT ${output}
1389         COMMAND ${F77} -c -o ${output} ${input}
1390         MAIN_DEPENDENCY ${input}
1391         )
1392         ENDIF(src STREQUAL trte.f)
1393         ENDIF(ext STREQUAL .f)
1394         SET(srcs ${srcs} ${src})
1395         ENDFOREACH(src ${${amname}_SOURCES} ${dist_${amname}_SOURCES})
1396         ''')
1397         newlines.append(r'''
1398         SET(l ${nodist_${amname}_SOURCES})
1399         FOREACH(f ${l})
1400         SET(src ${CMAKE_CURRENT_BINARY_DIR}/${f})
1401         SET(srcs ${srcs} ${src})
1402         ENDFOREACH(f ${l})
1403         ''')
1404         newlines.append(r'''
1405         SET(build_srcs)
1406         SET(l ${nodist_${amname}_SOURCES} ${BUILT_SOURCES})
1407         FOREACH(f ${l})
1408         GET_FILENAME_COMPONENT(ext ${f} EXT)
1409         IF(ext STREQUAL .py)
1410         ELSE(ext STREQUAL .py)
1411         SET(build_srcs ${build_srcs} ${CMAKE_CURRENT_BINARY_DIR}/${f})
1412         ENDIF(ext STREQUAL .py)
1413         ENDFOREACH(f ${l})
1414         ''')
1415         # --
1416         # Add the library to cmake
1417         # --
1418         newlines.append(r'''
1419         ADD_LIBRARY(${name} ${type} ${srcs})
1420         ''')
1421         # --
1422         # The compilation flags
1423         # --
1424         self.setCompilationFlags(key, newlines)
1425         # --
1426         newlines.append(r'''
1427         SET_TARGET_PROPERTIES(${name} PROPERTIES VERSION ${VERSION_INFO} SOVERSION ${SOVERSION_INFO})
1428         ''')
1429         # --
1430         self.setLibAdd(key, newlines)
1431         # --
1432         if 1: # key != "noinst_LTLIBRARIES":
1433             if self.module == "medfile":
1434                 newlines.append(r'''
1435                 SET(DEST lib)
1436                 ''')
1437             else:
1438                 newlines.append(r'''
1439                 SET(DEST lib/salome)
1440                 ''')
1441                 pass
1442             newlines.append(r'''
1443             IF(BEGIN_WITH_lib)
1444             INSTALL(TARGETS ${name} DESTINATION ${DEST})
1445             ''')
1446             if self.module == "gui":
1447                 newlines.append(r'''
1448                 FOREACH(lib SalomePyQt)
1449                 IF(name STREQUAL lib)
1450                 IF(WINDOWS)
1451                 IF(CMAKE_BUILD_TYPE STREQUAL Release)
1452                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME ${name}.pyd)
1453                 ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
1454                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME ${name}_d.pyd)
1455                 ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
1456                 ELSE(WINDOWS)
1457                 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so DESTINATION ${DEST} RENAME ${name}.so)
1458                 ENDIF(WINDOWS)
1459                 ENDIF(name STREQUAL lib)
1460                 ENDFOREACH(lib SalomePyQt)
1461                 FOREACH(lib SalomePy)
1462                 IF(name STREQUAL lib)
1463                 IF(WINDOWS)
1464                 IF(CMAKE_BUILD_TYPE STREQUAL Release)
1465                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME lib${name}.pyd)
1466                 ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
1467                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME lib${name}_d.pyd)
1468                 ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
1469                 ENDIF(WINDOWS)
1470                 ENDIF(name STREQUAL lib)
1471                 ENDFOREACH(lib SalomePy)
1472                 ''')
1473                 pass
1474             if self.module == "geom":
1475                 newlines.append(r'''
1476                 IF(WINDOWS)
1477                 STRING(REGEX MATCH "Export" ISExport ${name})
1478                 IF(ISExport)
1479                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME lib${name}.dll)
1480                 ENDIF(ISExport)
1481                 STRING(REGEX MATCH "Import" ISImport ${name})
1482                 IF(ISImport)
1483                 INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.dll DESTINATION ${DEST} RENAME lib${name}.dll)
1484                 ENDIF(ISImport)
1485                 ENDIF(WINDOWS)
1486                 ''')
1487                 pass
1488             newlines.append(r'''
1489             ELSE(BEGIN_WITH_lib)
1490             ''')
1491             newlines.append(r'''
1492             IF(WINDOWS)
1493             INSTALL(TARGETS ${name} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome)
1494             IF(CMAKE_BUILD_TYPE STREQUAL Release)
1495             INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION}/site-packages/salome/${name}.dll DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.pyd)
1496             ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
1497             INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION}/site-packages/salome/${name}.dll DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}_d.pyd)
1498             ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
1499             ELSE(WINDOWS)
1500             GET_TARGET_PROPERTY(version ${name} VERSION)
1501             GET_TARGET_PROPERTY(soversion ${name} SOVERSION)
1502             INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.so.${version})
1503             INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.so.${soversion})
1504             INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${name}.so.${version} DESTINATION lib/python${PYTHON_VERSION}/site-packages/salome RENAME ${name}.so)
1505             ENDIF(WINDOWS)
1506             ''')
1507             newlines.append(r'''
1508             ENDIF(BEGIN_WITH_lib)
1509             ''')
1510             pass
1511         # --
1512         newlines.append(r'''
1513         ENDFOREACH(amname ${%s})
1514         '''%(key))
1515         # --
1516         return
1517     
1518     def addBinTarget(self, key, newlines):
1519         # --
1520         newlines.append(r'''
1521         FOREACH(amname ${bin_PROGRAMS} ${check_PROGRAMS})
1522         ''')
1523         # --
1524         newlines.append(r'''
1525         SET(name "${amname}_exe")
1526         SET(srcs ${${amname}_SOURCES} ${dist_${amname}_SOURCES})
1527         LIST(LENGTH srcs nb)
1528         IF(nb)
1529         ADD_EXECUTABLE(${name} ${srcs})
1530         ''')
1531         # --
1532         self.setCompilationFlags(key, newlines)
1533         # --
1534         self.setLibAdd(key, newlines)
1535         # --
1536         if self.module == "medfile":
1537             newlines.append(r'''
1538             SET(DEST bin)
1539             ''')
1540         else:
1541             newlines.append(r'''
1542             SET(DEST bin/salome)
1543             ''')
1544             pass
1545         # --
1546         if key == "bin_PROGRAMS":
1547             newlines.append(r'''
1548             IF(WINDOWS)
1549             INSTALL(TARGETS ${name} DESTINATION ${DEST})
1550             INSTALL(FILES ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.exe DESTINATION ${DEST} RENAME ${amname}.exe)
1551             INSTALL(CODE "FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${name}.exe)")
1552             ELSE(WINDOWS)
1553             SET(PERMS)
1554             SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE)
1555             SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE)
1556             SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE)
1557             INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name} DESTINATION ${DEST} PERMISSIONS ${PERMS} RENAME ${amname})
1558             ENDIF(WINDOWS)
1559             ''')
1560             pass
1561         # --
1562         newlines.append(r'''
1563         ENDIF(nb)
1564         ''')
1565         # --
1566         newlines.append(r'''
1567         ENDFOREACH(amname ${bin_PROGRAMS} ${check_PROGRAMS})
1568         ''')
1569         # --
1570         return
1571     
1572     def addInstallTarget(self, key, destination, newlines):
1573         newlines.append(r"FOREACH(f ${%s})"%(key))
1574         newlines.append(r'''
1575         SET(DEST %s)
1576         '''%(destination))
1577         newlines.append(r'''
1578         STRING(COMPARE EQUAL ${f} SALOMEconfig.h.in test_SALOMEconfig.h.in)
1579         IF(test_SALOMEconfig.h.in)
1580         INSTALL(FILES SALOMEconfig.ref.in DESTINATION ${DEST} RENAME SALOMEconfig.h.in)
1581         ELSE(test_SALOMEconfig.h.in)
1582         SET(dummy dummy-NOTFOUND)
1583         MARK_AS_ADVANCED(dummy)
1584         # FILE(REMOVE ${CMAKE_INSTALL_PREFIX}/${DEST}/${f})
1585         FIND_FILE(dummy ${f} PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH)
1586         IF(dummy)
1587         ''')
1588         if key in ['dist_salomescript_SCRIPTS']:
1589             newlines.append(r'''
1590             SET(PERMS)
1591             SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE)
1592             SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE)
1593             SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE)
1594             INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS})
1595             ''')
1596         else:
1597             newlines.append(r'''
1598             GET_FILENAME_COMPONENT(ext ${f} EXT)
1599             IF(ext STREQUAL .py)
1600             IF(DEST STREQUAL bin/salome)
1601             SET(PERMS)
1602             SET(PERMS ${PERMS} OWNER_READ OWNER_WRITE OWNER_EXECUTE)
1603             SET(PERMS ${PERMS} GROUP_READ GROUP_EXECUTE)
1604             SET(PERMS ${PERMS} WORLD_READ WORLD_EXECUTE)
1605             INSTALL(FILES ${f} DESTINATION ${DEST} PERMISSIONS ${PERMS})
1606             ELSE(DEST STREQUAL bin/salome)
1607             INSTALL(FILES ${f} DESTINATION ${DEST})
1608             ENDIF(DEST STREQUAL bin/salome)
1609             ELSE(ext STREQUAL .py)
1610             INSTALL(FILES ${f} DESTINATION ${DEST})
1611             ENDIF(ext STREQUAL .py)
1612             ''')
1613             pass
1614         newlines.append(r'''
1615         ELSE(dummy)
1616         GET_FILENAME_COMPONENT(ext ${f} EXT)
1617         IF(ext STREQUAL .qm)
1618         STRING(REGEX REPLACE .qm .ts input ${f})
1619         ''')
1620         if self.module in ["kernel", "gui"]:
1621             newlines.append(r'''
1622             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/resources/${input})
1623             ''')
1624         else:
1625             newlines.append(r'''
1626             SET(input ${CMAKE_CURRENT_SOURCE_DIR}/${input})
1627             ''')
1628             pass
1629         newlines.append(r'''
1630         SET(output ${CMAKE_CURRENT_BINARY_DIR}/${f})
1631         # ADD_CUSTOM_COMMAND(
1632         # OUTPUT ${output}
1633         # COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output}
1634         # MAIN_DEPENDENCY ${input}
1635         # )
1636         EXECUTE_PROCESS(COMMAND ${QT_LRELEASE_EXECUTABLE} ${input} -qm ${output})
1637         ENDIF(ext STREQUAL .qm)
1638         INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${f} DESTINATION ${DEST})
1639         ENDIF(dummy)
1640         ENDIF(test_SALOMEconfig.h.in)
1641         ''')
1642         newlines.append(r'''
1643         GET_FILENAME_COMPONENT(ext ${f} EXT)
1644         IF(ext STREQUAL .py)
1645         INSTALL(CODE "SET(PYTHON_FILE ${f})")
1646         INSTALL(CODE "SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})")
1647         INSTALL(CODE "SET(DEST ${DEST})")
1648         INSTALL(CODE "SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})")
1649         ''')
1650         if self.module == "kernel":
1651             newlines.append('''
1652             IF(f STREQUAL SALOME_ContainerPy.py)
1653             ELSE(f STREQUAL SALOME_ContainerPy.py)
1654             IF(f STREQUAL am2cmake.py)
1655             ELSE(f STREQUAL am2cmake.py)
1656             INSTALL(SCRIPT ${CMAKE_SOURCE_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake)
1657             ENDIF(f STREQUAL am2cmake.py)
1658             ENDIF(f STREQUAL SALOME_ContainerPy.py)
1659             ''')
1660         else:
1661             newlines.append('''
1662             STRING(REPLACE "\\\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR})
1663             INSTALL(SCRIPT ${KERNEL_ROOT_DIR}/salome_adm/cmake_files/install_and_compile_python_file.cmake)
1664             ''')
1665             pass
1666         newlines.append(r'''
1667         ENDIF(ext STREQUAL .py)
1668         ''') 
1669         newlines.append(r"ENDFOREACH(f ${%s})"%(key))
1670         return
1671     
1672     def writeListsFile(self):
1673         f = open(self.listsFile, "w")
1674         f.write(self.content)
1675         f.close()
1676         return
1677     
1678     pass
1679
1680 def convertAmFile(the_root, root, dirs, files, f, module):
1681     cmake = CMakeFile(the_root, root, dirs, files, f, module)
1682     cmake.writeListsFile()
1683     return
1684
1685 def usage(exit_status):
1686     from sys import exit
1687     from sys import argv
1688     print "Usage: %s --module"%(argv[0])
1689     exit(exit_status)
1690     return
1691
1692 if __name__ == "__main__":
1693     #
1694     from sys import argv
1695     if len(argv) != 2:
1696         usage(1)
1697         pass
1698     #
1699     module = argv[1]
1700     if module.find('--') != 0:
1701         usage(1)
1702         pass
1703     module = module[2:]
1704     if len(module) == 0:
1705         usage(1)
1706         pass
1707     #
1708     from os import getcwd
1709     the_root = getcwd()
1710     #
1711     from os import walk
1712     for root, dirs, files in walk(the_root):
1713         # --
1714         # E.A. : Remove 'CVS' in dirs
1715         # E.A. : It allows to not recurse in CVS dirs
1716         # E.A. : See os module python documentation
1717         # --
1718         try:
1719             dirs.remove('CVS')
1720         except ValueError:
1721             pass
1722         # --
1723         for f in files:
1724             if f == "Makefile.am":
1725                 convertAmFile(the_root, root, dirs, files, f, module)
1726                 pass
1727             pass
1728         pass
1729     #
1730     pass