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"