##############################################################################
# Copyright 2020,2021 Thomas E. Dickey                                       #
# Copyright 1998-2000,2006 Free Software Foundation, Inc.                    #
#                                                                            #
# Permission is hereby granted, free of charge, to any person obtaining a    #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation  #
# the rights to use, copy, modify, merge, publish, distribute, distribute    #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the  #
# following conditions:                                                      #
#                                                                            #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software.                        #
#                                                                            #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
# DEALINGS IN THE SOFTWARE.                                                  #
#                                                                            #
# Except as contained in this notice, the name(s) of the above copyright     #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written               #
# authorization.                                                             #
################################################################################
# $Id: Makefile.os2,v 1.13 2021/06/17 21:20:30 tom Exp $
#
# Wrapper Makefile for ncurses library under OS/2.
# Author:  Juan Jose Garcia Ripoll <worm@arrakis.es>.
# Webpage: http://www.arrakis.es/~worm/
################################################################################
#
# Notes (from I Zakharevich)
# ~~~~~~~~~~~~~~~~~~~~~~~~~~
# I could build the library with the following sequence of commands:
#
#   touch Makefile
#   make -f Makefile.os2 config
#   make -f Makefile.os2 CC=gcc HOSTCC=gcc CXX=gcc
#
# Ignoring the following errors:
#   Invalid configuration `os2'...
#   ... ac_maketemp="make": not found
#   ... syntax error: `done' unexpected
#   No rule to make target `lib/ncurses4.dll'
#
# You may need to run
#
#   rm make.defs
#   make -f Makefile.os2 make.defs
#
# if the build of misc/panel.def fails.
#
# If you do not have perl, the configuration will fail.  Use autoconf to
# generate the EMX-specific configure script (see README.emx), and run the
# configure script to generate the makefiles.  Then, run
#
#   make -f Makefile.os2 make.dlls
#
# Notes (from J J G Ripoll)
# ~~~~~~~~~~~~~~~~~~~~~~~~~
# The `make.defs' rule creates the new '.def' files and outputs a diagnostic
# about symbols that disappear from one release to the other, as well as
# checks about the new '.def' consistency.  If there were no problems, the
# maintainer is free to replace the `.ref' files with the newer ones using the
# `save.defs' rule.  So, the only tough work is ensuring that the symbols that
# disappear are not essential.
#
# I first thought about killing '_nc_*' symbols, but it seems that some of
# them --_nc_panel_hook, _nc_ada*, etc-- are needed outside ncurses.dll.
# However, the whole size of the export table will not be larger than 1k or
# so.
#
# [installation]
#
# The way things are handled in misc/Makefile is not well suited for OS/2,
# where only emx.src is needed.  Thus, I've written a few wrapper rules in
# Makefile.os2 that handle installation/deinstallation.
#
# [distribution]
#
# There's also a new rule that configures and builds a sort of binary
# distribution, much like the one I prepared for 1.9.9e.  It's `os2dist'.
#
################################################################################

all :: config

# This is for configuring

# What is a useful value for this?
CONFIG_OPTS	= --enable-termcap
WWWGET		= lynx -source
MV_F		= mv -f
DLL_LN_OPTS	= -Zcrtdll -Zdll -Zomf -Zmt

config: config.cache

config.cache: configure.cmd configure
	-$(MV_F) $@ $@.ref
	configure.cmd $(CONFIG_OPTS)

configure.cmd: configure convert_configure.pl
	perl convert_configure.pl configure > $@

convert_configure.pl:
	$(WWWGET) ftp://ftp.math.ohio-state.edu/pub/users/ilya/os2/$@ > $@

install ::
	echo ***
	echo *** Do not use this command. Use install.os2 instead.
	echo ***
	exit 2

install.os2 : install.emxdata install.libs install.progs

include ./Makefile

all :: make.dlls

#
# DLLs and that stuff
#

LIBRARIES = ncurses form menu panel

DLL_TAG = $(NCURSES_MAJOR)
LIB_TAG = _s

DLL_ROOTS = $(addsuffix $(DLL_TAG), $(LIBRARIES))
DLLS = $(addsuffix .dll, $(addprefix ./lib/, $(DLL_ROOTS)))

LIB_ROOTS = $(addsuffix $(LIB_TAG), $(LIBRARIES))
LIBS = $(addsuffix .lib, $(addprefix ./lib/, $(LIB_ROOTS)))

LIBS_AOUT = $(addsuffix .a, $(addprefix ./lib/, $(LIB_ROOTS)))

DEFS = $(addsuffix .def, $(addprefix ./misc/, $(LIBRARIES)))

DLL_SIGNATURE = NCurses-$(NCURSES_MAJOR)-$(NCURSES_MINOR)-$(NCURSES_PATCH)

./lib/%$(LIB_TAG).lib : ./misc/%.def
	emximp -o $@ $<

./lib/%$(LIB_TAG).a : ./misc/%.def
	emximp -o $@ $<

./lib/%$(DLL_TAG).dll : ./lib/%.a
	emxomf -o ./lib/$*$(DLL_TAG).lib $<
	if [ "$*" = "ncurses" ]; then \
		gcc $(LDFLAGS) $(DLL_LN_OPTS) ./lib/$*$(DLL_TAG).lib \
				./misc/$*.def -o $@; \
	else \
		gcc $(LDFLAGS) $(DLL_LN_OPTS) ./lib/$*$(DLL_TAG).lib \
				./lib/ncurses$(LIB_TAG).lib ./misc/$*.def -o $@; \
	fi
	-rm -f ./lib/$*$(DLL_TAG).lib

make.dlls : $(DEFS) $(LIBS) $(DLLS) $(LIBS_AOUT)

$(DEFS) : make.defs

LIBDIR	= $(DESTDIR)$(libdir)
$(LIBDIR) :
	mkdir -p $@

install.libs :: $(LIBS) $(DLLS) $(LIBDIR)
	@for i in $(DLL_ROOTS); do \
	echo installing ./lib/$$i.dll as $(LIBDIR)/$$i.dll; \
	$(INSTALL_DATA) ./lib/$$i.dll $(LIBDIR)/$$i.dll; done
	@for i in $(LIB_ROOTS); do \
	echo installing ./lib/$$i.lib as $(LIBDIR)/$$i.lib; \
	$(INSTALL_DATA) ./lib/$$i.lib $(LIBDIR)/$$i.lib; done

uninstall.libs ::
	-@for i in $(DLL_ROOTS); do \
	echo uninstalling $(LIBDIR)/$$i.dll; \
	rm -f $(LIBDIR)/$$i.dll; done
	-@for i in $(LIB_ROOTS); do \
	echo uninstalling $(LIBDIR)/$$i.lib; \
	rm -f $(LIBDIR)/$$i.lib; done

make.defs :
	for i in $(LIBRARIES); do \
	echo LIBRARY $${i}$(DLL_TAG) INITINSTANCE TERMINSTANCE > ./misc/$$i.def; \
	echo DESCRIPTION \"$(DLL_SIGNATURE), module $$i\" >> ./misc/$$i.def; \
	echo CODE LOADONCALL >> ./misc/$$i.def; \
	echo DATA LOADONCALL NONSHARED MULTIPLE >> ./misc/$$i.def; \
	echo EXPORTS >> ./misc/$$i.def; \
	echo Creating $$i.def; \
	(cmd /C ".\\misc\\makedef.cmd ./lib/$$i.a ./misc/$$i.ref >> ./misc/$$i.def" \
	 && cmd /C ".\\misc\\chkdef.cmd ./misc/$$i.def") \
	|| exit 1; \
	done
	touch make.defs

save.defs :
	for i in $(LIBRARIES); do \
	test -f ./misc/$$i.def && cp ./misc/$$i.def ./misc/$$i.ref; \
	done

clean \
os2clean ::
	-rm -f $(DLLS) $(LIBS)

realclean ::
	-rm -f $(addprefix ./misc/, $(addsuffix .def, $(LIBRARIES)))

#
# This is a simplified version of misc/Makefile
#

TICDIR = $(DESTDIR)$(datadir)/terminfo
TABSETDIR = $(DESTDIR)$(datadir)/tabset

$(TICDIR) :
	mkdir -p $@

install \
install.emxdata :: $(TICDIR)
	-@rm -fr $(TICDIR)/*
	echo Building terminfo database, please wait...
	set TERMINFO=$(TICDIR); ./progs/tic ./misc/emx.src
	echo Installing the terminfo cleaner and the sources...
	cp ./misc/emx.src ./misc/cleantic.cmd $(TICDIR)
	./misc/cleantic.cmd $(TICDIR)

uninstall \
uninstall.emxdata ::
	-cd $(TICDIR) && rm -rf *
	-cd $(TABSETDIR) && rm -rf *

#
# This is for preparing binary distributions
#

OS2NAME=ncurses-$(NCURSES_MAJOR).$(NCURSES_MINOR)-emx

#
# FIXME: this assumes that we can rerun the configure script, changing only
# the install-prefix.  That means we cannot provide "interesting" options
# when building.
#
os2dist :
	$(MAKE) -f Makefile.os2 os2clean
	./configure --without-debug --with-install-prefix=`pwd|sed -e 's@^.:@@'`/$(OS2NAME)
	$(MAKE) -f Makefile.os2 $(CF_MFLAGS) install.os2
	-rm -f $(OS2NAME).zip
	echo NCurses-$(NCURSES_MAJOR).$(NCURSES_MINOR)-$(NCURSES_PATCH) for emx > $(OS2NAME)/FILE_ID.DIZ
	echo Binary release. >> $(OS2NAME)/FILE_ID.DIZ
	zip -r $(OS2NAME).zip ./$(OS2NAME)

clean \
os2clean ::
	-rm -rf $(OS2NAME)
	-rm -f $(OS2NAME).zip

