Browse Source

* changed makefile version to 1.9.6, added samples for Netware

armin 20 years ago
parent
commit
8555367cbb

+ 107 - 53
demo/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/20]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/29]
 #
 default: all
 MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc
@@ -220,19 +220,22 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 override PACKAGE_NAME=demo
-override PACKAGE_VERSION=1.9.4
-override TARGET_DIRS+=text graph
+override PACKAGE_VERSION=1.9.6
+override TARGET_DIRS+=text
 ifeq ($(OS_TARGET),linux)
-override TARGET_DIRS+=linux
+override TARGET_DIRS+=linux graph
 endif
 ifeq ($(OS_TARGET),go32v2)
-override TARGET_DIRS+=modex
+override TARGET_DIRS+=modex graph
 endif
 ifeq ($(OS_TARGET),win32)
-override TARGET_DIRS+=win32
+override TARGET_DIRS+=win32 graph
 endif
 ifeq ($(OS_TARGET),os2)
-override TARGET_DIRS+=os2
+override TARGET_DIRS+=os2 graph
+endif
+ifeq ($(OS_TARGET),netware)
+override TARGET_DIRS+=netware
 endif
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
@@ -1608,18 +1611,24 @@ fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIR
 fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
 fpc_makefiles: fpc_makefile fpc_makefile_dirs
 TARGET_DIRS_TEXT=1
-TARGET_DIRS_GRAPH=1
 ifeq ($(OS_TARGET),linux)
 TARGET_DIRS_LINUX=1
+TARGET_DIRS_GRAPH=1
 endif
 ifeq ($(OS_TARGET),go32v2)
 TARGET_DIRS_MODEX=1
+TARGET_DIRS_GRAPH=1
 endif
 ifeq ($(OS_TARGET),win32)
 TARGET_DIRS_WIN32=1
+TARGET_DIRS_GRAPH=1
 endif
 ifeq ($(OS_TARGET),os2)
 TARGET_DIRS_OS2=1
+TARGET_DIRS_GRAPH=1
+endif
+ifeq ($(OS_TARGET),netware)
+TARGET_DIRS_NETWARE=1
 endif
 ifdef TARGET_DIRS_TEXT
 text_all:
@@ -1666,51 +1675,6 @@ text:
 	$(MAKE) -C text all
 .PHONY: text_all text_debug text_smart text_release text_units text_examples text_shared text_install text_sourceinstall text_exampleinstall text_distinstall text_zipinstall text_zipsourceinstall text_zipexampleinstall text_zipdistinstall text_clean text_distclean text_cleanall text_info text_makefiles text
 endif
-ifdef TARGET_DIRS_GRAPH
-graph_all:
-	$(MAKE) -C graph all
-graph_debug:
-	$(MAKE) -C graph debug
-graph_smart:
-	$(MAKE) -C graph smart
-graph_release:
-	$(MAKE) -C graph release
-graph_units:
-	$(MAKE) -C graph units
-graph_examples:
-	$(MAKE) -C graph examples
-graph_shared:
-	$(MAKE) -C graph shared
-graph_install:
-	$(MAKE) -C graph install
-graph_sourceinstall:
-	$(MAKE) -C graph sourceinstall
-graph_exampleinstall:
-	$(MAKE) -C graph exampleinstall
-graph_distinstall:
-	$(MAKE) -C graph distinstall
-graph_zipinstall:
-	$(MAKE) -C graph zipinstall
-graph_zipsourceinstall:
-	$(MAKE) -C graph zipsourceinstall
-graph_zipexampleinstall:
-	$(MAKE) -C graph zipexampleinstall
-graph_zipdistinstall:
-	$(MAKE) -C graph zipdistinstall
-graph_clean:
-	$(MAKE) -C graph clean
-graph_distclean:
-	$(MAKE) -C graph distclean
-graph_cleanall:
-	$(MAKE) -C graph cleanall
-graph_info:
-	$(MAKE) -C graph info
-graph_makefiles:
-	$(MAKE) -C graph makefiles
-graph:
-	$(MAKE) -C graph all
-.PHONY: graph_all graph_debug graph_smart graph_release graph_units graph_examples graph_shared graph_install graph_sourceinstall graph_exampleinstall graph_distinstall graph_zipinstall graph_zipsourceinstall graph_zipexampleinstall graph_zipdistinstall graph_clean graph_distclean graph_cleanall graph_info graph_makefiles graph
-endif
 ifdef TARGET_DIRS_LINUX
 linux_all:
 	$(MAKE) -C linux all
@@ -1756,6 +1720,51 @@ linux:
 	$(MAKE) -C linux all
 .PHONY: linux_all linux_debug linux_smart linux_release linux_units linux_examples linux_shared linux_install linux_sourceinstall linux_exampleinstall linux_distinstall linux_zipinstall linux_zipsourceinstall linux_zipexampleinstall linux_zipdistinstall linux_clean linux_distclean linux_cleanall linux_info linux_makefiles linux
 endif
+ifdef TARGET_DIRS_GRAPH
+graph_all:
+	$(MAKE) -C graph all
+graph_debug:
+	$(MAKE) -C graph debug
+graph_smart:
+	$(MAKE) -C graph smart
+graph_release:
+	$(MAKE) -C graph release
+graph_units:
+	$(MAKE) -C graph units
+graph_examples:
+	$(MAKE) -C graph examples
+graph_shared:
+	$(MAKE) -C graph shared
+graph_install:
+	$(MAKE) -C graph install
+graph_sourceinstall:
+	$(MAKE) -C graph sourceinstall
+graph_exampleinstall:
+	$(MAKE) -C graph exampleinstall
+graph_distinstall:
+	$(MAKE) -C graph distinstall
+graph_zipinstall:
+	$(MAKE) -C graph zipinstall
+graph_zipsourceinstall:
+	$(MAKE) -C graph zipsourceinstall
+graph_zipexampleinstall:
+	$(MAKE) -C graph zipexampleinstall
+graph_zipdistinstall:
+	$(MAKE) -C graph zipdistinstall
+graph_clean:
+	$(MAKE) -C graph clean
+graph_distclean:
+	$(MAKE) -C graph distclean
+graph_cleanall:
+	$(MAKE) -C graph cleanall
+graph_info:
+	$(MAKE) -C graph info
+graph_makefiles:
+	$(MAKE) -C graph makefiles
+graph:
+	$(MAKE) -C graph all
+.PHONY: graph_all graph_debug graph_smart graph_release graph_units graph_examples graph_shared graph_install graph_sourceinstall graph_exampleinstall graph_distinstall graph_zipinstall graph_zipsourceinstall graph_zipexampleinstall graph_zipdistinstall graph_clean graph_distclean graph_cleanall graph_info graph_makefiles graph
+endif
 ifdef TARGET_DIRS_MODEX
 modex_all:
 	$(MAKE) -C modex all
@@ -1891,6 +1900,51 @@ os2:
 	$(MAKE) -C os2 all
 .PHONY: os2_all os2_debug os2_smart os2_release os2_units os2_examples os2_shared os2_install os2_sourceinstall os2_exampleinstall os2_distinstall os2_zipinstall os2_zipsourceinstall os2_zipexampleinstall os2_zipdistinstall os2_clean os2_distclean os2_cleanall os2_info os2_makefiles os2
 endif
+ifdef TARGET_DIRS_NETWARE
+netware_all:
+	$(MAKE) -C netware all
+netware_debug:
+	$(MAKE) -C netware debug
+netware_smart:
+	$(MAKE) -C netware smart
+netware_release:
+	$(MAKE) -C netware release
+netware_units:
+	$(MAKE) -C netware units
+netware_examples:
+	$(MAKE) -C netware examples
+netware_shared:
+	$(MAKE) -C netware shared
+netware_install:
+	$(MAKE) -C netware install
+netware_sourceinstall:
+	$(MAKE) -C netware sourceinstall
+netware_exampleinstall:
+	$(MAKE) -C netware exampleinstall
+netware_distinstall:
+	$(MAKE) -C netware distinstall
+netware_zipinstall:
+	$(MAKE) -C netware zipinstall
+netware_zipsourceinstall:
+	$(MAKE) -C netware zipsourceinstall
+netware_zipexampleinstall:
+	$(MAKE) -C netware zipexampleinstall
+netware_zipdistinstall:
+	$(MAKE) -C netware zipdistinstall
+netware_clean:
+	$(MAKE) -C netware clean
+netware_distclean:
+	$(MAKE) -C netware distclean
+netware_cleanall:
+	$(MAKE) -C netware cleanall
+netware_info:
+	$(MAKE) -C netware info
+netware_makefiles:
+	$(MAKE) -C netware makefiles
+netware:
+	$(MAKE) -C netware all
+.PHONY: netware_all netware_debug netware_smart netware_release netware_units netware_examples netware_shared netware_install netware_sourceinstall netware_exampleinstall netware_distinstall netware_zipinstall netware_zipsourceinstall netware_zipexampleinstall netware_zipdistinstall netware_clean netware_distclean netware_cleanall netware_info netware_makefiles netware
+endif
 all: $(addsuffix _all,$(TARGET_DIRS))
 debug: $(addsuffix _debug,$(TARGET_DIRS))
 smart: $(addsuffix _smart,$(TARGET_DIRS))

+ 7 - 6
demo/Makefile.fpc

@@ -4,14 +4,15 @@
 
 [package]
 name=demo
-version=1.9.4
+version=1.9.6
 
 [target]
-dirs=text graph
-dirs_go32v2=modex
-dirs_win32=win32
-dirs_linux=linux
-dirs_os2=os2
+dirs=text
+dirs_go32v2=modex graph
+dirs_win32=win32 graph
+dirs_linux=linux graph
+dirs_os2=os2 graph
+dirs_netware=netware
 
 [install]
 fpcpackage=y

+ 1 - 1
demo/graph/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/20]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/29]
 #
 default: all
 MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc

+ 1 - 1
demo/linux/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/20]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/29]
 #
 default: all
 MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc

+ 1 - 1
demo/modex/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/20]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/29]
 #
 default: all
 MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc

+ 1597 - 0
demo/netware/Makefile

@@ -0,0 +1,1597 @@
+#
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/29]
+#
+default: all
+MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) sunos qnx
+LIMIT83fs = go32v2 os2 emx watcom
+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),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPC:=$(shell $(FPCPROG) -PB)
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=ppc386
+endif
+else
+override FPC=ppc386
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+ifndef FPC_VERSION
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+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
+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)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FULL_TARGET=$(OS_TARGET)
+FULL_SOURCE=$(OS_SOURCE)
+else
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+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))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(FULL_TARGET))
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(FULL_TARGET))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+ifeq ($(OS_TARGET),netware)
+override TARGET_PROGRAMS+=nutmon check
+endif
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(FULL_TARGET)
+else
+COMPILER_UNITTARGETDIR=units/$(FULL_TARGET)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(FULL_SOURCE)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(FULL_TARGET)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(FULL_TARGET)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(FULL_TARGET)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+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)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+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
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+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)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(FULL_SOURCE))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+STATICLIBPREFIX=libp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),sunos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.asm
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),sunos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(FULL_TARGET)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(FULL_SOURCE)
+ZIPCROSSPREFIX=$(FULL_TARGET)-
+else
+ZIPSUFFIX=.$(FULL_TARGET)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vI
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl 
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),sparc)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),arm)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),go32v2)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),os2)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),freebsd)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),freebsd)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),freebsd)
+ifeq ($(CPU_TARGET),x86_64)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),beos)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),netbsd)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),netbsd)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),netbsd)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),netbsd)
+ifeq ($(CPU_TARGET),sparc)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),amiga)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),atari)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),sunos)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),sunos)
+ifeq ($(CPU_TARGET),sparc)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),qnx)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),netware)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),openbsd)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),openbsd)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),wdosx)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),palmos)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),macos)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),darwin)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),emx)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),watcom)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),morphos)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifeq ($(OS_TARGET),netwlibc)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+endif
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(FULL_TARGET)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(FULL_TARGET)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(CPU_TARGET)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX) -Xc
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+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
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-OG2p3
+endif
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(FPC_VERSION),1.0.6)
+override FPCOPTDEF+=HASUNIX
+endif
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+EXECPPAS:=@$(PPAS)
+endif
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+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
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+	@$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+	$(MAKE) all DEBUG=1
+fpc_release:
+	$(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+	$(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+	$(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.lpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.dpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILES))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES)))
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES))
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+	-$(UPXPROG) $(INSTALLEXEFILES)
+endif
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+	$(FPCMAKE) -p -T$(OS_TARGET) Makefile.fpc
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+	$(MKDIR) $(INSTALL_LIBDIR)
+	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+	$(MKDIR) $(INSTALL_DATADIR)
+	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+	$(MKDIR) $(INSTALL_SOURCEDIR)
+	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+	$(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+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
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+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_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(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
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Upx....... $(UPXPROG)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples:
+shared:
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall:
+zipinstall:
+zipsourceinstall:
+zipexampleinstall:
+zipdistinstall:
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+nutmon.nlm: nutmon.pp nutconnection.pp

+ 13 - 0
demo/netware/Makefile.fpc

@@ -0,0 +1,13 @@
+#
+#   Makefile.fpc for FPC Netware demos (part of FPC demo package)
+#
+
+[target]
+programs_netware=nutmon check
+
+[default]
+fpcdir=../..
+
+[rules]
+nutmon.nlm: nutmon.pp nutconnection.pp
+#        $(COMPILER) -Dw -Ch8096 -Cs32728 basicpm.pas

+ 53 - 0
demo/netware/check.pp

@@ -0,0 +1,53 @@
+{
+    $Id$
+    This file is part of Free Pascal for Netware.
+    Copyright (c) 1999-2002 by the Free Pascal development team.
+
+    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.
+
+    Demonstrates the use of the check-function provided by the RTL
+ **********************************************************************}
+
+{$MODE OBJFPC}
+{$Description Demo CheckFunction for FreePascal Netware-RTL}
+{$Version 1.0.0}
+{$Copyright (c) 2002 the FreePascal development team}
+
+
+{ using crt automaticly calls _SetAutoScreenDestructionMode (TRUE);
+  so no "Press any key to close screeen" will be shown by netware }
+uses crt;
+
+var first : boolean = true;
+
+procedure checkfunction (var res : longint);
+begin
+  if first then
+  begin
+    ConsolePrintf (#13'It is unsafe to unload the nlm'#13#10);
+    res := 1;
+  end;
+  first := false;
+end;
+
+begin
+  WriteLn ('Press any key to unload nlm or unload via unload command');
+  WriteLn ('The first unload should show a message that it is unsafe');
+  WriteLn ('to unload the NLM, the second attempt should unload the');
+  WriteLn ('NLM without a message.');
+  System.NetwareCheckFunction := @checkfunction;
+  ReadKey;
+end.
+
+{
+  $Log$
+  Revision 1.1  2004-12-29 21:39:53  armin
+  * changed makefile version to 1.9.6, added samples for Netware
+
+}
+

+ 406 - 0
demo/netware/nutconnection.pp

@@ -0,0 +1,406 @@
+unit nutconnection;
+{
+    $Id$
+    This file is part of nutmon for netware
+    Copyright (c) 2004 armin diehl ([email protected])
+
+    Simple class to connect to the nut upsd, see
+    http://www.networkupstools.org for details about the
+    protocol
+
+    Tested with nut 2.0.1pre4
+
+    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}
+
+interface
+
+uses sysutils, ssockets;
+
+Const
+  NutDefaultPort = 3493;
+  NutLineEnd    = #10;
+  NutDataStale = 'ERR DATA-STALE';
+
+type
+  TNutException = class (Exception);
+  TUpsStat   = (UPS_disconnected,UPS_stale,UPS_online,UPS_onBatt,UPS_lowBatt,UPS_FSD);
+  TUpsStatus = set of TUpsStat;
+  TNutConnection = class (TObject)
+    private
+     fSock : TInetSocket;
+     fHost : string;
+     fPort : word;
+     fUpsName,fUserName,fPassword : string;
+     fLogin : boolean;
+     fDebug : boolean;
+     fLastResponse : string;
+
+      function isConnected : boolean;
+      procedure doConnect (c : boolean);
+      procedure setHost (s : string);
+      procedure setPort (w : word);
+      procedure sendCommand (s : string);
+      function getOneLine : string;
+      function getVersion : string;
+      procedure setUpsName (s : string);
+      procedure checkConnected;
+      function getValue (name : string) : string;
+      function getUpsLoad : string;
+      function getUpsMfr : string;
+      function getUpsModel : string;
+      function getUpsRuntime : string;
+      function getUpsCharge : string;
+      function getUpsChargeInt : integer;
+      function getUpsTemperature : string;
+      function getInputFrequency : string;
+      function getInputVoltage : string;
+      function getOutputVoltage : string;
+      function getUpsStatus : TUpsStatus;
+      procedure setUserName (user : string);
+      procedure setPassword (pwd : string);
+      procedure doLogin (login : boolean);
+      function getNumLogins : string;
+    public
+      property connected : boolean read isConnected write doConnect;
+      property host : string read fHost write setHost;
+      property port : word read fPort write setPort;
+      property version : string read getVersion;
+      property upsName : string read fUpsName write setUpsName;
+      property upsload : string read getUpsLoad;
+      property upsMfr : string read getUpsMfr;
+      property upsModel : string read getUpsModel;
+      property upsRuntime : string read getUpsRuntime;
+      property upsCharge : string read getUpsCharge;
+      property upsChargeInt : integer read getUpsChargeInt;
+      property upsTemperature : string read getUpsTemperature;
+      property upsInputFrequency : string read getInputFrequency;
+      property upsInputVoltage : string read getInputVoltage;
+      property upsOutputVoltage : string read getOutputVoltage;
+      property upsStatus : TUpsStatus read getUpsStatus;
+      property Username : string read fUsername write setUsername;
+      property Password : string read fPassword write setPassword;
+      // in case login is set to true (and username,password are ok)
+      // upsd knows that this system gets power from the ups and
+      // will switch off only after login was set to false
+      property Login : boolean read fLogin write doLogin;
+      property Debug : boolean read fDebug write fDebug;
+      property LastResult : string read fLastResponse;
+      property numLogins : string read getNumLogins;
+  end;
+
+function UpsStatus2Txt (status : TUpsStatus) : string;
+
+implementation
+
+function TNutConnection.isConnected : boolean;
+begin
+  result := (fSock <> nil);
+end;
+
+procedure TNutConnection.doConnect (c : boolean);
+begin
+  if fSock <> nil then
+  begin
+    fSock.Free;
+    fSock := nil;
+    fLogin := false;
+  end;
+  if c then
+    fSock := TInetSocket.Create (fHost, fPort);
+end;
+
+
+procedure TNutConnection.setHost (s : string);
+begin
+  if fHost <> s then
+  begin
+    fHost := s;
+    doConnect (isConnected);
+  end;
+end;
+
+procedure TNutConnection.setPort (w : word);
+begin
+  if w <> fPort then
+  begin
+    fPort := w;
+    doConnect (isConnected);
+  end;
+end;
+
+procedure TNutConnection.checkConnected;
+begin
+  if not isConnected then
+    raise (TNutException.Create ('not connected'));
+end;
+
+procedure TNutConnection.sendCommand (s : string);
+var len : longint;
+begin
+  checkConnected;
+  if fDebug then
+    writeln (stderr,'S: "'+s+'"');
+  s := s + NutLineEnd;
+  len := fSock.Write (s[1],length(s));
+  if (len <> length(s)) then
+  begin
+    if fDebug then
+      writeln (stderr,'send error');
+    doConnect (false);
+    raise (TNutException.Create ('send failed, disconnected from upsd'));
+  end;
+end;
+
+function TNutConnection.getOneLine : string;
+var c : char;
+begin
+  checkConnected;
+  fLastResponse := '';
+  result := '';
+  while (fSock.read (c,1) = 1) do
+  begin
+    if c = NutLineEnd then
+    begin
+      if fDebug then
+        writeln (stderr,'R: "'+result+'"');
+      fLastResponse := result;
+      exit;
+    end;
+    result := result + c;
+  end;
+end;
+
+function TNutConnection.getVersion : string;
+begin
+  sendCommand ('VER');
+  result := getOneLine;
+end;
+
+
+procedure TNutConnection.setUpsName (s : string);
+var res : string;
+begin
+  fUpsName := '';
+  sendCommand ('GET NUMLOGINS '+s);
+  res := getOneLine;
+  if copy (res,1,10) <> 'NUMLOGINS ' then
+    Raise (TNutException.Create ('setUpsName, unknown response from upsd'));
+  fUpsName := s;
+end;
+
+function TNutConnection.getValue (name : string) : string;
+var s : string;
+begin
+  if fUpsName = '' then
+    raise (TNutException.Create ('upsName not set'));
+  sendCommand ('GET VAR '+fUpsName+' '+name);
+  s := getOneLine;
+  if s = 'ERR DATA-STALE' then
+  begin
+    result := s;
+    exit;
+  end;
+  if copy (s,1,4) <> 'VAR ' then
+    raise (TNutException.Create ('result from GET VAR invalid, does not begin with "VAR "'));
+  delete (s,1,4);
+  if ansiUpperCase (copy (s,1,length(fUpsName))) <> ansiUpperCase (fUpsName) then
+    raise (TNutException.Create ('result from GET VAR invalid, second param was not upsName'));
+  delete (s,1,length(fUpsName)+1);
+  delete (s,1,length(name)+1);
+  if copy (s,1,1) = '"' then delete (s,1,1);
+  if copy (s,length(s),1) = '"' then delete (s,length(s),1);
+  result := s;
+end;
+
+function TNutConnection.getUpsLoad : string;
+begin
+  result := getValue ('ups.load');
+end;
+
+function TNutConnection.getUpsMfr : string;
+begin
+  result := getValue ('ups.mfr');
+end;
+
+function TNutConnection.getUpsModel : string;
+begin
+  result := getValue ('ups.model');
+end;
+
+function TNutConnection.getUpsRuntime : string;
+begin
+  result := getValue ('battery.runtime');
+end;
+
+function TNutConnection.getUpsCharge : string;
+begin
+  result := getValue ('battery.charge');
+end;
+
+
+function TNutConnection.getUpsChargeInt : integer;
+var s : string;
+    p : integer;
+begin
+  try
+    s := getUpsCharge;
+    p := Pos ('.',s);
+    if p > 0 then
+      delete (s,p,255);
+    result := StrToInt (s);
+  except
+    result := 100;
+  end;
+end;
+
+function TNutConnection.getUpsTemperature : string;
+begin
+  result := getValue ('ups.temperature');
+end;
+
+function TNutConnection.getInputFrequency : string;
+begin
+  result := getValue ('input.frequency');
+end;
+
+function TNutConnection.getInputVoltage : string;
+begin
+  result := getValue ('input.voltage');
+end;
+
+function TNutConnection.getOutputVoltage : string;
+begin
+  result := getValue ('output.voltage');
+end;
+
+function TNutConnection.getNumLogins : string;
+var res : string;
+    p : integer;
+begin
+  if fUpsName = '' then
+    Raise (TNutException.Create ('getNumLogins, upsName not set'));
+  sendCommand ('GET NUMLOGINS '+fUpsName);
+  res := getOneLine;
+  if copy (res,1,10) <> 'NUMLOGINS ' then
+    Raise (TNutException.Create ('setUpsName, unknown response from upsd'));
+  delete (res,1,10);
+  p := pos (' ',res);
+  if p > 0 then
+    delete (res,1,p);
+  result :=res;
+end;
+
+function TNutConnection.getUpsStatus : TUpsStatus;
+var s,value : string;
+    i : integer;
+begin
+  try
+    s := getValue ('ups.status');
+    result := [];
+    if s = NutDataStale then
+      result := [UPS_stale]
+    else
+    repeat
+      i := pos (' ',s);
+      if (i > 0) then
+      begin
+        value := trim(ansiuppercase(copy(s,1,i-1)));
+        delete (s,1,i); s:=trim(s);
+      end else
+      begin
+        value := trim(ansiuppercase(s));
+        s := '';
+      end;
+      if value = 'OL' then
+        result := result + [UPS_online]
+      else if value = 'OB' then
+        result := result + [UPS_onBatt]
+      else if value = 'LB' then
+        result := result + [UPS_LowBatt]
+      else if value = 'FSD' then
+        result := result + [UPS_FSD];
+    until s = '';
+  except
+    result := [UPS_disconnected];
+  end;
+end;
+
+
+procedure TNutConnection.setUserName (user : string);
+var res : string;
+begin
+  fUserName := user;
+  if fUserName <> '' then
+  begin
+    sendCommand ('USERNAME '+user);
+    res := getOneLine;
+    if res <> 'OK' then
+      raise (TNutException.Create (format ('username failed (%s)',[res])));
+  end;
+end;
+
+procedure TNutConnection.setPassword (pwd : string);
+var res : string;
+begin
+  fPassword := pwd;
+  if pwd <> '' then
+  begin
+    sendCommand ('PASSWORD '+pwd);
+    res := getOneLine;
+    if res <> 'OK' then
+      raise (TNutException.Create (format ('password failed (%s)',[res])));
+  end;
+end;
+
+procedure TNutConnection.doLogin (login : boolean);
+var res : string;
+begin
+  if login then
+  begin
+    if fLogin then
+      raise (TNutException.Create ('already logged in'));
+    if (fUsername = '') or (fPassword = '') or (fUpsName = '') then
+      raise (TNutException.Create ('Login requires UpsName, Username and Password'));
+    sendCommand ('LOGIN '+fUpsName);
+    res := getOneLine;
+    if res <> 'OK' then
+      raise (TNutException.Create (format ('login failed (%s)',[res])));
+    fLogin := true;
+  end else
+  if fLogin then
+  begin
+    sendCommand ('LOGOUT');
+    res := getOneLine;
+    if (copy(res,1,2) <> 'OK') and (copy(res,1,6)<> 'Goodby') then
+      raise (TNutException.Create (format('logout failed, got "%s"',[res])));
+    fLogin := false;
+    doConnect(false);
+  end;
+end;
+
+function UpsStatus2Txt (status : TUpsStatus) : string;
+begin
+  result := '';
+  if UPS_disconnected in status then result := result + 'disconnected ';
+  if UPS_stale        in status then result := result + 'stale ';
+  if UPS_online       in status then result := result + 'online ';
+  if UPS_onBatt       in status then result := result + 'onBattery ';
+  if UPS_lowBatt      in status then result := result + 'LowBattery ';
+  if UPS_FSD          in status then result := result + 'ForeceShutdown ';
+  result := trim(result);
+end;
+
+
+end.
+
+{
+  $Log$
+  Revision 1.1  2004-12-29 21:39:53  armin
+  * changed makefile version to 1.9.6, added samples for Netware
+
+}

+ 490 - 0
demo/netware/nutmon.pp

@@ -0,0 +1,490 @@
+Program nutmon;
+{
+    $Id$
+
+    Simple nut ups monitor for netware, see http://www.networkupstools.org
+
+    This program can be used to shut down a netware server on power
+    failure. It requires nut to be installed on a *nix server (the serial
+    or usb ups control is not connected to the netware server, this will
+    be handled by the upsd on a *nix server)
+
+    FreePascal >= 1.9.5 (http://www.freepascal.org) is needed to compile this.
+
+    This source is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This code 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.  See the GNU
+    General Public License for more details.
+
+    A copy of the GNU General Public License is available on the World
+    Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also
+    obtain it by writing to the Free Software Foundation,
+    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+    First Version 2004/12/16 Armin Diehl <[email protected]>
+
+ **********************************************************************}
+{$mode objfpc}
+{$M 65535,0,0}
+{$if defined(netware)}
+{$if defined(netware_clib)}
+{$description nut ups monitor - clib}
+{$else}
+{$description nut ups monitor - libc}
+{$endif}
+{$copyright Copyright 2004 Armin Diehl <[email protected]>}
+{$screenname DEFAULT}  // dont use none because writeln will not work with none
+{$version 1.0.0}
+{$endif netware}
+
+uses
+  sysutils, nutconnection, inifiles
+  {$if defined(netware_libc)}
+  ,libc
+  {$elseif defined(netware_clib)}
+  ,nwserv,nwnit
+  {$endif}
+  ;
+
+
+const
+  CMD_NONE = 0;
+  CMD_STATUS = 1;
+  CMD_TESTSHUTDOWN = 2;
+
+var
+  nut : TNutConnection;
+  nutUser : string;
+  nutPassword : string;
+  nutPollfreq : integer;
+  nutPollfreqAlert : integer;
+  nutReconnectFreq : integer;
+  nutUpsName : string;
+  terminated : boolean = false;
+  upsStatus,lastupsStatus : TUpsStatus;
+  waitSemaphore: longint;
+  commandAfterDown,powerOffFileName : ansistring;
+  downIfCapaityBelow:integer = 0;
+{$if defined(netware)}
+  CmdParserStruct : TcommandParserStructure;
+  CurrentCommand : byte;
+  oldNetwareUnloadProc : pointer;
+  MainLoopTerminated : boolean = false;
+{$endif}
+
+const mainSection = 'nutmon';
+
+procedure readConfig;
+var fn : string;
+    t  : tiniFile;
+begin
+  fn := ChangeFileExt(paramstr(0),'.ini');
+  t := TIniFile.Create (fn);
+  try
+    nut.host := t.readString (mainSection,'host','');
+    if nut.host = '' then
+    begin
+      writeln (stderr,paramstr(0)+': host= not specified in '+fn+' exiting');
+      halt;
+    end;
+    nut.port := word (t.readInteger (mainSection,'port',NutDefaultPort));
+    nutUser := t.readString (mainSection,'user','');
+    if nutUser = '' then
+    begin
+      writeln (stderr,paramstr(0)+': user= not specified in '+fn+' exiting');
+      halt;
+    end;
+    nutPassword := t.readString (mainSection,'password','');
+    if nutPassword = '' then
+    begin
+      writeln (stderr,paramstr(0)+': password= not specified in '+fn+' exiting');
+      halt;
+    end;
+    nutUpsName := t.readString (mainSection,'upsname','');
+    if nutUpsname = '' then
+    begin
+      writeln (stderr,paramstr(0)+': upsname= not specified in '+fn+' exiting');
+      halt;
+    end;
+    nutPollfreq := t.readInteger (mainSection,'pollfreq',10);
+    nutPollfreqAlert := t.readInteger (mainSection,'pollfrqalert',5);
+    nut.Debug := (t.readInteger (mainSection,'debug',0) > 0);
+    commandAfterDown := t.readString (mainSection,'commandAfterDown','');
+    nutReconnectFreq := t.readInteger (mainSection,'reconnectFreq',30);
+    powerOffFileName := t.readString (mainSection,'createPoweroffFile','');
+    downIfCapaityBelow := t.readInteger (mainSection,'downIfCapacityBelow',0);
+  finally
+    t.free;
+  end;
+end;
+
+{$if defined(netware)}
+procedure onNetwareUnload;
+var i : integer;
+begin
+  terminated := true;
+  SignalLocalSemaphore (waitSemaphore);  // this ends doDelay
+  // here we wait for the main thread to terminate
+  // we have to wait because system.pp will deinit winsock
+  // to allow unload in case a blocking winsock call is
+  // active. In case we wont wait here, our tcp socket
+  // will be destroyed before we have the chance to send
+  // a logout command to upsd
+  i := 500;
+  System.NetwareUnloadProc := oldNetwareUnloadProc;
+  while (i > 0) and (not MainLoopTerminated) do
+  begin
+    dec(i);
+    delay(500);
+  end;
+end;
+{$endif}
+
+
+procedure doDelay (seconds : integer);
+{$if defined(netware)}
+begin
+  TimedWaitOnLocalSemaphore (waitSemaphore,seconds*1000);
+end;
+{$else}
+var i : integer;
+begin
+  i := seconds * 2;
+  while (not terminated) and (i > 0) do
+  begin
+    sysutils.sleep(500);
+    dec(i);
+  end;
+end;
+{$endif}
+
+var lastAlert : TUpsStatus = [UPS_Online];
+
+procedure doAlert (status : TUpsStatus);
+{$if defined(netware)}
+var nwAlert : TNetWareAlertStructure;
+    s : AnsiString;
+begin
+  FillChar(nwAlert, sizeof(nwAlert),0);
+  nwAlert.nwAlertID := ALERT_UPS;
+  nwAlert.nwTargetNotificationBits :=  NOTIFY_ERROR_LOG_BIT+NOTIFY_CONSOLE_BIT;
+  nwAlert.nwAlertLocus := LOCUS_UPS;
+  nwAlert.nwAlertClass := CLASS_GENERAL_INFORMATION;
+  nwAlert.nwAlertSeverity := SEVERITY_CRITICAL;
+  if UPS_lowBatt in Status then
+    s := 'UPS low Battery, shutting down' else
+  if UPS_FSD in Status then
+    s := 'UPS Forced Shuttdown' else
+  if UPS_online in Status then
+    s := 'Power/communication Restored, UPS is online' else
+  if UPS_onBatt in Status then
+    s := 'Power Failure, UPS is on battery' else
+  if UPS_Stale in Status then
+    s := 'Lost communication to UPS' else
+  if UPS_Disconnected in Status then
+    s := 'Lost communication to upsd';
+  if lastAlert <> status then
+    if (UPS_onBatt in Status) or
+       (UPS_lowBatt in Status) or
+       (UPS_FSD in Status) or
+       (UPS_Online in Status) then
+         nwAlert.nwTargetNotificationBits := nwAlert.nwTargetNotificationBits + NOTIFY_EVERYONE_BIT;
+  lastAlert := status;
+
+  nwAlert.nwControlString := pchar(s);
+
+  NetWareAlert(GetNlmHandle, @nwAlert, 0, []);
+end;
+{$else}
+begin
+end;
+{$endif}
+
+
+procedure doStatusChange (newStatus,oldStatus : TUpsStatus);
+begin
+  writeln (#13'nutmon: ups status change from '+UpsStatus2Txt (oldStatus)+' to '+UpsStatus2Txt (newStatus));
+  doAlert (newStatus);
+end;
+
+
+procedure doShutdown (Reason : AnsiString = 'Server shutting down because of power failure');
+var err:integer;
+begin
+  if poweroffFileName <> '' then
+  begin
+    err := FileCreate (powerOffFileName);
+    if err <> -1 then
+      FileClose (err)
+    else
+      writeln (#13,'nutmon: warning, can not create power off flag file ('+powerOffFileName+')');
+  end;
+  {$if defined(netware_clib)}
+  SendConsoleBroadcast(pchar(Reason),0,nil);
+  err := DownFileServer (1);
+  try
+    nut.login := false;   // notify upds that we are shutting down
+    writeln (#13'numon: informed upsd that we have done shutdown');
+  except
+    on e:Exception do
+    begin
+      writeln (#13'nutmon: got exception while trying to logout (',e.Message,')');
+      try
+        nut.connected := false;
+      except
+      end;
+    end;
+  end;
+  if err = 0 then
+    writeln (#13'nutmon: Server is down')
+  else
+    writeln (#13'nutmon: DownFileServer returned error ',Err);
+  if commandAfterDown <> '' then
+    nwserv._system (pchar(commandAfterDown));
+  repeat
+    sysutils.sleep(30);
+  until false;
+  {$elseif defined(netware_libc)}
+  ShutdownServer(nil,false,nil,0);
+  repeat
+    sysutils.sleep(30);
+  until false;
+  {$else}
+  writeln (stderr,'no shutdown call available, terminating');
+  halt;
+  {$endif}
+
+end;
+
+procedure mainLoop;
+var s : string;
+begin
+  while not terminated do
+  begin
+    if not nut.connected then
+    begin
+      try
+        nut.connected := true;
+	try
+	  nut.upsName := nutUpsName;
+	except
+          if nut.LastResult <> NutDataStale then
+          begin
+	    writeln(stderr,#13'invalid ups name, terminating');
+	    nut.free;
+	    halt;
+          end else
+          begin   // special case: on start UPS is in stale status, disconnect and try later
+            upsStatus := [UPS_Stale];
+	    if (upsStatus <> lastUpsStatus) then doStatusChange (upsStatus, lastUpsStatus);
+            lastUpsStatus := upsStatus;
+            nut.connected := false;
+          end;
+	end;
+
+	try
+	  nut.UpsStatus;
+	except
+          on e:exception do
+          begin
+	    writeln(stderr,#13'unable get ups status ('+e.Message+'), terminating');
+	    nut.free;
+	    halt;
+	  end;
+        end;
+
+	try
+	  nut.Username := nutUser;
+	  nut.Password := nutPassword;
+	  nut.Login := true;
+	except
+          on e:exception do
+          begin
+	    writeln(stderr,#13'unable to login ('+e.Message+'), terminating');
+	    nut.free;
+	    halt;
+          end;
+	end;
+	lastUpsStatus := [UPS_disconnected];
+        WriteLn(#13'nutmon: connected to '+nutUpsName+'@'+nut.Host);
+      except
+        on e:exception do
+        begin
+	  writeln (stderr,#13'nutmon: connect error, will retry in ',nutReconnectFreq,' seconds ('+e.message+')');
+	  doDelay (nutReconnectFreq);
+        end;
+      end;
+    end else
+    begin  // we are connected, poll status
+      try
+        upsStatus := nut.upsStatus;
+	if (upsStatus <> lastUpsStatus) then doStatusChange (upsStatus, lastUpsStatus);
+	lastUpsStatus := upsStatus;
+	if (UPS_lowBatt in upsStatus) or
+           (UPS_FSD in upsStatus) then doShutdown;
+        if downIfCapaityBelow > 0 then
+          if (UPS_onBatt in upsStatus) then
+            if nut.UpsChargeInt < downIfCapaityBelow then
+              //writeln ('battery below ',downIfCapaityBelow);
+              doShutdown ('Server shutting down,power failure and battery < '+IntToStr(downIfCapaityBelow)+'%');
+	if UPS_online in upsStatus then
+	  doDelay (nutPollfreq)
+	else
+	  doDelay (nutPollfreqAlert);
+      except
+      end;
+    end;
+    {$if defined(netware)}
+    if CurrentCommand <> CMD_NONE then
+    begin
+      case CurrentCommand of
+        CMD_STATUS: begin
+                      if nut.connected then
+                      begin
+                        writeln (#13'UPS Status:');
+                        writeln ('   connected to: ',nut.UpsName+'@',nut.host,':',nut.Port);
+                        writeln ('         UPS is: ',UpsStatus2Txt(nut.UpsStatus));
+                        try
+                          s := nut.upsMfr;
+                          writeln ('   manufacturer: ',s);
+                        except
+                        end;
+                        try
+                          s := nut.upsModel;
+                          writeln ('          model: ',s);
+                        except
+                        end;
+                        try
+                          s := nut.UpsLoad;
+                          writeln ('   Percent load: ',s);
+                        except
+                        end;
+                        try
+                          s := nut.upsTemperature;
+                          writeln ('           temp: ',s);
+                        except
+                        end;
+                        try
+                          s := nut.upsInputVoltage;
+                          writeln ('  input Voltage: ',s);
+                        except
+                        end;
+                        try
+                          s := nut.upsOutputVoltage;
+                          writeln (' output Voltage: ',s);
+                        except
+                        end;
+                        try
+                          s := nut.upsInputFrequency;
+                          writeln ('input Frequency: ',s);
+                        except
+                        end;
+                        try
+                          s := nut.upsRuntime;
+                          writeln ('Battery Runtime: ',s);
+                        except
+                        end;
+                        try
+                          s := nut.upsCharge;
+                          writeln (' Battery Charge: ',s);
+                        except
+                        end;
+                        try
+                          s := nut.numLogins;
+                          writeln ('     num Logins: ',s);
+                        except
+                        end;
+                        Writeln (nut.Version);
+                      end else
+                        writeln (#13'UPS Status: not connected to upsd');
+                    end;
+        CMD_TESTSHUTDOWN:
+                    begin
+                      upsStatus := [UPS_FSD];
+	              doStatusChange (upsStatus, lastUpsStatus);
+	              doShutdown;
+                    end;
+      end;
+      CurrentCommand := CMD_NONE;
+    end;
+    {$endif}
+  end;
+end;
+
+
+
+{$if defined(netware)}
+// handle the command "UPS STATUS"
+// only set the requested command and let the main thread handle it
+function UpsCommandlineParser (ScreenId : scr_t; commandLine : pchar) : longint; cdecl;
+begin
+  if strlicomp(commandLine,'ups status',10) = 0 then
+  begin
+    result := HANDLEDCOMMAND;
+    CurrentCommand := CMD_STATUS;
+    SignalLocalSemaphore (waitSemaphore);
+  end else
+  if strlicomp(commandLine,'ups testshutdown',16) = 0 then
+  begin
+    result := HANDLEDCOMMAND;
+    CurrentCommand := CMD_TESTSHUTDOWN;
+    SignalLocalSemaphore (waitSemaphore);
+  end else
+    result := NOTMYCOMMAND;
+end;
+{$endif}
+
+
+
+begin
+  try
+    {$if defined(netware)}
+    waitSemaphore := OpenLocalSemaphore (0);
+    CmdParserStruct.Link := nil;
+    CmdParserStruct.parseRoutine := @UpsCommandLineParser;
+    CmdParserStruct.RTag         := AllocateResourceTag (GetNlmHandle,'nutmon command line parser',ConsoleCommandSignature);
+
+    if RegisterConsoleCommand(CmdParserStruct) <> 0 then
+      writeln (stderr,#13'nutmon: RegisterConsoleCommand failed (ups status console command will not work)')
+    else begin
+      writeln (#13'nutmon console commands available:');
+      writeln (#13'ups status         - show ups status');
+      writeln (#13'ups testshutdown   - shutdown as if a low power condition is reached');
+      writeln;
+    end;
+    CurrentCommand := CMD_NONE;
+    oldNetwareUnloadProc := System.NetwareUnloadProc;
+    System.NetwareUnloadProc := @onNetwareUnload;
+    {$endif}
+    nut := TNutConnection.create;
+    readConfig;
+    if poweroffFileName <> '' then
+      if FileExists (powerOffFileName) then
+        if not DeleteFile (powerOffFileName) then
+          writeln (#13,'nutmon: warning, can not delete power off flag file ('+powerOffFileName+')');
+    if downIfCapaityBelow > 0 then
+      writeln (#13'nutmon: will shutdown if battery < ',downIfCapaityBelow,'%');
+    mainLoop;
+    nut.login := false;
+    nut.connected := false;
+    nut.free;
+  finally
+    {$if defined(netware)}
+    CloseLocalSemaphore (waitSemaphore);
+    UnRegisterConsoleCommand (CmdParserStruct);
+    MainLoopTerminated := true;
+    {$endif}
+  end;
+end.
+
+{
+  $Log$
+  Revision 1.1  2004-12-29 21:39:53  armin
+  * changed makefile version to 1.9.6, added samples for Netware
+
+}

+ 1 - 1
demo/os2/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/20]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/29]
 #
 default: all
 MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc

+ 1 - 1
demo/text/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/20]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/29]
 #
 default: all
 MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc

+ 1 - 1
demo/win32/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/20]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/29]
 #
 default: all
 MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc