3 if(ARCH STREQUAL "i386")
4 set(IDL_FLAGS -m32 --win32)
5 elseif(ARCH STREQUAL "amd64")
6 set(IDL_FLAGS -m64 --win64)
12 get_includes(INCLUDES)
15 if(${FILE} STREQUAL "std_ole_v1.idl")
16 set(IDL_FLAGS ${IDL_FLAGS} --oldtlb)
18 get_filename_component(NAME ${FILE} NAME_WE)
20 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.tlb
21 COMMAND native-widl ${INCLUDES} ${DEFINES} ${IDL_FLAGS} -t -o ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.tlb ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}
22 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} native-widl)
23 list(APPEND OBJECTS ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.tlb)
27 function(add_idl_headers TARGET)
28 get_includes(INCLUDES)
31 get_filename_component(NAME ${FILE} NAME_WE)
32 set(HEADER ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.h)
34 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.h
35 COMMAND native-widl ${INCLUDES} ${DEFINES} ${IDL_FLAGS} -h -o ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.h ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}
36 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} native-widl)
37 list(APPEND HEADERS ${HEADER})
39 add_custom_target(${TARGET} DEPENDS ${HEADERS})
42 function(add_rpcproxy_files)
43 get_includes(INCLUDES)
47 get_filename_component(NAME ${FILE} NAME_WE)
48 list(APPEND IDLS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE})
50 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.c ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.h
51 COMMAND native-widl ${INCLUDES} ${DEFINES} ${IDL_FLAGS} -p -o ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.c -h -H ${NAME}_p.h ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}
52 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} native-widl)
55 # Extra pass to generate dlldata
57 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c
58 COMMAND native-widl ${INCLUDES} ${DEFINES} ${IDL_FLAGS} --dlldata-only -o ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c ${IDLS}
59 DEPENDS ${IDLS} native-widl)
62 function(add_rpc_files __type)
63 get_includes(INCLUDES)
65 # Is it a client or server module?
66 if(__type STREQUAL "server")
67 set(__server_client -Oif -s -o)
69 elseif(__type STREQUAL "client")
70 set(__server_client -Oif -c -o)
73 message(FATAL_ERROR "Please pass either server or client as argument to add_rpc_files")
76 get_filename_component(__name ${FILE} NAME_WE)
77 set(__name ${CMAKE_CURRENT_BINARY_DIR}/${__name}${__suffix})
78 if(NOT IS_ABSOLUTE ${FILE})
79 set(FILE ${CMAKE_CURRENT_SOURCE_DIR}/${FILE})
82 OUTPUT ${__name}.c ${__name}.h
83 COMMAND native-widl ${INCLUDES} ${DEFINES} ${IDL_FLAGS} -h -H ${__name}.h ${__server_client} ${__name}.c ${FILE}
84 DEPENDS ${FILE} native-widl)
88 function(generate_idl_iids)
89 foreach(IDL_FILE ${ARGN})
90 get_filename_component(FILE ${IDL_FILE} NAME)
91 if(FILE STREQUAL "${IDL_FILE}")
92 set(IDL_FILE_FULL "${CMAKE_CURRENT_SOURCE_DIR}/${IDL_FILE}")
94 set(IDL_FILE_FULL ${IDL_FILE})
96 get_includes(INCLUDES)
98 get_filename_component(NAME ${IDL_FILE} NAME_WE)
100 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_i.c
101 COMMAND native-widl ${INCLUDES} ${DEFINES} ${IDL_FLAGS} -u -o ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_i.c ${IDL_FILE_FULL}
102 DEPENDS ${IDL_FILE_FULL} native-widl)
103 set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${NAME}_i.c PROPERTIES GENERATED TRUE)
107 function(add_iid_library TARGET)
108 foreach(IDL_FILE ${ARGN})
109 get_filename_component(NAME ${IDL_FILE} NAME_WE)
110 generate_idl_iids(${IDL_FILE})
111 list(APPEND IID_SOURCES ${NAME}_i.c)
113 add_library(${TARGET} ${IID_SOURCES})
114 add_dependencies(${TARGET} psdk)
115 set_target_properties(${TARGET} PROPERTIES EXCLUDE_FROM_ALL TRUE)
118 function(add_idl_reg_script IDL_FILE)
119 get_filename_component(FILE ${IDL_FILE} NAME)
120 if(FILE STREQUAL "${IDL_FILE}")
121 set(IDL_FILE_FULL "${CMAKE_CURRENT_SOURCE_DIR}/${IDL_FILE}")
123 set(IDL_FILE_FULL ${IDL_FILE})
125 get_includes(INCLUDES)
127 get_filename_component(NAME ${IDL_FILE} NAME_WE)
129 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_r.res
130 COMMAND native-widl ${INCLUDES} ${DEFINES} ${IDL_FLAGS} -r -o ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_r.res ${IDL_FILE_FULL}
131 DEPENDS ${IDL_FILE_FULL} native-widl)
132 set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${NAME}_r.res PROPERTIES
133 GENERATED TRUE EXTERNAL_OBJECT TRUE)