2 # OO_SDK_HOME (e.g. /usr/lib64/openoffice.org/sdk)
5 # UNO_APPENDS(<output> {<suffix>} PATHS {<prefix>})
6 # Writes all combinations of <prefix>/<suffix> to <output>
7 MACRO (UNO_APPEND_PATHS output)
8 SET(UNO_APPEND_PATHS_SUFFIXES "")
9 SET(UNO_APPEND_PATHS_RESULTS "")
10 SET(UNO_APPEND_PATHS_STEP 0)
11 FOREACH (UNO_APPEND_PATHS_ARG ${ARGN})
12 IF (UNO_APPEND_PATHS_STEP)
13 # add to results this prefix with each suffix appended
14 FOREACH (UNO_APPEND_PATHS_SUFFIX ${UNO_APPEND_PATHS_SUFFIXES})
15 SET(UNO_APPEND_PATHS_RESULTS ${UNO_APPEND_PATHS_RESULTS} "${UNO_APPEND_PATHS_ARG}/${UNO_APPEND_PATHS_SUFFIX}")
16 ENDFOREACH (UNO_APPEND_PATHS_SUFFIX)
17 ELSEIF (UNO_APPEND_PATHS_ARG STREQUAL "PATHS")
18 # If we have reached paths, switch processing step
19 SET(UNO_APPEND_PATHS_STEP 1)
20 ELSE (UNO_APPEND_PATHS_STEP)
21 # Just suffixes, gather them together
22 SET(UNO_APPEND_PATHS_SUFFIXES ${UNO_APPEND_PATHS_SUFFIXES} ${UNO_APPEND_PATHS_ARG})
23 ENDIF (UNO_APPEND_PATHS_STEP)
24 ENDFOREACH (UNO_APPEND_PATHS_ARG)
25 SET(${output} ${UNO_APPEND_PATHS_RESULTS})
26 ENDMACRO (UNO_APPEND_PATHS)
29 SET(UNO_OO_HOME_LIBS "/usr/lib64" "/usr/lib" "/opt")
30 UNO_APPEND_PATHS(UNO_OO_HOMES "openoffice.org3" "openoffice.org" PATHS ${UNO_OO_HOME_LIBS})
31 FIND_PATH(UNO_OO_HOME "program/versionrc" PATHS ${UNO_OO_HOMES})
33 # Find OO SDK location
34 UNO_APPEND_PATHS(UNO_OO_SDK_HOMES "basis-link/sdk" "sdk" PATHS ${UNO_OO_HOME})
35 FIND_PATH(UNO_OO_SDK_HOME "include/sal/types.h" PATHS ${UNO_OO_SDK_HOMES})
37 SET(UNO_OO_SDK_BINS "${UNO_OO_SDK_HOME}/linux/bin" "${UNO_OO_HOME}/basis-link/ure-link/bin" "${UNO_OO_SDK_HOME}/bin")
38 SET(UNO_IDL_PATH "${UNO_OO_SDK_HOME}/idl")
39 SET(UNO_INCLUDES "${UNO_OO_SDK_HOME}/include")
40 SET(UNO_OO_PROGRAM "${UNO_OO_HOME}/program")
41 SET(UNO_OO_PROGRAMS "${UNO_OO_HOME}/basis-link/program" "${UNO_OO_HOME}/program")
43 # Find registry databases
45 # offapi (OO.org 3) has the OpenOffice.org API
46 FIND_FILE(UNO_OO_OFFAPI_RDB "offapi.rdb" PATHS ${UNO_OO_PROGRAMS})
48 SET(UNO_OO_RDBS ${UNO_OO_RDBS} ${UNO_OO_OFFAPI_RDB})
49 ENDIF(UNO_OO_OFFAPI_RDB)
50 # types has UNO types and (OO.org 2) OpenOffice.org API
51 FIND_FILE(UNO_OO_TYPES_RDB "types.rdb" PATHS ${UNO_OO_PROGRAMS} "${UNO_OO_HOME}/basis-link/ure-link/share/misc")
53 SET(UNO_OO_RDBS ${UNO_OO_RDBS} ${UNO_OO_TYPES_RDB})
54 ENDIF(UNO_OO_TYPES_RDB)
57 FIND_PROGRAM(UNO_IDLC "idlc" PATHS ${UNO_OO_SDK_BINS})
58 FIND_PROGRAM(UNO_REGMERGE "regmerge" PATHS ${UNO_OO_SDK_BINS})
59 FIND_PROGRAM(UNO_CPPUMAKER "cppumaker" PATHS ${UNO_OO_SDK_BINS})
60 FIND_PROGRAM(UNO_REGCOMP "regcomp" PATHS ${UNO_OO_SDK_BINS})
62 # OS dependent preprocessor definitions
63 IF (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
64 SET(UNO_CPPU_ENV gcc3)
66 ADD_DEFINITIONS(-DUNX -DGCC -DLINUX)
67 SET(UNO_TOOL_ENV env LD_LIBRARY_PATH=${UNO_OO_SDK_HOME}/linux/lib:${UNO_OO_HOME}/basis-link/ure-link/lib)
68 ELSE (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
69 MESSAGE("warning: unrecognised system ${CMAKE_SYSTEM_NAME} - you may need to add UNO preprocessor definitions to ${CMAKE_CURRENT_LIST_FILE}")
70 ENDIF (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
73 SET(UNO_LIB_PATHS ${UNO_OO_PROGRAMS} "${UNO_OO_HOME}/basis-link/ure-link/lib")
74 MACRO(FIND_UNO_LIB output name)
75 FIND_LIBRARY(${output} NAMES ${name} PATHS ${UNO_LIB_PATHS})
77 FIND_FILE(${output} NAMES lib${name}.so.3 PATHS ${UNO_LIB_PATHS})
79 ENDMACRO(FIND_UNO_LIB)
81 FIND_UNO_LIB(UNO_SAL_LIB uno_sal)
82 FIND_UNO_LIB(UNO_CPPU_LIB uno_cppu)
83 FIND_UNO_LIB(UNO_CPPUHELPER_LIB uno_cppuhelper${UNO_CPPU_ENV})
84 FIND_UNO_LIB(UNO_SALHELPER_LIB uno_salhelper${UNO_CPPU_ENV})
85 FIND_UNO_LIB(UNO_REG_LIB reg)
86 FIND_UNO_LIB(UNO_STORE_LIB store)
88 # We need these programs to continue
96 AND UNO_CPPUHELPER_LIB
105 ${UNO_CPPUHELPER_LIB}
111 ADD_DEFINITIONS(-DCPPU_ENV=${UNO_CPPU_ENV})
113 FIND_PATH(UNO_INCLUDE_DIR uno.h /usr/include/uno /usr/local/include/uno)
117 # UNO_ADD_TYPES(sourcevar {types} )
118 MACRO (UNO_ADD_TYPES sourcevar)
119 SET(UNO_COMPONENT_INC "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/uno_include")
120 SET(UNO_RDB "${CMAKE_CURRENT_BINARY_DIR}/types.rdb")
121 # Add include directory
122 INCLUDE_DIRECTORIES(${UNO_COMPONENT_INC})
124 # rdb -> [cppumaker] -> hpp
128 # prefix each type with -T
129 FOREACH(type ${ARGN})
130 SET(UNO_TYPELIST ${UNO_TYPELIST} -T${type})
131 STRING(REPLACE "." "/" UNO_HPPFILE "${type}")
132 SET(UNO_IDLFILE "${UNO_IDL_PATH}/${UNO_HPPFILE}.idl")
133 SET(UNO_URDFILE "${UNO_COMPONENT_INC}/${UNO_HPPFILE}.urd")
134 GET_FILENAME_COMPONENT(UNO_URDDIR "${UNO_COMPONENT_INC}/${UNO_HPPFILE}.urd" PATH)
135 SET(UNO_HPPFILE "${UNO_COMPONENT_INC}/${UNO_HPPFILE}.hpp")
136 SET(UNO_URDFILES ${UNO_URDFILES} ${UNO_URDFILE})
137 SET(UNO_HPPFILES ${UNO_HPPFILES} ${UNO_HPPFILE})
138 # idl file is compiled into urd file
140 # OUTPUT ${UNO_URDFILE}
141 # COMMAND ${UNO_TOOL_ENV} ${UNO_IDLC} -C -I${UNO_IDL_PATH} ${UNO_IDLFILE} -O${UNO_URDDIR}
142 # MAIN_DEPENDENCY ${UNO_IDLFILE}
146 # Combined into a single command because regcomp alters the rdb
148 OUTPUT ${UNO_RDB} ${UNO_HPPFILES}
149 COMMAND ${UNO_TOOL_ENV} ${UNO_REGMERGE} ${UNO_RDB} / ${UNO_OO_RDBS} #${UNO_URDFILES}
150 COMMAND ${UNO_TOOL_ENV} ${UNO_CPPUMAKER} -Gc -BUCR -O${UNO_COMPONENT_INC} ${UNO_TYPELIST} ${UNO_RDB}
151 COMMAND ${UNO_TOOL_ENV} ${UNO_REGCOMP} -register -r ${UNO_RDB} -c connector.uno.${UNO_SHLIB_EXT}
152 COMMAND ${UNO_TOOL_ENV} ${UNO_REGCOMP} -register -r ${UNO_RDB} -c remotebridge.uno.${UNO_SHLIB_EXT}
153 COMMAND ${UNO_TOOL_ENV} ${UNO_REGCOMP} -register -r ${UNO_RDB} -c bridgefac.uno.${UNO_SHLIB_EXT}
154 COMMAND ${UNO_TOOL_ENV} ${UNO_REGCOMP} -register -r ${UNO_RDB} -c uuresolver.uno.${UNO_SHLIB_EXT}
155 DEPENDS ${UNO_OO_RDBS}
158 # Make each source file depend on the header files
159 SET_SOURCE_FILES_PROPERTIES(${${sourcevar}} PROPERTIES OBJECT_DEPENDS "${UNO_HPPFILES}")
160 ENDMACRO (UNO_ADD_TYPES)
162 ENDIF (UNO_OO_HOME AND UNO_OO_SDK_HOME AND UNO_OO_TYPES_RDB
163 AND UNO_IDLC AND UNO_REGMERGE
164 AND UNO_REGCOMP AND UNO_CPPUMAKER
165 AND UNO_CPPUHELPER_LIB AND UNO_CPPU_LIB
166 AND UNO_SALHELPER_LIB AND UNO_SAL_LIB
170 IF (NOT UNO_FIND_QUIETLY)
171 MESSAGE(STATUS "Found UNO: ${UNO_OO_SDK_HOME}")
172 ENDIF (NOT UNO_FIND_QUIETLY)
174 IF (UNO_FIND_REQUIRED)
175 MESSAGE(FATAL_ERROR "Could not find UNO")
176 ENDIF (UNO_FIND_REQUIRED)