[go: up one dir, main page]

Menu

[533284]: / configure  Maximize  Restore  History

Download this file

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