libgrapheme

unicode string library
git clone git://git.suckless.org/libgrapheme
Log | Files | Refs | README | LICENSE

Makefile (17792B)


      1 # See LICENSE file for copyright and license details
      2 # libgrapheme - unicode string library
      3 .POSIX:
      4 .SUFFIXES:
      5 
      6 VERSION_MAJOR = 2
      7 VERSION_MINOR = 0
      8 VERSION_PATCH = 1
      9 UNICODE_VERSION = 15.1.0
     10 MAN_DATE = 2022-10-06
     11 
     12 include config.mk
     13 
     14 VERSION = $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH)
     15 
     16 BENCHMARK =\
     17 	benchmark/bidirectional\
     18 	benchmark/case\
     19 	benchmark/character\
     20 	benchmark/sentence\
     21 	benchmark/line\
     22 	benchmark/utf8-decode\
     23 	benchmark/word\
     24 
     25 DATA =\
     26 	data/BidiBrackets.txt\
     27 	data/BidiCharacterTest.txt\
     28 	data/BidiMirroring.txt\
     29 	data/BidiTest.txt\
     30 	data/DerivedBidiClass.txt\
     31 	data/DerivedCoreProperties.txt\
     32 	data/EastAsianWidth.txt\
     33 	data/emoji-data.txt\
     34 	data/GraphemeBreakProperty.txt\
     35 	data/GraphemeBreakTest.txt\
     36 	data/LICENSE\
     37 	data/LineBreak.txt\
     38 	data/LineBreakTest.txt\
     39 	data/SentenceBreakProperty.txt\
     40 	data/SentenceBreakTest.txt\
     41 	data/SpecialCasing.txt\
     42 	data/UnicodeData.txt\
     43 	data/WordBreakProperty.txt\
     44 	data/WordBreakTest.txt\
     45 
     46 GEN =\
     47 	gen/bidirectional\
     48 	gen/bidirectional-test\
     49 	gen/case\
     50 	gen/character\
     51 	gen/character-test\
     52 	gen/line\
     53 	gen/line-test\
     54 	gen/sentence\
     55 	gen/sentence-test\
     56 	gen/word\
     57 	gen/word-test\
     58 
     59 GEN2 =\
     60 	gen2/character\
     61 
     62 SRC =\
     63 	src/bidirectional\
     64 	src/case\
     65 	src/character\
     66 	src/line\
     67 	src/sentence\
     68 	src/utf8\
     69 	src/util\
     70 	src/word\
     71 
     72 TEST =\
     73 	test/bidirectional\
     74 	test/case\
     75 	test/character\
     76 	test/line\
     77 	test/sentence\
     78 	test/utf8-decode\
     79 	test/utf8-encode\
     80 	test/word\
     81 
     82 MAN_TEMPLATE =\
     83 	man/template/is_case.sh\
     84 	man/template/next_break.sh\
     85 	man/template/to_case.sh\
     86 
     87 MAN3 =\
     88 	man/grapheme_decode_utf8\
     89 	man/grapheme_encode_utf8\
     90 	man/grapheme_is_character_break\
     91 	man/grapheme_is_uppercase\
     92 	man/grapheme_is_uppercase_utf8\
     93 	man/grapheme_is_lowercase\
     94 	man/grapheme_is_lowercase_utf8\
     95 	man/grapheme_is_titlecase\
     96 	man/grapheme_is_titlecase_utf8\
     97 	man/grapheme_next_character_break\
     98 	man/grapheme_next_line_break\
     99 	man/grapheme_next_sentence_break\
    100 	man/grapheme_next_word_break\
    101 	man/grapheme_next_character_break_utf8\
    102 	man/grapheme_next_line_break_utf8\
    103 	man/grapheme_next_sentence_break_utf8\
    104 	man/grapheme_next_word_break_utf8\
    105 	man/grapheme_to_uppercase\
    106 	man/grapheme_to_uppercase_utf8\
    107 	man/grapheme_to_lowercase\
    108 	man/grapheme_to_lowercase_utf8\
    109 	man/grapheme_to_titlecase\
    110 	man/grapheme_to_titlecase_utf8\
    111 
    112 MAN7 =\
    113 	man/libgrapheme\
    114 
    115 all: data/LICENSE $(MAN3:=.3) $(MAN7:=.7) $(ANAME) $(SONAME)
    116 
    117 data/BidiBrackets.txt:
    118 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/BidiBrackets.txt
    119 
    120 data/BidiCharacterTest.txt:
    121 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/BidiCharacterTest.txt
    122 
    123 data/BidiMirroring.txt:
    124 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/BidiMirroring.txt
    125 
    126 data/BidiTest.txt:
    127 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/BidiTest.txt
    128 
    129 data/DerivedBidiClass.txt:
    130 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/extracted/DerivedBidiClass.txt
    131 
    132 data/DerivedCoreProperties.txt:
    133 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/DerivedCoreProperties.txt
    134 
    135 data/EastAsianWidth.txt:
    136 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/EastAsianWidth.txt
    137 
    138 data/emoji-data.txt:
    139 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/emoji/emoji-data.txt
    140 
    141 data/GraphemeBreakProperty.txt:
    142 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/auxiliary/GraphemeBreakProperty.txt
    143 
    144 data/GraphemeBreakTest.txt:
    145 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/auxiliary/GraphemeBreakTest.txt
    146 
    147 data/LICENSE:
    148 	wget -O $@ https://www.unicode.org/license.txt
    149 
    150 data/LineBreak.txt:
    151 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/LineBreak.txt
    152 
    153 data/LineBreakTest.txt:
    154 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/auxiliary/LineBreakTest.txt
    155 
    156 data/SentenceBreakProperty.txt:
    157 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/auxiliary/SentenceBreakProperty.txt
    158 
    159 data/SentenceBreakTest.txt:
    160 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/auxiliary/SentenceBreakTest.txt
    161 
    162 data/SpecialCasing.txt:
    163 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/SpecialCasing.txt
    164 
    165 data/UnicodeData.txt:
    166 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/UnicodeData.txt
    167 
    168 data/WordBreakProperty.txt:
    169 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/auxiliary/WordBreakProperty.txt
    170 
    171 data/WordBreakTest.txt:
    172 	wget -O $@ https://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/auxiliary/WordBreakTest.txt
    173 
    174 benchmark/bidirectional.o: benchmark/bidirectional.c Makefile config.mk gen/bidirectional-test.h grapheme.h benchmark/util.h
    175 benchmark/case.o: benchmark/case.c Makefile config.mk gen/word-test.h grapheme.h benchmark/util.h
    176 benchmark/character.o: benchmark/character.c Makefile config.mk gen/character-test.h grapheme.h benchmark/util.h
    177 benchmark/line.o: benchmark/line.c Makefile config.mk gen/line-test.h grapheme.h benchmark/util.h
    178 benchmark/utf8-decode.o: benchmark/utf8-decode.c Makefile config.mk gen/character-test.h grapheme.h benchmark/util.h
    179 benchmark/sentence.o: benchmark/sentence.c Makefile config.mk gen/sentence-test.h grapheme.h benchmark/util.h
    180 benchmark/util.o: benchmark/util.c Makefile config.mk benchmark/util.h
    181 benchmark/word.o: benchmark/word.c Makefile config.mk gen/word-test.h grapheme.h benchmark/util.h
    182 gen/bidirectional.o: gen/bidirectional.c Makefile config.mk gen/util.h
    183 gen/bidirectional-test.o: gen/bidirectional-test.c Makefile config.mk gen/util.h
    184 gen/case.o: gen/case.c Makefile config.mk gen/util.h
    185 gen/character.o: gen/character.c Makefile config.mk gen/util.h
    186 gen/character-test.o: gen/character-test.c Makefile config.mk gen/util.h
    187 gen/line.o: gen/line.c Makefile config.mk gen/util.h
    188 gen/line-test.o: gen/line-test.c Makefile config.mk gen/util.h
    189 gen/sentence.o: gen/sentence.c Makefile config.mk gen/util.h
    190 gen/sentence-test.o: gen/sentence-test.c Makefile config.mk gen/util.h
    191 gen/word.o: gen/word.c Makefile config.mk gen/util.h
    192 gen/word-test.o: gen/word-test.c Makefile config.mk gen/util.h
    193 gen/util.o: gen/util.c Makefile config.mk gen/util.h
    194 gen2/character.o: gen2/character.c Makefile config.mk gen2/util.h
    195 gen2/util.o: gen2/util.c Makefile config.mk gen2/util.h
    196 src/bidirectional.o: src/bidirectional.c Makefile config.mk gen/bidirectional.h grapheme.h src/util.h
    197 src/case.o: src/case.c Makefile config.mk gen/case.h grapheme.h src/util.h
    198 src/character.o: src/character.c Makefile config.mk gen/character.h grapheme.h src/util.h
    199 src/line.o: src/line.c Makefile config.mk gen/line.h grapheme.h src/util.h
    200 src/sentence.o: src/sentence.c Makefile config.mk gen/sentence.h grapheme.h src/util.h
    201 src/utf8.o: src/utf8.c Makefile config.mk grapheme.h
    202 src/util.o: src/util.c Makefile config.mk gen/types.h grapheme.h src/util.h
    203 src/word.o: src/word.c Makefile config.mk gen/word.h grapheme.h src/util.h
    204 test/bidirectional.o: test/bidirectional.c Makefile config.mk gen/bidirectional.h gen/bidirectional-test.h grapheme.h test/util.h
    205 test/case.o: test/case.c Makefile config.mk grapheme.h test/util.h
    206 test/character.o: test/character.c Makefile config.mk gen/character-test.h grapheme.h test/util.h
    207 test/line.o: test/line.c Makefile config.mk gen/line-test.h grapheme.h test/util.h
    208 test/sentence.o: test/sentence.c Makefile config.mk gen/sentence-test.h grapheme.h test/util.h
    209 test/utf8-encode.o: test/utf8-encode.c Makefile config.mk grapheme.h test/util.h
    210 test/utf8-decode.o: test/utf8-decode.c Makefile config.mk grapheme.h test/util.h
    211 test/util.o: test/util.c Makefile config.mk test/util.h
    212 test/word.o: test/word.c Makefile config.mk gen/word-test.h grapheme.h test/util.h
    213 
    214 benchmark/bidirectional$(BINSUFFIX): benchmark/bidirectional.o benchmark/util.o $(ANAME)
    215 benchmark/case$(BINSUFFIX): benchmark/case.o benchmark/util.o $(ANAME)
    216 benchmark/character$(BINSUFFIX): benchmark/character.o benchmark/util.o $(ANAME)
    217 benchmark/line$(BINSUFFIX): benchmark/line.o benchmark/util.o $(ANAME)
    218 benchmark/sentence$(BINSUFFIX): benchmark/sentence.o benchmark/util.o $(ANAME)
    219 benchmark/utf8-decode$(BINSUFFIX): benchmark/utf8-decode.o benchmark/util.o $(ANAME)
    220 benchmark/word$(BINSUFFIX): benchmark/word.o benchmark/util.o $(ANAME)
    221 gen/bidirectional$(BINSUFFIX): gen/bidirectional.o gen/util.o
    222 gen/bidirectional-test$(BINSUFFIX): gen/bidirectional-test.o gen/util.o
    223 gen/case$(BINSUFFIX): gen/case.o gen/util.o
    224 gen/character$(BINSUFFIX): gen/character.o gen/util.o
    225 gen/character-test$(BINSUFFIX): gen/character-test.o gen/util.o
    226 gen/line$(BINSUFFIX): gen/line.o gen/util.o
    227 gen/line-test$(BINSUFFIX): gen/line-test.o gen/util.o
    228 gen/sentence$(BINSUFFIX): gen/sentence.o gen/util.o
    229 gen/sentence-test$(BINSUFFIX): gen/sentence-test.o gen/util.o
    230 gen/word$(BINSUFFIX): gen/word.o gen/util.o
    231 gen/word-test$(BINSUFFIX): gen/word-test.o gen/util.o
    232 gen2/character$(BINSUFFIX): gen2/character.o gen2/util.o
    233 test/bidirectional$(BINSUFFIX): test/bidirectional.o test/util.o $(ANAME)
    234 test/case$(BINSUFFIX): test/case.o test/util.o $(ANAME)
    235 test/character$(BINSUFFIX): test/character.o test/util.o $(ANAME)
    236 test/line$(BINSUFFIX): test/line.o test/util.o $(ANAME)
    237 test/sentence$(BINSUFFIX): test/sentence.o test/util.o $(ANAME)
    238 test/utf8-encode$(BINSUFFIX): test/utf8-encode.o test/util.o $(ANAME)
    239 test/utf8-decode$(BINSUFFIX): test/utf8-decode.o test/util.o $(ANAME)
    240 test/word$(BINSUFFIX): test/word.o test/util.o $(ANAME)
    241 
    242 gen/bidirectional.h: data/BidiBrackets.txt data/BidiMirroring.txt data/DerivedBidiClass.txt data/UnicodeData.txt gen/bidirectional$(BINSUFFIX)
    243 gen/bidirectional-test.h: data/BidiCharacterTest.txt data/BidiTest.txt gen/bidirectional-test$(BINSUFFIX)
    244 gen/case.h: data/DerivedCoreProperties.txt data/UnicodeData.txt data/SpecialCasing.txt gen/case$(BINSUFFIX)
    245 gen/character.h: data/DerivedCoreProperties.txt data/emoji-data.txt data/GraphemeBreakProperty.txt gen/character$(BINSUFFIX)
    246 gen/character-test.h: data/GraphemeBreakTest.txt gen/character-test$(BINSUFFIX)
    247 gen/line.h: data/emoji-data.txt data/EastAsianWidth.txt data/LineBreak.txt gen/line$(BINSUFFIX)
    248 gen/line-test.h: data/LineBreakTest.txt gen/line-test$(BINSUFFIX)
    249 gen/sentence.h: data/SentenceBreakProperty.txt gen/sentence$(BINSUFFIX)
    250 gen/sentence-test.h: data/SentenceBreakTest.txt gen/sentence-test$(BINSUFFIX)
    251 gen/word.h: data/WordBreakProperty.txt gen/word$(BINSUFFIX)
    252 gen/word-test.h: data/WordBreakTest.txt gen/word-test$(BINSUFFIX)
    253 gen2/character.gen.h: data/DerivedCoreProperties.txt data/emoji-data.txt data/GraphemeBreakProperty.txt gen2/character$(BINSUFFIX)
    254 
    255 man/grapheme_is_character_break.3: man/grapheme_is_character_break.sh Makefile config.mk
    256 man/grapheme_is_uppercase.3: man/grapheme_is_uppercase.sh man/template/is_case.sh Makefile config.mk
    257 man/grapheme_is_uppercase_utf8.3: man/grapheme_is_uppercase_utf8.sh man/template/is_case.sh Makefile config.mk
    258 man/grapheme_is_lowercase.3: man/grapheme_is_lowercase.sh man/template/is_case.sh Makefile config.mk
    259 man/grapheme_is_lowercase_utf8.3: man/grapheme_is_lowercase_utf8.sh man/template/is_case.sh Makefile config.mk
    260 man/grapheme_is_titlecase.3: man/grapheme_is_titlecase.sh man/template/is_case.sh Makefile config.mk
    261 man/grapheme_is_titlecase_utf8.3: man/grapheme_is_titlecase_utf8.sh man/template/is_case.sh Makefile config.mk
    262 man/grapheme_next_character_break.3: man/grapheme_next_character_break.sh man/template/next_break.sh Makefile config.mk
    263 man/grapheme_next_line_break.3: man/grapheme_next_line_break.sh man/template/next_break.sh Makefile config.mk
    264 man/grapheme_next_sentence_break.3: man/grapheme_next_sentence_break.sh man/template/next_break.sh Makefile config.mk
    265 man/grapheme_next_word_break.3: man/grapheme_next_word_break.sh man/template/next_break.sh Makefile config.mk
    266 man/grapheme_next_character_break_utf8.3: man/grapheme_next_character_break_utf8.sh man/template/next_break.sh Makefile config.mk
    267 man/grapheme_next_line_break_utf8.3: man/grapheme_next_line_break_utf8.sh man/template/next_break.sh Makefile config.mk
    268 man/grapheme_next_sentence_break_utf8.3: man/grapheme_next_sentence_break_utf8.sh man/template/next_break.sh Makefile config.mk
    269 man/grapheme_next_word_break_utf8.3: man/grapheme_next_word_break_utf8.sh man/template/next_break.sh Makefile config.mk
    270 man/grapheme_to_uppercase.3: man/grapheme_to_uppercase.sh man/template/to_case.sh Makefile config.mk
    271 man/grapheme_to_lowercase.3: man/grapheme_to_lowercase.sh man/template/to_case.sh Makefile config.mk
    272 man/grapheme_to_titlecase.3: man/grapheme_to_titlecase.sh man/template/to_case.sh Makefile config.mk
    273 man/grapheme_to_uppercase_utf8.3: man/grapheme_to_uppercase_utf8.sh man/template/to_case.sh Makefile config.mk
    274 man/grapheme_to_lowercase_utf8.3: man/grapheme_to_lowercase_utf8.sh man/template/to_case.sh Makefile config.mk
    275 man/grapheme_to_titlecase_utf8.3: man/grapheme_to_titlecase_utf8.sh man/template/to_case.sh Makefile config.mk
    276 man/grapheme_decode_utf8.3: man/grapheme_decode_utf8.sh Makefile config.mk
    277 man/grapheme_encode_utf8.3: man/grapheme_encode_utf8.sh Makefile config.mk
    278 
    279 man/libgrapheme.7: man/libgrapheme.sh Makefile config.mk
    280 
    281 $(GEN:=.o) gen/util.o:
    282 	$(BUILD_CC) -c -o $@ $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) $(@:.o=.c)
    283 
    284 $(GEN2:=.o) gen2/util.o:
    285 	$(BUILD_CC) -c -o $@ $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) $(@:.o=.c)
    286 
    287 $(BENCHMARK:=.o) benchmark/util.o $(TEST:=.o) test/util.o:
    288 	$(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(@:.o=.c)
    289 
    290 $(SRC:=.o):
    291 	$(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(SHFLAGS) $(@:.o=.c)
    292 
    293 $(BENCHMARK:=$(BINSUFFIX)):
    294 	$(CC) -o $@ $(LDFLAGS) $(@:$(BINSUFFIX)=.o) benchmark/util.o $(ANAME) -lutf8proc
    295 
    296 $(GEN:=$(BINSUFFIX)):
    297 	$(BUILD_CC) -o $@ $(BUILD_LDFLAGS) $(@:$(BINSUFFIX)=.o) gen/util.o
    298 
    299 $(GEN2:=$(BINSUFFIX)):
    300 	$(BUILD_CC) -o $@ $(BUILD_LDFLAGS) $(@:$(BINSUFFIX)=.o) gen2/util.o
    301 
    302 $(TEST:=$(BINSUFFIX)):
    303 	$(CC) -o $@ $(LDFLAGS) $(@:$(BINSUFFIX)=.o) test/util.o $(ANAME)
    304 
    305 $(GEN:=.h):
    306 	$(@:.h=$(BINSUFFIX)) > $@
    307 
    308 $(GEN2:=.gen.h):
    309 	$(@:.gen.h=$(BINSUFFIX)) > $@
    310 
    311 $(ANAME): $(SRC:=.o)
    312 	$(AR) -rc $@ $?
    313 	$(RANLIB) $@
    314 
    315 $(SONAME): $(SRC:=.o)
    316 	$(CC) -o $@ $(SOFLAGS) $(LDFLAGS) $(SRC:=.o)
    317 
    318 $(MAN3:=.3):
    319 	SH="$(SH)" MAN_DATE="$(MAN_DATE)" UNICODE_VERSION="$(UNICODE_VERSION)" $(SH) $(@:.3=.sh) > $@
    320 
    321 $(MAN7:=.7):
    322 	SH="$(SH)" MAN_DATE="$(MAN_DATE)" UNICODE_VERSION="$(UNICODE_VERSION)" $(SH) $(@:.7=.sh) > $@
    323 
    324 benchmark: $(BENCHMARK:=$(BINSUFFIX))
    325 	for m in $(BENCHMARK:=$(BINSUFFIX)); do ./$$m; done
    326 
    327 check: test
    328 
    329 test: $(TEST:=$(BINSUFFIX))
    330 	for m in $(TEST:=$(BINSUFFIX)); do ./$$m; done
    331 
    332 install: all
    333 	mkdir -p "$(DESTDIR)$(LIBPREFIX)"
    334 	mkdir -p "$(DESTDIR)$(INCPREFIX)"
    335 	mkdir -p "$(DESTDIR)$(MANPREFIX)/man3"
    336 	mkdir -p "$(DESTDIR)$(MANPREFIX)/man7"
    337 	cp -f $(MAN3:=.3) "$(DESTDIR)$(MANPREFIX)/man3"
    338 	cp -f $(MAN7:=.7) "$(DESTDIR)$(MANPREFIX)/man7"
    339 	cp -f $(ANAME) "$(DESTDIR)$(LIBPREFIX)"
    340 	cp -f $(SONAME) "$(DESTDIR)$(LIBPREFIX)/$(SONAME)"
    341 	if [ "$(SOSYMLINK)" = "true" ]; then i=0; while [ "$$i" -le $(VERSION_MINOR) ]; do ln -sf "$(SONAME)" "$(DESTDIR)$(LIBPREFIX)/libgrapheme.so.$(VERSION_MAJOR).$$i"; i=$$((i+1)); done; fi
    342 	if [ "$(SOSYMLINK)" = "true" ]; then ln -sf "$(SONAME)" "$(DESTDIR)$(LIBPREFIX)/libgrapheme.so.$(VERSION_MAJOR)"; fi
    343 	if [ "$(SOSYMLINK)" = "true" ]; then ln -sf "$(SONAME)" "$(DESTDIR)$(LIBPREFIX)/libgrapheme.so"; fi
    344 	cp -f grapheme.h "$(DESTDIR)$(INCPREFIX)"
    345 	if ! [ -z "$(LDCONFIG)" ]; then $(SHELL) -c "$(LDCONFIG)"; fi
    346 	if ! [ -z "$(PCPREFIX)" ]; then mkdir -p "$(DESTDIR)$(PCPREFIX)"; printf "Name: libgrapheme\nDescription: Unicode string library\nURL: https://libs.suckless.org/libgrapheme/\nVersion: $(VERSION)\nCflags: -I$(INCPREFIX)\nLibs: -L$(LIBPREFIX) -lgrapheme\n" > "$(DESTDIR)$(PCPREFIX)/libgrapheme.pc"; fi
    347 
    348 uninstall:
    349 	for m in $(MAN3:=.3); do rm -f "$(DESTDIR)$(MANPREFIX)/man3/`basename $$m`"; done
    350 	for m in $(MAN7:=.7); do rm -f "$(DESTDIR)$(MANPREFIX)/man7/`basename $$m`"; done
    351 	rm -f "$(DESTDIR)$(LIBPREFIX)/$(ANAME)"
    352 	rm -f "$(DESTDIR)$(LIBPREFIX)/$(SONAME)"
    353 	if [ "$(SOSYMLINK)" = "true" ]; then i=0; while [ "$$i" -le $(VERSION_MINOR) ]; do rm -f "$(DESTDIR)$(LIBPREFIX)/libgrapheme.so.$(VERSION_MAJOR).$$i"; i=$$((i+1)); done; fi
    354 	if [ "$(SOSYMLINK)" = "true" ]; then rm -f "$(DESTDIR)$(LIBPREFIX)/libgrapheme.so.$(VERSION_MAJOR)"; fi
    355 	if [ "$(SOSYMLINK)" = "true" ]; then rm -f "$(DESTDIR)$(LIBPREFIX)/libgrapheme.so"; fi
    356 	rm -f "$(DESTDIR)$(INCPREFIX)/grapheme.h"
    357 	if ! [ -z "$(LDCONFIG)" ]; then $(SHELL) -c "$(LDCONFIG)"; fi
    358 	if ! [ -z "$(PCPREFIX)" ]; then rm -f "$(DESTDIR)$(PCPREFIX)/libgrapheme.pc"; fi
    359 
    360 clean:
    361 	rm -f $(BENCHMARK:=.o) benchmark/util.o $(BENCHMARK:=$(BINSUFFIX)) $(GEN:=.h) $(GEN:=.o) gen/util.o $(GEN:=$(BINSUFFIX)) $(GEN2:=.h) $(GEN2:=.o) gen2/util.o $(GEN2:=$(BINSUFFIX)) $(SRC:=.o) src/util.o $(TEST:=.o) test/util.o $(TEST:=$(BINSUFFIX)) $(ANAME) $(SONAME) $(MAN3:=.3) $(MAN7:=.7)
    362 
    363 clean-data:
    364 	rm -f $(DATA)
    365 
    366 dist:
    367 	rm -rf "libgrapheme-$(VERSION)"
    368 	mkdir "libgrapheme-$(VERSION)"
    369 	for m in benchmark data gen man man/template src test; do mkdir "libgrapheme-$(VERSION)/$$m"; done
    370 	cp config.mk configure grapheme.h LICENSE Makefile README "libgrapheme-$(VERSION)"
    371 	cp $(BENCHMARK:=.c) benchmark/util.c benchmark/util.h "libgrapheme-$(VERSION)/benchmark"
    372 	cp $(DATA) "libgrapheme-$(VERSION)/data"
    373 	cp $(GEN:=.c) gen/util.c gen/types.h gen/util.h "libgrapheme-$(VERSION)/gen"
    374 	cp $(MAN3:=.sh) $(MAN7:=.sh) "libgrapheme-$(VERSION)/man"
    375 	cp $(MAN_TEMPLATE) "libgrapheme-$(VERSION)/man/template"
    376 	cp $(SRC:=.c) src/util.h "libgrapheme-$(VERSION)/src"
    377 	cp $(TEST:=.c) test/util.c test/util.h "libgrapheme-$(VERSION)/test"
    378 	tar -cf - "libgrapheme-$(VERSION)" | gzip -c > "libgrapheme-$(VERSION).tar.gz"
    379 	rm -rf "libgrapheme-$(VERSION)"
    380 
    381 format:
    382 	clang-format -i grapheme.h $(BENCHMARK:=.c) benchmark/util.c benchmark/util.h $(GEN:=.c) gen/util.c gen/types.h gen/util.h $(SRC:=.c) src/util.h $(TEST:=.c) test/util.c test/util.h
    383 
    384 .PHONY: all benchmark check clean clean-data dist format install test uninstall