lazarus/Makefile.fpc

455 lines
15 KiB
Makefile
Raw Normal View History

2000-07-13 12:28:31 +02:00
#
# Makefile.fpc for Lazarus for Free Pascal
#
[package]
name=lazarus
version=$(IDEVERSION)
[require]
packages=regexpr
[target]
programs=lazarus startlazarus lazbuild
dirs=
2000-07-13 12:28:31 +02:00
[compiler]
[clean]
files=$(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT)) $(wildcard *.lfm)
2000-07-13 12:28:31 +02:00
[install]
fpcpackage=n
basedir=share/lazarus
[dist]
destdir=$(BASEDIR)/dist
[prerules]
RCPP?=$(strip $(firstword cpp$(SRCEXEEXT)))
#
ifndef LAZARUS_INSTALL_DIR
LAZARUS_INSTALL_DIR=$(INSTALL_PREFIX)/share/lazarus
INSTALL_MAN_DIR=$(INSTALL_PREFIX)/share/man
ifneq ($(findstring $(OS_TARGET),win32 win64),)
LAZARUS_INSTALL_DIR=C:\lazarus
endif
ifneq ($(findstring $(OS_TARGET),freebsd),)
LAZARUS_INSTALL_DIR=$(INSTALL_PREFIX)/local/lazarus
endif
endif
ifndef INSTALL_MAN_DIR
INSTALL_MAN_DIR=$(INSTALL_PREFIX)/share/man
endif
ifneq ($(findstring $(OS_TARGET),win32 win64),)
IDEVERSION=$(shell .\tools\install\get_lazarus_version.bat)
else
IDEVERSION=$(shell ./tools/install/get_lazarus_version.sh)
endif
#-----------------------------------------------------------------------------
2000-07-13 12:28:31 +02:00
[rules]
.PHONY: help registration tools lcl basecomponents bigidecomponents lazbuild ide idebig cleanide bigide useride starter lhelp all clean purge distclean install
2012-03-13 15:34:25 +01:00
#-----------------------------------------------------------------------------
help:
@$(ECHO)
@$(ECHO) " Main targets"
@$(ECHO) " Without any target, target 'all' will be invoked."
@$(ECHO) " all build all needed, i.e. minimal IDE, lazbuild, startlazarus."
@$(ECHO) " clean deletes files that 'bigide' creates. It does not clean up all possible"
@$(ECHO) " targets. Clean other target: make clean LCL_PLATFORM=qt"
@$(ECHO) " distclean Clean all targets and common leftovers."
@$(ECHO) " lazbuild build lazbuild and lcl with nogui widgetset"
@$(ECHO) " bigide as all, except that the IDE is built with a lot of extra packages"
@$(ECHO) " useride calls lazbuild to build an IDE with your active profile, requires lazbuild"
@$(ECHO) " install installs Lazarus under $(LAZARUS_INSTALL_DIR)"
@$(ECHO) " You can change the directory by appending INSTALL_PREFIX=/some/path"
@$(ECHO)
@$(ECHO) " Sub targets"
@$(ECHO) " registration build package FCL"
@$(ECHO) " basecomponents build buildintf, lazcontrols, ideintf, synedit, debuggerintf, lazdebuggergdbmi"
@$(ECHO) " for the LCL_PLATFORM, requires lcl"
@$(ECHO) " bigidecomponents build many extra packages for the LCL_PLATFORM, requires basecomponents"
@$(ECHO) " tools build lazres, svn2revisioninc, updatepofiles, lrstolfm,"
@$(ECHO) " requires LCL with nogui widgetset"
@$(ECHO) " lhelp build lhelp, requires bigidecomponents"
@$(ECHO) " starter build startlazarus, requires basecomponents"
@$(ECHO) " ide build ide with minimum of packages"
@$(ECHO)
@$(ECHO) " Flags:"
@$(ECHO) " PP=/path/to/fpc use another compiler"
@$(ECHO) " USESVN2REVISIONINC=0 do not update ide/revision.inc"
@$(ECHO) " INSTALL_PREFIX=/usr used by 'install' as path prefix"
@$(ECHO) " FPC_DIR=/usr/share/fpcsrc/3.0.4 used by fpcmake when regenerating Makefiles"
@$(ECHO) " OPT='-vwnbq -gh' append these options when calling the compiler"
@$(ECHO)
@$(ECHO) " Usage examples:"
@$(ECHO)
@$(ECHO) " Updating git and build a minimal IDE, startlazarus and lazbuild:"
@$(ECHO) " make clean"
@$(ECHO) " git pull"
@$(ECHO) " make clean all"
@$(ECHO)
@$(ECHO) " Note: You can start lazarus with 'startlazarus'"
@$(ECHO) " Note: Use the IDE or lazbuild to compile your projects/packages."
@$(ECHO)
@$(ECHO) " Updating git and build an IDE with your last set of packages:"
@$(ECHO) " make distclean"
@$(ECHO) " git pull"
@$(ECHO) " make clean lazbuild useride"
@$(ECHO)
@$(ECHO) " Clean up:"
@$(ECHO) " git restore ."
@$(ECHO) " make distclean"
@$(ECHO)
@$(ECHO) " Install:"
@$(ECHO) " Note: You can use Lazarus without installing. Just start the lazarus executable."
@$(ECHO) " 1. Build Lazarus as normal user with one of the above commands."
@$(ECHO) " 2. Install as root into /usr"
@$(ECHO) " sudo make install"
@$(ECHO) " This installs startlazarus, lazarus-ide, lazbuild under /usr/bin"
@$(ECHO) " and copies the whole lazarus source directory to /usr/share/lazarus"
@$(ECHO)
@exit
#-----------------------------------------------------------------------------
# build package FCL (shared by all LCL_PLATFORMs)
registration:
$(MAKE) -C packager/registration
2022-01-17 12:48:59 +01:00
#-----------------------------------------------------------------------------
# build package LCLBase and LCL for LCL_PLATFORM
# requires lazutils and freetypelaz
2022-12-01 23:03:48 +01:00
lcl:
$(MAKE) -C lcl
#-----------------------------------------------------------------------------
# build required LCL packages needed by IDE for the LCL_PLATFORM
# requires lazbuild (the non lcl packages are shared)
2022-12-01 23:03:48 +01:00
basecomponents:
$(MAKE) -C components lazbuildlclpackages
$(MAKE) -C components idepackages
2023-06-11 22:10:45 +02:00
$(MAKE) -C ide/packages/ideconfig
2024-07-15 11:23:20 +02:00
$(MAKE) -C ide/packages/ideutils
$(MAKE) -C ide/packages/idepackager
$(MAKE) -C ide/packages/ideproject
$(MAKE) -C ide/packages/idedebugger
#-----------------------------------------------------------------------------
# build a lot of extra packages for the LCL_PLATFORM
# requires basecomponents
bigidecomponents:
$(MAKE) -C components bigide
#-----------------------------------------------------------------------------
# build lazres, svn2revisioninc, updatepofiles, lrstolfm
# requires codetools and LCL with nogui widgetset
tools:
$(MAKE) -C tools
#-----------------------------------------------------------------------------
# create/update ide/revision.inc
# requires tools
2022-12-01 23:03:48 +01:00
revisioninc:
$(MAKE) -C ide revisioninc
#-----------------------------------------------------------------------------
# build lazarus exe with minimum of packages for the LCL_PLATFORM
# requires basecomponents and tools
2022-12-01 23:03:48 +01:00
ide:
$(MAKE) -C ide ide
#-----------------------------------------------------------------------------
# needed by old IDE below 2.3.1
idepkg: ide
#-----------------------------------------------------------------------------
# build lazarus exe with bigide packages for the LCL_PLATFORM
# requires bigidecomponents and tools
idebig:
$(MAKE) -C ide bigide
#-----------------------------------------------------------------------------
# calls lazbuild to build lazarus and packages with user's settings
# requires lazbuild
# ignores LCL_PLATFORM and OPTS
useride:
ifdef LAZBUILDJOBS
ifdef LCL_PLATFORM
./lazbuild$(SRCEXEEXT) --max-process-count=$(LAZBUILDJOBS) --lazarusdir=. --build-ide= --ws=$(LCL_PLATFORM)
else
./lazbuild$(SRCEXEEXT) --max-process-count=$(LAZBUILDJOBS) --lazarusdir=. --build-ide=
endif
else
ifdef LCL_PLATFORM
./lazbuild$(SRCEXEEXT) --lazarusdir=. --build-ide= --ws=$(LCL_PLATFORM)
else
./lazbuild$(SRCEXEEXT) --lazarusdir=. --build-ide=
endif
endif
#-----------------------------------------------------------------------------
starter:
$(MAKE) -C ide starter
#-----------------------------------------------------------------------------
lazbuild: registration
$(MAKE) -C components lazbuildpackages
$(MAKE) -C lcl LCL_PLATFORM=nogui
$(MAKE) -C components lazbuildlclpackages LCL_PLATFORM=nogui
$(MAKE) -C tools
2023-06-11 22:10:45 +02:00
$(MAKE) -C ide/packages/ideconfig LCL_PLATFORM=nogui
$(MAKE) -C ide/packages/ideutils LCL_PLATFORM=nogui
$(MAKE) -C ide/packages/idepackager LCL_PLATFORM=nogui
$(MAKE) -C ide/packages/ideproject LCL_PLATFORM=nogui
$(MAKE) -C ide lazbuilder LCL_PLATFORM=nogui
#-----------------------------------------------------------------------------
# build lhelp
# requires bigidecomponents
lhelp:
$(MAKE) -C components/chmhelp/lhelp
#-----------------------------------------------------------------------------
# build lazarus,lcl,lazbuild,startlazarus with base packages for the LCL_PLATFORM
all: lazbuild lcl basecomponents ide starter
#-----------------------------------------------------------------------------
# build lazarus,lcl,lazbuild,startlazarus,lhelp with bigide packages for the LCL_PLATFORM
bigide: lazbuild lcl basecomponents bigidecomponents idebig starter lhelp
#-----------------------------------------------------------------------------
cleanide:
$(MAKE) -C ide cleanide
cleanlaz: cleanide
$(MAKE) -C packager/registration clean
$(MAKE) -C lcl cleanall
$(MAKE) -C components clean
2022-12-07 17:45:13 +01:00
$(MAKE) -C ide/packages/ideconfig clean
$(MAKE) -C ide/packages/ideutils clean
$(MAKE) -C ide/packages/idepackager clean
$(MAKE) -C ide/packages/ideproject clean
$(MAKE) -C ide/packages/idedebugger clean
clean: cleanlaz
$(MAKE) -C . cleanlaz LCL_PLATFORM=nogui
$(MAKE) -C tools clean
cleanbigide: clean
purge:
$(MAKE) -C ide distclean
$(MAKE) -C packager/registration distclean
$(MAKE) -C lcl distclean
$(MAKE) -C components distclean
2022-12-07 17:45:13 +01:00
$(MAKE) -C ide/packages/ideconfig distclean
$(MAKE) -C ide/packages/ideutils distclean
$(MAKE) -C ide/packages/idepackager distclean
$(MAKE) -C ide/packages/ideproject distclean
$(MAKE) -C ide/packages/idedebugger distclean
$(MAKE) -C tools distclean
# $(MAKE) -C doceditor clean
cleanall: purge
distclean: purge
# create dirs
installbase:
ifneq ($(findstring $(OS_TARGET),win32 win64),)
else
$(MKDIR) $(INSTALL_PREFIX)/share
$(MKDIR) $(INSTALL_PREFIX)/share/lazarus
$(MKDIR) $(INSTALL_PREFIX)/share/applications
$(MKDIR) $(INSTALL_PREFIX)/share/pixmaps
$(MKDIR) $(INSTALL_PREFIX)/share/mime/packages
$(MKDIR) $(INSTALL_PREFIX)/share/icons/hicolor/48x48/mimetypes
$(MKDIR) $(INSTALL_BINDIR)
$(MKDIR) $(INSTALL_MAN_DIR)
$(MKDIR) $(INSTALL_MAN_DIR)/man1
endif
#-----------------------------------------------------------------------------
# Most "make" users expect 'make install' to copy the binaries to somewhere
# Copy the lazarus tree to the install directory and set some links
# Copy everything except for 'debian' to avoid recursion and other platform files
install: installbase
$(COPYTREE) packager debugger designer converter ide images languages lazarus.app units $(LAZARUS_INSTALL_DIR)
$(COPYTREE) components docs doceditor examples lcl test tools $(LAZARUS_INSTALL_DIR)
$(COPYTREE) Makefile* *.txt $(LAZARUS_INSTALL_DIR)
ifneq ($(findstring $(OS_TARGET),win32 win64),)
$(COPYTREE) lazarus$(SRCEXEEXT) startlazarus$(SRCEXEEXT) lazbuild$(SRCEXEEXT) $(LAZARUS_INSTALL_DIR)
else
$(INSTALLEXE) lazarus$(SRCEXEEXT) startlazarus$(SRCEXEEXT) lazbuild$(SRCEXEEXT) $(LAZARUS_INSTALL_DIR)
# symlinks (they must be relative!)
ln -sf ../$(INSTALL_BASEDIR)/lazarus$(SRCEXEEXT) $(INSTALL_PREFIX)/bin/lazarus-ide$(SRCEXEEXT)
ln -sf ../$(INSTALL_BASEDIR)/startlazarus$(SRCEXEEXT) $(INSTALL_PREFIX)/bin/startlazarus$(SRCEXEEXT)
ln -sf ../$(INSTALL_BASEDIR)/lazbuild$(SRCEXEEXT) $(INSTALL_PREFIX)/bin/lazbuild$(SRCEXEEXT)
ln -sf ../$(INSTALL_BASEDIR)/tools/lazres$(SRCEXEEXT) $(INSTALL_PREFIX)/bin/lazres$(SRCEXEEXT)
ln -sf ../$(INSTALL_BASEDIR)/tools/lrstolfm$(SRCEXEEXT) $(INSTALL_PREFIX)/bin/lrstolfm$(SRCEXEEXT)
ln -sf ../$(INSTALL_BASEDIR)/tools/updatepofiles$(SRCEXEEXT) $(INSTALL_PREFIX)/bin/updatepofiles$(SRCEXEEXT)
# man pages
$(MAKE) -C install/man install PREFIX=$(INSTALL_PREFIX) GINSTALL=$(GINSTALL)
# start menu item
$(INSTALL) install/lazarus.desktop $(INSTALL_PREFIX)/share/applications/lazarus.desktop
$(INSTALL) images/icons/lazarus128x128.png $(INSTALL_PREFIX)/share/pixmaps/lazarus.png
# mime types and icons
$(INSTALL) install/lazarus-mime.xml $(INSTALL_PREFIX)/share/mime/packages/lazarus.xml
$(INSTALL) images/mimetypes/*.png $(INSTALL_PREFIX)/share/icons/hicolor/48x48/mimetypes/
# create missing directories (needed when rebuilding IDE without write permission)
$(MKDIR) $(LAZARUS_INSTALL_DIR)/units/$(FULL_TARGET)/nogui
$(MKDIR) $(LAZARUS_INSTALL_DIR)/units/$(FULL_TARGET)/gtk
$(MKDIR) $(LAZARUS_INSTALL_DIR)/units/$(FULL_TARGET)/gtk2
$(MKDIR) $(LAZARUS_INSTALL_DIR)/units/$(FULL_TARGET)/gtk3
$(MKDIR) $(LAZARUS_INSTALL_DIR)/units/$(FULL_TARGET)/gtk4
$(MKDIR) $(LAZARUS_INSTALL_DIR)/units/$(FULL_TARGET)/qt
$(MKDIR) $(LAZARUS_INSTALL_DIR)/units/$(FULL_TARGET)/qt5
2022-11-11 16:18:11 +01:00
$(MKDIR) $(LAZARUS_INSTALL_DIR)/units/$(FULL_TARGET)/qt6
$(MKDIR) $(LAZARUS_INSTALL_DIR)/components/synedit/design/languages
endif
##########################################################################
# Debian
##########################################################################
# Build dir
ifndef BUILDDIR
BUILDDIR=$(BASEDIR)/build
endif
ifeq ($(OS_TARGET),linux)
ifndef DEBDIR
DEBDIR=debian
endif
# Link Tree
ifdef LINKISCOPY
ifndef LINKTREE
LINKTREE:=$(CPPROG) -Rfpl
endif
else
ifndef LINKTREE
LINKTREE:=$(CPPROG) -Rfpl
endif
endif
ifneq ($(wildcard ${DEBDIR}/changelog),)
.PHONY: debcopy deb
DEBPACKAGEVERSION:=$(shell head -n 1 ${DEBDIR}/changelog | awk '{ print $$2 }' | tr -d '[()]')
DEBVERSION=$(firstword $(subst -, ,${DEBPACKAGEVERSION}))
DEBBUILD=$(lastword $(subst -, ,${DEBPACKAGEVERSION}))
DEBSRC=${PACKAGE_NAME}-${DEBVERSION}
DEBSRCDIR=${BUILDDIR}/${DEBSRC}
DEBSRC_ORIG=${PACKAGE_NAME}_${DEBVERSION}.orig
BUILDDATE=$(shell /bin/date --utc +%Y%m%d)
ifdef MENTORS
DEB_BUILDPKG_OPT=-sa
else
DEB_BUILDPKG_OPT=
endif
ifeq (${DEBBUILD},0)
DEBUSESVN=1
endif
ifeq (${DEBBUILD},1)
DEBUSESVN=1
endif
ifdef SNAPSHOT
DEBUSESVN=1
endif
ifndef SIGN
DEB_BUILDPKG_OPT+= -us -uc
endif
debcheck:
ifneq ($(DEBVERSION),$(PACKAGE_VERSION))
! ${ECHO} "Debian version ($(DEBVERSION)) is not correct, expect $(PACKAGE_VERSION)"
endif
ifeq ($(wildcard ${DEBSRC_ORIG}.tar.gz),)
ifndef DEBUSESVN
! ${ECHO} 'Need "${DEBSRC_ORIG}.tar.gz" to build for DEBBUILD = "${DEBBUILD}" > 1'
endif
endif
debcopy: distclean
${DELTREE} ${BUILDDIR}
${MKDIRTREE} ${DEBSRCDIR}
ifdef DEBUSESVN
$(LINKTREE) -t $(DEBSRCDIR) \
Makefile.fpc COPYING.* README.txt \
components \
converter \
debugger \
designer \
doceditor \
docs \
install \
examples \
ide \
images \
languages \
lazarus.app \
lcl \
packager \
test \
tools
# add ide/revision.inc
echo "const RevisionStr = '${SVNVERSION}';" > $(DEBSRCDIR)/ide/revision.inc
else
tar -C ${BUILDDIR} -zxf ${DEBSRC_ORIG}.tar.gz ${DEBSRC}
${DELTREE} $(DEBSRCDIR)/debian
endif
debsetup:
$(COPYTREE) ${DEBDIR} $(DEBSRCDIR)/debian
ifdef SNAPSHOT
sed -e 's/${DEBPACKAGEVERSION}/${DEBPACKAGEVERSION}~${BUILDDATE}/' -i $(DEBSRCDIR)/debian/changelog
endif
chmod 755 $(DEBSRCDIR)/debian/rules
find $(DEBSRCDIR) -name '.svn' | xargs ${DELTREE}
debbuild:
cd ${DEBSRCDIR} ; dpkg-buildpackage ${DEB_BUILDPKG_OPT}
debcheckpolicy:
ifdef LINTIAN
cd ${DEBSRCDIR} ; lintian -I -i ../*.changes
endif
debclean:
ifndef DEBUSESVN
${DEL} ${BUILDDIR}/${DEBSRC_ORIG}.tar.gz
endif
mv -v -t . \
$(DEBSRCDIR)/../*.changes \
$(DEBSRCDIR)/../*.deb \
$(DEBSRCDIR)/../*.dsc \
$(DEBSRCDIR)/../*.gz
${DELTREE} $(DEBSRCDIR)
rmdir $(BUILDDIR)
deb: debcheck debcopy deborigtargz debsetup debbuild debcheckpolicy debclean
deborigtargz:
ifdef DEBUSESVN
#$(MAKE) fpc_zipinstall USETAR=y ZIPTARGET=debcopy PACKDIR=$(DEBSRCDIR) FULLZIPNAME=${DEBSRC_ORIG}
tar -C ${BUILDDIR} -zcf ${BUILDDIR}/${DEBSRC_ORIG}.tar.gz --exclude-vcs ${DEBSRC}
else
${LINKTREE} ${DEBSRC_ORIG}.tar.gz ${BUILDDIR}/${DEBSRC_ORIG}.tar.gz
endif
endif # changelog found
endif