[CMAKE] Implement PCH builds with target_precompile_headers. CORE-16905
[reactos.git] / dll / win32 / msxml3 / CMakeLists.txt
index a9d6ab9..b11bdf3 100644 (file)
@@ -1,9 +1,7 @@
 
-remove_definitions(-D_WIN32_WINNT=0x502)
-add_definitions(-D_WIN32_WINNT=0x601)
-
 add_definitions(
     -D__WINESRC__
+    -D__ROS_LONG64__
     -D_WINE
     -DLIBXML_STATIC
     -DCOM_NO_WINDOWS_H)
@@ -12,10 +10,11 @@ if(MSVC)
     add_compile_flags("/FIwine/typeof.h /FImsvc.h")
 endif()
 
-include_directories(${REACTOS_SOURCE_DIR}/include/reactos/wine)
-
-spec2def(msxml3.dll msxml3.spec ADD_IMPORTLIB)
+include_directories(
+    ${REACTOS_SOURCE_DIR}/sdk/include/reactos/wine
+    ${REACTOS_SOURCE_DIR}/sdk/lib/3rdparty/libwin-iconv)
 
+spec2def(msxml3.dll msxml3.spec ADD_IMPORTLIB NO_PRIVATE_WARNINGS)
 add_typelib(msxml3_v1.idl)
 
 list(APPEND SOURCE
@@ -30,7 +29,6 @@ list(APPEND SOURCE
     domimpl.c
     element.c
     entityref.c
-    factory.c
     httprequest.c
     main.c
     mxnamespace.c
@@ -45,35 +43,40 @@ list(APPEND SOURCE
     selection.c
     stylesheet.c
     text.c
-    uuid.c
     xdr.c
     xmldoc.c
     xmlelem.c
     xmlparser.c
-    xmlview.c
-    xslpattern.tab.c
-    xslpattern.yy.c
-    ${CMAKE_CURRENT_BINARY_DIR}/msxml3_stubs.c
-    ${CMAKE_CURRENT_BINARY_DIR}/msxml3.def)
+    xmlview.c)
 
-add_library(msxml3 SHARED ${SOURCE} version.rc)
-
-if(NOT MSVC)
-    # FIXME: http://www.cmake.org/Bug/view.php?id=12998
-    #allow_warnings(msxml3)
-    set_source_files_properties(${SOURCE} PROPERTIES COMPILE_FLAGS "-Wno-error")
-endif()
+list(APPEND PCH_SKIP_SOURCE
+    factory.c
+    uuid.c
+    xslpattern.tab.c
+    xslpattern.yy.c)
 
-add_idl_headers(xmlparser_idlheader xmlparser.idl)
-add_dependencies(msxml3 xmlparser_idlheader)
+# xslpattern.tab.c/xslpattern.yy.c have been generated with relative file paths...
+set_source_files_properties(xslpattern.tab.c xslpattern.yy.c PROPERTIES COMPILE_FLAGS "-UREACTOS_SOURCE_DIR -DREACTOS_SOURCE_DIR=\"\\\".\\\"\"")
 
-set_module_type(msxml3 win32dll)
-set_source_files_properties(version.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/msxml3_v1.tlb)
-target_link_libraries(msxml3 libxml2 uuid wine wineldr)
+list(APPEND msxml3_rc_deps
+    ${CMAKE_CURRENT_SOURCE_DIR}/msxml3.manifest
+    ${CMAKE_CURRENT_SOURCE_DIR}/msxml3_v1.rgs
+    ${CMAKE_CURRENT_SOURCE_DIR}/xmlparser.rgs
+    ${CMAKE_CURRENT_BINARY_DIR}/msxml3_v1.tlb)
 
-add_importlibs(msxml3 urlmon wininet ws2_32 comctl32 shell32 shlwapi cabinet oleaut32 ole32 version user32 gdi32 advapi32 msvcrt kernel32 ntdll)
+set_source_files_properties(version.rc PROPERTIES OBJECT_DEPENDS "${msxml3_rc_deps}")
 
-# msxml3_v1.tlb needs stdole2.tlb
-add_dependencies(msxml3 stdole2)
+add_library(msxml3 MODULE
+    ${SOURCE}
+    ${PCH_SKIP_SOURCE}
+    version.rc
+    ${CMAKE_CURRENT_BINARY_DIR}/msxml3_stubs.c
+    ${CMAKE_CURRENT_BINARY_DIR}/msxml3.def)
 
+add_idl_headers(xmlparser_idlheader xmlparser.idl)
+set_module_type(msxml3 win32dll)
+target_link_libraries(msxml3 libxml2 iconv-static uuid wine zlib)
+add_importlibs(msxml3 urlmon ws2_32 shlwapi oleaut32 ole32 user32 msvcrt kernel32 ntdll)
+add_dependencies(msxml3 xmlparser_idlheader stdole2) # msxml3_v1.tlb needs stdole2.tlb
+add_pch(msxml3 precomp.h "${PCH_SKIP_SOURCE}")
 add_cd_file(TARGET msxml3 DESTINATION reactos/system32 FOR all)