VirtualBox

source: vbox/trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk@ 9221

Last change on this file since 9221 was 9209, checked in by vboxsync, 17 years ago

Use the (relatively) new INTERMEDIATES property to make sure the include files are all generated before the compiling starts. (forgot one thing)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 22.2 KB
Line 
1# $Id: Makefile.kmk 9209 2008-05-28 17:52:25Z vboxsync $
2## @file
3# Makefile for the VirtualBox Qt GUI.
4#
5
6#
7# Copyright (C) 2006-2007 Sun Microsystems, Inc.
8#
9# This file is part of VirtualBox Open Source Edition (OSE), as
10# available from http://www.virtualbox.org. This file is free software;
11# you can redistribute it and/or modify it under the terms of the GNU
12# General Public License (GPL) as published by the Free Software
13# Foundation, in version 2 as it comes in the "COPYING" file of the
14# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16#
17# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
18# Clara, CA 95054 USA or visit http://www.sun.com if you need
19# additional information or have any questions.
20#
21
22# include qmake project file
23include VBoxUI.pro
24
25# Import QDesigner UI sources
26VirtualBox_QT_UISRCS := $(FORMS)
27# Import translation sources
28VirtualBox_QT_TRANSLATIONS := $(TRANSLATIONS)
29# Import images
30VirtualBox_QT_IMAGES := $(IMAGES)
31
32# reset things to avoid possible conflicts with kBuild
33TEMPLATE :=
34LANGUAGE :=
35FORMS :=
36TRANSLATIONS :=
37IMAGES :=
38
39VBOX_WITH_REGISTRATION := 1
40VBOX_WITH_REGISTRATION_REQUEST := 1
41
42DEPTH = ../../../..
43include $(KBUILD_PATH)/header.kmk
44
45
46#
47# Additional images that depend on the version type
48#
49ifdef VBOX_OSE
50VirtualBox_QT_IMAGES += \
51 images/OSE/about.png \
52 images/OSE/about_tile.png \
53 images/OSE/about_16px.png \
54 images/OSE/VirtualBox_16px.png \
55 images/OSE/VirtualBox_20px.png \
56 images/OSE/VirtualBox_32px.png \
57 images/OSE/VirtualBox_40px.png \
58 images/OSE/VirtualBox_48px.png \
59 images/OSE/VirtualBox_64px.png \
60 images/OSE/VirtualBox_cube_42px.png
61else
62VirtualBox_QT_IMAGES += \
63 images/NonOSE/about.png \
64 images/NonOSE/about_16px.png \
65 images/NonOSE/VirtualBox_16px.png \
66 images/NonOSE/VirtualBox_20px.png \
67 images/NonOSE/VirtualBox_32px.png \
68 images/NonOSE/VirtualBox_40px.png \
69 images/NonOSE/VirtualBox_48px.png \
70 images/NonOSE/VirtualBox_64px.png \
71 images/NonOSE/VirtualBox_cube_42px.png
72endif
73
74
75#
76# exclude inappropriate UI content
77#
78ifndef VBOX_WITH_REGISTRATION
79VirtualBox_QT_UISRCS := $(filter-out ui/VBoxRegistrationDlg.ui,$(VirtualBox_QT_UISRCS))
80endif
81
82
83#
84# The targets.
85#
86PROGRAMS = VirtualBox
87ifeq ($(filter-out freebsd linux openbsd netbsd solaris,$(KBUILD_TARGET)),) # X11
88DLLS = VBoxKeyboard
89OTHERS = $(PATH_BIN)/vboxkeyboard.tar.gz
90endif
91INSTALLS = VirtualBox.nls
92
93ifeq ($(KBUILD_TARGET),os2)
94 DLLS += VBoxHlp
95 ifneq ($(strip $(VBOX_DLL_QT)),)
96 INSTALLS += qt.dll
97 qt.dll_INST = $(INST_BIN)
98 qt.dll_SOURCES += \
99 $(VBOX_DLL_QT)=>$(not-dir $(VBOX_DLL_QT))
100 endif
101endif
102
103
104#
105# VBoxHlp - helper DLL for OS/2.
106#
107VBoxHlp_ASTOOL = NASM
108VBoxHlp_ASFLAGS = -f obj
109VBoxHlp_DEFS = IN_RING3 IN_VBOXHLP
110VBoxHlp_CXXFLAGS = -fno-exceptions
111VBoxHlp_LDFLAGS = -nostdlib -los2
112VBoxHlp_LDFLAGS += -Zlinker option -Zlinker manyautodata
113VBoxHlp_SOURCES = \
114 src/os2/VBoxHlp.asm \
115 src/os2/VBoxHlp.cpp
116
117
118#
119# VBoxKeyboard - keyboard library for X11.
120#
121VBoxKeyboard_TEMPLATE = VBOXR3
122VBoxKeyboard_SOURCES = \
123 src/linux/keyboard-new.c
124VBoxKeyboard_TARSOURCES = \
125 $(VBoxKeyboard_SOURCES) \
126 src/linux/COPYING.LIB \
127 src/linux/keyboard.h \
128 src/linux/keyboard-layouts.h \
129 src/linux/keyboard-list.h \
130 src/linux/keyboard-tables.h \
131 src/linux/Makefile
132VBoxKeyboard_LIBS = X11
133VBoxKeyboard_LIBPATH = $(VBOX_LIBPATH_X11)
134
135
136#
137# vboxkeyboard.tar.gz - the LGPLed keyboard library must always be
138# redistributed with usable sources.
139#
140SOURCE_DIRECTORY = vboxkeyboard
141DIRECTORY_PREFIX = src/linux/
142
143$(PATH_TARGET)/$(SOURCE_DIRECTORY):
144 $(MKDIR) -p $(@D)
145 $(LN_SYMLINK) $(abspath $(PATH_CURRENT))/$(DIRECTORY_PREFIX) $@
146
147$(PATH_BIN)/vboxkeyboard.tar.gz: $(VBoxKeyboard_TARSOURCES) $(PATH_TARGET)/$(SOURCE_DIRECTORY)
148 $(call MSG_TOOL,tar/gzip,,$@)
149 $(QUIET)cd $(PATH_TARGET) && tar -chf - $(addprefix $(SOURCE_DIRECTORY)/,$(subst $(DIRECTORY_PREFIX),,$(VBoxKeyboard_TARSOURCES))) | gzip - > $@
150
151
152#
153# VirtualBox - The GUI program.
154#
155VirtualBox_TEMPLATE = VBOXQTGUIEXE
156VirtualBox_SDKS.win = WINPSDK DXSDK
157#ifeq ($(filter-out freebsd linux netbsd openbsd os2 solaris,$(KBUILD_TARGET)),) - later
158ifeq ($(filter-out freebsd linux netbsd openbsd os2,$(KBUILD_TARGET)),) # X11 + os2
159VirtualBox_SDKS += LIBSDL
160endif
161
162ifeq ($(KBUILD_TARGET),darwin)
163# For the launch trick we need different inode numbers.
164VirtualBox_INST = $(INST_BIN)VirtualBox $(INST_BIN)VirtualBoxVM
165
166 # For testing iChat Theater stuff change
167 # the sdk path
168 ifdef VBOX_WITH_ICHAT_THEATER
169 VBOX_PATH_MACOSX_SDK = /Developer/SDKs/MacOSX10.5.sdk
170 endif
171
172endif
173
174ifndef VBOX_OSE
175ifeq ($(filter-out freebsd linux netbsd openbsd solaris,$(KBUILD_TARGET)),) # linux only, yea, right.
176# Note: I'm doing this right here because the GUI will _not_ run
177# without that file which might be annoying for developers!
178$(VBOX_LICENSE_BIN): $(VBOX_LICENSE_SRC)
179 $(call MSG_GENERATE,,$@)
180 $(QUIET)$(CP) $< $@
181
182$(PATH_BIN)/VirtualBox: $(VBOX_LICENSE_BIN)
183endif
184endif
185
186# Each nls/VirtualBox_xx_YY.ts file must have a qt_xx_YY.ts counterpart
187VirtualBox_QT_TRANSLATIONS_QT := \
188 $(patsubst nls/VirtualBox_%.ts,nls/qt_%.ts,\
189 $(filter nls/VirtualBox_%.ts,$(VirtualBox_QT_TRANSLATIONS)))
190
191# QDesigner UI sources are imported from VBoxUI.pro as VirtualBox_QT_UISRC
192
193# Headers containing definitions of classes that use the Q_OBJECT macro
194VirtualBox_QT_MOCHDRS = \
195 include/QIWidgetValidator.h \
196 include/QIHotKeyEdit.h \
197 include/QIStatusBar.h \
198 include/QIStateIndicator.h \
199 include/QIMessageBox.h \
200 include/QIRichLabel.h \
201 include/VBoxGlobalSettings.h \
202 include/VBoxUtils.h \
203 include/VBoxGlobal.h \
204 include/VBoxVMListBox.h \
205 include/VBoxMediaComboBox.h \
206 include/VBoxSelectorWnd.h \
207 include/VBoxConsoleWnd.h \
208 include/VBoxConsoleView.h \
209 include/VBoxProblemReporter.h \
210 include/VBoxDownloaderWgt.h \
211 include/VBoxNetworkFramework.h
212
213# Sources containing local definitions of classes that use the Q_OBJECT macro
214VirtualBox_QT_MOCSRCS = src/VBoxSelectorWnd.cpp
215ifeq ($(filter-out freebsd linux netbsd openbsd solaris,$(KBUILD_TARGET)),) # X11
216VirtualBox_QT_MOCSRCS += src/VBoxGlobal.cpp
217endif
218ifdef VBOX_WITH_XPCOM
219VirtualBox_QT_MOCSRCS += src/COMDefs.cpp
220endif
221
222# UI headers (ui.h) containing local definitions of classes that use the Q_OBJECT macro
223VirtualBox_QT_MOCUIHDRS = \
224 ui/VBoxVMSettingsDlg.ui.h \
225 ui/VBoxVMLogViewer.ui.h \
226 ui/VBoxSharedFoldersSettings.ui.h \
227 ui/VBoxHardDiskSettings.ui.h
228
229
230# All generated sources. Note: this list MUST be in sync with Qt source
231# generation rules defined somewhere below!
232VirtualBox_GENSRCS = \
233 $(foreach moc,$(notdir $(basename $(VirtualBox_QT_MOCHDRS))), $(PATH_VirtualBox)/moc/moc_$(moc).cpp) \
234 $(foreach ui,$(notdir $(basename $(VirtualBox_QT_UISRCS))), $(PATH_VirtualBox)/ui/$(ui).cpp $(PATH_VirtualBox)/moc/moc_$(ui).cpp) \
235 $(PATH_VirtualBox)/ui/vbox_image_collection.cpp
236
237# All generated headers. Note: this list MUST be in sync with Qt source
238# generation rules defined somewhere below!
239VirtualBox_GENHDRS = \
240 $(foreach mocui,$(notdir $(basename $(VirtualBox_QT_MOCUIHDRS))), $(PATH_VirtualBox)/moc/$(mocui).moc) \
241 $(foreach moc,$(notdir $(basename $(VirtualBox_QT_MOCSRCS))), $(PATH_VirtualBox)/moc/$(moc).moc) \
242 $(foreach ui,$(notdir $(basename $(VirtualBox_QT_UISRCS))), $(PATH_VirtualBox)/ui/$(ui).h)
243
244# All existing .ui.h files for known .ui sources
245VirtualBox_QT_UIHDRS = \
246 $(wildcard $(addsuffix .h,$(VirtualBox_QT_UISRCS)))
247
248# All header files
249VirtualBox_HEADERS = \
250 $(wildcard include/*.h) \
251 $(VirtualBox_GENHDRS) \
252 $(VirtualBox_QT_UIHDRS)
253
254
255VirtualBox_SOURCES = \
256 $(VirtualBox_GENSRCS) \
257 src/main.cpp \
258 src/COMDefs.cpp \
259 src/QIWidgetValidator.cpp \
260 src/QIHotKeyEdit.cpp \
261 src/QIStateIndicator.cpp \
262 src/QIStatusBar.cpp \
263 src/QIMessageBox.cpp \
264 src/QIRichLabel.cpp \
265 src/VBoxDefs.cpp \
266 src/VBoxGlobalSettings.cpp \
267 src/VBoxGlobal.cpp \
268 src/VBoxMediaComboBox.cpp \
269 src/VBoxProblemReporter.cpp \
270 src/VBoxSelectorWnd.cpp \
271 src/VBoxConsoleView.cpp \
272 src/VBoxConsoleWnd.cpp \
273 src/VBoxDownloaderWgt.cpp \
274 src/VBoxVMListBox.cpp \
275 src/VBoxFrameBuffer.cpp \
276 src/HappyHttp.cpp \
277 src/VBoxNetworkFramework.cpp
278
279ifeq ($(filter-out freebsd linux netbsd openbsd solaris,$(KBUILD_TARGET)),) # X11
280VirtualBox_SOURCES += \
281 src/linux/XKeyboard-new.cpp
282endif
283
284VirtualBox_SOURCES.win += \
285 src/VBoxFBDDRAW.cpp \
286 $(PATH_TARGET)/VirtualBox.rc
287
288VirtualBox_SOURCES.darwin = \
289 src/darwin/DarwinKeyboard.cpp \
290 src/darwin/DarwinCursor.cpp \
291 src/darwin/VBoxAquaStyle.cpp \
292 src/darwin/VBoxUtils-darwin.cpp \
293 src/VBoxFBQuartz2D.cpp
294
295ifdef VBOX_WITH_ICHAT_THEATER
296 VirtualBox_SOURCES.darwin += \
297 src/darwin/VBoxIChatTheaterWrapper.m
298endif
299
300ifndef VBOX_OSE
301VirtualBox_SOURCES += src/VBoxAboutNonOSEDlg.cpp
302VirtualBox_QT_MOCHDRS += include/VBoxAboutNonOSEDlg.h
303endif
304# OSE version is always necessary for lupdate/lrelease
305VirtualBox_QT_UISRCS += ui/VBoxAboutDlg.ui
306
307ifneq ($(KBUILD_TARGET),win)
308src/HappyHttp.cpp_CXXFLAGS += -fexceptions
309src/VBoxDownloaderWgt.cpp_CXXFLAGS += -fexceptions
310src/VBoxNetworkFramework.cpp_CXXFLAGS += -fexceptions
311endif
312src/HappyHttp.cpp_CXXFLAGS.linux += -O2
313
314## @todo how to detect what tool is used?
315## @todo GCC3 seems to lack -Wno-missing-base-class-initializer, so we use
316# more generic -Wno-extra
317ifdef VBOX_WITH_XPCOM
318src/COMDefs.cpp_CXXFLAGS = $(VBOX_GCC_Wno-extra)
319endif
320
321VirtualBox_DEFS = VBOX_GUI_SEPARATE_VM_PROCESS
322VirtualBox_DEFS.debug = VBOX_GUI_DEBUG VBOX_CHECK_STATE # QT_FATAL_ASSERT
323VirtualBox_DEFS.darwin = VBOX_GUI_USE_QUARTZ2D VBOX_GUI_USE_QIMAGE VBOX_WITHOUT_QHTTP
324VirtualBox_DEFS.freebsd = VBOX_GUI_USE_QIMAGE VBOX_GUI_USE_SDL
325VirtualBox_DEFS.linux = VBOX_GUI_USE_SDL
326VirtualBox_DEFS.netbsd = VBOX_GUI_USE_QIMAGE VBOX_GUI_USE_SDL
327VirtualBox_DEFS.openbsd = VBOX_GUI_USE_QIMAGE VBOX_GUI_USE_SDL
328VirtualBox_DEFS.os2 = VBOX_GUI_USE_QIMAGE VBOX_GUI_USE_SDL QT_DLL
329VirtualBox_DEFS.solaris = VBOX_GUI_USE_QIMAGE #VBOX_GUI_USE_SDL
330VirtualBox_DEFS.win = VBOX_GUI_USE_QIMAGE UNICODE QT_DLL
331VirtualBox_DEFS.win.amd64 = VBOX_WITHOUT_QHTTP
332#ifndef VBOX_OSE
333 VirtualBox_DEFS.darwin += VBOX_WITH_HACKED_QT
334#endif
335ifdef VBOX_WITH_ICHAT_THEATER
336 VirtualBox_DEFS.darwin += VBOX_WITH_ICHAT_THEATER
337endif
338ifneq ($(KBUILD_TYPE),release)
339 # non-release builds has some extra features.
340 VirtualBox_DEFS.win += VBOX_GUI_USE_DDRAW
341 VirtualBox_DEFS.linux += VBOX_GUI_USE_QIMAGE
342endif
343ifdef VBOX_WITH_REGISTRATION
344 VirtualBox_DEFS += VBOX_WITH_REGISTRATION
345endif
346ifdef VBOX_WITH_REGISTRATION_REQUEST
347 VirtualBox_DEFS += VBOX_WITH_REGISTRATION_REQUEST
348endif
349ifdef VBOX_WITH_ALSA
350 VirtualBox_DEFS += VBOX_WITH_ALSA
351endif
352ifdef VBOX_WITH_PULSE
353 VirtualBox_DEFS += VBOX_WITH_PULSE
354endif
355ifdef VBOX_WITH_E1000
356 VirtualBox_DEFS += VBOX_WITH_E1000
357endif
358ifdef VBOX_OSE
359 VirtualBox_DEFS += VBOX_OSE
360endif
361ifdef VBOX_WITH_DEBUGGER_GUI
362 VirtualBox_DEFS += VBOX_WITH_DEBUGGER_GUI_MENU
363endif
364
365VirtualBox_INCS = \
366 ./include \
367 $(PATH_VirtualBox)/ui \
368 $(PATH_VirtualBox)/moc \
369 $(PATH_VirtualBox)/include \
370
371
372ifeq ($(KBUILD_TYPE),release)
373 VirtualBox_LDFLAGS.win += /SUBSYSTEM:windows
374else
375 VirtualBox_LDFLAGS.linux+= -rdynamic # for backtrace_symbols()
376 ifeq ($(USERNAME),dmik)
377 VirtualBox_LDFLAGS.win += /SUBSYSTEM:windows
378 else
379 VirtualBox_LDFLAGS.win += /SUBSYSTEM:console
380 endif
381endif
382VirtualBox_LDFLAGS.os2 = -Zlinker /PM:PM -Zno-fork
383VirtualBox_LDFLAGS.darwin = -framework IOKit
384ifdef VBOX_WITH_ICHAT_THEATER
385 VirtualBox_LDFLAGS.darwin += -framework Foundation -framework AppKit -framework InstantMessage -framework QuartzCore
386endif
387VirtualBox_LIBS.win = \
388 $(PATH_SDK_WINPSDK_LIB)/Htmlhelp.Lib \
389 $(PATH_SDK_DXSDK_LIB)/ddraw.lib \
390 $(PATH_SDK_DXSDK_LIB)/dxguid.lib
391VirtualBox_LIBS.os2 += $(PATH_DLL)/VBoxHlp$(VBOX_SUFF_DLL)
392ifeq ($(filter-out freebsd linux netbsd openbsd solaris,$(KBUILD_TARGET)),) # X11
393VirtualBox_LIBS += $(PATH_DLL)/VBoxKeyboard$(VBOX_SUFF_DLL)
394endif
395
396
397ifdef VBOX_WITH_DEBUGGER_GUI ## @todo make this dynamically loadable and ship with release builds too.
398 ifeq ($(KBUILD_TARGET),win)
399 VirtualBox_LIBS += $(PATH_LIB)/VBoxDbg$(VBOX_SUFF_LIB)
400 else
401 VirtualBox_LIBS += $(PATH_DLL)/VBoxDbg$(VBOX_SUFF_DLL)
402 endif
403endif
404
405WRAPPERSFILE = $(PATH_VirtualBox)/include/COMWrappers.h
406WRAPPERSINCFILE = include/COMDefs.h
407WRAPPERSTEMPLATE = include/COMWrappers.xsl
408XIDLFILE = ../../Main/idl/VirtualBox.xidl
409
410VirtualBox_INTERMEDIATES += $(WRAPPERSFILE)
411
412
413# generated files we need to clean manually
414OTHER_CLEAN += \
415 $(VirtualBox_GENSRCS) \
416 $(VirtualBox_GENHDRS) \
417 $(WRAPPERSFILE) \
418 $(PATH_BIN)/vboxkeyboard.tar.gz
419
420
421#
422# On Windows we'll have to generate/edit the resource file.
423# The IDI_ICON1 name is Qt specific.
424#
425$(PATH_TARGET)/VirtualBox.rc: Makefile.kmk $(VBOX_WINDOWS_ICON_FILE) | $$(call DIRDEP,$$(@D))
426 $(RM) -f $@
427 $(APPEND) $@ 'IDI_ICON1 ICON "$(subst /,\\,$(VBOX_WINDOWS_ICON_FILE))"'
428 $(CAT) $@
429
430OTHER_CLEAN.win += $(PATH_TARGET)/VirtualBox.rc
431
432
433#
434# On Mac OS X (darwin) we need to install icon resources and compusory bundle contents.
435#
436INSTALLS.darwin += VirtualBox.app
437VirtualBox.app_INST = $(INST_VIRTUALBOX)Contents/
438VirtualBox.app_MODE = 644
439VirtualBox.app_SOURCES = \
440 src/darwin/PkgInfo \
441 $(PATH_TARGET)/Info.plist \
442 $(VBOX_MACOSX_ICON_FILE)=>Resources/virtualbox.icns
443
444$(PATH_TARGET)/Info.plist: src/darwin/Info.plist $(VBOX_VERSION_MK) | $(call DIRDEP,$(PATH_TARGET))
445 $(call MSG_GENERATE,VirtualBox.app,$<,$@)
446 $(QUIET)$(RM) -f $@
447 $(QUIET)$(SED) \
448 -e 's/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/g' \
449 -e 's/@VBOX_VERSION_MAJOR@/$(VBOX_VERSION_MAJOR)/g' \
450 -e 's/@VBOX_VERSION_MINOR@/$(VBOX_VERSION_MINOR)/g' \
451 -e 's/@VBOX_VERSION_BUILD@/$(VBOX_VERSION_BUILD)/g' \
452 $< > $@
453
454INSTALLS.darwin += VirtualBoxVM.app
455VirtualBoxVM.app_INST = $(VirtualBox.app_INST)Resources/VirtualBoxVM.app/Contents/
456VirtualBoxVM.app_MODE = 644
457VirtualBoxVM.app_SOURCES = \
458 src/darwin/VM-PkgInfo=>PkgInfo \
459 $(PATH_TARGET)/VM-Info.plist=>Info.plist \
460 $(VBOX_MACOSX_ICON_FILE)=>Resources/virtualbox.icns
461VirtualBoxVM.app_SYMLINKS = \
462 MacOS=>../../../MacOS/
463
464$(PATH_TARGET)/VM-Info.plist: src/darwin/VM-Info.plist $(VBOX_VERSION_MK) | $(call DIRDEP,$(PATH_TARGET))
465 $(call MSG_GENERATE,VirtualBoxVM.app,$<,$@)
466 $(QUIET)$(RM) -f $@
467 $(QUIET)$(SED) \
468 -e 's/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/g' \
469 -e 's/@VBOX_VERSION_MAJOR@/$(VBOX_VERSION_MAJOR)/g' \
470 -e 's/@VBOX_VERSION_MINOR@/$(VBOX_VERSION_MINOR)/g' \
471 -e 's/@VBOX_VERSION_BUILD@/$(VBOX_VERSION_BUILD)/g' \
472 --output $@ $<
473
474#
475# Translation installation
476#
477VirtualBox.nls_INST = $(INST_BIN)nls/
478VirtualBox.nls_SOURCES = $(patsubst %.ts,$(PATH_VirtualBox)/nls/%.qm,$(notdir $(VirtualBox_QT_TRANSLATIONS)))
479VirtualBox.nls_SOURCES += $(patsubst %.ts,$(PATH_VirtualBox)/nls/%.qm,$(notdir $(VirtualBox_QT_TRANSLATIONS_QT)))
480VirtualBox.nls_MODE = 644
481
482
483#
484# Testcase for the darwin keyboard routines.
485#
486ifdef VBOX_WITH_TESTCASES
487PROGRAMS.darwin += tstDarwinKeyboard
488tstDarwinKeyboard_TEMPLATE = VBOXR3TSTEXE
489tstDarwinKeyboard_INCS = include
490tstDarwinKeyboard_SOURCES = \
491 src/darwin/tstDarwinKeyboard.cpp \
492 src/darwin/DarwinKeyboard.cpp
493tstDarwinKeyboard_LDFLAGS = -framework IOKit -framework Carbon
494tstDarwinKeyboard_LIBS = \
495 $(LIB_RUNTIME)
496endif
497
498
499
500# Commit the magic.
501# (note: before custom rules that make usage of generated variables!).
502include $(KBUILD_PATH)/footer.kmk
503
504
505
506#
507# Qt source file generation rules
508#
509
510## @todo move QT source generation macros to kBuild
511
512## Generate a rule to create a MOC source file from a header containing
513# classes that use the Q_OBJECT macro.
514# @param $mochdr header file with Q_OBJECT
515define def_qt_gen_src_moc
516
517$(eval mocsrc := $(PATH_$(target))/moc/moc_$(notdir $(basename $(mochdr))).cpp)
518
519$(target)_GENSRCS_REAL += $(mocsrc)
520
521$(mocsrc): $(mochdr)
522 $$(call MSG_TOOL,moc,$(target),$(mochdr),$$@)
523 $$(QUIET)$$(MKDIR) -p $$(@D)
524 $$(QUIET)$$(VBOX_MOC) $(mochdr) -o $$@
525
526endef
527
528## Generate a rule to create a MOC include file from a source containing
529# local classes that use the Q_OBJECT macro. This include is then included
530# by that source, so it must be generated before the source gets compiled.
531# @param $mocsrc source file with Q_OBJECT
532define def_qt_gen_inc_moc
533
534$(eval mocobj := $(PATH_$(target)_$(mocsrc))/$(notdir $(basename $(mocsrc)))$(VBOX_SUFF_OBJ))
535$(eval mocinc := $(PATH_$(target))/moc/$(notdir $(basename $(mocsrc))).moc)
536
537$(target)_GENHDRS_REAL += $(mocinc)
538$(target)_INTERMEDIATES += $(mocinc)
539
540$(mocobj): $(mocinc)
541
542$(mocinc): $(mocsrc)
543 $$(call MSG_TOOL,moc,$(target),$(mocsrc),$$@)
544 $$(QUIET)$$(MKDIR) -p $$(@D)
545 $$(QUIET)$$(VBOX_MOC) -i $(mocsrc) -o $$@
546
547endef
548
549## Generate a rule to create a MOC include file from a UI header (ui.h) containing
550# local classes that use the Q_OBJECT macro. This include is then included
551# by that header, so it must be generated before the UI source gets compiled.
552# @param $mocuihdr UI header file with Q_OBJECT
553define def_qt_gen_inc_mocuihdr
554
555$(eval uisrc := $(PATH_$(target))/ui/$(notdir $(basename $(basename $(mocuihdr)))).cpp)
556$(eval mocuiinc := $(PATH_$(target))/moc/$(notdir $(basename $(mocuihdr))).moc)
557
558$(target)_GENHDRS_REAL += $(mocuiinc)
559$(target)_INTERMEDIATES += $(mocuiinc)
560
561$(uisrc): $(mocuiinc)
562$(mocuiinc): $(mocuihdr)
563 $$(call MSG_TOOL,moc,$(target),$(mocuihdr),$$@)
564 $$(QUIET)$$(MKDIR) -p $$(@D)
565 $$(QUIET)$$(VBOX_MOC) -i $(mocuihdr) -o $$@
566
567endef
568
569## Generate a rule to create a header and source files from an UI
570# definition source (.ui).
571# @param $uifile UI definintion source file
572define def_qt_gen_src_ui
573
574$(eval uisrc := $(PATH_$(target))/ui/$(notdir $(basename $(uifile))).cpp)
575$(eval uihdr := $(PATH_$(target))/ui/$(notdir $(basename $(uifile))).h)
576$(eval mocsrc := $(PATH_$(target))/moc/moc_$(notdir $(basename $(uifile))).cpp)
577
578$(target)_GENSRCS_REAL += $(uisrc) $(mocsrc)
579$(target)_GENHDRS_REAL += $(uihdr)
580$(target)_INTERMEDIATES += $(uihdr)
581
582$(uihdr): $(uifile) | $$(call DIRDEP,$(dir $(uihdr)))
583 $$(call MSG_TOOL,uic,$(target),$(uifile),$$@)
584 $$(QUIET)$$(VBOX_UIC) $(uifile) -o $$@
585
586$(uisrc): $(uihdr) $(uifile) $(wildcard $(uifile).h) | $$(call DIRDEP,$(dir $(uisrc)))
587 $$(call MSG_TOOL,uic,$(target),$(uifile),$$@)
588 $$(QUIET)$$(VBOX_UIC) $(uifile) -i $(uihdr) -o $$@
589
590$(mocsrc): $(uihdr) | $$(call DIRDEP,$(dir $(mocsrc)))
591 $$(call MSG_TOOL,moc,$(target),$(uihdr),$$@)
592 $$(QUIET)$$(VBOX_MOC) $(uihdr) -o $$@
593
594endef
595
596## Generate a rule to create a .qm file from a NLS translation
597# source (.ts).
598# @param $tsfile Translation source file
599define def_qt_gen_nls
600
601$(eval qmfile := $(PATH_$(target))/nls/$(notdir $(basename $(tsfile))).qm)
602
603OTHER_CLEAN += $(qmfile)
604
605# Note that we use -nocompress in lrelease to avoid stripping comments and
606# other information from .qm files. If we don't do that, we get .qm files two
607# times smaller, but QTranslator::findMessage() will start searching for
608# translations in all existing contexts in case if it cannot find it in the
609# original context (which is of course not acceptable, no matter if it's a
610# special Qt "feature" or just a bug).
611
612$(qmfile): $(tsfile) | $$(call DIRDEP,$(dir $(qmfile)))
613 $$(call MSG_TOOLS,lrelease,$(target),$(tsfile),$$@)
614 $$(QUIET)$$(VBOX_LRELEASE) -nocompress $(tsfile) -qm $$@
615
616endef
617
618## Generate rules for generating the Qt source for a target.
619# @param $target Target name.
620define def_qt_gen_src
621
622# moc srcs from hdrs with Q_OBJECT
623$(foreach mochdr,$($(target)_QT_MOCHDRS),$(eval $(def_qt_gen_src_moc)))
624# moc includes from srcs with Q_OBJECT
625$(foreach mocsrc,$($(target)_QT_MOCSRCS),$(eval $(def_qt_gen_inc_moc)))
626# moc includes from UI headers with Q_OBJECT
627$(foreach mocuihdr,$($(target)_QT_MOCUIHDRS),$(eval $(def_qt_gen_inc_mocuihdr)))
628# UI sources
629$(foreach uifile,$($(target)_QT_UISRCS),$(eval $(def_qt_gen_src_ui)))
630# NLS files
631$(foreach tsfile,$($(target)_QT_TRANSLATIONS),$(eval $(def_qt_gen_nls)))
632$(foreach tsfile,$($(target)_QT_TRANSLATIONS_QT),$(eval $(def_qt_gen_nls)))
633# dirs
634$$(call DIRDEP,$(PATH_$(target))/ui/) \
635$$(call DIRDEP,$(PATH_$(target))/moc/) \
636$$(call DIRDEP,$(PATH_$(target))/nls/):
637 $$(call MSG_MKDIR,$$@)
638 $$(QUIET)$$(MKDIR) -p $$@
639
640endef
641
642# Generate Qt source rules.
643$(foreach target,VirtualBox,$(eval $(def_qt_gen_src)))
644
645
646# Generate COM Wrappers
647$(WRAPPERSINCFILE): $(WRAPPERSFILE)
648
649$(WRAPPERSFILE): $(XIDLFILE) $(WRAPPERSTEMPLATE) | $(call DIRDEP,$(PATH_VirtualBox)/include/)
650 $(call MSG_TOOL,xsltproc,VirtualBox,$<,$@)
651 $(QUIET)$(VBOX_XSLTPROC) -o $@ $(WRAPPERSTEMPLATE) $<
652
653$(call DIRDEP,$(PATH_VirtualBox)/include/):
654 $(call MSG_MKDIR,$@)
655 $(QUIET)$(MKDIR) -p $@
656
657# static images imported from VBoxUI.pro as VirtualBox_QT_IMAGES
658$(PATH_VirtualBox)/ui/vbox_image_collection.txt: VBoxUI.pro $(VirtualBox_QT_IMAGES)
659 $(RM) -f $@
660 $(APPEND) -v $@ VirtualBox_QT_IMAGES
661
662$(PATH_VirtualBox)/ui/vbox_image_collection.cpp: $(PATH_VirtualBox)/ui/vbox_image_collection.txt
663 $(call MSG_TOOL,uic,VirtualBox,$<,$@)
664 $(QUIET)$(VBOX_UIC) -o $@ -embed VBoxGUI -f $<
665
666VirtualBox_GENSRCS += $(PATH_VirtualBox)/ui/vbox_image_collection.cpp
667OTHER_CLEAN += $(PATH_VirtualBox)/ui/vbox_image_collection.txt
668
669
670#
671# Hand made dependencies go here.
672# Basically, here are dependencies for generated UI source files that
673# include generated headers in turn.
674#
675
676$(PATH_VirtualBox)/ui/VBoxDiskImageManagerDlg.cpp: \
677 $(PATH_VirtualBox)/ui/VBoxNewHDWzd.h
678
679# Make all generated UI sources dependent on all generated headers (since they
680# may include them). This is safer than indifidual dependencies above but
681# currently disabled, because will cause all UI sources to be rebuilt one a
682# single one changes.
683#$(patsubst %,$(PATH_VirtualBox)/ui/%.cpp,$(notdir $(basename $(VirtualBox_QT_UISRCS)))) : $(VirtualBox_GENHDRS)
684
685
686#
687# Custom targets
688#
689
690# Update all known NLS translation (.ts) files in the nls/ subdirectory.
691# NOTE: This target is intened to be run only by the GUI maintainer shortly
692# before a new product release. VirtualBox_xx_YY.ts is a template for new
693# languages and should never be actually translated or installed.
694updatenls: $(VirtualBox_SOURCES) $(VirtualBox_HEADERS)
695 $(call MSG_L1,lupdate all languages (nls/*.ts))
696 $(QUIET)$(VBOX_LUPDATE) $^ -ts $(VirtualBox_QT_TRANSLATIONS) nls/VirtualBox_xx_YY.ts
697
698
699#
700# Test targets
701#
702
703test:
704 @echo ====================
705 @echo $(VirtualBox_GENSRCS) | $(SED) -e "s/ /\n/g"
706 @echo --------------------
707 @echo $(VirtualBox_GENSRCS_REAL) | $(SED) -e "s/ /\n/g"
708 @echo ====================
709 @echo $(VirtualBox_GENHDRS) | $(SED) -e "s/ /\n/g"
710 @echo --------------------
711 @echo $(VirtualBox_GENHDRS_REAL) | $(SED) -e "s/ /\n/g"
712 @echo ====================
713
714test2:
715 @echo $(OTHER_CLEAN) | $(SED) -e "s/ /\n/g"
716
717test3:
718 @echo $(VirtualBox_HEADERS) | $(SED) -e "s/ /\n/g"
719
720testwrappers: $(WRAPPERSFILE)
721
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