ROOTPATH=../../../
include $(ROOTPATH)Makefile.global
include $(ROOTPATH)SDK.global

TZDB = tzdb-2026b

LDFLAGS = -Lmorphos -llocale_morphos

LIBS =

SHELL=/bin/sh

CFLAGS = -noixemul -W -Wall -Wno-unused -O2 -fomit-frame-pointer -Dtime_tz="long long" -DWRONG=QUAD_MIN -D__AMIGADATE__=\"$(shell date "+%d.%m.%y")\" -D__COPYRIGHTYEAR__=\"$(shell date "+%Y")\" -DUSE_INLINE_STDARG -DSYSTEM_PRIVATE -I./ -I/gg/morphos/aboxinclude/os-include -I/gg/morphos/aboxinclude/include -I/gg/morphos/include -I$(TZDB)

SHELL = /bin/sh

.SUFFIXES: .C .c

SRCS = \
	closecatalog.c closelocale.c convtolower.c convtoupper.c \
	formatdate.c formatstring.c getcatalogstr.c getlocalestr.c \
	isxxxx.c opencataloga.c openlocale.c parsedate.c prefsupdate.c \
	strconvert.c strncmp.c locrawdofmt.c locstrnicmp.c locstricmp.c \
	loctolower.c loctoupper.c locdatetostr.c locstrtodate.c rexxhost.c \
	locdosgetlocalizedstring.c morphos/toupperu.c morphos/toloweru.c morphos/utfconv.c \
	getcatalogstru.c morphos/isxxxxu.c morphos/isalphau.c formatstringu.c getlocalestru.c \
	formatdateu.c morphos/ucs4_strncmp.c morphos/minitable.c morphos/ucs4_decompose.c \
	morphos/ucs4_isnsm.c morphos/ucs4_normalize.c morphos/ucs4_getcombiningclass.c \
	timezone.c setsystimezone.c getsystimezone.c getsyslocaltime.c checksystimezone.c

# DO NOT PUT MORPHOS (C) FILES HERE (otherwise the SDK will APL them!)
APLOBJS =  catalog_funcs.o \
	closecatalog.o \
	closelocale.o \
	convtolower.o \
	convtoupper.o \
	defaultlocale.o \
	formatstring.o \
	getcatalogstr.o \
	getlocalestr.o \
	isxxxx.o \
	locdosgetlocalizedstring.o \
	locstricmp.o \
	locstrnicmp.o \
	loctolower.o \
	loctoupper.o \
	openlocale.o \
	parsedate.o \
	prefsupdate.o \
	strconvert.o \
	strncmp.o \
	formatdate.o \
	locrawdofmt.o \
	locdatetostr.o \
	locstrtodate.o \
	opencataloga.o \
	initlocale.o \
	english.o \
	patches.o \
	rexxhost.o \
	rawdofmtsupport.o

# DO NOT PUT APL FILES HERE
MORPHOSOBJS = \
	getcatalogstru.o \
	formatstringu.o \
	getlocalestru.o \
	formatdateu.o \
	timezone.o \
	setsystimezone.o \
	getsystimezone.o \
	getsyslocaltime.o \
	checksystimezone.o

NEWSDKFILES = \
	morphos/isxxxxu.c \
	morphos/toloweru.c \
	morphos/toupperu.c \
	morphos/ucs4_normalize.c \
	morphos/ucs4_strncmp.c \
	morphos/vsnprintf.c \
	morphos/utfconv.c

LOCOBJS = $(APLOBJS) $(MORPHOSOBJS)

COUNTRIES = \
	australia belgie belgique canada canada_franais danmark deutschland \
	espaa france great_britain italia magyar nederland norge sterreich polska \
	portugal schweiz suisse suomi sverige svizzera united_kingdom \
	united_states
      

LIBOBJS = functable.o \
	 locale_init.o

SUBDIRS = countries languages morphos catalogs

all: subdirs locale.library

subdirs:
	@for i in $(SUBDIRS); do if ! $(MAKE) -C $$i $(MAKECMDGOALS); then exit 1; fi; done

locale_init.o:	libdefs.h

fd:
	awk -f Source:AROS.old/bin/morphos-ppc/AROS/scripts/genfd.awk $(SRCS) >fd/commodities.fd

functable:
	awk -f Source:AROS.old/bin/morphos-ppc/AROS/scripts/genfunctable.awk $(SRCS) >functable.c

morphos/liblocale_morphos.a:
	if ! $(MAKE) -C morphos all; then exit 1; fi;

.tzdb_unpacked: $(TZDB).tar.xz
	tar Jxf $<
	@touch $@

.tzdb_patched: .tzdb_unpacked
	@echo patch $<
	(cd $(TZDB); patch -p1 < ../tzdb.patch)
	@touch $@

.tzdb_built: .tzdb_patched
	@echo build $<
	make -C $(TZDB) clean
	make -C $(TZDB) CC="ppc-morphos-gcc-9 -noixemul -O2 -ffast-math -DALL_STATE -DNETBSD_INSPIRED -DSTD_INSPIRED -DTM_ZONE=tm_zone -DTM_GMTOFF=tm_gmtoff -DHAVE_TZNAME=0 -DTZDEFAULT=NULL -DTZDIR=\\\"MOSSYS:Data/zoneinfo\\\" -Dtime_tz=\"long long\" -DWRONG=QUAD_MIN -DSUPPORT_POSIX2008 -DHAVE_GETRESUID=0" libtz.a
	@touch $@

.tzdb_database: .tzdb_patched
	@echo build $<
	mkdir $(TZDB)/build
	make -C $(TZDB) clean
	make -C $(TZDB) install CC="gcc -O2" DESTDIR="$(shell pwd)/$(TZDB)/build" CFLAGS="-DHAVE_LINK=0 -DHAVE_SYMLINK=0" ZFLAGS="-b fat"
	@touch $@

locale.library: .tzdb_built $(LOCOBJS) $(LIBOBJS) morphos/liblocale_morphos.a
	$(LINKECHO)
	$(LINKPREFIX)$(LD) -L/gg/morphos/lib -fl libnix $(LOCOBJS) $(LIBOBJS) $(LDFLAGS) -lmemblock -L$(TZDB) -ltz -lc -lmath -o $@.db
	$(LINKPREFIX)$(STRIP) $(STRIPFLAGS) $@.db -o $@

DUMP:
	ppc-morphos-objdump --section-headers --all-headers --reloc --syms --disassemble-all locale.library.db >locale.library.dump

docs:
	@$(AUTODOC) -o locale.doc $(SRCS)

clean: | subdirs
	rm -rf locale.library* *.o *.db *.dump .tzdb_* $(TZDB)

install: subdirs locale.library .tzdb_database
	mkdir -p /sys/morphos/Libs /sys/morphos/Locale/Catalogs /sys/morphos/Data
	cp locale.library /sys/morphos/Libs/
	cp -a $(TZDB)/build/usr/share/zoneinfo /sys/morphos/Data

install-iso: subdirs locale.library .tzdb_database
	mkdir -p $(ISOPATH)MorphOS/Libs $(ISOPATH)MorphOS/Locale/Catalogs $(ISOPATH)MorphOS/Data
	cp locale.library $(ISOPATH)MorphOS/Libs/
	cp -a $(TZDB)/build/usr/share/zoneinfo $(ISOPATH)MorphOS/Data

source:
	(cd .. && tar --exclude "*.ct" --exclude "morphos" --transform "s,^locale,&.library," -cf $(SOURCEPATH)locale.library.tar locale)

sdk:
	@echo "Making locale.$(AUTODOCPOSTFIX)..."
	@$(AUTODOCINTERNAL) $(AUTODOCFLAGS) --aros=locale -o /tmp/locale.aros.$(AUTODOCPOSTFIX) --aros=locale.library $(patsubst %.o,%.c,$(APLOBJS)) $(patsubst %.o,%.c,$(MORPHOSOBJS)) $(NEWSDKFILES)
	cat $(ROOTPATH)morphoswb/development/sdk/apldocdisclaimer.txt > locale.aros.$(AUTODOCPOSTFIX)
	cat /tmp/locale.aros.$(AUTODOCPOSTFIX) >> locale.aros.$(AUTODOCPOSTFIX)
	rm /tmp/locale.aros.$(AUTODOCPOSTFIX)
	#@$(AUTODOCINTERNAL) $(AUTODOCFLAGS) --aros=locale -o locale.$(AUTODOCPOSTFIX) --aros=locale.library $(patsubst %.o,%.c,$(MORPHOSOBJS)) $(NEWSDKFILES)
	#@$(AROSDOC) locale.$(AUTODOCPOSTFIX) locale.$(AUTODOCPOSTFIX)
	@$(AROSDOC) locale.aros.$(AUTODOCPOSTFIX) locale.aros.$(AUTODOCPOSTFIX)
	mkdir -p $(SDKPATH)$(SDKROOT)$(SDKDOCS)
	cp locale.aros.$(AUTODOCPOSTFIX) $(SDKPATH)$(SDKROOT)$(SDKDOCS)/locale.$(AUTODOCPOSTFIX)
	#cp locale.$(AUTODOCPOSTFIX) $(SDKPATH)$(SDKROOT)$(SDKDOCS)

dep:
	echo >Makefile.dep
	$(CC) -MM $(CFLAGS) `ls *.c` >>Makefile.dep

-include Makefile.dep
