From f58400c634eea6f865db8486e7e174f67bb555ce Mon Sep 17 00:00:00 2001 From: Alessandro Iezzi Date: Thu, 11 May 2023 17:25:52 +0200 Subject: Change the way how to build this library --- Makefile | 49 ++++++++++++++++++++++++++++++++++++++++++++----- build-pc.sh | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ config.mk | 18 ++++++++++++++++++ 3 files changed, 118 insertions(+), 5 deletions(-) create mode 100755 build-pc.sh create mode 100644 config.mk diff --git a/Makefile b/Makefile index 3a8fc53..293ea93 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,49 @@ # See LICENSE file for copyright and license details. -PREFIX=/usr/local -INSTALL_DIR=${PREFIX}/include +include config.mk -install: - cp string2.h ${INSTALL_DIR}/string2.h +all: dist tests + +dist: static shared + ./build-pc.sh -p ${PREFIX} -n ${NAME} -ln ${LIBNAME} -d "${LIBDSCR}" -v ${LIBVER} ${PC_FILE} + +static: + @make OPT='-O2 -pipe -Werror' ${LIBNAME:=.a} + rm -f ${OBJ} + +shared: + @make OPT='-O2 -pipe -Werror -fPIC' ${LIBNAME:=.so} + rm -f ${OBJ} + +debug: + @make OPT=-g all + +${LIBNAME:=.so}: ${OBJ} + ${CC} ${LDFLAGS} -shared ${OBJ} -o $@ + +${LIBNAME:=.a}: ${OBJ} + ar rcs $@ ${OBJ} + +.c.o: + ${CC} ${CFLAGS} -c $< -o $@ + +clean: + rm -f ${OBJ} ${LIBNAME}.* *.core ${PC_FILE} + cd test && make clean + +tests: dist + @make -C test + +install: dist + mkdir -p ${PREFIX}/include + mkdir -p ${PREFIX}/lib + cp src/string2.h ${PREFIX}/include/string2.h + cp ${LIBNAME:=.so} ${PREFIX}/lib/${LIBNAME:=.so} + cp ${LIBNAME:=.a} ${PREFIX}/lib/${LIBNAME:=.a} + cp ${PC_FILE} ${PKG_CONFIG_PATH}/${PC_FILE} uninstall: - rm -f ${INSTALL_DIR}/string2.h + rm -f ${PREFIX}/include/string2.h + rm -f ${PREFIX}/lib/${LIBNAME:=.so} + rm -f ${PREFIX}/lib/${LIBNAME:=.a} + rm -f ${PKG_CONFIG_PATH}/${PC_FILE} diff --git a/build-pc.sh b/build-pc.sh new file mode 100755 index 0000000..eb7dca8 --- /dev/null +++ b/build-pc.sh @@ -0,0 +1,56 @@ +#!/bin/sh + +# See LICENSE file for copyright and license details. + +VERSION=0.0.1 + +while [ $# -gt 0 ] +do + case $1 in + -p|--prefix) + shift + PREFIX=$1 + ;; + -n|--name) + shift + NAME=$1 + ;; + -ln|--lib-name) + shift + LIBNAME=$1 + ;; + -d|--description) + shift + DESCR=$1 + ;; + -v|--version) + shift + VERSION=$1 + ;; + *) + TARGET=$1 + ;; + esac + shift +done + +if [ -z $PREFIX ]; then + echo 'prefix must be set' + exit 1 +elif [ -z $NAME ]; then + echo 'name must be set' + exit 1 +fi + +cat < $TARGET +prefix=$PREFIX +exec_prefix=\${prefix} +includedir=\${prefix}/include +libdir=\${exec_prefix}/lib + +Name: $NAME +Description: $LIBNAME - $DESCR +Version: $VERSION +Cflags: -I\${includedir} +Libs: -L\${libdir} -l$NAME +EOF diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..2ecd96c --- /dev/null +++ b/config.mk @@ -0,0 +1,18 @@ +# See LICENSE file for copyright and license details. + +PREFIX = /usr/local + +CC = cc +SRC != find src -name "*.c" +OBJ = ${SRC:.c=.o} + +NAME = str2 +LIBNAME = lib${NAME} +LIBDSCR = String library (extension of the C standard string library) +LIBVER = 0.0.1 + +PC_FILE = ${NAME}.pc + +CFLAGS = -Wall --std=c99 -pedantic ${OPT} -DLIBVER=\"${LIBVER}\" + +PKG_CONFIG_PATH != pkg-config --variable pc_path pkg-config | sed -E "s|.*(/usr/local[^:]*)[:].*|\1|g" -- cgit v1.2.3