MSIBuild/Makefile
Simon Rozman 05edc2b598 Hardcode MSIBUILD_OUTPUT_DIR and MSIBUILD_ROOT
KISS!!!

Signed-off-by: Simon Rozman <simon@rozman.si>
2021-12-01 12:50:20 +01:00

248 lines
18 KiB
Makefile
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SPDX-License-Identifier: GPL-3.0-or-later
# Copyright © 1991-2021 Amebis
# Copyright © 2016 GÉANT
######################################################################
# Parameter validation
######################################################################
!IFNDEF MSIBUILD_PRODUCT_NAME
!ERROR Parameter MSIBUILD_PRODUCT_NAME is undefined.
!ENDIF
!IFNDEF MSIBUILD_CODEPAGE
!ERROR Parameter MSIBUILD_CODEPAGE is undefined.
!ENDIF
!IFNDEF MSIBUILD_LANGID
!ERROR Parameter MSIBUILD_LANGID is undefined.
!ENDIF
!IFNDEF MSIBUILD_MSI_VERSION_MIN
!ERROR Parameter MSIBUILD_MSI_VERSION_MIN is undefined.
!ENDIF
!IFNDEF MSIBUILD_LENGTH_ID
!ERROR Parameter MSIBUILD_LENGTH_ID is undefined.
!ENDIF
!IFNDEF MSIBUILD_LENGTH_HELP
!ERROR Parameter MSIBUILD_LENGTH_HELP is undefined.
!ENDIF
!IFNDEF MSIBUILD_PHASE
MSIBUILD_PHASE=0
!ENDIF
!IFNDEF PLAT
PLAT=Win32
!ENDIF
!IF "$(PLAT)" == "Win32"
MSIBUILD_PLAT=Intel
!ELSEIF "$(PLAT)" == "x64"
MSIBUILD_PLAT=x64
!IF $(MSIBUILD_MSI_VERSION_MIN) < 150
!ERROR x64 platform is supported on MSI 1.5 or later. Please, specify MSIBUILD_MSI_VERSION_MIN=150 for x64 builds.
!ENDIF
!ELSEIF "$(PLAT)" == "ARM64"
MSIBUILD_PLAT=Arm64
!IF $(MSIBUILD_MSI_VERSION_MIN) < 500
!ERROR ARM64 platform is supported on MSI 5.0 or later. Please, specify MSIBUILD_MSI_VERSION_MIN=500 for ARM64 builds.
!ENDIF
!ELSE
!ERROR Unsupported platform: $(PLAT)
!ENDIF
!IF "$(PROCESSOR_ARCHITECTURE)" == "AMD64" || "$(PROCESSOR_ARCHITECTURE)" == "ARM64"
MSIBUILD_MSM_MS_REPO=$(PROGRAMW6432) (x86)\Common Files\Merge Modules
!ELSE
MSIBUILD_MSM_MS_REPO=$(COMMONPROGRAMFILES)\Merge Modules
!ENDIF
!IFDEF MSIBUILD_VENDOR_NAME
MSIINFO_FLAGS=/A "$(MSIBUILD_VENDOR_NAME)"
!ELSE
MSIINFO_FLAGS=
!ENDIF
######################################################################
# Target Stubs
######################################################################
All ::
Clean ::
!IF $(MSIBUILD_PHASE) == 0
######################################################################
# Setup Phase
# - Version info parsing
######################################################################
All :: \
"..\MSIBuild\Version\$(PKG)Version.mak" \
"$(TEMP)\$(PKG)$(LANG).$(PLAT).$(CFG).PackageGUID.mak"
$(MAKE) /f "Makefile" /$(MAKEFLAGS) MSIBUILD_PHASE=1 All
Clean ::
$(MAKE) /f "Makefile" /$(MAKEFLAGS) MSIBUILD_PHASE=100 Clean
"..\MSIBuild\Version\$(PKG)Version.mak" ::
cd $(@D)
$(MAKE) /f "Makefile" /$(MAKEFLAGS) Version
cd "$(MAKEDIR)"
"$(TEMP)\$(PKG)$(LANG).$(PLAT).$(CFG).PackageGUID.mak" ::
cscript.exe "..\MSIBuild\MSI.wsf" //Job:MakeGUID //Nologo /M:MSIBUILD_PACKAGE_GUID > "$(@:"=).tmp"
move /y "$(@:"=).tmp" $@ > NUL
!ELSEIF $(MSIBUILD_PHASE) == 1
######################################################################
# 1st Phase
# - Module preparation, generating dependency lists and first version
# of MSI package
######################################################################
!INCLUDE "..\MSIBuild\Version\$(PKG)Version.mak"
!INCLUDE "$(TEMP)\$(PKG)$(LANG).$(PLAT).$(CFG).PackageGUID.mak"
All :: \
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).1.msi" \
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).2.dep"
$(MAKE) /f "Makefile" /$(MAKEFLAGS) MSIBUILD_PHASE=2 All
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).1.msi" : $(MSIBUILD_MODULES) $(MSIBUILD_MODULES_PRECOMPILED)
-if exist $@ del /f /q $@
copy /y "..\MSIBuild\Empty.msi" "$(@:"=).tmp" > NUL
!if not exist "$(**R:"=).msmcfg" "$(WINDOWSSDKVERBINPATH)x86\msidb.exe" -d "$(@:"=).tmp" -m $**
"$(WINDOWSSDKVERBINPATH)x86\msiinfo.exe" "$(@:"=).tmp" /nologo /C $(MSIBUILD_CODEPAGE) /T "$(MSIBUILD_PRODUCT_NAME) $(MSIBUILD_VERSION_STR) ($(PLAT))" $(MSIINFO_FLAGS) /P "$(MSIBUILD_PLAT);$(MSIBUILD_LANGID)" /G $(MSIBUILD_MSI_VERSION_MIN) /V $(MSIBUILD_PACKAGE_GUID) /W 0 /O ""
!if exist "$(**R:"=).msmcfg" msimsm.exe "$(@:"=).tmp" $** /N "$(**R:"=).msmcfg" /D "$(**R:"=).log" /Sd "..\..\output" /F
move /y "$(@:"=).tmp" $@ > NUL
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).2.dep" : "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).1.msi"
cscript.exe "..\MSIBuild\MSI.wsf" //Job:MakeDEP //Nologo "$(@:"=).tmp" "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).2.msi" $**
move /y "$(@:"=).tmp" $@ > NUL
$(MSIBUILD_MODULES) ::
cd $(@D)
$(MAKE) /f "Makefile" /$(MAKEFLAGS) MSIBUILD_HAS_VERSION=1
cd "$(MAKEDIR)"
!IFDEF MSIBUILD_MODULES_PRECOMPILED
$(MSIBUILD_MODULES_PRECOMPILED) ::
if exist "$(MSIBUILD_MSM_MS_REPO)\$(@F:"=)" $(MAKE) /f "Makefile" /$(MAKEFLAGS) MSIBUILD_PHASE=90 MSIBUILD_MSM_SRC="$(MSIBUILD_MSM_MS_REPO)\$(@F:"=)" MSIBUILD_MSM_DST=$@ All
!ENDIF
!ELSEIF $(MSIBUILD_PHASE) == 2
######################################################################
# 2nd Phase
# - MSI package population with exact file versions and sizes
######################################################################
!INCLUDE "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).2.dep"
!INCLUDE "..\MSIBuild\Version\$(PKG)Version.mak"
All :: \
!IFDEF MSIBUILD_COMPRESS
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).3.dep" \
!ENDIF
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).2.msi"
!IFDEF MSIBUILD_COMPRESS
$(MAKE) /f "Makefile" /$(MAKEFLAGS) MSIBUILD_PHASE=3 All
!ENDIF
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).2.msi" : "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).1.msi"
-if exist $@ del /f /q $@
copy /y "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).1.msi" "$(@:"=).tmp" > NUL
"$(WINDOWSSDKVERBINPATH)x86\msifiler.exe" -v -h -d "$(@:"=).tmp" > "$(*:"=).out"
move /y "$(@:"=).tmp" $@ > NUL
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).3.dep" : "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).1.msi"
cscript.exe "..\MSIBuild\MSI.wsf" //Job:MakeDEP //Nologo "$(@:"=).tmp" "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).cab" $**
move /y "$(@:"=).tmp" $@ > NUL
!ELSEIF $(MSIBUILD_PHASE) == 3
######################################################################
# 3rd Phase
# - MSI package compression
######################################################################
!INCLUDE "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).3.dep"
!INCLUDE "..\MSIBuild\Version\$(PKG)Version.mak"
All :: \
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).3.msi"
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).3.ddf" : "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).2.msi"
cscript.exe "..\MSIBuild\MSI.wsf" //Job:MakeDDF //Nologo "$(@:"=).tmp" $** /O:"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG)" /C:LZX
move /y "$(@:"=).tmp" $@ > NUL
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).cab" \
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).inf" \
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).rpt" : "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).3.ddf"
makecab.exe /F "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).3.ddf"
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).3.msi" : \
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).2.msi" \
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).cab" \
"..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).inf"
-if exist $@ del /f /q $@
copy /y "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).2.msi" "$(@:"=).tmp" > NUL
cscript.exe "..\MSIBuild\MSI.wsf" //Job:SetCAB //Nologo "$(@:"=).tmp" "..\..\output\$(PKG)$(LANG).$(PLAT).$(CFG).inf" /E
"$(WINDOWSSDKVERBINPATH)x86\msiinfo.exe" "$(@:"=).tmp" /nologo /U 4
!IFDEF MANIFESTCERTIFICATETHUMBPRINT
signtool.exe sign /sha1 "$(MANIFESTCERTIFICATETHUMBPRINT)" /fd sha256 /tr "$(MANIFESTTIMESTAMPRFC3161URL)" /td sha256 /d "$(MSIBUILD_PRODUCT_NAME)" /q "$(@:"=).tmp"
!ENDIF
attrib.exe +r "$(@:"=).tmp"
move /y "$(@:"=).tmp" $@ > NUL
!ELSEIF $(MSIBUILD_PHASE) == 90
######################################################################
# MSM Copy from Repository Phase
######################################################################
All :: "$(MSIBUILD_MSM_DST)"
"$(MSIBUILD_MSM_DST)" : "$(MSIBUILD_MSM_SRC)"
copy /y $** $@ > NUL
!ELSE
######################################################################
# Cleanup Phase
# - Cleaning modules
######################################################################
Clean :: $(MSIBUILD_MODULES) $(MSIBUILD_MODULES_PRECOMPILED)
cd "..\MSIBuild\Version"
$(MAKE) /f "Makefile" /$(MAKEFLAGS) Clean
cd "$(MAKEDIR)"
-if exist "..\..\output\$(PKG)*.1.msi" del /f /q "..\..\output\$(PKG)*.1.msi"
-if exist "..\..\output\$(PKG)*.2.dep" del /f /q "..\..\output\$(PKG)*.2.dep"
-if exist "..\..\output\$(PKG)*.2.msi" del /f /q "..\..\output\$(PKG)*.2.msi"
-if exist "..\..\output\$(PKG)*.2.out" del /f /q "..\..\output\$(PKG)*.2.out"
-if exist "..\..\output\$(PKG)*.3.dep" del /f /q "..\..\output\$(PKG)*.3.dep"
-if exist "..\..\output\$(PKG)*.3.ddf" del /f /q "..\..\output\$(PKG)*.3.ddf"
-if exist "..\..\output\$(PKG)*.3.msi" del /f /q "..\..\output\$(PKG)*.3.msi"
-if exist "..\..\output\$(PKG)*.3.out" del /f /q "..\..\output\$(PKG)*.3.out"
-if exist "..\..\output\$(PKG)*.cab" del /f /q "..\..\output\$(PKG)*.cab"
-if exist "..\..\output\$(PKG)*.inf" del /f /q "..\..\output\$(PKG)*.inf"
-if exist "..\..\output\$(PKG)*.rpt" del /f /q "..\..\output\$(PKG)*.rpt"
$(MSIBUILD_MODULES) ::
cd $(@D)
$(MAKE) /f "Makefile" /$(MAKEFLAGS) Clean
cd "$(MAKEDIR)"
!IFDEF MSIBUILD_MODULES_PRECOMPILED
$(MSIBUILD_MODULES_PRECOMPILED) ::
cd $(@D)
-if exist "*.log" del /f /q "*.log"
cd "$(MAKEDIR)"
!ENDIF
!ENDIF