mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-13 12:19:25 +00:00
Fixes #9692. Signature checking was skipped because we missed a ".virtual" to force nmake to build the test and test_i3633 targets. This opened up a small cascade of related formatting issues on Makefiles, and the fact that the test_i3633 (has there ever been a more poorly named project?) Makefile did not even work. Refactored significantly, added same tests to Developer Makefile, and also now verifying the .msi and installer executable. We can improve this further but I'd like to get this in to avoid further critical issues with code signing given the current broken signing configuration.
316 lines
7.8 KiB
Makefile
316 lines
7.8 KiB
Makefile
#
|
|
# Keyman root Makefile
|
|
#
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
default:
|
|
@echo The following make targets are available:
|
|
@echo . build builds everything except help files (BUILDHELP=1 to build help)
|
|
@echo . install installs packages into Delphi IDE (run after a build)
|
|
@echo . clean removes all temp files
|
|
@echo . release make a release
|
|
@echo . web-install sends the documentation to the website
|
|
@echo . signcode sign the build artifacts
|
|
@echo.
|
|
@echo . Build flags:
|
|
@echo . DEBUG Include debug information
|
|
@echo . SC_TIMESTAMP Don't timestamp certificates (for internal releases only, offline)
|
|
@echo . BUILDHELP Build the helpfiles (implicit when 'make release')
|
|
@echo . LINT Turns on ^$MESSAGE hints and warnings and all extra string warnings
|
|
@echo . QUIET Ignore hints and warnings
|
|
@echo . RELEASE_OEM Build executables for third party products in oem folder (e.g. FirstVoices)
|
|
@echo.
|
|
@echo . To view help on the build process, in /src/inst, run:
|
|
@echo . make help
|
|
@echo.
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
!ifdef QUICK_BUILD_KEYMAN
|
|
TARGETS=ext global buildtools engine desktop
|
|
MANIFESTS=engine desktop
|
|
!else
|
|
TARGETS=ext global buildtools engine desktop support
|
|
MANIFESTS=engine desktop
|
|
!endif
|
|
|
|
RELEASE_TARGETS=desktop
|
|
CLEANS=test unit-tests cleanroot
|
|
|
|
EXCLUDEPATHDEFINES=1
|
|
BUILDPREREQ=global-versions
|
|
|
|
!include Header.mak
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
cleanroot:
|
|
-del tds.zip
|
|
-del tds.exe
|
|
-del PathDefines.mak
|
|
-del version.txt
|
|
|
|
global: build-tools
|
|
cd $(ROOT)\src\global
|
|
$(MAKE) $(TARGET)
|
|
cd $(ROOT)\src
|
|
|
|
ext: build-tools
|
|
cd $(ROOT)\src\ext
|
|
$(MAKE) $(TARGET)
|
|
cd $(ROOT)\src
|
|
|
|
buildtools: global
|
|
cd $(ROOT)\src\buildtools
|
|
$(MAKE) $(TARGET)
|
|
cd $(ROOT)\src
|
|
|
|
engine: global message-constants
|
|
cd $(ROOT)\src\engine
|
|
$(MAKE) $(TARGET)
|
|
cd $(ROOT)\src
|
|
|
|
desktop: global message-constants
|
|
cd $(ROOT)\src\desktop
|
|
$(MAKE) $(TARGET)
|
|
cd $(ROOT)\src
|
|
|
|
support: global
|
|
cd $(ROOT)\src\support
|
|
$(MAKE) $(TARGET)
|
|
cd $(ROOT)\src
|
|
|
|
test: .virtual
|
|
cd $(ROOT)\src\test
|
|
$(MAKE) $(TARGET)
|
|
cd $(ROOT)\src
|
|
|
|
unit-tests:
|
|
cd $(ROOT)\src\test\unit-tests
|
|
$(MAKE) $(TARGET)
|
|
cd $(ROOT)\src
|
|
|
|
# ----------------------------------------------------------------------
|
|
# release
|
|
# ----------------------------------------------------------------------
|
|
|
|
release: clean-pathdefines test-release-cef-path test-releasebuildcheck test-uiaccess test-klog test-releaseexists test-cert test-hhc test-7zip test-wix clean
|
|
cd $(ROOT)\src
|
|
$(MAKE) devtools-app
|
|
$(MAKE) build-release-wrapper
|
|
# $(MAKE) clean <-- this makes it harder to do OEM builds
|
|
cd $(ROOT)\src
|
|
|
|
clean-pathdefines: test-releasebuildcheck
|
|
# test-releasebuildcheck builds devtools for us
|
|
$(DEVTOOLS) -ri
|
|
|
|
#
|
|
# Test that the CEF file path is accessible from env var KEYMAN_CEF4DELPHI_ROOT
|
|
# and checkout the appropriate version of CEF as determined by CEF_VERSION.md
|
|
#
|
|
test-release-cef-path:
|
|
!ifndef SC_TIMESTAMP
|
|
!ifdef GIT_BASH_FOR_KEYMAN
|
|
$(GIT_BASH_FOR_KEYMAN) $(KEYMAN_ROOT)\common\windows\cef-checkout.sh
|
|
!else
|
|
start /wait $(KEYMAN_ROOT)\common\windows\cef-checkout.sh
|
|
!endif
|
|
!endif
|
|
|
|
#
|
|
# Test that certificate checking is enabled and that certificate is accessible
|
|
#
|
|
|
|
test-cert:
|
|
copy $(SC_PFX_SHA1) $(ROOT)\src\pfx.tmp
|
|
del $(ROOT)\src\pfx.tmp
|
|
|
|
#
|
|
# Test that hhc is installed
|
|
#
|
|
|
|
test-hhc:
|
|
if not exist $(HHC) exit 1
|
|
|
|
#
|
|
# Test that WiX is installed
|
|
#
|
|
|
|
test-wix:
|
|
if not exist $(WIXPATH)\candle.exe exit 1
|
|
|
|
#
|
|
# Test that 7-zip is installed
|
|
#
|
|
|
|
test-7zip:
|
|
if not exist $(WZZIPPATH) exit 1
|
|
|
|
#
|
|
# Test that klog is disabled
|
|
#
|
|
|
|
test-klog:
|
|
cd $(COMMON_ROOT)\tools\test-klog
|
|
$(MAKE) verify
|
|
cd $(ROOT)\src
|
|
|
|
#
|
|
# Test that we haven't already built this release
|
|
#
|
|
|
|
test-releaseexists:
|
|
cd $(ROOT)\src\desktop\inst
|
|
$(MAKE) test-releaseexists
|
|
cd $(ROOT)\src
|
|
|
|
#
|
|
# Test various release prerequisites, e.g. Debug reg key not set
|
|
#
|
|
|
|
test-releasebuildcheck: global-versions
|
|
cd $(COMMON_ROOT)\tools\devtools
|
|
$(MAKE) test-releasebuildcheck
|
|
cd $(ROOT)\src
|
|
|
|
#
|
|
# Test uiaccess property in keyman manifest.xml and keyman64 manifest.xml
|
|
#
|
|
|
|
test-uiaccess:
|
|
cd $(ROOT)\src\engine\keyman
|
|
$(MAKE) test-uiaccess
|
|
cd $(ROOT)\src\engine\keymanx64
|
|
$(MAKE) test-uiaccess
|
|
cd $(ROOT)\src
|
|
|
|
#
|
|
# Build Keyman projects for coverity; call this with
|
|
# make test-coverity
|
|
# * Set environment variable COVBUILD to path to cov-build.exe
|
|
# * tar must be on path
|
|
#
|
|
|
|
!ifndef COVBUILD
|
|
test-coverity:
|
|
echo Set variable COVBUILD to covbuild.exe
|
|
exit 1
|
|
!else
|
|
test-coverity:
|
|
cd $(ROOT)\src
|
|
if exist cov-int rd /s/q cov-int
|
|
if exist keyman-windows-coverity.tgz del keyman-windows-coverity.tgz
|
|
$(COVBUILD) --dir cov-int $(MAKE) test-coverity-internal
|
|
tar cvzf keyman-windows-coverity.tgz cov-int
|
|
rd /s/q cov-int
|
|
echo Manual upload keyman-windows-coverity.tgz to coverity
|
|
# TODO: automated upload as part of build
|
|
|
|
test-coverity-internal:
|
|
cd $(ROOT)\src\engine\keyman32
|
|
$(MAKE) build
|
|
cd $(ROOT)\src\engine\keyman64
|
|
$(MAKE) build
|
|
cd $(ROOT)\src\engine\keymanx64
|
|
$(MAKE) build
|
|
cd $(ROOT)\src\engine\kmtip
|
|
$(MAKE) build
|
|
cd $(ROOT)\src\engine\mcompile
|
|
$(MAKE) build
|
|
!endif
|
|
|
|
# Build a release
|
|
|
|
build-release-wrapper: clean-output global-versions
|
|
cd $(ROOT)\src
|
|
$(MAKE) dirs
|
|
$(MAKE) build-tools
|
|
!ifdef QUICK_BUILD_KEYMAN
|
|
$(MAKE) "SIGNCODE_BUILD=SIGNCODE_BUILD" build
|
|
$(MAKE) "SIGNCODE_BUILD=SIGNCODE_BUILD" build-release
|
|
$(MAKE) signcode
|
|
!else
|
|
$(MAKE) "SIGNCODE_BUILD=SIGNCODE_BUILD" build unit-tests
|
|
$(MAKE) "SIGNCODE_BUILD=SIGNCODE_BUILD" build-release
|
|
$(MAKE) signcode
|
|
$(MAKE) "TARGET=test" test
|
|
!endif
|
|
|
|
cd $(ROOT)\src\engine\inst
|
|
$(MAKE)
|
|
|
|
cd $(ROOT)\src\desktop\inst
|
|
$(MAKE) setup
|
|
|
|
!ifdef QUICK_BUILD_KEYMAN
|
|
!else
|
|
cd $(ROOT)\src
|
|
$(MAKE) build-release-wrapper-oem
|
|
!endif
|
|
|
|
build-release-wrapper-oem:
|
|
!ifdef RELEASE_OEM
|
|
cd $(ROOT)\..\oem\firstvoices\windows\src\inst
|
|
$(MAKE) setup
|
|
!else
|
|
echo Not building OEM releases
|
|
!endif
|
|
|
|
#
|
|
# Tools needed to complete a build
|
|
#
|
|
|
|
build-tools:
|
|
!ifdef NODELPHI
|
|
echo Skipping build-tools
|
|
!else
|
|
# we need to build devtools directly because otherwise we have a
|
|
# chicken-and-egg issue with PathDefines.mak
|
|
$(MAKE) devtools-app
|
|
# We'll build a default PathDefines.mak if it is missing here so we can
|
|
# go on and do the rest of the build
|
|
$(DEVTOOLS) -ti
|
|
!endif
|
|
|
|
global-versions:
|
|
cd $(COMMON_ROOT)
|
|
@if not exist $(KEYMAN_ROOT)\include\keymanversion_build.h $(MAKE) global-versions
|
|
cd $(ROOT)\src
|
|
|
|
message-constants: build-tools
|
|
!ifdef NODELPHI
|
|
echo Skipping message-constants
|
|
!else
|
|
!if "$(TARGET)" != "clean"
|
|
$(MAKE) devtools-app
|
|
$(DEVTOOLS) -buildmessageconstants $(ROOT)\src\desktop\kmshell\xml\strings.xml $(ROOT)\src\global\delphi\cust\MessageIdentifierConsts.pas
|
|
!endif
|
|
!endif
|
|
|
|
#
|
|
# Remove all files from output folders to ensure no legacy files left in a release
|
|
#
|
|
|
|
clean-output:
|
|
rd /s/q $(ROOT)\bin
|
|
rd /s/q $(ROOT)\debug
|
|
rd /s/q $(ROOT)\build
|
|
rd /s/q $(ROOT)\lib
|
|
|
|
# ----------------------------------------------------------------------
|
|
# install
|
|
# ----------------------------------------------------------------------
|
|
|
|
web-install:
|
|
cd $(ROOT)\src\desktop\help
|
|
$(MAKE) html install
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
!include Target.mak
|
|
|
|
# ----------------------------------------------------------------------
|
|
# EOF
|
|
# ----------------------------------------------------------------------
|