spiegel-keyman/windows/src/Makefile

316 lines
7.7 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:
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
# ----------------------------------------------------------------------