VirtualBox

source: vbox/trunk/src/VBox/Main/webservice/Makefile.kmk@ 69773

Last change on this file since 69773 was 69773, checked in by vboxsync, 7 years ago

vboxsoap: Increased the number of file we split soapC.cpp up into in hope that it will reduce the memory pressure during compilation. Also, moved stdsoap2.cpp up to the top of the source list, since it takes forever to compile.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 37.0 KB
Line 
1# $Id: Makefile.kmk 69773 2017-11-20 12:36:17Z vboxsync $
2## @file
3# Sub-Makefile for the VBox web service.
4#
5# Warning! This is a seriously complicated makefile!
6#
7
8#
9# Copyright (C) 2007-2017 Oracle Corporation
10#
11# This file is part of VirtualBox Open Source Edition (OSE), as
12# available from http://www.virtualbox.org. This file is free software;
13# you can redistribute it and/or modify it under the terms of the GNU
14# General Public License (GPL) as published by the Free Software
15# Foundation, in version 2 as it comes in the "COPYING" file of the
16# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18#
19
20# Define VBOX_GSOAP_INSTALLED to something if you have gSOAP's
21# "wsdl2h" and "soapcpp2" executables on your PATH somewhere.
22
23#
24# Here's an overview how all this works. It's complicated. Essentially,
25# lots of files get generated automatically from our XML XIDL file that
26# describes the VirtualBox API (../idl/VirtualBox.xidl); as a result,
27# no manual coding is necessary when the API changes. All generated
28# web service code gets adjusted automatically.
29#
30# In more detail:
31#
32# 1) We use xsltproc and websrv-wsdl.xsl to generate a WSDL file from
33# our XML IDL file. WSDL (Web Service Description language) is an XML
34# industry standard that publicly describes a web service.
35# So, the WSDL generated here describes the VirtualBox web
36# service to third-party clients; for example, one can feed it to
37# Java or Perl or some other toolkit that understands WSDL and thus
38# easily write a short script that connects to the web service properly.
39# This WSDL file ends up in $(VBOXWEB_OUT_DIR)/vboxweb.wsdl.
40#
41# 2) We use xsltproc and websrv-wsdl2gsoapH.xsl to generate a so-called
42# "gSoap header file": $(VBOXWEB_OUT_DIR)/gsoapH_from_xslt.h from
43# the WSDL previously generated.
44# This file looks like a C header file, but really isn't meant
45# to be included by a C compiler. Instead, it just happens to be the
46# format that gSOAP uses to specify SOAP interfaces instead of WSDL.
47# (The reason for this appears to be that gSOAP predates WSDL and
48# thus needed some format to describe the syntax of a web service.)
49#
50# Note that gSOAP now also comes with its own WSDL-to-gsoap.h converter,
51# but the readme mentions some funny license restrictions, so instead we
52# have our own converter in XSLT.
53#
54# 3) We then feed that pseudo-header file to gSOAP's soapcpp2 compiler,
55# which generates a ton of files in $(VBOXWEB_OUT_DIR), most importantly:
56#
57# SOAP_CLIENT_H = $(VBOXWEB_OUT_DIR)/soapStub.h (header file for webservice clients)
58# SOAP_SERVER_H = $(VBOXWEB_OUT_DIR)/soapH.h (header file for webservice servers)
59#
60# These are "real" header files that one can use to program a) a webservice client
61# and b) a webservice server. Of course to build b) one will have to write method
62# implementations with useful code that does something. This is where more
63# code generation via XSLT comes in:
64#
65# 4) We use xsltproc to generate tons of C++ code directly from the XIDL that
66# maps each SOAP method to our COM methods. This large C++ file is
67# $(VBOXWEB_OUT_DIR)/methodmaps.cpp. The actual webservice executable (vboxwebsrv,
68# which acts as an HTTP server) is composed of this file, plus hard-coded
69# method implementations in vboxweb.cpp, plus gSOAP library code for the HTTP
70# server.
71#
72
73SUB_DEPTH = ../../../..
74include $(KBUILD_PATH)/subheader.kmk
75
76#
77# Find the gSOAP toolkit.
78#
79# Note! We're not using the gSOAP toolkit correctly. The main issue is that
80# compiling soapcpp2.cpp instead of using the library. So, in order
81# to make this work with a locally installed gSOAP toolkit there are
82# some hoops to jump thru to say the least... Shipping soapcpp2.cpp/h
83# is out of the question without also including the two soap tools.
84#
85# Some observations on distros for OSE / configure:
86# The proposed gentoo ebuild screws up several things in the install phase
87# and thus fails to ship stdsoap2.cpp and relatives.
88#
89# debian (2.7.9l-0.2) stuffs stdsoap2.cpp and a handful of the import files
90# into /usr/include/gsoap.
91#
92# fedora (2.7.12-fc10.x86_64) uses the default install layout and does not
93# ship stdsoap2.cpp and friends.
94#
95ifeq ($(VBOX_GSOAP_INSTALLED),)
96 VBOX_GSOAP_INSTALLED = 1
97 VBOX_PATH_GSOAP := $(lastword $(sort $(wildcard $(KBUILD_DEVTOOLS)/common/gsoap/*)))
98 ifeq ($(VBOX_PATH_GSOAP),)
99 VBOX_PATH_GSOAP := $(lastword $(sort $(wildcard $(KBUILD_DEVTOOLS_HST)/gsoap/*)))
100 endif
101 if "$(VBOX_PATH_GSOAP)" == "" && defined(KBUILD_DEVTOOLS_HST)
102 VBOX_PATH_GSOAP := $(lastword $(sort $(wildcard $(KBUILD_DEVTOOLS_HST_ALT)/gsoap/*)))
103 endif
104 ifeq ($(VBOX_PATH_GSOAP),)
105 $(warning VBOX_PATH_GSOAP not found...)
106 VBOX_GSOAP_INSTALLED =
107 endif
108else
109 VBOX_PATH_GSOAP := $(VBOX_PATH_GSOAP)
110endif
111VBOX_PATH_GSOAP_BIN := $(strip $(VBOX_PATH_GSOAP_BIN))
112if "$(VBOX_PATH_GSOAP_BIN)" == ""
113 VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP)/bin
114 if "$(KBUILD_HOST)" == "darwin"
115 VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP_BIN)/macosx
116 else if "$(KBUILD_HOST)" == "win"
117 VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP_BIN)/win32
118 else if "$(KBUILD_HOST)" == "linux"
119 VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP_BIN)/linux386
120 else if "$(KBUILD_HOST)" == "solaris"
121 if $(VBOX_SOLARIS_11_VERSION) >= 164
122 VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP_BIN)/solaris11.x86
123 else
124 VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP_BIN)/solaris.x86
125 endif
126 else
127 VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP_BIN)/$(KBUILD_HOST).x86
128 endif
129 if !exists($(VBOX_PATH_GSOAP_BIN))
130 VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP)/bin
131 endif
132endif
133VBOX_SOAPCPP2 := $(VBOX_PATH_GSOAP_BIN)/soapcpp2$(HOSTSUFF_EXE)
134VBOX_WSDL2H := $(VBOX_PATH_GSOAP_BIN)/wsdl2h$(HOSTSUFF_EXE)
135VBOX_STUBMAKER = $(firstword $(which stubmaker stubmaker.pl) stubmaker_not_found)
136# Keep in mind that Python ZSI only exists for Python 2.x, so this hardcodes
137# some things. If you want to build using Python 3.x only you need to disable
138# the creation of the Python webservice bindings anyway.
139if "$(KBUILD_HOST)" != "win"
140VBOX_WSDL2PY = $(firstword $(which wsdl2py) wsdl2py_not_found)
141else
142VBOX_WSDL2PY = $(firstword $(wildcard C:/Python27/Scripts/wsdl2py.exe) wsdl2py_not_found)
143endif
144
145VBOX_PATH_GSOAP_IMPORT := $(strip $(if $(VBOX_PATH_GSOAP_IMPORT),$(VBOX_PATH_GSOAP_IMPORT),$(VBOX_PATH_GSOAP)/import))
146VBOX_GSOAP_INCS := $(strip $(if $(VBOX_GSOAP_INCS),$(VBOX_GSOAP_INCS),$(VBOX_PATH_GSOAP) $(VBOX_PATH_GSOAP_IMPORT) ))
147# note: $(if $(defined FOO)) does not work here!
148VBOX_GSOAP_CXX_SOURCES := $(strip $(if-expr "$(origin VBOX_GSOAP_CXX_SOURCES)" != "undefined",$(VBOX_GSOAP_CXX_SOURCES),$(VBOX_PATH_GSOAP)/stdsoap2.cpp))
149VBOX_GSOAP_CXX_LIBS := $(strip $(if-expr "$(origin VBOX_GSOAP_CXX_LIBS)" != "undefined",$(VBOX_GSOAP_CXX_LIBS),))
150
151
152#
153# Globals
154#
155VBOXWEB_OUT_DIR := $(PATH_TARGET)/webservice
156BLDDIRS += $(VBOXWEB_OUT_DIR)
157
158# The webservice location
159VBOX_PATH_WEBSERVICE := $(PATH_SUB_CURRENT)
160
161# The IDL subdirectory (contains some XSLT files)
162VBOX_PATH_IDL := $(abspath $(PATH_SUB_CURRENT)/../idl)
163
164# If this is set, all webservice files are considered out-of-date every time
165# this makefile is touched. Otherwise, set this to empty.
166RECOMPILE_ON_MAKEFILE_CURRENT := $(MAKEFILE_CURRENT)
167
168PATH_TARGET_SOAPDEMOXML := $(VBOXWEB_OUT_DIR)/demo_soapxml
169PATH_TARGET_SOAPDEMOHEADERS := $(VBOXWEB_OUT_DIR)/demo_headers
170PATH_TARGET_SOAPDEMONSMAPS := $(VBOXWEB_OUT_DIR)/demo_namespacemaps
171PATH_TARGET_WEBTEST := $(VBOXWEB_OUT_DIR)/webtest
172
173# the original XIDL file (has to include documentation as we need it):
174VBOXWEB_IDL_SRC_ORIG := $(VBOX_XIDL_FILE_SRC)
175# the original XIDL file without documentation
176VBOXWEB_IDL_SRC_STRIPPED := $(VBOX_XIDL_FILE)
177# platform-specific XIDL file generated from $(VBOXWEB_IDL_SRC_STRIPPED):
178VBOXWEB_IDL_SRC := $(VBOXWEB_OUT_DIR)/VirtualBox.xidl
179
180VBOXWEB_WSDL = $(VBOXWEB_OUT_DIR)/vboxweb.wsdl
181VBOXWEBSERVICE_WSDL = $(VBOXWEB_OUT_DIR)/vboxwebService.wsdl
182
183VBOXWEB_TYPEMAP := $(VBOXWEB_OUT_DIR)/typemap.dat
184
185VBOXWEB_GSOAPH_FROM_XSLT := $(VBOXWEB_OUT_DIR)/gsoapH_from_xslt.h
186ifdef VBOX_GSOAP_INSTALLED
187 VBOXWEB_GSOAPH_FROM_GSOAP := $(VBOXWEB_OUT_DIR)/gsoapH_from_gsoap.h
188else
189 VBOXWEB_GSOAPH_FROM_GSOAP :=
190endif
191VBOXWEB_SOAP_CLIENT_H := $(VBOXWEB_OUT_DIR)/soapStub.h
192VBOXWEB_SOAP_SERVER_H := $(VBOXWEB_OUT_DIR)/soapH.h
193
194
195ifdef VBOX_GSOAP_VERBOSE
196 VBOXWEB_XSLTPROC_VERBOSE = --stringparam G_argDebug '1'
197 VBOXWEB_WSDL_VERBOSE = -v
198else
199 VBOXWEB_SOAPCPP2_SKIP_FILES = -x
200endif
201
202
203## @todo VBOXWEB_GSOAPH_FROM_XSLT should probably be a indirect dep of something.
204VBOXWEB_OTHERS += \
205 $(VBOXWEB_GSOAPH_FROM_XSLT)
206
207
208# disable -fvisibility=hidden as the SOAP stuff does not properly set the visibility attributes
209TEMPLATE_VBOXWEBR3EXE = Webservices without -fvisibility
210TEMPLATE_VBOXWEBR3EXE_EXTENDS = VBOXR3EXE
211TEMPLATE_VBOXWEBR3EXE_DEFS.win += WIN32_LEAN_AND_MEAN $(TEMPLATE_VBOXR3EXE_DEFS.win) # Makes the redefinition warnings go away.
212TEMPLATE_VBOXWEBR3EXE_CXXFLAGS = $(filter-out $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden),\
213 $(TEMPLATE_VBOXR3EXE_CXXFLAGS))
214
215ifdef VBOX_GSOAP_INSTALLED
216 ifndef VBOX_ONLY_SDK
217 #
218 # vboxsoap - Library used by both the programs (save build time).
219 #
220 LIBRARIES += vboxsoap
221 vboxsoap_TEMPLATE = VBOXWEBR3EXE
222 ifeq ($(KBUILD_TARGET),win)
223 vboxsoap_USES = vccprecomp
224 vboxsoap_PCH_HDR := $(VBOXWEB_SOAP_SERVER_H)
225 endif
226 vboxsoap_CXXFLAGS += $(VBOX_C_CXX_FLAGS_NO_UNUSED_PARAMETERS)
227 vboxsoap_CXXFLAGS.win += -bigobj
228 vboxsoap_CXXFLAGS.win += -wd4702 # soapc-4.cpp(16) : warning C4702: unreachable code
229 ifn1of ($(KBUILD_TARGET), win)
230 vboxsoap_CXXFLAGS += -Wno-shadow -Wno-parentheses $(VBOX_GCC_Wno-literal-suffix)
231 endif
232 vboxsoap_INCS := \
233 $(VBOX_GSOAP_INCS) \
234 $(VBOXWEB_OUT_DIR) \
235 $(PATH_SUB_CURRENT)
236 ifdef VBOX_WITH_WEBSERVICES_SSL
237 vboxsoap_DEFS += WITH_OPENSSL
238 vboxsoap_SDKS += VBOX_OPENSSL2
239 endif
240 ifdef VBOX_WITHOUT_SPLIT_SOAPC
241 vboxsoap_SOURCES = \
242 $(VBOXWEB_OUT_DIR)/soapC.cpp
243 else
244 BLDPROGS += split-soapC
245 split-soapC_TEMPLATE = VBoxBldProg
246 split-soapC_SOURCES = split-soapC.cpp
247
248 vboxsoap_SOURCES = \
249 $(VBOXWEB_OUT_DIR)/soapC-1.cpp \
250 $(VBOXWEB_OUT_DIR)/soapC-2.cpp \
251 $(VBOXWEB_OUT_DIR)/soapC-3.cpp \
252 $(VBOXWEB_OUT_DIR)/soapC-4.cpp \
253 $(VBOXWEB_OUT_DIR)/soapC-5.cpp \
254 $(VBOXWEB_OUT_DIR)/soapC-6.cpp \
255 $(VBOXWEB_OUT_DIR)/soapC-7.cpp \
256 $(VBOXWEB_OUT_DIR)/soapC-8.cpp \
257 $(VBOXWEB_OUT_DIR)/soapC-9.cpp \
258 $(VBOXWEB_OUT_DIR)/soapC-10.cpp \
259 $(VBOXWEB_OUT_DIR)/soapC-11.cpp \
260 $(VBOXWEB_OUT_DIR)/soapC-12.cpp \
261 $(VBOXWEB_OUT_DIR)/soapC-13.cpp \
262 $(VBOXWEB_OUT_DIR)/soapC-14.cpp \
263 $(VBOXWEB_OUT_DIR)/soapC-15.cpp \
264 $(VBOXWEB_OUT_DIR)/soapC-16.cpp \
265 $(VBOXWEB_OUT_DIR)/soapC-17.cpp \
266 $(VBOXWEB_OUT_DIR)/soapC-18.cpp \
267 $(VBOXWEB_OUT_DIR)/soapC-19.cpp \
268 $(VBOXWEB_OUT_DIR)/soapC-20.cpp \
269 $(VBOXWEB_OUT_DIR)/soapC-21.cpp \
270 $(VBOXWEB_OUT_DIR)/soapC-22.cpp \
271 $(VBOXWEB_OUT_DIR)/soapC-23.cpp \
272 $(VBOXWEB_OUT_DIR)/soapC-24.cpp \
273 $(VBOXWEB_OUT_DIR)/soapC-25.cpp \
274 $(VBOXWEB_OUT_DIR)/soapC-26.cpp \
275 $(VBOXWEB_OUT_DIR)/soapC-27.cpp \
276 $(VBOXWEB_OUT_DIR)/soapC-28.cpp \
277 $(VBOXWEB_OUT_DIR)/soapC-29.cpp
278 vboxsoap_CXXFLAGS += \
279 $(VBOX_GCC_Wno-vla) \
280 $(if-expr $(KBUILD_TARGET) == "win",,-Wno-format) \
281 $(if-expr $(KBUILD_TARGET) == "win",,-Wno-deprecated-declarations)
282 endif
283 vboxsoap_CLEAN := $(vboxsoap_SOURCES) # lazy bird
284 vboxsoap_SOURCES <= \
285 $(VBOX_GSOAP_CXX_SOURCES)
286 vboxsoap_ORDERDEPS = \
287 $(VBOXWEB_IDL_SRC) \
288 $(VBOXWEB_OUT_DIR)/gsoap_copy_all_ts
289 ifn1of ($(KBUILD_TARGET), win)
290 $(VBOX_GSOAP_CXX_SOURCES)_CXXFLAGS = \
291 -Wno-format \
292 $(VBOX_GCC_Wno-int-in-bool-context) \
293 $(if $(VBOX_GCC_Wlogical-op),-Wno-error=logical-op,)
294 # currently necessary when compiling against OpenSSL 1.0 due to a missing
295 # typecase from 'const v3_ext_method*' to 'aka v3_ext_method*'.
296 $(VBOX_GSOAP_CXX_SOURCES)_CXXFLAGS += -fpermissive
297
298 endif
299
300 if "$(KBUILD_TARGET)" == "win" && "$(VBOX_GSOAP_CXX_SOURCES)" != ""
301 $(VBOX_GSOAP_CXX_SOURCES)_CXXFLAGS.win += -wd4668 # preprocessor / windows.h
302 $(VBOX_GSOAP_CXX_SOURCES)_CXXFLAGS.win += -wd4211 # nonstandard extension used: redefined extern to static
303 $(VBOX_GSOAP_CXX_SOURCES)_CXXFLAGS.win += -wd4310 # cast truncates constant value
304 if1of ($(VBOX_VCC_TOOL_STEM), VCC120)
305 $(VBOX_GSOAP_CXX_SOURCES)_CXXFLAGS.win += -wd4056 # v2.8.36/stdsoap2.cpp(14008) : warning C4056: overflow in floating-point constant arithmetic
306 $(VBOX_GSOAP_CXX_SOURCES)_CXXFLAGS.win += -wd4756 # v2.8.36/stdsoap2.cpp(14008) : warning C4756: overflow in constant arithmetic
307 endif
308 endif
309
310 ifdef VBOX_SOAP_PRECOMPILED_HEADER
311 # This'll save a few seconds, but the compiler invocation currently makes it impracticable. This will
312 # be addressed in a future kBuild version, by adding PCH support or/and by adding some helpers to
313 # gather the required data (DEFS,INCS,CXXTOOL,CXXFLAGS).
314 vboxsoap_INTERMEDIATES += $(VBOXWEB_OUT_DIR)/soapH.h.gch
315 vboxsoap_CXXFLAGS += -Winvalid-pch -H
316 vboxsoap_CLEAN += $(VBOXWEB_OUT_DIR)/soapH.h.gch
317
318 $(VBOXWEB_OUT_DIR)/soapH.h.gch: $(VBOXWEB_OUT_DIR)/soapH.h
319 g++ -x c++-header -g -g -Wall -pedantic -Wno-long-long -Wno-trigraphs -Wno-variadic-macros -pipe -O0 -fno-omit-frame-pointer \
320 -fno-strict-aliasing -fvisibility-inlines-hidden -fvisibility=hidden -DVBOX_HAVE_VISIBILITY_HIDDEN \
321 -mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -m32 \
322 -I/Volumes/ScratchHFS/bird/vbox/svn/trunk/src/VBox/Main/webservice/gsoap \
323 -I/Volumes/ScratchHFS/bird/vbox/svn/trunk/out/darwin.x86/debug/obj/src/VBox/Main \
324 -I/Volumes/ScratchHFS/bird/vbox/svn/trunk/src/VBox/Main/webservice \
325 -I/Volumes/ScratchHFS/bird/vbox/svn/trunk/include -I/Volumes/ScratchHFS/bird/vbox/svn/trunk/out/darwin.x86/debug
326 \-DVBOX -DVBOX_WITH_DEBUGGER -DVBOX_WITH_DEBUGGER_GUI -DDEBUG -DDEBUG_bird -DDEBUG_USERNAME=bird -DRT_OS_DARWIN \
327 -D__DARWIN__ -DRT_ARCH_X86 -D__X86__ -DVBOX_WITH_HYBRID_32BIT_KERNEL -DIN_RING3 -DHC_ARCH_BITS=32 -DGC_ARCH_BITS=32 \
328 -DMAC_OS_X_VERSION_MIN_REQUIRED=1040 -DMAC_OS_X_VERSION_MAX_ALLOWED=1040 \
329 $< -o $@
330 endif
331 endif # !VBOX_ONLY_SDK
332
333
334 ifndef VBOX_ONLY_SDK
335 #
336 # vboxwebsrv - webservice server process
337 #
338 PROGRAMS += vboxwebsrv
339 vboxwebsrv_TEMPLATE = VBOXMAINCLIENTEXE
340 vboxwebsrv_DEFS += SOCKET_CLOSE_ON_EXEC
341 vboxwebsrv_DEFS.win += WIN32_LEAN_AND_MEAN
342 vboxwebsrv_INCS = \
343 $(VBOX_GSOAP_INCS) \
344 $(VBOXWEB_OUT_DIR) \
345 .
346 vboxwebsrv_CXXFLAGS.win += -bigobj
347 ifn1of ($(KBUILD_TARGET), win)
348 vboxwebsrv_CXXFLAGS += -Wno-shadow $(VBOX_GCC_Wno-literal-suffix)
349 endif
350 vboxwebsrv_LIBS += \
351 $(PATH_STAGE_LIB)/vboxsoap$(VBOX_SUFF_LIB) \
352 $(VBOX_GSOAP_CXX_LIBS) \
353 $(LIB_RUNTIME)
354 vboxwebsrv_LIBS.solaris += socket nsl
355 ifdef VBOX_WITH_WEBSERVICES_SSL
356 vboxwebsrv_DEFS += WITH_OPENSSL
357 vboxwebsrv_SDKS += VBOX_OPENSSL2
358 endif
359 vboxwebsrv_SOURCES = \
360 vboxweb.cpp \
361 $(VBOXWEB_OUT_DIR)/methodmaps.cpp \
362 $(VBOXWEB_OUT_DIR)/soapServer.cpp \
363 $(VBOXWEB_OUT_DIR)/vboxweb-wsdl.c
364 vboxwebsrv_SOURCES.win = \
365 VBoxWebSrv.rc
366 vboxwebsrv_CLEAN = \
367 $(VBOXWEB_OUT_DIR)/methodmaps.cpp \
368 $(VBOXWEB_OUT_DIR)/soapServer.cpp \
369 $(VBOXWEB_OUT_DIR)/vboxweb-wsdl.c
370 # gcc 6.2 warns about aborting misleading indentation detection (too much code)
371 vboxweb.cpp_CXXFLAGS = \
372 $(VBOX_GCC_Wno-misleading-indentation)
373 vboxwebsrv_ORDERDEPS = $(VBOXWEB_OUT_DIR)/gsoap_copy_all_ts
374 endif # !VBOX_ONLY_SDK
375
376 ifdef VBOX_WITH_JWS
377INSTALLS += VBoxJWs-inst-jar
378
379#
380# Java glue JAR files
381#
382VBOX_JWS_JAR = $(VBoxJWs-inst-jar_0_OUTDIR)/vboxjws.jar
383VBOX_JWSDOC_JAR = $(VBoxJWs-inst-jar_0_OUTDIR)/vboxjws-doc.jar
384VBOX_JWSSRC_JAR = $(VBoxJWs-inst-jar_0_OUTDIR)/vboxjws-src.jar
385VBOX_JWS_TARGET := $(PATH_TARGET)/vboxjws-gen
386VBOX_JWS_GEN = $(VBOX_JWS_TARGET)/jwsgen
387VBOX_JWS_GEN_RAWSRC = $(VBOX_JWS_GEN)/merged.file
388VBOX_JWS_JDEST := $(VBOX_JWS_TARGET)/jdest
389VBOX_JWSDOC_JDEST := $(VBOX_JWS_TARGET)/jdest-doc
390VBOX_GLUE_XSLT_DIR := $(PATH_ROOT)/src/VBox/Main/glue
391VBOX_JAXLIB_DIR := $(PATH_ROOT)/src/VBox/Main/webservice/jaxlibs
392
393VBoxJWs-inst-jar_INST = $(INST_SDK)bindings/webservice/java/jax-ws/
394VBoxJWs-inst-jar_MODE = a+r,u+w
395VBoxJWs-inst-jar_SOURCES = \
396 $(VBOX_JWS_JAR) \
397 $(VBOX_JWSDOC_JAR) \
398 $(VBOX_JWSSRC_JAR)
399VBoxJWs-inst-jar_CLEAN = \
400 $(VBOX_JWS_JAR) \
401 $(VBOX_JWSDOC_JAR) \
402 $(VBOX_JWSSRC_JAR) \
403 $(VBOX_JWS_GEN)/jwsglue.list \
404 $(VBOX_JWSDOC_JDEST)/package-list \
405 $(wildcard \
406 $(VBOX_JWS_GEN)/java/*/*/*.java \
407 $(VBOX_JWS_GEN)/java/*/*/*/*.java \
408 $(VBOX_JWS_JDEST)/*.class \
409 $(VBOX_JWS_JDEST)/*/*.class \
410 $(VBOX_JWS_JDEST)/*/*/*.class \
411 $(VBOX_JWS_JDEST)/*/*/*/*.class \
412 $(VBOX_JWSDOC_JDEST)/*.html \
413 $(VBOX_JWSDOC_JDEST)/*.css \
414 $(VBOX_JWSDOC_JDEST)/*/*.gif \
415 $(VBOX_JWSDOC_JDEST)/*/*/*.html \
416 $(VBOX_JWSDOC_JDEST)/*/*/*/*.html \
417 )
418VBoxJWs-inst-jar_BLDDIRS += $(VBOX_JWS_GEN)/java
419VBoxJWs-inst-jar_GENERATEDSOURCES = $(addprefix $(VBoxJWs-inst-jar_BLDDIRS)/,$(VBoxJWS_VBOX_JWSGLUEFILES))
420
421VBoxJWSGlue_KMK = $(PATH_OUT)/vboxjwsglue.kmk
422include $(VBoxJWSGlue_KMK)
423
424$(VBoxJWSGlue_KMK).ts +| $(VBoxJWSGlue_KMK): $(VBOXWEB_IDL_SRC_ORIG) $(VBOX_GLUE_XSLT_DIR)/glue-java.xsl $(VBOX_VERSION_STAMP)
425 $(call MSG_GENERATE,,$(VBoxJWSGlue_KMK))
426 $(QUIET)$(RM) -f $@
427 $(QUIET)$(MKDIR) -p $(@D)
428 $(QUIET)$(VBOX_XSLTPROC) \
429 --stringparam filelistonly VBoxJWS_VBOX_JWSGLUEFILES \
430 --stringparam G_vboxApiSuffix $(VBOX_API_SUFFIX) \
431 --stringparam G_vboxGlueStyle jaxws \
432 --stringparam G_vboxDirPrefix org/virtualbox$(VBOX_API_SUFFIX)/ \
433 -o $@ $(VBOX_GLUE_XSLT_DIR)/glue-java.xsl $<
434 $(QUIET)$(CP) --changed -fv $@ $(VBoxJWSGlue_KMK)
435
436$(VBOX_JWS_GEN_RAWSRC) \
437+| $(VBoxJWs-inst-jar_GENERATEDSOURCES): \
438 $(VBOXWEB_IDL_SRC_ORIG) \
439 $(VBOX_GLUE_XSLT_DIR)/glue-java.xsl \
440 $(VBOX_FILESPLIT) \
441 $(VBOX_VERSION_STAMP)
442 $(call MSG_L1,Generating JAX-WS Java glue files from XIDL)
443 $(QUIET)$(RM) -f $(filter-out $(VBoxJWs-inst-jar_GENERATEDSOURCES),$(wildcard $(VBOX_JWS_GEN)/java/*/*/*.java))
444 $(QUIET)$(MKDIR) -p $(@D)
445 $(QUIET)$(VBOX_XSLTPROC) \
446 --stringparam filelistonly "" \
447 --stringparam G_vboxApiSuffix $(VBOX_API_SUFFIX) \
448 --stringparam G_vboxGlueStyle jaxws \
449 --stringparam G_vboxDirPrefix org/virtualbox$(VBOX_API_SUFFIX)/ \
450 -o $(VBOX_JWS_GEN_RAWSRC) $(VBOX_GLUE_XSLT_DIR)/glue-java.xsl $<
451 $(QUIET)$(MKDIR) -p $(VBOX_JWS_GEN)/java/org/virtualbox$(VBOX_API_SUFFIX)
452 $(QUIET)$(VBOX_FILESPLIT) $(VBOX_JWS_GEN_RAWSRC) $(VBOX_JWS_GEN)/java
453
454## @todo somehow also find out the authoritative list of files generated by
455# wsimport (before running it), then we could rely on proper dependencies
456# instead of creating jwsglue.list. Would allow avoiding a lot of unnecessary
457# compilation with incremental builds, when almost nothing changed in the IDL
458# file. Currently everything is recompiled if only one file is changed.
459$(VBOX_JWS_GEN)/jwsglue.list.ts +| $(VBOX_JWS_GEN)/jwsglue.list: \
460 $(VBOXWEB_IDL_SRC) \
461 $(VBOX_FILESPLIT) \
462 $(VBOXWEBSERVICE_WSDL) \
463 $(VBOXWEB_WSDL) \
464 $(VBoxJWs-inst-jar_GENERATEDSOURCES) \
465 | $(VBOX_JWS_GEN)/java/
466 $(QUIET)$(RM) -f -- $(wildcard $(VBOX_JWS_GEN)/java/*/*/*/*.java)
467 $(call MSG_GENERATE,,$(VBOX_JWS_GEN)/jwsglue.list,JAX-WS for Java 1.6 bindings using $(VBOXWEBSERVICE_WSDL))
468 $(VBOX_WSIMPORT) -Xnocompile -p $(VBOX_JAVA_PACKAGE).jaxws -d $(VBOX_JWS_GEN)/java $(VBOXWEBSERVICE_WSDL)
469 $(QUIET)echo $(VBoxJWs-inst-jar_GENERATEDSOURCES) > $@
470 $(QUIET)echo $(VBOX_JWS_GEN)/java/*/*/*/*.java >> $@
471 $(QUIET)$(CP) --changed -fv $@ $(VBOX_JWS_GEN)/jwsglue.list
472
473$$(VBOX_JWS_JAR): $(VBOX_JWS_GEN)/jwsglue.list $(VBOXWEB_WSDL) $(VBOXWEBSERVICE_WSDL) $(VBOX_JWS_GEN)/MANIFEST.MF | $$(dir $$@)
474 $(call MSG_TOOL,javac,$(notdir $@),jwsgen.list,)
475 $(QUIET)$(RM) -Rf $(VBOX_JWS_JDEST)
476 $(QUIET)$(MKDIR) -p $(VBOX_JWS_JDEST)
477 $(call MSG_L1,Compiling bridge code)
478 $(VBOX_JAVAC) $(VBOX_JAVAC_OPTS) \
479 @$(VBOX_JWS_GEN)/jwsglue.list \
480 -d $(VBOX_JWS_JDEST) -classpath $(VBOX_JWS_JDEST)
481 $(QUIET)$(SED) -e "s/vboxweb.wsdl/vboxweb$(VBOX_API_SUFFIX).wsdl/" < $(VBOXWEBSERVICE_WSDL) > $(VBOX_JWS_JDEST)/vboxwebService$(VBOX_API_SUFFIX).wsdl
482 $(QUIET)$(CP) -f $(VBOXWEB_WSDL) $(VBOX_JWS_JDEST)/vboxweb$(VBOX_API_SUFFIX).wsdl
483 $(call MSG_LINK,$(notdir $@),$@)
484 $(VBOX_JAR) cfm $@ $(VBOX_JWS_GEN)/MANIFEST.MF -C $(VBOX_JWS_JDEST) .
485
486$(VBOX_JWS_GEN)/MANIFEST.MF: $(VBOX_PATH_WEBSERVICE)/MANIFEST.MF.in
487 $(QUIET)$(RM) -f -- $@
488 $(QUIET)$(MKDIR) -p $(VBOX_JWS_GEN)
489 $(QUIET)$(SED) \
490 -e 's/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/' \
491 -e 's/@VBOX_VERSION_MAJOR@/$(VBOX_VERSION_MAJOR)/' \
492 -e 's/@VBOX_VERSION_MINOR@/$(VBOX_VERSION_MINOR)/' \
493 -e 's/@VBOX_API_SUFFIX@/$(VBOX_API_SUFFIX)/' \
494 < $< > $@
495
496$$(VBOX_JWSDOC_JAR): $(VBOX_JWS_GEN)/jwsglue.list $$(VBoxJWs-inst-jar_GENERATEDSOURCES) $(VBOXWEB_WSDL) $(VBOXWEBSERVICE_WSDL) $$(VBOX_JWS_JAR) | $$(dir $$@)
497 $(call MSG_TOOL,javadoc,$(notdir $@),jwsgen.list,)
498 $(QUIET)$(RM) -Rf $(VBOX_JWSDOC_JDEST)
499 $(QUIET)$(MKDIR) -p $(VBOX_JWSDOC_JDEST)
500 $(call MSG_L1,Generating javadoc html documentation)
501 $(VBOX_JAVADOC) $(VBOX_JAVADOC_OPTS) -quiet \
502 -sourcepath $(VBOX_JWS_GEN)/java org.virtualbox$(VBOX_API_SUFFIX) \
503 -d $(VBOX_JWSDOC_JDEST)
504 $(call MSG_LINK,$(notdir $@),$@)
505 $(VBOX_JAR) cf $@ -C $(VBOX_JWSDOC_JDEST) .
506
507$$(VBOX_JWSSRC_JAR): $$(VBOX_JWS_JAR) | $$(dir $$@)
508 $(call MSG_LINK,$(notdir $@),$@)
509 $(VBOX_JAR) cf $@ -C $(VBOX_JWS_GEN)/java .
510
511## @todo compile ../glue/tests/TestVBox.java to have sanity checking
512
513 endif # VBOX_WITH_JWS
514
515 ifndef VBOX_ONLY_SDK
516 #
517 # webtest - webservice sample client in C++
518 #
519 PROGRAMS += webtest
520 webtest_TEMPLATE = VBOXWEBR3EXE
521 webtest_CXXFLAGS.win += -bigobj
522 ifn1of ($(KBUILD_TARGET), win)
523 webtest_CXXFLAGS += -Wno-shadow
524 endif
525 webtest_INCS := \
526 $(VBOX_GSOAP_INCS) \
527 $(VBOXWEB_OUT_DIR) \
528 .
529 webtest_LIBS += \
530 $(PATH_STAGE_LIB)/vboxsoap$(VBOX_SUFF_LIB) \
531 $(VBOX_GSOAP_CXX_LIBS) \
532 $(LIB_RUNTIME)
533 webtest_LIBS.solaris += nsl
534 ifdef VBOX_WITH_WEBSERVICES_SSL
535 webtest_DEFS += WITH_OPENSSL
536 webtest_SDKS += VBOX_OPENSSL2
537 endif
538 webtest_SOURCES = \
539 webtest.cpp \
540 $(VBOXWEB_OUT_DIR)/soapClient.cpp
541 webtest_CLEAN = \
542 $(VBOXWEB_OUT_DIR)/soapClient.cpp
543
544 webtest_ORDERDEPS = $(VBOXWEB_OUT_DIR)/gsoap_copy_all_ts
545 endif # !VBOX_ONLY_SDK
546
547
548 #
549 # Additional mess to cleanup (applies to both webtest and vboxwebsrv).
550 #
551 ## @todo figure out whether the SDK really needs this or not...
552 OTHER_CLEAN += \
553 $(wildcard $(VBOXWEB_OUT_DIR)/soap*.h) \
554 $(wildcard $(VBOXWEB_OUT_DIR)/soap*.cpp) \
555 $(wildcard $(VBOXWEB_OUT_DIR)/*.nsmap) \
556 $(VBOXWEB_GSOAPH_FROM_XSLT) \
557 $(VBOXWEB_GSOAPH_FROM_GSOAP) \
558 $(VBOXWEB_SOAP_CLIENT_H) \
559 $(VBOXWEB_SOAP_SERVER_H) \
560 $(VBOXWEB_OUT_DIR)/gsoap_generate_all_ts \
561 $(VBOXWEB_OUT_DIR)/gsoap_copy_all_ts \
562 $(wildcard $(PATH_TARGET_SOAPDEMOXML)/*) \
563 $(PATH_TARGET_SOAPDEMOXML)/dummy_file \
564 $(wildcard $(PATH_TARGET_SOAPDEMOHEADERS)/*) \
565 $(PATH_TARGET_SOAPDEMOHEADERS)/dummy_file \
566 $(wildcard $(PATH_TARGET_SOAPDEMONSMAPS)/*) \
567 $(PATH_TARGET_SOAPDEMONSMAPS)/dummy_file
568
569endif # VBOX_GSOAP_INSTALLED
570
571
572if defined(VBOX_ONLY_SDK) && ("$(KBUILD_TARGET)" != "win" || defined(VBOX_FORCE_SDK))
573 #
574 # Globals relevant to the SDK.
575 #
576 VBOXWEB_GLUE_PYTHON = $(VBOX_PATH_SDK)/bindings/webservice/python/lib/VirtualBox_wrappers.py
577 # The following 3 files are generated by Python ZSI 2.1_a1 (alpha version
578 # shipped by many Linux distributions). Only the first two are actually used.
579 # The 4th and 5th file is created by ZSI 2.0 (released in 2007), and gets
580 # renamed to the 1st/2nd file for simplicity reasons.
581 # ZSI 1.x used different file names. Not worth supporting any more. If you're
582 # curious, check the VirtualBox 4.3 sources.
583 VBOXWEB_WS_PYTHON = $(VBOX_PATH_SDK)/bindings/webservice/python/lib/VirtualBox_client.py
584 VBOXWEB_WS_PYTHON_TYPES = $(VBOX_PATH_SDK)/bindings/webservice/python/lib/VirtualBox_types.py
585 VBOXWEB_WS_PYTHON_SERVER = $(VBOX_PATH_SDK)/bindings/webservice/python/lib/VirtualBox_server.py
586 VBOXWEB_WS_PYTHON_ALTERNATIVE = $(VBOX_PATH_SDK)/bindings/webservice/python/lib/VirtualBox_services.py
587 VBOXWEB_WS_PERL = $(VBOX_PATH_SDK)/bindings/webservice/perl/lib/vboxService.pm
588 VBOXWEB_WS_PHP = $(VBOX_PATH_SDK)/bindings/webservice/php/lib/vboxServiceWrappers.php
589 VBOXWEB_SAMPLES_JAXWS_DIR = $(VBOX_PATH_SDK)/bindings/webservice/java/jax-ws/samples
590 VBOXWEB_JAXWSSAMPLE = $(VBOXWEB_SAMPLES_JAXWS_DIR)/clienttest.java
591 VBOXWEB_METRICSAMPLE = $(VBOXWEB_SAMPLES_JAXWS_DIR)/metrictest.java
592
593 define find_java_files
594 $(shell find $(1) -name \*.java)
595 endef
596
597 VBOXWEB_OTHERS += \
598 $(if $(VBOX_WITH_PYTHON),$(VBOXWEB_GLUE_PYTHON),) \
599 $(if $(VBOX_WITH_PYTHON),$(VBOXWEB_WS_PYTHON),) \
600 $(if $(VBOX_WITH_PYTHON),$(VBOXWEB_WS_PYTHON_TYPES),) \
601 $(if $(VBOX_WITH_PERL),$(VBOXWEB_WS_PERL),) \
602 $(if $(VBOX_WITH_PHP),$(VBOXWEB_WS_PHP),) \
603 $(PATH_ROOT)
604
605
606 #
607 # Install sample code.
608 #
609 INSTALLS += vboxwebinst
610 vboxwebinst_INST = $(INST_SDK)bindings/webservice/
611 vboxwebinst_MODE = a+rx,u+w
612 vboxwebinst_SOURCES = \
613 $(if $(VBOX_WITH_PERL),samples/perl/clienttest.pl=>perl/samples/clienttest.pl,) \
614 $(if $(VBOX_WITH_PHP),samples/php/clienttest.php=>php/samples/clienttest.php,) \
615 $(if $(VBOX_WITH_PYTHON),samples/python/clienttest.py=>python/samples/clienttest.py,)
616
617 INSTALLS += vboxwebinst_nox
618 vboxwebinst_nox_INST = $(INST_SDK)bindings/webservice/
619 vboxwebinst_nox_MODE = a+r,u+w
620 vboxwebinst_nox_SOURCES = \
621 $(if $(VBOX_WITH_PYTHON),samples/python/Makefile=>python/samples/Makefile,) \
622 $(if $(VBOX_WITH_PYTHON),samples/python/Makefile.glue=>python/lib/Makefile,) \
623 $(if ($VBOX_WITH_JWS),$(PATH_ROOT)/COPYING.LIB=>java/jax-ws/COPYING.LIB,)
624
625 INSTALLS += vboxwebinst_wsdl
626 vboxwebinst_wsdl_INST = $(INST_SDK)bindings/webservice/
627 vboxwebinst_wsdl_MODE = a+r,u+w
628 vboxwebinst_wsdl_SOURCES = \
629 $(VBOXWEB_WSDL)=>vboxweb.wsdl \
630 $(VBOXWEBSERVICE_WSDL)=>vboxwebService.wsdl
631
632 INSTALLS += vboxwebinst_webtest
633 vboxwebinst_webtest_INST = $(INST_SDK)bindings/webservice/
634 vboxwebinst_webtest_MODE = a+r,u+w
635 vboxwebinst_webtest_SOURCES = \
636 $(VBOX_PATH_WEBSERVICE)/websrv-wsdl2gsoapH.xsl=>xsl/websrv-wsdl2gsoapH.xsl \
637 $(VBOX_PATH_WEBSERVICE)/websrv-nsmap.xsl=>xsl/websrv-nsmap.xsl \
638 $(VBOX_PATH_IDL)/typemap-shared.inc.xsl=>idl/typemap-shared.inc.xsl \
639 $(VBOX_PATH_WEBSERVICE)/split-soapC.cpp=>tools/split-soapC.cpp \
640 $(VBOX_PATH_WEBSERVICE)/webtest.cpp=>cpp/samples/webtest/webtest.cpp \
641 $(VBOX_PATH_WEBSERVICE)/Makefile.webtest=>cpp/samples/webtest/Makefile
642
643endif # VBOX_ONLY_SDK
644
645#
646# Update the OTHERS and OTHER_CLEAN lists with VBOXWEB_OTHERS and some more stuff.
647#
648# We can't just built up OTHERS and append it to OTHER_CLEAN because we're sharing
649# OTHERS with all the other VBox makefiles, thus VBOXWEB_OTHERS.
650#
651OTHERS += $(VBOXWEB_OTHERS)
652OTHER_CLEAN += \
653 $(VBOXWEB_OTHERS) \
654 $(if $(VBOX_WITH_PYTHON),$(VBOXWEB_WS_PYTHON_SERVER),) \
655 $(VBOXWEB_WSDL) \
656 $(VBOXWEBSERVICE_WSDL) \
657 $(VBOXWEB_TYPEMAP) \
658 $(VBOXWEB_IDL_SRC)
659
660# generate platform-specific XIDL file from original XIDL file
661$(VBOXWEB_IDL_SRC): $(VBOXWEB_IDL_SRC_STRIPPED) $(VBOX_PATH_WEBSERVICE)/platform-xidl.xsl | $$(dir $$@)
662 $(call MSG_GENERATE,,$@,$(VBOXWEB_IDL_SRC) using platform-xidl.xsl)
663 $(QUIET)$(RM) -f -- $@
664 $(QUIET)$(VBOX_XSLTPROC) $(VBOXWEB_XSLTPROC_VERBOSE) -o $@ $(VBOX_PATH_WEBSERVICE)/platform-xidl.xsl $<
665
666# generate WSDL from main XIDL file
667$(VBOXWEB_WSDL): $(VBOXWEB_IDL_SRC) $(VBOX_PATH_WEBSERVICE)/websrv-wsdl.xsl $(VBOX_PATH_IDL)/typemap-shared.inc.xsl $(RECOMPILE_ON_MAKEFILE_CURRENT) | $$(dir $$@)
668 $(call MSG_GENERATE,,$@,$(VBOXWEB_IDL_SRC) using websrv-wsdl.xsl)
669 $(QUIET)$(RM) -f -- $@
670 $(QUIET)$(VBOX_XSLTPROC) $(VBOXWEB_XSLTPROC_VERBOSE) -o $@ $(VBOX_PATH_WEBSERVICE)/websrv-wsdl.xsl $<
671
672$(VBOXWEBSERVICE_WSDL): $(VBOXWEB_IDL_SRC) $(VBOX_PATH_WEBSERVICE)/websrv-wsdl-service.xsl $(VBOX_PATH_IDL)/typemap-shared.inc.xsl $(RECOMPILE_ON_MAKEFILE_CURRENT) | $$(dir $$@)
673 $(call MSG_GENERATE,,$@,$(VBOXWEB_IDL_SRC) using websrv-wsdl-service.xsl)
674 $(QUIET)$(RM) -f -- $@
675 $(QUIET)$(VBOX_XSLTPROC) $(VBOXWEB_XSLTPROC_VERBOSE) -o $@ $(VBOX_PATH_WEBSERVICE)/websrv-wsdl-service.xsl $<
676
677ifdef VBOX_ONLY_SDK
678
679$(VBOXWEB_GLUE_PYTHON): $(VBOXWEB_IDL_SRC) $(VBOXWEB_WSDL) $(VBOXWEBSERVICE_WSDL) $(VBOX_PATH_WEBSERVICE)/websrv-python.xsl
680 $(call MSG_GENERATE,,$@,$(VBOXWEB_IDL_SRC) using websrv-python.xsl)
681 $(QUIET)$(RM) -f -- $@
682 $(QUIET)$(MKDIR) -p $(@D)
683 $(QUIET)$(VBOX_XSLTPROC) $(VBOXWEB_XSLTPROC_VERBOSE) -o $@ $(VBOX_PATH_WEBSERVICE)/websrv-python.xsl $<
684
685$(VBOXWEB_WS_PYTHON) \
686+ $(VBOXWEB_WS_PYTHON_TYPES): $(VBOXWEB_WSDL) $(VBOXWEBSERVICE_WSDL)
687 $(call MSG_GENERATE,,$@, WS Python bindings)
688 $(QUIET)$(RM) -f -- $@
689 $(QUIET)$(MKDIR) -p $(@D)
690# Change directory to the "source", as otherwise ZSI 2.0 has trouble finding
691# the 2nd WSDL file included in the main one. ZSI 2.1 is smarter, but some
692# versions floating around (especially on Linux) lack the --file option.
693if "$(KBUILD_HOST)" != "win"
694 $(QUIET)$(REDIRECT) -C $(dir $(VBOXWEBSERVICE_WSDL)) -- $(SHELL) -c "$(VBOX_WSDL2PY) -b --output-dir $(@D) $(VBOXWEBSERVICE_WSDL) || $(VBOX_WSDL2PY) -b --file $(VBOXWEBSERVICE_WSDL) --output-dir $(@D)"
695else
696 $(QUIET)$(REDIRECT) -C $(dir $(VBOXWEBSERVICE_WSDL)) -- $(VBOX_WSDL2PY) -b --file $(subst /,\\\\,$(VBOXWEBSERVICE_WSDL)) --output-dir $(@D)
697endif
698# Hack: some wsdl2py versions generate VirtualBox_client.py, some generate
699# VirtualBox_services.py. Standardize on the former.
700 -$(QUIET)$(MV) -f $(VBOXWEB_WS_PYTHON_ALTERNATIVE) $(VBOXWEB_WS_PYTHON)
701# We do not ever need the VirtualBox_server.py file. Delete it immediately
702# so that it will not get packaged in the SDK.
703 $(QUIET)$(RM) -f -- $(VBOXWEB_WS_PYTHON_SERVER)
704 $(QUIET)$(APPEND) $@ ''
705
706$(VBOXWEB_WS_PERL): $(VBOXWEB_WSDL) $(VBOXWEBSERVICE_WSDL)
707 $(call MSG_GENERATE,,$@, WS Perl bindings)
708 $(QUIET)$(MKDIR) -p $(@D)
709 $(QUIET)$(REDIRECT) -C $(@D) -- $(VBOX_STUBMAKER) file://$(VBOXWEBSERVICE_WSDL)
710# Ugly, ugly, ugly, make me right once
711 $(QUIET)$(SED) -e "s+http://www.virtualbox.org/Service+http://www.virtualbox.org/+" --output $(VBOXWEB_WS_PERL).tmp $(VBOXWEB_WS_PERL)
712 $(QUIET)$(MV) $(VBOXWEB_WS_PERL).tmp $(VBOXWEB_WS_PERL)
713 $(QUIET)$(APPEND) $@ ''
714
715$(VBOXWEB_WS_PHP): $(VBOXWEB_IDL_SRC) $(VBOX_PATH_WEBSERVICE)/websrv-php.xsl
716 $(call MSG_GENERATE,,$@,$(VBOXWEB_IDL_SRC) using websrv-php.xsl)
717 $(QUIET)$(RM) -f -- $@
718 $(QUIET)$(MKDIR) -p $(@D)
719 $(QUIET)$(VBOX_XSLTPROC) $(VBOXWEB_XSLTPROC_VERBOSE) -o $@ $(VBOX_PATH_WEBSERVICE)/websrv-php.xsl $<
720
721endif # VBOX_ONLY_SDK
722
723# generate typemap.dat (used by wsdl2h) from main XIDL file
724$(VBOXWEB_TYPEMAP): $(VBOXWEB_IDL_SRC) $(VBOX_PATH_WEBSERVICE)/websrv-typemap.xsl $(VBOX_PATH_IDL)/typemap-shared.inc.xsl $(RECOMPILE_ON_MAKEFILE_CURRENT) | $$(dir $$@)
725 $(call MSG_GENERATE,,$@,$(VBOXWEB_IDL_SRC) using websrv-typemap.xsl)
726 $(QUIET)$(RM) -f -- $@
727 $(QUIET)$(VBOX_XSLTPROC) $(VBOXWEB_XSLTPROC_VERBOSE) -o $@ $(VBOX_PATH_WEBSERVICE)/websrv-typemap.xsl $<
728
729# generate gsoap pseudo-C header file from that WSDL; once via XSLT...
730$(VBOXWEB_GSOAPH_FROM_XSLT): $(VBOXWEB_WSDL) $(VBOX_PATH_WEBSERVICE)/websrv-wsdl2gsoapH.xsl $(VBOX_PATH_IDL)/typemap-shared.inc.xsl $(RECOMPILE_ON_MAKEFILE_CURRENT) | $$(dir $$@)
731 $(call MSG_GENERATE,,$@,$(VBOXWEB_WSDL) using websrv-wsdl2gsoapH.xsl)
732 $(QUIET)$(RM) -f -- $@
733 $(QUIET)$(VBOX_XSLTPROC) $(VBOXWEB_XSLTPROC_VERBOSE) -o $@ $(VBOX_PATH_WEBSERVICE)/websrv-wsdl2gsoapH.xsl $<
734
735VBOX_NSMAP = $(VBOXWEB_OUT_DIR)/vboxwebsrv.nsmap
736$(VBOX_NSMAP): $(VBOXWEB_IDL_SRC) $(VBOX_PATH_WEBSERVICE)/websrv-nsmap.xsl $(VBOX_PATH_IDL)/typemap-shared.inc.xsl $(RECOMPILE_ON_MAKEFILE_CURRENT) | $$(dir $$@)
737 $(call MSG_GENERATE,,$@,$(VBOXWEB_IDL_SRC) using websrv-nsmap.xsl)
738 $(QUIET)$(RM) -f -- $@
739 $(QUIET)$(VBOX_XSLTPROC) $(VBOXWEB_XSLTPROC_VERBOSE) -o $@ $(VBOX_PATH_WEBSERVICE)/websrv-nsmap.xsl $<
740
741ifdef VBOX_GSOAP_INSTALLED
742# ... and once with the gSOAP tool (just for comparison, we don't use it for licensing reasons)
743$(VBOXWEB_GSOAPH_FROM_GSOAP): $(VBOXWEB_WSDL) $(VBOXWEB_TYPEMAP) | $$(dir $$@)
744 $(call MSG_GENERATE,,$@,)
745 $(QUIET)$(RM) -f -- $@
746 $(VBOX_WSDL2H) $(VBOXWEB_WSDL_VERBOSE) -t$(VBOXWEB_TYPEMAP) -nvbox -o $@ $<
747
748# this sets the gsoap header that we use for further compilation; if stuff works, then the
749# one we generate via XSLT produces the same end result as the one from the gSOAP tool;
750# with this variable we can swap for testing, but shipped code must use VBOXWEB_GSOAPH_FROM_XSLT
751GSOAPH_RELEVANT = $(VBOXWEB_GSOAPH_FROM_XSLT)
752
753# wsdl2h -v: verbose
754# wsdl2h -e: don't qualify enum names
755# wsdl2h -n<prefix>: namespace header prefix
756
757## @todo change this to state explicitly what will be generated?
758
759# generate server and client code from gsoap pseudo-C header file
760$(VBOXWEB_OUT_DIR)/gsoap_generate_all_ts \
761+ $(VBOXWEB_OUT_DIR)/soapH.h \
762+ $(VBOXWEB_SOAP_CLIENT_H) \
763+ $(VBOXWEB_OUT_DIR)/soapC.cpp \
764+ $(VBOXWEB_OUT_DIR)/soapClient.cpp \
765+ $(VBOXWEB_OUT_DIR)/soapServer.cpp \
766: $(VBOXWEB_GSOAPH_FROM_GSOAP) $(VBOXWEB_GSOAPH_FROM_XSLT) $(VBOX_NSMAP) $(VBOX_PATH_WEBSERVICE)/stdsoap2.sed \
767 $(RECOMPILE_ON_MAKEFILE_CURRENT) | $$(dir $$@)
768 $(call MSG_GENERATE,,lots of files,$(GSOAPH_RELEVANT))
769 $(RM) -f $@
770 $(REDIRECT) -C $(VBOXWEB_OUT_DIR) -- $(VBOX_SOAPCPP2) $(VBOXWEB_SOAPCPP2_SKIP_FILES) -L -2 -w -I$(VBOX_PATH_GSOAP_IMPORT) $(GSOAPH_RELEVANT)
771ifeq ($(KBUILD_TARGET),win) # MSC -Wall workaround.
772 $(CP) -f "$(VBOXWEB_SOAP_CLIENT_H)" "$(VBOXWEB_SOAP_CLIENT_H).tmp"
773 $(SED) -f $(VBOX_PATH_WEBSERVICE)/stdsoap2.sed --output "$(VBOXWEB_SOAP_CLIENT_H)" "$(VBOXWEB_SOAP_CLIENT_H).tmp"
774 $(RM) -f "$(VBOXWEB_SOAP_CLIENT_H).tmp"
775endif
776 $(APPEND) $@ done
777
778# Copy the generated headers and stuff. This was split into a separate rule
779# way back because we thought we could use $(wildcard ) and avoid the shell,
780# however we cannot as it is subject to caching. Let the shell do the globbing.
781# GSOAP versions 2.8 and later do not generate the unneeded soapvbox*.h files
782# any more. Ignoring the exit code is the simple solution, accepting the error.
783$(VBOXWEB_OUT_DIR)/gsoap_copy_all_ts: $(VBOXWEB_OUT_DIR)/gsoap_generate_all_ts | $$(dir $$@)
784 $(RM) -f $@
785 $(MKDIR) -p $(PATH_TARGET_SOAPDEMOXML) $(PATH_TARGET_SOAPDEMOHEADERS) $(PATH_TARGET_SOAPDEMONSMAPS)
786ifdef VBOX_GSOAP_VERBOSE
787 $(MV_EXT) -f -- $(VBOXWEB_OUT_DIR)/*.req.xml $(VBOXWEB_OUT_DIR)/*.res.xml $(PATH_TARGET_SOAPDEMOXML)/
788endif
789 -$(MV_EXT) -f -- $(VBOXWEB_OUT_DIR)/soapvbox*.h $(PATH_TARGET_SOAPDEMOHEADERS)/
790 $(MV_EXT) -f -- $(VBOXWEB_OUT_DIR)/vboxBinding.nsmap $(PATH_TARGET_SOAPDEMONSMAPS)/
791 $(APPEND) $@ done
792
793$(PATH_TARGET_SOAPDEMONSMAPS) \
794$(PATH_TARGET_SOAPDEMOHEADERS)/soapvboxBindingProxy.h \
795$(PATH_TARGET_SOAPDEMOHEADERS)/soapvboxBindingObject.h: $(VBOXWEB_OUT_DIR)/gsoap_copy_all_ts
796
797# soapcpp2 -2: generate SOAP 1.2 calls
798# soapcpp2 -S: server-side code only
799# soapcpp2 -L: don't generate soapClientLib/soapServerLib
800# soapcpp2 -w: don't generate WSDL and schema files
801# soapcpp2 -x: don't generate sample XML files
802
803ifndef VBOX_WITHOUT_SPLIT_SOAPC
804#
805# Split up the soapC.cpp monster into manageable bits that can be
806# built in parallel and without exhausting all available memory.
807#
808$(VBOXWEB_OUT_DIR)/soapC-1.cpp \
809+ $(VBOXWEB_OUT_DIR)/soapC-2.cpp \
810+ $(VBOXWEB_OUT_DIR)/soapC-3.cpp \
811+ $(VBOXWEB_OUT_DIR)/soapC-4.cpp \
812+ $(VBOXWEB_OUT_DIR)/soapC-5.cpp \
813+ $(VBOXWEB_OUT_DIR)/soapC-6.cpp \
814+ $(VBOXWEB_OUT_DIR)/soapC-7.cpp \
815+ $(VBOXWEB_OUT_DIR)/soapC-8.cpp \
816+ $(VBOXWEB_OUT_DIR)/soapC-9.cpp \
817+ $(VBOXWEB_OUT_DIR)/soapC-10.cpp \
818+ $(VBOXWEB_OUT_DIR)/soapC-11.cpp \
819+ $(VBOXWEB_OUT_DIR)/soapC-12.cpp \
820+ $(VBOXWEB_OUT_DIR)/soapC-13.cpp \
821+ $(VBOXWEB_OUT_DIR)/soapC-14.cpp \
822+ $(VBOXWEB_OUT_DIR)/soapC-15.cpp \
823+ $(VBOXWEB_OUT_DIR)/soapC-16.cpp \
824+ $(VBOXWEB_OUT_DIR)/soapC-17.cpp \
825+ $(VBOXWEB_OUT_DIR)/soapC-18.cpp \
826+ $(VBOXWEB_OUT_DIR)/soapC-19.cpp \
827+ $(VBOXWEB_OUT_DIR)/soapC-20.cpp \
828+ $(VBOXWEB_OUT_DIR)/soapC-21.cpp \
829+ $(VBOXWEB_OUT_DIR)/soapC-22.cpp \
830+ $(VBOXWEB_OUT_DIR)/soapC-23.cpp \
831+ $(VBOXWEB_OUT_DIR)/soapC-24.cpp \
832+ $(VBOXWEB_OUT_DIR)/soapC-25.cpp \
833+ $(VBOXWEB_OUT_DIR)/soapC-26.cpp \
834+ $(VBOXWEB_OUT_DIR)/soapC-27.cpp \
835+ $(VBOXWEB_OUT_DIR)/soapC-28.cpp \
836+ $(VBOXWEB_OUT_DIR)/soapC-29.cpp \
837: $(VBOXWEB_OUT_DIR)/soapC.cpp $$(split-soapC_1_TARGET) | $$(dir $$@)
838 $(RM) -f -- $(wildcard $(VBOXWEB_OUT_DIR)/soapC-?.cpp $(VBOXWEB_OUT_DIR)/soapC-??.cpp)
839 $(split-soapC_1_TARGET) $(VBOXWEB_OUT_DIR)/soapC.cpp $(VBOXWEB_OUT_DIR) 29
840endif # !VBOX_WITHOUT_SPLIT_SOAPC
841
842endif # VBOX_GSOAP_INSTALLED
843
844
845
846# generate method maps in server: map wsdl operations to com/xpcom method calls
847$(VBOXWEB_OUT_DIR)/methodmaps.cpp: $(VBOXWEB_IDL_SRC) $(VBOX_PATH_WEBSERVICE)/websrv-cpp.xsl $(VBOX_PATH_IDL)/typemap-shared.inc.xsl $(RECOMPILE_ON_MAKEFILE_CURRENT) | $$(dir $$@)
848 $(call MSG_GENERATE,,$@,$(VBOXWEB_IDL_SRC) using websrv-cpp.xsl)
849 $(QUIET)$(VBOX_XSLTPROC) -o $@ $(VBOX_PATH_WEBSERVICE)/websrv-cpp.xsl $<
850
851# generate C file which contains vboxweb.wsdl
852$$(VBOXWEB_OUT_DIR)/vboxweb-wsdl.c: $(VBOXWEB_WSDL) $(VBOX_BIN2C)
853 $(call MSG_TOOL,bin2c,vboxweb-wsdl,$<,$@)
854 $(QUIET)$(VBOX_BIN2C) -ascii VBoxWebWSDL $< $@
855
856
857ifdef VBOX_ONLY_SDK
858
859$(VBOXWEB_JAXWSSAMPLE): $(VBOX_PATH_WEBSERVICE)/samples/java/jax-ws/clienttest.java
860 $(QUIET)$(RM) -f -- $@
861 $(QUIET)$(MKDIR) -p $(VBOXWEB_SAMPLES_JAXWS_DIR)
862 $(QUIET)$(SED) -e 's/{VBOX_API_SUFFIX}/$(VBOX_API_SUFFIX)/' < $< > $@
863
864$(VBOXWEB_METRICSAMPLE): $(VBOX_PATH_WEBSERVICE)/samples/java/jax-ws/metrictest.java
865 $(QUIET)$(RM) -f -- $@
866 $(QUIET)$(MKDIR) -p $(VBOXWEB_SAMPLES_JAXWS_DIR)
867 $(QUIET)$(SED) -e 's/{VBOX_API_SUFFIX}/$(VBOX_API_SUFFIX)/' < $< > $@
868
869endif # VBOX_ONLY_SDK
870
871include $(FILE_KBUILD_SUB_FOOTER)
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette