#
# Ambient
#  2001-2005 by David Gerber
#  2005-2007 Ambient Open Source Team
#
# All Rights Reserved
#
# $Id: makefile,v 1.74 2026/05/16 17:39:58 geit Exp $
#
# Useful targets:
# --------------
# - make help

# That ones are overriden
RELEASE = BETA_RELEASE
#RELEASE = FINAL_RELEASE
export RELEASE

MORPHOS_BETABUILD = 0
export MORPHOS_BETABUILD

NIGHTLY = 0
export NIGHTLY


APPNAME = Ambient

# Detect LEGACY build
ifndef LEGACY
ifeq ($(wildcard config.h),config.h)
export LEGACY := $(shell grep "^\#define USE_LEGACY" config.h | grep -c 1)
endif
endif
#
# These are hardcoded now, unfortunately.
# The USE_LEGACY crap in config.h broke the old grepping.
ifeq ($(LEGACY),1)
ifndef ALTIVEC
export ALTIVEC := 0
endif
ifndef LIBPNG
export LIBPNG  := 1
endif
ifndef LIBZ
export LIBZ    := 1
endif
else
ifndef ALTIVEC
export ALTIVEC := 1
endif
ifndef LIBPNG
export LIBPNG  := 0
endif
ifndef LIBZ
export LIBZ    := 0
endif
endif

include makefile.conf
include makefile.objs
include makefile.libs

# Name of the build
BUILD_BASE=ambient
export BUILD_BASE


SOURCE = ../../

VPATH := $(SOURCE)

EXE  = $(APPNAME)
OBJS = $(COBJS) $(COBJS_NODEP) $(AOBJS)


CPU-TYPES = 750

ifeq ($(RELEASE), FINAL_RELEASE)
CPU-TYPES = 750-final
endif

ifeq ($(RELEASE), SHOW_RELEASE)
CPU-TYPES = 750-show
endif

export CPU-TYPES


INCLUDES = -I. -I$(SOURCE) -I$(SOURCE)include -I/GG/usr/
			
DEPINCLUDES = -I. -Iinclude

ifeq ($(LIBPNG),1)
	INCLUDES    += -I$(SOURCE)libs/pnglib/libpng
	DEPINCLUDES += -Ilibs/pnglib/libpng
endif

ifeq ($(LIBZ),1)
	INCLUDES    += -I$(SOURCE)libs/zlib/libz
	DEPINCLUDES += -Ilibs/zlib/libz
endif

DEPOPTS = -noixemul -DDEPEND
ifeq ($(RELEASE), FINAL_RELEASE)
else
DEPOPTS += -DDEBUG
endif

CFLAGS = -noixemul -c -O2 -g -D$(RELEASE) -DSYSTEM_PRIVATE -fomit-frame-pointer -ffast-math -mcpu=$(CPU)
GCCVER := $(shell $(CC) -dumpversion)
ifneq "$(GCCVER)" "2.95.3" 
	CFLAGS += -Wno-pointer-sign
endif

# no inlined methods in devel builds (makes debugging easier)
ifeq ($(RELEASE), FINAL_RELEASE)
	CFLAGS += -D__INLINED_METHODS
endif

CFLAGSVEC =
ifeq ($(ALTIVEC),1)
	GCCVER := $(shell $(CC) -dumpversion)
	ifeq "$(GCCVER)" "2.95.3" 
		CFLAGSVEC += -fvec
	else
		CFLAGSVEC += -maltivec
	endif
endif

CFLAGS += $(WARNINGS) $(INCLUDES) -DMORPHOS_BETABUILD=$(MORPHOS_BETABUILD)

LDFLAGS = -nostdlib -noixemul -L$(SOURCE)lib/bin -L$(SOURCE)$(BUILDDIR)/lib -o

# for the future.. maybe..
# -mpowerpc-gpopt  (hardware sqrt())
# -mpowerpc64      (better long longs)
# -falign-labels=32 -falign-loops=32 -falign-jumps=32 -falign-functions=32
# -mnomultiple     (lmw/stmw is bad on the 970 (microcode))
# -mno-update
# -mcpu=970 -mtune=970

#
# Default build
# -------------
# Check if there's a dependency

.PHONY: all
ifeq ($(wildcard $(DEPFILE)),$(DEPFILE))
# nope
all: .depend.check build
else
# yes
all: depend
	$(OUT)$(MAKE) $(NODIR) $(SILENT) -f $(MAKEFILENAME) build
endif

.PHONY: build
build: buildenvironment.check
	@echo "$(APPNAME) build in progress.. ('make help' for target options)"
	@echo -n "Current target: "
ifeq ($(MAKECMDGOALS),)
	@echo "all [default]"
else
	@echo "$(MAKECMDGOALS)"
endif
	@echo "Architectures: $(CPU-TYPES)"
	@echo -n "Features: "
	@echo -n "altivec: "
ifeq ($(ALTIVEC),1)
	@echo -n "yes"
else
	@echo -n "no"
endif
	@echo -n ", png.library: "
ifeq ($(LIBPNG),1)
	@echo -n "no (png.alib)"
else
	@echo -n "yes"
endif
	@echo -n ", z.library: "
ifeq ($(LIBZ),1)
	@echo -n "no (z.alib)"
else
	@echo -n "yes"
endif
	@echo ""
	@echo "Compiler: $(CC) (v$(shell $(CC) -dumpversion))"
	$(MKDIR) $(BUILDDIR)/lib
	@for i in $(CPU-TYPES); \
		do (echo -n "==> [$(APPNAME)/"; \
			echo -n $$i; \
			echo "]"; \
			$(MKDIR) $(BUILDDIR)/$$i; \
			cd $(BUILDDIR)/$$i; \
			$(MAKE) $(NODIR) $(SILENT) -f $(SOURCE)$(MAKEFILENAME) flat -I$(SOURCE) CPU=`echo $$i | sed 's/\-.*//'`) ; echo "<== [$(APPNAME)/$$i]"; done


.PHONY: buildenvironment.check
buildenvironment.check:
	@echo "==> [validate build setup]"
	$(OUT)$(MAKE) $(NODIR) $(SILENT) -f makefile.check
	@echo "<== [validate build setup]"
	@echo ""


.PHONY: help
help:
	@echo "General targets:"
	@echo "  install          - installs everything to mossys: (including subdirs)"
	@echo "  dump             - creates an output disassembly"
	@echo "  clean            - cleanups object files"
	@echo "  depend           - regenerates dependencies"
	@echo "  mrproper         - cleanups everything including tools, autogenerated files and dependencies"
	@echo "  distclean        - like mrproper but including subdirs"
	@echo "  wblib            - compiles workbench.library"
	@echo "  wblib_install    - compiles and installs workbench.library"
	@echo "  iconlib          - compiles icon.library"
	@echo "  iconlib_install  - compiles and installs icon.library"
	@echo "  libs             - compiles private libraries"
	@echo "  libs_install     - compiles and installs private libraries"
	@echo "  modules          - compiles private modules"
	@echo "  modules_install  - compiles and installs private modules"
	@echo "  c                - compiles commands (loadwb, open)"
	@echo "  c_install        - compiles and installs commands (loadwb, open)"
	@echo "  catalogs         - creates catalogs"
	@echo "  catalogs_install - creates and installs catalogs"
	@echo "  docs             - creates documentation"
	@echo "  docs_install     - creates and installs documentation"
	@echo "  test             - runs a serie of testsuites"
	@echo "  stats            - displays some stats"
	@echo "Additional targets (development team only):"
	@echo "  archive          - packs up an archive"
	@echo "  archive-nightly  - packs up an nightly build archive"
	@echo "  archive-final    - packs up an release archive"
	@echo "  update           - bumps the revision"
	@echo "Additional variables:"
	@echo "  v=1              - prints verbose informations"


.PHONY: flat
ifeq ($(RELEASE), FINAL_RELEASE)
flat: $(EXE)
else
flat: $(EXE).db
endif

ifeq ($(RELEASE), FINAL_RELEASE)
$(EXE): $(OBJS) $(LINKLIBS)
	$(ECHO)	-n "LD -> $(subst $(SOURCE),,$@) (final)"
	$(OUT)$(CC) $(LDFLAGS) $(EXE).db $(OBJS) $(LIBS) -lsyscall
	$(ECHO) ""
	$(OUT)$(STRIP) --remove-section=.comment $(EXE).db -o $(EXE)
	$(OUT)chmod +x $(EXE) $(QUIET)
else
$(EXE).db: $(OBJS) $(LINKLIBS)
	$(ECHO)	-n "LD -> $(subst $(SOURCE),,$@)"
	$(OUT)$(CC) -Wl,--cref,-Map,$(EXE).map $(LDFLAGS) $(EXE).db $(OBJS) $(LIBS) -lsyscall_public
	$(ECHO) ""
	$(ECHO) -n "STRIP -> $(EXE)"
	$(OUT)$(STRIP) --remove-section=.comment -o $(SOURCE)$(EXE) $(EXE).db
	$(ECHO) ""
	$(OUT)chmod +x $(SOURCE)$(EXE) $(QUIET)
	$(OUT)ls -Gl $(SOURCE)$(EXE)
endif
	


.depend.check: makefile.objs makefile.libs
	$(OUT)$(MAKE) $(NODIR) $(SILENT) -f $(MAKEFILENAME) depend


.PHONY: depend
depend: rev
	$(OUT)./rev
	$(ECHO)
ifeq ($(USER),laire)
	$(ECHO) "generating dependencies (takes 8 minutes :)"
else
	$(ECHO) "generating dependencies (takes about a minute or two)"
endif
	$(OUT)$(MKDIR) $(COBJS_NODEP_DIRS)
	$(OUT)touch $(patsubst %.o,%.h, $(COBJS_NODEP)) $(COBJS_NODEP_H)
	$(OUT)sh mkdep.sh -f $(DEPFILE) $(DEPOPTS) $(DEPINCLUDES) $(patsubst %.o,%.c, $(COBJS))
	$(OUT)$(DELETE) $(patsubst %.o,%.h, $(COBJS_NODEP)) $(COBJS_NODEP_H)
	$(OUT)touch .depend.check


# that rule is experimental and not used yet
#.PHONY: depend2
#depend2: rev
#	rev
#	@echo
#	@echo "Generating dependencies (can take a while).."
#	@echo
#	echo -n >makefile.dep
#	$(MKDIR) $(COBJS_NODEP_DIRS)
#	touch $(patsubst %.o,%.h, $(COBJS_NODEP)) $(COBJS_NODEP_H)
#	makedepend -f makefile.dep -D__PPC__ -D__MORPHOS__ -- $(DEPOPTS) -- $(DEPINCLUDES) -I/gg/lib/gcc-lib/$(shell $(CC) -dumpmachine)/$(shell $(CC) --version)/include $(patsubst %.o,%.c, $(COBJS))
#	$(DELETE) $(patsubst %.o,%.h, $(COBJS_NODEP)) $(COBJS_NODEP_H)
#	touch .depend.check


.PHONY: clean
clean:
	$(ECHO) "==> [Ambient]"
	$(ECHO) -n "cleaning.."
	$(OUT)$(DELETEALL) $(BUILDDIR) $(APPNAME)
	$(ECHO) ""
	$(ECHO) "<== [Ambient]"


.PHONY: mrproper
mrproper: clean
	$(OUT)$(DELETE) rev rev.h $(DEPFILE) .depend.check parserexxdoc printhash docs/arexx.txt $(patsubst %.o,%.h, $(COBJS_NODEP)) $(COBJS_NODEP_H)


.PHONY: distclean
distclean: mrproper
	$(OUT)$(DELETE) $(CATOBJ)
	$(OUT)$(MAKE) $(NODIR) $(SILENT) -C c mrproper
	$(OUT)$(MAKE) $(NODIR) $(SILENT) -C iconlib mrproper
	$(OUT)$(MAKE) $(NODIR) $(SILENT) -C wblib mrproper
	$(OUT)$(MAKE) $(NODIR) $(SILENT) -C libs mrproper
	$(OUT)$(MAKE) $(NODIR) $(SILENT) -C modules mrproper


.PHONY: dump
dump:
	$(OBJDUMP) --section-headers --all-headers --reloc --disassemble-all --syms $(BUILDDIR)/$(CPU_DEFAULT)/$(APPNAME).db >$(BUILDDIR)/$(CPU_DEFAULT)/$(APPNAME).dump


.PHONY: dumpfinal
dumpfinal:
	$(OBJDUMP) --section-headers --all-headers --reloc --disassemble-all --syms $(BUILDDIR)/750-final/$(APPNAME).db >$(BUILDDIR)/750-final/$(APPNAME).dump


# 'export CPU-TYPES' (see above) seems not to work, so adding the variable
# manually here seems to be the only way to get it through all the zapek
# magic. If it's not done the Makefiles of 'pnglib', 'zlib' and 'about.mod'
# end up with an empty 'CPU-TYPES' variable and make the build by using
# '$(CPU_DEFAULT)' for it. This is required for e.g. "make archive-final".
#
# If someone knows a better way to get the variables through it can get
# removed again. (tokai)
#
.PHONY: wblib
wblib:
	$(OUT)$(MAKE) $(NODIR) $(SILENT) CPU-TYPES=$(CPU-TYPES) -C wblib

.PHONY: wblib_install
wblib_install:
	$(OUT)$(MAKE) $(NODIR) $(SILENT) CPU-TYPES=$(CPU-TYPES) -C wblib install

.PHONY: iconlib
iconlib:
	$(OUT)$(MAKE) $(NODIR) $(SILENT) CPU-TYPES=$(CPU-TYPES) -C iconlib

.PHONY: iconlib_install
iconlib_install:
	$(OUT)$(MAKE) $(NODIR) $(SILENT) CPU-TYPES=$(CPU-TYPES) -C iconlib install

.PHONY: libs
libs:
	$(OUT)$(MAKE) $(NODIR) $(SILENT) CPU-TYPES=$(CPU-TYPES) -C libs

.PHONY: libs_install
libs_install:
	$(OUT)$(MAKE) $(NODIR) $(SILENT) CPU-TYPES=$(CPU-TYPES) -C libs install

.PHONY: modules
modules:
	$(OUT)$(MAKE) $(NODIR) $(SILENT) CPU-TYPES=$(CPU-TYPES) -C modules

.PHONY: modules_install
modules_install:
	$(OUT)$(MAKE) $(NODIR) $(SILENT) CPU-TYPES=$(CPU-TYPES) -C modules install

.PHONY: c
c:
	$(OUT)$(MAKE) $(NODIR) $(SILENT) CPU-TYPES=$(CPU-TYPES) -C c

.PHONY: c_install
c_install:
	$(OUT)$(MAKE) $(NODIR) $(SILENT) CPU-TYPES=$(CPU-TYPES) -C c install


ifeq ($(RELEASE), SHOW_RELEASE)
.PHONY: timeout.o
timeout.o:
	$(OUT)$(HOSTCC) $(HOSTCFLAGS) $(SOURCE)timeout_create.c -o timeout_create
	$(OUT)timeout_create 33 timeout_value.h
	$(ECHO)	"CC timeout.c"
	$(OUT)$(CC) $(CFLAGS) -DBASE_NAME=\"timeout.c\" $(SOURCE)timeout.c $(GCCMSG)
endif


.PHONY: updaterev
updaterev: rev
	./rev SMARTTOUCH


.PHONY: fullbuild
fullbuild: .depend.check updaterev build iconlib wblib libs c catalogs docs modules panel


.PHONY: releasedir
releasedir: fullbuild
	@echo "--> [releasedir]"
	$(ECHO) "MKDIR $(RELEASEDIR)"
	$(OUT)$(MKDIR) $(ARCHIVEDIR)
ifeq ($(RELEASE), FINAL_RELEASE)
	$(OUT)-$(DELETE) $(ARCHIVEDIR)$(APPNAME)-`cat .revinfo`.tar.gz
else
ifeq ($(NIGHTLY),1)
	$(OUT)-$(DELETE) $(ARCHIVEDIR)$(APPNAME)-`cat .revinfo`_nightly-`date "+%y%m%d"`.tgz
else
	$(OUT)-$(DELETE) $(ARCHIVEDIR)$(APPNAME)-`cat .revinfo`_beta-`date "+%y%m%d"`.tgz
endif
endif
# Ambient release
##################
	$(OUT)-$(DELETEALL) $(RELEASEDIR)
	$(OUT)$(MKDIR) $(RELEASEDIR)
# App
##################
	$(ECHO) "COPY $(APPNAME) -> $(RELEASEDIR)"
ifeq ($(RELEASE), FINAL_RELEASE)
	$(OUT)$(COPY) $(BUILDDIR)/750-final/$(APPNAME) $(RELEASEDIR) $(QUIET)
else
	$(OUT)$(COPY) $(APPNAME) $(RELEASEDIR) $(QUIET)
endif
	$(OUT)chmod +x $(RELEASEDIR)$(APPNAME)
# System libraries
##################
	$(ECHO) "COPY syslibs -> $(RELEASEDIR)syslibs"
	$(OUT)$(MKDIR) $(RELEASEDIR)syslibs
ifeq ($(RELEASE), FINAL_RELEASE)
	$(OUT)$(COPY) wblib/$(BUILDDIR)/750-final/workbench.library $(RELEASEDIR)syslibs
	$(OUT)$(COPY) iconlib/$(BUILDDIR)/750-final/icon.library    $(RELEASEDIR)syslibs
else
	$(OUT)$(COPY) wblib/workbench.library $(RELEASEDIR)syslibs
	$(OUT)$(COPY) iconlib/icon.library    $(RELEASEDIR)syslibs
endif
# Libs
##################
ifeq ($(LEGACY),1)
	$(ECHO) "COPY libs -> $(RELEASEDIR)libs"
	$(OUT)$(MKDIR) $(RELEASEDIR)libs
ifeq ($(RELEASE), FINAL_RELEASE)
	$(OUT)$(COPY) libs/pnglib/$(BUILDDIR)/750-final/png.alib $(RELEASEDIR)libs
	$(OUT)$(COPY) libs/zlib/$(BUILDDIR)/750-final/z.alib     $(RELEASEDIR)libs
else
	$(OUT)$(COPY) libs/pnglib/png.alib $(RELEASEDIR)libs
	$(OUT)$(COPY) libs/zlib/z.alib     $(RELEASEDIR)libs
endif
endif
# Modules
##################
	$(ECHO) "COPY modules -> $(RELEASEDIR)modules"
	$(OUT)$(MKDIR) $(RELEASEDIR)modules
ifeq ($(RELEASE), FINAL_RELEASE)
	$(OUT)$(COPY) modules/about/$(BUILDDIR)/750-final/about.amod $(RELEASEDIR)modules
else
	$(OUT)$(COPY) modules/about/about.amod $(RELEASEDIR)modules
endif
# C
##################
	$(ECHO) "COPY LoadWB -> $(RELEASEDIR)c"
	$(OUT)$(MKDIR) $(RELEASEDIR)c
	$(OUT)$(COPY) c/loadwb/LoadWB $(RELEASEDIR)c
	$(OUT)chmod +x $(RELEASEDIR)c/LoadWB
	$(ECHO) "COPY Open -> $(RELEASEDIR)c"
	$(OUT)$(COPY) c/open/Open $(RELEASEDIR)c
	$(OUT)chmod +x $(RELEASEDIR)c/Open
# Installer
##################
	$(ECHO) "COPY Install -> $(RELEASEDIR)"
	$(OUT)$(COPY) Install      $(RELEASEDIR)
	$(OUT)$(COPY) Install.info $(RELEASEDIR)
# Documentation
##################
	$(ECHO) "COPY docs -> $(RELEASEDIR)docs"
	$(OUT)$(MKDIR) $(RELEASEDIR)docs
	$(OUT)$(COPY) docs/README     $(RELEASEDIR)
	$(OUT)$(COPY) docs/COPYING    $(RELEASEDIR)docs
	$(OUT)$(COPY) docs/arexx.txt  $(RELEASEDIR)docs/arexx.txt
	$(OUT)$(COPY) ambient.notes   $(RELEASEDIR)docs/changelog.txt
# Default prefs
##################
	$(ECHO) "COPY prefs -> $(RELEASEDIR)prefs"
	$(OUT)$(MKDIR) $(RELEASEDIR)prefs
	$(OUT)$(COPY) distribution/prefs/Advanced.conf,default ambient_release/prefs/Advanced.conf,default
	$(OUT)echo "This directory contains default config files, copy them to SYS:Prefs/Ambient if required." >ambient_release/prefs/ReadMe.txt
# Catalogs
##################
	$(ECHO) "COPY catalogs -> $(RELEASEDIR)catalogs"
	$(OUT)$(MKDIR) $(RELEASEDIR)catalogs
	$(OUT)$(MKDIR) $(RELEASEDIR)catalogs/czech
	$(OUT)$(MKDIR) $(RELEASEDIR)catalogs/svenska
	$(OUT)$(MKDIR) $(RELEASEDIR)catalogs/magyar
	$(OUT)$(MKDIR) $(RELEASEDIR)catalogs/suomi
	$(OUT)$(MKDIR) $(RELEASEDIR)catalogs/polski
	$(OUT)$(MKDIR) $(RELEASEDIR)catalogs/franais
	$(OUT)$(MKDIR) $(RELEASEDIR)catalogs/deutsch
	$(OUT)$(MKDIR) $(RELEASEDIR)catalogs/italiano
	$(OUT)$(MKDIR) $(RELEASEDIR)catalogs/espaol
	$(OUT)$(MKDIR) $(RELEASEDIR)catalogs/dansk
	$(OUT)$(MKDIR) $(RELEASEDIR)catalogs/russian
	$(OUT)$(COPY) locale/ambient.czech.catalog    $(RELEASEDIR)catalogs/czech/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.svenska.catalog  $(RELEASEDIR)catalogs/svenska/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.magyar.catalog   $(RELEASEDIR)catalogs/magyar/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.suomi.catalog    $(RELEASEDIR)catalogs/suomi/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.polski.catalog   $(RELEASEDIR)catalogs/polski/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.francais.catalog $(RELEASEDIR)catalogs/franais/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.deutsch.catalog  $(RELEASEDIR)catalogs/deutsch/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.italiano.catalog $(RELEASEDIR)catalogs/italiano/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.espaol.catalog  $(RELEASEDIR)catalogs/espaol/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.dansk.catalog    $(RELEASEDIR)catalogs/dansk/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.russian.catalog    $(RELEASEDIR)catalogs/russian/Ambient.catalog
# Images #########
	$(ECHO) "COPY images -> $(RELEASEDIR)images"	
	$(OUT)$(MKDIR) $(RELEASEDIR)images
	$(OUT)$(MKDIR) $(RELEASEDIR)images/menu
	$(OUT)$(MKDIR) $(RELEASEDIR)images/toolbar
#	 $(OUT)$(COPY) images/*.png $(RELEASEDIR)images
	$(OUT)$(COPY) images/*.mbr $(RELEASEDIR)images/
	$(OUT)$(COPY) images/menu/*.mbr $(RELEASEDIR)images/menu
	$(OUT)$(COPY) images/toolbar/*.png $(RELEASEDIR)images/toolbar
	$(OUT)$(COPY) images/toolbar/*.mbr $(RELEASEDIR)images/toolbar
# Filetypes ######
	$(ECHO) "COPY recognition.db -> $(RELEASEDIR)"
	$(OUT)$(COPY) distribution/filetypes/recognition.db $(RELEASEDIR)recognition.db
# Scripts ########
	$(ECHO) "COPY scripts -> $(RELEASEDIR)scripts"
	$(OUT)$(MKDIR) $(RELEASEDIR)scripts
	$(OUT)$(COPY) distribution/scripts/openshellindir $(RELEASEDIR)scripts
	$(OUT)$(COPY) distribution/scripts/LhAExtractTo $(RELEASEDIR)scripts
# Rexx scripts ###
	$(ECHO) "COPY arexx scripts -> $(RELEASEDIR)arexx"
	$(OUT)$(MKDIR) $(RELEASEDIR)arexx
	$(OUT)$(COPY) distribution/arexx/*.rexx $(RELEASEDIR)arexx
###
	@echo "<-- [releasedir]"


#
# Make an archive
#
.PHONY: archive
archive: releasedir
	@echo "--> [archive]"
ifeq ($(RELEASE), FINAL_RELEASE)
	@echo "TAR/GZ $(ARCHIVEDIR)ambient-`cat .revinfo`.tgz"
	$(OUT)tar -czvf $(ARCHIVEDIR)ambient-`cat .revinfo`.tgz ambient_release $(QUIET)
else
ifeq ($(NIGHTLY),1)
	@echo "TAR $(ARCHIVEDIR)ambient-`cat .revinfo`_nightly.tgz"
	$(OUT)tar -czvf $(ARCHIVEDIR)ambient-`cat .revinfo`_nightly-`date "+%y%m%d"`.tgz ambient_release $(QUIET)
else
	@echo "TAR $(ARCHIVEDIR)ambient-`cat .revinfo`_beta.tgz"
	$(OUT)tar -czvf $(ARCHIVEDIR)ambient-`cat .revinfo`_beta-`date "+%y%m%d"`.tgz ambient_release $(QUIET)
endif
	@echo "GZ $(ARCHIVEDIR)ambient-`cat .revinfo`_debug.gz"
	$(OUT)$(COPY) $(BUILDDIR)/$(CPU_DEFAULT)/$(APPNAME).db $(ARCHIVEDIR)ambient-`cat .revinfo`_debug-`date "+%y%m%d"`
	$(OUT)-$(DELETE) $(ARCHIVEDIR)ambient-`cat .revinfo`_debug-`date "+%y%m%d"`.gz
	$(OUT)gzip $(ARCHIVEDIR)ambient-`cat .revinfo`_debug-`date "+%y%m%d"`
endif
	@echo "Archive for $(APPNAME) version `cat .revinfo` is ready."
	@echo "<-- [archive]"

#
# Make a release archive without debug
#
.PHONY: archive-final
archive-final:
	$(OUT)$(MAKE) $(NODIR) $(SILENT) -f $(MAKEFILENAME) archive RELEASE=FINAL_RELEASE


#
# Make a nightly build archive
#
.PHONY: archive-nightly
archive-nightly:
	$(OUT)$(MAKE) $(NODIR) $(SILENT) -f $(MAKEFILENAME) archive RELEASE=BETA_RELEASE NIGHTLY=1


.PHONY: install
install: all c_install wblib_install iconlib_install libs_install docs_install catalogs_install panel
	$(ECHO) "COPY $(APPNAME) -> $(INSTALLDIR)MorphOS/Ambient"
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient
	$(OUT)$(MKDIR) $(INSTALLDIR)Classes
	$(OUT)$(MKDIR) $(INSTALLDIR)Classes/Panels
ifeq ($(RELEASE), FINAL_RELEASE)
	$(OUT)$(COPY) $(BUILDDIR)/750-final/$(APPNAME) $(INSTALLDIR)MorphOS/Ambient/
else
	$(OUT)$(COPY) $(APPNAME) $(INSTALLDIR)MorphOS/Ambient/
endif
	$(ECHO) "COPY recognition.db -> $(INSTALLDIR)MorphOS/Ambient"
	$(OUT)$(COPY) distribution/filetypes/recognition.db $(INSTALLDIR)MorphOS/Ambient/recognition.db
	$(ECHO) "MKDIR $(INSTALLDIR)prefs/Ambient"
	$(OUT)$(MKDIR) $(INSTALLDIR)prefs/Ambient
	$(ECHO) "MKDIR $(INSTALLDIR)prefs/Ambient/filetypes"
	$(OUT)$(MKDIR) $(INSTALLDIR)prefs/Ambient/filetypes
	$(OUT)$(MKDIR) $(INSTALLDIR)prefs/Ambient/filetypes/application
	$(OUT)$(MKDIR) $(INSTALLDIR)prefs/Ambient/filetypes/audio
	$(OUT)$(MKDIR) $(INSTALLDIR)prefs/Ambient/filetypes/image
	$(OUT)$(MKDIR) $(INSTALLDIR)prefs/Ambient/filetypes/model
	$(OUT)$(MKDIR) $(INSTALLDIR)prefs/Ambient/filetypes/text
	$(OUT)$(MKDIR) $(INSTALLDIR)prefs/Ambient/filetypes/video
	$(OUT)$(MKDIR) $(INSTALLDIR)prefs/Ambient/filetypes/message
	$(OUT)$(MKDIR) $(INSTALLDIR)prefs/Ambient/filetypes/multipart
	$(ECHO) "COPY images -> $(INSTALLDIR)MorphOS/Ambient/images (NYI)"
#
# TODO: recursive copy, but w/o overwriting already existing files in dest
#
#	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/images
#	$(OUT)find images \( -name "*.png" -o -name "*.mbr" \) -type f -exec $(COPY) -b -u {} $(INSTALLDIR)MorphOS/Ambient/images \;
	$(ECHO) "COPY scripts -> $(INSTALLDIR)MorphOS/Ambient/scripts"
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/scripts
	$(OUT)$(COPY) distribution/scripts/openshellindir $(INSTALLDIR)MorphOS/Ambient/scripts
	$(OUT)$(COPY) distribution/scripts/LhAExtractTo $(INSTALLDIR)MorphOS/Ambient/scripts
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/arexx
	$(OUT)$(COPY) distribution/arexx/*.rexx $(INSTALLDIR)MorphOS/Ambient/arexx

# TODO: move to locale/Makefile instead.
#
.PHONY: catalogs_install
catalogs_install: catalogs
	@echo "COPY catalogs -> $(INSTALLDIR)MorphOS/Ambient/catalogs"
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/catalogs
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/catalogs/czech
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/catalogs/svenska
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/catalogs/magyar
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/catalogs/suomi
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/catalogs/polski
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/catalogs/franais
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/catalogs/deutsch
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/catalogs/italiano
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/catalogs/espaol
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/catalogs/dansk
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/catalogs/russian
	$(OUT)$(COPY) locale/ambient.czech.catalog    $(INSTALLDIR)MorphOS/Ambient/catalogs/czech/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.svenska.catalog  $(INSTALLDIR)MorphOS/Ambient/catalogs/svenska/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.magyar.catalog   $(INSTALLDIR)MorphOS/Ambient/catalogs/magyar/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.suomi.catalog    $(INSTALLDIR)MorphOS/Ambient/catalogs/suomi/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.polski.catalog   $(INSTALLDIR)MorphOS/Ambient/catalogs/polski/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.francais.catalog $(INSTALLDIR)MorphOS/Ambient/catalogs/franais/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.deutsch.catalog  $(INSTALLDIR)MorphOS/Ambient/catalogs/deutsch/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.italiano.catalog $(INSTALLDIR)MorphOS/Ambient/catalogs/italiano/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.espaol.catalog  $(INSTALLDIR)MorphOS/Ambient/catalogs/espaol/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.dansk.catalog    $(INSTALLDIR)MorphOS/Ambient/catalogs/dansk/Ambient.catalog
	$(OUT)$(COPY) locale/ambient.russian.catalog  $(INSTALLDIR)MorphOS/Ambient/catalogs/russian/Ambient.catalog


#
# Make documentations
#
.PHONY: docs
docs: rexxdocs


.PHONY: rexxdocs
rexxdocs: parserexxdoc
	@echo "--> [arexx.txt]"
	@echo "                         Ambient ARexx commands" >docs/arexx.txt
	@echo "                         ----------------------" >>docs/arexx.txt
	@echo ""                                     >>docs/arexx.txt
	@echo "The ARexx port has the following RC:" >>docs/arexx.txt
	@echo " -1: bad definition"                  >>docs/arexx.txt
	@echo " -2: out of memory"                   >>docs/arexx.txt
	@echo " -3: unknown command"                 >>docs/arexx.txt
	@echo " -4: bad syntax"                      >>docs/arexx.txt
	@echo " -5: not yet implemented"             >>docs/arexx.txt
	@echo ""                                     >>docs/arexx.txt
	@echo "RC codes ranges are the following:"   >>docs/arexx.txt
	@echo "- success: 0"                         >>docs/arexx.txt
	@echo "- warnings: 5 to 9"                   >>docs/arexx.txt
	@echo "- errors: 10 to 19"                   >>docs/arexx.txt
	@echo "- fatals: 20 or more"                 >>docs/arexx.txt
	@echo ""                                     >>docs/arexx.txt
	$(OUT)./parserexxdoc appclass.c docs/arexx.txt
	@echo "<-- [arexx.txt]"

parserexxdoc: parserexxdoc.c
	@echo "--> [parserexxdoc]"
	$(OUT)$(HOSTCC) $(HOSTCFLAGS) -o parserexxdoc parserexxdoc.c
	@echo "<-- [parserexxdoc]"

#
# install documentation and license
#

.PHONY: docs_install
docs_install: docs
	$(OUT)$(MKDIR) $(INSTALLDIR)MorphOS/Ambient/docs
	$(OUT)$(COPY) docs/arexx.txt $(INSTALLDIR)MorphOS/Ambient/docs/arexx.txt
	$(OUT)$(COPY) docs/COPYING   $(INSTALLDIR)MorphOS/Ambient/docs/COPYING
	$(OUT)$(COPY) ambient.notes  $(INSTALLDIR)MorphOS/Ambient/docs/changelog.txt


#
# Hash generation
#
printhash: hash.c
	$(ECHO) "Compiling printhash.."
	$(OUT)$(HOSTCC) $(HOSTCFLAGS) -DPRINT_HASH -Iinclude -o printhash hash.c


#
# Copyright year change
#
.PHONY: changestring
changestring:
	find . -iname \*.c -type f -exec chstr.sh {} \;
	find . -iname \*.h -type f -exec chstr.sh {} \;


#
# Tests
#
.PHONY: test
test: checkambient
	$(OUT)$(MAKE) $(NODIR) $(SILENT) -C testsuite test


.PHONY: checkambient
checkambient: checkambient.c
	$(OUT)$(CC) $(HOSTCFLAGS) $< -o $@
	@checkambient


#
# Stats
#
.PHONY: stats
stats:
	@echo "Ambient statistic"
	@echo "-----------------"
	@echo -n "Number of classes:    "
	@grep ^DEFCLASS classes.h | wc -l
	@echo -n "Number of methods:    "
	@grep "MM_" classes.h | wc -l
	@echo -n "Number of attributes: "
	@grep "MA_" classes.h | wc -l
	@echo -n "Number of filetypes:  "
	@grep "^AMTD" distribution/filetypes/recognition.db | wc -l
	@echo -n "Number of lines:      "
#	@cat `find . -name "*.[ch]" -o -name "*.cd"` | wc -l
	@cat *.c *.h locale/*.cd | wc -l
	@echo -n "Number of issues:     "
	@grep "XXX" *.c *.h locale/*.cd | wc -l
	@echo "Number of bugs:             0"


#
# Put Ambient for the ISO image
#
.PHONY: install-iso
install-iso:
	$(MAKE) -f $(MAKEFILENAME) releasedir RELEASE=FINAL_RELEASE
	$(MKDIR) $(ISOPATH)MorphOS/Ambient
	$(MKDIR) $(ISOPATH)Classes
	$(MKDIR) $(ISOPATH)Classes/Panels
	$(COPY) -R ambient_release/* $(ISOPATH)MorphOS/Ambient
	$(COPY) -R panel/release/* $(ISOPATH)MorphOS/Ambient
	$(COPY) -R panelprefs/release/* $(ISOPATH)MorphOS/Ambient
# czech workaround
	$(COPY) -R $(ISOPATH)MorphOS/Ambient/catalogs/czech $(ISOPATH)MorphOS/Ambient/catalogs/etina
	$(DELETEALL) $(ISOPATH)MorphOS/Ambient/catalogs/czech
# moving prefs files
	$(MKDIR) $(ISOPATH)Prefs/Ambient
	$(COPY) $(ISOPATH)MorphOS/Ambient/prefs/Advanced.conf,default $(ISOPATH)Prefs/Ambient/Advanced.conf
#	$(DELETEALL) $(ISOPATH)MorphOS/Ambient/prefs
# moving system libraries
	$(MKDIR) $(ISOPATH)MorphOS/Libs
	$(COPY) $(ISOPATH)MorphOS/Ambient/syslibs/icon.library $(ISOPATH)MorphOS/Libs/icon.library
	$(COPY) $(ISOPATH)MorphOS/Ambient/syslibs/workbench.library $(ISOPATH)MorphOS/Libs/workbench.library
	$(DELETEALL) $(ISOPATH)MorphOS/Ambient/syslibs
# moving LoadWB and Open
	$(MKDIR) $(ISOPATH)MorphOS/C
ifeq ($(LEGACY),1)
	$(COPY) $(ISOPATH)MorphOS/Ambient/c/LoadWB $(ISOPATH)MorphOS/C
endif
	$(COPY) $(ISOPATH)MorphOS/Ambient/c/Open $(ISOPATH)MorphOS/C
	$(DELETEALL) $(ISOPATH)MorphOS/Ambient/c
# misc cleanup
	$(DELETE) $(ISOPATH)MorphOS/Ambient/Ambient.readme $(ISOPATH)MorphOS/Ambient/Install $(ISOPATH)MorphOS/Ambient/Install.info
# config generation
	$(CONFIGTOOL) main main.config $(ISOPATH)Prefs/Ambient/Ambient.prefs
	$(MKDIR) $(ISOPATH)Prefs/Ambient/Panels
#	 $(CONFIGTOOL) panel panel.config $(ISOPATH)Prefs/Ambient/Panels/Panel_0001.prefs
# deficons
	# boring that this one is an env var.
	$(MKDIR) $(ISOPATH)Prefs/Env-Archive
	echo -n "SYS:Prefs/Presets/Deficons/" > $(ISOPATH)Prefs/Env-Archive/DefIcon_Path
# copy deficons
	$(MKDIR) $(ISOPATH)Prefs/Presets/Deficons
	$(MKDIR) $(ISOPATH)Prefs/Presets/Deficons/application
	$(MKDIR) $(ISOPATH)Prefs/Presets/Deficons/audio
	$(MKDIR) $(ISOPATH)Prefs/Presets/Deficons/image
	$(MKDIR) $(ISOPATH)Prefs/Presets/Deficons/model
	$(MKDIR) $(ISOPATH)Prefs/Presets/Deficons/text
	$(MKDIR) $(ISOPATH)Prefs/Presets/Deficons/video
	$(COPY) distribution/icons/*.info $(ISOPATH)Prefs/Presets/Deficons
	$(COPY) distribution/icons/application/*.info $(ISOPATH)Prefs/Presets/Deficons/application
	$(COPY) distribution/icons/audio/*.info $(ISOPATH)Prefs/Presets/Deficons/audio
	$(COPY) distribution/icons/image/*.info $(ISOPATH)Prefs/Presets/Deficons/image
#	 $(COPY) distribution/icons/model/*.info $(ISOPATH)Prefs/Presets/Deficons/model
	$(COPY) distribution/icons/text/*.info $(ISOPATH)Prefs/Presets/Deficons/text
	$(COPY) distribution/icons/video/*.info $(ISOPATH)Prefs/Presets/Deficons/video

.PHONY: update
update: rev
	$(OUT)./rev INCREV
	touch copyright.h


-include $(DEPFILE)
include makefile.rules

