Browse Source

+ Initial version of customapplication object

michael 22 years ago
parent
commit
4f91ae9605

+ 36 - 277
fcl/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2003/04/25]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2002/10/05]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos macosx emx
+MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx
 override PATH:=$(subst \,/,$(PATH))
 override PATH:=$(subst \,/,$(PATH))
 ifeq ($(findstring ;,$(PATH)),)
 ifeq ($(findstring ;,$(PATH)),)
 inUnix=1
 inUnix=1
@@ -58,7 +58,7 @@ ifdef inUnix
 PATHSEP=/
 PATHSEP=/
 else
 else
 PATHSEP:=$(subst /,\,/)
 PATHSEP:=$(subst /,\,/)
-ifdef inCygWin
+ifneq ($(findstring sh.exe,$(SHELL)),)
 PATHSEP=/
 PATHSEP=/
 endif
 endif
 endif
 endif
@@ -111,38 +111,47 @@ endif
 override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
 override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
 override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
 override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
 ifndef FPC_VERSION
 ifndef FPC_VERSION
-FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
-FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+FPC_VERSION:=$(shell $(FPC) -iV)
 endif
 endif
-export FPC FPC_VERSION FPC_COMPILERINFO
+export FPC FPC_VERSION
 unexport CHECKDEPEND ALLDEPENDENCIES
 unexport CHECKDEPEND ALLDEPENDENCIES
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+COMPILERINFO:=$(shell $(FPC) -iSP -iTP -iSO -iTO)
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 1,$(COMPILERINFO))
+endif
 ifndef CPU_TARGET
 ifndef CPU_TARGET
-ifdef CPU_TARGET_DEFAULT
-CPU_TARGET=$(CPU_TARGET_DEFAULT)
+CPU_TARGET:=$(word 2,$(COMPILERINFO))
 endif
 endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 3,$(COMPILERINFO))
 endif
 endif
 ifndef OS_TARGET
 ifndef OS_TARGET
-ifdef OS_TARGET_DEFAULT
-OS_TARGET=$(OS_TARGET_DEFAULT)
-endif
-endif
-ifneq ($(words $(FPC_COMPILERINFO)),5)
-FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
-FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
-FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
-FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+OS_TARGET:=$(word 4,$(COMPILERINFO))
 endif
 endif
+else
 ifndef CPU_SOURCE
 ifndef CPU_SOURCE
-CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+CPU_SOURCE:=$(shell $(FPC) -iSP)
 endif
 endif
 ifndef CPU_TARGET
 ifndef CPU_TARGET
-CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+CPU_TARGET:=$(shell $(FPC) -iTP)
 endif
 endif
 ifndef OS_SOURCE
 ifndef OS_SOURCE
-OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+OS_SOURCE:=$(shell $(FPC) -iSO)
 endif
 endif
 ifndef OS_TARGET
 ifndef OS_TARGET
-OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+OS_TARGET:=$(shell $(FPC) -iTO)
+endif
+endif
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
 endif
 endif
 FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
 FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
 FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
 FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
@@ -206,7 +215,7 @@ PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/ext
 override PACKAGE_NAME=fcl
 override PACKAGE_NAME=fcl
 override PACKAGE_VERSION=1.0.6
 override PACKAGE_VERSION=1.0.6
 override TARGET_DIRS+=xml db shedit passrc net
 override TARGET_DIRS+=xml db shedit passrc net
-override TARGET_UNITS+=classes contnrs inifiles ezcgi pipes rtfpars idea base64 gettext iostream zstream cachecls xmlreg registry eventlog
+override TARGET_UNITS+=classes contnrs inifiles ezcgi pipes rtfpars idea base64 gettext iostream zstream cachecls xmlreg registry eventlog custapp
 ifeq ($(OS_TARGET),linux)
 ifeq ($(OS_TARGET),linux)
 override TARGET_UNITS+=process resolve ssockets fpasync
 override TARGET_UNITS+=process resolve ssockets fpasync
 endif
 endif
@@ -225,7 +234,7 @@ endif
 ifeq ($(OS_TARGET),openbsd)
 ifeq ($(OS_TARGET),openbsd)
 override TARGET_UNITS+=process ssockets resolve fpasync
 override TARGET_UNITS+=process ssockets resolve fpasync
 endif
 endif
-override TARGET_RSTS+=classes ssockets cachecls resolve
+override TARGET_RSTS+=classes ssockets cachecls resolve custapp
 override TARGET_EXAMPLEDIRS+=tests
 override TARGET_EXAMPLEDIRS+=tests
 override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil
 override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
@@ -249,9 +258,6 @@ endif
 ifeq ($(OS_TARGET),openbsd)
 ifeq ($(OS_TARGET),openbsd)
 override COMPILER_INCLUDEDIR+=unix
 override COMPILER_INCLUDEDIR+=unix
 endif
 endif
-ifeq ($(OS_TARGET),emx)
-override COMPILER_INCLUDEDIR+=os2
-endif
 override COMPILER_SOURCEDIR+=$(OS_TARGET) inc
 override COMPILER_SOURCEDIR+=$(OS_TARGET) inc
 override COMPILER_TARGETDIR+=$(OS_TARGET)
 override COMPILER_TARGETDIR+=$(OS_TARGET)
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
@@ -473,97 +479,6 @@ SHAREDLIBEXT=.so
 STATICLIBPREFIX=libp
 STATICLIBPREFIX=libp
 RSTEXT=.rst
 RSTEXT=.rst
 FPCMADE=fpcmade
 FPCMADE=fpcmade
-ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
-ifeq ($(OS_TARGET),go32v1)
-STATICLIBPREFIX=
-FPCMADE=fpcmade.v1
-PACKAGESUFFIX=v1
-endif
-ifeq ($(OS_TARGET),go32v2)
-STATICLIBPREFIX=
-FPCMADE=fpcmade.dos
-ZIPSUFFIX=go32
-endif
-ifeq ($(OS_TARGET),linux)
-EXEEXT=
-HASSHAREDLIB=1
-FPCMADE=fpcmade.lnx
-ZIPSUFFIX=linux
-endif
-ifeq ($(OS_TARGET),freebsd)
-EXEEXT=
-HASSHAREDLIB=1
-FPCMADE=fpcmade.freebsd
-ZIPSUFFIX=freebsd
-endif
-ifeq ($(OS_TARGET),netbsd)
-EXEEXT=
-HASSHAREDLIB=1
-FPCMADE=fpcmade.netbsd
-ZIPSUFFIX=netbsd
-endif
-ifeq ($(OS_TARGET),openbsd)
-EXEEXT=
-HASSHAREDLIB=1
-FPCMADE=fpcmade.openbsd
-ZIPSUFFIX=openbsd
-endif
-ifeq ($(OS_TARGET),win32)
-SHAREDLIBEXT=.dll
-FPCMADE=fpcmade.w32
-ZIPSUFFIX=w32
-endif
-ifeq ($(OS_TARGET),os2)
-AOUTEXT=.out
-STATICLIBPREFIX=
-SHAREDLIBEXT=.dll
-FPCMADE=fpcmade.os2
-ZIPSUFFIX=os2
-ECHO=echo
-endif
-ifeq ($(OS_TARGET),emx)
-AOUTEXT=.out
-STATICLIBPREFIX=
-SHAREDLIBEXT=.dll
-FPCMADE=fpcmade.emx
-ZIPSUFFIX=emx
-ECHO=echo
-endif
-ifeq ($(OS_TARGET),amiga)
-EXEEXT=
-SHAREDLIBEXT=.library
-FPCMADE=fpcmade.amg
-endif
-ifeq ($(OS_TARGET),atari)
-EXEEXT=.ttp
-FPCMADE=fpcmade.ata
-endif
-ifeq ($(OS_TARGET),beos)
-EXEEXT=
-FPCMADE=fpcmade.be
-ZIPSUFFIX=be
-endif
-ifeq ($(OS_TARGET),sunos)
-EXEEXT=
-FPCMADE=fpcmade.sun
-ZIPSUFFIX=sun
-endif
-ifeq ($(OS_TARGET),qnx)
-EXEEXT=
-FPCMADE=fpcmade.qnx
-ZIPSUFFIX=qnx
-endif
-ifeq ($(OS_TARGET),netware)
-EXEEXT=.nlm
-STATICLIBPREFIX=
-FPCMADE=fpcmade.nw
-ZIPSUFFIX=nw
-endif
-ifeq ($(OS_TARGET),macos)
-EXEEXT=
-FPCMADE=fpcmade.mcc
-endif
-else
 ifeq ($(OS_TARGET),go32v1)
 ifeq ($(OS_TARGET),go32v1)
 PPUEXT=.pp1
 PPUEXT=.pp1
 OEXT=.o1
 OEXT=.o1
@@ -678,8 +593,8 @@ ZIPSUFFIX=qnx
 endif
 endif
 ifeq ($(OS_TARGET),netware)
 ifeq ($(OS_TARGET),netware)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
-PPUEXT=.ppu
-OEXT=.o
+PPUEXT=.ppn
+OEXT=.on
 ASMEXT=.s
 ASMEXT=.s
 SMARTEXT=.sl
 SMARTEXT=.sl
 STATICLIBEXT=.a
 STATICLIBEXT=.a
@@ -688,16 +603,6 @@ FPCMADE=fpcmade.nw
 ZIPSUFFIX=nw
 ZIPSUFFIX=nw
 EXEEXT=.nlm
 EXEEXT=.nlm
 endif
 endif
-ifeq ($(OS_TARGET),macos)
-PPUEXT=.ppu
-ASMEXT=.s
-OEXT=.o
-SMARTEXT=.sl
-STATICLIBEXT=.a
-EXEEXT=
-FPCMADE=fpcmade.mcc
-endif
-endif
 ifndef ECHO
 ifndef ECHO
 ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
 ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
 ifeq ($(ECHO),)
 ifeq ($(ECHO),)
@@ -921,47 +826,6 @@ TAREXT=.tar.gz
 endif
 endif
 override REQUIRE_PACKAGES=rtl paszlib
 override REQUIRE_PACKAGES=rtl paszlib
 ifeq ($(OS_TARGET),linux)
 ifeq ($(OS_TARGET),linux)
-ifeq ($(CPU_TARGET),i386)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_PASZLIB=1
-REQUIRE_PACKAGES_NETDB=1
-REQUIRE_PACKAGES_LIBASYNC=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_IBASE=1
-endif
-endif
-ifeq ($(OS_TARGET),linux)
-ifeq ($(CPU_TARGET),m68k)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_PASZLIB=1
-REQUIRE_PACKAGES_NETDB=1
-REQUIRE_PACKAGES_LIBASYNC=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_IBASE=1
-endif
-endif
-ifeq ($(OS_TARGET),linux)
-ifeq ($(CPU_TARGET),powerpc)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_PASZLIB=1
-REQUIRE_PACKAGES_NETDB=1
-REQUIRE_PACKAGES_LIBASYNC=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_IBASE=1
-endif
-endif
-ifeq ($(OS_TARGET),linux)
-ifeq ($(CPU_TARGET),sparc)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_PASZLIB=1
-REQUIRE_PACKAGES_NETDB=1
-REQUIRE_PACKAGES_LIBASYNC=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_IBASE=1
-endif
-endif
-ifeq ($(OS_TARGET),linux)
-ifeq ($(CPU_TARGET),x86_64)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
@@ -969,17 +833,13 @@ REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_MYSQL=1
 REQUIRE_PACKAGES_MYSQL=1
 REQUIRE_PACKAGES_IBASE=1
 REQUIRE_PACKAGES_IBASE=1
 endif
 endif
-endif
 ifeq ($(OS_TARGET),go32v2)
 ifeq ($(OS_TARGET),go32v2)
-ifeq ($(CPU_TARGET),i386)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_LIBASYNC=1
 endif
 endif
-endif
 ifeq ($(OS_TARGET),win32)
 ifeq ($(OS_TARGET),win32)
-ifeq ($(CPU_TARGET),i386)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
@@ -987,17 +847,13 @@ REQUIRE_PACKAGES_MYSQL=1
 REQUIRE_PACKAGES_IBASE=1
 REQUIRE_PACKAGES_IBASE=1
 REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_LIBASYNC=1
 endif
 endif
-endif
 ifeq ($(OS_TARGET),os2)
 ifeq ($(OS_TARGET),os2)
-ifeq ($(CPU_TARGET),i386)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_LIBASYNC=1
 endif
 endif
-endif
 ifeq ($(OS_TARGET),freebsd)
 ifeq ($(OS_TARGET),freebsd)
-ifeq ($(CPU_TARGET),i386)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
@@ -1005,27 +861,13 @@ REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_MYSQL=1
 REQUIRE_PACKAGES_MYSQL=1
 REQUIRE_PACKAGES_IBASE=1
 REQUIRE_PACKAGES_IBASE=1
 endif
 endif
-endif
-ifeq ($(OS_TARGET),freebsd)
-ifeq ($(CPU_TARGET),m68k)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_PASZLIB=1
-REQUIRE_PACKAGES_NETDB=1
-REQUIRE_PACKAGES_LIBASYNC=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_IBASE=1
-endif
-endif
 ifeq ($(OS_TARGET),beos)
 ifeq ($(OS_TARGET),beos)
-ifeq ($(CPU_TARGET),i386)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_LIBASYNC=1
 endif
 endif
-endif
 ifeq ($(OS_TARGET),netbsd)
 ifeq ($(OS_TARGET),netbsd)
-ifeq ($(CPU_TARGET),i386)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
@@ -1033,67 +875,37 @@ REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_MYSQL=1
 REQUIRE_PACKAGES_MYSQL=1
 REQUIRE_PACKAGES_IBASE=1
 REQUIRE_PACKAGES_IBASE=1
 endif
 endif
-endif
-ifeq ($(OS_TARGET),netbsd)
-ifeq ($(CPU_TARGET),m68k)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_PASZLIB=1
-REQUIRE_PACKAGES_NETDB=1
-REQUIRE_PACKAGES_LIBASYNC=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_IBASE=1
-endif
-endif
 ifeq ($(OS_TARGET),amiga)
 ifeq ($(OS_TARGET),amiga)
-ifeq ($(CPU_TARGET),m68k)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_LIBASYNC=1
 endif
 endif
-endif
 ifeq ($(OS_TARGET),atari)
 ifeq ($(OS_TARGET),atari)
-ifeq ($(CPU_TARGET),m68k)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_PASZLIB=1
-REQUIRE_PACKAGES_NETDB=1
-REQUIRE_PACKAGES_LIBASYNC=1
-endif
-endif
-ifeq ($(OS_TARGET),sunos)
-ifeq ($(CPU_TARGET),i386)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_LIBASYNC=1
 endif
 endif
-endif
 ifeq ($(OS_TARGET),sunos)
 ifeq ($(OS_TARGET),sunos)
-ifeq ($(CPU_TARGET),sparc)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_LIBASYNC=1
 endif
 endif
-endif
 ifeq ($(OS_TARGET),qnx)
 ifeq ($(OS_TARGET),qnx)
-ifeq ($(CPU_TARGET),i386)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_LIBASYNC=1
 endif
 endif
-endif
 ifeq ($(OS_TARGET),netware)
 ifeq ($(OS_TARGET),netware)
-ifeq ($(CPU_TARGET),i386)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_LIBASYNC=1
 endif
 endif
-endif
 ifeq ($(OS_TARGET),openbsd)
 ifeq ($(OS_TARGET),openbsd)
-ifeq ($(CPU_TARGET),i386)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
@@ -1101,57 +913,12 @@ REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_MYSQL=1
 REQUIRE_PACKAGES_MYSQL=1
 REQUIRE_PACKAGES_IBASE=1
 REQUIRE_PACKAGES_IBASE=1
 endif
 endif
-endif
-ifeq ($(OS_TARGET),openbsd)
-ifeq ($(CPU_TARGET),m68k)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_PASZLIB=1
-REQUIRE_PACKAGES_NETDB=1
-REQUIRE_PACKAGES_LIBASYNC=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_IBASE=1
-endif
-endif
 ifeq ($(OS_TARGET),wdosx)
 ifeq ($(OS_TARGET),wdosx)
-ifeq ($(CPU_TARGET),i386)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_PASZLIB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_NETDB=1
 REQUIRE_PACKAGES_LIBASYNC=1
 REQUIRE_PACKAGES_LIBASYNC=1
 endif
 endif
-endif
-ifeq ($(OS_TARGET),palmos)
-ifeq ($(CPU_TARGET),m68k)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_PASZLIB=1
-REQUIRE_PACKAGES_NETDB=1
-REQUIRE_PACKAGES_LIBASYNC=1
-endif
-endif
-ifeq ($(OS_TARGET),macos)
-ifeq ($(CPU_TARGET),powerpc)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_PASZLIB=1
-REQUIRE_PACKAGES_NETDB=1
-REQUIRE_PACKAGES_LIBASYNC=1
-endif
-endif
-ifeq ($(OS_TARGET),macosx)
-ifeq ($(CPU_TARGET),powerpc)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_PASZLIB=1
-REQUIRE_PACKAGES_NETDB=1
-REQUIRE_PACKAGES_LIBASYNC=1
-endif
-endif
-ifeq ($(OS_TARGET),emx)
-ifeq ($(CPU_TARGET),i386)
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_PASZLIB=1
-REQUIRE_PACKAGES_NETDB=1
-REQUIRE_PACKAGES_LIBASYNC=1
-endif
-endif
 ifdef REQUIRE_PACKAGES_RTL
 ifdef REQUIRE_PACKAGES_RTL
 PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/$(OS_TARGET)/Makefile.fpc,$(PACKAGESDIR))))))
 PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/$(OS_TARGET)/Makefile.fpc,$(PACKAGESDIR))))))
 ifneq ($(PACKAGEDIR_RTL),)
 ifneq ($(PACKAGEDIR_RTL),)
@@ -1398,11 +1165,6 @@ override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
 override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
 override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
 endif
 endif
 endif
 endif
-ifeq ($(OS_TARGET),linux)
-ifeq ($(FPC_VERSION),1.0.6)
-override FPCOPTDEF+=HASUNIX
-endif
-endif
 ifdef GCCLIBDIR
 ifdef GCCLIBDIR
 override FPCOPT+=-Fl$(GCCLIBDIR)
 override FPCOPT+=-Fl$(GCCLIBDIR)
 endif
 endif
@@ -1427,7 +1189,7 @@ override COMPILER:=$(FPC) $(FPCOPT)
 ifeq (,$(findstring -s ,$(COMPILER)))
 ifeq (,$(findstring -s ,$(COMPILER)))
 EXECPPAS=
 EXECPPAS=
 else
 else
-ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifeq ($(OS_SOURCE),$(OS_TARGET))
 EXECPPAS:=@$(PPAS)
 EXECPPAS:=@$(PPAS)
 endif
 endif
 endif
 endif
@@ -1454,9 +1216,6 @@ override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES)
 ifeq ($(OS_TARGET),os2)
 ifeq ($(OS_TARGET),os2)
 override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
 override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
 endif
 endif
-ifeq ($(OS_TARGET),emx)
-override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
-endif
 endif
 endif
 ifdef TARGET_EXAMPLEDIRS
 ifdef TARGET_EXAMPLEDIRS
 HASEXAMPLES=1
 HASEXAMPLES=1
@@ -2060,7 +1819,7 @@ distinstall: fpc_distinstall
 zipinstall: fpc_zipinstall
 zipinstall: fpc_zipinstall
 zipsourceinstall: fpc_zipsourceinstall
 zipsourceinstall: fpc_zipsourceinstall
 zipexampleinstall: fpc_zipexampleinstall $(addsuffix _zipexampleinstall,$(TARGET_DIRS))
 zipexampleinstall: fpc_zipexampleinstall $(addsuffix _zipexampleinstall,$(TARGET_DIRS))
-zipdistinstall: fpc_zipdistinstall
+zipdistinstall: fpc_zipdistinstall $(addsuffix _zipdistinstall,$(TARGET_DIRS))
 clean: fpc_clean $(addsuffix _clean,$(TARGET_DIRS)) $(addsuffix _clean,$(TARGET_EXAMPLEDIRS))
 clean: fpc_clean $(addsuffix _clean,$(TARGET_DIRS)) $(addsuffix _clean,$(TARGET_EXAMPLEDIRS))
 distclean: fpc_distclean $(addsuffix _distclean,$(TARGET_DIRS))
 distclean: fpc_distclean $(addsuffix _distclean,$(TARGET_DIRS))
 cleanall: fpc_cleanall $(addsuffix _cleanall,$(TARGET_DIRS))
 cleanall: fpc_cleanall $(addsuffix _cleanall,$(TARGET_DIRS))

+ 7 - 7
fcl/Makefile.fpc

@@ -19,15 +19,15 @@ packages_win32=netdb
 units=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil
 units=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil
 
 
 [target]
 [target]
-dirs=xml db shedit passrc
-units=classes contnrs inifiles ezcgi pipes rtfpars idea base64 gettext iostream zstream cachecls xmlreg registry eventlog
-units_freebsd=process asyncio ssockets http resolve http fpasync
-units_netbsd=process asyncio ssockets http resolve http fpasync
-units_openbsd=process asyncio ssockets http resolve http fpasync
-units_linux=process asyncio resolve ssockets http fpasync
+dirs=xml db shedit passrc net
+units=classes contnrs inifiles ezcgi pipes rtfpars idea base64 gettext iostream zstream cachecls xmlreg registry eventlog custapp
+units_freebsd=process ssockets resolve fpasync
+units_netbsd=process ssockets resolve fpasync
+units_openbsd=process ssockets resolve fpasync
+units_linux=process resolve ssockets fpasync
 units_win32=process fileinfo resolve ssockets
 units_win32=process fileinfo resolve ssockets
 units_netware=resolve ssockets
 units_netware=resolve ssockets
-rsts=classes ssockets cachecls resolve
+rsts=classes ssockets cachecls resolve custapp
 exampledirs=tests
 exampledirs=tests
 
 
 [compiler]
 [compiler]

+ 41 - 0
fcl/go32v2/custapp.inc

@@ -0,0 +1,41 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2003 by the Free Pascal development team
+
+    Linux version of custom app object routines.
+    
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+Procedure SysGetEnvironmentList(List : TStrings;NamesOnly : Boolean);
+
+Var
+  P : PPChar;
+  S : String;  
+  I : Integer;
+  
+begin
+  List.Clear;
+  P:=EnvP;
+  if (P<>Nil) then
+    While (P^<>Nil) do
+      begin
+      S:=StrPas(P^);
+      If NamesOnly then
+        begin
+        I:=Pos('=',S);
+        If (I>1) then
+          S:=Copy(S,1,I-1);
+        end;
+      List.Add(S);
+      Inc(P);
+    end;
+end;
+

+ 436 - 0
fcl/inc/custapp.pp

@@ -0,0 +1,436 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2003 by the Free Pascal development team
+
+    CustomApplication class. 
+    
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+{$mode objfpc}
+{$h+}
+unit CustApp;
+
+Interface
+
+uses SysUtils,Classes;
+
+Type
+  TExceptionEvent = Procedure (Sender : TObject; E : Exception) Of Object;
+  
+  TCustomApplication = Class(TComponent)
+  Private
+    FOnException: TExceptionEvent;
+    FTerminated : Boolean;
+    FHelpFile,
+    FTitle : String;
+    FOptionChar : Char;
+    FCaseSensitiveOptions : Boolean;
+    FStopOnException : Boolean;
+    function GetEnvironmentVar(VarName : String): String;
+    function GetExeName: string;
+    Function GetLocation : String;
+    function GetTitle: string;
+  Protected
+    procedure SetTitle(const AValue: string); Virtual;
+    Function GetConsoleApplication : boolean; Virtual;
+    Procedure DoRun; Virtual;
+    Function GetParams(Index : Integer) : String;virtual;
+    function GetParamCount: Integer;Virtual;
+  Public
+    constructor Create(AOwner: TComponent); override;
+    destructor Destroy; override;
+    // Some Delphi methods.
+    procedure HandleException(Sender: TObject); virtual;
+    procedure Initialize; virtual;
+    procedure Run; 
+    procedure ShowException(E: Exception);virtual;
+    procedure Terminate; virtual;
+    // Extra methods.
+    function FindOptionIndex(Const S : String; Var Longopt : Boolean) : Integer;
+    Function GetOptionValue(Const S : String) : String;
+    Function GetOptionValue(Const C: Char; Const S : String) : String;
+    Function HasOption(Const S : String) : Boolean;
+    Function HasOption(Const C : Char; Const S : String) : Boolean;
+    Function CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; Opts,NonOpts : TStrings) : String;
+    Function CheckOptions(Const ShortOptions : String; Const Longopts : TStrings) : String;
+    Function CheckOptions(Const ShortOptions : String; Const LongOpts : Array of string) : String;
+    Function CheckOptions(Const ShortOptions : String; Const LongOpts : String) : String;
+    Procedure GetEnvironmentList(List : TStrings;NamesOnly : Boolean);
+    Procedure GetEnvironmentList(List : TStrings);
+    // Delphi properties
+    property ExeName: string read GetExeName;
+    property HelpFile: string read FHelpFile write FHelpFile;
+    property Terminated: Boolean read FTerminated;
+    property Title: string read FTitle write SetTitle;
+    property OnException: TExceptionEvent read FOnException write FOnException;
+    // Extra properties
+    Property ConsoleApplication : Boolean Read GetConsoleApplication;
+    Property Location : String Read GetLocation;
+    Property Params [Index : integer] : String Read GetParams;
+    Property ParamCount : Integer Read GetParamCount;
+    Property EnvironmentVariable[Name : String] : String Read GetEnvironmentVar;
+    Property OptionChar : Char Read FoptionChar Write FOptionChar;
+    Property CaseSensitiveOptions : Boolean Read FCaseSensitiveOptions Write FCaseSensitiveOptions;
+    Property StopOnException : Boolean Read FStopOnException Write FStopOnException;
+  end;
+  
+Implementation
+
+{$i custapp.inc}
+
+{ TCustomApplication }
+
+function TCustomApplication.GetExeName: string;
+begin
+  Result:=Paramstr(0);
+end;
+
+
+function TCustomApplication.GetEnvironmentVar(VarName : String): String;
+begin
+  Result:=GetEnvironmentVariable(VarName);
+end;
+
+Procedure TCustomApplication.GetEnvironmentList(List : TStrings;NamesOnly : Boolean);
+
+begin
+  // Routine must be in custapp.inc
+  SysGetEnvironmentList(List,NamesOnly);
+end;
+
+Procedure TCustomApplication.GetEnvironmentList(List : TStrings);
+
+begin
+  GetEnvironmentList(List,False);
+end;
+
+function TCustomApplication.GetLocation: String;
+begin
+  Result:=ExtractFilePath(GetExeName);
+end;
+
+function TCustomApplication.GetParamCount: Integer;
+begin
+   Result:=System.ParamCount;
+end;
+
+function TCustomApplication.GetTitle: string;
+begin
+  Result:=FTitle;
+end;
+
+function TCustomApplication.GetParams(Index: Integer): String;
+begin
+  Result:=ParamStr(Index);
+end;
+
+procedure TCustomApplication.SetTitle(const AValue: string);
+begin
+  FTitle:=AValue;
+end;
+
+function TCustomApplication.GetConsoleApplication: boolean;
+begin
+  Result:=IsConsole;
+end;
+
+procedure TCustomApplication.DoRun;
+begin
+  // Do nothing. Override in descendent classes.
+end;
+
+constructor TCustomApplication.Create(AOwner: TComponent);
+begin
+  inherited Create(AOwner);
+  FOptionChar:='-';
+  FCaseSensitiveOptions:=True;
+  FStopOnException:=False;
+end;
+
+destructor TCustomApplication.Destroy;
+begin
+  inherited Destroy;
+end;
+
+procedure TCustomApplication.HandleException(Sender: TObject);
+begin
+  If Not (ExceptObject is Exception) then
+    SysUtils.showexception(ExceptObject,ExceptAddr)
+  else
+    begin
+    If Not Assigned(FOnexception) then
+      ShowException(Exception(ExceptObject))
+    else
+      FOnException(Sender,Exception(ExceptObject));
+    end;
+  If FStopOnException then
+    FTerminated:=True;
+end;
+
+
+procedure TCustomApplication.Initialize;
+begin
+  FTerminated:=False;
+end;
+
+procedure TCustomApplication.Run;
+
+begin
+  Repeat
+    Try
+      DoRun;
+    except
+      HandleException(Self);
+    end;
+  Until FTerminated;
+end;
+
+procedure TCustomApplication.ShowException(E: Exception);
+
+begin
+  Sysutils.ShowException(E,ExceptAddr)
+end;
+
+procedure TCustomApplication.Terminate;
+begin
+  FTerminated:=True;
+end;
+
+function TCustomApplication.GetOptionValue(Const S: String): String;
+begin
+  Result:=GetoptionValue(#255,S);
+end;
+
+function TCustomApplication.GetOptionValue(Const C: Char; Const S: String): String;
+
+Var
+  B : Boolean;
+  I,P : integer;
+  O : String;
+  
+begin
+  Result:='';
+  I:=FindOptionIndex(C,B);
+  If (I=-1) then
+    I:=FindoptionIndex(S,B);
+  If (I<>-1) then
+    begin
+    If B then
+      begin // Long options have form --option=value
+      O:=Params[I];
+      P:=Pos('=',O);
+      If (P=0) then
+        P:=Length(O);
+      Delete(O,1,P);
+      Result:=O;
+      end
+    else
+      begin // short options have form '-o value'
+      If (I<ParamCount) then
+        Result:=Params[I+1];
+      end;
+    end;
+end;
+
+function TCustomApplication.HasOption(Const S: String): Boolean;
+
+Var
+  B : Boolean;
+
+begin
+  Result:=FindOptionIndex(S,B)<>-1;
+end;
+
+function TCustomApplication.FindOptionIndex(Const S : String; Var Longopt : Boolean) : Integer;
+
+Var
+  SO,O : String;
+  I,P : Integer;
+  
+begin
+  If Not CaseSensitiveOptions then
+    SO:=UpperCase(S)
+  else
+    SO:=S;  
+  Result:=-1;
+  I:=ParamCount;
+  While (Result=-1) and (I>0) do
+    begin
+    O:=Params[i];
+    If (Length(O)>0) and (O[1]=FOptionChar) then
+      begin
+      Delete(O,1,1);
+      LongOpt:=(Length(O)>0) and (O[1]=FOptionChar);
+      If LongOpt then
+        begin
+        Delete(O,1,1);
+        P:=Pos('=',O);
+        If (P<>0) then
+          O:=Copy(O,1,P-1);
+        end;
+      If Not CaseSensitiveOptions then
+        O:=UpperCase(O);
+      If (O=SO) then
+        Result:=i;
+      end;
+    Dec(i);
+    end;
+end;
+
+function TCustomApplication.HasOption(Const C: Char; Const S: String): Boolean;
+
+Var
+  B : Boolean;
+
+begin
+  Result:=(FindOptionIndex(C,B)<>-1) or (FindOptionIndex(S,B)<>-1);
+end;
+
+
+Function TCustomApplication.CheckOptions(Const ShortOptions : String; Const Longopts : TStrings) : String;
+
+begin
+  Result:=CheckOptions(ShortOptions,LongOpts,Nil,Nil);
+end;
+
+ResourceString
+  SErrInvalidOption = 'Invalid option at position %d: "%s"';
+  SErrNoOptionAllowed = 'Option at position %d does not allow an argument: %s';
+  SErrOptionNeeded = 'Option at position %d needs an argument : %s';
+  
+Function TCustomApplication.CheckOptions(Const ShortOptions : String; Const Longopts : TStrings; Opts,NonOpts : TStrings) : String;
+
+Var
+  I,J,L,P : Integer;
+  O,OV : String;
+  HaveArg : Boolean;
+  
+begin
+  Result:='';
+  I:=1;
+  While (I<=ParamCount) and (Result='') do
+    begin
+    O:=Paramstr(I);
+    If (Length(O)=0) or (O[1]<>FOptionChar) then
+      begin
+      If Assigned(NonOpts) then
+        NonOpts.Add(O)  
+      end
+    else
+      begin
+      If (Length(O)<2) then
+        Result:=Format(SErrInvalidOption,[i,O])
+      else
+        begin
+        HaveArg:=False;
+        OV:='';
+        // Long option ?
+        If (O[2]=FOptionChar) then
+          begin
+          Delete(O,1,2);
+          J:=Pos('=',O);
+          If J<>0 then
+            begin
+            HaveArg:=true;
+            OV:=O;
+            Delete(OV,1,J);
+            O:=Copy(O,1,J-1);
+            end;
+          // Switch Option   
+          If Longopts.IndexOf(O)<>-1 then
+            begin
+            If HaveArg then
+              Result:=Format(SErrNoOptionAllowed,[I,O])
+            end
+          else
+            begin // Required argument
+            If LongOpts.IndexOf(O+':')<>-1 then
+              begin
+              If Not HaveArg then
+                Result:=Format(SErrOptionNeeded,[I,O]);
+              end
+            else
+              begin // Optional Argument.
+              If LongOpts.IndexOf(O+'::')=-1 then
+                Result:=Format(SErrInvalidOption,[I,O]);
+              end;
+            end;  
+          end
+        else // Short Option.
+          begin
+          HaveArg:=(I<ParamCount) and (Length(ParamStr(I+1))>0) and (ParamStr(I+1)[i]<>FOptionChar);
+          If HaveArg then
+            OV:=Paramstr(I+1);
+          L:=Length(O);  
+          For J:=2 to L do
+            begin
+            P:=Pos(O[J],ShortOptions);
+            If P=0 then
+              Result:=Format(SErrInvalidOption,[I,O[J]])
+            else
+              begin
+              If (P<Length(ShortOptions)) and (Shortoptions[P+1]=':') then
+                begin
+                // Required argument
+                If ((P+1)<Length(ShortOptions)) and (Shortoptions[P+2]<>':') Then
+                  If (J<L) or not haveArg then // Must be last in multi-opt !!
+                    Result:=Format(SErrOptionNeeded,[I,O[J]]);
+                O:=O[j]; // O is added to arguments.  
+                end;
+              end;  
+            end;
+          If HaveArg then
+            begin
+            Inc(I); // Skip argument.
+            O:=O[Length(O)]; // O is added to arguments !
+            end;
+          end;  
+        If HaveArg and (Result='') then
+          If Assigned(Opts) then
+            Opts.Add(O+'='+OV);
+        end;  
+      end; 
+    Inc(I);
+    end;
+end;
+
+Function TCustomApplication.CheckOptions(Const ShortOptions : String; Const LongOpts : Array of string) : String;
+
+Var
+  L : TStringList;
+  I : Integer;
+  
+begin
+  L:=TStringList.Create;
+  Try
+    For I:=0 to High(LongOpts) do
+      L.Add(LongOpts[i]);
+    Result:=CheckOptions(ShortOptions,L);  
+  Finally
+    L.Free;
+  end;      
+end;
+
+Function TCustomApplication.CheckOptions(Const ShortOptions : String; Const LongOpts : String) : String;
+
+Var
+  L : TStringList;
+
+begin
+  L:=TStringList.Create;
+  Try
+    Result:=CheckOptions(Shortoptions,L);
+  Finally
+    L.Free;
+  end;
+end;
+
+end.
+

+ 68 - 0
fcl/os2/custapp.inc

@@ -0,0 +1,68 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2003 by the Free Pascal development team
+
+    Linux version of custom app object routines.
+    
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+{ taken from dos unit }
+
+type  
+  PPchar = ^Pchar;
+
+function envs:PPchar;assembler;
+
+asm
+    movl envp,%eax
+end ['EAX'];
+
+function envcount:longint;assembler;
+asm
+    movl envc,%eax
+end ['EAX'];
+
+function envstr(index : longint) : string;
+
+var hp:Pchar;
+
+begin
+  if (index<=0) or (index>envcount) then
+    begin
+    envstr:='';
+    exit;
+    end;
+  hp:=envs[index-1];
+  envstr:=strpas(hp);
+end;
+
+                                                            
+
+Procedure SysGetEnvironmentList(List : TStrings;NamesOnly : Boolean);
+
+Var
+  S : String;  
+  J,I : Integer;
+  
+begin
+  List.Clear;
+  For J:=1 to envcount-1 do
+    begin
+    S:=Envsttr(J);
+    If NamesOnly then
+      begin
+      I:=Pos('=',S);
+      If (I>1) then
+        S:=Copy(S,1,I-1);
+      end;
+    List.Add(S);
+    end;
+end;

+ 41 - 0
fcl/posix/custapp.inc

@@ -0,0 +1,41 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2003 by the Free Pascal development team
+
+    Linux version of custom app object routines.
+    
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+Procedure SysGetEnvironmentList(List : TStrings;NamesOnly : Boolean);
+
+Var
+  P : PPChar;
+  S : String;  
+  I : Integer;
+  
+begin
+  List.Clear;
+  P:=EnvP;
+  if (P<>Nil) then
+    While (P^<>Nil) do
+      begin
+      S:=StrPas(P^);
+      If NamesOnly then
+        begin
+        I:=Pos('=',S);
+        If (I>1) then
+          S:=Copy(S,1,I-1);
+        end;
+      List.Add(S);
+      Inc(P);
+    end;
+end;
+

+ 1 - 1
fcl/tests/Makefile

@@ -212,7 +212,7 @@ else
 UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
-override TARGET_PROGRAMS+=stringl dparser fstream mstream list threads testrtf cfgtest xmldump htdump testcgi tidea b64test b64test2 b64enc b64dec restest testz testz2 istream doecho testol testcont txmlreg testreg tstelcmd
+override TARGET_PROGRAMS+=stringl dparser fstream mstream list threads testrtf cfgtest xmldump htdump testcgi tidea b64test b64test2 b64enc b64dec restest testz testz2 istream doecho testol testcont txmlreg testreg tstelcmd testapp
 ifeq ($(OS_TARGET),linux)
 ifeq ($(OS_TARGET),linux)
 override TARGET_PROGRAMS+=sockcli isockcli dsockcli socksvr isocksvr dsocksvr testhres testnres testsres testrhre testrnre testrsre testur
 override TARGET_PROGRAMS+=sockcli isockcli dsockcli socksvr isocksvr dsocksvr testhres testnres testsres testrhre testrnre testrsre testur
 endif
 endif

+ 2 - 1
fcl/tests/Makefile.fpc

@@ -6,7 +6,8 @@
 programs=stringl dparser fstream mstream list threads testrtf \
 programs=stringl dparser fstream mstream list threads testrtf \
          cfgtest xmldump htdump testcgi tidea \
          cfgtest xmldump htdump testcgi tidea \
          b64test b64test2 b64enc b64dec restest testz testz2 \
          b64test b64test2 b64enc b64dec restest testz testz2 \
-         istream doecho testol testcont txmlreg testreg tstelcmd
+         istream doecho testol testcont txmlreg testreg tstelcmd \
+         testapp
 programs_win32=showver testproc testhres testnres testsres testrhre \
 programs_win32=showver testproc testhres testnres testsres testrhre \
                testrnre testrsre testur
                testrnre testrsre testur
 programs_linux=sockcli isockcli dsockcli socksvr isocksvr dsocksvr \
 programs_linux=sockcli isockcli dsockcli socksvr isocksvr dsocksvr \

+ 1 - 0
fcl/tests/README

@@ -57,3 +57,4 @@ testreg.pp   Test of registry unit. (MVC)
 tstelcmd.pp  Test of eventlog unit, command-line version.
 tstelcmd.pp  Test of eventlog unit, command-line version.
 tstelgtk.pp  Test of eventlog unit, FPGTK version. Not built by default. (MVC)
 tstelgtk.pp  Test of eventlog unit, FPGTK version. Not built by default. (MVC)
 testur.pp    Test of TURIParser class
 testur.pp    Test of TURIParser class
+testapp.pp   Test of TCustomApplication

+ 88 - 0
fcl/tests/testapp.pp

@@ -0,0 +1,88 @@
+{$mode objfpc}
+{$h+}
+
+program testapp;
+
+uses custapp,classes;
+
+Const 
+  ShortOpts = 'abc:d:012';
+  Longopts : Array[1..6] of String = (
+    'add:','append','delete:','verbose','create:','file:');
+
+Type
+  TTestApp = Class(TCustomApplication)
+    Procedure DoRun ; Override;
+  end;
+  
+Procedure TTestApp.DoRun;
+
+Var
+  I : Integer;
+  S : String;
+  Opts,FN,Args : TStrings;
+  
+begin
+  Writeln('Exe name            : ',ExeName);
+  Writeln('Help file           : ',HelpFile);
+  Writeln('Terminated          : ',Terminated);
+  Writeln('Title               : ',Title);
+  Writeln('Console app         : ',ConsoleApplication);
+  Writeln('Location            : ',Location);
+  Writeln('ParamCount          : ',ParamCount);
+  For I:=0 to ParamCount do 
+    Writeln('Params [',I:3,']        : ',Params[i]);
+  Writeln('Option char         : ',OptionChar);
+  Writeln('Case sensitive opts : ',CaseSensitiveOptions);  
+  Writeln('StopOnException     : ',StopOnException);
+  Writeln('----------------------------------------');
+  Writeln('Simple options check');
+  S:=CheckOptions(ShortOpts,LongOpts);
+  If (S<>'') then
+    Writeln(S);
+  Writeln('Longer options check');
+  Opts:=TstringList.Create;
+  FN:=TStringList.Create;
+  Args:=TStringList.Create;
+  Try
+    For I:=1 to 6 do 
+      Opts.Add(LongOpts[i]);
+    S:=CheckOptions(ShortOpts,Opts,Args,FN);
+    Writeln('Found ',Args.Count,' options and ',FN.Count,' non-options (filenames)');
+    For I:=0 to Args.Count-1 do
+      Writeln('Option ',I:2,': ',Args[i]);
+    For I:=0 to FN.Count-1 do
+      Writeln('Non-Option ',I:2,': ',FN[i]);
+    Writeln('Getting option value "add"');
+    S:=GetOptionValue('add');
+    Writeln('Value for "add": ',S);
+    Writeln('Testing Hasoption "a"');
+    Writeln('Option append found: ',HasOption('append'));
+    Writeln('Option a or append found: ',HasOption('a','append'));
+    Writeln('-----------------------');
+    GetEnvironmentList(Opts,True);
+    Writeln('Found ',Opts.Count,' environment variables');
+    For I:=0 to Opts.Count-1 do
+      Writeln(I:3,': ',Opts[i],' with value "',EnvironmentVariable[Opts[i]],'"');
+  Finally
+    Opts.Free;
+    FN.Free;
+    Args.Free;
+  end;
+  Terminate;
+  Writeln('-------------------------');
+  Writeln('After terminate, "terminated" is ',Terminated);
+end;
+
+Var
+  App : TTestApp;
+  
+begin
+  App:=TTestApp.Create(Nil);
+  App.Initialize;
+  App.Title:='CustomApplication class test application.';
+  App.Run;
+  App.Free;
+end.
+  
+  

+ 41 - 0
fcl/unix/custapp.inc

@@ -0,0 +1,41 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2003 by the Free Pascal development team
+
+    Linux version of custom app object routines.
+    
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+Procedure SysGetEnvironmentList(List : TStrings;NamesOnly : Boolean);
+
+Var
+  P : PPChar;
+  S : String;  
+  I : Integer;
+  
+begin
+  List.Clear;
+  P:=EnvP;
+  if (P<>Nil) then
+    While (P^<>Nil) do
+      begin
+      S:=StrPas(P^);
+      If NamesOnly then
+        begin
+        I:=Pos('=',S);
+        If (I>0) then
+          S:=Copy(S,1,I-1);
+        end;
+      List.Add(S);
+      Inc(P);
+    end;
+end;
+

+ 44 - 0
fcl/win32/custapp.inc

@@ -0,0 +1,44 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2003 by the Free Pascal development team
+
+    Linux version of custom app object routines.
+    
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+function GetEnvironmentStrings : pchar; external 'kernel32' name 'GetEnvironmentStringsA';
+function FreeEnvironmentStrings(p : pchar) : longbool; external 'kernel32' name 'FreeEnvironmentStringsA';
+
+Procedure SysGetEnvironmentList(List : TStrings;NamesOnly : Boolean);
+
+var
+   s : string;
+   i,l : longint;
+   hp,p : pchar;
+
+begin
+  p:=GetEnvironmentStrings;
+  hp:=p;
+  while hp^<>#0 do
+    begin
+    s:=strpas(hp);
+    l:=Length(s);
+    If NamesOnly then 
+      begin
+      I:=pos('=',s);
+      If (I>0) then
+        S:=Copy(S,1,I-1);
+      end;
+    List.Add(S);
+    hp:=hp+l+1;
+    end;
+   FreeEnvironmentStrings(p);
+end;