diff --git a/README.md b/README.md index 3be8d42..c1fcdda 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,44 @@ Стек библиотеки IUP +## Download + +```sh +wget https://sourceforge.net/projects/imtoolkit/files/3.15/Docs%20and%20Sources/im-3.15_Sources.tar.gz +wget https://sourceforge.net/projects/canvasdraw/files/5.14/Docs%20and%20Sources/ftgl-2.1.5_Sources.tar.gz +wget https://sourceforge.net/projects/canvasdraw/files/5.14/Docs%20and%20Sources/freetype-2.10.2_Sources.tar.gz +wget https://sourceforge.net/projects/canvasdraw/files/5.14/Docs%20and%20Sources/pdflib_lite-7.0.5_Sources.tar.gz +wget https://sourceforge.net/projects/canvasdraw/files/5.14/Docs%20and%20Sources/cd-5.14_Sources.tar.gz +wget https://sourceforge.net/projects/iup/files/3.30/Docs%20and%20Sources/iup-3.30_Sources.tar.gz +wget https://www.lua.org/ftp/lua-5.4.4.tar.gz +``` + ## Сборка +Экспорт переменных, где `/root/iup/` путь к репозиторию, а `Linux62_64` релиз ядра (возможен другой путь после компиляции): + +```sh +export USE_PKGCONFIG=Yes +export USE_LUA_VERSION=54 +export USE_LUA54=Yes +export LUA_LIB=/root/iup/lua-5.4.4/src +export LUA_INC=/root/iup/lua-5.4.4/src +export IM_LIB=/root/iup/im/lib/Linux62_64 +export IM_INC=/root/iup/im/include +export FTGL_LIB=/root/iup/ftgl/lib/Linux62_64 +export FTGL_INC=/root/iup/ftgl/include +export PDFLIB_LIB=/root/iup/pdflib7/lib/Linux62_64 +export PDFLIB_INC=/root/iup/pdflib7/include +export CD_LIB=/root/iup/cd/lib/Linux62_64 +export CD_INC=/root/iup/cd/include +``` + +Установить при необходимости (возможны ошибки для старых `webkit`): + +```sh +export USE_GTK3=Yes +``` + ### lua ```sh @@ -11,4 +47,55 @@ cd lua-5.4.4 make linux ``` +### pdflib7 +```sh +cd pdflib7 +make +``` + +### ftgl + +```sh +cd ftgl +make +``` + +### fftw + +Библиотеку необходимо собрать [2 раза](https://www.linuxfromscratch.org/blfs/view/stable-systemd/general/fftw.html) - для одинарной точности и двойной точности (`--enable-sse`, `--enable-float`) + +```sh +cd fftw +./configure --enable-shared --enable-sse --prefix=/usr +make -j16 +make install +make clean +./configure --enable-shared --enable-float --prefix=/usr +make -j16 +make install +``` + +### im + +```sh +cd im +make +``` + +### cd + +```sh +cd cd +make +``` + +### iup + +Применить патч для ядра Linux v6: + +```sh +cd iup +git apply without-lua-prefix-with-linux6.patch +make +``` diff --git a/iup/without-lua-prefix-with-linux6.patch b/iup/without-lua-prefix-with-linux6.patch index 6ac18a7..3341fe0 100644 --- a/iup/without-lua-prefix-with-linux6.patch +++ b/iup/without-lua-prefix-with-linux6.patch @@ -1,224 +1,3 @@ -diff --git a/srclua5/config.mak b/srclua5/config.mak -index 77a8920..2118290 100755 ---- a/srclua5/config.mak -+++ b/srclua5/config.mak -@@ -38,7 +38,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iup_mglplot.mak b/srclua5/iup_mglplot.mak -index 3c3407c..422eb8d 100755 ---- a/srclua5/iup_mglplot.mak -+++ b/srclua5/iup_mglplot.mak -@@ -42,7 +42,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iup_plot.mak b/srclua5/iup_plot.mak -index b2af19d..0ba78fb 100755 ---- a/srclua5/iup_plot.mak -+++ b/srclua5/iup_plot.mak -@@ -43,7 +43,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iup_scintilla.mak b/srclua5/iup_scintilla.mak -index 502bf59..08de8a1 100755 ---- a/srclua5/iup_scintilla.mak -+++ b/srclua5/iup_scintilla.mak -@@ -42,7 +42,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iupcd.mak b/srclua5/iupcd.mak -index 429cd3e..1ee8c72 100755 ---- a/srclua5/iupcd.mak -+++ b/srclua5/iupcd.mak -@@ -44,7 +44,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iupcontrols.mak b/srclua5/iupcontrols.mak -index cb00b95..492906f 100755 ---- a/srclua5/iupcontrols.mak -+++ b/srclua5/iupcontrols.mak -@@ -43,7 +43,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iupfiledlg.mak b/srclua5/iupfiledlg.mak -index 6c6cf98..64ca8b3 100755 ---- a/srclua5/iupfiledlg.mak -+++ b/srclua5/iupfiledlg.mak -@@ -40,7 +40,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iupgl.mak b/srclua5/iupgl.mak -index f633c1c..e1ae256 100755 ---- a/srclua5/iupgl.mak -+++ b/srclua5/iupgl.mak -@@ -41,7 +41,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iupglcontrols.mak b/srclua5/iupglcontrols.mak -index e6469f9..570d924 100755 ---- a/srclua5/iupglcontrols.mak -+++ b/srclua5/iupglcontrols.mak -@@ -42,7 +42,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iupim.mak b/srclua5/iupim.mak -index d2eb2d4..c3fc431 100755 ---- a/srclua5/iupim.mak -+++ b/srclua5/iupim.mak -@@ -42,7 +42,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iupimglib.mak b/srclua5/iupimglib.mak -index fb56ad6..08afb97 100755 ---- a/srclua5/iupimglib.mak -+++ b/srclua5/iupimglib.mak -@@ -40,7 +40,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iupluascripterdlg.mak b/srclua5/iupluascripterdlg.mak -index 56ae104..9132831 100755 ---- a/srclua5/iupluascripterdlg.mak -+++ b/srclua5/iupluascripterdlg.mak -@@ -42,7 +42,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iupole.mak b/srclua5/iupole.mak -index 0b625b6..75dd416 100755 ---- a/srclua5/iupole.mak -+++ b/srclua5/iupole.mak -@@ -41,7 +41,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iuptuio.mak b/srclua5/iuptuio.mak -index 853430c..09ecae1 100755 ---- a/srclua5/iuptuio.mak -+++ b/srclua5/iuptuio.mak -@@ -42,7 +42,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srclua5/iupweb.mak b/srclua5/iupweb.mak -index 9d7dff2..afe171a 100755 ---- a/srclua5/iupweb.mak -+++ b/srclua5/iupweb.mak -@@ -42,7 +42,7 @@ ifdef USE_LUA54 - LUASFX = 54 - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - else - ifdef USE_LUA52 - LUASFX = 52 -diff --git a/srcluaconsole/config.mak b/srcluaconsole/config.mak -index 12baea3..8b02917 100755 ---- a/srcluaconsole/config.mak -+++ b/srcluaconsole/config.mak -@@ -41,7 +41,7 @@ ifdef USE_LUA54 - endif - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - ifneq ($(findstring SunOS, $(TEC_UNAME)), ) - ifneq ($(findstring x86, $(TEC_UNAME)), ) - FLAGS = -std=gnu99 -diff --git a/srcluascripter/config.mak b/srcluascripter/config.mak -index 76300c6..a201098 100755 ---- a/srcluascripter/config.mak -+++ b/srcluascripter/config.mak -@@ -38,7 +38,7 @@ ifdef USE_LUA54 - endif - else - ifdef USE_LUA53 -- LUASFX = 53 -+# LUASFX = 53 - ifneq ($(findstring SunOS, $(TEC_UNAME)), ) - ifneq ($(findstring x86, $(TEC_UNAME)), ) - FLAGS = -std=gnu99 diff --git a/srcvled/config.mak b/srcvled/config.mak index d072320..9daf3e8 100755 --- a/srcvled/config.mak @@ -231,75 +10,98 @@ index d072320..9daf3e8 100755 + INCLUDES = ../src diff --git a/srcweb/config.mak b/srcweb/config.mak -index c528f2c..0d321a4 100755 +index c528f2c..4ff9689 100755 --- a/srcweb/config.mak +++ b/srcweb/config.mak -@@ -35,7 +35,7 @@ else +@@ -35,15 +35,20 @@ else LINK_WEBKIT = Yes ifdef USE_GTK3 - ifneq ($(findstring Linux5, $(TEC_UNAME)), ) -+ ifneq ($(findstring Linux5, $(subst Linux6,Linux5,$(TEC_UNAME))), ) ++ ifneq ($(findstring Linux6, $(TEC_UNAME)), ) DEFINES += USE_WEBKIT2 STDINCS += $(GTK)/include/webkitgtk-4.0 else +- ifneq ($(findstring Linux4, $(TEC_UNAME)), ) ++ ifneq ($(findstring Linux5, $(TEC_UNAME)), ) + DEFINES += USE_WEBKIT2 + STDINCS += $(GTK)/include/webkitgtk-4.0 + else +- STDINCS += $(GTK)/include/webkitgtk-3.0 ++ ifneq ($(findstring Linux4, $(TEC_UNAME)), ) ++ DEFINES += USE_WEBKIT2 ++ STDINCS += $(GTK)/include/webkitgtk-4.0 ++ else ++ STDINCS += $(GTK)/include/webkitgtk-3.0 ++ endif + endif + endif + else diff --git a/tecmake.mak b/tecmake.mak -index 48991a4..42d7131 100755 +index 48991a4..bafe31b 100755 --- a/tecmake.mak +++ b/tecmake.mak -@@ -297,7 +297,7 @@ endif +@@ -297,6 +297,9 @@ endif ifdef GTK_DEFAULT ifndef USE_GTK2 -- ifneq ($(findstring Linux5, $(TEC_UNAME)), ) -+ ifneq ($(findstring Linux5, $(subst Linux6,Linux5,$(TEC_UNAME))), ) ++ ifneq ($(findstring Linux6, $(TEC_UNAME)), ) ++ USE_GTK3 = Yes ++ endif + ifneq ($(findstring Linux5, $(TEC_UNAME)), ) USE_GTK3 = Yes endif - ifneq ($(findstring Linux4, $(TEC_UNAME)), ) -@@ -469,7 +469,7 @@ ifdef USE_LUA52 - LIBLUA_SFX := 52 - endif - ifdef USE_LUA53 -- LIBLUA_SFX := 53 -+# LIBLUA_SFX := 53 - endif - ifdef USE_LUA54 - LIBLUA_SFX := 54 -@@ -877,8 +877,8 @@ ifdef USE_LUA52 - endif - - ifdef USE_LUA53 -- LUA_SFX := 53 -- LIBLUA_SFX := 53 -+# LUA_SFX := 53 -+# LIBLUA_SFX := 53 - override USE_LUA = Yes - LUA := $(LUA53) - NO_LUALIB := Yes -@@ -1207,7 +1207,7 @@ ifdef USE_CD - ifneq ($(findstring Linux4, $(TEC_UNAME)), ) - LIBS += fontconfig - endif -- ifneq ($(findstring Linux5, $(TEC_UNAME)), ) -+ ifneq ($(findstring Linux5, $(subst Linux6,Linux5,$(TEC_UNAME))), ) +@@ -1210,6 +1213,9 @@ ifdef USE_CD + ifneq ($(findstring Linux5, $(TEC_UNAME)), ) LIBS += fontconfig endif ++ ifneq ($(findstring Linux6, $(TEC_UNAME)), ) ++ LIBS += fontconfig ++ endif ifneq ($(findstring cygw, $(TEC_UNAME)), ) -@@ -1245,7 +1245,7 @@ ifdef USE_IM + LIBS += fontconfig + endif +@@ -1245,20 +1251,24 @@ ifdef USE_IM endif ifdef LINK_WEBKIT - ifneq ($(findstring Linux5, $(TEC_UNAME)), ) -+ ifneq ($(findstring Linux5, $(subst Linux6,Linux5,$(TEC_UNAME))), ) ++ ifneq ($(findstring Linux6, $(TEC_UNAME)), ) LIBS += webkit2gtk-4.0 gio-2.0 - else - ifneq ($(findstring Linux4, $(TEC_UNAME)), ) -@@ -1476,7 +1476,7 @@ ifdef USE_GTK - ifneq ($(findstring FreeBSD, $(TEC_UNAME)), ) - STDINCS += /lib/X11R6/include/gtk-2.0 - endif -- ifneq ($(findstring Linux5, $(TEC_UNAME)), ) -+ ifneq ($(findstring Linux5, $(subst Linux6,Linux5,$(TEC_UNAME))), ) +- else +- ifneq ($(findstring Linux4, $(TEC_UNAME)), ) ++ else ++ ifneq ($(findstring Linux5, $(TEC_UNAME)), ) + LIBS += webkit2gtk-4.0 gio-2.0 + else +- ifneq ($(findstring Linux3, $(TEC_UNAME)), ) +- ifdef USE_GTK3 +- LIBS += webkitgtk-3.0 ++ ifneq ($(findstring Linux4, $(TEC_UNAME)), ) ++ LIBS += webkit2gtk-4.0 gio-2.0 ++ else ++ ifneq ($(findstring Linux3, $(TEC_UNAME)), ) ++ ifdef USE_GTK3 ++ LIBS += webkitgtk-3.0 ++ else ++ LIBS += webkitgtk-1.0 ++ endif + else +- LIBS += webkitgtk-1.0 ++ LIBS += webkit-1.0 + endif +- else +- LIBS += webkit-1.0 + endif + endif + endif +@@ -1479,6 +1489,9 @@ ifdef USE_GTK + ifneq ($(findstring Linux5, $(TEC_UNAME)), ) STDINCS += /usr/include/harfbuzz endif ++ ifneq ($(findstring Linux6, $(TEC_UNAME)), ) ++ STDINCS += /usr/include/harfbuzz ++ endif endif + endif + diff --git a/lsb_release b/lsb_release new file mode 100755 index 0000000..3ca71fc --- /dev/null +++ b/lsb_release @@ -0,0 +1,425 @@ +#!/bin/sh +# +# lsb_release - collect LSB conformance status about a system +# +# Copyright (C) 2000, 2002, 2004 Free Standards Group, Inc. +# Originally by Dominique MASSONIE +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# * Changes in 2.0 +# - Support LSB 2.0 module layout (Mats Wichmann) +# The LSB_VERSION is now a colon-separated field of supported module versions +# An /etc/lsb-release.d is searched for modules beyond the core. +# Only the filenames in this directory is looked at, those names are added +# to LSB_VERSION. This allows module support to be handled easily by +# package install/removal without a need to edit lsb-release on the fly. +# - Correct license: FSG == Free Standards Group, Inc. +# +# * Changes in 1.4 +# - "awk" not needed anymore (Loic Lefort) +# - fixed bug #121879 reported by Chris D. Faulhaber, +# some shells doesn't support local variables +# - fixed a bug when single parameter sets many args including -s +# - function DisplayProgramVersion (undocumented) now exits script like Usage +# - cosmetic changes in comments/outputs +# +# * Changes in 1.3 +# - No changes in script, only in build infrastructure +# +# * Changes in 1.2 +# - Fixed more bash'isms +# - LSB_VERSION is no longer required in /etc/lsb-release file +# +# * Changes in 1.1 +# - removed some bash-ism and typos +# Notice: script remains broken with ash because of awk issues +# - changed licence to FSG - "Free Software Group, Inc" +# - fixed problem with --short single arg call +# - changed Debian specifics, codename anticipates release num +# +# Description: +# Collect information from sourceable /etc/lsb-release file (present on +# LSB-compliant systems) : LSB_VERSION, DISTRIB_ID, DISTRIB_RELEASE, +# DISTRIB_CODENAME, DISTRIB_DESCRIPTION (all optional) +# Then (if needed) find and add names from /etc/lsb-release.d +# Then (if needed) find and parse the /etc/[distro]-release file + + +############################################################################### +# DECLARATIONS +############################################################################### + +# This script version +SCRIPTVERSION="2.0" + +# Defines the data files +INFO_ROOT="/etc" # directory of config files +INFO_LSB_FILE="lsb-release" # where to get LSB version +INFO_LSB_DIR="lsb-release.d" # where to get LSB addon modules +INFO_DISTRIB_SUFFIX="release" # - +ALTERNATE_DISTRIB_FILE="/etc/debian_version" # for Debian [based distrib] +ALTERNATE_DISTRIB_NAME="Debian" # " +CHECKFIRST="/etc/redhat-release" # check it before file search + +# Defines our exit codes +EXIT_STATUS="0" # default = Ok :) +ERROR_UNKNOWN="10" # unknown error +ERROR_USER="1" # program misuse +ERROR_PROGRAM="2" # internal error +ERROR_NOANSWER="3" # all required info not available + # typically non LSB compliant distro! + +# Defines our messages +MSG_LSBVER="LSB Version:\t" +MSG_DISTID="Distributor ID:\t" +MSG_DISTDESC="Description:\t" +MSG_DISTREL="Release:\t" +MSG_DISTCODE="Codename:\t" +MSG_NA="n/a" +MSG_NONE="(none)" +MSG_RESULT="" # contains the result in case short output selected + +# Description string delimiter +DESCSTR_DELI="release" + + +############################################################################### +# FUNCTIONS +############################################################################### + +# Display Program Version for internal use (needed by help2man) +DisplayProgramVersion() { + echo "FSG `basename $0` v$SCRIPTVERSION" + echo + echo "Copyright (C) 2000, 2002, 2004 Free Standards Group, Inc." + echo "This is free software; see the source for copying conditions. There\ + is NO" + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR\ + PURPOSE." + echo + echo "Originally written by Dominique MASSONIE." + + exit $EXIT_STATUS +} + +# defines the Usage for lsb_release +Usage() { + echo "FSG `basename $0` v$SCRIPTVERSION prints certain LSB (Linux\ + Standard Base) and" + echo "Distribution information." + echo + echo "Usage: `basename $0` [OPTION]..." + echo "With no OPTION specified defaults to -v." + echo + echo "Options:" + echo " -v, --version" + echo " Display the version of the LSB specification against which the distribution is compliant." + echo " -i, --id" + echo " Display the string id of the distributor." + echo " -d, --description" + echo " Display the single line text description of the distribution." + echo " -r, --release" + echo " Display the release number of the distribution." + echo " -c, --codename" + echo " Display the codename according to the distribution release." + echo " -a, --all" + echo " Display all of the above information." + echo " -s, --short" + echo " Use short output format for information requested by other options (or version if none)." + echo " -h, --help" + echo " Display this message." + + exit $EXIT_STATUS +} + +# Handles the enhanced args (i.e. --something) +EnhancedGetopt() { + getopt -T >/dev/null 2>&1 # is getopt the enhanced one ? + if [ $? = 4 ] + then # Yes, advanced args ALLOWED + OPT=$(getopt -o acdhirsvp \ +--long all,codename,description,help,id,release,short,version,program_version \ + -n 'lsb_release' \ + -- "$@") + else # No, advanced args NOT allowed + # convert (if needed) the enhanced options into basic ones + MYARGS=$(echo "$@" | sed -e "/--/s/-\(-[[:alnum:]]\)[[:alnum:]]*/\1/g") + OPT=$(getopt -o acdhirsvp \ + -n 'lsb_release' \ + -- "$MYARGS") + fi + if [ $? != 0 ] + then + exit $ERROR_PROGRAM + fi + + NB_ARG="" # enabled if many args set in one parameter (i.e. -dris) + eval set -- "$OPT" + while true ; do + case "$1" in + -a|--all) ARG_A="y"; NB_ARG="y"; shift;; + -c|--codename) ARG_C="y"; NB_ARG="y"; shift;; + -d|--description) ARG_D="y"; NB_ARG="y"; shift;; + -i|--id) ARG_I="y"; NB_ARG="y"; shift;; + -r|--release) ARG_R="y"; NB_ARG="y"; shift;; + -s|--short) ARG_S="y"; shift;; + -v|--version) ARG_V="y"; NB_ARG="y"; shift;; + -p|--program_version) DisplayProgramVersion;; + -h|--help) Usage;; + --) shift; break;; + *) EXIT_STATUS=$ERROR_USER + Usage;; + esac + done +} + +# Get/Init LSB infos (maybe Distrib infos too) +GetLSBInfo() { + if [ -f "$INFO_ROOT/$INFO_LSB_FILE" ] + then + # should init at least LSB_VERSION + . "$INFO_ROOT/$INFO_LSB_FILE" + fi + if [ -z "$LSB_VERSION" ] + then + LSB_VERSION=$MSG_NA + else + # if we found LSB_VERSION, continue to look in directory + if [ -d "$INFO_ROOT/$INFO_LSB_DIR" ] + then + for tag in "$INFO_ROOT/$INFO_LSB_DIR/"* + do + LSB_VERSION=$LSB_VERSION:`basename $tag` + done + fi + fi +} + +# Get the whole distrib information string (from ARG $1 file) +InitDistribInfo() { +## Notice: Debian has a debian_version file +## (at least) Mandrake has two files, a mandrake and a redhat one + FILENAME=$1 # CHECKFIRST or finds' result in GetDistribInfo() or "" + + if [ -z "$FILENAME" ] + then + if [ -f "$ALTERNATE_DISTRIB_FILE" ] + then # For Debian only + [ -z "$DISTRIB_ID" ] && DISTRIB_ID="$ALTERNATE_DISTRIB_NAME" + [ -z "$DISTRIB_RELEASE" ] \ + && DISTRIB_RELEASE=$(cat $ALTERNATE_DISTRIB_FILE) + [ -z "$DISTRIB_CODENAME" ] && [ "$DISTRIB_RELEASE" = "2.1" ] \ + && DISTRIB_CODENAME="Slink" + [ -z "$DISTRIB_CODENAME" ] && [ "$DISTRIB_RELEASE" = "2.2" ] \ + && DISTRIB_CODENAME="Potato" +# [ -z "$DISTRIB_CODENAME" ] && [ "$DISTRIB_RELEASE" = "2.3" ] \ +# && DISTRIB_CODENAME="Woody" + [ -z "$DISTRIB_CODENAME" ] && DISTRIB_CODENAME=$DISTRIB_RELEASE + # build the DISTRIB_DESCRIPTION string (never need to be parsed) + [ -z "$DISTRIB_DESCRIPTION" ] \ + && DISTRIB_DESCRIPTION="$DISTRIB_ID $DESCSTR_DELI $DISTRIB_REL\ +EASE ($DISTRIB_CODENAME)" + else # Only for nothing known compliant distrib :( + [ -z "$DISTRIB_ID" ] && DISTRIB_ID=$MSG_NA + [ -z "$DISTRIB_RELEASE" ] && DISTRIB_RELEASE=$MSG_NA + [ -z "$DISTRIB_CODENAME" ] && DISTRIB_CODENAME=$MSG_NA + [ -z "$DISTRIB_DESCRIPTION" ] && DISTRIB_DESCRIPTION=$MSG_NONE + + EXIT_STATUS=$ERROR_NOANSWER + fi + else + NO="" # is Description string syntax correct ? + if [ -z "$DISTRIB_DESCRIPTION" ] \ + || [ -n "$(echo $DISTRIB_DESCRIPTION | \ + sed -e "s/.*$DESCSTR_DELI.*//")" ] + then + TMP_DISTRIB_DESC=$(head -n 1 $FILENAME 2>/dev/null) + [ -z "$DISTRIB_DESCRIPTION" ] \ + && DISTRIB_DESCRIPTION=$TMP_DISTRIB_DESC + else + TMP_DISTRIB_DESC=$DISTRIB_DESCRIPTION + fi + + if [ -z "$TMP_DISTRIB_DESC" ] # head or lsb-release init + then # file contains no data + DISTRIB_DESCRIPTION=$MSG_NONE + NO="y" + else # Do simple check + [ -n "$(echo $TMP_DISTRIB_DESC | \ + sed -e "s/.*$DESCSTR_DELI.*//")" ] \ + && NO="y" + fi + + if [ -n "$NO" ] + then # does not contain "release" delimiter + [ -z "$DISTRIB_ID" ] && DISTRIB_ID=$MSG_NA + [ -z "$DISTRIB_RELEASE" ] && DISTRIB_RELEASE=$MSG_NA + [ -z "$DISTRIB_CODENAME" ] && DISTRIB_CODENAME=$MSG_NA + fi + fi +} + +# Check missing and requested infos, then find the file and get infos +GetDistribInfo() { + NO="" # /etc/lsb-release data are enough to reply what is requested? + [ -n "$ARG_D" ] && [ -z "$DISTRIB_DESCRIPTION" ] && NO="y" + [ -z "$NO" ] && [ -n "$ARG_I" ] && [ -z "$DISTRIB_ID" ] && NO="y" + [ -z "$NO" ] && [ -n "$ARG_R" ] && [ -z "$DISTRIB_RELEASE" ] && NO="y" + [ -z "$NO" ] && [ -n "$ARG_C" ] && [ -z "$DISTRIB_CODENAME" ] && NO="y" + + if [ -n "$NO" ] + then + if [ ! -f "$CHECKFIRST" ] + then + CHECKFIRST=$(find $INFO_ROOT/ -maxdepth 1 \ + -name \*$INFO_DISTRIB_SUFFIX \ + -and ! -name $INFO_LSB_FILE \ + -and -type f \ + 2>/dev/null \ + | head -n 1 ) # keep one of the files found (if many) + fi + InitDistribInfo $CHECKFIRST + fi +} + +# Display version of LSB against which distribution is compliant +DisplayVersion() { + if [ -z "$ARG_S" ] + then + echo -e "$MSG_LSBVER$LSB_VERSION" # at least "n/a" + else + MSG_RESULT="$MSG_RESULT${MSG_RESULT:+ }$LSB_VERSION" + fi +} + +# Display string id of distributor ( i.e. a single word! ) +DisplayID() { + if [ -z "$DISTRIB_ID" ] + then +## Linux could be part of the distro name (i.e. Turbolinux) or a separate word +## set before, after... +## also expect a delimiter ( i.e. "release" ) + if [ -n "$(echo $TMP_DISTRIB_DESC | sed "s/.*$DESCSTR_DELI.*//")" ] + then + DISTRIB_ID=$MSG_NA + else + DISTRIB_ID=$(echo " $TMP_DISTRIB_DESC" \ + | sed -e "s/[[:blank:]][Ll][Ii][Nn][Uu][Xx][[:blank:]]/ /g" \ + -e "s/\(.*\)[[:blank:]]$DESCSTR_DELI.*/\1/" -e "s/[[:blank:]]//g") + fi + fi + if [ -z "$ARG_S" ] + then + echo -e "$MSG_DISTID$DISTRIB_ID" + else + MSG_RESULT="$MSG_RESULT${MSG_RESULT:+ }$DISTRIB_ID" + fi +} + +# Diplay single line text description of distribution +DisplayDescription() { + if [ -z "$DISTRIB_DESCRIPTION" ] + then + # should not be empty since GetDistribInfo called on Initialization ! + EXIT_STATUS=$ERROR_PROGRAM + fi + if [ -z "$ARG_S" ] + then + echo -e "$MSG_DISTDESC$DISTRIB_DESCRIPTION" + else + MSG_RESULT="$MSG_RESULT${MSG_RESULT:+ }\"$DISTRIB_DESCRIPTION\"" + fi +} + +# Display release number of distribution. +DisplayRelease() { + if [ -z "$DISTRIB_RELEASE" ] + then # parse the "$DISTRIB_DESCRIPTION" string + DISTRIB_RELEASE=$(echo "$TMP_DISTRIB_DESC" | \ + sed -e "s/.*$DESCSTR_DELI[[:blank:]]*\([[:digit:]][[:graph:]]*\).*/\1/" ) + [ "$DISTRIB_RELEASE" = "$TMP_DISTRIB_DESC" ] \ + || [ -z "$DISTRIB_RELEASE" ] \ + && DISTRIB_RELEASE=$MSG_NA + fi + if [ -z "$ARG_S" ] + then + echo -e "$MSG_DISTREL$DISTRIB_RELEASE" + else + MSG_RESULT="$MSG_RESULT${MSG_RESULT:+ }$DISTRIB_RELEASE" + fi +} + +# Display codename according to distribution version. +DisplayCodename() { + if [ -z "$DISTRIB_CODENAME" ] + then # parse the "$DISTRIB_DESCRIPTION" string + DISTRIB_CODENAME=$(echo "$TMP_DISTRIB_DESC" | \ + sed -e "s/.*$DESCSTR_DELI.*(\(.*\)).*/\1/") + [ "$DISTRIB_CODENAME" = "$TMP_DISTRIB_DESC" ] \ + || [ -z "$DISTRIB_CODENAME" ] \ + && DISTRIB_CODENAME=$MSG_NA + fi + if [ -z "$ARG_S" ] + then + echo -e "$MSG_DISTCODE$(echo "$DISTRIB_CODENAME" | \ + tr -d "[:blank:]")" # Remove blanks + else + MSG_RESULT="$MSG_RESULT${MSG_RESULT:+ }$(echo "$DISTRIB_CODENAME" | \ + tr -d "[:blank:]")" + fi +} + + +############################################################################### +# MAIN +############################################################################### + +# Check if any prog argument +if [ -z "$1" ] +then + ARG_V="y" # default set to Display LSB Version (not Usage) +else + EnhancedGetopt "$@" # Parse program args + if [ -n "$ARG_S" ] && [ -z "$NB_ARG" ] + then + ARG_V="y" # set also default for --short when single arg + fi +fi + +# Update args to All if requested +if [ -n "$ARG_A" ] +then + [ -z "$ARG_C" ] && ARG_C="y" + [ -z "$ARG_D" ] && ARG_D="y" + [ -z "$ARG_I" ] && ARG_I="y" + [ -z "$ARG_R" ] && ARG_R="y" + [ -z "$ARG_V" ] && ARG_V="y" +fi + +# Initialization +GetLSBInfo +GetDistribInfo + +# Display requested infos (order as follow) +[ -n "$ARG_V" ] && DisplayVersion +[ -n "$ARG_I" ] && DisplayID +[ -n "$ARG_D" ] && DisplayDescription +[ -n "$ARG_R" ] && DisplayRelease +[ -n "$ARG_C" ] && DisplayCodename + +[ -n "$ARG_S" ] && echo "$MSG_RESULT" + +exit $EXIT_STATUS