# $Id: Makefile.kmk 11890 2008-08-31 19:50:49Z vboxsync $ ## @file # Makefile for the Linux installer. # # # Copyright (C) 2006-2007 Sun Microsystems, Inc. # # This file is part of VirtualBox Open Source Edition (OSE), as # available from http://www.virtualbox.org. This file is free software; # you can redistribute it and/or modify it under the terms of the GNU # General Public License (GPL) as published by the Free Software # Foundation, in version 2 as it comes in the "COPYING" file of the # VirtualBox OSE distribution. VirtualBox OSE is distributed in the # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. # # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa # Clara, CA 95054 USA or visit http://www.sun.com if you need # additional information or have any questions. # DEPTH = ../../../.. include $(KBUILD_PATH)/header.kmk ifneq ($(KBUILD_HOST),linux) $(error "The Linux installer can only be built on Linux!") # yeah, right. endif VBOX_NO_LINUX_RUN_INSTALLER ?= $(VBOX_OSE) PACKAGE_NAME = VirtualBox-$(VBOX_VERSION_STRING)-r$(VBOX_SVN_REV).run PACKING = $(if $(VBOX_NO_LINUX_RUN_INSTALLER),,\ $(PATH_BIN)/$(PACKAGE_NAME) $(PATH_BIN)/VirtualBox-dbg.tar.bz2) PACKING += $(PATH_BIN)/VirtualBox.tar.bz2 ifdef VBOX_ONLY_SDK SDK_ZIP = $(PATH_BIN)/VirtualBoxSDK-$(VBOX_VERSION_STRING)-r$(VBOX_SVN_REV).zip PACKING = $(SDK_ZIP) endif OTHER_CLEAN = $(addprefix $(PATH_TARGET)/install/,\ install.sh deffiles routines.sh \ VBoxAddIF.sh vboxdrv.sh vboxnet.sh \ VirtualBox.tar.bz2 LICENSE) \ $(wildcard $(PATH_TARGET)/VirtualBox-*) \ $(PATH_TARGET)/vboxdrv.sh $(PATH_TARGET)/vboxnet.sh INSTALLS = linux-bin linux-doc # # Linux installs. # linux-bin_INST = bin/ linux-bin_MODE = a+rx,u+w linux-bin_SOURCES = \ VBoxSysInfo.sh \ VBox.sh=>VBox.sh linux-doc_INST = bin/ linux-doc_MODE = a+r,u+w linux-doc_SOURCES = \ $(if $(VBOX_OSE),,$(PATH_ROOT)/doc/License.txt=>LICENSE) \ $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/images/$(if $(VBOX_OSE),OSE,NonOSE)/VirtualBox_32px.png=>VBox.png # Strip these binaries LINUXSTRIPBIN = \ VBoxDD.so \ VBoxDD2.so \ $(if $(VBOX_WITH_FFMPEG),VBoxFFmpegFB.so,) \ VBoxManage \ VBoxREM.so \ VBoxRT.so \ $(if $(VBOX_WITH_VBOXSDL),VBoxSDL $(if $(VBOX_WITH_HARDENING),VBoxSDL.so),) \ VBoxSettings.so \ VBoxSVC \ VBoxDDU.so \ VBoxVMM.so \ VBoxXPCOM.so \ VBoxXPCOMIPCD \ $(if $(VBOX_WITH_PYTHON),VBoxPython.so,) \ VBoxTunctl \ components/VBoxC.so \ components/VBoxSVCM.so \ components/VBoxXPCOMIPCC.so # Do not remove relocation information of these binaries LINUXSTRIPOBJ = \ VBoxDD2GC.gc \ VBoxDD2R0.r0 \ VBoxDDGC.gc \ VBoxDDR0.r0 \ VMMGC.gc \ VMMR0.r0 ifeq ($(KBUILD_TARGET_ARCH),amd64) LINUXSTRIPOBJ += \ VBoxREM2.rel endif # Do not strip anything of these files LINUXNOSTRIP = \ $(if $(VBOX_OSE),,LICENSE) \ $(if $(VBOX_WITH_QT4GUI),\ $(if $(VBOX_OSE),,License-$(VBOX_LICENSE_VER).html)) \ components/VBoxXPCOMBase.xpt \ components/VirtualBox_XPCOM.xpt \ VBoxSysInfo.sh \ VBox.sh \ VBox.png \ VBoxAddIF.sh \ $(if $(VBOX_WITH_QT4GUI),VirtualBox.desktop,) \ src # Qt4 GUI ifdef VBOX_WITH_QT4GUI LINUXSTRIPBIN += \ VBoxKeyboard.so \ VirtualBox \ $(if $(VBOX_WITH_HARDENING),VirtualBox.so) LINUXNOSTRIP += \ $(if $(VBOX_WITH_QT4_SUN),$(notdir $(wildcard $(PATH_BIN)/libVBox*)),) \ $(foreach f,\ $(shell $(CAT_EXT) \ $(PATH_ROOT)/src/VBox/Frontends/VirtualBox4/nls/ApprovedLanguages.txt),\ nls/VirtualBox_$(f).qm nls/qt_$(f).qm) endif # Guest Additions LINUXNOSTRIP += \ $(if $(VBOX_OSE),,additions/VBoxGuestAdditions.iso) # Shared Folders LINUXSTRIPBIN += \ VBoxSharedFolders.so \ $(if $(VBOX_OSE),,VRDPAuth.so) # Shared Clipboard LINUXSTRIPBIN += \ VBoxSharedClipboard.so \ $(if $(VBOX_WITH_DEBUGGER_GUI),VBoxDbg.so,) # Shared Info Services LINUXSTRIPBIN += \ $(if $(VBOX_WITH_GUEST_PROPS),VBoxGuestPropSvc.so) ifdef VBOX_WITH_DOCS LINUXNOSTRIP += \ UserManual.pdf LINUXSTRIPBIN += \ $(if $(VBOX_WITH_KCHMVIEWER),kchmviewer,) ifneq ($(wildcard $(PATH_BIN)/VirtualBox.chm),) # our 64-bit tinderboxes are not able to generate VirtualBox.chm so far # but for building .deb/.rpm packages we use precompiled binaries. LINUXNOSTRIP += \ VirtualBox.chm endif endif ifdef VBOX_WITH_VRDP LINUXSTRIPBIN += \ VBoxVRDP.so LINUXNOSTRIP += \ rdesktop-vrdp.tar.gz ifdef VBOX_WITH_VRDP_RDESKTOP LINUXNOSTRIP += \ rdesktop-vrdp-keymaps LINUXSTRIPBIN += \ rdesktop-vrdp endif endif ifdef VBOX_WITH_HEADLESS LINUXSTRIPBIN += \ VBoxHeadless \ $(if $(VBOX_WITH_HARDENING),VBoxHeadless.so) endif ifdef VBOX_WITH_WEBSERVICES LINUXSTRIPBIN += \ vboxwebsrv \ webtest endif LINUXARCHFILES := $(LINUXSTRIPBIN) $(LINUXSTRIPOBJ) $(LINUXNOSTRIP) DBGPATH := usr/lib/debug/opt/VirtualBox-$(VBOX_VERSION_STRING) OTHER_CLEAN += $(addprefix $(PATH_TARGET)/archive/,$(LINUXARCHFILES)) \ $(addprefix $(PATH_TARGET)/archive-dbg/$(DBGPATH)/,$(LINUXSTRIPBIN)) include $(KBUILD_PATH)/footer.kmk $(PATH_BIN)/$(PACKAGE_NAME): \ $(PATH_TARGET)/install/VirtualBox.tar.bz2 \ install.sh \ $(VBOX_VERSION_STAMP) \ routines.sh \ deffiles \ $(PATH_TARGET)/vboxnet.sh \ $(PATH_TARGET)/vboxdrv.sh \ $(if $(VBOX_OSE),,$(PATH_ROOT)/doc/License.txt) $(call MSG_TOOL,makeself,,$@) $(QUIET)$(RM) -f $(wildcard $(PATH_BIN)/VirtualBox-*.run) $(QUIET)$(SED) \ -e "s;_VERSION_;$(VBOX_VERSION_STRING);g" \ -e "s;_BUILD_;$(date-utc );g" \ -e "s;_ARCH_;$(KBUILD_TARGET_ARCH);g" \ -e "s;_HARDENED_;$(VBOX_WITH_HARDENING);g" \ < install.sh > $(PATH_TARGET)/install/install.sh $(QUIET)chmod 0744 $(PATH_TARGET)/install/install.sh $(QUIET)$(INSTALL) -m 0755 routines.sh $(PATH_TARGET)/install $(QUIET)$(INSTALL) -m 0755 deffiles $(PATH_TARGET)/install $(QUIET)$(if $(VBOX_OSE),,$(INSTALL) -m 0644 $(PATH_ROOT)/doc/License.txt $(PATH_TARGET)/install/LICENSE) $(QUIET)$(INSTALL) -m 0755 $(PATH_TARGET)/vboxnet.sh $(PATH_TARGET)/install $(QUIET)$(INSTALL) -m 0755 $(PATH_TARGET)/vboxdrv.sh $(PATH_TARGET)/install $(QUIET)$(RM) -f $@ $(QUIET)$(VBOX_MAKESELF) --follow --nocomp $(PATH_TARGET)/install $@ \ "VirtualBox for Linux installation" ./install.sh "\$$0 1> /dev/null" $(PATH_BIN)/VirtualBox-dbg.tar.bz2: \ $(addprefix $(PATH_TARGET)/archive-dbg/$(DBGPATH)/, $(LINUXSTRIPBIN)) $(call MSG_L1,Packing $@) $(QUIET)tar --owner 0 --group 0 -cjRhf $@ -C $(PATH_TARGET)/archive-dbg \ $(addprefix $(DBGPATH)/,$(LINUXSTRIPBIN)) $(PATH_TARGET)/vboxdrv.sh: vboxdrv.sh.in $(QUIET)$(SED_EXT) -e "s|%NOLSB%|yes|g; s|%PACKAGE%|virtualbox|g" $< > $@ $(PATH_TARGET)/vboxnet.sh: vboxnet.sh.in $(QUIET)$(SED_EXT) -e "s|%NOLSB%|yes|g" $< > $@ # .tar.bz2 for converting into .run $(PATH_TARGET)/install/VirtualBox.tar.bz2: \ $(SDK_ZIP) \ $(addprefix $(PATH_TARGET)/archive/, $(LINUXARCHFILES)) \ Makefile.kmk \ $(VBOX_VERSION_STAMP) \ $(PATH_TARGET)/VirtualBox-$(VBOX_VERSION_STRING) $(call MSG_L1,Packing $@) $(QUIET)$(MKDIR) -p $(@D) $(QUIET)tar --owner 0 --group 0 -cjRhf $@ -C $(PATH_TARGET)/VirtualBox-$(VBOX_VERSION_STRING) $(LINUXARCHFILES) $(QUIET)chmod 0644 $@ # .tar.bz2 for distribution $(PATH_BIN)/VirtualBox.tar.bz2: \ $(addprefix $(PATH_TARGET)/archive/, $(LINUXARCHFILES)) \ Makefile.kmk \ $(VBOX_VERSION_STAMP) \ $(PATH_TARGET)/VirtualBox-$(VBOX_VERSION_STRING) $(call MSG_L1,Packing $@) $(QUIET)$(MKDIR) -p $(PATH_TARGET) $(QUIET)tar --owner 0 --group 0 -cjRhf $@ -C $(PATH_TARGET) \ $(addprefix VirtualBox-$(VBOX_VERSION_STRING)/,$(LINUXARCHFILES)) ifneq ($(SDK_ZIP),) # make separate VirtualBox SDK delivery $(SDK_ZIP): \ $(PATH_BIN)/sdk \ $(VBOX_VERSION_STAMP) $(call MSG_L1,Making SDK delivery $@) $(QUIET)$(REDIRECT) -C $(PATH_BIN) -- zip -r9 $@ sdk > /dev/null endif $(PATH_TARGET)/VirtualBox-$(VBOX_VERSION_STRING): $(PATH_TARGET)/archive $(call MSG_INST_SYM,$<,$@) $(QUIET)$(MKDIR) -p $(@D) $(QUIET)$(RM) -Rf -- $@ $(QUIET)$(LN_SYMLINK) $< $@ $(PATH_BIN)/VBoxAddIF.sh: VBoxAddIF.sh $(VBOX_VERSION_STAMP) $(call MSG_GENERATE,,$@,$<) $(QUIET)$(SED) -e "s;_VERSION_;$(VBOX_VERSION_STRING);g" $< > $@ $(QUIET)chmod 0755 $@ $(PATH_BIN)/VirtualBox.desktop: VirtualBox.desktop $(VBOX_VERSION_STAMP) $(call MSG_GENERATE,,$@,$<) ifdef VBOX_PATH_PACKAGE_DOCS $(QUIET)$(SED) -e "s+\$$VBOX_DOC_PATH+$(VBOX_PATH_PACKAGE_DOCS)+" $< > $@ else $(QUIET)$(SED) -e "s+\$$VBOX_DOC_PATH+/opt/VirtualBox-$(VBOX_VERSION_STRING)+" $< > $@ endif $(addprefix $(PATH_TARGET)/archive/,$(LINUXSTRIPBIN)): \ $(PATH_TARGET)/archive/% : $(PATH_BIN)/% \ $(if $(VBOX_NO_LINUX_RUN_INSTALLER),,\ $(PATH_TARGET)/archive-dbg/$(DBGPATH)/%) \ | $$(call DIRDEP,$$(dir $$@)) $(call MSG_INST_FILE,$<,$@) $(QUIET)$(INSTALL) -m 0755 $(if $(VBOX_DO_STRIP),-s,) $< $@ $(QUIET)$(if $(VBOX_NO_LINUX_RUN_INSTALLER),,objcopy --add-gnu-debuglink=$(subst $(PATH_TARGET)/archive,$(PATH_TARGET)/archive-dbg/$(DBGPATH),$@) $@) $(addprefix $(PATH_TARGET)/archive/,$(LINUXSTRIPOBJ)): \ $(PATH_TARGET)/archive/% : $(PATH_BIN)/% \ | $$(call DIRDEP,$$(dir $$@)) $(call MSG_INST_FILE,$<,$@) ifeq ($(VBOX_DO_STRIP),) $(QUIET)$(INSTALL) -m 0644 $< $@ else # strip to temp file because of umask. $(QUIET)objcopy --strip-unneeded -R .comment $< $@.tmp $(QUIET)$(INSTALL) -m 0644 $@.tmp $@ $(QUIET)$(RM) -f -- $@.tmp endif $(addprefix $(PATH_TARGET)/archive/,$(LINUXNOSTRIP)): \ $(PATH_TARGET)/archive/% : $(PATH_BIN)/% \ | $$(call DIRDEP,$$(dir $$@)) $(call MSG_INST_SYM,$<,$@) $(QUIET)$(RM) -f $@ $(QUIET)$(MKDIR) -p $(@D) $(QUIET)$(LN_SYMLINK) $< $@ $(foreach d,archive archive/components archive/nls archive/additions archive-dbg/$(DBGPATH) archive-dbg/$(DBGPATH)/components install,$(PATH_TARGET)/$(d)/): $(QUIET)$(MKDIR) -p $@ $(addprefix $(PATH_TARGET)/archive-dbg/$(DBGPATH)/,$(LINUXSTRIPBIN)): \ $(PATH_TARGET)/archive-dbg/$(DBGPATH)/% : $(PATH_BIN)/% \ | $(call DIRDEP,$(PATH_TARGET)/archive-dbg/$(DBGPATH)/components) $(call MSG_TOOL,copydbg,$<,$@) $(QUIET)objcopy --only-keep-debug $< $@