-#typelib support\r
-macro(ADD_TYPELIB TARGET)\r
- foreach(SOURCE ${ARGN})\r
- get_filename_component(FILE ${SOURCE} NAME_WE)\r
- set(OBJECT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}.tlb)\r
- add_custom_command(OUTPUT ${OBJECT}\r
- COMMAND midl /I ${REACTOS_SOURCE_DIR}/include/dxsdk /I . /I ${REACTOS_SOURCE_DIR}/include /I ${REACTOS_SOURCE_DIR}/include/psdk /win32 /tlb ${OBJECT} ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE})\r
- list(APPEND OBJECTS ${OBJECT})\r
+# Thanks MS for creating a stupid linker\r
+macro(add_importlib_target _exports_file)\r
+ get_filename_component(_name ${_exports_file} NAME_WE)\r
+ get_target_property(_suffix ${_name} SUFFIX)\r
+ if(${_suffix} STREQUAL "_suffix-NOTFOUND")\r
+ get_target_property(_type ${_name} TYPE)\r
+ if(${_type} MATCHES EXECUTABLE)\r
+ set(_suffix ".exe")\r
+ else()\r
+ set(_suffix ".dll")\r
+ endif()\r
+ endif()\r
+\r
+ # Generate the asm stub file and the export def file\r
+ add_custom_command(\r
+ OUTPUT ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_exp.def\r
+ COMMAND native-spec2def --ms --kill-at -r -n=${_name}${_suffix} -d=${CMAKE_BINARY_DIR}/importlibs/lib${_name}_exp.def -l=${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm ${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file}\r
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file})\r
+\r
+ # Assemble the stub file\r
+ add_custom_command(\r
+ OUTPUT ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.obj\r
+ COMMAND ${CMAKE_ASM_COMPILER} /nologo /Cp /Fo${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.obj /c /Ta ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm\r
+ DEPENDS "${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm")\r
+\r
+ # Add neccessary importlibs for redirections\r
+ set(_libraries "")\r
+ foreach(_lib ${ARGN})\r
+ list(APPEND _libraries "${CMAKE_BINARY_DIR}/importlibs/${_lib}.lib")\r
+ list(APPEND _dependencies ${_lib})\r
+ endforeach()\r
+\r
+ # Build the importlib\r
+ add_custom_command(\r
+ OUTPUT ${CMAKE_BINARY_DIR}/importlibs/lib${_name}.lib\r
+ COMMAND LINK /LIB /NOLOGO /MACHINE:X86 /DEF:${CMAKE_BINARY_DIR}/importlibs/lib${_name}_exp.def /OUT:${CMAKE_BINARY_DIR}/importlibs/lib${_name}.lib ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.obj ${_libraries}\r
+ DEPENDS ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.obj ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_exp.def)\r
+\r
+ # Add the importlib target\r
+ add_custom_target(\r
+ lib${_name}\r
+ DEPENDS ${CMAKE_BINARY_DIR}/importlibs/lib${_name}.lib)\r
+\r
+ add_dependencies(lib${_name} asm ${_dependencies})\r
+endmacro()\r
+\r
+macro(add_importlibs MODULE)\r
+ foreach(LIB ${ARGN})\r
+ target_link_libraries(${MODULE} ${CMAKE_BINARY_DIR}/importlibs/lib${LIB}.lib)\r
+ add_dependencies(${MODULE} lib${LIB})\r