diff --git a/Makefile b/Makefile index 9216f9a2ce..8b71f595cc 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,24 @@ # -# Don't edit, this file is generated by FPCMake Version 1.1 [2004/03/14] +# Don't edit, this file is generated by FPCMake Version 1.1 [2004/05/29] # default: all MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom -override PATH:=$(subst \,/,$(PATH)) +BSDs = freebsd netbsd openbsd darwin +UNIXs = linux $(BSDs) sunos qnx +FORCE: +.PHONY: FORCE +override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH))) +ifneq ($(findstring darwin,$(OSTYPE)),) +inUnix=1 #darwin +SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH))) +else ifeq ($(findstring ;,$(PATH)),) inUnix=1 SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH))) else SEARCHPATH:=$(subst ;, ,$(PATH)) endif +endif SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE)))) PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH)))) ifeq ($(PWD),) @@ -37,22 +46,13 @@ ifneq ($(findstring cygdrive,$(PATH)),) inCygWin=1 endif endif -ifeq ($(OS_TARGET),freebsd) -BSDhier=1 -endif -ifeq ($(OS_TARGET),netbsd) -BSDhier=1 -endif -ifeq ($(OS_TARGET),openbsd) -BSDhier=1 -endif ifdef inUnix -BATCHEXT=.sh +SRCBATCHEXT=.sh else ifdef inOS2 -BATCHEXT=.cmd +SRCBATCHEXT=.cmd else -BATCHEXT=.bat +SRCBATCHEXT=.bat endif endif ifdef inUnix @@ -154,6 +154,12 @@ ifeq ($(findstring $(OS_TARGET),$(MAKEFILETARGETS)),) $(error The Makefile doesn't support target $(OS_TARGET), please run fpcmake first) endif endif +ifneq ($(findstring $(OS_TARGET),$(BSDs)),) +BSDhier=1 +endif +ifeq ($(OS_TARGET),linux) +linuxHier=1 +endif export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE CROSSCOMPILE ifdef FPCDIR override FPCDIR:=$(subst \,/,$(FPCDIR)) @@ -232,6 +238,7 @@ override TARGET_PROGRAMS+=lazarus override TARGET_EXAMPLEDIRS+=examples override CLEAN_FILES+=$(wildcard ./designer/*$(OEXT)) $(wildcard ./designer/*$(PPUEXT)) $(wildcard ./debugger/*$(OEXT)) $(wildcard ./debugger/*$(PPUEXT)) $(wildcard ./packager/*$(OEXT)) $(wildcard ./packager/*$(PPUEXT)) $(wildcard ./doceditor/*$(OEXT)) $(wildcard ./doceditor/*$(PPUEXT)) override INSTALL_BASEDIR=share/lazarus +override INSTALL_FPCPACKAGE=n override DIST_DESTDIR=$(BASEDIR)/dist override COMPILER_OPTIONS+=-gl override COMPILER_INCLUDEDIR+=debugger designer packager include include/$(OS_TARGET) @@ -244,42 +251,12 @@ ifdef REQUIRE_PACKAGESDIR override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR) endif ifdef ZIPINSTALL -ifeq ($(OS_TARGET),linux) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),freebsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),netbsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),openbsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),sunos) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),qnx) -UNIXINSTALLDIR=1 +ifneq ($(findstring $(OS_TARGET),$(UNIXs)),) +UNIXHier=1 endif else -ifeq ($(OS_SOURCE),linux) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_SOURCE),freebsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_SOURCE),netbsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_SOURCE),openbsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),sunos) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),qnx) -UNIXINSTALLDIR=1 +ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),) +UNIXHier=1 endif endif ifndef INSTALL_PREFIX @@ -288,7 +265,7 @@ INSTALL_PREFIX=$(PREFIX) endif endif ifndef INSTALL_PREFIX -ifdef UNIXINSTALLDIR +ifdef UNIXHier INSTALL_PREFIX=/usr/local else ifdef INSTALL_FPCPACKAGE @@ -307,7 +284,7 @@ DIST_DESTDIR:=$(BASEDIR) endif export DIST_DESTDIR ifndef INSTALL_BASEDIR -ifdef UNIXINSTALLDIR +ifdef UNIXHier ifdef INSTALL_FPCPACKAGE INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION) else @@ -318,7 +295,7 @@ INSTALL_BASEDIR:=$(INSTALL_PREFIX) endif endif ifndef INSTALL_BINDIR -ifdef UNIXINSTALLDIR +ifdef UNIXHier ifdef CROSSCOMPILE INSTALL_BINDIR:=$(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/bin else @@ -348,19 +325,23 @@ endif endif endif ifndef INSTALL_LIBDIR -ifdef UNIXINSTALLDIR +ifdef UNIXHier INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib else INSTALL_LIBDIR:=$(INSTALL_UNITDIR) endif endif ifndef INSTALL_SOURCEDIR -ifdef UNIXINSTALLDIR +ifdef UNIXHier ifdef BSDhier SRCPREFIXDIR=share/src else +ifdef linuxHier +SRCPREFIXDIR=share/src +else SRCPREFIXDIR=src endif +endif ifdef INSTALL_FPCPACKAGE ifdef INSTALL_FPCSUBDIR INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME) @@ -383,12 +364,16 @@ endif endif endif ifndef INSTALL_DOCDIR -ifdef UNIXINSTALLDIR +ifdef UNIXHier ifdef BSDhier DOCPREFIXDIR=share/doc else +ifdef linuxHier +DOCPREFIXDIR=share/doc +else DOCPREFIXDIR=doc endif +endif ifdef INSTALL_FPCPACKAGE INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME) else @@ -403,20 +388,28 @@ endif endif endif ifndef INSTALL_EXAMPLEDIR -ifdef UNIXINSTALLDIR +ifdef UNIXHier ifdef INSTALL_FPCPACKAGE ifdef BSDhier INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME) else +ifdef linuxHier +INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples +else INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME) endif +endif else ifdef BSDhier INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION) else +ifdef linuxHier +INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION) +else INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION) endif endif +endif else ifdef INSTALL_FPCPACKAGE INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME) @@ -440,7 +433,19 @@ CROSSBINDIR= endif ifeq ($(OS_SOURCE),linux) ifndef GCCLIBDIR -GCCLIBDIR:=$(shell dirname `gcc -print-libgcc-file-name`) +ifeq ($(CPU_TARGET),i386) +ifneq ($(findstring x86_64,$(shell uname -a)),) +ifeq ($(BINUTILSPREFIX),) +GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`) +else +GCCLIBDIR:=$(shell dirname `$(BINUTILSPREFIX)gcc -print-libgcc-file-name`) +endif +else +GCCLIBDIR:=$(shell dirname `$(BINUTILSPREFIX)gcc -print-libgcc-file-name`) +endif +else +GCCLIBDIR:=$(shell dirname `$(BINUTILSPREFIX)gcc -print-libgcc-file-name`) +endif endif ifndef OTHERLIBDIR OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }') @@ -452,6 +457,7 @@ OTHERLIBDIR+=/usr/pkg/lib endif export GCCLIBDIR OTHERLIB endif +BATCHEXT=.bat LOADEREXT=.as EXEEXT=.exe PPLEXT=.ppl @@ -484,24 +490,28 @@ ASMEXT=.asm SHAREDLIBEXT=.dll endif ifeq ($(OS_TARGET),linux) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.lnx ZIPSUFFIX=linux endif ifeq ($(OS_TARGET),freebsd) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.freebsd ZIPSUFFIX=freebsd endif ifeq ($(OS_TARGET),netbsd) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.netbsd ZIPSUFFIX=netbsd endif ifeq ($(OS_TARGET),openbsd) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.openbsd @@ -513,6 +523,7 @@ FPCMADE=fpcmade.w32 ZIPSUFFIX=w32 endif ifeq ($(OS_TARGET),os2) +BATCHEXT=.cmd AOUTEXT=.out STATICLIBPREFIX= SHAREDLIBEXT=.dll @@ -521,6 +532,7 @@ ZIPSUFFIX=os2 ECHO=echo endif ifeq ($(OS_TARGET),emx) +BATCHEXT=.cmd AOUTEXT=.out STATICLIBPREFIX= SHAREDLIBEXT=.dll @@ -538,16 +550,19 @@ EXEEXT=.ttp FPCMADE=fpcmade.ata endif ifeq ($(OS_TARGET),beos) +BATCHEXT=.sh EXEEXT= FPCMADE=fpcmade.be ZIPSUFFIX=be endif ifeq ($(OS_TARGET),sunos) +BATCHEXT=.sh EXEEXT= FPCMADE=fpcmade.sun ZIPSUFFIX=sun endif ifeq ($(OS_TARGET),qnx) +BATCHEXT=.sh EXEEXT= FPCMADE=fpcmade.qnx ZIPSUFFIX=qnx @@ -559,11 +574,14 @@ FPCMADE=fpcmade.nw ZIPSUFFIX=nw endif ifeq ($(OS_TARGET),macos) +BATCHEXT= EXEEXT= FPCMADE=fpcmade.macos ZIPSUFFIX=macos +DEBUGSYMEXT=.xcoff endif ifeq ($(OS_TARGET),darwin) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.darwin @@ -592,24 +610,28 @@ FPCMADE=fpcmade.dos ZIPSUFFIX=watcom endif ifeq ($(OS_TARGET),linux) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.lnx ZIPSUFFIX=linux endif ifeq ($(OS_TARGET),freebsd) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.freebsd ZIPSUFFIX=freebsd endif ifeq ($(OS_TARGET),netbsd) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.netbsd ZIPSUFFIX=netbsd endif ifeq ($(OS_TARGET),openbsd) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.openbsd @@ -626,6 +648,7 @@ FPCMADE=fpcmade.w32 ZIPSUFFIX=w32 endif ifeq ($(OS_TARGET),os2) +BATCHEXT=.cmd PPUEXT=.ppo ASMEXT=.so2 OEXT=.oo2 @@ -658,6 +681,7 @@ EXEEXT=.ttp FPCMADE=fpcmade.ata endif ifeq ($(OS_TARGET),beos) +BATCHEXT=.sh PPUEXT=.ppu ASMEXT=.s OEXT=.o @@ -668,6 +692,7 @@ FPCMADE=fpcmade.be ZIPSUFFIX=be endif ifeq ($(OS_TARGET),sunos) +BATCHEXT=.sh PPUEXT=.ppu ASMEXT=.s OEXT=.o @@ -678,6 +703,7 @@ FPCMADE=fpcmade.sun ZIPSUFFIX=sun endif ifeq ($(OS_TARGET),qnx) +BATCHEXT=.sh PPUEXT=.ppu ASMEXT=.s OEXT=.o @@ -700,13 +726,15 @@ ZIPSUFFIX=nw EXEEXT=.nlm endif ifeq ($(OS_TARGET),macos) +BATCHEXT= PPUEXT=.ppu ASMEXT=.s OEXT=.o SMARTEXT=.sl STATICLIBEXT=.a EXEEXT= -FPCMADE=fpcmade.mcc +DEBUGSYMEXT=.xcoff +FPCMADE=fpcmade.macos endif endif ifndef ECHO @@ -714,7 +742,7 @@ ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(ECHO),) ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(ECHO),) -ECHO= +ECHO= __missing_command__ else ECHO:=$(firstword $(ECHO)) endif @@ -728,7 +756,7 @@ DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(DATE),) DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(DATE),) -DATE= +DATE= __missing_command__ else DATE:=$(firstword $(DATE)) endif @@ -742,7 +770,7 @@ GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(GINSTALL),) GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(GINSTALL),) -GINSTALL= +GINSTALL= __missing_command__ else GINSTALL:=$(firstword $(GINSTALL)) endif @@ -754,7 +782,7 @@ export GINSTALL ifndef CPPROG CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(CPPROG),) -CPPROG= +CPPROG= __missing_command__ else CPPROG:=$(firstword $(CPPROG)) endif @@ -763,7 +791,7 @@ export CPPROG ifndef RMPROG RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(RMPROG),) -RMPROG= +RMPROG= __missing_command__ else RMPROG:=$(firstword $(RMPROG)) endif @@ -772,7 +800,7 @@ export RMPROG ifndef MVPROG MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(MVPROG),) -MVPROG= +MVPROG= __missing_command__ else MVPROG:=$(firstword $(MVPROG)) endif @@ -821,7 +849,7 @@ export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR ifndef PPUMOVE PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(PPUMOVE),) -PPUMOVE= +PPUMOVE= __missing_command__ else PPUMOVE:=$(firstword $(PPUMOVE)) endif @@ -830,7 +858,7 @@ export PPUMOVE ifndef FPCMAKE FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(FPCMAKE),) -FPCMAKE= +FPCMAKE= __missing_command__ else FPCMAKE:=$(firstword $(FPCMAKE)) endif @@ -839,7 +867,7 @@ export FPCMAKE ifndef ZIPPROG ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(ZIPPROG),) -ZIPPROG= +ZIPPROG= __missing_command__ else ZIPPROG:=$(firstword $(ZIPPROG)) endif @@ -848,7 +876,7 @@ export ZIPPROG ifndef TARPROG TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(TARPROG),) -TARPROG= +TARPROG= __missing_command__ else TARPROG:=$(firstword $(TARPROG)) endif @@ -899,7 +927,7 @@ AS=$(ASPROG) LD=$(LDPROG) RC=$(RCPROG) AR=$(ARPROG) -PPAS=ppas$(BATCHEXT) +PPAS=ppas$(SRCBATCHEXT) ifdef inUnix LDCONFIG=ldconfig else @@ -1095,6 +1123,21 @@ REQUIRE_PACKAGES_IBASE=1 REQUIRE_PACKAGES_SQLITE=1 endif endif +ifeq ($(OS_TARGET),freebsd) +ifeq ($(CPU_TARGET),x86_64) +REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL=1 +REQUIRE_PACKAGES_REGEXPR=1 +REQUIRE_PACKAGES_PASJPEG=1 +REQUIRE_PACKAGES_MYSQL=1 +REQUIRE_PACKAGES_IBASE=1 +REQUIRE_PACKAGES_SQLITE=1 +endif +endif ifeq ($(OS_TARGET),beos) ifeq ($(CPU_TARGET),i386) REQUIRE_PACKAGES_RTL=1 @@ -1655,8 +1698,12 @@ ifdef RELEASE ifeq ($(CPU_TARGET),i386) FPCCPUOPT:=-OG2p3 else +ifeq ($(CPU_TARGET),powerpc) +FPCCPUOPT:=-O1 +else FPCCPUOPT:= endif +endif override FPCOPT+=-Xs $(FPCCPUOPT) -n override FPCOPTDEF+=RELEASE endif @@ -1744,7 +1791,7 @@ EXECPPAS:=@$(PPAS) endif endif .PHONY: fpc_exes -ifdef TARGET_PROGRAMS +ifneq ($(TARGET_PROGRAMS),) override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS)) override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) override ALLTARGET+=fpc_exes @@ -1763,7 +1810,7 @@ override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS)) override CLEANRSTFILES+=$(RSTFILES) endif .PHONY: fpc_examples -ifdef TARGET_EXAMPLES +ifneq ($(TARGET_EXAMPLES),) HASEXAMPLES=1 override EXAMPLESOURCEFILES:=$(wildcard $(addsuffix .pp,$(TARGET_EXAMPLES)) $(addsuffix .pas,$(TARGET_EXAMPLES)) $(addsuffix .dpr,$(TARGET_EXAMPLES))) override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(TARGET_EXAMPLES)) @@ -1776,7 +1823,7 @@ ifeq ($(OS_TARGET),emx) override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES)) endif endif -ifdef TARGET_EXAMPLEDIRS +ifneq ($(TARGET_EXAMPLEDIRS),) HASEXAMPLES=1 endif fpc_examples: all $(EXAMPLEFILES) $(addsuffix _all,$(TARGET_EXAMPLEDIRS)) @@ -1912,7 +1959,7 @@ USEZIPWRAPPER=1 endif ifdef USEZIPWRAPPER ZIPPATHSEP=$(PATHSEP) -ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(BATCHEXT)) +ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT)) else ZIPPATHSEP=/ endif @@ -1966,6 +2013,9 @@ override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS)) endif ifdef CLEANPPUFILES override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) +ifdef DEBUGSYMEXT +override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES)) +endif override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES)) override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES))) endif @@ -1989,6 +2039,7 @@ ifdef LIB_NAME -$(DEL) $(LIB_NAME) $(LIB_FULLNAME) endif -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) + -$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT) fpc_distclean: clean ifdef COMPILER_UNITTARGETDIR TARGETDIRCLEAN=fpc_clean @@ -2000,9 +2051,13 @@ endif -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) -$(DELTREE) *$(SMARTEXT) -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) + -$(DEL) *_ppas$(BATCHEXT) ifdef AOUTEXT -$(DEL) *$(AOUTEXT) endif +ifdef DEBUGSYMEXT + -$(DEL) *$(DEBUGSYMEXT) +endif .PHONY: fpc_baseinfo override INFORULES+=fpc_baseinfo fpc_baseinfo: diff --git a/Makefile.fpc b/Makefile.fpc index c4d7adb30e..a6bf339b93 100644 --- a/Makefile.fpc +++ b/Makefile.fpc @@ -34,6 +34,7 @@ files=$(wildcard ./designer/*$(OEXT)) $(wildcard ./designer/*$(PPUEXT)) \ $(wildcard ./doceditor/*$(OEXT)) $(wildcard ./doceditor/*$(PPUEXT)) [install] +fpcpackage=n basedir=share/lazarus [dist] diff --git a/components/codetools/finddeclarationtool.pas b/components/codetools/finddeclarationtool.pas index 60b930964b..475bca88f2 100644 --- a/components/codetools/finddeclarationtool.pas +++ b/components/codetools/finddeclarationtool.pas @@ -3607,7 +3607,8 @@ const sutObjPas = 2; sutLineInfo = 3; sutHeapTrc = 4; - sutNone = 5; + sutSysThrds = 5; + sutNone = 6; var OldInput: TFindDeclarationInput; SystemAlias: string; @@ -3646,9 +3647,18 @@ begin CurUnitType:=sutLineInfo else if UpAtomIs('HEAPTRC') then CurUnitType:=sutHeapTrc + else if UpAtomIs('SYSTHRDS') then + CurUnitType:=sutSysThrds else CurUnitType:=sutNone; // try hidden units + if (CurUnitType>sutSysThrds) + and Scanner.InitialValues.IsDefined(ExternalMacroStart+'UseSysThrds') + then begin + // try hidden used unit 'systhrds' + Result:=FindIdentifierInUsedUnit('SysThrds',Params); + if Result then exit; + end; if (CurUnitType>sutHeapTrc) and Scanner.InitialValues.IsDefined(ExternalMacroStart+'UseHeapTrcUnit') then begin diff --git a/components/codetools/linkscanner.pas b/components/codetools/linkscanner.pas index c33346c600..cb121fb86d 100644 --- a/components/codetools/linkscanner.pas +++ b/components/codetools/linkscanner.pas @@ -256,6 +256,7 @@ type function ReadNextSwitchDirective: boolean; function LongSwitchDirective: boolean; function ModeDirective: boolean; + function ThreadingDirective: boolean; procedure BuildDirectiveFuncList; procedure PushIncludeLink(ACleanedPos, ASrcPos: integer; ACode: Pointer); function PopIncludeLink: TSourceLink; @@ -1977,6 +1978,7 @@ begin Add('INCLUDE',{$ifdef FPC}@{$endif}IncludeDirective); Add('INCLUDEPATH',{$ifdef FPC}@{$endif}IncludePathDirective); Add('MODE',{$ifdef FPC}@{$endif}ModeDirective); + Add('THREADING',{$ifdef FPC}@{$endif}ThreadingDirective); end; FSkipDirectiveFuncList:=TKeyWordFunctionList.Create; with FSkipDirectiveFuncList do begin @@ -2055,6 +2057,24 @@ begin Result:=true; end; +function TLinkScanner.ThreadingDirective: boolean; +var + ValStart: integer; +begin + SkipSpace; + ValStart:=SrcPos; + while (SrcPos<=SrcLen) and (IsWordChar[Src[SrcPos]]) do + inc(SrcPos); + if CompareUpToken('ON',Src,ValStart,SrcPos) then begin + // define THREADING + Values.Variables[ExternalMacroStart+'UseSysThrds']:='1'; + end else begin + // undefine THREADING + Values.Undefine(ExternalMacroStart+'UseSysThrds'); + end; + Result:=true; +end; + function TLinkScanner.ReadNextSwitchDirective: boolean; var DirStart, DirLen: integer; begin diff --git a/lcl/Makefile b/lcl/Makefile index 943e8914f3..ad8f47a75f 100644 --- a/lcl/Makefile +++ b/lcl/Makefile @@ -1,15 +1,24 @@ # -# Don't edit, this file is generated by FPCMake Version 1.1 [2004/03/14] +# Don't edit, this file is generated by FPCMake Version 1.1 [2004/05/29] # default: all MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom -override PATH:=$(subst \,/,$(PATH)) +BSDs = freebsd netbsd openbsd darwin +UNIXs = linux $(BSDs) sunos qnx +FORCE: +.PHONY: FORCE +override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH))) +ifneq ($(findstring darwin,$(OSTYPE)),) +inUnix=1 #darwin +SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH))) +else ifeq ($(findstring ;,$(PATH)),) inUnix=1 SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH))) else SEARCHPATH:=$(subst ;, ,$(PATH)) endif +endif SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE)))) PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH)))) ifeq ($(PWD),) @@ -37,22 +46,13 @@ ifneq ($(findstring cygdrive,$(PATH)),) inCygWin=1 endif endif -ifeq ($(OS_TARGET),freebsd) -BSDhier=1 -endif -ifeq ($(OS_TARGET),netbsd) -BSDhier=1 -endif -ifeq ($(OS_TARGET),openbsd) -BSDhier=1 -endif ifdef inUnix -BATCHEXT=.sh +SRCBATCHEXT=.sh else ifdef inOS2 -BATCHEXT=.cmd +SRCBATCHEXT=.cmd else -BATCHEXT=.bat +SRCBATCHEXT=.bat endif endif ifdef inUnix @@ -154,6 +154,12 @@ ifeq ($(findstring $(OS_TARGET),$(MAKEFILETARGETS)),) $(error The Makefile doesn't support target $(OS_TARGET), please run fpcmake first) endif endif +ifneq ($(findstring $(OS_TARGET),$(BSDs)),) +BSDhier=1 +endif +ifeq ($(OS_TARGET),linux) +linuxHier=1 +endif export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE CROSSCOMPILE ifdef FPCDIR override FPCDIR:=$(subst \,/,$(FPCDIR)) @@ -257,10 +263,9 @@ endif endif override TARGET_DIRS+=interfaces override TARGET_UNITS+=alllclunits -override TARGET_IMPLICITUNITS+=actnlist arrow avglvltree buttons calendar checklst clipbrd clistbox comctrls commctrl controls dbctrls dbgrids dialogs dynamicarray dynhasharray editbtn extctrls extdlgs extendedstrings filectrl fpcadds forms graphics graphmath graphtype grids imglist interfacebase lazlinkedlist lclintf lclproc lclmemmanager lclstrconsts lcltype lmessages lresources maskedit menus pairsplitter postscriptprinter printers spin stdactns stdctrls stringhashlist textstrings toolwin utrace vclglobals +override TARGET_IMPLICITUNITS+=actnlist arrow avglvltree buttons calendar checklst clipbrd clistbox comctrls commctrl controls dbctrls dbgrids dialogs dynamicarray dynhasharray editbtn extctrls extdlgs extendedstrings extgraphics filectrl fpcadds forms graphics graphmath graphtype grids imglist interfacebase lazlinkedlist lclintf lclproc lclmemmanager lclstrconsts lcltype lmessages lresources maskedit menus pairsplitter postscriptprinter printers spin stdactns stdctrls stringhashlist textstrings toolwin utrace vclglobals override TARGET_RSTS+=lclstrconsts override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard ./units/*$(OEXT)) $(wildcard ./units/*$(PPUEXT)) $(wildcard ./units/*$(RSTEXT)) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT)) -override INSTALL_BUILDUNIT=alllclunits override COMPILER_OPTIONS+=-gl override COMPILER_INCLUDEDIR+=include override COMPILER_UNITDIR+=. $(NONWIN32) widgetset @@ -272,42 +277,12 @@ ifdef REQUIRE_PACKAGESDIR override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR) endif ifdef ZIPINSTALL -ifeq ($(OS_TARGET),linux) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),freebsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),netbsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),openbsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),sunos) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),qnx) -UNIXINSTALLDIR=1 +ifneq ($(findstring $(OS_TARGET),$(UNIXs)),) +UNIXHier=1 endif else -ifeq ($(OS_SOURCE),linux) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_SOURCE),freebsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_SOURCE),netbsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_SOURCE),openbsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),sunos) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),qnx) -UNIXINSTALLDIR=1 +ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),) +UNIXHier=1 endif endif ifndef INSTALL_PREFIX @@ -316,7 +291,7 @@ INSTALL_PREFIX=$(PREFIX) endif endif ifndef INSTALL_PREFIX -ifdef UNIXINSTALLDIR +ifdef UNIXHier INSTALL_PREFIX=/usr/local else ifdef INSTALL_FPCPACKAGE @@ -335,7 +310,7 @@ DIST_DESTDIR:=$(BASEDIR) endif export DIST_DESTDIR ifndef INSTALL_BASEDIR -ifdef UNIXINSTALLDIR +ifdef UNIXHier ifdef INSTALL_FPCPACKAGE INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION) else @@ -346,7 +321,7 @@ INSTALL_BASEDIR:=$(INSTALL_PREFIX) endif endif ifndef INSTALL_BINDIR -ifdef UNIXINSTALLDIR +ifdef UNIXHier ifdef CROSSCOMPILE INSTALL_BINDIR:=$(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/bin else @@ -376,19 +351,23 @@ endif endif endif ifndef INSTALL_LIBDIR -ifdef UNIXINSTALLDIR +ifdef UNIXHier INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib else INSTALL_LIBDIR:=$(INSTALL_UNITDIR) endif endif ifndef INSTALL_SOURCEDIR -ifdef UNIXINSTALLDIR +ifdef UNIXHier ifdef BSDhier SRCPREFIXDIR=share/src else +ifdef linuxHier +SRCPREFIXDIR=share/src +else SRCPREFIXDIR=src endif +endif ifdef INSTALL_FPCPACKAGE ifdef INSTALL_FPCSUBDIR INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME) @@ -411,12 +390,16 @@ endif endif endif ifndef INSTALL_DOCDIR -ifdef UNIXINSTALLDIR +ifdef UNIXHier ifdef BSDhier DOCPREFIXDIR=share/doc else +ifdef linuxHier +DOCPREFIXDIR=share/doc +else DOCPREFIXDIR=doc endif +endif ifdef INSTALL_FPCPACKAGE INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME) else @@ -431,20 +414,28 @@ endif endif endif ifndef INSTALL_EXAMPLEDIR -ifdef UNIXINSTALLDIR +ifdef UNIXHier ifdef INSTALL_FPCPACKAGE ifdef BSDhier INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME) else +ifdef linuxHier +INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples +else INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME) endif +endif else ifdef BSDhier INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION) else +ifdef linuxHier +INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION) +else INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION) endif endif +endif else ifdef INSTALL_FPCPACKAGE INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME) @@ -468,7 +459,19 @@ CROSSBINDIR= endif ifeq ($(OS_SOURCE),linux) ifndef GCCLIBDIR -GCCLIBDIR:=$(shell dirname `gcc -print-libgcc-file-name`) +ifeq ($(CPU_TARGET),i386) +ifneq ($(findstring x86_64,$(shell uname -a)),) +ifeq ($(BINUTILSPREFIX),) +GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`) +else +GCCLIBDIR:=$(shell dirname `$(BINUTILSPREFIX)gcc -print-libgcc-file-name`) +endif +else +GCCLIBDIR:=$(shell dirname `$(BINUTILSPREFIX)gcc -print-libgcc-file-name`) +endif +else +GCCLIBDIR:=$(shell dirname `$(BINUTILSPREFIX)gcc -print-libgcc-file-name`) +endif endif ifndef OTHERLIBDIR OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }') @@ -480,6 +483,7 @@ OTHERLIBDIR+=/usr/pkg/lib endif export GCCLIBDIR OTHERLIB endif +BATCHEXT=.bat LOADEREXT=.as EXEEXT=.exe PPLEXT=.ppl @@ -512,24 +516,28 @@ ASMEXT=.asm SHAREDLIBEXT=.dll endif ifeq ($(OS_TARGET),linux) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.lnx ZIPSUFFIX=linux endif ifeq ($(OS_TARGET),freebsd) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.freebsd ZIPSUFFIX=freebsd endif ifeq ($(OS_TARGET),netbsd) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.netbsd ZIPSUFFIX=netbsd endif ifeq ($(OS_TARGET),openbsd) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.openbsd @@ -541,6 +549,7 @@ FPCMADE=fpcmade.w32 ZIPSUFFIX=w32 endif ifeq ($(OS_TARGET),os2) +BATCHEXT=.cmd AOUTEXT=.out STATICLIBPREFIX= SHAREDLIBEXT=.dll @@ -549,6 +558,7 @@ ZIPSUFFIX=os2 ECHO=echo endif ifeq ($(OS_TARGET),emx) +BATCHEXT=.cmd AOUTEXT=.out STATICLIBPREFIX= SHAREDLIBEXT=.dll @@ -566,16 +576,19 @@ EXEEXT=.ttp FPCMADE=fpcmade.ata endif ifeq ($(OS_TARGET),beos) +BATCHEXT=.sh EXEEXT= FPCMADE=fpcmade.be ZIPSUFFIX=be endif ifeq ($(OS_TARGET),sunos) +BATCHEXT=.sh EXEEXT= FPCMADE=fpcmade.sun ZIPSUFFIX=sun endif ifeq ($(OS_TARGET),qnx) +BATCHEXT=.sh EXEEXT= FPCMADE=fpcmade.qnx ZIPSUFFIX=qnx @@ -587,11 +600,14 @@ FPCMADE=fpcmade.nw ZIPSUFFIX=nw endif ifeq ($(OS_TARGET),macos) +BATCHEXT= EXEEXT= FPCMADE=fpcmade.macos ZIPSUFFIX=macos +DEBUGSYMEXT=.xcoff endif ifeq ($(OS_TARGET),darwin) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.darwin @@ -620,24 +636,28 @@ FPCMADE=fpcmade.dos ZIPSUFFIX=watcom endif ifeq ($(OS_TARGET),linux) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.lnx ZIPSUFFIX=linux endif ifeq ($(OS_TARGET),freebsd) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.freebsd ZIPSUFFIX=freebsd endif ifeq ($(OS_TARGET),netbsd) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.netbsd ZIPSUFFIX=netbsd endif ifeq ($(OS_TARGET),openbsd) +BATCHEXT=.sh EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.openbsd @@ -654,6 +674,7 @@ FPCMADE=fpcmade.w32 ZIPSUFFIX=w32 endif ifeq ($(OS_TARGET),os2) +BATCHEXT=.cmd PPUEXT=.ppo ASMEXT=.so2 OEXT=.oo2 @@ -686,6 +707,7 @@ EXEEXT=.ttp FPCMADE=fpcmade.ata endif ifeq ($(OS_TARGET),beos) +BATCHEXT=.sh PPUEXT=.ppu ASMEXT=.s OEXT=.o @@ -696,6 +718,7 @@ FPCMADE=fpcmade.be ZIPSUFFIX=be endif ifeq ($(OS_TARGET),sunos) +BATCHEXT=.sh PPUEXT=.ppu ASMEXT=.s OEXT=.o @@ -706,6 +729,7 @@ FPCMADE=fpcmade.sun ZIPSUFFIX=sun endif ifeq ($(OS_TARGET),qnx) +BATCHEXT=.sh PPUEXT=.ppu ASMEXT=.s OEXT=.o @@ -728,13 +752,15 @@ ZIPSUFFIX=nw EXEEXT=.nlm endif ifeq ($(OS_TARGET),macos) +BATCHEXT= PPUEXT=.ppu ASMEXT=.s OEXT=.o SMARTEXT=.sl STATICLIBEXT=.a EXEEXT= -FPCMADE=fpcmade.mcc +DEBUGSYMEXT=.xcoff +FPCMADE=fpcmade.macos endif endif ifndef ECHO @@ -742,7 +768,7 @@ ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(ECHO),) ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(ECHO),) -ECHO= +ECHO= __missing_command__ else ECHO:=$(firstword $(ECHO)) endif @@ -756,7 +782,7 @@ DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(DATE),) DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(DATE),) -DATE= +DATE= __missing_command__ else DATE:=$(firstword $(DATE)) endif @@ -770,7 +796,7 @@ GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(GINSTALL),) GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(GINSTALL),) -GINSTALL= +GINSTALL= __missing_command__ else GINSTALL:=$(firstword $(GINSTALL)) endif @@ -782,7 +808,7 @@ export GINSTALL ifndef CPPROG CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(CPPROG),) -CPPROG= +CPPROG= __missing_command__ else CPPROG:=$(firstword $(CPPROG)) endif @@ -791,7 +817,7 @@ export CPPROG ifndef RMPROG RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(RMPROG),) -RMPROG= +RMPROG= __missing_command__ else RMPROG:=$(firstword $(RMPROG)) endif @@ -800,7 +826,7 @@ export RMPROG ifndef MVPROG MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(MVPROG),) -MVPROG= +MVPROG= __missing_command__ else MVPROG:=$(firstword $(MVPROG)) endif @@ -849,7 +875,7 @@ export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR ifndef PPUMOVE PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(PPUMOVE),) -PPUMOVE= +PPUMOVE= __missing_command__ else PPUMOVE:=$(firstword $(PPUMOVE)) endif @@ -858,7 +884,7 @@ export PPUMOVE ifndef FPCMAKE FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(FPCMAKE),) -FPCMAKE= +FPCMAKE= __missing_command__ else FPCMAKE:=$(firstword $(FPCMAKE)) endif @@ -867,7 +893,7 @@ export FPCMAKE ifndef ZIPPROG ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(ZIPPROG),) -ZIPPROG= +ZIPPROG= __missing_command__ else ZIPPROG:=$(firstword $(ZIPPROG)) endif @@ -876,7 +902,7 @@ export ZIPPROG ifndef TARPROG TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(TARPROG),) -TARPROG= +TARPROG= __missing_command__ else TARPROG:=$(firstword $(TARPROG)) endif @@ -927,7 +953,7 @@ AS=$(ASPROG) LD=$(LDPROG) RC=$(RCPROG) AR=$(ARPROG) -PPAS=ppas$(BATCHEXT) +PPAS=ppas$(SRCBATCHEXT) ifdef inUnix LDCONFIG=ldconfig else @@ -1142,6 +1168,23 @@ REQUIRE_PACKAGES_OPENGL=1 REQUIRE_PACKAGES_GTK=1 endif endif +ifeq ($(OS_TARGET),freebsd) +ifeq ($(CPU_TARGET),x86_64) +REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL=1 +REQUIRE_PACKAGES_PASJPEG=1 +REQUIRE_PACKAGES_MYSQL=1 +REQUIRE_PACKAGES_IBASE=1 +REQUIRE_PACKAGES_SQLITE=1 +REQUIRE_PACKAGES_X11=1 +REQUIRE_PACKAGES_OPENGL=1 +REQUIRE_PACKAGES_GTK=1 +endif +endif ifeq ($(OS_TARGET),beos) ifeq ($(CPU_TARGET),i386) REQUIRE_PACKAGES_RTL=1 @@ -1779,8 +1822,12 @@ ifdef RELEASE ifeq ($(CPU_TARGET),i386) FPCCPUOPT:=-OG2p3 else +ifeq ($(CPU_TARGET),powerpc) +FPCCPUOPT:=-O1 +else FPCCPUOPT:= endif +endif override FPCOPT+=-Xs $(FPCCPUOPT) -n override FPCOPTDEF+=RELEASE endif @@ -1868,7 +1915,7 @@ EXECPPAS:=@$(PPAS) endif endif .PHONY: fpc_units -ifdef TARGET_UNITS +ifneq ($(TARGET_UNITS),) override ALLTARGET+=fpc_units override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS)) override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS)) @@ -2012,7 +2059,7 @@ USEZIPWRAPPER=1 endif ifdef USEZIPWRAPPER ZIPPATHSEP=$(PATHSEP) -ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(BATCHEXT)) +ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT)) else ZIPPATHSEP=/ endif @@ -2066,6 +2113,9 @@ override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS)) endif ifdef CLEANPPUFILES override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) +ifdef DEBUGSYMEXT +override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES)) +endif override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES)) override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES))) endif @@ -2089,6 +2139,7 @@ ifdef LIB_NAME -$(DEL) $(LIB_NAME) $(LIB_FULLNAME) endif -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) + -$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT) fpc_distclean: clean ifdef COMPILER_UNITTARGETDIR TARGETDIRCLEAN=fpc_clean @@ -2100,9 +2151,13 @@ endif -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) -$(DELTREE) *$(SMARTEXT) -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) + -$(DEL) *_ppas$(BATCHEXT) ifdef AOUTEXT -$(DEL) *$(AOUTEXT) endif +ifdef DEBUGSYMEXT + -$(DEL) *$(DEBUGSYMEXT) +endif .PHONY: fpc_baseinfo override INFORULES+=fpc_baseinfo fpc_baseinfo: diff --git a/lcl/Makefile.fpc b/lcl/Makefile.fpc index ceab547dc4..1345b1875d 100644 --- a/lcl/Makefile.fpc +++ b/lcl/Makefile.fpc @@ -85,7 +85,7 @@ unitdir=. $(NONWIN32) widgetset includedir=include [install] -buildunit=alllclunits +#buildunit=alllclunits [clean] files=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) \ diff --git a/lcl/controls.pp b/lcl/controls.pp index 3e034410dc..a73fd47275 100644 --- a/lcl/controls.pp +++ b/lcl/controls.pp @@ -244,9 +244,9 @@ type TWndMethod = procedure(var TheMessage : TLMessage) of Object; TControlStyleType = ( - csAcceptsControls, + csAcceptsControls, // can have childs csCaptureMouse, - csDesignInteractive, + csDesignInteractive, // wants mouse events in design mode csClickEvents, csFramed, csSetCaption, @@ -264,6 +264,8 @@ type csActionClient, csMenuEvents, csNoFocus, + csNeedsBorderPaint, // not implemented + csParentBackground, // not implemented csDesignNoSmoothResize, // no WYSIWYG resizing in designer csDesignFixedBounds // control can not be moved nor resized in designer ); @@ -455,6 +457,8 @@ type NewTarget: TWinControl; var Allow: Boolean) of object; TStartDockEvent = procedure(Sender: TObject; var DragObject: TDragDockObject) of object; + TGetSiteInfoEvent = procedure(Sender: TObject; DockClient: TControl; + var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean) of object; TDragDockObject = class(TBaseDragControlObject) private @@ -759,8 +763,6 @@ type function GetBoundsRect : TRect; function GetClientHeight: Integer; function GetClientWidth: Integer; - function GetFloating: Boolean; - function GetFloatingDockSiteClass: TWinControlClass; function GetLRDockWidth: Integer; function GetMouseCapture : Boolean; function GetTBDockHeight: Integer; @@ -839,6 +841,11 @@ type procedure ChangeScale(M,D : Integer); dynamic; Function CanAutoSize(var NewWidth, NewHeight : Integer): Boolean; virtual; procedure SetAlignedBounds(aLeft, aTop, aWidth, aHeight: integer); virtual; + Function GetClientOrigin : TPoint; virtual; + Function GetClientRect: TRect; virtual; + Function GetScrolledClientRect: TRect; virtual; + function GetChildsRect(Scrolled: boolean): TRect; virtual; + function GetClientScrollOffset: TPoint; virtual; protected // protected messages procedure WMLButtonDown(Var Message: TLMLButtonDown); message LM_LBUTTONDOWN; @@ -870,59 +877,64 @@ type procedure CMParentColorChanged(var Message : TLMessage); message CM_PARENTCOLORCHANGED; procedure CMParentShowHintChanged(var Message : TLMessage); message CM_PARENTSHOWHINTCHANGED; procedure CMVisibleChanged(var Message : TLMessage); message CM_VISIBLECHANGED; + protected + // drag and drop + function GetDockEdge(const MousePos: TPoint): TAlign; dynamic; + function GetFloating: Boolean; virtual; + function GetFloatingDockSiteClass: TWinControlClass; virtual; + procedure BeginAutoDrag; dynamic; + procedure DefaultDockImage(DragDockObject: TDragDockObject; Erase: Boolean); dynamic; + procedure DockTrackNoTarget(Source: TDragDockObject; X, Y: Integer); dynamic; + procedure DoDock(NewDockSite: TWinControl; var ARect: TRect); dynamic; + procedure DoDragMsg(var DragMsg: TCMDrag); virtual; + procedure DoEndDock(Target: TObject; X, Y: Integer); dynamic; + procedure DoEndDrag(Target: TObject; X,Y : Integer); dynamic; + procedure DoStartDock(var DragObject: TDragObject); dynamic; + procedure DoStartDrag(var DragObject: TDragObject); dynamic; + procedure DragCanceled; dynamic; + procedure DragOver(Source: TObject; X,Y: Integer; State: TDragState; + var Accept: Boolean); dynamic; + procedure DrawDragDockImage(DragDockObject: TDragDockObject); dynamic; + procedure EraseDragDockImage(DragDockObject: TDragDockObject); dynamic; + procedure PositionDockRect(DragDockObject: TDragDockObject); dynamic; + procedure SendDockNotification; virtual; + procedure SetDragMode(Value: TDragMode); virtual; + protected + // mouse + procedure Click; dynamic; + procedure DblClick; dynamic; + procedure TripleClick; dynamic; + procedure QuadClick; dynamic; + procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); dynamic; + procedure MouseMove(Shift: TShiftState; X,Y: Integer); Dynamic; + procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); dynamic; + procedure MouseEnter; virtual; + procedure MouseLeave; virtual; + protected procedure Changed; function GetPalette: HPalette; virtual; function ChildClassAllowed(ChildClass: TClass): boolean; virtual; procedure Loaded; override; procedure AssignTo(Dest: TPersistent); override; - procedure BeginAutoDrag; dynamic; - procedure DoEndDock(Target: TObject; X, Y: Integer); dynamic; - procedure DoDock(NewDockSite: TWinControl; var ARect: TRect); dynamic; - procedure DoStartDock(var DragObject: TDragObject); dynamic; - function GetDockEdge(const MousePos: TPoint): TAlign; dynamic; - procedure PositionDockRect(DragDockObject: TDragDockObject); dynamic; - procedure Click; dynamic; - procedure DblClick; dynamic; - procedure TripleClick; dynamic; - procedure QuadClick; dynamic; - procedure DoDragMsg(var DragMsg: TCMDrag); virtual; - procedure DoStartDrag(var DragObject: TDragObject); dynamic; - procedure DragOver(Source: TObject; X,Y: Integer; State: TDragState; - var Accept: Boolean); dynamic; - procedure DragCanceled; dynamic; - procedure DoEndDrag(Target: TObject; X,Y : Integer); dynamic; procedure InvalidateControl(IsVisible, IsOpaque : Boolean); procedure InvalidateControl(IsVisible, IsOpaque, IgnoreWinControls: Boolean); - procedure SendDockNotification(Msg: Cardinal; WParam: WParam; LParam: LParam); virtual; procedure FontChanged(Sender: TObject); virtual; function GetAction: TBasicAction; virtual; - function GetActionLinkClass: TControlActionLinkClass; dynamic; function RealGetText: TCaption; virtual; procedure RealSetText(const Value: TCaption); virtual; procedure SetAction(Value: TBasicAction); virtual; procedure SetColor(Value : TColor); virtual; - procedure SetDragMode (Value: TDragMode); virtual; procedure SetEnabled(Value: Boolean); virtual; procedure SetHint(const Value: String); virtual; procedure SetName(const Value: TComponentName); override; procedure SetParent(AParent: TWinControl); virtual; Procedure SetParentComponent(Value: TComponent); override; procedure WndProc(var TheMessage: TLMessage); virtual; - procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); dynamic; - procedure MouseMove(Shift: TShiftState; X,Y: Integer); Dynamic; - procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); dynamic; - procedure MouseEnter; virtual; - procedure MouseLeave; virtual; procedure CaptureChanged; virtual; procedure Notification(AComponent: TComponent; Operation: TOperation); override; Function CanTab: Boolean; virtual; Function Focused: Boolean; dynamic; Procedure SetFocus; virtual; - Function GetClientOrigin : TPoint; virtual; - Function GetClientRect: TRect; virtual; - Function GetScrolledClientRect: TRect; virtual; - function GetChildsRect(Scrolled: boolean): TRect; virtual; - function GetClientScrollOffset: TPoint; virtual; function GetDeviceContext(var WindowHandle: HWnd): HDC; virtual; Function GetEnabled: Boolean; virtual; Function GetPopupMenu: TPopupMenu; dynamic; @@ -933,6 +945,9 @@ type procedure RemoveControlHandler(HandlerType: TControlHandlerType; AMethod: TMethod); procedure DoContextPopup(const MousePos: TPoint; var Handled: Boolean); virtual; + protected + // actions + function GetActionLinkClass: TControlActionLinkClass; dynamic; procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); dynamic; protected // optional properties (not every descendent supports them) @@ -964,15 +979,12 @@ type property OnStartDock: TStartDockEvent read FOnStartDock write FOnStartDock; property OnStartDrag: TStartDragEvent read FOnStartDrag write FOnStartDrag; public - FCompStyle: Byte; // enables (valid) use of 'IN' operator - Function PerformTab(ForwardTab: boolean): Boolean; Virtual; - // use overload to simulate default - procedure BeginDrag(Immediate: Boolean; Threshold: Integer); - procedure BeginDrag(Immediate: Boolean); - procedure BringToFront; - function ColorIsStored: boolean; virtual; - constructor Create(AOwner: TComponent);override; - destructor Destroy; override; + FCompStyle: Byte; // enables (valid) use of 'IN' operator (this is a hack + // for speed. It will be replaced by the use of the widgetset classes. + // So, don't use it anymore) + public + // drag and dock + Procedure DragDrop(Source: TObject; X,Y: Integer); Dynamic; procedure Dock(NewDockSite: TWinControl; ARect: TRect); dynamic; function ManualDock(NewDockSite: TWinControl; DropControl: TControl {$IFNDEF VER1_0}= nil{$ENDIF}; @@ -980,6 +992,14 @@ type function ManualFloat(ScreenPos: TRect): Boolean; function ReplaceDockedControl(Control: TControl; NewDockSite: TWinControl; DropControl: TControl; ControlSide: TAlign): Boolean; + public + constructor Create(AOwner: TComponent);override; + destructor Destroy; override; + Function PerformTab(ForwardTab: boolean): Boolean; Virtual; + procedure BeginDrag(Immediate: Boolean; Threshold: Integer); + procedure BeginDrag(Immediate: Boolean); + procedure BringToFront; + function ColorIsStored: boolean; virtual; function HasParent: Boolean; override; function IsParentOf(AControl: TControl): boolean; virtual; procedure Refresh; @@ -987,9 +1007,8 @@ type Procedure Invalidate; virtual; procedure AddControl; virtual; function CheckChildClassAllowed(ChildClass: TClass; - ExceptionOnInvalid: boolean): boolean; + ExceptionOnInvalid: boolean): boolean; procedure CheckNewParent(AParent: TWinControl); virtual; - Procedure DragDrop(Source: TObject; X,Y: Integer); Dynamic; procedure SendToBack; procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); virtual; procedure SetInitialBounds(aLeft, aTop, aWidth, aHeight: integer); virtual; @@ -1072,7 +1091,7 @@ type // Moved to LCLType ot avoid unit circles - // TCreateParams is part of th interface + // TCreateParams is part of the interface TCreateParams = LCLType.TCreateParams; TBorderWidth = 0..MaxInt; @@ -1250,6 +1269,7 @@ type FChildSizing: TControlChildSizing; FControls: TList; FDefWndProc: Pointer; + FDockClients: TList; //FDockSite: Boolean; FDoubleBuffered: Boolean; FClientWidth: Integer; @@ -1291,7 +1311,7 @@ type function GetTabOrder: TTabOrder; function GetVisibleDockClientCount: Integer; procedure SetChildSizing(const AValue: TControlChildSizing); - procedure SetDockSite(const AValue: Boolean); + procedure SetDockSite(const NewDockSite: Boolean); procedure SetHandle(NewHandle: HWND); procedure SetBorderWidth(Value : TBorderWidth); procedure SetParentCtl3D(Value : Boolean); @@ -2269,6 +2289,9 @@ end. { ============================================================================= $Log$ + Revision 1.205 2004/05/30 14:02:30 mattias + implemented OnChange for TRadioButton, TCheckBox, TToggleBox and some more docking stuff + Revision 1.204 2004/05/22 14:35:32 mattias fixed button return key diff --git a/lcl/include/control.inc b/lcl/include/control.inc index 39d75447da..561068fc90 100644 --- a/lcl/include/control.inc +++ b/lcl/include/control.inc @@ -95,7 +95,9 @@ end; procedure TControl.DoDock(NewDockSite: TWinControl; var ARect: TRect); begin - + // ToDo: DoDock + BoundsRect := ARect; + if (NewDockSite = nil) then Parent := nil; end; procedure TControl.DoStartDock(var DragObject: TDragObject); @@ -108,7 +110,8 @@ end; function TControl.GetDockEdge(const MousePos: TPoint): TAlign; Calculate the dock side depending on current MousePos. - MousePos is relative to control's Left, top. + + Important: MousePos is relative to this control's Left, Top. ------------------------------------------------------------------------------} function TControl.GetDockEdge(const MousePos: TPoint): TAlign; var @@ -141,9 +144,43 @@ begin end; end; +{------------------------------------------------------------------------------ + procedure TControl.PositionDockRect(DragDockObject: TDragDockObject); + + +------------------------------------------------------------------------------} procedure TControl.PositionDockRect(DragDockObject: TDragDockObject); +var + NewWidth: LongInt; + NewHeight: LongInt; + NewLeft: LongInt; + NewTop: LongInt; + WinDragTarget: TWinControl; begin - // ToDo + with DragDockObject do begin + if (DragTarget is TWinControl) and TWinControl(DragTarget).UseDockManager + then begin + WinDragTarget:=TWinControl(DragTarget); + GetWindowRect(WinDragTarget.Handle, FDockRect); + if (WinDragTarget.DockManager<>nil) then + WinDragTarget.DockManager.PositionDockRect(Control,DropOnControl, + DropAlign,FDockRect); + end else begin + NewWidth := Control.UndockWidth; + NewHeight := Control.UndockHeight; + NewLeft := DragPos.X; + NewTop := DragPos.Y; + with FDockRect do + begin + Left := NewLeft; + Top := NewTop; + Right := Left + NewWidth; + Bottom := Top + NewHeight; + end; + // let user adjust dock rect + AdjustDockRect(FDockRect); + end; + end; end; {------------------------------------------------------------------------------ @@ -443,6 +480,9 @@ begin Result := ClientRect.Right; end; +{------------------------------------------------------------------------------ + function TControl.GetFloating: Boolean; +------------------------------------------------------------------------------} function TControl.GetFloating: Boolean; var CurHostDockSite: TWinControl; @@ -452,11 +492,17 @@ begin and (CurHostDockSite is FloatingDockSiteClass); end; +{------------------------------------------------------------------------------ + function TControl.GetFloatingDockSiteClass: TWinControlClass; +------------------------------------------------------------------------------} function TControl.GetFloatingDockSiteClass: TWinControlClass; begin Result := FFloatingDockSiteClass; end; +{------------------------------------------------------------------------------ + function TControl.GetLRDockWidth: Integer; +------------------------------------------------------------------------------} function TControl.GetLRDockWidth: Integer; begin if FLRDockWidth>0 then @@ -905,7 +951,6 @@ end; {------------------------------------------------------------------------------ TControl.GetClientOrigin - ------------------------------------------------------------------------------} function TControl.GetClientOrigin: TPoint; @@ -926,10 +971,9 @@ Begin //Assert(False, Format('Trace:[TControl.GetClientOrigin] %s --> (%d, %d)', [Classname, Result.X, Result.Y])); end; -{------------------------------------------------------------------------------} -{ TControl.ScreenToClient -} -{------------------------------------------------------------------------------} +{------------------------------------------------------------------------------ + TControl.ScreenToClient +------------------------------------------------------------------------------} Function TControl.ScreenToClient(const Point : TPoint) : TPoint; var P : TPoint; @@ -942,7 +986,6 @@ end; {------------------------------------------------------------------------------ Function TControl.ClientToScreen(const Point : TPoint) : TPoint; - ------------------------------------------------------------------------------} Function TControl.ClientToScreen(const Point : TPoint) : TPoint; var @@ -953,47 +996,46 @@ begin Result.Y := Point.Y + P.Y; end; -{------------------------------------------------------------------------------} -{ TControl.SendDockNotification -} -{------------------------------------------------------------------------------} -Procedure TControl.SendDockNotification(Msg: Cardinal; WParam: WParam; LParam: LParam); +{------------------------------------------------------------------------------ + TControl.SendDockNotification +------------------------------------------------------------------------------} +procedure TControl.SendDockNotification; begin - + if (FHostDockSite<>nil) and (DragObject=nil) + and (ComponentState*[csLoading,csDestroying] = []) then + begin + // ToDo + //FHostDockSite.Perform + end; end; - -{------------------------------------------------------------------------------} -{ TControl.DblClick -} -{------------------------------------------------------------------------------} +{------------------------------------------------------------------------------ + TControl.DblClick +------------------------------------------------------------------------------} procedure TControl.DblClick; begin If Assigned(FOnDblClick) then FOnDblClick(Self); end; -{------------------------------------------------------------------------------} -{ TControl.TripleClick -} -{------------------------------------------------------------------------------} +{------------------------------------------------------------------------------ + TControl.TripleClick +------------------------------------------------------------------------------} procedure TControl.TripleClick; begin If Assigned(FOnTripleClick) then FOnTripleClick(Self); end; -{------------------------------------------------------------------------------} -{ TControl.QuadClick -} -{------------------------------------------------------------------------------} +{------------------------------------------------------------------------------ + TControl.QuadClick +------------------------------------------------------------------------------} procedure TControl.QuadClick; begin If Assigned(FOnQuadClick) then FOnQuadClick(Self); end; -{------------------------------------------------------------------------------} -{ TControl.DoDragMsg -} -{------------------------------------------------------------------------------} +{------------------------------------------------------------------------------ + TControl.DoDragMsg +------------------------------------------------------------------------------} Procedure TControl.DoDragMsg(var DragMsg: TCMDrag); var Accepts: Boolean; @@ -1372,7 +1414,8 @@ begin else begin if TheMessage.Msg = CM_VISIBLECHANGED then begin - with TheMessage do SendDockNotification(Msg,WParam,LParam); + // ToDo: call a real method, do not create a win32 message + //with TheMessage do SendDockNotification(Msg,WParam,LParam); end; end; end; @@ -2248,9 +2291,36 @@ begin CNSendMessage(LM_DRAGINFOCHANGED,Self,Nil); end; -{------------------------------------------------------------------------------} -{ TControl SetLeft } -{------------------------------------------------------------------------------} +procedure TControl.DrawDragDockImage(DragDockObject: TDragDockObject); +begin + DefaultDockImage(DragDockObject, False); +end; + +procedure TControl.EraseDragDockImage(DragDockObject: TDragDockObject); +begin + DefaultDockImage(DragDockObject, True); +end; + +{------------------------------------------------------------------------------ + TControl DefaultDockImage +------------------------------------------------------------------------------} +procedure TControl.DefaultDockImage(DragDockObject: TDragDockObject; + Erase: Boolean); +begin + // ToDo: draw or erase dock image +end; + +{------------------------------------------------------------------------------ + TControl DockTrackNoTarget +------------------------------------------------------------------------------} +procedure TControl.DockTrackNoTarget(Source: TDragDockObject; X, Y: Integer); +begin + PositionDockRect(Source); +end; + +{------------------------------------------------------------------------------ + TControl SetLeft +------------------------------------------------------------------------------} procedure TControl.SetLeft(Value: Integer); begin {$IFDEF CHECK_POSITION} @@ -2259,9 +2329,9 @@ begin SetBounds(Value, FTop, FWidth, FHeight); end; -{------------------------------------------------------------------------------} -{ TControl SetTop } -{------------------------------------------------------------------------------} +{------------------------------------------------------------------------------ + TControl SetTop +------------------------------------------------------------------------------} procedure TControl.SetTop(Value: Integer); begin {$IFDEF CHECK_POSITION} @@ -2270,9 +2340,9 @@ begin SetBounds(FLeft, Value, FWidth, FHeight); end; -{------------------------------------------------------------------------------} -{ TControl SetWidth } -{------------------------------------------------------------------------------} +{------------------------------------------------------------------------------ + TControl SetWidth +------------------------------------------------------------------------------} procedure TControl.SetWidth(Value: Integer); begin {$IFDEF CHECK_POSITION} @@ -2552,15 +2622,75 @@ begin end; procedure TControl.Dock(NewDockSite: TWinControl; ARect: TRect); + + procedure RaiseAlreadyDocking; + begin + RaiseGDBException('TControl.Dock '+Name+':'+ClassName+' csDocking in FControlState'); + end; + +var + OldHostDockSite: TWinControl; begin - // ToDo + if (csDocking in FControlState) then + RaiseAlreadyDocking; + + // dock + Include(FControlState, csDocking); + try + OldHostDockSite:=HostDockSite; + + if OldHostDockSite<>NewDockSite then begin + // HostDockSite will change -> prepare + if (OldHostDockSite<>nil) and (OldHostDockSite.FDockClients<>nil) then + OldHostDockSite.FDockClients.Remove(Self); + if (NewDockSite<>nil) and (NewDockSite.FDockClients<>nil) then + NewDockSite.FDockClients.Add(Self); + end; + + DoDock(NewDockSite,ARect); + + if FHostDockSite<>NewDockSite then + begin + // HostDockSite has changed -> commit + OldHostDockSite := FHostDockSite; + FHostDockSite := NewDockSite; + if NewDockSite<>nil then NewDockSite.DoAddDockClient(Self,ARect); + if OldHostDockSite<>nil then OldHostDockSite.DoRemoveDockClient(Self); + end; + finally + Exclude(FControlState, csDocking); + end; end; function TControl.ManualDock(NewDockSite: TWinControl; DropControl: TControl; ControlSide: TAlign): Boolean; +var + NewBounds: TRect; begin - // ToDo - Result:=false; + if (NewDockSite=nil) then begin + // undock / float this control + if (HostDockSite<>nil) and HostDockSite.UseDockManager + and (HostDockSite.DockManager<>nil) then begin + HostDockSite.DockManager.GetControlBounds(Self,NewBounds); + // ToDo + RaiseGDBException('MapWindowPoints not yet implemented'); + //MapWindowPoints(HostDockSite.Handle, 0, NewBounds.TopLeft, 2); + end + else begin + NewBounds.Left:=Left; + NewBounds.Top:=Top; + if Parent<>nil then + NewBounds.TopLeft := Parent.ClientToScreen(NewBounds.TopLeft); + end; + NewBounds := Bounds(NewBounds.Left,NewBounds.Top,UndockWidth,UndockHeight); + Result := ManualFloat(NewBounds); + end + else + begin + // dock / unfloat this control + // ToDo + RaiseGDBException('TControl.ManualDock docking not yet implemented'); + end; end; function TControl.ManualFloat(ScreenPos: TRect): Boolean; @@ -2924,6 +3054,9 @@ end; { ============================================================================= $Log$ + Revision 1.187 2004/05/30 14:02:30 mattias + implemented OnChange for TRadioButton, TCheckBox, TToggleBox and some more docking stuff + Revision 1.186 2004/05/15 20:17:09 mattias replaced WMSize by DoSetBounds diff --git a/lcl/include/customcheckbox.inc b/lcl/include/customcheckbox.inc index 2b98e4e213..5ed3f98724 100644 --- a/lcl/include/customcheckbox.inc +++ b/lcl/include/customcheckbox.inc @@ -30,16 +30,10 @@ - lots of unknown issues TODO: - - check for Delphi compatibility - test if fState / Checked is always set right Bugs: - - - Seems as if you can't (yet) use the State/Checked properties in - the OnClick handler. Not sure if there some bug inside this class - or if the Callback is called before the state of the component has - been updated. } {------------------------------------------------------------------------------ @@ -49,7 +43,7 @@ Set new state of the checkbox. ------------------------------------------------------------------------------} -procedure TCustomCheckBox.SetState(Value : TCheckBoxState); +procedure TCustomCheckBox.SetState(Value: TCheckBoxState); begin if FState <> Value then begin @@ -66,11 +60,27 @@ end; Get current state of the checkbox. To get the real state a call to the interface is made here. ------------------------------------------------------------------------------} -function TCustomCheckBox.GetState : TCheckBoxState; +function TCustomCheckBox.GetState: TCheckBoxState; begin + fState:=RetrieveState; + Result := fState; +end; + +procedure TCustomCheckBox.DoChange(var Msg); +var + NewState: TCheckBoxState; +begin + NewState:=RetrieveState; + if FState=NewState then exit; + FState:=RetrieveState; + DoOnChange; +end; + +function TCustomCheckBox.RetrieveState: TCheckBoxState; +begin + Result:=FState; if HandleAllocated - then CNSendMessage (LM_GETVALUE, Self, @fState); // get the actual state of the component - GetState := fState; + then CNSendMessage (LM_GETVALUE, Self, @Result); // get the actual state of the component end; {------------------------------------------------------------------------------ @@ -198,6 +208,9 @@ end; { $Log$ + Revision 1.21 2004/05/30 14:02:30 mattias + implemented OnChange for TRadioButton, TCheckBox, TToggleBox and some more docking stuff + Revision 1.20 2004/04/18 23:55:39 marc * Applied patch from Ladislav Michl * Changed the way TControl.Text is resolved diff --git a/lcl/include/dragobject.inc b/lcl/include/dragobject.inc index 6358304657..dcc818d9af 100644 --- a/lcl/include/dragobject.inc +++ b/lcl/include/dragobject.inc @@ -154,33 +154,52 @@ end; procedure TDragDockObject.SetBrush(Value: TBrush); begin - + if FBrush=nil then FBrush:=TBrush.Create; + FBrush.Assign(Value); end; procedure TDragDockObject.AdjustDockRect(ARect: TRect); -begin + function AbsMin(Value1, Value2: Integer): Integer; + begin + if Abs(Value1) < Abs(Value2) then Result := Value1 + else Result := Value2; + end; + +var + DeltaX, DeltaY: Integer; +begin + if (FDragPos.xARect.Right) then + DeltaX := AbsMin(ARect.Left-FDragPos.x,ARect.Right-FDragPos.x) + else + DeltaX := 0; + if (FDragPos.yARect.Bottom) then + DeltaY := AbsMin(ARect.Top-FDragPos.y,ARect.Bottom-FDragPos.y) + else + DeltaY := 0; + if (DeltaX<>0) or (DeltaY<>0) then + OffsetRect(FDockRect, -DeltaX, -DeltaY); end; procedure TDragDockObject.DrawDragDockImage; begin - + FControl.DrawDragDockImage(Self); end; procedure TDragDockObject.EndDrag(Target: TObject; X, Y: Integer); begin - inherited EndDrag(Target, X, Y); + FControl.DoEndDock(Target, X, Y); end; procedure TDragDockObject.EraseDragDockImage; begin - + FControl.EraseDragDockImage(Self); end; function TDragDockObject.GetDragCursor(Accepted: Boolean; X, Y: Integer ): TCursor; begin - Result:=inherited GetDragCursor(Accepted, X, Y); + Result := crDefault; end; function TDragDockObject.GetFrameWidth: Integer; @@ -195,6 +214,7 @@ end; destructor TDragDockObject.Destroy; begin + FreeThenNil(FBrush); inherited Destroy; end; diff --git a/lcl/include/wincontrol.inc b/lcl/include/wincontrol.inc index 4c1b3d2f1d..57ea366f27 100644 --- a/lcl/include/wincontrol.inc +++ b/lcl/include/wincontrol.inc @@ -2447,15 +2447,18 @@ end; function TWinControl.GetDockClientCount: Integer; begin - // ToDo - Result:=0; + if FDockClients<>nil then + Result := FDockClients.Count + else + Result := 0; end; function TWinControl.GetDockClients(Index: Integer): TControl; begin - // ToDo - RaiseGDBException('not implemented'); - Result:=nil; + if FDockClients<>nil then + Result := TControl(FDockClients[Index]) + else + Result := nil; end; {------------------------------------------------------------------------------} @@ -2568,6 +2571,7 @@ begin FreeThenNil(FBrush); FreeThenNil(FChildSizing); + FreeThenNil(FDockClients); //DebugLn('[TWinControl.Destroy] D ',Name,':',ClassName); inherited Destroy; //DebugLn('[TWinControl.Destroy] END ',Name,':',ClassName); @@ -3334,9 +3338,12 @@ begin end; function TWinControl.GetVisibleDockClientCount: Integer; +var + i: integer; begin - // ToDo - Result:=0; + Result := 0; + for i:=FDockClients.Count-1 downto 0 do + if TControl(FDockClients[I]).Visible then inc(Result); end; procedure TWinControl.SetChildSizing(const AValue: TControlChildSizing); @@ -3345,10 +3352,26 @@ begin FChildSizing.Assign(AValue); end; -procedure TWinControl.SetDockSite(const AValue: Boolean); +procedure TWinControl.SetDockSite(const NewDockSite: Boolean); begin - if FDockSite=AValue then exit; - FDockSite:=AValue; + if FDockSite=NewDockSite then exit; + FDockSite := NewDockSite; + if not (csDesigning in ComponentState) then begin + // ToDo + RaiseGDBException('RegisterDockSite not yet implemented'); + //RegisterDockSite(Self,NewDockSite); + if not NewDockSite then begin + FreeThenNil(FDockClients); + FDockClients := nil; + FDockManager := nil; + end + else begin + if FDockClients = nil then FDockClients := TList.Create; + // ToDo + RaiseGDBException('CreateDockManager not yet implemented'); + //FDockManager := CreateDockManager; + end; + end; end; {------------------------------------------------------------------------------ @@ -3554,6 +3577,9 @@ end; { ============================================================================= $Log$ + Revision 1.234 2004/05/30 14:02:30 mattias + implemented OnChange for TRadioButton, TCheckBox, TToggleBox and some more docking stuff + Revision 1.233 2004/05/22 14:35:32 mattias fixed button return key diff --git a/lcl/interfaces/gtk/gtkcallback.inc b/lcl/interfaces/gtk/gtkcallback.inc index 4acb0e8b45..af6c50c75d 100644 --- a/lcl/interfaces/gtk/gtkcallback.inc +++ b/lcl/interfaces/gtk/gtkcallback.inc @@ -301,7 +301,7 @@ begin Mess.Msg := LM_ACTIVATE; Mess.Result := 0; DeliverMessage(Data, Mess); -//DebugLn('gtkactivateCB ',Result); + //DebugLn('gtkactivateCB ',TWinControl(Data).Name,':',TWinControl(Data).ClassName); Result := CallBackDefaultReturn; end; @@ -386,6 +386,24 @@ end; {$Ifdef GTK1} + +function gtktoggledCB( widget: PGtkWidget; data: gPointer): GBoolean; cdecl; +var + Mess : TLMessage; +begin + Result:= True; + EventTrace('toggled', data); + + if LockOnChange(PgtkObject(Widget),0) > 0 then Exit; + + Mess.Msg := LM_CHANGED; + Mess.Result := 0; + DeliverMessage(Data, Mess); + //DebugLn('gtktoggledCB ',TWinControl(Data).Name,':',TWinControl(Data).ClassName); + + Result := CallBackDefaultReturn; +end; + function gtkDrawAfter(Widget: PGtkWidget; area: PGDKRectangle; data: gPointer) : GBoolean; cdecl; var @@ -3087,6 +3105,9 @@ end; { ============================================================================= $Log$ + Revision 1.233 2004/05/30 14:02:30 mattias + implemented OnChange for TRadioButton, TCheckBox, TToggleBox and some more docking stuff + Revision 1.232 2004/05/22 14:35:32 mattias fixed button return key diff --git a/lcl/interfaces/gtk/gtkobject.inc b/lcl/interfaces/gtk/gtkobject.inc index b30db3a79f..8cc8b83876 100644 --- a/lcl/interfaces/gtk/gtkobject.inc +++ b/lcl/interfaces/gtk/gtkobject.inc @@ -4489,6 +4489,8 @@ begin else if ALCLObject is TCustomMemo then ConnectSenderSignal(gCore, 'changed', @gtkchanged_editbox) + else if ALCLObject is TCustomCheckbox then + ConnectSenderSignal(gObject, 'toggled', @gtktoggledCB) else ConnectSenderSignal(gObject, 'changed', @gtkchanged_editbox); end; @@ -5111,6 +5113,11 @@ begin Begin SetCallback(LM_CLICKED, AGTKObject, ALCLObject); End; + + csRadioButton, csCheckBox, csToggleBox: + begin + SetCallback(LM_CHANGED, AGTKObject, ALCLObject); + end; csCalendar: Begin @@ -9204,6 +9211,9 @@ end; { ============================================================================= $Log$ + Revision 1.506 2004/05/30 14:02:31 mattias + implemented OnChange for TRadioButton, TCheckBox, TToggleBox and some more docking stuff + Revision 1.505 2004/05/22 14:59:23 mattias fixed multi update of TStatusBar diff --git a/lcl/interfaces/gtk/gtkproc.pp b/lcl/interfaces/gtk/gtkproc.pp index f688e56fea..a7d11dbb6e 100644 --- a/lcl/interfaces/gtk/gtkproc.pp +++ b/lcl/interfaces/gtk/gtkproc.pp @@ -95,6 +95,7 @@ function gtkactivateCB(widget: PGtkWidget; data: gPointer): GBoolean; cdecl; function gtkchangedCB( widget: PGtkWidget; data: gPointer): GBoolean; cdecl; function gtkchanged_editbox( widget: PGtkWidget; data: gPointer): GBoolean; cdecl; function gtkdaychanged(Widget: PGtkWidget; data: gPointer): GBoolean; cdecl; +function gtktoggledCB( widget: PGtkWidget; data: gPointer): GBoolean; cdecl; {$IfNdef GTK2} function gtkDrawAfter(Widget: PGtkWidget; area: PGDKRectangle; data: gPointer): GBoolean; cdecl; diff --git a/lcl/interfaces/gtk/gtkwsstdctrls.pp b/lcl/interfaces/gtk/gtkwsstdctrls.pp index 39dd5c1d9e..fddf061be0 100644 --- a/lcl/interfaces/gtk/gtkwsstdctrls.pp +++ b/lcl/interfaces/gtk/gtkwsstdctrls.pp @@ -35,7 +35,7 @@ uses //////////////////////////////////////////////////// // StdCtrls, //////////////////////////////////////////////////// - WSStdCtrls, WSLCLClasses; + WSStdCtrls, WSLCLClasses, GtkInt; type diff --git a/lcl/stdctrls.pp b/lcl/stdctrls.pp index dbcd7cdf8f..334b2e3790 100644 --- a/lcl/stdctrls.pp +++ b/lcl/stdctrls.pp @@ -773,8 +773,10 @@ type FState: TCheckBoxState; FShortCut : TLMShortcut; procedure SetState(Value: TCheckBoxState); - function GetState : TCheckBoxState; + function GetState: TCheckBoxState; + procedure DoChange(var Msg); message LM_CHANGED; protected + function RetrieveState: TCheckBoxState; procedure InitializeWnd; override; procedure Toggle; virtual; function GetChecked: Boolean; override; @@ -786,8 +788,9 @@ type public property AllowGrayed: Boolean read FAllowGrayed write FAllowGrayed; property State: TCheckBoxState read GetState write SetState; - published property TabStop default true; + property UseOnChange; + property OnChange; end; {$IFNDef NewCheckBox} @@ -800,19 +803,20 @@ type constructor Create(AOwner: TComponent); override; published property Action; - property AllowGrayed; property Align; + property AllowGrayed; property Anchors; property AutoSize; property Caption; - property Constraints; property Checked; + property Constraints; property DragCursor; property DragKind; property DragMode; property Enabled; property Hint; property OnChange; + property OnChangeBounds; property OnClick; property OnDragDrop; property OnDragOver; @@ -822,7 +826,6 @@ type property OnMouseDown; property OnMouseMove; property OnMouseUp; - property OnChangeBounds; property OnResize; property OnStartDrag; property ParentShowHint; @@ -928,18 +931,12 @@ type property Anchors; property Caption; property Checked; - property State; - property Visible; - property Enabled; property DragCursor; property DragKind; property DragMode; + property Enabled; property Hint; - property ParentShowHint; - property PopupMenu; - property ShowHint; - property TabOrder; - property TabStop; + property OnChange; property OnClick; property OnDragDrop; property OnDragOver; @@ -950,6 +947,14 @@ type property OnMouseMove; property OnMouseUp; property OnStartDrag; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property State; + property TabOrder; + property TabStop; + property UseOnChange; + property Visible; end; @@ -963,24 +968,19 @@ type constructor Create(TheOwner: TComponent); override; published property Align; + property AllowGrayed; property Anchors; property AutoSize; - property AllowGrayed; property Caption; property Checked; property Constraints; - property State; - property Visible; - property Enabled; property DragCursor; property DragKind; property DragMode; + property Enabled; property Hint; - property ParentShowHint; - property PopupMenu; - property ShowHint; - property TabOrder; - property TabStop; + property OnChange; + property OnChangeBounds; property OnClick; property OnDragDrop; property OnDragOver; @@ -988,13 +988,20 @@ type property OnEnter; property OnExit; property OnMouseDown; - property OnMouseMove; - property OnMouseUp; property OnMouseEnter; property OnMouseLeave; - property OnChangeBounds; + property OnMouseMove; + property OnMouseUp; property OnResize; property OnStartDrag; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property State; + property TabOrder; + property TabStop; + property UseOnChange; + property Visible; end; @@ -1549,6 +1556,9 @@ end. { ============================================================================= $Log$ + Revision 1.146 2004/05/30 14:02:30 mattias + implemented OnChange for TRadioButton, TCheckBox, TToggleBox and some more docking stuff + Revision 1.145 2004/05/21 18:34:44 mattias readded protected TWinControl.BorderStyle