Edit

kc3-lang/kc3/Makefile

Branch :

  • Makefile
  • ## kc3
    ## Copyright from 2022 to 2025 kmx.io <contact@kmx.io>
    ##
    ## Permission is hereby granted to use this software granted the above
    ## copyright notice and this permission paragraph are included in all
    ## copies and substantial portions of this software.
    ##
    ## THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
    ## PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
    ## AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
    ## THIS SOFTWARE.
    
    all:
    	${MAKE} gen
    	${MAKE} -C libtommath all
    	${MAKE} -C libkc3 all
    	${MAKE} -C socket all
    	${MAKE} -C tls all
    	${MAKE} -C ikc3 all
    	${MAKE} -C kc3s all
    	${MAKE} -C kpkg all
    	${MAKE} -C ekc3 all
    	${MAKE} -C event all
    	${MAKE} -C json all
    	${MAKE} -C markdown all
    	${MAKE} -C pdf all
    	${MAKE} -C smtp all
    	${MAKE} -C http all
    	${MAKE} -C httpd all
    	${MAKE} -C test all
    	${MAKE} -C gl all
    	${MAKE} -C window all
    	if ${HAVE_GTK4}; then ${MAKE} -C gtk4 all; fi
    
    include config.mk
    include sources.mk
    
    android:
    	cd android/egl/demo && gradle assembleDebug
    
    asan:
    	${MAKE} gen
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C ekc3 asan
    	${MAKE} -C event asan
    	${MAKE} -C json asan
    	${MAKE} -C markdown asan
    	${MAKE} -C pdf asan
    	${MAKE} -C smtp asan
    	${MAKE} -C http asan
    	${MAKE} -C httpd asan
    	${MAKE} -C test asan
    	${MAKE} -C gl asan
    	${MAKE} -C window asan
    	if ${HAVE_GTK4}; then ${MAKE} -C gtk4 asan; fi
    
    assets:
    	make -C test/httpd/assets
    
    build:
    	${MAKE} gen
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    	${MAKE} -C kc3s build
    	${MAKE} -C ekc3 build
    	${MAKE} -C event build
    	${MAKE} -C json build
    	${MAKE} -C markdown build
    	${MAKE} -C pdf build
    	${MAKE} -C smtp build
    	${MAKE} -C http build
    	${MAKE} -C httpd build
    	${MAKE} -C test build
    	${MAKE} -C gl build
    	${MAKE} -C window build
    	if ${HAVE_GTK4}; then ${MAKE} -C gtk4 build; fi
    
    clean::
    	${MAKE} -C libtommath clean
    	${MAKE} -C libkc3 clean
    	${MAKE} -C socket clean
    	${MAKE} -C tls clean
    	${MAKE} -C ikc3 clean
    	${MAKE} -C kc3s clean
    	${MAKE} -C kc3s clean
    	${MAKE} -C ekc3 clean
    	${MAKE} -C event clean
    	${MAKE} -C json clean
    	${MAKE} -C markdown clean
    	${MAKE} -C pdf clean
    	${MAKE} -C smtp clean
    	${MAKE} -C http clean
    	${MAKE} -C httpd clean
    	${MAKE} -C test clean
    	${MAKE} -C gl clean
    	${MAKE} -C window clean
    	${MAKE} -C gtk4 clean
    
    clean_cov::
    	${MAKE} -C libtommath clean_cov
    	${MAKE} -C libkc3 clean_cov
    	${MAKE} -C socket clean_cov
    	${MAKE} -C tls clean_cov
    	${MAKE} -C ikc3 clean_cov
    	${MAKE} -C kc3s clean_cov
    	${MAKE} -C kc3s clean_cov
    	${MAKE} -C ekc3 clean_cov
    	${MAKE} -C event clean_cov
    	${MAKE} -C json clean_cov
    	${MAKE} -C markdown clean_cov
    	${MAKE} -C pdf clean_cov
    	${MAKE} -C smtp clean_cov
    	${MAKE} -C http clean_cov
    	${MAKE} -C httpd clean_cov
    	${MAKE} -C test clean_cov
    	${MAKE} -C gl clean_cov
    	${MAKE} -C window clean_cov
    	${MAKE} -C gtk4 clean_cov
    
    clean_dump:
    	rm -f lib/kc3/0.1/kc3.dump
    	rm -f lib/kc3/0.1/kpkg.dump
    	rm -f test/httpd/kc3.dump
    	rm -f httpd/fx/kc3.dump
    
    cov:
    	${MAKE} gen
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C kc3s cov
    	${MAKE} -C kc3s cov
    	${MAKE} -C ekc3 cov
    	${MAKE} -C event cov
    	${MAKE} -C json cov
    	${MAKE} -C markdown cov
    	${MAKE} -C pdf cov
    	${MAKE} -C smtp cov
    	${MAKE} -C http cov
    	${MAKE} -C httpd cov
    	${MAKE} -C test cov
    	${MAKE} -C gl cov
    	${MAKE} -C window cov
    	if ${HAVE_GTK4}; then ${MAKE} -C gtk4 cov; fi
    
    debug:
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C ekc3 debug
    	${MAKE} -C event debug
    	${MAKE} -C json debug
    	${MAKE} -C markdown debug
    	${MAKE} -C pdf debug
    	${MAKE} -C smtp debug
    	${MAKE} -C http debug
    	${MAKE} -C httpd debug
    	${MAKE} -C test debug
    	${MAKE} -C gl debug
    	${MAKE} -C window debug
    	if ${HAVE_GTK4}; then ${MAKE} -C gtk4 debug; fi
    
    demo: build
    	${MAKE} -C window demo
    
    demo_asan: asan
    	${MAKE} -C window demo_asan
    
    demo_cairo: build
    	${MAKE} -C window demo_cairo
    
    demo_cairo_asan: asan
    	${MAKE} -C window demo_cairo_asan
    
    demo_cairo_cov: cov
    	${MAKE} -C window demo_cairo_cov
    
    demo_cairo_debug: debug
    	${MAKE} -C window demo_cairo_debug
    
    demo_cov: cov
    	${MAKE} -C window demo_cov
    
    demo_debug: debug
    	${MAKE} -C window demo_debug
    
    demo_drm: build
    	${MAKE} -C window/egl/drm demo
    
    demo_drm_asan: asan
    	${MAKE} -C window/egl/drm demo_asan
    
    demo_drm_cov: cov
    	${MAKE} -C window/egl/drm demo_cov
    
    demo_drm_debug: debug
    	${MAKE} -C window/egl/drm demo_debug
    
    demo_egl: build
    	${MAKE} -C window demo_egl
    
    demo_egl_asan: asan
    	${MAKE} -C window demo_egl_asan
    
    demo_egl_cov: cov
    	${MAKE} -C window demo_egl_cov
    
    demo_egl_debug: debug
    	${MAKE} -C window demo_egl_debug
    
    demo_gl: build
    	${MAKE} -C window demo_gl
    
    demo_gl_asan: asan
    	${MAKE} -C window demo_gl_asan
    
    demo_gl_cov: cov
    	${MAKE} -C window demo_gl_cov
    
    demo_gl_debug: debug
    	${MAKE} -C window demo_gl_debug
    
    demo_kubz: build
    	${MAKE} -C window/sdl2/kubz demo
    
    demo_kubz_debug: debug
    	${MAKE} -C window/sdl2/kubz demo_debug
    
    dist: kc3-${KC3_VERSION}.tar.gz
    
    DIST_DMG = kc3-v${KC3_VERSION}-${MACHINE}
    
    dist_dmg:
    	mkdir -p out/dmg
    	cd out/dmg && \
    	    DESTDIR="$$PWD/install" ../../configure --prefix /Applications/kc3 && \
    	    make -j8 && \
    	    make install && \
    	    ${SRC_TOP}/bin/update_dyld "$$PWD/install" && \
    	    mkdir -p ${DIST_DMG} && \
    	    cp -R install/Applications/kc3 ${DIST_DMG}/ && \
    	    ln -sf /Applications ${DIST_DMG}/ && \
    	    if [ -f ${SRC_TOP}/img/dmg_background.png ]; then \
    	        mkdir -p ${DIST_DMG}/.background && \
    	        cp ${SRC_TOP}/img/dmg_background.png ${DIST_DMG}/.background/; \
    	    fi && \
    	    hdiutil create -volname "KC3 v${KC3_VERSION}" \
    		-srcfolder ${DIST_DMG} -ov -format UDRW ${DIST_DMG}.tmp.dmg && \
    	    hdiutil attach ${DIST_DMG}.tmp.dmg -mountpoint /Volumes/KC3 && \
    	    sleep 5 && \
    	    osascript -e 'with timeout of 300 seconds' \
    		-e 'tell application "Finder"' \
    		-e 'tell disk "KC3"' \
    		-e 'open' \
    		-e 'delay 2' \
    		-e 'set current view of container window to icon view' \
    		-e 'set toolbar visible of container window to false' \
    		-e 'set statusbar visible of container window to false' \
    		-e 'set the bounds of container window to {100, 100, 700, 500}' \
    		-e 'set viewOptions to the icon view options of container window' \
    		-e 'set arrangement of viewOptions to not arranged' \
    		-e 'set icon size of viewOptions to 128' \
    		-e 'try' \
    		-e 'set background picture of viewOptions to file ".background:dmg_background.png"' \
    		-e 'end try' \
    		-e 'delay 2' \
    		-e 'try' \
    		-e 'set position of item "kc3" to {150, 200}' \
    		-e 'set position of item "Applications" to {450, 200}' \
    		-e 'end try' \
    		-e 'delay 2' \
    		-e 'update without registering applications' \
    		-e 'delay 3' \
    		-e 'close' \
    		-e 'end tell' \
    		-e 'end tell' \
    		-e 'end timeout' && \
    	    sync && \
    	    hdiutil detach /Volumes/KC3 && \
    	    sync && \
    	    sleep 15 && \
    	    cp ${DIST_DMG}.tmp.dmg ${DIST_DMG}.tmp2.dmg && \
    	    rm -f ${DIST_DMG}.dmg && \
    	    hdiutil convert ${DIST_DMG}.tmp2.dmg -format UDZO -o ${DIST_DMG}.dmg && \
    	    rm ${DIST_DMG}.tmp.dmg ${DIST_DMG}.tmp2.dmg
    
    dist_msys2_clang64: all
    	${MAKE} -C msys2/clang64
    
    distclean::
    	${MAKE} -C libtommath distclean
    	${MAKE} -C libkc3 distclean
    	${MAKE} -C socket distclean
    	${MAKE} -C tls distclean
    	${MAKE} -C ikc3 distclean
    	${MAKE} -C kc3s distclean
    	${MAKE} -C ekc3 distclean
    	${MAKE} -C event distclean
    	${MAKE} -C json distclean
    	${MAKE} -C markdown distclean
    	${MAKE} -C pdf distclean
    	${MAKE} -C smtp distclean
    	${MAKE} -C http distclean
    	${MAKE} -C httpd distclean
    	${MAKE} -C test distclean
    	${MAKE} -C gl distclean
    	${MAKE} -C window distclean
    	${MAKE} -C gtk4 distclean
    
    dump:
    	${MAKE} clean_dump
    	kc3s/kc3s --trace --dump lib/kc3/0.1/kc3.dump --quit
    	${MAKE} -C kpkg dump
    	${MAKE} -C test/httpd dump
    	${MAKE} -C httpd/fx dump
    
    dump_debug:
    	${MAKE} clean_dump
    	kc3s/kc3s_debug --trace --dump lib/kc3/0.1/kc3.dump --quit
    	${MAKE} -C kpkg dump_debug
    	${MAKE} -C test/httpd dump_debug
    
    dump_fx:
    	${MAKE} -C httpd/fx clean_dump
    	${MAKE} -C httpd/fx dump
    
    ekc3:
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    	${MAKE} -C ekc3 build
    
    ekc3_asan:
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C ekc3 asan
    
    ekc3_cov:
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C kc3s cov
    	${MAKE} -C ekc3 cov
    
    ekc3_debug:
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C ekc3 debug
    
    event:
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    	${MAKE} -C event build
    
    event_asan:
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C event asan
    
    event_cov:
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C kc3s cov
    	${MAKE} -C event cov
    
    event_debug:
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C event debug
    
    fx:
    	${MAKE} -C httpd fx
    
    fx_asan:
    	${MAKE} -C httpd fx_asan
    
    fx_cov:
    	${MAKE} -C httpd fx_cov
    
    fx_debug:
    	${MAKE} -C httpd fx_debug
    
    gcovr:
    	${MAKE} -C libkc3 gcovr
    	${MAKE} -C socket gcovr
    	${MAKE} -C tls gcovr
    	${MAKE} -C ikc3 gcovr
    	${MAKE} -C kc3s gcovr
    	${MAKE} -C kc3s gcovr
    	${MAKE} -C ekc3 gcovr
    	${MAKE} -C event gcovr
    	${MAKE} -C json gcovr
    	${MAKE} -C markdown gcovr
    	${MAKE} -C pdf gcovr
    	${MAKE} -C smtp gcovr
    	${MAKE} -C http gcovr
    	${MAKE} -C httpd gcovr
    	${MAKE} -C test gcovr
    	${MAKE} -C window gcovr
    	if ${HAVE_GTK4}; then ${MAKE} -C gtk4 gcovr; fi
    	if [ -d "$$HOME/Downloads/kc3_gcovr" ]; then bin/gcovr-to-downloads; fi
    
    gdb_demo: debug lib_links_debug
    	${MAKE} -C libkc3 gdb_demo
    
    gdb_demo_egl: debug lib_links_debug
    	${MAKE} -C window/egl gdb_demo
    
    gdb_demo_gl: debug lib_links_debug
    	${MAKE} -C window/sdl2 gdb_demo
    
    gdb_demo_kubz: debug lib_links_debug
    	${MAKE} -C window/sdl2/kubz gdb_demo
    
    gdb_dump: debug
    	${MAKE} clean_dump
    	gdb kc3s/kc3s_debug
    
    gdb_fx: httpd_debug lib_links_debug
    	${MAKE} -C httpd gdb_fx
    
    gdb_fx_asan: httpd_asan lib_links_asan
    	${MAKE} -C httpd gdb_fx_asan
    
    gdb_ikc3: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 gdb_ikc3
    
    gdb_ikc3_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 gdb_ikc3_asan
    
    gdb_kmsg: lib_links_debug
    	${MAKE} gen
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C gtk4 debug
    	${MAKE} -C kmsg gdb
    
    gdb_kubz: debug lib_links_debug
    	${MAKE} -C window gdb_kubz
    
    gdb_test: debug lib_links_debug
    	${MAKE} -C test gdb_test
    
    gdb_test_asan: asan lib_links_asan
    	${MAKE} -C test gdb_test_asan
    
    gdb_test_ekc3: debug lib_links_debug
    	${MAKE} -C test gdb_test_ekc3
    
    gdb_test_http: debug lib_links_debug
    	${MAKE} -C test gdb_test_http
    
    gdb_test_http_asan: asan lib_links_asan
    	${MAKE} -C test gdb_test_http_asan
    
    gdb_test_httpd: debug lib_links_debug
    	${MAKE} -C test gdb_test_httpd
    
    gdb_test_httpd_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C ekc3 asan
    	${MAKE} -C event asan
    	${MAKE} -C json asan
    	${MAKE} -C markdown asan
    	${MAKE} -C pdf asan
    	${MAKE} -C smtp asan
    	${MAKE} -C http asan
    	${MAKE} -C httpd asan
    	${MAKE} -C test gdb_test_httpd_asan
    
    gdb_test_ikc3: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C test gdb_test_ikc3
    
    gdb_test_ikc3_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C test gdb_test_ikc3_asan
    
    gdb_test_json: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C json debug
    	${MAKE} -C test gdb_test_json
    
    gdb_test_json_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C json asan
    	${MAKE} -C test gdb_test_json_asan
    
    gdb_test_markdown: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C markdown debug
    	${MAKE} -C test gdb_test_markdown
    
    gdb_test_markdown_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C markdown asan
    	${MAKE} -C test gdb_test_markdown_asan
    
    gdb_test_pdf: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C pdf debug
    	${MAKE} -C test gdb_test_pdf
    
    gdb_test_pdf_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C pdf asan
    	${MAKE} -C test gdb_test_pdf_asan
    
    gdb_test_tls: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C test gdb_test_tls
    
    gdb_test_tls_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C test gdb_test_tls_asan
    
    gen:
    	${MAKE} -C libkc3 gen
    
    gtk4:
    	${HAVE_GTK4} || echo "please install gtk+4"
    	${MAKE} gen
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    	${MAKE} -C gtk4 build
    
    gtk4_asan:
    	${HAVE_GTK4} || echo "please install gtk+4"
    	${MAKE} gen
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C gtk4 asan
    
    gtk4_cov:
    	${HAVE_GTK4} || echo "please install gtk+4"
    	${MAKE} gen
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C kc3s cov
    	${MAKE} -C gtk4 cov
    
    gtk4_debug:
    	${HAVE_GTK4} || echo "please install gtk+4"
    	${MAKE} gen
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C gtk4 debug
    
    http:
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    	${MAKE} -C ekc3 build
    	${MAKE} -C event build
    	${MAKE} -C json build
    	${MAKE} -C markdown build
    	${MAKE} -C pdf build
    	${MAKE} -C http build
    
    httpd:
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    	${MAKE} -C ekc3 build
    	${MAKE} -C event build
    	${MAKE} -C json build
    	${MAKE} -C markdown build
    	${MAKE} -C pdf build
    	${MAKE} -C http build
    	${MAKE} -C httpd build
    
    httpd_debug:
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C ekc3 debug
    	${MAKE} -C event debug
    	${MAKE} -C json debug
    	${MAKE} -C markdown debug
    	${MAKE} -C pdf debug
    	${MAKE} -C http debug
    	${MAKE} -C httpd debug
    
    ikc3:
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    
    ikc3_asan:
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    
    ikc3_cov:
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    
    ikc3_debug:
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    
    ikc3_gcovr:
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} clean_cov
    	${MAKE} ikc3_test_cov
    	${MAKE} gcovr
    
    install:
    	${INSTALL} -m 0755 -d ${DESTDIR}${prefix}/lib/kc3
    	${INSTALL} -m 0755 -d ${DESTDIR}${prefix}/lib/kc3/0.1
    	( cd ${SRC_DIR} && find lib/kc3/ -type d; ) | while read F; do \
    	    ${INSTALL} -m 0755 -d ${DESTDIR}${prefix}/"$$F"; done
    	${INSTALL} -m 0644 ${SRC_DIR}/lib/kc3/0.1/kc3.dump \
    	    ${DESTDIR}${prefix}/lib/kc3/0.1/kc3.dump
    	( cd ${SRC_DIR} && \
    	  find lib/kc3 -name '*.facts' -or -name '*.kc3'; ) | \
    	      while read F; do ${INSTALL} -m 0644 "${SRC_DIR}/$$F" \
    		  "${DESTDIR}${prefix}/$$F"; done
    	${INSTALL} -m 0755 -d ${DESTDIR}${prefix}/share/kc3
    	( cd ${SRC_DIR} && find img -type d; ) | while read F; do \
    	    ${INSTALL} -m 0755 -d ${DESTDIR}${prefix}/share/kc3/"$$F"; done
    	( cd ${SRC_DIR} && find img -name '*.png' -or -name '*.jpg'; ) | \
    	    while read F; do ${INSTALL} -m 0644 "${SRC_DIR}/$$F" \
    		      "${DESTDIR}${prefix}/share/kc3/$$F"; done
    	${MAKE} -C libtommath install
    	${MAKE} -C libkc3 install
    	${MAKE} -C socket install
    	${MAKE} -C tls install
    	${MAKE} -C ikc3 install
    	${MAKE} -C kc3s install
    	${MAKE} -C kc3s install
    	${MAKE} -C ekc3 install
    	${MAKE} -C event install
    	${MAKE} -C json install
    	${MAKE} -C markdown install
    	${MAKE} -C pdf install
    	${MAKE} -C smtp install
    	${MAKE} -C http install
    	${MAKE} -C httpd install
    	${MAKE} -C gl install
    	${MAKE} -C window install
    	if ${HAVE_GTK4}; then ${MAKE} -C gtk4 install; fi
    	${MAKE} install_lib_links
    
    install_lib_links:
    	${MAKE} install_lib_links_${ARCH}
    
    install_lib_links_bsd:
    	ln -sf ../../libekc3.so.0.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/ekc3.so
    	ln -sf ../../libkc3_event.so.0.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/event.so
    	ln -sf ../../libkc3_gtk4.so.0.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/gtk4.so
    	ln -sf ../../libkc3_http.so.0.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/http.so
    	ln -sf ../../libkc3_json.so.0.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/json.so
    	ln -sf ../../libkc3_markdown.so.0.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/markdown.so
    	ln -sf ../../libkc3_pdf.so.0.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/pdf.so
    	ln -sf ../../libkc3_socket.so.0.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/socket.so
    	ln -sf ../../libkc3_tls.so.0.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/tls.so
    
    install_lib_links_darwin:
    	ln -sf ../../libekc3.0.dylib ${DESTDIR}${prefix}/lib/kc3/0.1/ekc3.so
    	ln -sf ../../libkc3_event.0.dylib ${DESTDIR}${prefix}/lib/kc3/0.1/event.so
    	ln -sf ../../libkc3_gtk4.0.dylib ${DESTDIR}${prefix}/lib/kc3/0.1/gtk4.so
    	ln -sf ../../libkc3_http.0.dylib ${DESTDIR}${prefix}/lib/kc3/0.1/http.so
    	ln -sf ../../libkc3_json.0.dylib ${DESTDIR}${prefix}/lib/kc3/0.1/json.so
    	ln -sf ../../libkc3_markdown.0.dylib ${DESTDIR}${prefix}/lib/kc3/0.1/markdown.so
    	ln -sf ../../libkc3_pdf.0.dylib ${DESTDIR}${prefix}/lib/kc3/0.1/pdf.so
    	ln -sf ../../libkc3_smtp.so.0.dylib ${DESTDIR}${prefix}/lib/kc3/0.1/smtp.so
    	ln -sf ../../libkc3_socket.0.dylib ${DESTDIR}${prefix}/lib/kc3/0.1/socket.so
    	ln -sf ../../libkc3_tls.0.dylib ${DESTDIR}${prefix}/lib/kc3/0.1/tls.so
    
    install_lib_links_linux:
    	ln -sf ../../libekc3.so ${DESTDIR}${prefix}/lib/kc3/0.1/ekc3.so
    	ln -sf ../../libkc3_event.so ${DESTDIR}${prefix}/lib/kc3/0.1/event.so
    	ln -sf ../../libkc3_gtk4.so ${DESTDIR}${prefix}/lib/kc3/0.1/gtk4.so
    	ln -sf ../../libkc3_http.so ${DESTDIR}${prefix}/lib/kc3/0.1/http.so
    	ln -sf ../../libkc3_json.so ${DESTDIR}${prefix}/lib/kc3/0.1/json.so
    	ln -sf ../../libkc3_markdown.so ${DESTDIR}${prefix}/lib/kc3/0.1/markdown.so
    	ln -sf ../../libkc3_pdf.so ${DESTDIR}${prefix}/lib/kc3/0.1/pdf.so
    	ln -sf ../../libkc3_smtp.so ${DESTDIR}${prefix}/lib/kc3/0.1/smtp.so
    	ln -sf ../../libkc3_socket.so ${DESTDIR}${prefix}/lib/kc3/0.1/socket.so
    	ln -sf ../../libkc3_tls.so ${DESTDIR}${prefix}/lib/kc3/0.1/tls.so
    
    install_lib_links_openbsd:
    	ln -sf ../../libekc3.so.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/ekc3.so
    	ln -sf ../../libkc3_event.so.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/event.so
    	ln -sf ../../libkc3_gtk4.so.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/gtk4.so
    	ln -sf ../../libkc3_http.so.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/http.so
    	ln -sf ../../libkc3_json.so.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/json.so
    	ln -sf ../../libkc3_markdown.so.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/markdown.so
    	ln -sf ../../libkc3_pdf.so.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/pdf.so
    	ln -sf ../../libkc3_smtp.so.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/smtp.so
    	ln -sf ../../libkc3_socket.so.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/socket.so
    	ln -sf ../../libkc3_tls.so.0.0 ${DESTDIR}${prefix}/lib/kc3/0.1/tls.so
    
    install_lib_links_windows:
    	ln -sf ../../../bin/libekc3-0.dll ${DESTDIR}${prefix}/lib/kc3/0.1/ekc3.so
    	ln -sf ../../../bin/libkc3_event-0.dll ${DESTDIR}${prefix}/lib/kc3/0.1/event.so
    	ln -sf ../../../bin/libkc3_gtk4-0.dll ${DESTDIR}${prefix}/lib/kc3/0.1/gtk4.so
    	ln -sf ../../../bin/libkc3_http-0.dll ${DESTDIR}${prefix}/lib/kc3/0.1/http.so
    	ln -sf ../../../bin/libkc3_json-0.dll ${DESTDIR}${prefix}/lib/kc3/0.1/json.so
    	ln -sf ../../../bin/libkc3_markdown-0.dll ${DESTDIR}${prefix}/lib/kc3/0.1/markdown.so
    	ln -sf ../../../bin/libkc3_pdf-0.dll ${DESTDIR}${prefix}/lib/kc3/0.1/pdf.so
    	ln -sf ../../../bin/libkc3_smtp-0.dll ${DESTDIR}${prefix}/lib/kc3/0.1/smtp.so
    	ln -sf ../../../bin/libkc3_socket-0.dll ${DESTDIR}${prefix}/lib/kc3/0.1/socket.so
    	ln -sf ../../../bin/libkc3_tls-0.dll ${DESTDIR}${prefix}/lib/kc3/0.1/tls.so
    
    json:
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C json build
    
    json_asan:
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C json asan
    
    json_cov:
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C json cov
    
    json_debug:
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C json debug
    
    kc3-${KC3_VERSION}.tar.gz: kc3.index
    	rm -rf kc3-${KC3_VERSION}.old
    	-mv kc3-${KC3_VERSION} kc3-${KC3_VERSION}.old
    	mkdir kc3-${KC3_VERSION}
    	pax -rw < kc3.index kc3-${KC3_VERSION}
    	pax -wz kc3-${KC3_VERSION} > kc3-${KC3_VERSION}.tar.gz
    
    kc3.index: sources.mk Makefile
    	for F in ${KC3_EXTERNAL_SOURCES}; do echo "$$F"; done > kc3.index.tmp
    	for F in ${KC3_CONFIGURES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_MAKEFILES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_C_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_CXX_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_FONT_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_HTTPD_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_IMG_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_KMSG_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_LIB_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_OBJC_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_PLIST_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_SH_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_TEST_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_TEST_IKC3_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_TEST_EKC3_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_TEST_HTTP_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_TEST_HTTPD_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_TEST_JSON_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_TEST_KC3S_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_TEST_MARKDOWN_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_TEST_PDF_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_OTHER_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	for F in ${KC3_DOC_SOURCES}; do echo "$$F"; done >> kc3.index.tmp
    	sort -u < kc3.index.tmp > kc3.index
    	rm kc3.index.tmp
    
    kc3s:
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C kc3s build
    
    kc3s_asan:
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C kc3s asan
    
    kc3s_cov:
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C kc3s cov
    
    kc3s_debug:
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C kc3s debug
    
    kmsg:
    	${MAKE} gen
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    	${MAKE} -C gtk4 build
    	${MAKE} -C kmsg
    
    kmsg_asan:
    	${MAKE} gen
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C gtk4 asan
    	${MAKE} -C kmsg run_asan
    
    kmsg_debug:
    	${MAKE} gen
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C gtk4 debug
    	${MAKE} -C kmsg run_debug
    
    kpkg:
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    	${MAKE} -C kpkg build
    
    kpkg_asan:
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C kpkg asan
    
    kpkg_cov:
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C kc3s cov
    	${MAKE} -C kpkg cov
    
    kpkg_debug:
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C kpkg debug
    
    kubz:
    	${MAKE} build
    	window/sdl2/kubz/kubz
    
    kubz_asan:
    	${MAKE} asan
    	window/sdl2/kubz/kubz_asan
    
    kubz_debug:
    	${MAKE} debug
    	window/sdl2/kubz/kubz_debug
    
    lib:
    	if [ "x${SRC_TOP}" != "x${BUILD_TOP}" ]; then \
    		rm -rf ${BUILD_TOP}/lib && \
    		cd ${SRC_TOP} && \
    		find lib -name '*.kc3' -or \
    			 -name '*.facts' -or \
    			 -name '*.dump' | \
    			pax -rwd ${BUILD_TOP}/; fi
    
    lib_links: lib
    	${MAKE} lib_links_${ARCH}
    
    lib_links_asan: lib
    	${MAKE} lib_links_${ARCH}_asan
    
    lib_links_bsd:
    	ln -sf ../../../ekc3/libekc3.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../socket/libkc3_socket.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    lib_links_bsd_asan:
    	ln -sf ../../../ekc3/libekc3_asan.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event_asan.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4_asan.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http_asan.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json_asan.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown_asan.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf_asan.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../socket/libkc3_socket_asan.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls_asan.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    lib_links_bsd_debug:
    	ln -sf ../../../ekc3/libekc3_debug.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event_debug.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4_debug.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http_debug.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json_debug.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown_debug.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf_debug.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../socket/libkc3_socket_debug.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls_debug.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    lib_links_cov: lib
    	${MAKE} lib_links_${ARCH}_cov
    
    lib_links_debug: lib
    	${MAKE} lib_links_${ARCH}_debug
    
    lib_links_darwin:
    	ln -sf ../../../ekc3/libekc3.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../smtp/libkc3_smtp.${SHARED_EXT} lib/kc3/0.1/smtp.so
    	ln -sf ../../../socket/libkc3_socket.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    lib_links_darwin_debug:
    	ln -sf ../../../ekc3/libekc3_debug.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event_debug.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4_debug.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http_debug.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json_debug.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown_debug.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf_debug.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../smtp/libkc3_smtp_debug.${SHARED_EXT} lib/kc3/0.1/smtp.so
    	ln -sf ../../../socket/libkc3_socket_debug.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls_debug.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    lib_links_linux:
    	ln -sf ../../../ekc3/libekc3.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../smtp/libkc3_smtp.${SHARED_EXT} lib/kc3/0.1/smtp.so
    	ln -sf ../../../socket/libkc3_socket.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    lib_links_linux_asan:
    	ln -sf ../../../ekc3/libekc3_asan.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event_asan.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4_asan.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http_asan.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json_asan.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown_asan.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf_asan.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../smtp/libkc3_smtp_asan.${SHARED_EXT} lib/kc3/0.1/smtp.so
    	ln -sf ../../../socket/libkc3_socket_asan.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls_asan.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    lib_links_linux_cov:
    	ln -sf ../../../ekc3/libekc3_cov.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event_cov.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4_cov.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http_cov.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json_cov.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown_cov.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf_cov.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../smtp/libkc3_smtp_cov.${SHARED_EXT} lib/kc3/0.1/smtp.so
    	ln -sf ../../../socket/libkc3_socket_cov.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls_cov.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    lib_links_linux_debug:
    	ln -sf ../../../ekc3/libekc3_debug.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event_debug.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4_debug.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http_debug.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json_debug.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown_debug.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf_debug.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../smtp/libkc3_smtp_debug.${SHARED_EXT} lib/kc3/0.1/smtp.so
    	ln -sf ../../../socket/libkc3_socket_debug.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls_debug.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    lib_links_openbsd:
    	ln -sf ../../../ekc3/libekc3.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../smtp/libkc3_smtp.${SHARED_EXT} lib/kc3/0.1/smtp.so
    	ln -sf ../../../socket/libkc3_socket.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    lib_links_openbsd_debug:
    	ln -sf ../../../ekc3/libekc3_debug.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event_debug.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4_debug.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http_debug.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json_debug.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown_debug.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf_debug.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../smtp/libkc3_smtp_debug.${SHARED_EXT} lib/kc3/0.1/smtp.so
    	ln -sf ../../../socket/libkc3_socket_debug.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls_debug.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    lib_links_clean:
    	rm -f lib/kc3/0.1/ekc3.so
    	rm -f lib/kc3/0.1/event.so
    	rm -f lib/kc3/0.1/gtk4.so
    	rm -f lib/kc3/0.1/http.so
    	rm -f lib/kc3/0.1/json.so
    	rm -f lib/kc3/0.1/markdown.so
    	rm -f lib/kc3/0.1/pdf.so
    	rm -f lib/kc3/0.1/smtp.so
    	rm -f lib/kc3/0.1/socket.so
    	rm -f lib/kc3/0.1/tls.so
    
    lib_links_windows:
    	ln -sf ../../../ekc3/libekc3.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../smtp/libkc3_smtp.${SHARED_EXT} lib/kc3/0.1/smtp.so
    	ln -sf ../../../socket/libkc3_socket.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    lib_links_windows_debug:
    	ln -sf ../../../ekc3/libekc3_debug.${SHARED_EXT} lib/kc3/0.1/ekc3.so
    	ln -sf ../../../event/libkc3_event_debug.${SHARED_EXT} lib/kc3/0.1/event.so
    	ln -sf ../../../gtk4/libkc3_gtk4_debug.${SHARED_EXT} lib/kc3/0.1/gtk4.so
    	ln -sf ../../../http/libkc3_http_debug.${SHARED_EXT} lib/kc3/0.1/http.so
    	ln -sf ../../../json/libkc3_json_debug.${SHARED_EXT} lib/kc3/0.1/json.so
    	ln -sf ../../../markdown/libkc3_markdown_debug.${SHARED_EXT} lib/kc3/0.1/markdown.so
    	ln -sf ../../../pdf/libkc3_pdf_debug.${SHARED_EXT} lib/kc3/0.1/pdf.so
    	ln -sf ../../../smtp/libkc3_smtp_debug.${SHARED_EXT} lib/kc3/0.1/smtp.so
    	ln -sf ../../../socket/libkc3_socket_debug.${SHARED_EXT} lib/kc3/0.1/socket.so
    	ln -sf ../../../tls/libkc3_tls_debug.${SHARED_EXT} lib/kc3/0.1/tls.so
    
    libkc3_gcovr:
    	${MAKE} clean_cov
    	${MAKE} libkc3_test_cov
    	${MAKE} gcovr
    
    license:
    	update_header config.subr ${KC3_CONFIGURES}
    	update_header Makefile ${KC3_MAKEFILES}
    	update_header libkc3/license.c ${KC3_C_SOURCES}
    
    lldb_demo:
    	${MAKE} debug
    	${MAKE} -C window/cairo lldb_demo
    
    lldb_demo_gl:
    	${MAKE} debug
    	${MAKE} -C window/sdl2 lldb_demo
    
    lldb_ikc3:
    	${MAKE} debug
    	${MAKE} -C ikc3 lldb_ikc3
    
    lldb_test:
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C kpkg debug
    	${MAKE} -C ekc3 debug
    	${MAKE} -C event debug
    	${MAKE} -C json debug
    	${MAKE} -C markdown debug
    	${MAKE} -C pdf debug
    	${MAKE} -C smtp debug
    	${MAKE} -C http debug
    	${MAKE} -C httpd debug
    	${MAKE} -C test lldb_test
    
    markdown:
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C markdown build
    
    markdown_asan:
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C markdown asan
    
    markdown_cov:
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C markdown cov
    
    markdown_debug:
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C markdown debug
    
    pdf:
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C pdf build
    
    pdf_asan:
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C pdf asan
    
    pdf_cov:
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C pdf cov
    
    pdf_debug:
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C pdf debug
    
    test: build lib_links
    	${MAKE} -C test test
    	if ${HAVE_ASAN}; then ${MAKE} test_asan; fi
    
    test_asan: asan lib_links_asan
    	${MAKE} -C test test_asan
    
    test_cov: cov lib_links_cov
    	${MAKE} -C test test_cov
    
    test_debug: debug lib_links_debug
    	${MAKE} -C test test_debug
    
    test_ekc3: ekc3 lib_links
    	${MAKE} -C test test_ekc3
    
    test_ekc3_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C ekc3 asan
    	${MAKE} -C test test_ekc3_asan
    
    test_ekc3_cov: lib_links_cov
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C kc3s cov
    	${MAKE} -C ekc3 cov
    	${MAKE} -C test test_ekc3_cov
    
    test_ekc3_debug: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C ekc3 debug
    	${MAKE} -C test test_ekc3_debug
    
    test_gcovr: lib_links_cov
    	${MAKE} clean_cov
    	${MAKE} test_libkc3_cov
    	${MAKE} test_ikc3_cov
    	${MAKE} test_ekc3_cov
    	${MAKE} test_tls_cov
    	${MAKE} gcovr
    
    test_http: lib_links
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    	${MAKE} -C json build
    	${MAKE} -C markdown build
    	${MAKE} -C pdf build
    	${MAKE} -C smtp build
    	${MAKE} -C http build
    	${MAKE} -C test test_http
    
    test_http_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C json asan
    	${MAKE} -C markdown asan
    	${MAKE} -C pdf asan
    	${MAKE} -C smtp asan
    	${MAKE} -C http asan
    	${MAKE} -C test test_http_asan
    
    test_http_cov: lib_links_cov
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C kc3s cov
    	${MAKE} -C json cov
    	${MAKE} -C markdown cov
    	${MAKE} -C pdf cov
    	${MAKE} -C smtp cov
    	${MAKE} -C http cov
    	${MAKE} -C test test_http_cov
    
    test_http_debug: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C json debug
    	${MAKE} -C markdown debug
    	${MAKE} -C pdf debug
    	${MAKE} -C http debug
    	${MAKE} -C test test_http_debug
    
    test_httpd: lib_links
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    	${MAKE} -C ekc3 build
    	${MAKE} -C event build
    	${MAKE} -C json build
    	${MAKE} -C markdown build
    	${MAKE} -C pdf build
    	${MAKE} -C http build
    	${MAKE} -C httpd build
    	${MAKE} -C test test_httpd
    
    test_httpd_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C ekc3 asan
    	${MAKE} -C event asan
    	${MAKE} -C json asan
    	${MAKE} -C markdown asan
    	${MAKE} -C pdf asan
    	${MAKE} -C http asan
    	${MAKE} -C httpd asan
    	${MAKE} -C test test_httpd_asan
    
    test_httpd_cov: lib_links_cov
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C kc3s cov
    	${MAKE} -C ekc3 cov
    	${MAKE} -C event cov
    	${MAKE} -C json cov
    	${MAKE} -C markdown cov
    	${MAKE} -C pdf cov
    	${MAKE} -C http cov
    	${MAKE} -C httpd cov
    	${MAKE} -C test test_httpd_cov
    
    test_httpd_debug: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C ekc3 debug
    	${MAKE} -C event debug
    	${MAKE} -C json debug
    	${MAKE} -C markdown debug
    	${MAKE} -C pdf debug
    	${MAKE} -C http debug
    	${MAKE} -C httpd debug
    	${MAKE} -C test test_httpd_debug
    
    test_ikc3: lib_links
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C test test_ikc3
    
    test_ikc3_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C test test_ikc3_asan
    
    test_ikc3_cov: lib_links_cov
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C test test_ikc3_cov
    
    test_ikc3_debug: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C test test_ikc3_debug
    
    test_json: lib_links
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C json build
    	${MAKE} -C test test_json
    
    test_json_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C json asan
    	${MAKE} -C test test_json_asan
    
    test_json_cov: lib_links_cov
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C json cov
    	${MAKE} -C test test_json_cov
    
    test_json_debug: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C json debug
    	${MAKE} -C test test_json_debug
    
    test_kc3s: kc3s lib_links
    	${MAKE} -C test test_kc3s
    
    test_kc3s_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C test test_kc3s_asan
    
    test_kc3s_cov: lib_links_cov
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C kc3s cov
    	${MAKE} -C test test_kc3s_cov
    
    test_kc3s_debug: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C test test_kc3s_debug
    
    test_kpkg: kpkg lib_links
    	${MAKE} -C test test_kpkg
    
    test_kpkg_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C kpkg asan
    	${MAKE} -C test test_kpkg_asan
    
    test_kpkg_cov: lib_links_cov
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C kpkg cov
    	${MAKE} -C test test_kpkg_cov
    
    test_kpkg_debug: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C kpkg debug
    	${MAKE} -C test test_kpkg_debug
    
    test_libkc3: lib_links
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C test test_libkc3
    
    test_libkc3_cov: lib_links_cov
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C test test_libkc3_cov
    
    test_libkc3_debug: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C test test_libkc3_debug
    
    test_markdown: lib_links
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C markdown build
    	${MAKE} -C test test_markdown
    
    test_markdown_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C markdown asan
    	${MAKE} -C test test_markdown_asan
    
    test_markdown_cov: lib_links_cov
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C markdown cov
    	${MAKE} -C test test_markdown_cov
    
    test_markdown_debug: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C markdown debug
    	${MAKE} -C test test_markdown_debug
    
    test_pdf: lib_links
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C pdf build
    	${MAKE} -C test test_pdf
    
    test_pdf_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C pdf asan
    	${MAKE} -C test test_pdf_asan
    
    test_pdf_cov: lib_links_cov
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C pdf cov
    	${MAKE} -C test test_pdf_cov
    
    test_pdf_debug: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C pdf debug
    	${MAKE} -C test test_pdf_debug
    
    test_socket: lib_links
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    	${MAKE} -C test test_socket
    
    test_socket_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C test test_socket_asan
    
    test_socket_cov: lib_links_cov
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C kc3s cov
    	${MAKE} -C test test_socket_cov
    
    test_socket_debug: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C test test_socket_debug
    
    test_tls: lib_links
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    	${MAKE} -C test test_tls
    
    test_tls_asan: lib_links_asan
    	${MAKE} -C libtommath asan
    	${MAKE} -C libkc3 asan
    	${MAKE} -C socket asan
    	${MAKE} -C tls asan
    	${MAKE} -C ikc3 asan
    	${MAKE} -C kc3s asan
    	${MAKE} -C test test_tls_asan
    
    test_tls_cov: lib_links_cov
    	${MAKE} -C libtommath cov
    	${MAKE} -C libkc3 cov
    	${MAKE} -C socket cov
    	${MAKE} -C tls cov
    	${MAKE} -C ikc3 cov
    	${MAKE} -C kc3s cov
    	${MAKE} -C test test_tls_cov
    
    test_tls_debug: lib_links_debug
    	${MAKE} -C libtommath debug
    	${MAKE} -C libkc3 debug
    	${MAKE} -C socket debug
    	${MAKE} -C tls debug
    	${MAKE} -C ikc3 debug
    	${MAKE} -C kc3s debug
    	${MAKE} -C test test_tls_debug
    
    tls:
    	${MAKE} -C libtommath build
    	${MAKE} -C libkc3 build
    	${MAKE} -C socket build
    	${MAKE} -C tls build
    	${MAKE} -C ikc3 build
    	${MAKE} -C kc3s build
    
    uninstall:
    	rm -rf ${prefix}/lib/kc3
    	rm -rf ${prefix}/share/kc3
    	${MAKE} -C libtommath uninstall
    	${MAKE} -C libkc3 uninstall
    	${MAKE} -C socket uninstall
    	${MAKE} -C tls uninstall
    	${MAKE} -C ikc3 uninstall
    	${MAKE} -C kc3s uninstall
    	${MAKE} -C ekc3 uninstall
    	${MAKE} -C event uninstall
    	${MAKE} -C json uninstall
    	${MAKE} -C markdown uninstall
    	${MAKE} -C pdf uninstall
    	${MAKE} -C smtp uninstall
    	${MAKE} -C http uninstall
    	${MAKE} -C httpd uninstall
    	${MAKE} -C window uninstall
    	${MAKE} -C gtk4 uninstall
    
    .PHONY: all \
    	android \
    	asan \
    	assets \
    	build \
    	dump \
    	cov \
    	clean \
    	clean_cov \
    	clean_dump \
    	debug \
    	demo \
    	demo_asan \
    	demo_cov \
    	demo_debug \
    	demo_gl \
    	demo_gl_asan \
    	demo_gl_cov \
    	demo_gl_debug \
    	dist \
    	ekc3 \
    	ekc3_asan \
    	ekc3_cov \
    	ekc3_debug \
    	event \
    	event_asan \
    	event_cov \
    	event_debug \
    	fx \
    	fx_asan \
    	fx_cov \
    	fx_debug \
    	gcovr \
    	gdb_fx \
    	gdb_fx_asan \
    	gdb_test \
    	gdb_test_asan \
    	gdb_test_debug \
    	gdb_test_gcovr \
    	gdb_test_ekc3 \
    	gdb_test_ekc3_asan \
    	gdb_test_ekc3_debug \
    	gdb_test_http \
    	gdb_test_http_asan \
    	gdb_test_http_debug \
    	gdb_test_httpd \
    	gdb_test_httpd_asan \
    	gdb_test_httpd_debug \
    	gdb_test_ikc3 \
    	gdb_test_ikc3_asan \
    	gdb_test_ikc3_debug \
    	gdb_test_json \
    	gdb_test_json_asan \
    	gdb_test_json_debug \
    	gdb_test_kc3s \
    	gdb_test_kc3s_asan \
    	gdb_test_kc3s_debug \
    	gdb_test_libkc3 \
    	gdb_test_libkc3_asan \
    	gdb_test_libkc3_debug \
    	gdb_test_markdown \
    	gdb_test_markdown_asan \
    	gdb_test_markdown_debug \
    	gdb_test_pdf \
    	gdb_test_pdf_asan \
    	gdb_test_pdf_debug \
    	gdb_test_socket \
    	gdb_test_socket_asan \
    	gdb_test_socket_debug \
    	gdb_test_tls \
    	gdb_test_tls_asan \
    	gdb_test_tls_debug \
    	gtk4 \
    	gtk4_asan \
    	gtk4_cov \
    	gtk4_debug \
    	http \
    	http_asan \
    	http_cov \
    	http_debug \
    	httpd \
    	httpd_asan \
    	httpd_cov \
    	httpd_debug \
    	ikc3 \
    	ikc3_asan \
    	ikc3_cov \
    	ikc3_debug \
    	install \
    	json \
    	json_asan \
    	json_cov \
    	json_debug \
    	kc3.index \
    	kc3s \
    	kc3s_asan \
    	kc3s_cov \
    	kc3s_debug \
    	kmsg \
    	kmsg_asan \
    	kmsg_cov \
    	kmsg_debug \
    	kpkg \
    	kpkg_asan \
    	kpkg_cov \
    	kpkg_debug \
    	lib \
    	lib_links \
    	lib_links_asan \
    	lib_links_bsd \
    	lib_links_bsd_asan \
    	lib_links_bsd_debug \
    	lib_links_cov \
    	lib_links_debug \
    	lib_links_linux \
    	lib_links_linux_asan \
    	lib_links_linux_debug \
    	libkc3 \
    	libtommath \
    	license \
    	markdown \
    	markdown_asan \
    	markdown_cov \
    	markdown_debug \
    	pdf \
    	pdf_asan \
    	pdf_cov \
    	pdf_debug \
    	socket \
    	socket_asan \
    	socket_cov \
    	socket_debug \
    	test \
    	test_asan \
    	test_cov \
    	test_debug \
    	test_gcovr \
    	test_ekc3 \
    	test_ekc3_asan \
    	test_ekc3_cov \
    	test_ekc3_debug \
    	test_http \
    	test_http_asan \
    	test_http_cov \
    	test_http_debug \
    	test_httpd \
    	test_httpd_asan \
    	test_httpd_cov \
    	test_httpd_debug \
    	test_ikc3 \
    	test_ikc3_asan \
    	test_ikc3_cov \
    	test_ikc3_debug \
    	test_json \
    	test_json_asan \
    	test_json_cov \
    	test_json_debug \
    	test_kc3s \
    	test_kc3s_asan \
    	test_kc3s_cov \
    	test_kc3s_debug \
    	test_libkc3 \
    	test_libkc3_asan \
    	test_libkc3_cov \
    	test_libkc3_debug \
    	test_markdown \
    	test_markdown_asan \
    	test_markdown_cov \
    	test_markdown_debug \
    	test_pdf \
    	test_pdf_asan \
    	test_pdf_cov \
    	test_pdf_debug \
    	test_socket \
    	test_socket_asan \
    	test_socket_cov \
    	test_socket_debug \
    	test_tls \
    	test_tls_asan \
    	test_tls_cov \
    	test_tls_debug \
    	tls \
    	uninstall