summaryrefslogtreecommitdiff
path: root/qpid/cpp/bindings/CMakeLists.txt
blob: 3c55871ee61bf2b106e0f18ad0dacd46363b5bff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

# Work-around for bug in older versions of cmake where find_package(PythonLib)
# finds the static .a library before the the dynamic .so one on Unix.
# Force search for .so first (this is exactly what newer versions of cmake do.)
#
# NOTE: Must be a macro, not a function. find_package in a function sets
# the package found variables in the function scope, not the parent scope.
#
macro(find_python_libs)
  # Only do this on unix-like systems that use the .so library suffix.
  if(UNIX AND CMAKE_FIND_LIBRARY_SUFFIXES MATCHES "\\.so")
    set(SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) # Save the suffixes.
    # Look just for shared libraries.
    set(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
    find_package(PythonLibs)
    # Restore the suffixes
    set(CMAKE_FIND_LIBRARY_SUFFIXES ${SUFFIXES})
  endif()
  # If we are not on a Unix/.so platform or we didn't find the library with the .so search
  # then do a plain search
  if (NOT PYTHONLIBS_FOUND)
    find_package(PythonLibs)
  endif()
endmacro(find_python_libs)


find_package(SWIG)
if (SWIG_FOUND)

  include(UseSWIG)
  find_package(Ruby)
  find_python_libs()
  find_package(PerlLibs)

  if ((${CMAKE_MAJOR_VERSION} EQUAL 2) AND (${CMAKE_MINOR_VERSION} LESS 8))

    if (RUBY_INCLUDE_PATH)
        set(RUBY_FOUND "TRUE")
    else()
        set(RUBY_FOUND "FALSE")
    endif (RUBY_INCLUDE_PATH)

    if (PERL_FOUND)
        # taken from Cmake 2.8 FindPerlLibs.cmake
        execute_process(
        COMMAND
            ${PERL_EXECUTABLE} -V:installarchlib
            OUTPUT_VARIABLE PERL_ARCHLIB_OUTPUT_VARIABLE
            RESULT_VARIABLE PERL_ARCHLIB_RESULT_VARIABLE
        )
        if (NOT PERL_ARCHLIB_RESULT_VARIABLE)
            string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_ARCHLIB ${PERL_ARCHLIB_OUTPUT_VARIABLE})
            file(TO_CMAKE_PATH "${PERL_ARCHLIB}" PERL_ARCHLIB)
        endif ()

        IF ( PERL_INCLUDE_PATH MATCHES .*-NOTFOUND )
            EXECUTE_PROCESS ( COMMAND ${PERL_EXECUTABLE}
                              -MConfig -e "print \$Config{archlibexp}"
                              OUTPUT_VARIABLE PERL_OUTPUT
                              RESULT_VARIABLE PERL_RETURN_VALUE )
            IF ( NOT PERL_RETURN_VALUE )
                FIND_PATH ( PERL_INCLUDE_PATH perl.h ${PERL_OUTPUT}/CORE )
            ENDIF ( NOT PERL_RETURN_VALUE )
        ENDIF ( PERL_INCLUDE_PATH MATCHES .*-NOTFOUND )

        ## Try to fix failure in PERL_LIBRARY
        IF ( PERL_LIBRARY MATCHES .*-NOTFOUND )
            EXECUTE_PROCESS ( COMMAND ${PERL_EXECUTABLE}
                              -MConfig -e "print \$Config{libperl}"
                              OUTPUT_VARIABLE PERL_OUTPUT
                              RESULT_VARIABLE PERL_RETURN_VALUE )
            IF ( NOT PERL_RETURN_VALUE )
                FIND_LIBRARY ( PERL_LIBRARY NAMES ${PERL_OUTPUT}
                                            PATHS ${PERL_INCLUDE_PATH} )
            ENDIF ( NOT PERL_RETURN_VALUE )
        ENDIF ( PERL_LIBRARY MATCHES .*-NOTFOUND )

    endif (PERL_FOUND)
  endif ((${CMAKE_MAJOR_VERSION} EQUAL 2) AND (${CMAKE_MINOR_VERSION} LESS 8))

  set(CMAKE_SWIG_FLAGS "-w361,362,401,467,503")

  if (PYTHONLIBS_FOUND)
    option(BUILD_BINDING_PYTHON "Build Python bindings" ON)
  endif (PYTHONLIBS_FOUND)

  if (RUBY_FOUND)
    option(BUILD_BINDING_RUBY "Build Ruby bindings" ON)
  endif (RUBY_FOUND)

  if (PERLLIBS_FOUND)
    option(BUILD_BINDING_PERL "Build Perl bindings" ON)
  endif (PERLLIBS_FOUND)

  if (BUILD_BINDING_PYTHON)
      message(STATUS "Building Python bindings")
      execute_process(COMMAND ${PYTHON_EXECUTABLE}
                      -c "from distutils.sysconfig import get_python_lib; print get_python_lib(True, prefix='${CMAKE_INSTALL_PREFIX}')"
                      OUTPUT_VARIABLE PYTHON_SITEARCH_PACKAGES
                      OUTPUT_STRIP_TRAILING_WHITESPACE)

      add_subdirectory(qpid/python)
      add_subdirectory(qmf2/python)
  endif (BUILD_BINDING_PYTHON)

  if (BUILD_BINDING_RUBY)
      message(STATUS "Building Ruby bindings")
      execute_process(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG['prefix']"
                      OUTPUT_VARIABLE RUBY_PREFIX
                      OUTPUT_STRIP_TRAILING_WHITESPACE)
      string(REPLACE ${RUBY_PREFIX} ${CMAKE_INSTALL_PREFIX} RUBY_PFX_ARCH_DIR ${RUBY_SITEARCH_DIR})
#     string(REPLACE ${RUBY_PREFIX} ${CMAKE_INSTALL_PREFIX} RUBY_PFX_ARCH_DIR ${RUBY_ARCH_DIR})
      add_subdirectory(qpid/ruby)
      add_subdirectory(qmf2/ruby)
  endif (BUILD_BINDING_RUBY)

  if (BUILD_BINDING_PERL)
      message(STATUS "Building Perl bindings")
      execute_process(COMMAND ${PERL_EXECUTABLE} "-V::prefix:"
                      OUTPUT_VARIABLE QPERL_PREFIX
                      OUTPUT_STRIP_TRAILING_WHITESPACE)
      string(REGEX REPLACE "'(.*)'" "\\1" PERL_PREFIX ${QPERL_PREFIX})
      string(REPLACE ${PERL_PREFIX} ${CMAKE_INSTALL_PREFIX} PERL_PFX_ARCHLIB ${PERL_ARCHLIB})

      add_subdirectory(qpid/perl)
  endif (BUILD_BINDING_PERL)
endif (SWIG_FOUND)

if (MSVC)
    set (dotnet_binding_default ON)
else (MSVC)
    set (dotnet_binding_default OFF)
endif (MSVC)
option(BUILD_BINDING_DOTNET "Build DOTNET bindings" ${dotnet_binding_default})

if (BUILD_BINDING_DOTNET)
    message(STATUS "Building Dotnet bindings")
    add_subdirectory(qpid/dotnet)
endif (BUILD_BINDING_DOTNET)

add_subdirectory(qmf2/examples/cpp)