sylware / charfbuzz (public) (License: LGPLv3) (since 2019-09-09) (hash sha1)
partial C implementation of harfbuzz C API for roman scripts

/make (fedeb110245a5460039167ccc6cec1abca82c271) (5635 bytes) (mode 100755) (type blob)

#!/bin/sh

# stolen from ffmpeg configure like a pig

# Prevent locale nonsense from breaking basic text processing.
LC_ALL=C
export LC_ALL

major=0
minor=9
micro=20
slib_file_name=libharfbuzz.so.${major}.${minor}.${micro}
slib_soname=libharfbuzz.so.${major}

api_hdrs='
hb.h
hb-blob.h
hb-buffer.h
hb-common.h
hb-deprecated.h
hb-face.h
hb-font.h
hb-set.h
hb-shape.h
hb-shape-plan.h
hb-unicode.h
hb-ft.h
hb-graphite2.h
hb-coretext.h
hb-uniscribe.h
hb-icu.h
hb-glib.h
hb-gobject.h
hb-gobject-structs.h
hb-ot.h
hb-ot-layout.h
hb-ot-tag.h
hb-version.h
'

srcs='
hb-blob.c
hb-buffer.c
hb-common.c
hb-face.c
hb-fallback-shape.c
hb-font.c
hb-ft.c
hb-glib.c
hb-open-file.c
hb-ot-layout.c
hb-ot-tag.c
hb-shape.c
hb-shape-plan.c
hb-shaper.c
hb-unicode.c
hb-utf-private.c
'

clean_do(){
    rm -f ${slib_file_name}
    for src_file in ${srcs}
    do
      rm -f ${src_file/\.c/.o}
    done
    rm -f harfbuzz.pc hb-version.h
    exit 0
}

install_do(){ 
    eval prefix=${prefix}
    eval libdir=${libdir}
    eval incdir=${incdir}
    
    ${slib_install} ${slib_file_name} ${destdir}${sysroot}${libdir}/${slib_file_name}
    ${ln_s} ${slib_file_name} ${destdir}${sysroot}${libdir}/${slib_soname}
    ${ln_s} ${slib_file_name} ${destdir}${sysroot}${libdir}/libharfbuzz.so
    ${file_install} harfbuzz.pc  ${destdir}${sysroot}${libdir}/pkgconfig/harfbuzz.pc
    for hdr in ${api_hdrs}
    do
        ${file_install} ${source_path}/${hdr} ${destdir}${sysroot}${incdir}/harfbuzz/${hdr}
    done
    exit 0
}

################################################################################

# find source path
if test -f make; then
    source_path=.
else
    source_path=$(cd $(dirname "$0"); pwd)
    echo "$source_path" | grep -q '[[:blank:]]' &&
        die "Out of tree builds are impossible with whitespace in source path."
    test -e "$source_path/config.h" &&
        die "Out of tree builds are impossible with config.h in source dir."
fi

is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

append(){
    var=$1
    shift
    eval "$var=\"\$$var $*\""
}

die_unknown(){
    echo "Unknown option \"$1\"."
    echo "See $0 --help for available options."
    exit 1
}

set_default(){
    for opt; do
        eval : \${$opt:=\$${opt}_default}
    done
}

PATHS_LIST='
    prefix
    incdir
    libdir
    prefix
    sysroot
    destdir
'

CMDLINE_APPEND="
    extra_cflags
    extra_cxxflags
    host_cppflags
"

CMDLINE_SET="
    ${PATHS_LIST}
    slib_cc
    slib_ld
"

# path defaults
prefix_default="/usr/local"
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'

#command lin set defaults
#slib_cc_default='gcc -Wall -Wextra -Wno-missing-field-initializers -c -fPIC -fpic -Ofast -std=c99'
slib_cc_default="gcc -Wall -Wextra -Wno-missing-field-initializers -c -fPIC -fpic -g -std=c99"
slib_ld_default="gcc -shared -Wl,-soname=${slib_soname}"
slib_install_default='install -D -m 755'
file_install_default='install -D -m 644'
ln_s_default='ln -sf'

set_default ${PATHS_LIST}
set_default slib_cc slib_ld
set_default slib_install file_install ln_s

show_help(){
    cat <<EOF
Usage: make [options] [operations]

Operations: [default is to build the shared library]:
  clean                    clean build products
  install                  install build products


Options: [defaults in brackets after descriptions]

Help options:
  --help                   print this message


Standard options:
  --prefix=PREFIX          install in PREFIX [$prefix_default]
  --libdir=DIR             install libs in DIR [PREFIX/lib]
  --incdir=DIR             install includes in DIR [PREFIX/include]

Advanced options (experts only):
  --sysroot=PATH           root of cross-build tree
  --destdir=PATH           installation root dir override
  --slib-cc=CC             use C compiler command line CC for shared lib object[$slib_cc_default]
  --slib-ld=LD             use linker command line LD for shared lib [$slib_ld_default]
EOF
  exit 0
}

for opt do
    optval="${opt#*=}"
    case "$opt" in
        clean) clean_do
        ;;
        install) install_do
        ;;
        --help|-h) show_help
        ;;
        *)
            optname="${opt%%=*}"
            optname="${optname#--}"
            optname=$(echo "$optname" | sed 's/-/_/g')
            if is_in $optname $CMDLINE_SET; then
                eval $optname='$optval'
            elif is_in $optname $CMDLINE_APPEND; then
                append $optname "$optval"
            else
                die_unknown $opt
            fi
        ;;
    esac
done

#for pkgconfig to pickup the right package files
export PKG_CONFIG_SYSROOT_DIR=${sysroot}

#CPPFLAGS=-I./ -I${source_path} -DHAVE_OT -DHAVE_GLIB
CPPFLAGS="-I./ -I${source_path} -DHAVE_GLIB \
$(pkg-config --cflags freetype2) \
$(pkg-config --cflags glib-2.0)
"

#generate the version header file
sed -e "
s/@HB_VERSION_MAJOR@/${major})/
s/@HB_VERSION_MINOR@/${minor}/
s/@HB_VERSION_MICRO@/${micro}/
s/@HB_VERSION@/${major}.${minor}.${micro}/
" ${source_path}/hb-version.h.in >hb-version.h

#generate the pkgconfig file
sed -e "
s:%prefix%:${prefix}:
s:%exec_prefix%:${prefix}:
s:%libdir%:${libdir}:
s:%includedir%:${incdir}:
s:%VERSION%:${major}.${minor}.${micro}:
" ${source_path}/harfbuzz.pc.in >harfbuzz.pc

#compile source files, build a list of objet files
for src_file in ${srcs}
do
    obj=${src_file/\.c/.o}
    echo "SLIB_CC ${src_file}"
    ${slib_cc} ${CPPFLAGS} -o ${obj} ${source_path}/${src_file}
    objs="${obj} ${objs}"
done

#link the shared lib
echo "SLIB_LD ${slib_file_name}"
echo ${objs}
${slib_ld} -o ${slib_file_name} ${objs}


Mode Type Size Ref File
100644 blob 200 1a0b33b52f3f0b8f3567e0fb7b411e88c4b3c2c9 ABBREVIATIONS
100644 blob 119 8bbabe4337eabadd3f5ed07192b85e02d50f5bad FIXME
100644 blob 100 8a85692a2fc36a478ef9662ba2db214375a79254 README
100644 blob 223 7f27bbbdef02188df78858a31e0c38bda3fe4443 harfbuzz.pc.in
100644 blob 1478 2931ccaca651b04a927605232dd3500f7a661dce hb-atomic-private.h
100644 blob 120 ee630543fb4ef3e9fa49f7362026407c0fd0a858 hb-blob-private.h
100644 blob 4983 607f12b39c30bbe160c4e3a6781b5a58b64de2fc hb-blob.c
100644 blob 3467 d3d0f41b11c3b100cdee91525924c23226acd0cf hb-blob.h
100644 blob 1299 045519300e0994a11484696fa5c533663e4338db hb-buffer-private.h
100644 blob 11835 a3b6deceb732205dfeb4b3798227732f4632ed8b hb-buffer.c
100644 blob 8424 87c4ce58e83744e68765567e4107533dae9d5b7f hb-buffer.h
100644 blob 3363 f5141f528597232bb1a0214b7f1469cc9af008b8 hb-common.c
100644 blob 12423 40c1887296421c6d63f32e479cd318d4c4d79d19 hb-common.h
100644 blob 1407 c4954fa1b2cadb133a419584de60fe16263f148b hb-coretext.h
100644 blob 1584 30ae4b1caf76dd03cc682eda7458728b5380ad6c hb-deprecated.h
100644 blob 1226 3ea9861f08c6fcc0422092c8bb38dd808b5c8757 hb-face-private.h
100644 blob 5452 4489a99ae3f4ebded37dab45f8cde0bf32cc43f1 hb-face.c
100644 blob 2815 f682c468de58095fb0a7c4cdd577b34a9cb78077 hb-face.h
100644 blob 3705 f027e1e59453b39ecb722e2c7ffd9126b579b1a5 hb-fallback-shape.c
100644 blob 3222 172e69a09927c17f177947f2d5f18318dd3f4545 hb-font-private.h
100644 blob 30726 ba271fab87b5d9d6534bf971604b6079eabfc9f5 hb-font.c
100644 blob 12957 7273db43edaf542ef9d6e969fa2d8408e7d5100e hb-font.h
100644 blob 2570 bb44c035ff48e7655a397e5b95872d75b92945ad hb-ft.c
100644 blob 1756 696251e143f31987eb599f8cb16db4f12ff8d901 hb-ft.h
100644 blob 4016 91eaa7075c5f9fe797de93912301d2e03d6b7248 hb-glib.c
100644 blob 1496 63a9d3366c58a0110881ad00d971830924b73a2a hb-glib.h
100644 blob 3185 4a88d569e8d3be4daa2eaf39192891426da46514 hb-gobject-structs.h
100644 blob 1334 ea1bd25df82d46a222436a1ad078d0fc95d5c303 hb-gobject.h
100644 blob 1441 3eae54acbd81dbf3e534c4ad2e42d57611f7024e hb-graphite2.h
100644 blob 1495 f2f35f0f2ce13b6b5c46453128e452ea9380eabf hb-icu.h
100644 blob 2180 7172c280ad7dbb708d6818d386bdbb6e852d80c8 hb-open-file-private.h
100644 blob 2659 c4079cec956598ccf9521c874408a618fe7c29dc hb-open-file.c
100644 blob 65 642c3d3d45fdc42619d000cc9f7b3c890bdc0190 hb-ot-face-private.h
100644 blob 2806 ecfd5b109b43f549366a61efff16daa92db87349 hb-ot-layout.c
100644 blob 9212 d2a314cad6cbf94ba04ff9eaf513a74714eec732 hb-ot-layout.h
100644 blob 753 42faaca3f7ebdafc1232c6810b5ea2124896a95b hb-ot-tag.c
100644 blob 1688 1bf12ab3c09b9aef612515871e587c7c9ca7e62b hb-ot-tag.h
100644 blob 1526 80739063991cf14c4b65cc9247f751226f7f7277 hb-ot.h
100644 blob 1528 ae4bc85a37900c9f54cb91986dadc216f620a358 hb-private.h
100644 blob 3544 bafdae96333f9c81a4b20a4435e6eadaa31a7d32 hb-set.h
100644 blob 1647 1a90aed635a86f8e1d7002ffa8c7d300a3dd8acf hb-shape-plan-private.h
100644 blob 15942 929804aae7b6e5271cef5e9f1d654dcce7a8ca95 hb-shape-plan.c
100644 blob 2747 8f54552f90ba504f6ba2e9cf01459621fc73f9b2 hb-shape-plan.h
100644 blob 1370 1ff445b5de783fb0aa041f34d75919614b21ad34 hb-shape.c
100644 blob 2232 10a35cb517e14c96670d71bbcff266fce23cad91 hb-shape.h
100644 blob 1129 78e3fe4e3529b39789c0763b7f8e1019b3d5a725 hb-shaper-private.h
100644 blob 2184 d1c8f9740fec1b4d19e0967f60391f1c5b17d155 hb-shaper.c
100644 blob 1261 86293900edd4d5fab1013bd0c32eeaad2abef41e hb-unicode-private.h
100644 blob 8084 462ddc1b9bcad35a3d4b3babb64772c93650e75c hb-unicode.c
100644 blob 14218 1c4e097b92d5ba628455fefe25b6f4697cc16f11 hb-unicode.h
100644 blob 1427 51887c8794bce4e37b35c4bb9c675baf55b63052 hb-uniscribe.h
100644 blob 5070 97eb7798f1dc725aad02cc651ffe859044647582 hb-utf-private.c
100644 blob 1423 636ce353798d395c780be99bb68350c3352f40a3 hb-utf-private.h
100644 blob 1849 43634f91ce8a10250c8279b19a1993843feb0f38 hb-version.h.in
100644 blob 1470 c5a938a3818c9aca6de00a961c1c8f73bb2c47db hb.h
100644 blob 7651 65c5ca88a67c30becee01c5a8816d964b03862f9 license.md
100755 blob 5635 fedeb110245a5460039167ccc6cec1abca82c271 make
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/sylware/charfbuzz

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/sylware/charfbuzz

Clone this repository using git:
git clone git://git.rocketgit.com/user/sylware/charfbuzz

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main