@@ -96,3 +96,116 @@ check_include_files(mscoree.h HAVE_MSCOREE_H)
9696set (HAVE_COM_DOTNET TRUE )
9797
9898configure_file (cmake/config.h.in config.h)
99+
100+ ################################################################################
101+ # Prepare tests
102+ ################################################################################
103+
104+ find_program (PHP_MIDL_EXECUTABLE midl)
105+ mark_as_advanced (PHP_MIDL_EXECUTABLE)
106+
107+ if (PHP_MIDL_EXECUTABLE)
108+ add_library (php_ext_com_dotnet_comtest MODULE)
109+
110+ target_sources (
111+ php_ext_com_dotnet_comtest
112+ PRIVATE
113+ tests/comtest/comtest.cpp
114+ tests/comtest/comtest.def
115+ ${CMAKE_CURRENT_BINARY_DIR} /tests/comtest/comtest_i.c
116+ )
117+
118+ target_include_directories (
119+ php_ext_com_dotnet_comtest
120+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR} /tests/comtest
121+ )
122+
123+ target_compile_options (php_ext_com_dotnet_comtest PRIVATE /nologo)
124+ target_link_libraries (php_ext_com_dotnet_comtest PRIVATE oleaut32)
125+
126+ add_dependencies (php_ext_com_dotnet php_ext_com_dotnet_comtest)
127+
128+ add_custom_command (
129+ OUTPUT
130+ tests/comtest/comtest.h
131+ tests/comtest/comtest_i.c
132+ tests/comtest/comtest.tlb
133+ COMMAND
134+ ${PHP_MIDL_EXECUTABLE}
135+ /nologo
136+ /h ${CMAKE_CURRENT_BINARY_DIR} /tests/comtest/comtest.h
137+ /iid ${CMAKE_CURRENT_BINARY_DIR} /tests/comtest/comtest_i.c
138+ /tlb ${CMAKE_CURRENT_BINARY_DIR} /tests/comtest/comtest.tlb
139+ ${CMAKE_CURRENT_SOURCE_DIR} /tests/comtest/comtest.idl
140+ COMMENT "[ext/com_dotnet] Generating comtest library sources"
141+ VERBATIM
142+ COMMAND_EXPAND_LISTS
143+ )
144+
145+ add_custom_target (
146+ php_ext_com_dotnet_register_comtest
147+ COMMENT "[ext/com_dotnet] Adding keys to Windows Registry for tests"
148+ COMMAND
149+ reg add
150+ "HKCU\\ SOFTWARE\\ Classes\\ TypeLib\\ {AE8685BE-3758-4BDA-91DB-1459EBA24747}"
151+ /f > NUL
152+ COMMAND
153+ reg add
154+ "HKCU\\ SOFTWARE\\ Classes\\ TypeLib\\ {AE8685BE-3758-4BDA-91DB-1459EBA24747}\\ 1.0"
155+ /d "PHP COM Test Library"
156+ /f > NUL
157+ COMMAND
158+ reg add
159+ "HKCU\\ SOFTWARE\\ Classes\\ TypeLib\\ {AE8685BE-3758-4BDA-91DB-1459EBA24747}\\ 1.0\\ 0"
160+ /f > NUL
161+ COMMAND
162+ reg add
163+ "HKCU\\ SOFTWARE\\ Classes\\ TypeLib\\ {AE8685BE-3758-4BDA-91DB-1459EBA24747}\\ 1.0\\ 0\\ win32"
164+ /d "${CMAKE_CURRENT_BINARY_DIR} /tests/comtest/comtest.tlb"
165+ /f > NUL
166+ COMMAND
167+ reg add
168+ "HKCU\\ SOFTWARE\\ Classes\\ TypeLib\\ {AE8685BE-3758-4BDA-91DB-1459EBA24747}\\ 1.0\\ 0\\ win64"
169+ /d "${CMAKE_CURRENT_BINARY_DIR} /tests/comtest/comtest.tlb"
170+ /f > NUL
171+ COMMAND
172+ reg add
173+ "HKCU\\ SOFTWARE\\ Classes\\ TypeLib\\ {AE8685BE-3758-4BDA-91DB-1459EBA24747}\\ 1.0\\ FLAGS"
174+ /d 0 /f > NUL
175+ COMMAND
176+ reg add
177+ "HKCU\\ SOFTWARE\\ Classes\\ TypeLib\\ {AE8685BE-3758-4BDA-91DB-1459EBA24747}\\ 1.0\\ HELPDIR"
178+ /d "${CMAKE_CURRENT_BINARY_DIR} /tests/comtest"
179+ /f > NUL
180+ COMMAND
181+ reg add
182+ "HKCU\\ SOFTWARE\\ Classes\\ CLSID\\ {B13FE324-D595-44C7-97D7-82CE20EDF878}"
183+ /d "PHP COM Test Document"
184+ /f > NUL
185+ COMMAND
186+ reg add
187+ "HKCU\\ SOFTWARE\\ Classes\\ CLSID\\ {B13FE324-D595-44C7-97D7-82CE20EDF878}\\ InprocServer32"
188+ /d "${CMAKE_CURRENT_BINARY_DIR} /tests/comtest/comtest.dll"
189+ /f > NUL
190+ COMMAND
191+ reg add
192+ "HKCU\\ SOFTWARE\\ Classes\\ PHPTest.Document"
193+ /d "PHP COM Test Document"
194+ /f > NUL
195+ COMMAND
196+ reg add
197+ "HKCU\\ SOFTWARE\\ Classes\\ PHPTest.Document\\ CLSID"
198+ /d "{B13FE324-D595-44C7-97D7-82CE20EDF878}"
199+ /f > NUL
200+ VERBATIM
201+ )
202+
203+ add_custom_target (
204+ php_ext_com_dotnet_unregister_comtest
205+ COMMENT "[ext/com_dotnet] Removing keys from Windows Registry for tests"
206+ COMMAND reg delete "HKCU\\ SOFTWARE\\ Classes\\ PHPTest.Document" /f > NUL
207+ COMMAND reg delete "HKCU\\ SOFTWARE\\ Classes\\ CLSID\\ {B13FE324-D595-44C7-97D7-82CE20EDF878}" /f > NUL
208+ COMMAND reg delete "HKCU\\ SOFTWARE\\ Classes\\ TypeLib\\ {AE8685BE-3758-4BDA-91DB-1459EBA24747}" /f > NUL
209+ VERBATIM
210+ )
211+ endif ()
0 commit comments