diff --git a/.gitignore b/.gitignore
index 1a5ae3d..bcb31b4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,6 +20,7 @@ COPYING
INSTALL
aclocal.m4
autom4te.cache
+configure~
config.guess
config.log
config.status
diff --git a/sources/CONTRIBUTION.md b/sources/CONTRIBUTION.md
index 73f867e..0f7a4a0 100644
--- a/sources/CONTRIBUTION.md
+++ b/sources/CONTRIBUTION.md
@@ -2,3 +2,4 @@
It is suggested for the new contributors to use the following tools:
- `clang-format` for all the C files, source and headers.
+- `shfmt -ci -i 4 -ln posix` for shell format with the following parameters.
diff --git a/sources/autogen.sh b/sources/autogen.sh
index 712e2b0..39f36c6 100755
--- a/sources/autogen.sh
+++ b/sources/autogen.sh
@@ -1,275 +1,26 @@
-#!/usr/bin/env bash
+#!/bin/sh
#
-# autogen.sh - Tools for manipulating Jalali representation of Iranian calendar
-# and necessary conversations to Gregorian calendar.
-# Copyright (C) 2006, 2007, 2009, 2010, 2011 Ashkan Ghassemi.
+# Run GNU Autotool commands forcefully to regenerate stuff.
#
-# This file is part of libjalali.
-#
-# libjalali is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# libjalali is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with libjalali. If not, see .
-#
-
-# @OPTIONS
-OPTS="anch"
-LONG_OPTS="nocolor,clean,help,alternative"
-
-# @USAGE
-function usage() {
- echo -e "Jalali calendar library autogen build script."
- echo -e "usage: autogen.sh [-nch]"
- echo -e "try \`autogen.sh --help\' for more information."
-}
-
-# @HELP
-function help() {
- echo -e "usage: autogen.sh [-nch]..."
- echo -ne "Invokes GNU build system tools in order to create"
- echo -e " necessary configuration scripts.\n"
- echo -e "Operation modes:"
- echo -e " -a, --alternative\tdo not invoke autoreconf"
- echo -e " -n, --nocolor\t\tdisable output colors"
- echo -ne " -c, --clean\t\tremove all auto-generated scripts"
- echo -e " and files from source tree"
- echo -e " -h, --help\t\tprint this help, then exit\n"
- echo -e "Report bugs to ."
- echo -e "Jalali calendar home page: ."
-}
-
-# echoes ``ok'' if parameter is zero, ''failed'' otherwise.
-function printk() {
- local STAT=$1
-
- if [ $1 -eq 0 ]; then
- echo -e "${GREEN}ok${RESET}"
- else
- echo -e "${RED}failed${RESET}"
- fi
-
- return ${STAT}
-}
-
-# performs make distclean and removes auto-generated files by GNU build system.
-function clean() {
- local STAT
- # files
- local FUBARS=( "autom4te.cache" "Makefile.in" "m4" "aclocal.m4"
- "configure" "config.sub" "config.guess" "config.log"
- "config.status" "depcomp" "install-sh" "libtool" "ltmain.sh"
- "missing" "src/Makefile.in" "man/Makefile.in"
- "test_kit/jalali/Makefile.in" "test_kit/jalali/Makefile"
- "test_kit/Makefile.in" "test_kit/Makefile"
- "test_kit/jalali/.deps" "test_kit/jtime/.deps"
- "test_kit/jtime/Makefile.in" "test_kit/jalali/Makefile"
- "libjalali/Makefile.in" "INSTALL" )
-
- echo -e "${GREEN}*${RESET} ${YELLOW}cleaning source tree...${RESET}"
-
- # Makefile is present.
- if test -f Makefile; then
- echo -ne "${GREEN}* ${RESET}${YELLOW}performing distclean on"
- echo -ne " sources if possible...${RESET} "
- make distclean >/dev/null 2>&1
- let STAT=$?
-
- printk ${STAT}
- if [ ${STAT} -ne 0 ]; then
- echo -ne "${RED}error${RESET}: cannot perform make distclean."
- echo -e " run make distclean manually and check for erros."
- fi
- fi
-
- for i in ${FUBARS[@]}; do
- if [ -f $i ] || [ -d $i ]; then
- echo -ne "${GREEN}*${RESET} ${YELLOW}deleting $i...${RESET} "
- rm -rf $i
- printk 0
- fi
- done
-
- echo -e "${GREEN}* done${RESET}"
-}
-
-# Setting colors to vt100 standard values, NULL if 0 gets passed to set_color()
-function set_colors() {
- local HAS_COLOR=$1
-
- if [ ${HAS_COLOR} -eq 1 ]; then
- RED="\033[1;31m"
- GREEN="\033[1;32m"
- YELLOW="\033[1;33m"
- CYAN="\033[1;36m"
- RESET="\033[0m"
- else
- RED=""
- GREEN=""
- YELLOW=""
- CYAN=""
- RESET=""
- fi
-}
-
-# @is_present() $SERVICE $NAME $OUTPUT $EXIT
-# Checks whether a service is present on system.
-# $SERVICE is the path to service.
-# $NAME is the service name.
-# $OUTPUT specifies whether is_present() should work silently or not.
-# $EXIT specifies whther is_present() should exit on the event of
-# service not found.
-function is_present() {
- local SERVICE=$1
- local NAME=$2
- local OUTPUT=$3
- local EXIT=$4
- local PRESENT=0
-
- if [ -n "${SERVICE}" ]; then
- let PRESENT=1
- fi
-
- if [ ${OUTPUT} -eq 1 ]; then
- echo -ne "${GREEN}*${RESET} checking for ${YELLOW}${NAME}${RESET}... "
- if [ ${PRESENT} -eq 1 ]; then
- echo -e "${GREEN}yes${RESET}"
- else
- echo -e "${RED}no${RESET}"
- fi
- fi
-
- if [ ${PRESENT} -eq 0 ] && [ ${EXIT} -eq 1 ]; then
- echo -ne "${RED}error${RESET}: ${YELLOW}${NAME}${RESET} was not found"
- echo -e "on your system. autogen.sh cannot continue."
- exit 1
- fi
-
- return ${PRESENT}
-}
-
-# Checking for tools
-# aclocal, libtoolize, autoconf, automake and autoreconf
-function check_services() {
- local STAT
- ACLOCAL="$(which aclocal 2>/dev/null)"
- is_present "${ACLOCAL}" "aclocal" 1 1
- # glibtoolize glue-patch
- LIBTOOLIZE="$(which glibtoolize 2>/dev/null)"
- STAT=$?
- is_present "${LIBTOOLIZE}" "glibtoolize" 1 0
- if [ ${STAT} -ne 0 ]; then
- LIBTOOLIZE="$(which libtoolize 2>/dev/null)"
- is_present "${LIBTOOLIZE}" "libtoolize" 1 1
- fi
- AUTOCONF="$(which autoconf 2>/dev/null)"
- is_present "${AUTOCONF}" "autoconf" 1 1
- AUTOMAKE="$(which automake 2>/dev/null)"
- is_present "${AUTOMAKE}" "automake" 1 1
- AUTORECONF="$(which autoreconf 2>/dev/null)"
- is_present "${AUTORECONF}" "autoreconf" 1 0
- echo -e "${GREEN}* done${RESET}\n"
-}
-
-# @perform() $SERVICE $NAME $EXIT $PARAMS
-# runs a service with a set of parameters.
-# $SERVICE is the path to the service.
-# $NAME is the service name.
-# $EXIT specifies whether perform() should exit on the event of
-# encoutering any errors or not.
-# $PARAMS are the parameters passed to the service.
-function perform() {
- local SERVICE=$1
- local NAME=$2
- local EXIT=$3
- local PARAMS=$4
- local SSTAT
-
- echo -ne "${GREEN}*${RESET} running ${YELLOW}${NAME}${RESET} ${CYAN}${PARAMS}${RESET}... "
- ${SERVICE} ${PARAMS} >/dev/null 2>&1
- let STAT=$?
-
- printk ${STAT}
-
- if [ ${STAT} -ne 0 ]; then
- echo -ne "${RED}error${RESET}: cannot run ${YELLOW}${NAME}${RESET}."
- echo -e " please run ${NAME} manually and check for errors."
- fi
-
- if [ ${EXIT} -eq 1 ] && [ ${STAT} -ne 0 ]; then
- exit 1
- fi
-}
-
-# Operation modes.
-CLEAN=0
-HELP=0
-COLOR=1
-ALTERN=0
-
-which which 1>/dev/null 2>&1
-if [ $? -ne 0 ]; then
- echo -e "cannot find \`\`which''. autogen cannot continue."
- exit 1
+# Reverse the generation by removing any file created (`git clean -fxdn` lists
+# them).
+
+libtoolize="$(command -v libtoolize || command -v glibtoolize)"
+if [ -z "$libtoolize" ]; then
+ printf "libtoolize or glibtoolize is needed and not found.
+ Add to \$PATH or use another way to bootstrap the project.\n"
+ exit 1
fi
-# Parsing command-line arguments
-GETOPT=`which getopt 2>/dev/null`
-if [ -z ${GETOPT} ]; then
- echo -ne "warning: getopt(1) was not found on your system."
- echo -e " command line arguments will be ignored."
-else
- TEMP=`${GETOPT} -o ${OPTS} -l ${LONG_OPTS} -n 'autogen.sh' -- "$@"`
-
- for i in $TEMP; do
- case $i in
- -c|--clean) let CLEAN=1;;
- -n|--nocolor) let COLOR=0;;
- -h|--help) let HELP=1;;
- -a|--alternative) let ALTERN=1;;
- esac
- done
-fi
-
-# Setting colors.
-set_colors ${COLOR}
-
-# HELP
-if [ ${HELP} -eq 1 ]; then
- help
- exit 0
-fi
-
-# CLEAN
-if [ ${CLEAN} -eq 1 ]; then
- clean
- exit 0
-fi
-
-# Checking for services.
-check_services
-
-# alternative method.
-if [ -z "${AUTORECONF}" ] || [ ${ALTERN} -eq 1 ]; then
- echo -e "using alternative method: ${YELLO}manual${RESET}"
- perform "${LIBTOOLIZE}" "libtoolize" "1" "--force --copy --install"
- perform "${ACLOCAL}" "aclocal" "1" "--force"
- perform "${AUTOMAKE}" "automake" "1" "--add-missing --force-missing --copy"
- perform "${AUTOCONF}" "autoconf" "1" "--force"
- echo -e "${GREEN}* done${RESET}"
-# autoreconf method
+"$libtoolize" --force --copy --install || exit 1
+if command -v autoreconf; then
+ printf 'using autoreconf...\n'
+ autoreconf --force --install || exit 1
else
- echo -e "using prefered method: ${YELLOW}autoreconf${RESET}"
- perform "${LIBTOOLIZE}" "libtoolize" "1" "--force --copy --install"
- perform "${AUTORECONF}" "autoreconf" "1" "--force --install"
- echo -e "${GREEN}* done${RESET}"
+ printf 'not using autoreconf...\n'
+ aclocal --force || exit 1
+ automake --add-missing --force-missing --copy || exit 1
+ autoconf --force || exit 1
fi
-exit 0
+printf "done. Read the README and INSTALL files.\n"