Replace handwritten Makefile with configure script
This commit is contained in:
parent
b2be8b4658
commit
6fa38f4d83
|
@ -2,3 +2,4 @@ build/
|
||||||
slcl
|
slcl
|
||||||
*.o
|
*.o
|
||||||
*.d
|
*.d
|
||||||
|
Makefile
|
||||||
|
|
51
Makefile
51
Makefile
|
@ -1,51 +0,0 @@
|
||||||
.POSIX:
|
|
||||||
|
|
||||||
PREFIX = /usr/local
|
|
||||||
DST = $(PREFIX)/bin
|
|
||||||
PROJECT = slcl
|
|
||||||
O = -Og
|
|
||||||
CDEFS = -D_FILE_OFFSET_BITS=64 # Required for large file support on 32-bit.
|
|
||||||
CFLAGS = $(O) $(CDEFS) -g -Wall -Ilibweb/include -Ilibweb/dynstr/include \
|
|
||||||
-MD -MF $(@:.o=.d)
|
|
||||||
LIBS = -lcjson -lssl -lm -lcrypto
|
|
||||||
DEPS = $(OBJECTS:.o=.d)
|
|
||||||
DYNSTR = libweb/dynstr/libdynstr.a
|
|
||||||
DYNSTR_FLAGS = -Llibweb/dynstr -ldynstr
|
|
||||||
LIBWEB = libweb/libslweb.a
|
|
||||||
SLWEB_FLAGS = -Llibweb -lweb
|
|
||||||
OBJECTS = \
|
|
||||||
auth.o \
|
|
||||||
base64.o \
|
|
||||||
cftw.o \
|
|
||||||
hex.o \
|
|
||||||
jwt.o \
|
|
||||||
main.o \
|
|
||||||
page.o \
|
|
||||||
style.o
|
|
||||||
|
|
||||||
all: $(PROJECT)
|
|
||||||
|
|
||||||
install: all usergen
|
|
||||||
mkdir -p $(DST)
|
|
||||||
cp slcl usergen $(DST)
|
|
||||||
chmod 0755 $(DST)/slcl
|
|
||||||
chmod 0755 $(DST)/usergen
|
|
||||||
+cd doc && $(MAKE) PREFIX=$(PREFIX) install
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f $(OBJECTS) $(DEPS)
|
|
||||||
+cd libweb && $(MAKE) clean
|
|
||||||
+cd libweb/dynstr && $(MAKE) clean
|
|
||||||
|
|
||||||
FORCE:
|
|
||||||
|
|
||||||
$(PROJECT): $(OBJECTS) $(DYNSTR) $(LIBWEB)
|
|
||||||
$(CC) $(OBJECTS) $(LDFLAGS) $(LIBS) $(SLWEB_FLAGS) $(DYNSTR_FLAGS) -o $@
|
|
||||||
|
|
||||||
$(DYNSTR): FORCE
|
|
||||||
+cd libweb/dynstr && $(MAKE)
|
|
||||||
|
|
||||||
$(LIBWEB): FORCE
|
|
||||||
+cd libweb && $(MAKE)
|
|
||||||
|
|
||||||
-include $(DEPS)
|
|
|
@ -74,7 +74,8 @@ sudo apt install cmake xxd jq
|
||||||
Two build environments are provided for `slcl` - feel free to choose any of
|
Two build environments are provided for `slcl` - feel free to choose any of
|
||||||
them:
|
them:
|
||||||
|
|
||||||
- A mostly POSIX-compliant [`Makefile`](Makefile).
|
- A [`configure`](configure) POSIX shell and mostly POSIX-compliant
|
||||||
|
[`Makefile`](Makefile).
|
||||||
- A [`CMakeLists.txt`](CMakeLists.txt).
|
- A [`CMakeLists.txt`](CMakeLists.txt).
|
||||||
|
|
||||||
`slcl` can be built using the standard build process:
|
`slcl` can be built using the standard build process:
|
||||||
|
@ -82,6 +83,7 @@ them:
|
||||||
#### Make
|
#### Make
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
$ ./configure
|
||||||
$ make
|
$ make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,168 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
default_prefix=/usr/local
|
||||||
|
prefix=$default_prefix
|
||||||
|
default_CC='c99'
|
||||||
|
# FILE_OFFSET_BITS=64 is required for large file support on 32-bit platforms.
|
||||||
|
default_CFLAGS='-O1 -g -D_FILE_OFFSET_BITS=64 -Wall -MD -MF $(@:.o=.d)'
|
||||||
|
default_LDFLAGS="-lcjson -lssl -lm -lcrypto"
|
||||||
|
|
||||||
|
CC=${CC:-$default_CC}
|
||||||
|
CFLAGS=${CFLAGS:-"$default_CFLAGS $default_NPCFLAGS"}
|
||||||
|
LDFLAGS=${LDFLAGS:-$default_LDFLAGS}
|
||||||
|
|
||||||
|
help()
|
||||||
|
{
|
||||||
|
cat <<-EOF
|
||||||
|
$0 [OPTION ...]
|
||||||
|
|
||||||
|
--prefix Set installation directory [$default_prefix]
|
||||||
|
|
||||||
|
Some influential environment variables:
|
||||||
|
CC C compiler [$default_CC]
|
||||||
|
CFLAGS C compiler flags [$default_CFLAGS]
|
||||||
|
LDFLAGS Link-time flags [$default_LDFLAGS]
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
split_arg=0
|
||||||
|
|
||||||
|
if printf "%s" "$1" | grep -e '=' > /dev/null
|
||||||
|
then
|
||||||
|
key="$(printf "%s" "$1" | cut -d '=' -f1)"
|
||||||
|
value="$(printf "%s" "$1" | cut -d '=' -f2)"
|
||||||
|
split_arg=1
|
||||||
|
else
|
||||||
|
key="$1"
|
||||||
|
value="$2"
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$key" in
|
||||||
|
--prefix ) prefix="$value"; shift; test $split_arg -eq 0 && shift ;;
|
||||||
|
-h | --help ) help; exit 0 ;;
|
||||||
|
* ) test "$1" != "" && help && exit 1 || break ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if pkg-config dynstr
|
||||||
|
then
|
||||||
|
in_tree_dynstr=0
|
||||||
|
CFLAGS="$CFLAGS $(pkg-config --cflags dynstr)"
|
||||||
|
LDFLAGS="$LDFLAGS $(pkg-config --libs dynstr)"
|
||||||
|
else
|
||||||
|
echo "Info: dynstr not found. Using in-tree copy" >&2
|
||||||
|
in_tree_dynstr=1
|
||||||
|
CFLAGS="$CFLAGS -Ilibweb/dynstr/include"
|
||||||
|
LDFLAGS="$LDFLAGS -Llibweb/dynstr -ldynstr"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if pkg-config libweb
|
||||||
|
then
|
||||||
|
in_tree_libweb=0
|
||||||
|
CFLAGS="$CFLAGS $(pkg-config --cflags libweb)"
|
||||||
|
LDFLAGS="$LDFLAGS $(pkg-config --libs libweb)"
|
||||||
|
else
|
||||||
|
echo "Info: libweb not found. Using in-tree copy" >&2
|
||||||
|
in_tree_libweb=1
|
||||||
|
CFLAGS="$CFLAGS -Ilibweb/include"
|
||||||
|
LDFLAGS="$LDFLAGS -Llibweb -lweb"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cleanup()
|
||||||
|
{
|
||||||
|
rm -f $F
|
||||||
|
}
|
||||||
|
|
||||||
|
F=/tmp/Makefile.slcl
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
cat <<EOF > $F
|
||||||
|
.POSIX:
|
||||||
|
|
||||||
|
CC = $CC
|
||||||
|
PREFIX = $prefix
|
||||||
|
DST = $prefix/bin
|
||||||
|
CFLAGS = $CFLAGS
|
||||||
|
LDFLAGS = $LDFLAGS
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<"EOF" >> $F
|
||||||
|
PROJECT = slcl
|
||||||
|
DEPS = $(OBJECTS:.o=.d)
|
||||||
|
OBJECTS = \
|
||||||
|
auth.o \
|
||||||
|
base64.o \
|
||||||
|
cftw.o \
|
||||||
|
hex.o \
|
||||||
|
jwt.o \
|
||||||
|
main.o \
|
||||||
|
page.o \
|
||||||
|
style.o
|
||||||
|
|
||||||
|
all: $(PROJECT)
|
||||||
|
|
||||||
|
install: all usergen
|
||||||
|
mkdir -p $(DST)
|
||||||
|
cp slcl usergen $(DST)
|
||||||
|
chmod 0755 $(DST)/slcl
|
||||||
|
chmod 0755 $(DST)/usergen
|
||||||
|
+cd doc && $(MAKE) PREFIX=$(PREFIX) install
|
||||||
|
|
||||||
|
FORCE:
|
||||||
|
|
||||||
|
$(PROJECT): $(OBJECTS)
|
||||||
|
$(CC) $(OBJECTS) $(LDFLAGS) -o $@
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [ $in_tree_dynstr -ne 0 ]
|
||||||
|
then
|
||||||
|
cat <<"EOF" >> $F
|
||||||
|
DYNSTR = libweb/dynstr/libdynstr.a
|
||||||
|
$(PROJECT): $(DYNSTR)
|
||||||
|
$(DYNSTR): FORCE
|
||||||
|
+cd libweb/dynstr && $(MAKE) CC=$(CC)
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $in_tree_libweb -ne 0 ]
|
||||||
|
then
|
||||||
|
cat <<"EOF" >> $F
|
||||||
|
LIBWEB = libweb/libslweb.a
|
||||||
|
$(PROJECT): $(LIBWEB)
|
||||||
|
$(LIBWEB): FORCE
|
||||||
|
+cd libweb && $(MAKE) CC=$(CC)
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat <<"EOF" >> $F
|
||||||
|
clean:
|
||||||
|
rm -f $(OBJECTS) $(DEPS)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [ $in_tree_dynstr -ne 0 ]
|
||||||
|
then
|
||||||
|
cat <<"EOF" >> $F
|
||||||
|
+cd libweb/dynstr && $(MAKE) clean
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $in_tree_libweb -ne 0 ]
|
||||||
|
then
|
||||||
|
cat <<"EOF" >> $F
|
||||||
|
+cd libweb && $(MAKE) clean
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat <<"EOF" >> $F
|
||||||
|
distclean: clean
|
||||||
|
rm Makefile
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<"EOF" >> $F
|
||||||
|
-include $(DEPS)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
mv $F Makefile
|
Loading…
Reference in New Issue