summaryrefslogtreecommitdiffstats
path: root/os2/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'os2/Makefile')
-rw-r--r--os2/Makefile268
1 files changed, 268 insertions, 0 deletions
diff --git a/os2/Makefile b/os2/Makefile
new file mode 100644
index 0000000..5c3d108
--- /dev/null
+++ b/os2/Makefile
@@ -0,0 +1,268 @@
+# OS/2 GNU Makefile for building gettext with GNU Make and GNU C compiler
+#
+# OS/2 still supports the regular configure/make building mechanism, but its
+# way more clumsy, complicated and error prone. It is highly recommended to
+# use this makefile instead, because :
+# - this makefile builds an optimized static and dynamic version of the
+# library
+# - it is able to build both optimized and debug versions of the library
+# without any reconfiguring
+# - it is able to generate a complete OS/2 binary distribution (make distr)
+# - besides its simply alot faster than configure generated makefiles
+#
+# The makefile is designed to be more or less gettext version independent,
+# so it is likely to work with future versions of gettext as well. However,
+# please inspect the pre-built config.h file (if you haven't built one with
+# configure) so that VERSION macro contains the correct value.
+#
+
+# Use CMD.EXE as shell since its way faster
+SHELL = $(COMSPEC)
+# An Unix-like shell (needed for running config.charset)
+UNIXSHELL = sh.exe
+
+# Debug mode (1) or optimize mode (0)
+DEBUG = 0
+
+# The version of INTL.DLL (the name suffix)
+INTLDLLVER =
+
+# Pack the DLL and executables with lxlite
+LXLITE = 1
+
+# Output directory
+OUT = out/$(OUT.SUFFIX)/
+# Root package directory
+ROOT = ../
+# The base directory for distribution archive (emx/ or usr/)
+INST = emx/
+# A shortcut for emx/src/gettext-version/
+INSTSRC = $(INST)src/gettext-$(VERSION)/
+
+# Tools
+CC = gcc -c
+CFLAGS = -Wall -Zmt $(INCLUDE) $(DEFS)
+INCLUDE = -I. -I$(ROOT) -I$(ROOT)intl -I$(ROOT)src -I$(ROOT)lib
+DEFS = -DHAVE_CONFIG_H -DLIBDIR=\"/usr/lib\" \
+ -DLOCALEDIR=\"/usr/share/locale\" -DLOCALE_ALIAS_PATH=\"/usr/share/locale\"
+
+LD = gcc
+LDFLAGS = -Zmt -Zcrtdll
+LDFLAGS.SHARED = -Zmt -Zcrtdll -Zdll
+LIBS = -liberty -lgcc
+
+AR = ar
+ARFLAGS = crs
+
+MKDIR = mkdir.exe -p
+COPY = cp -p
+
+LINKINTL = $(OUT)intl.a
+
+ifeq ($(DEBUG),0)
+ CFLAGS += -s -O2
+ LDFLAGS += -s -Zexe
+ LDFLAGS.SHARED += -s
+ OUT.SUFFIX = release
+else
+ CFLAGS += -g -Zomf
+ LDFLAGS += -g -Zexe -Zomf
+ LDFLAGS.SHARED += -g -Zomf
+ OUT.SUFFIX = debug
+ LXLITE := 0
+ LINKINTL = $(OUT)intl_s.a
+endif
+
+# The list of languages to be included in binary distribution
+LINGUAS = cs da de el es fr gl id it nl nn no pl pt pt_BR ru sl sv tr
+# The following languages don't work with OS/2 iconv:
+#en@boldquot en@quot et ja ko zh
+
+VERSION = $(shell sed config.h -ne "/VERSION/{" -e "s/.*VERSION[ ]*//" -e 's/"//g' -e "p" -e "}")
+
+# Fetch the list of source files for libintl from intl/Makefile.in
+INTL.SOURCES = $(addprefix $(ROOT)intl/,\
+ $(subst $$lo,c,\
+ $(subst @INTLOS2OBJS@,os2compat.c,\
+ $(subst @INTLOBJS@,intl-compat.c,\
+ $(subst OBJECTS = ,,\
+ $(subst \,,\
+ $(shell sed $(ROOT)intl/Makefile.in -ne "/^OBJECTS =/,/[^\]$$/p")))))))
+INTL.OBJECTS = $(addprefix $(OUT),$(subst $(ROOT),,$(INTL.SOURCES:.c=.o)))
+
+PROGRAMS = gettext ngettext msgcmp msgfmt msgmerge msgunfmt xgettext msgcomm
+PROGRAMS.EXE = $(addprefix $(OUT),$(addsuffix .exe,$(PROGRAMS)))
+SRC.SOURCES = $(filter-out $(addprefix $(ROOT)src/,$(addsuffix .c,$(PROGRAMS))),\
+ $(wildcard $(ROOT)src/*.c))
+SRC.OBJECTS = $(addprefix $(OUT),$(subst $(ROOT),,$(SRC.SOURCES:.c=.o)))
+LIB.SOURCES = $(addprefix $(ROOT)lib/,basename.c error.c stpcpy.c stpncpy.c \
+ concatpath.c mbswidth.c fstrcmp.c hash.c printf-prs.c c-ctype.c linebreak.c \
+ getline.c)
+LIB.OBJECTS = $(addprefix $(OUT),$(subst $(ROOT),,$(LIB.SOURCES:.c=.o)))
+
+OUTDIRS = $(OUT) $(sort $(dir $(INTL.OBJECTS) $(SRC.OBJECTS) $(LIB.OBJECTS) $(INSTALL.FILES)))
+
+INSTALL.FILES = $(addprefix $(INST)bin/,$(addsuffix .exe,$(PROGRAMS))) \
+ $(INST)lib/intl.a $(INST)lib/intl_s.a $(INST)dll/intl.dll $(INST)include/libintl.h \
+ $(INST)share/locale/charset.alias $(INST)share/locale/locale.alias \
+ $(INST)doc/gettext-$(VERSION)/README.OS2 \
+ $(INST)doc/gettext-$(VERSION)/COPYING $(INST)doc/gettext-$(VERSION)/README \
+ $(INST)include/iconv.h $(INST)include/langinfo.h \
+ $(addsuffix /LC_MESSAGES/gettext.mo,$(addprefix $(INST)share/locale/,$(LINGUAS))) \
+ $(INSTALL.DIFF)
+
+# The diff and source files which we want in binary distribution (do we?)
+INSTALL.DIFF = $(INSTSRC)gettext-$(VERSION).diff \
+ $(addprefix $(INSTSRC)os2/,$(wildcard *.c *.h *.def) Makefile README.OS2) \
+ $(INSTSRC)intl/os2compat.c
+
+.SUFFIXES:
+.SUFFIXES: .o .a .def .exe .dll .po .mo
+.PRECIOUS: $(OUT)%.o
+
+.PHONY: all depend clean distr rmzip
+
+$(OUT)%.o: $(ROOT)%.c
+ $(CC) $(CFLAGS) -o $@ $<
+
+# To avoid playing with object file lists for every program we will build
+# instead a library containing all the object files from src directory, and
+# then link the library against the main program module, so that linker can
+# pull all the required functions from there
+$(OUT)%.exe: $(OUT)src/%.o $(OUT)util.a $(LINKINTL)
+ $(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
+ifeq ($(LXLITE),1)
+ lxlite $@
+endif
+
+all: $(OUTDIRS) $(ROOT)src/po-gram-gen2.h $(ROOT)intl/libintl.h \
+ $(OUT)intl.a $(OUT)intl_s.a $(OUT)intl$(INTLDLLVER).dll $(PROGRAMS.EXE)
+
+depend: $(INTL.SOURCES) $(SRC.SOURCES)
+ makedep $(INCLUDE) $(DEFS) -p $$(OUT) -r $^
+
+clean:
+ rm -rf out emx
+
+distr: all rmzip gettext-os2-$(VERSION)-bin.zip
+
+rmzip:
+ rm -f gettext-os2-$(VERSION)-bin.zip
+
+$(OUTDIRS):
+ $(MKDIR) $(@:/=)
+
+$(OUT)intl_s.a: $(INTL.OBJECTS)
+ $(AR) $(ARFLAGS) $@ $^
+
+$(OUT)intl.def: $(INTL.OBJECTS)
+ @echo LIBRARY INTL$(INTLDLLVER) INITINSTANCE TERMINSTANCE>$@
+ @echo DESCRIPTION "GNU gettext internationalization library version $(VERSION)">>$@
+ @echo DATA MULTIPLE NONSHARED>>$@
+ @echo EXPORTS>>$@
+ type backward.def>>$@
+ emxexp $^ >>$@
+
+$(OUT)intl$(INTLDLLVER).dll: $(INTL.OBJECTS) $(OUT)intl.def
+ @echo *********************************************************
+ @echo *** YOU CAN SAFELY IGNORE WARNINGS FROM EMXBIND BELOW ***
+ @echo *********************************************************
+ $(LD) $(LDFLAGS.SHARED) -o $@ $^ $(LIBS)
+ifeq ($(LXLITE),1)
+ lxlite $@
+endif
+
+# Remove the ordinals from exports so that newer programs import by name
+$(OUT)intl.a: $(OUT)intl.def
+ emximp -o $@ $<
+
+$(OUT)util.a: $(SRC.OBJECTS) $(LIB.OBJECTS)
+ $(AR) $(ARFLAGS) $@ $^
+
+$(ROOT)src/po-gram-gen2.h: $(ROOT)src/po-gram-gen.h
+ sed -e "s/[yY][yY]/po_gram_/g" $< > $@
+
+$(ROOT)intl/libintl.h: $(ROOT)intl/libgnuintl.h
+ $(COPY) $< $@
+
+gettext-os2-$(VERSION)-bin.zip: $(INSTALL.FILES)
+ @rm -f $@
+ zip -9XD $@ $^
+
+# The following rules are for `make distr' target only
+
+$(INST)share/locale/charset.alias: $(ROOT)lib/config.charset
+ $(UNIXSHELL) $< i386-pc-os2-emx >$@
+$(INST)share/locale/locale.alias: $(ROOT)intl/locale.alias
+ $(COPY) $< $@
+$(INST)bin/% $(INST)lib/% $(INST)dll/%: $(OUT)%
+ $(COPY) $< $@
+$(INST)include/%: $(ROOT)intl/%
+ $(COPY) $< $@
+$(INST)doc/gettext-$(VERSION)/%: $(ROOT)%
+ $(COPY) $< $@
+$(INST)doc/gettext-$(VERSION)/% $(INSTSRC)% $(INSTSRC)os2/% $(INST)include/%: %
+ $(COPY) $< $@
+$(INSTSRC)%: $(ROOT)%
+ $(COPY) $< $@
+$(INST)share/locale/%/LC_MESSAGES/gettext.mo: $(ROOT)po/%.po
+ $(MKDIR) $(dir $@)
+ $(COMSPEC) /c "$(subst /,\\,set BEGINLIBPATH=$(OUT:/=) && \
+ $(OUT)msgfmt.exe) --statistics --verbose -o $@ $<"
+
+# DO NOT DELETE this line -- makedep depends on it
+
+$(OUT)intl-compat.o: ../intl/libgnuintl.h ../intl/gettextP.h \
+ ../intl/loadinfo.h ../intl/gettext.h
+$(OUT)bindtextdom.o: ../intl/libgnuintl.h ../intl/gettextP.h \
+ ../intl/loadinfo.h ../intl/gettext.h
+$(OUT)dcgettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
+ ../intl/gettext.h ../intl/libgnuintl.h
+$(OUT)dgettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
+ ../intl/gettext.h ../intl/libgnuintl.h
+$(OUT)gettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
+ ../intl/gettext.h ../intl/libgnuintl.h
+$(OUT)finddomain.o: ../intl/gettextP.h ../intl/loadinfo.h \
+ ../intl/gettext.h ../intl/libgnuintl.h
+$(OUT)loadmsgcat.o: ../intl/gettext.h ../intl/gettextP.h \
+ ../intl/loadinfo.h
+$(OUT)localealias.o: ../intl/gettextP.h ../intl/loadinfo.h \
+ ../intl/gettext.h
+$(OUT)textdomain.o: ../intl/libgnuintl.h ../intl/gettextP.h \
+ ../intl/loadinfo.h ../intl/gettext.h
+$(OUT)l10nflist.o: ../intl/loadinfo.h
+$(OUT)explodename.o: ../intl/loadinfo.h
+$(OUT)dcigettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
+ ../intl/gettext.h ../intl/libgnuintl.h ../intl/hash-string.h
+$(OUT)dcngettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
+ ../intl/gettext.h ../intl/libgnuintl.h
+$(OUT)dngettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
+ ../intl/gettext.h ../intl/libgnuintl.h
+$(OUT)ngettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
+ ../intl/gettext.h ../intl/libgnuintl.h
+$(OUT)plural.o: ../intl/gettextP.h ../intl/loadinfo.h \
+ ../intl/gettext.h
+$(OUT)os2compat.o: ../os2/iconv.c
+$(OUT)dir-list.o: ../lib/system.h ../src/dir-list.h \
+ ../src/str-list.h
+$(OUT)message.o: ../lib/fstrcmp.h ../src/message.h ../src/str-list.h \
+ ../src/pos.h ../lib/system.h
+$(OUT)open-po.o: ../src/open-po.h ../src/dir-list.h ../lib/error.h \
+ ../lib/system.h ../intl/libgettext.h
+$(OUT)po-gram-gen.o: ../src/po-lex.h ../lib/error.h ../src/pos.h \
+ ../src/po-gram.h ../lib/system.h ../intl/libgettext.h \
+ ../src/po.h
+$(OUT)po-hash-gen.o: ../src/po-hash.h ../src/po.h ../src/po-lex.h \
+ ../lib/error.h ../src/pos.h
+$(OUT)po-lex.o: ../intl/libgettext.h ../src/po-lex.h ../lib/error.h \
+ ../src/pos.h ../src/open-po.h ../src/po-gram-gen2.h
+$(OUT)po.o: ../src/po.h ../src/po-lex.h ../lib/error.h \
+ ../src/pos.h ../src/po-hash.h ../lib/mbswidth.h \
+ ../intl/libgettext.h
+$(OUT)str-list.o: ../src/str-list.h
+$(OUT)write-po.o: ../src/write-po.h ../src/message.h \
+ ../src/str-list.h ../src/pos.h ../lib/c-ctype.h \
+ ../lib/linebreak.h ../lib/error.h ../intl/libgettext.h
+$(OUT)xget-lex.o: ../src/dir-list.h ../lib/error.h \
+ ../intl/libgettext.h ../lib/hash.h ../src/str-list.h \
+ ../src/xget-lex.h