249 lines
8.0 KiB
Makefile
249 lines
8.0 KiB
Makefile
#
|
|
# 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
|
|
# - this makefile builds an backward compatible DLL. When building with
|
|
# configure you will get a DLL which is compatible only with the 0.10.40
|
|
# and later DLLs of gettext; this makefile builds a DLL which is binary
|
|
# compatible with gettext 0.10.35 (exports by ordinal matter).
|
|
# - 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.
|
|
#
|
|
# If you get unresolved dependencies (e.g. "don't know how to make somefile.h
|
|
# which is required for zzz.o) remove (or rebuild, if you have the makedep tool)
|
|
# the depend.mak file which contains all the dependencies.
|
|
#
|
|
|
|
# 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/
|
|
|
|
# Tools
|
|
CC = gcc -c
|
|
CFLAGS = -Wall -Zmt $(INCLUDE) $(DEFS)
|
|
INCLUDE = -I. -I$(ROOT) -I$(ROOT)intl -I$(ROOT)src -I$(ROOT)lib -I$(ROOT)libuniname
|
|
DEFS = -DHAVE_CONFIG_H -DLIBDIR=\"/usr/lib\" \
|
|
-DLOCALEDIR=\"/usr/share/locale\" -DLOCALE_ALIAS_PATH=\"/usr/share/locale\" \
|
|
-DGETTEXTDATADIR=\"/usr/share/gettext\" \
|
|
-DPROJECTSDIR=\"/usr/share/gettext/projects\" \
|
|
-DGETTEXTJAR=\"/usr/share/gettext/gettext.jar\"
|
|
|
|
|
|
LD = gcc
|
|
LDFLAGS = -Zmt -Zcrtdll
|
|
LDFLAGS.SHARED = -Zmt -Zcrtdll -Zdll
|
|
LIBS = -liconv -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
|
|
LDFLAGS += -g -Zexe
|
|
LDFLAGS.SHARED += -g
|
|
OUT.SUFFIX = debug
|
|
LXLITE := 0
|
|
LINKINTL = $(OUT)intl_s.a
|
|
endif
|
|
|
|
# Languages with encodings unsupported by OS/2 API (BIG5)
|
|
BAD.LINGUAS=zh
|
|
|
|
# The list of languages to be included in binary distribution
|
|
LINGUAS = $(filter-out $(BAD.LINGUAS),$(shell sed -e "/^\#/d" $(ROOT)po/LINGUAS))
|
|
|
|
# Fetch version number from configure.in
|
|
VERSION = $(shell sed ../configure.in -ne "/AM_INIT_AUTOMAKE/{" -e "s/.*(gettext, *\\(.*\\))/\\1/" -e "p" -e "}")
|
|
|
|
# Fetch the list of source files for libintl from intl/Makefile.in
|
|
INTL.SOURCES = $(addprefix $(ROOT)intl/,\
|
|
$(subst $$lo,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 = $(addsuffix .exe,$(subst bin_PROGRAMS = ,,\
|
|
$(subst \,,\
|
|
$(shell sed $(ROOT)src/Makefile.am -ne "/^bin_PROGRAMS =/,/[^\]$$/p"))))
|
|
PROGRAMS.EXE = $(addprefix $(OUT),$(PROGRAMS))
|
|
SRC.SOURCES = $(filter-out $(addprefix $(ROOT)src/,$(PROGRAMS:.exe=.c)),\
|
|
$(wildcard $(ROOT)src/*.c))
|
|
SRC.OBJECTS = $(addprefix $(OUT),$(subst $(ROOT),,$(SRC.SOURCES:.c=.o)))
|
|
LIB.SOURCES = $(addprefix $(ROOT)lib/, error.c stpcpy.c stpncpy.c mkdtemp.c getline.c \
|
|
$(subst libgettextlib_la_SOURCES = ,,\
|
|
$(subst \,,\
|
|
$(patsubst %.h,,\
|
|
$(patsubst getopt%.c,,\
|
|
$(shell sed $(ROOT)lib/Makefile.am -ne "/^libgettextlib_la_SOURCES =/,/[^\]$$/p"))))))
|
|
LIB.OBJECTS = $(addprefix $(OUT),$(subst $(ROOT),,$(LIB.SOURCES:.c=.o)))
|
|
|
|
LIBUNINAME.SOURCES = $(addprefix $(ROOT)libuniname/, \
|
|
$(subst libuniname_a_SOURCES = ,,\
|
|
$(subst \,,\
|
|
$(patsubst %.h,,\
|
|
$(shell sed $(ROOT)libuniname/Makefile.am -ne "/^libuniname_a_SOURCES =/,/^$$/p")))))
|
|
LIBUNINAME.OBJECTS = $(addprefix $(OUT),$(subst $(ROOT),,$(LIBUNINAME.SOURCES:.c=.o)))
|
|
|
|
OUTDIRS = $(OUT) $(sort $(dir $(INTL.OBJECTS) $(SRC.OBJECTS) $(LIB.OBJECTS) \
|
|
$(LIBUNINAME.OBJECTS) $(INSTALL.FILES)))
|
|
|
|
INSTALL.FILES = $(addprefix $(INST)bin/,$(PROGRAMS)) \
|
|
$(INST)lib/intl.a $(INST)lib/intl_s.a $(INST)include/libintl.h \
|
|
$(INST)dll/intl.dll $(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 \
|
|
$(addsuffix /LC_MESSAGES/gettext.mo,$(addprefix $(INST)share/locale/,$(LINGUAS))) \
|
|
$(INSTALL.DIFF)
|
|
|
|
.SUFFIXES:
|
|
.SUFFIXES: .o .a .def .exe .dll .po .mo
|
|
.PRECIOUS: $(OUT)%.o $(OUT)%.a
|
|
|
|
.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 $(OUT)uniname.a $(LINKINTL)
|
|
$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
ifeq ($(LXLITE),1)
|
|
lxlite /b- $@
|
|
endif
|
|
|
|
all: config.h $(OUTDIRS) $(ROOT)src/po-gram-gen2.h $(ROOT)lib/stdbool.h \
|
|
$(ROOT)intl/libintl.h $(OUT)intl.a $(OUT)intl_s.a $(OUT)intl$(INTLDLLVER).dll \
|
|
$(PROGRAMS.EXE)
|
|
|
|
define MAKEDEP
|
|
echo $(OUT)PATH = FILENAME
|
|
makedep $(INCLUDE) $(DEFS) -p $$(OUT)PATH -r -a FILENAME -c -f depend.mak
|
|
|
|
endef
|
|
|
|
depend: $(INTL.SOURCES) $(SRC.SOURCES)
|
|
# Remove all dependencies
|
|
rm -f depend.mak
|
|
# Build dependencies, by one file (to avoid 1024 chars command line length limit)
|
|
@$(foreach fn,$^,$(subst PATH,$(subst ../,,$(dir $(fn))),$(subst FILENAME,$(fn),$(MAKEDEP))))
|
|
|
|
clean:
|
|
rm -rf out emx config.h
|
|
|
|
distr: all rmzip gettext-os2-$(VERSION)-bin.zip
|
|
|
|
rmzip:
|
|
rm -f gettext-os2-$(VERSION)-bin.zip
|
|
|
|
# How to configure without configure...
|
|
config.h: ../config.h.in ./configure.awk
|
|
gawk -f configure.awk -v PACKAGE=gettext -v VERSION=$(VERSION) $< >config.h
|
|
|
|
$(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 -u $^ >>$@
|
|
|
|
$(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
|
|
|
|
# How to build an import library from a .DEF file
|
|
$(OUT)%.a: $(OUT)%.def
|
|
emximp -o $@ $<
|
|
|
|
$(OUT)util.a: $(SRC.OBJECTS) $(LIB.OBJECTS)
|
|
$(AR) $(ARFLAGS) $@ $^
|
|
|
|
$(OUT)uniname.a: $(LIBUNINAME.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) $< $@
|
|
|
|
$(ROOT)lib/stdbool.h: $(ROOT)lib/stdbool.h.in
|
|
$(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)/% $(INST)include/%: %
|
|
$(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 $@ $<"
|
|
|
|
-include depend.mak
|