#!/bin/sh
# Spec file generator for libraries
# (c) 2000-2013 Bernhard Rosenkraenzer <bero@lindev.ch>

STATIC=false
SNAPSHOT=false
CMAKE=false
TRACK=false
for i in "$@"; do
	if [ "`echo $i |cut -b1`" = "-" ]; then
		case $i in
		-c|--cmake)
			CMAKE=true
			;;
		-s|--snapshot)
			SNAPSHOT=true
			;;
		-S|--static)
			STATIC=true
			;;
		-t|--track)
			TRACK=true
			;;
		esac
		shift
	fi
done

if [ -z "$1" ]; then
	exit 1
fi

NAME=`echo $1 |sed -e "s/\.spec$//"`
if [ -z "$EDITOR" ]; then
	if [ -e /usr/bin/vim ]; then
		EDITOR=/usr/bin/vim
	else
		EDITOR=/bin/vi
	fi
fi
ID="`cat /etc/passwd |grep "^$(id -un):" |cut -d: -f5` <`id -un`@`hostname |cut -d. -f2-`>"
[ -e ~/.vs ] && source ~/.vs

cd ~/rpmbuild/SPECS
if [ ! -e $NAME.spec ]; then
	cat >$NAME.spec <<EOF
%define major 0
EOF
	if $SNAPSHOT; then
		cat >>$NAME.spec <<EOF
%define beta %{nil}
%define scmrev %{nil}
EOF
	fi
	cat >>$NAME.spec <<EOF
%define libname %mklibname ${NAME/lib/} %{major}
%define devname %mklibname ${NAME/lib/} -d
EOF
	if $STATIC; then
		cat >>$NAME.spec <<EOF
%define staticname %mklibname ${NAME/lib/} -d -s
EOF
	fi

	cat >>$NAME.spec <<EOF

Name: $NAME
Version:
EOF

	if $SNAPSHOT; then
		cat >>$NAME.spec <<EOF
%if "%{beta}" == ""
%if "%{scmrev}" == ""
Release: 1
Source: %{name}-%{version}.tar.bz2
%else
Release: 0.%{scmrev}.1
Source: %{name}-%{scmrev}.tar.xz
%endif
%else
%if "%{scmrev}" == ""
Release: 0.%{beta}.1
Source: %{name}-%{version}%{beta}.tar.bz2
%else
Release: 0.%{beta}.%{scmrev}.1
Source: %{name}-%{scmrev}.tar.xz
%endif
%endif
EOF
	else
		cat >>$NAME.spec <<EOF
Release: 1
Source0: %{name}-%{version}.tar.xz
EOF
	fi

	cat >>$NAME.spec <<EOF
Summary:
URL: http://$NAME.sf.net/
License: GPL
Group: System/Libraries
EOF
	$CMAKE && echo 'BuildRequires: cmake' >>$NAME.spec
	$TRACK && cat >>$NAME.spec <<EOF

%track
prog %{name} = {
	url = http://
	regex = "version (__VER__)"
	version = %{version}
}
EOF
	cat >>$NAME.spec <<EOF

%description

%package -n %{libname}
Summary:
Group: System/Libraries

%description -n %{libname}

%package -n %{devname}
Summary: Development files for %{name}
Group: Development/C
Requires: %{libname} = %{EVRD}

%description -n %{devname}
Development files (Headers etc.) for %{name}.
EOF

	if $STATIC; then
		cat >>$NAME.spec <<EOF

%package -n %{staticname}
Summary: Static libraries for linking to %{name}
Group: Development/C
Requires: %{devname} = %{EVRD}

%description -n %{staticname}
Static libraries for linking to %{name}.

Install this package if you wish to develop or compile applications using
%{name} statically (users of the resulting binary won't need %{name} installed
with static linking).
EOF
	fi

	cat >>$NAME.spec <<EOF

%prep
EOF

	if $SNAPSHOT; then
		cat >>$NAME.spec <<EOF
%if "%{scmrev}" == ""
%setup -q -n %{name}-%{version}%{beta}
%else
%setup -q -n %{name}
%endif
EOF
	else
		cat >>$NAME.spec <<EOF
%setup -q
EOF
	fi

	if $CMAKE; then
		echo "%cmake" >>$NAME.spec
		MAKEARGS=" -C build"
	else
		echo "%configure" >>$NAME.spec
		MAKEARGS=""
	fi
	cat >>$NAME.spec <<EOF

%build
%make$MAKEARGS

%install
%makeinstall_std$MAKEARGS

%files
%{_bindir}/*

%files -n %{libname}
%{_libdir}/*.so.%{major}*

%files -n %{devname}
%{_includedir}/*
%{_libdir}/*.so
%{_libdir}/pkgconfig/*
EOF
	if $CMAKE; then
		echo '%{_libdir}/cmake/*' >>$NAME.spec
	fi

	if $STATIC; then
		cat >>$NAME.spec <<EOF

%files -n %{staticname}
%{_libdir}/*.a
EOF
	fi
fi
exec $EDITOR "$NAME".spec
