Salome HOME
acdb2ac35d7d7732ea2445cea9aa46a64ddd9e77
[modules/kernel.git] / salome_adm / cmake_files / FindOmniORB.cmake
1 # - Find OmniORB4 cmake module and Pyhon backends
2 #
3 # Sets the following variables:
4 # OMNIORB_FOUND        - TRUE if OmniORB4 installation has been found
5 # OMNIORB_INCLUDE_DIR  - OmniORB4 headers path
6 # OMNIORB_LIBRARIES    - OmniORB4 libraries 
7 # OMNIORB_VERSION      - OmniORB4 version
8 # OMNIORB_IDL_COMPILER - OmniORB4 idl compiler command (omniidl)
9 # OMNIORB_NAMESERVER   - OmniORB4 CORBA naming service (omniNames)
10 # OMNIORB_PYTHON_BACKEND
11 # and many other mainly used in UseOmniORB.cmake  
12 #
13 # Detection is made through calls to 
14 # find_library, find_program, find_path
15 # and can be guided by extending CMAKE_PREFIX_PATH. Given the CMake precedence
16 # rule this will take precedence over the standard system paths.
17 # See for example doc of find_library().  
18 #
19
20 ################################################################
21 # Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
22 #
23 # This library is free software; you can redistribute it and/or
24 # modify it under the terms of the GNU Lesser General Public
25 # License as published by the Free Software Foundation; either
26 # version 2.1 of the License.
27 #
28 # This library is distributed in the hope that it will be useful,
29 # but WITHOUT ANY WARRANTY; without even the implied warranty of
30 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
31 # Lesser General Public License for more details.
32 #
33 # You should have received a copy of the GNU Lesser General Public
34 # License along with this library; if not, write to the Free Software
35 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
36 #
37 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
38 #
39 ################################################################
40
41 # minimum OmniORB4 supported version
42 # 4.0.6 has known bug float/double marshalling using CORBA::Any
43 set(OMNIORB_MINIMUM_VERSION "4.1.2")
44
45 IF(WIN32)
46   # Guide the FIND_LIBRARY command towards the correct directory <...>/lib/x86_win32:
47   SET(CMAKE_LIBRARY_ARCHITECTURE x86_win32)
48 ENDIF()
49
50 ##############################################################################
51 # find headers
52 ##############################################################################
53 IF (WIN32)
54   FIND_PATH(OMNIORB_INCLUDE_DIR omniORB4/CORBA.h)
55 ELSE (WIN32)
56   FIND_PATH(OMNIORB_INCLUDE_DIR omniORB4/CORBA.h
57     PATHS "${OMNIORB_DIR}/include" "$ENV{OMNIORB_DIR}/include"
58     NO_DEFAULT_PATH)
59   FIND_PATH(OMNIORB_INCLUDE_DIR omniORB4/CORBA.h)
60 ENDIF()
61
62 ##############################################################################
63 # find libraries
64 ##############################################################################
65 IF (WIN32)
66   FIND_LIBRARY(OMNIORB_LIBRARY_omniORB4 
67     NAMES ${CMAKE_STATIC_LIBRARY_PREFIX}omniORB4${CMAKE_STATIC_LIBRARY_SUFFIX})
68   FIND_LIBRARY( OMNIORB_LIBRARY_omnithread
69     NAMES ${CMAKE_STATIC_LIBRARY_PREFIX}omnithread${CMAKE_STATIC_LIBRARY_SUFFIX})
70   FIND_LIBRARY( OMNIORB_LIBRARY_omniDynamic4
71     NAMES ${CMAKE_STATIC_LIBRARY_PREFIX}omniDynamic4${CMAKE_STATIC_LIBRARY_SUFFIX})
72 ELSE (WIN32)
73   FIND_LIBRARY(OMNIORB_LIBRARY_omniORB4 NAMES omniORB4
74     PATHS "${OMNIORB_DIR}/lib${LIB_SUFFIX}" "$ENV{OMNIORB_DIR}/lib${LIB_SUFFIX}"
75     NO_DEFAULT_PATH)
76   FIND_LIBRARY(OMNIORB_LIBRARY_omniORB4 NAMES omnithread)
77
78   #the rest libraries must be at the same PATH as omniORB4
79   GET_FILENAME_COMPONENT(OMNIORB_LIBRARY_PATH ${OMNIORB_LIBRARY_omniORB4} PATH)
80   FIND_LIBRARY(OMNIORB_LIBRARY_omnithread NAMES omnithread
81     PATHS "${OMNIORB_LIBRARY_PATH}" NO_DEFAULT_PATH)
82   FIND_LIBRARY(OMNIORB_LIBRARY_omniDynamic4 NAMES omniDynamic4
83     PATHS "${OMNIORB_LIBRARY_PATH}" NO_DEFAULT_PATH)
84 ENDIF (WIN32)   
85
86 # Optional libraries
87
88 IF (WIN32)
89   FIND_LIBRARY( OMNIORB_LIBRARY_COS4
90     NAMES ${CMAKE_STATIC_LIBRARY_PREFIX}COS4${CMAKE_STATIC_LIBRARY_SUFFIX})
91   FIND_LIBRARY( OMNIORB_LIBRARY_COSDynamic4
92     NAMES ${CMAKE_STATIC_LIBRARY_PREFIX}COSDynamic4${CMAKE_STATIC_LIBRARY_SUFFIX}) 
93 ELSE (WIN32)
94   FIND_LIBRARY(OMNIORB_LIBRARY_COS4 NAMES COS4
95     PATHS "${OMNIORB_LIBRARY_PATH}" NO_DEFAULT_PATH)
96   FIND_LIBRARY(OMNIORB_LIBRARY_COSDynamic4 NAMES COSDynamic4
97     PATHS "${OMNIORB_LIBRARY_PATH}" NO_DEFAULT_PATH)
98 ENDIF (WIN32)
99
100 ##############################################################################
101 # find command line tools
102 ##############################################################################
103 IF (WIN32)
104   FIND_PROGRAM( OMNIORB_IDL_COMPILER
105     NAMES omniidl PATHS bin/x86_win32
106     DOC "What is the path where omniidl (the idl compiler) can be found")
107   FIND_PROGRAM( OMNIORB_OMNINAMES_COMMAND
108     NAMES omniNames PATHS bin/x86_win32 
109   DOC "What is the path where omniNames (the ORB server) can be found")
110 ELSE(WIN32)
111   FIND_PROGRAM(OMNIORB_IDL_COMPILER NAMES omniidl
112     PATHS "${OMNIORB_DIR}/bin" "$ENV{OMNIORB_DIR}/bin"
113     NO_DEFAULT_PATH)
114   FIND_PROGRAM(OMNIORB_IDL_COMPILER NAMES omniidl)
115   FIND_PROGRAM(OMNIORB_NAMESERVER NAMES omniNames
116     PATHS "${OMNIORB_DIR}/bin" "$ENV{OMNIORB_DIR}/bin"
117     NO_DEFAULT_PATH)
118   FIND_PROGRAM(OMNIORB_NAMESERVER NAMES omniNames)
119 ENDIF (WIN32)
120
121 ##############################################################################
122 # find python back-end
123 ##############################################################################
124
125 SET(_py_version "${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}")
126 SET(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH})
127 SET(_doc "Path to python-backend directory (omniidl_be) including python.py file")
128 IF(WIN32)
129   FIND_PATH(OMNIORB_PYTHON_BACKEND
130      NAMES python.py PATHS "/lib/python/omniidl_be" DOC ${_doc}) 
131 ELSE()
132   FIND_PATH(OMNIORB_PYTHON_BACKEND
133      NAMES __init__.py
134      PATHS
135      "${OMNIORB_DIR}/lib/python${_py_version}/site-packages/omniidl_be" 
136      "$ENV{OMNIORB_DIR}/lib/python${_py_version}/site-packages/omniidl_be" 
137      "/usr/lib/omniidl/omniidl_be" 
138      DOC ${_doc})
139 ENDIF()
140
141 ##############################################################################
142 # Cook our stuff
143 ##############################################################################
144
145 MARK_AS_ADVANCED(OMNIORB_DIR OMNIORB_INCLUDE_DIR)
146 MARK_AS_ADVANCED(OMNIORB_LIBRARY_omniORB4 OMNIORB_LIBRARY_omnithread OMNIORB_LIBRARY_omniDynamic4)
147 MARK_AS_ADVANCED(OMNIORB_IDL_COMPILER OMNIORB_NAMESERVER OMNIORB_VERSION)
148 MARK_AS_ADVANCED(OMNIORB_LIBRARY_COS4 OMNIORB_LIBRARY_COSDynamic4 OMNIORB_PYTHON_BACKEND)
149
150 SET(OMNIORB_LIBRARIES
151     ${OMNIORB_LIBRARY_omniORB4}
152     ${OMNIORB_LIBRARY_omnithread}
153     ${OMNIORB_LIBRARY_omniDynamic4})
154
155 IF(OMNIORB_LIBRARY_COS4)
156     LIST(APPEND OMNIORB_LIBRARIES ${OMNIORB_LIBRARY_COS4})
157 ENDIF()
158 IF(OMNIORB_LIBRARY_COSDynamic4)
159     LIST(APPEND OMNIORB_LIBRARIES ${OMNIORB_LIBRARY_COSDynamic4})
160 ENDIF()
161
162 # Optionaly, extract the the version number from the acconfig.h file:
163 # The version check is done at the very bottom of this file.
164 IF( EXISTS ${OMNIORB_INCLUDE_DIR}/omniORB4/acconfig.h )
165     FILE( READ ${OMNIORB_INCLUDE_DIR}/omniORB4/acconfig.h OMNIORB_ACCONFIG_H )
166     STRING( REGEX MATCH "#define[\t ]+PACKAGE_VERSION[\t ]+\"([0-9]+.[0-9]+.[0-9]+)\"" OMNIORB_ACCONFIG_H "${OMNIORB_ACCONFIG_H}" )
167     STRING( REGEX REPLACE ".*\"([0-9]+.[0-9]+.[0-9]+)\".*" "\\1" OMNIORB_VERSION "${OMNIORB_ACCONFIG_H}" )
168 ELSE()
169     SET( OMNIORB_VERSION "NOT-FOUND" )
170 ENDIF( EXISTS ${OMNIORB_INCLUDE_DIR}/omniORB4/acconfig.h )
171   
172 SET(OMNIORB_IDLCXXFLAGS -Wba -nf)
173 SET(OMNIORB_IDLPYFLAGS -bpython)
174 IF (OMNIORB_PYTHON_BACKEND) 
175   SET(OMNIORB_IDLPYFLAGS "-p ${OMNIORB_PYTHON_BACKEND} ${OMNIORB_IDLPYFLAGS}")
176 ENDIF()
177 SET(IDLCXXFLAGS ${OMNIORB_IDLCXXFLAGS})
178 SET(IDLPYFLAGS ${OMNIORB_IDLPYFLAGS})
179 SET(IDL_CLN_H .hh)
180 SET(IDL_SRV_H .hh)
181 SET(OMNIORB_DEFINITIONS "-D__x86__ -DCOMP_CORBA_DOUBLE -DCOMP_CORBA_LONG")
182 IF(WIN32)
183   SET(OMNIORB_DEFINITIONS "${OMNIORB_DEFINITIONS} -D__WIN32__")
184 ENDIF()
185 IF(APPLE)
186   SET(OMNIORB_DEFINITIONS "${OMNIORB_DEFINITIONS} -D__macos__")#for omnithread.h to be checked...
187 ENDIF()
188
189 # Handle standard arguments:
190 INCLUDE(FindPackageHandleStandardArgs)
191 IF(OMNIORB_VERSION)
192   FIND_PACKAGE_HANDLE_STANDARD_ARGS(OmniORB  
193         REQUIRED_VARS OMNIORB_INCLUDE_DIR OMNIORB_LIBRARY_omniORB4 OMNIORB_LIBRARY_omnithread 
194                       OMNIORB_LIBRARY_omniDynamic4 OMNIORB_IDL_COMPILER OMNIORB_PYTHON_BACKEND
195         VERSION_VAR OMNIORB_VERSION )
196 ELSE()
197   FIND_PACKAGE_HANDLE_STANDARD_ARGS(OmniORB  
198         REQUIRED_VARS OMNIORB_INCLUDE_DIR OMNIORB_LIBRARY_omniORB4 OMNIORB_LIBRARY_omnithread 
199                       OMNIORB_LIBRARY_omniDynamic4 OMNIORB_IDL_COMPILER OMNIORB_PYTHON_BACKEND)
200 ENDIF()