blob: 56f4881ca0d69e43cbe78fe358b6b092f4060097 [file] [log] [blame]
# -*- Makefile -*-
#
# $Id$
#
# makefile to build the C++ Standard library utility programs
#
########################################################################
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright
# ownership. The ASF licenses this file to you under the Apache
# License, Version 2.0 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied. See the License for the specific language governing
# permissions and limitations under the License.
#
# Copyright 1999-2007 Rogue Wave Software, Inc.
#
########################################################################
include ../makefile.in
SRCDIRS = $(TOPDIR)/util
# include common variables setting for all makefiles
ONE_REPOSITORY = 1
include ../makefile.common
TARGET = exec localedef locale gencat
# 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)
# link the gencat utility
gencat: gencat.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