1##############################################################################
2# Copyright (c) 1998-2000,2006 Free Software Foundation, Inc.                #
3#                                                                            #
4# Permission is hereby granted, free of charge, to any person obtaining a    #
5# copy of this software and associated documentation files (the "Software"), #
6# to deal in the Software without restriction, including without limitation  #
7# the rights to use, copy, modify, merge, publish, distribute, distribute    #
8# with modifications, sublicense, and/or sell copies of the Software, and to #
9# permit persons to whom the Software is furnished to do so, subject to the  #
10# following conditions:                                                      #
11#                                                                            #
12# The above copyright notice and this permission notice shall be included in #
13# all copies or substantial portions of the Software.                        #
14#                                                                            #
15# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
16# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
17# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
18# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
19# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
20# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
21# DEALINGS IN THE SOFTWARE.                                                  #
22#                                                                            #
23# Except as contained in this notice, the name(s) of the above copyright     #
24# holders shall not be used in advertising or otherwise to promote the sale, #
25# use or other dealings in this Software without prior written               #
26# authorization.                                                             #
27################################################################################
28# $Id: Makefile.os2,v 1.11 2006/04/22 21:46:17 tom Exp $
29#
30# Wrapper Makefile for ncurses library under OS/2.
31# Author:  Juan Jose Garcia Ripoll <worm@arrakis.es>.
32# Webpage: http://www.arrakis.es/~worm/
33################################################################################
34#
35# Notes (from I Zakharevich)
36# ~~~~~~~~~~~~~~~~~~~~~~~~~~
37# I could build the library with the following sequence of commands:
38#
39#   touch Makefile
40#   make -f Makefile.os2 config
41#   make -f Makefile.os2 CC=gcc HOSTCC=gcc CXX=gcc
42#
43# Ignoring the following errors:
44#   Invalid configuration `os2'...
45#   ... ac_maketemp="make": not found
46#   ... syntax error: `done' unexpected
47#   No rule to make target `lib/ncurses4.dll'
48#
49# You may need to run
50#
51#   rm make.defs
52#   make -f Makefile.os2 make.defs
53#
54# if the build of misc/panel.def fails.
55#
56# If you do not have perl, the configuration will fail.  Use autoconf to
57# generate the EMX-specific configure script (see README.emx), and run the
58# configure script to generate the makefiles.  Then, run
59#
60#   make -f Makefile.os2 make.dlls
61#
62# Notes (from J J G Ripoll)
63# ~~~~~~~~~~~~~~~~~~~~~~~~~
64# The `make.defs' rule creates the new '.def' files and outputs a diagnostic
65# about symbols that disappear from one release to the other, as well as
66# checks about the new '.def' consistency.  If there were no problems, the
67# maintainer is free to replace the `.ref' files with the newer ones using the
68# `save.defs' rule.  So, the only tough work is ensuring that the symbols that
69# disappear are not essential.
70#
71# I first thought about killing '_nc_*' symbols, but it seems that some of
72# them --_nc_panel_hook, _nc_ada*, etc-- are needed outside ncurses.dll. 
73# However, the whole size of the export table will not be larger than 1k or
74# so.
75#
76# [installation]
77#
78# The way things are handled in misc/Makefile is not well suited for OS/2,
79# where only emx.src is needed.  Thus, I've written a few wrapper rules in
80# Makefile.os2 that handle installation/deinstallation.
81#
82# [distribution]
83#
84# There's also a new rule that configures and builds a sort of binary
85# distribution, much like the one I prepared for 1.9.9e.  It's `os2dist'.
86#
87################################################################################
88
89all :: config
90
91# This is for configuring
92
93# What is a useful value for this?
94CONFIG_OPTS	= --enable-termcap
95WWWGET		= lynx -source
96MV_F		= mv -f
97DLL_LN_OPTS	= -Zcrtdll -Zdll -Zomf -Zmt
98
99config: config.cache
100
101config.cache: configure.cmd configure
102	-$(MV_F) $@ $@.ref
103	configure.cmd $(CONFIG_OPTS)
104
105configure.cmd: configure convert_configure.pl
106	perl convert_configure.pl configure > $@
107
108convert_configure.pl:
109	$(WWWGET) ftp://ftp.math.ohio-state.edu/pub/users/ilya/os2/$@ > $@
110
111install ::
112	echo ***
113	echo *** Do not use this command. Use install.os2 instead.
114	echo ***
115	exit 2
116
117install.os2 : install.emxdata install.libs install.progs
118
119include ./Makefile
120
121all :: make.dlls
122
123#
124# DLLs and that stuff
125#
126
127LIBRARIES = ncurses form menu panel
128
129DLL_TAG = $(NCURSES_MAJOR)
130LIB_TAG = _s
131
132DLL_ROOTS = $(addsuffix $(DLL_TAG), $(LIBRARIES))
133DLLS = $(addsuffix .dll, $(addprefix ./lib/, $(DLL_ROOTS)))
134
135LIB_ROOTS = $(addsuffix $(LIB_TAG), $(LIBRARIES))
136LIBS = $(addsuffix .lib, $(addprefix ./lib/, $(LIB_ROOTS)))
137
138LIBS_AOUT = $(addsuffix .a, $(addprefix ./lib/, $(LIB_ROOTS)))
139
140DEFS = $(addsuffix .def, $(addprefix ./misc/, $(LIBRARIES)))
141
142DLL_SIGNATURE = NCurses-$(NCURSES_MAJOR)-$(NCURSES_MINOR)-$(NCURSES_PATCH)
143
144./lib/%$(LIB_TAG).lib : ./misc/%.def
145	emximp -o $@ $<
146
147./lib/%$(LIB_TAG).a : ./misc/%.def
148	emximp -o $@ $<
149
150./lib/%$(DLL_TAG).dll : ./lib/%.a
151	emxomf -o ./lib/$*$(DLL_TAG).lib $<
152	if [ "$*" = "ncurses" ]; then \
153		gcc $(LDFLAGS) $(DLL_LN_OPTS) ./lib/$*$(DLL_TAG).lib \
154				./misc/$*.def -o $@; \
155	else \
156		gcc $(LDFLAGS) $(DLL_LN_OPTS) ./lib/$*$(DLL_TAG).lib \
157				./lib/ncurses$(LIB_TAG).lib ./misc/$*.def -o $@; \
158	fi
159	-rm -f ./lib/$*$(DLL_TAG).lib
160
161make.dlls : $(DEFS) $(LIBS) $(DLLS) $(LIBS_AOUT)
162
163$(DEFS) : make.defs
164
165LIBDIR	= $(DESTDIR)$(libdir)
166$(LIBDIR) :
167	mkdir -p $@
168
169install.libs :: $(LIBS) $(DLLS) $(LIBDIR)
170	@for i in $(DLL_ROOTS); do \
171	echo installing ./lib/$$i.dll as $(LIBDIR)/$$i.dll; \
172	$(INSTALL_DATA) ./lib/$$i.dll $(LIBDIR)/$$i.dll; done
173	@for i in $(LIB_ROOTS); do \
174	echo installing ./lib/$$i.lib as $(LIBDIR)/$$i.lib; \
175	$(INSTALL_DATA) ./lib/$$i.lib $(LIBDIR)/$$i.lib; done
176
177uninstall.libs ::
178	-@for i in $(DLL_ROOTS); do \
179	echo uninstalling $(LIBDIR)/$$i.dll; \
180	rm -f $(LIBDIR)/$$i.dll; done
181	-@for i in $(LIB_ROOTS); do \
182	echo uninstalling $(LIBDIR)/$$i.lib; \
183	rm -f $(LIBDIR)/$$i.lib; done
184
185make.defs :
186	for i in $(LIBRARIES); do \
187	echo LIBRARY $${i}$(DLL_TAG) INITINSTANCE TERMINSTANCE > ./misc/$$i.def; \
188	echo DESCRIPTION \"$(DLL_SIGNATURE), module $$i\" >> ./misc/$$i.def; \
189	echo CODE LOADONCALL >> ./misc/$$i.def; \
190	echo DATA LOADONCALL NONSHARED MULTIPLE >> ./misc/$$i.def; \
191	echo EXPORTS >> ./misc/$$i.def; \
192	echo Creating $$i.def; \
193	(cmd /C ".\\misc\\makedef.cmd ./lib/$$i.a ./misc/$$i.ref >> ./misc/$$i.def" \
194	 && cmd /C ".\\misc\\chkdef.cmd ./misc/$$i.def") \
195	|| exit 1; \
196	done
197	touch make.defs
198
199save.defs :
200	for i in $(LIBRARIES); do \
201	test -f ./misc/$$i.def && cp ./misc/$$i.def ./misc/$$i.ref; \
202	done
203
204clean \
205os2clean ::
206	-rm -f $(DLLS) $(LIBS)
207
208realclean ::
209	-rm -f $(addprefix ./misc/, $(addsuffix .def, $(LIBRARIES)))
210
211#
212# This is a simplified version of misc/Makefile
213#
214
215TICDIR = $(DESTDIR)$(datadir)/terminfo
216TABSETDIR = $(DESTDIR)$(datadir)/tabset
217
218$(TICDIR) :
219	mkdir -p $@
220
221install \
222install.emxdata :: $(TICDIR)
223	-@rm -fr $(TICDIR)/*
224	echo Building terminfo database, please wait...
225	set TERMINFO=$(TICDIR); ./progs/tic ./misc/emx.src
226	echo Installing the terminfo cleaner and the sources...
227	cp ./misc/emx.src ./misc/cleantic.cmd $(TICDIR)
228	./misc/cleantic.cmd $(TICDIR)
229
230uninstall \
231uninstall.emxdata ::
232	-cd $(TICDIR) && rm -rf *
233	-cd $(TABSETDIR) && rm -rf *
234
235#
236# This is for preparing binary distributions
237#
238
239OS2NAME=ncurses-$(NCURSES_MAJOR).$(NCURSES_MINOR)-emx
240
241#
242# FIXME: this assumes that we can rerun the configure script, changing only
243# the install-prefix.  That means we cannot provide "interesting" options
244# when building.
245#
246os2dist :
247	$(MAKE) -f Makefile.os2 os2clean
248	./configure --without-debug --with-install-prefix=`pwd|sed -e 's@^.:@@'`/$(OS2NAME)
249	$(MAKE) -f Makefile.os2 $(CF_MFLAGS) install.os2
250	-rm -f $(OS2NAME).zip
251	echo NCurses-$(NCURSES_MAJOR).$(NCURSES_MINOR)-$(NCURSES_PATCH) for emx > $(OS2NAME)/FILE_ID.DIZ
252	echo Binary release. >> $(OS2NAME)/FILE_ID.DIZ
253	zip -r $(OS2NAME).zip ./$(OS2NAME)
254
255clean \
256os2clean ::
257	-rm -rf $(OS2NAME)
258	-rm -f $(OS2NAME).zip
259
260