blob: 6bee848cc20b1c07a995b5651d299b32fecbd044 [file] [log] [blame]
# -*- Makefile -*-
#
# $Id$
#
# makefile to build the C++ Standard library utility programs
#
##############################################################################
include ../makefile.in
SRCDIRS = $(TOPDIR)/util
# include common variables setting for all makefiles
ONE_REPOSITORY = 1
include ../makefile.common
TARGET = exec localedef locale
# locale sources and related
NLSDIR = $(TOPDIR)/etc/nls
LOCDIR = $(BUILDDIR)/nls
# add nls directory to VPATH so that the database directories do not
# have to carry the path with them in the rule target.
VPATH += $(LOCDIR)
# list of locales to build
# first compose a full name from gen_list in the form
# <locale name>.<codeset>
# then move the known modifiers (@euro and @cyrillic) to the end
# of the name
LOCALES := \
$(shell sed -e s:"^ *\([^ ]*\) *\([^ ]*\) *":"\1\.\2":g \
-e s:"\([^.]*\)\(.euro\)\([^ ]*\)":"\1\3@euro":g \
-e s:"\([^.]*\)\(.cyrillic\)\([^ ]*\)":"\1\3@cyrillic":g \
$(NLSDIR)/gen_list)
## Filter from RUNTARGET only the scripts
RUNTARGET := $(filter %.sh,$(RUNTARGET))
# If empty populate it with the names of the locales databases test scripts
ifeq ($(RUNTARGET),)
RUNTARGET := sanity_test.sh $(patsubst %,%.sh,$(LOCALES))
endif
ifneq ($(CXX_REPOSITORY),)
LDFLAGS += $(CPPFLAGS)
endif # ($(CXX_REPOSITORY),)
# Don't want to link exec utility with stdlib, so create our own LDFLAGS var
LDFLAGS.exec = $(filter-out -l$(LIBBASE),$(LDFLAGS))
ifneq ($(RPATH),)
LDFLAGS += $(RPATH)$(LIBDIR)
endif
##############################################################################
# TARGETS
##############################################################################
all: $(LIBDIR)/$(LIBNAME) $(TARGET) $(RUNTARGET)
$(LIBDIR)/$(LIBNAME):
@$(MAKE) -C $(LIBDIR)
# link the run utility
exec: runall.o cmdopt.o output.o util.o exec.o display.o
@echo "$(LD) $^ -o $@ $(LDFLAGS.exec) $(LDLIBS)" $(call CXX.repo,$<) \
>> $(LOGFILE)
$(LD) $^ -o $@ $(LDFLAGS.exec) $(LDLIBS) $(call CXX.repo,$<) $(TEEOPTS)
# link the localedef utility
localedef: localedef.o locale.o aliases.o charmap.o codecvt.o collate.o \
ctype.o def.o diagnostic.o memchk.o messages.o monetary.o \
numeric.o path.o time.o scanner.o
@echo "$(LD) $^ -o $@ $(LDFLAGS) $(LDLIBS)" $(call CXX.repo,$<) \
>> $(LOGFILE)
$(LD) $^ -o $@ $(LDFLAGS) $(LDLIBS) $(call CXX.repo,$<) $(TEEOPTS)
# link the locale utility
locale: locale_stub.o
@echo "$(LD) $^ -o $@ $(LDFLAGS) $(LDLIBS)" $(call CXX.repo,$<) \
>> $(LOGFILE)
$(LD) $^ -o $@ $(LDFLAGS) $(LDLIBS) $(call CXX.repo,$<) $(TEEOPTS)
# build all locales with the localedef utility
locales: localedef $(LOCALES)
# the rule builds the scripts that are run by the runall script
$(RUNTARGET): $(NLSDIR)/gen_list
@(echo "making $@..."; \
echo "#!/bin/sh" > $@; \
locname=`echo $@ | sed "s:^\./::g;s:\.sh$$::g"`; \
if [ "$@" = "sanity_test.sh" ]; then \
echo "./run_utils -s -b $(BUILDDIR)/bin $$""*" >>$@; \
else \
echo "./run_utils -f -i $(NLSDIR) -l $$locname $$""*" >> $@; \
fi; \
chmod ug+x $@;)
# the rule presents as dependencies the source files corresponding
# to that locale; it is run once for each entry in LOCALES
$(LOCALES): $(NLSDIR)/gen_list
@(lname=`echo $@ | sed "s:\([^.]*\)\.\([^@]*\)\(.*\):\1\3:;y:@:.:"`; \
cname=`echo $@ | sed "s:\([^.]*\)\.\([^@]*\)\(.*\):\2:"`; \
echo "./localedef -w -c -f $(NLSDIR)/charmaps/$$cname" \
"-i $(NLSDIR)/src/$$lname $(LOCDIR)/$@"; \
./localedef -w -c -f $(NLSDIR)/charmaps/$$cname \
-i $(NLSDIR)/src/$$lname $(LOCDIR)/$@)
$(DEPENDDIR)/localedb.d: $(DEPENDDIR) $(NLSDIR)/gen_list
@(echo "# generated locale dependencies" > $@; \
for f in ""$(LOCALES); do \
lname=`echo $$f | \
sed "s:\([^.]*\)\.\([^@]*\)\(.*\):\1\3:;y:@:.:"`; \
cname=`echo $$f | sed "s:\([^.]*\)\.\([^@]*\)\(.*\):\2:"`; \
f=$$f; \
echo "generating dependencies for $$f"; \
echo "$$f: $$""(NLSDIR)/src/$$lname" \
"$$""(NLSDIR)/charmaps/$$cname" >> $@; \
done;)
# tell makefile.rules to include the generated dependencies file
DEPS := $(DEPENDDIR)/localedb.d
# do any directory specific cleanup using the realclean target
realclean: clean dependclean
-rm -rf $(TARGET)
# compute the names of codesets (codecvt databases) and set
# the variable only for the install target for efficiency
install: codesets := \
$(sort $(shell echo $(LOCALES) \
| sed -e "s/[^ .@][^ .@]*\.\([^ ]*\)/\1/g" \
-e "s/@[^ ]*//g"))
# create the $(PREFIX)/bin $(PREFIX)/nls directories and install
# the utilities and locales
install: locale localedef $(LOCALES)
mkdir -p $(PREFIX)/bin
cp locale localedef $(PREFIX)/bin
mkdir -p $(PREFIX)/nls
if [ "$(LOCALES)" != "" ]; then \
cd ../nls && cp -R $(LOCALES) $(codesets) $(PREFIX)/nls; \
fi
include ../makefile.rules