summaryrefslogtreecommitdiff
path: root/extra/locale/Makefile
blob: 51fcde85b29357b3ffc0cd22a0463cc8b37ace8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131

TOPDIR = ../../
EXTRA_LOCALE_DIR:=${shell cd $(TOPDIR)/extra/locale && pwd}
include $(TOPDIR)Rules.mak

CFLAGS_wc8bit=-DCTYPE_PACKED=1
CFLAGS_mmap=
ifeq ($(strip $(UCLIBC_HAS_WCHAR)),y)
    CFLAGS_wc8bit += -DDO_WIDE_CHAR=1
    CFLAGS_mmap += -D__WCHAR_ENABLED=1
endif

all: links-target

codesets.txt:
	@if [ ! -f codesets.txt ] ; then \
	    set -e; \
	    echo " "; \
	    echo "You do not have a codesets.txt file.  Please create this "; \
	    echo "file in the extra/locale directory by running something like: "; \
	    echo -e "  find $(EXTRA_LOCALE_DIR)/charmaps -name \"*.pairs\" > \\"; \
	    echo -e "        $(EXTRA_LOCALE_DIR)/codesets.txt"; \
	    echo "and then edit that file to disable/enable the codesets you wish to support. "; \
	    echo " "; \
	    false; \
	fi;

gen_wc8bit: gen_wc8bit.c
	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) $(CFLAGS_wc8bit) $^ -o $@

c8tables.h: gen_wc8bit codesets.txt
	./gen_wc8bit `cat codesets.txt`

gen_wctype: gen_wctype.c
	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) $^ -o $@

# Warning! Beware tr_TR toupper/tolower exceptions!
wctables.h: gen_wctype
	./gen_wctype en_US

gen_locale: gen_locale.c c8tables.h
	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) gen_locale.c -o $@

# TODO: if no wide char support, we should auto-disable all UTF-8 locales
locale_tables.h: gen_locale locales.txt
	./gen_locale locales.txt

lt_defines.h: locale_tables.h locale_collate.h
	grep "^#define" locale_tables.h > lt_defines.h
	grep "^#define __lc" locale_collate.h >> lt_defines.h

gen_collate: gen_collate.c
	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) gen_collate.c -o $@

locale_collate.h: gen_collate locale_tables.h
	grep COL_IDX_ locale_tables.h | sed -e "s/^.*COL_IDX_\([^, ]*\).*$$/\1/" | sort | uniq | xargs ./gen_collate

locales.txt:
	@if [ ! -f locales.txt ] ; then \
	    set -e; \
	    echo " "; \
	    echo "You do not have a locales.txt file in the extra/locale "; \
	    echo "directory, Please copy the LOCALES file to locales.txt by "; \
	    echo "running something like: "; \
	    echo "  cp $(EXTRA_LOCALE_DIR)/LOCALES \\ "; \
	    echo "      $(EXTRA_LOCALE_DIR)/locales.txt "; \
	    echo "then edit locales.txt to disable/enable the locales you wish "; \
	    echo "to support. "; \
	    echo " "; \
	    false; \
	fi;

# ifneq ($(TARGET_ARCH),$(HOST_ARCH))

# locale.mmap: gen_mmap
# 	echo Your locale.mmap file is either missing or out of date.
# 	echo The developmental code can only generate one for the
# 	echo target arch == native arch case.  Sorry.
# else

# gen_mmap: gen_mmap.c c8tables.h wctables.h locale_tables.h
# 	gcc $(CFLAGS_mmap) -Os -Wall -static gen_mmap.c -o gen_mmap

# locale.mmap: gen_mmap
# 	./gen_mmap

# endif

# lmmtolso: lmmtolso.c
# 	gcc -Os -Wall lmmtolso.c -o lmmtolso

# locale_data.c: lmmtolso locale.mmap
# 	./lmmtolso

gen_ldc: gen_ldc.c c8tables.h wctables.h locale_tables.h locale_collate.h
	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) $(CFLAGS_mmap) gen_ldc.c -o $@
#gen_ldc.c -o gen_ldc

locale_data.c: gen_ldc
	./gen_ldc

locale_data.o: locale_data.c lt_defines.h
	$(CC) $(CFLAGS_mmap) -c locale_data.c
	$(STRIPTOOL) -x -R .note -R .comment locale_data.o

uClibc_locale_data.h: c8tables.h wctables.h lt_defines.h locale_mmap.h
	grep -v "define __LC" lt_defines.h > uClibc_locale_data.h
	cat c8tables.h wctables.h locale_mmap.h >> uClibc_locale_data.h

links-target: locale_data.o uClibc_locale_data.h
	ln -sf ../../../extra/locale/locale_data.o ../../libc/misc/locale
	cat uClibc_locale_data.h | awk 'BEGIN{i=1}{ if ( /WANT_/ ) i = /endif/ ; else if (i) print $0 }' > ../../include/bits/uClibc_locale_data.h

#	cp uClibc_locale_data.h ../../libc/sysdeps/linux/common/bits/

pregen:
	$(CC) $(CFLAGS_mmap) -c locale_data.c
	$(STRIPTOOL) -x -R .note -R .comment locale_data.o
	ln -sf ../../../extra/locale/locale_data.o ../../libc/misc/locale
	cat uClibc_locale_data.h | awk 'BEGIN{i=1}{ if ( /WANT_/ ) i = /endif/ ; else if (i) print $0 }' > ../../include/bits/uClibc_locale_data.h

#	cp uClibc_locale_data.h ../../libc/sysdeps/linux/common/bits/

clean:
	rm -f *.[oa] *~ core
	rm -f gen_wc8bit gen_wctype gen_locale gen_ldc gen_collate
	rm -f c8tables.h wctables.h locale_tables.h lt_defines.h locale_collate.h
	rm -f gen_mmap locale.mmap lmmtolso
	rm -f locale_data.c locale_data.o  uClibc_locale_data.h

.PHONY: pregen