VirtualBox

vbox的更動 64006 路徑 trunk/src/VBox/Installer


忽略:
時間撮記:
2016-9-26 下午12:55:19 (8 年 以前)
作者:
vboxsync
訊息:

Installer/win/Makefile.kmk: Attempt at making the multilingual installer support work again.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Installer/win/Makefile.kmk

    r63990 r64006  
    4949
    5050
    51 #
    52 # Globals and targets.
     51
     52#
     53# Globals.
     54#
     55VBOX_WIN_INST_MAKEFILE_DEP := $(MAKEFILE_CURRENT)
     56
     57VBOX_PATH_WIN_INST_SRC := $(PATH_SUB_CURRENT)
     58VBOX_WIN_INST_OUT_DIR  := $(PATH_TARGET)/Installer/win
     59
    5360# Note: en_US *must* come first for the dependency file generation.
    54 #
    5561ifndef VBOX_INSTALLER_LANGUAGES
    5662 VBOX_INSTALLER_LANGUAGES  = en_US de_DE fr_FR it_IT zh_TW
    5763 VBOX_INSTALLER_LANGUAGES += $(VBOX_INSTALLER_ADD_LANGUAGES)
    5864endif
     65
    5966
    6067#
     
    7380
    7481#
     82# Language IDs.
     83#
     84VBOX_BRAND_en_US_LANG_ID ?= 1033
     85VBOX_BRAND_de_DE_LANG_ID ?= 1031
     86VBOX_BRAND_fr_FR_LANG_ID ?= 1036
     87VBOX_BRAND_it_IT_LANG_ID ?= 1040
     88VBOX_BRAND_zh_TW_LANG_ID ?= 1028
     89
     90# Standard language names (in the native language), to be extended as we go.
     91# VBOX_BRAND_$(lang)_LANG_NAME must be defined for each language which occurs
     92# in either VBOX_LICENSE_ADD_LANGUAGES or VBOX_MANUAL_ADD_LANGUAGES.
     93VBOX_BRAND_fr_FR_LANG_NAME := Français
     94
     95
     96#
    7597# We don't have the license text in another language than English yet,
    7698# so just define the branding targets to use the English one for now.
     
    81103        $(eval VBOX_BRAND_$(lang)_LICENSE_RTF := $(VBOX_BRAND_LICENSE_RTF)))
    82104
     105#
    83106# Set the codepage for all languages to 1252, covers most cases.
     107#
    84108$(foreach lang,$(sort $(VBOX_INSTALLER_LANGUAGES) $(VBOX_LICENSE_ADD_LANGUAGES) $(VBOX_MANUAL_ADD_LANGUAGES)), \
    85109        $(eval VBOX_BRAND_$(lang)_LANGUAGE_CODEPAGE := 1252))
    86 
    87 # Some languages need another codepage than 1252. Override them here.
     110# Exceptions:
    88111VBOX_BRAND_zh_TW_LANGUAGE_CODEPAGE := 950
    89112
    90 # Standard language names (in the native language), to be extended as we go.
    91 # VBOX_BRAND_$(lang)_LANG_NAME must be defined for each language which occurs
    92 # in either # VBOX_LICENSE_ADD_LANGUAGES or VBOX_MANUAL_ADD_LANGUAGES.
    93 VBOX_BRAND_fr_FR_LANG_NAME := Français
    94 
    95 VBOX_PATH_WIN_INST_SRC := $(PATH_SUB_CURRENT)
    96 VBOX_WIN_INST_OUT_DIR := $(PATH_TARGET)/Installer/win
     113
    97114
    98115#
     
    136153BLDDIRS += \
    137154        $(VBOX_WIN_INST_OUT_DIR) \
     155        $(foreach lang,$(VBOX_INSTALLER_LANGUAGES),$(VBOX_WIN_INST_OUT_DIR)/$(lang)/) \
    138156        $(VBOX_WIN_INST_OUT_DIR)/NLS/
    139157
     
    149167                $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
    150168                $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
    151                 $(VBOX_WIN_INST_OUT_DIR)/NLS/$(lang).mst \
    152                 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixobj \
    153                 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixobj.dep \
    154                 $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).wixpdb \
    155                 $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).msi) \
     169                $(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(lang).mst \
     170                $(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(PACKAGE_NAME_LANG)_$(lang).wixpdb \
     171                $(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(PACKAGE_NAME_LANG)_$(lang).msi \
     172                $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wixobj \
     173                $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wixobj.dep )\
    156174        $(VBOX_WIN_INST_OUT_DIR)/DirComponentsAndFiles_DTrace.wxi \
    157175        $(VBOX_WIN_INST_OUT_DIR)/Files_Main.wxi \
    158176        $(VBOX_WIN_INST_OUT_DIR)/Files_Doc.wxi \
    159177        $(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi \
    160         $(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi
     178        $(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi \
     179        $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG).msi \
    161180
    162181ifdef VBOX_WITH_COMBINED_PACKAGE
     
    250269#
    251270define def_vbox_license_xml
    252 $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl: $(license_file) $(MAKEFILE_CURRENT) | $$$$(dir $$$$@)
     271$(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl: $(license_file) $(VBOX_WIN_INST_MAKEFILE_DEP) | $$$$(dir $$$$@)
    253272        $$(call MSG_GENERATE,,$$@,$$<)
    254273        $(APPEND) -t $$@ '<?xml version="1.0" encoding="utf-8"?>'
     
    277296#       argument. The -t switch makes it truncate the file.
    278297#
    279 $(VBOX_WIN_INST_OUT_DIR)/Files_Main.wxi: $(MAKEFILE_CURRENT) | $$(dir $$@)
     298$(VBOX_WIN_INST_OUT_DIR)/Files_Main.wxi: $(VBOX_WIN_INST_MAKEFILE_DEP) | $$(dir $$@)
    280299        $(call MSG_GENERATE,,$@,$<)
    281300        $(APPEND) -t $@ '<?xml version="1.0" ?>'
     
    288307        $(APPEND) $@ '</Include>'
    289308
    290 $(VBOX_WIN_INST_OUT_DIR)/Files_Doc.wxi: $(MAKEFILE_CURRENT) | $$(dir $$@)
     309$(VBOX_WIN_INST_OUT_DIR)/Files_Doc.wxi: $(VBOX_WIN_INST_MAKEFILE_DEP) | $$(dir $$@)
    291310        $(call MSG_GENERATE,,$@,$<)
    292311        $(APPEND) -t $@ '<?xml version="1.0" ?>'
     
    301320        $(APPEND) $@ '</Include>'
    302321
    303 $(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi: $(MAKEFILE_CURRENT) | $$(dir $$@)
     322$(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi: $(VBOX_WIN_INST_MAKEFILE_DEP) | $$(dir $$@)
    304323        $(call MSG_GENERATE,,$@,$<)
    305324        $(APPEND) -t $@ '<?xml version="1.0" ?>'
     
    312331        $(APPEND) $@ '</Include>'
    313332
    314 $(VBOX_WIN_INST_OUT_DIR)/DirComponentsAndFiles_DTrace.wxi: $(MAKEFILE_CURRENT) $(PATH_SUB_CURRENT)/../Config.kmk | $$(dir $$@)
     333$(VBOX_WIN_INST_OUT_DIR)/DirComponentsAndFiles_DTrace.wxi: $(VBOX_WIN_INST_MAKEFILE_DEP) $(PATH_SUB_CURRENT)/../Config.kmk | $$(dir $$@)
    315334        $(call MSG_GENERATE,,$@,$<)
    316335        $(QUIET)$(APPEND) -nt "$@" \
     
    352371
    353372
    354 $(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi: $(MAKEFILE_CURRENT) | $$(dir $$@)
     373$(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi: $(VBOX_WIN_INST_MAKEFILE_DEP) | $$(dir $$@)
    355374        $(call MSG_GENERATE,,$@,$<)
    356375        $(APPEND) -t $@ '<?xml version="1.0" ?>'
     
    382401
    383402#
    384 # .MSI link (all languages).
     403# .MSI linking (all languages).
     404#
     405# Create per language MSIs.  Only the en_US one will be used in full, the others
     406# will be diffed against and merged into it.
    385407#
    386408# Note: This will clean up any previous .msi and .wixpdb files to prevent dep
     
    388410#
    389411define def_vbox_link_msi
    390 $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).msi \
     412$(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(PACKAGE_NAME_LANG)_$(lang).msi \
    391413$(if-expr defined(VBOX_WITH_COMBINED_PACKAGE) && $(lang) == "en_US", + $(VBOX_WIN_INST_OUT_DIR)/common.cab,): \
    392                 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixobj \
     414                $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wixobj \
    393415                $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
    394416                $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
    395417                $(PATH_STAGE_BIN)/VBoxInstallHelper.dll \
    396418                $(VBOX_SVN_REV_KMK) \
    397                 $(MAKEFILE_CURRENT) \
     419                $(VBOX_WIN_INST_MAKEFILE_DEP) \
    398420                $(if-expr defined(VBOX_WITH_MSI_HACK),$(MsiHack_0_OUTDIR)/MsiHack.dll,) \
    399421                $(if-expr defined(VBOX_WITH_MSI_HACK),$(MsiHack_0_OUTDIR)/MsiHackExtension.dll,) \
    400422                | $$$$(dir $$$$@)
    401423        $$(call MSG_L1,Linking installer $$@)
    402         $(QUIET)$(RM) -f $$(wildcard $$(@D)/$(PACKAGE_BASE)-r*_$(lang).msi \
    403                 $$(@D)/$(PACKAGE_BASE)-r*_$(lang).wixpdb $$(@D)/$(lang)/$(PACKAGE_BASE)-r*_$(lang).wixpdb)
    404         $(QUIET)$(MKDIR) -p -- $$(@D)/$(lang)/
    405         kmk_time \
    406         $(VBOX_PATH_WIX)/light.exe -v -nologo \
     424        $(QUIET)$(RM) -f $$(wildcard $$(@D)/$(PACKAGE_BASE)-r*_$(lang).msi $$(@D)/$(PACKAGE_BASE)-r*_$(lang).wixpdb)
     425        kmk_time $(VBOX_PATH_WIX)/light.exe -v -nologo \
    407426                -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/Language_$(lang).wxl \
    408427                -loc $(VBOX_WIN_INST_OUT_DIR)/NLS/License_$(lang).wxl \
     
    411430               $(if-expr defined(VBOX_WITH_MSI_HACK),-ext $(MsiHack_0_OUTDIR)/MsiHackExtension.dll,) \
    412431                $(VBOX_MSI_ICE_IGNORE) \
    413                 -out $$(@D)/$(lang)/$$(@F) \
     432                -out $$@ \
    414433                $$< \
    415434                $(if-expr "$(KBUILD_TARGET_ARCH)" == "x86", \
    416435                        $(VBOX_PATH_WIX)/difxapp_x86.wixlib, \
    417436                        $(VBOX_PATH_WIX)/difxapp_x64.wixlib)
    418         $(MV) -f -- $$(@D)/$(lang)/$$(@F) $$@
    419437ifdef VBOX_WITH_COMBINED_PACKAGE
    420438 ifeq ($(lang),en_US)
    421         $(MV) -f -- $$(@D)/$(lang)/common.cab $$(@D)/common.cab
    422  endif
    423 endif
    424         $(RM) -f -- $(VBOX_WIN_INST_OUT_DIR)/NLS/$(lang).mst \
    425                 $$(@D)/$(lang)/$(PACKAGE_NAME_LANG)_$(lang).wixpdb \
    426                 $$(@D)/$(lang)/common.cab
    427         $(call VBOX_SIGN_FILE_FN,$$@,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV) ($(KBUILD_TARGET_ARCH)),,,disable-dual-signing)
     439        $(MV) -f -- $$(@D)/common.cab $$(@D)/../common.cab
     440 endif
     441endif
     442        $(RM) -f -- $$(@D)/$(PACKAGE_NAME_LANG)_$(lang).wixpdb $$(@D)/common.cab
    428443endef
    429444
     
    444459                $(PATH_STAGE_BIN)/VBoxInstallHelper.dll \
    445460                $(VBOX_SVN_REV_KMK) \
    446                 $(MAKEFILE_CURRENT) \
     461                $(VBOX_WIN_INST_MAKEFILE_DEP) \
    447462                | $$$$(dir $$$$@)
    448463        $$(call MSG_L1,Linking installer $$@)
     
    500515#
    501516define def_vbox_compile_wixobj
    502 includedep $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixobj.dep
    503 $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixobj: \
     517includedep $(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wixobj.dep
     518$(VBOX_WIN_INST_OUT_DIR)/$(lang)/VirtualBox_$(lang).wixobj: \
    504519                        $(PATH_SUB_CURRENT)/VirtualBox.wxs \
    505520                        $(PATH_SUB_CURRENT)/UserInterface.wxi \
     
    704719#
    705720include $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
    706 $(VBOX_WIN_INST_OUT_DIR)/VBoxGuiNLS.wxi: $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk $(MAKEFILE_CURRENT) | $$(dir $$@)
     721$(VBOX_WIN_INST_OUT_DIR)/VBoxGuiNLS.wxi: $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk $(VBOX_WIN_INST_MAKEFILE_DEP) | $$(dir $$@)
    707722        $(APPEND) -t $@ '<?xml version="1.0" ?>'
    708723        $(APPEND) $@ '<Include>'
     
    722737#
    723738# Build the multi-language version of the .MSI installer (final installer).
     739#
    724740# This is done by creating binary .MST diffs of all the language-specific installers
    725 # and then merging the diffs into the existing .MSI using tools from the MS Installer SDK.
    726 #
    727 # .MSI link (all languages).
    728 #
    729 # Note: Prereqs of the special .NOTPARALLEL target will be executed with parallel
    730 #       make jobs temporarily disabled.  This is a hack to work around what seems
    731 #       to be a problem with the sharing mode set by one or more of the three
    732 #       programs / scripts involved in this step.
     741# against the en_US one, and then merging the diffs into the en_US one using tools
     742# from the MS Installer SDK.
    733743#
    734744define def_vbox_create_mst
    735 .NOTPARALLEL: $(VBOX_WIN_INST_OUT_DIR)/NLS/$(lang).mst
    736 $(VBOX_WIN_INST_OUT_DIR)/NLS/$(lang).mst: \
    737                 $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_en_US.msi \
    738                 $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).msi \
    739                 | $$$$(dir $$$$@)
    740         $(call MSG_L1,Integrating language ($(lang)))
    741         $(REDIRECT) -C $$(@D) -- $(VBOX_PATH_MSITRAN) -g $$< $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).msi $(lang).mst
    742         $(REDIRECT) -C $$(@D) -- $(VBOX_PATH_MSIDB)   -d $$< -r $(lang).mst
    743         $(REDIRECT) -C $$(@D) -- wscript.exe $(VBOX_PATH_WISUBSTG) $$< $(lang).mst $(lang_id)
     745$(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(lang).mst: \
     746                $(VBOX_WIN_INST_OUT_DIR)/en_US/$(PACKAGE_NAME_LANG)_en_US.msi \
     747                $(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(PACKAGE_NAME_LANG)_$(lang).msi
     748        $(call MSG_L1,Creating language diff ($(lang)))
     749        $(REDIRECT) -C $$(@D) -- $(VBOX_PATH_MSITRAN) -g $$< $(PACKAGE_NAME_LANG)_$(lang).msi $(lang).mst
     750
    744751endef
    745752
    746 # TODO, FIXME, XXX, BUGBUG
    747 # @todo r=bird: This should probably be $(foreach lang,$(filter-out en_US, $(VBOX_INSTALLER_LANGUAGES)),...
    748 #               Otherwise, was the point of building none en_US installers
    749 #               for languages not in VBOX_INSTALLER_ADD_LANGUAGES?!?
    750 $(foreach lang,$(VBOX_INSTALLER_ADD_LANGUAGES), \
     753$(foreach lang,$(filter-out en_US, $(VBOX_INSTALLER_LANGUAGES)), \
    751754        $(eval local lang_id := $(VBOX_BRAND_$(lang)_LANG_ID)) \
    752755        $(eval $(def_vbox_create_mst)))
    753756
    754 #
    755 # Create all xxx_<Lang>.msi installers and prepare the final xxx_MultiLang.msi installer.
    756 #
    757 ## @todo this rule must not modify $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_en_US.msi but a copy of it. def_vbox_compile_wixobj is
    758 #        where en_US.msi is created, it shouldn't be changed after that (if possible). Also, document the path length issue.
     757
     758# Create WISUMINFO argument.
    759759VBOX_INS_PROD_ARCH.amd64 = x64
    760760VBOX_INS_PROD_ARCH.x86   = Intel
     
    762762$(if $(VBOX_INS_PROD_ARCH),,$(error VBOX_INS_PROD_ARCH is empty!))
    763763VBOX_INS_PROD_LANG := 7="$(VBOX_INS_PROD_ARCH);1033
    764 $(foreach lang, $(VBOX_INSTALLER_ADD_LANGUAGES), $(eval VBOX_INS_PROD_LANG := $(VBOX_INS_PROD_LANG)$(COMMA)$(VBOX_BRAND_$(lang)_LANG_ID)))
     764$(foreach lang, $(filter-out en_US,$(VBOX_INSTALLER_LANGUAGES))\
     765        , $(eval VBOX_INS_PROD_LANG := $(VBOX_INS_PROD_LANG)$(COMMA)$(VBOX_BRAND_$(lang)_LANG_ID)))
    765766VBOX_INS_PROD_LANG := $(VBOX_INS_PROD_LANG)"
    766767
    767 $(PACKAGE_NAME_FINAL): \
    768                 $(VBOX_WIN_INST_OUT_DIR)/Files_Main.wxi \
    769                 $(VBOX_WIN_INST_OUT_DIR)/Files_Doc.wxi \
    770                 $(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi \
    771                 $(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi \
    772                 $(foreach lang,$(VBOX_INSTALLER_LANGUAGES), $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).msi) \
    773                 $(foreach lang,$(VBOX_INSTALLER_ADD_LANGUAGES), $(VBOX_WIN_INST_OUT_DIR)/NLS/$(lang).mst) \
    774                 $(VBOX_SVN_REV_KMK) \
    775                 | $$(dir $$@)
    776         $(QUIET)$(RM) -f $(wildcard $(PATH_STAGE_BIN)/$(PACKAGE_BASE)-r*.msi)
    777         $(REDIRECT) -C $(@D) -- \
    778                 wscript.exe $(VBOX_PATH_WISUMINFO) $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_en_US.msi $(VBOX_INS_PROD_LANG)
    779         $(CP) -f $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_en_US.msi $@
    780         $(call VBOX_SIGN_FILE_FN,$@,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV),,,disable-dual-signing)
     768# The multilingual installer rule.
     769$(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG).msi: \
     770                $(VBOX_WIN_INST_OUT_DIR)/en_US/$(PACKAGE_NAME_LANG)_en_US.msi \
     771                $(foreach lang,$(filter-out en_US,$(VBOX_INSTALLER_LANGUAGES)),$(VBOX_WIN_INST_OUT_DIR)/$(lang)/$(lang).mst)
     772        $(call MSG_L1,Creating final multilingual MSI)
     773        $(QUIET)$(RM) -f $(wildcard $(@D)/$(PACKAGE_BASE)-r*.msi)
     774        $(CP) -f -- "$<" "$@"
     775
     776        $(foreach lang,$(filter-out en_US,$(VBOX_INSTALLER_LANGUAGES)), \
     777                $(NLTAB)$(REDIRECT) -C $(@D)/$(lang) -- $(VBOX_PATH_MSIDB) -d $@ -r $(lang).mst \
     778                $(NLTAB)$(REDIRECT) -C $(@D)/$(lang) -- cscript.exe /nologo $(VBOX_PATH_WISUBSTG) $@ $(lang).mst $(VBOX_BRAND_$(lang)_LANG_ID) )
     779
     780        $(REDIRECT) -C $(@D) -- cscript.exe /nologo $(VBOX_PATH_WISUBSTG) $(@F)
     781        $(REDIRECT) -C $(@D) -- cscript.exe /nologo $(VBOX_PATH_WISUMINFO) $@ $(VBOX_INS_PROD_LANG)
     782        $(call VBOX_SIGN_FILE_FN,$@,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV) ($(KBUILD_TARGET_ARCH)),,,disable-dual-signing)
     783
     784# Copy multilingual installer to bin.
     785$(PACKAGE_NAME_FINAL): $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG).msi
     786        $(QUIET)$(RM) -f $(wildcard $(@D)/$(PACKAGE_BASE)-r*.msi)
     787        $(INSTALL_STAGING) -- $< $@
    781788
    782789
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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