229 lines (195 with data), 6.8 kB
#! /bin/sh
######################################################################
# Project Configuration #
######################################################################
pkg_name="loginx"
pkg_verstr="v1.4"
pkg_bugreport="Mike Sharov <msharov@users.sourceforge.net>"
# Files that get created by this script
files="Config.mk config.h"
# Package options
components='
{
name=[with-debug]
desc=[ Compile for debugging]
seds=[s/^#\(debug\)/\1/]
}{
name=[with-native]
desc=[ Use -march=native]
seds=[s/ -std=c/ -march=native -std=c/]
}{
name=[without-nls]
desc=[ Disable translations]
seds=[s/^#define \(LOCALEPATH\)/#undef \1 \/\/ /;s/^\(localedir\)/#\1/;s/ -lintl//]
}';
# First pair is used if nothing matches
progs="CC=gcc CC=clang CC=cc INSTALL=install"
# Required dependencies
pkgs="ncurses pam"
# Default pkg flags to substitute when pkg-config is not found
pkg_libs="-lncurses -lpam"
pkg_cflags="-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -I/usr/include/security"
pkg_ldflags=""
# Automatic vars
if [ -d .git ]; then
pkg_vverstr=$(expr $(git describe --always) : '\(v[0-9]*\.[0-9]*\)')
[ -z "$pkg_vverstr" ] || pkg_verstr=$pkg_vverstr
fi
pkg_major=$(expr "$pkg_verstr" : 'v\([0-9]*\)')
pkg_minor=$(expr "$pkg_verstr" : 'v[0-9]*\.\([0-9]*\)')
pkg_string="$pkg_name $pkg_verstr"
# Miscellaneous substitutions
custsubs="s/@pkg_name@/$pkg_name/g
s/@pkg_version@/0x$pkg_major$pkg_minor/g
s/@pkg_verstr@/$pkg_verstr/g
s/@pkg_string@/$pkg_string/g
s/@pkg_uname@/$(echo $pkg_name|tr a-z A-Z)/g
s/@pkg_bugreport@/$pkg_bugreport/g
s/@pkg_major@/$pkg_major/g
s/@pkg_minor@/$pkg_minor/g"
######################################################################
#### The rest of the file is configuration code. Leave it alone. #####
######################################################################
die() { rm -f config.sed; exit; }
sub() { printf "%s\n" "$1">>config.sed; }
escpath() { echo "$@" | sed 's/\//\\\//g'; }
#### Set host-dependent options ######################################
SYSNAME=$(uname|tr A-Z a-z)
case "$SYSNAME" in
*solaris*| *sun*) SYSNAME="sun";;
*darwin*| *osx*) SYSNAME="mac";;
*bsd*) SYSNAME="bsd";;
*cygwin*) SYSNAME="cygwin";;
esac
sub "s/^#undef \(OS\)/#define \1 \"$SYSNAME\"/"
if [ "$SYSNAME" = "linux" ]; then
sub "s/ -lintl//"
elif [ "$SYSNAME" = "sun" ]; then
sub "s/^#undef \(SUN\)/#define \1 1/"
fi
#### Printing helper functions #######################################
print_components() {
local cc name desc
cc=$components
echo "Options:"
while [ -n "$cc" ]; do
name=$(expr "$cc" : '[^}]*name=\[\([^]]*\)\]')
desc=$(expr "$cc" : '[^}]*desc=\[\([^]]*\)\]')
echo " --$name $desc"
cc=$(expr "$cc" : '[^}]*}\(.*\)')
done
echo
}
print_help() {
echo "This program configures $pkg_string build system.
Usage: configure [option]...
Configuration:
-h, --help display this help and exit
-V, --version display version information and exit
Installation directories:
--prefix=dir architecture-independent root [/usr/local]
--bindir=dir executables dir [prefix/bin]
--datadir=dir architecture-independent data dir [prefix/share]
--mandir=dir man page root [datadir/man]
--man1dir=dir man 1 page root [mandir/man1]
--sysconfdir=dir system configuration dir [/etc]
--pamdir=dir PAM configuration [sysconfdir/pam.d]
--libdir=dir object code libraries [prefix/lib]
--sysddir=dir systemd configuration [libdir/systemd/system]
--localedir=dir localization files [datadir/locale]
--builddir=dir location for compiled objects [\$TMPDIR/make]
"
print_components
echo "Report bugs to $pkg_bugreport"
}
print_version() {
echo "$pkg_name $pkg_verstr configure"
}
sub_var() {
local esc2
esc2=$(escpath $2)
eval ac_var_$1='$esc2';
sub "s/@$1@/$esc2/g"
}
sub_comp() {
local cc name seds
cc=$components
while [ -n "$cc" ]; do
name=$(expr "$cc" : '[^}]*name=\[\([^]]*\)\]')
seds=$(expr "$cc" : '[^}]*seds=\[\([^]]*\)\]')
[ "$name" = "$1" ] && sub "$seds"
cc=$(expr "$cc" : '[^}]*}\(.*\)')
done
}
for i in "$@"; do
case "$i" in
--) break;;
--version |-V) print_version && die;;
--help |-h |-?) print_help && die;;
--*=*) sub_var $(expr "$i" : '--\([^=]*\)=') "$(expr "$i" : '[^=]*=\(.*\)')";;
--*) sub_comp $(expr "$i" : '--\(.*\)');;
*) echo "Error: unrecognized option \"$i\"" && die;;
esac
done
#### Set directory prefixes ##########################################
sub "s/@prefix@/${ac_var_prefix:=\/usr\/local}/g
s/@bindir@/${ac_var_bindir:=\$\{prefix\}\/bin}/g
s/@datadir@/${ac_var_datadir:=\$\{prefix\}\/share}/g
s/@mandir@/${ac_var_mandir:=\$\{datadir\}\/man}/g
s/@man1dir@/${ac_var_man1dir:=\$\{mandir\}\/man1}/g
s/@sysconfdir@/${ac_var_includedir:=\/etc}/g
s/@pamdir@/${ac_var_pamdir:=\$\{sysconfdir\}\/pam.d}/g
s/@libdir@/${ac_var_libdir:=\$\{prefix\}\/lib}/g
s/@sysddir@/${ac_var_sysddir:=\$\{libdir\}\/systemd\/system}/g
s/@localedir@/${ac_var_localedir:=\$\{datadir\}\/locale}/g
s/@localepath@/${ac_var_prefix}\/share\/locale/g
s/@TMPDIR@/$(escpath ${TMPDIR:-/tmp})/g
s/@builddir@/\$\{TMPDIR\}\/make/g
s/@pkgconfigdir@/${ac_var_pkgconfigdir:=\$\{libdir\}\/pkgconfig}/g"
#### Find headers, libs, programs, and subs ##########################
# Programs found using which
for i in $progs; do
pname=$(expr $i : '\([^=]*\)')
pcall=$(expr $i : '[^=]*=\([^=]*\)')
ppath=$(escpath $(eval echo \$\{$pname\}))
# First check if an environment variable is set
[ -n "$ppath" ] && sub "s/@$pname@/$ppath/g"
# Check if the program exists
ppath=$(which $pcall 2>/dev/null)
[ -n "$ppath" ] && [ -x "$ppath" ] && sub "s/@$pname@/$pcall/g"
done
# If nothing found in first loop, set the first pair anyway
for i in $progs; do
pname=$(expr $i : '\([^=]*\)')
pcall=$(expr $i : '[^=]*=\([^=]*\)')
sub "s/@$pname@/$pcall/g"
done
# Packages found using pkg-config
pkgconfig=$(which pkg-config 2>/dev/null)
if [ -n "$pkgconfig" ] && [ -x "$pkgconfig" ]; then
faildeps=""
for i in $pkgs; do
$($pkgconfig --exists $i) || faildeps="$i $faildeps"
done
if [ -z "$faildeps" ]; then
pkg_cflags=$($pkgconfig --cflags $pkgs)
pkg_libs=$($pkgconfig --libs-only-l $pkgs)
pkg_ldflags=$($pkgconfig --libs-only-L --libs-only-other $pkgs)
fi
fi
sub "s/@pkg_cflags@/$(escpath $pkg_cflags)/"
sub "s/@pkg_libs@/$(escpath $pkg_libs)/"
sub "s/@pkg_ldflags@/$(escpath $pkg_ldflags)/"
# Miscellaneous custom substitutions
sub "$custsubs"
#### Apply substitutions to all files ################################
for i in $files; do
sed -f config.sed $i.in > $i
done
touch config.status
echo "#!/bin/sh
$0 $@
$(tail -n+3 config.status)" > config.status.new
chmod u+x config.status.new
mv config.status.new config.status
die