Makefile für Compose erweitert.

make                - erzeugt XCompose gemäß Userkonfiguration
make config         - erfragt interaktiv Userkonfiguration
make install        - erzeugt und installiert ins Homeverzeichnis

eigene_compose_erstellen ist damit ersetzt und kann gelöscht werden.
This commit is contained in:
hans-christoph 2009-07-17 15:20:55 +00:00
parent 374592de28
commit e5b1c004c7
8 changed files with 175 additions and 35 deletions

View File

@ -1,60 +1,101 @@
#
# Neo/Compose/Makefile
# Autor: hcw@gmx.de
# Ort der Modul-Dateien
#
SRC = ./src SRC = ./src
MODULES_FILES = $(wildcard $(SRC)/*.module)
MODULES = $(notdir $(basename $(MODULES_FILES)))
DEFAULTS = \ # Liste von Demofiles, werden bei 'make all' erzeugt.
base \ # Im Grunde ist dies seit 'make config' überflüssig.
base_math \ #
base_greek \ DEMOFILES = \
base_math_greek_lang \ XCompose_base \
base_greek_lang \ XCompose_base_math \
base_roman XCompose_base_math_greek_lang \
XCompose_base_greek_lang \
MODULES_SRC = $(wildcard $(SRC)/*.module) XCompose_base_roman
MODULES = $(notdir $(basename $(MODULES_SRC)))
# Hilfsprogramme
#
CHECKCOMPOSE = ./check-compose.pl CHECKCOMPOSE = ./check-compose.pl
CONFIGURE = /bin/bash ./configure.sh
help : # Nutzerkonfiguration für Zusammenstellung der Datei XCompose.
@echo Available modules: $(MODULES). # Datei .config wird von 'make config' interaktiv geschrieben.
@echo Type \`make XCompose_mod1_mod2_mod3\' to create # Defaultwert, falls .config noch nicht existiert.
@echo " " compose file from modules \`mod1\', \`mod2\', and \`mod3\'. #
@echo Type \`make all\' to create default file set. -include ./.config
@echo Type \`make clean\' to cleanup directory. USER_XCOMPOSE ?= XCompose_base_math
@echo Copy the file XCompose_mod1_mod2_mod3 to \~/.XCompose afterwards.
all : $(addprefix XCompose_, $(DEFAULTS)) #
# 'make' bzw. 'make all' erzeugt die Datei XCompose ohne Installation
#
XCompose%: $(MODULES_SRC) all : XCompose $(DEMOFILES)
@echo Creating file $@
echo "#" >$@ #
echo "# Automatically generated file. Do not edit." >>$@ # 'make config' führt interaktive Abfrage der Konfiguration durch
echo "#" >>$@ # und legt Ergebnis in .config ab
for i in \ #
`echo $@ | sed -e 's/XCompose//;s/_/ /g'`;\
config :
$(CONFIGURE) $(MODULES)
#
# 'make XCompose_foo_bar_baz' erzeugt Datei aus Modulen foo bar baz
#
XCompose_% : $(MODULES_FILES)
@echo "Erzeuge $@."
@echo "#" >$@
@echo "# Automatically generated file $@. Do not edit." >>$@
@echo "#" >>$@
@for i in \
`echo $@ | sed -e 's/XCompose//;s/_/ /g'` ;\
do \ do \
fn=$(SRC)/$$i.module;\ fn=$(SRC)/$$i.module ;\
if [ -e $$fn ]; then \ if [ -e $$fn ]; then \
echo "# begin include module $$i" >>$@ ;\ echo "# begin include module $$i" >>$@ ;\
cat $$fn >>$@ ;\ cat $$fn >>$@ ;\
echo "# end include module $$i" >>$@ ;\ echo "# end include module $$i" >>$@ ;\
else \ else \
echo "*** Warning: file $$fn not found";\ echo "*** Warnung: Datei $$fn kann nicht eingebunden werden" ;\
fi \ fi \
done done
XCompose : XCompose_base XCompose : $(USER_XCOMPOSE) $(wildcard .config)
cp $< $@ cp $< $@
check : #
@for i in XCompose*; do \ # Installiere ins Homeverzeichnis
#
install : XCompose
cp XCompose $${HOME}/.XCompose
#
# Test der XCompose-Dateien auf Korrektheit
#
check :
@for i in $(wildcard XCompose*) ; do \
$(CHECKCOMPOSE) -q $$i || (\ $(CHECKCOMPOSE) -q $$i || (\
echo Problem in file $$i. ;\ echo Problem in Datei $$i. ;\
echo Run \`$(CHECKCOMPOSE) $$i\' for more details. ); done echo Mehr Informationen mit \`$(CHECKCOMPOSE) $$i\'. ); done
#
# weitere Standard-Targets
#
clean : clean :
-rm -f XCompose_* -rm -f XCompose_*
-rm -f XCompose -rm -f XCompose
distclean : clean
-rm -f .config
.PHONY : all config check clean distclean install
.PHONY : clean help check

93
Compose/configure.sh Normal file
View File

@ -0,0 +1,93 @@
# Erzeuge Konfiguration in .config
#
# Aufruf erfolgt über Makefile mittels 'make config'
#
# Autor: hcw@gmx.de
#
# Kommandozeilenparameter: Liste der verfügbaren Module
MODULES=$*
# Pfade und Dateinamen
CONFFILE=.config
MODPATH=./src
MODSUFFIX=.module
if [ ! -e $CONFFILE ] ; then
# leere Konfiguration erzeugen
echo "USER_XCOMPOSE = base " > $CONFFILE
fi
#
# verfügbare Module auslesen und Kurzbeschreibung anzeigen
#
selprompt=
PS3="Gewählte Module sind mit '+' gekennzeichnet.
Auswahl (angegebene Ziffer oder 0 für Ende) > "
echo Verfügbare Module für XCompose:
for i in ${MODULES}; do
sed -n "
/^#configinfo[ \t]*/{
s//$i /
s/^\(.\{10\}\) */\1/
p;q
}
\${
s/.*/$i - ohne Beschreibung/
s/^\(.\{10\}\) */\1/
p
}" ${MODPATH}/${i}${MODSUFFIX}
if grep -q $i $CONFFILE; then
selprompt="${selprompt} ${i}+ ";
else
selprompt="${selprompt} ${i} ";
fi
done
echo
#
# Nutzereingabe
#
again=true
while ${again} ; do
again=false
select MOD in ${selprompt}; do
case "X$MOD" in
X)
if [ "X$REPLY" != "X0" ]; then again=true; fi ;;
*)
again=true
selprompt=`echo $selprompt | sed "s/$MOD/$MOD+/;s/++//"` ;;
esac
break
done
done
#
# Configfile erzeugen
#
echo $selprompt | sed '
s/$/ / # letztes Wort mit Leerzeichen abschließen
s/[^ +]\+ / /g # Wörter ohne plus am Ende löschen
s/+//g # alle Pluszeichen löschen
s/^ *// # Leerzeichen am Anfang und Ende löschen
s/ *$// # Leerzeichen am Anfang und Ende löschen
s/ \+/_/g # Leerzeichen normalisieren
s/^/USER_XCOMPOSE = XCompose_/
' > $CONFFILE
echo
echo Gewählte Module:
cat $CONFFILE
grep -q base $CONFFILE || echo "*** Warnung: Modul 'base' wurde nicht gewählt."
echo
echo "Weiter mit 'make' bzw. 'make install'"

View File

@ -1,3 +1,4 @@
#configinfo Standard-Definitionen (weitgehend auch außerhalb Neo verwendet)
# standard Definitions by Neo keyboard layout # standard Definitions by Neo keyboard layout
# diacritical marks # diacritical marks

View File

@ -1,3 +1,4 @@
#configinfo Griechische Buchstaben mit Akzenten
# additional Definitions by Neo keyboard layout - greek letters # additional Definitions by Neo keyboard layout - greek letters

View File

@ -1,4 +1,4 @@
# Autogenerated list of Klingon Numericals (k0-k3999, K0-K3999) # Autogenerated list of Klingon Numericals (k0-k3999, K0-K3999)
# #
# File encoding: UTF-8 # File encoding: UTF-8
# File format: Linux-Compose-Definitions # File format: Linux-Compose-Definitions
@ -6,6 +6,7 @@
# Licence (short name): CC-BY-SA 3.0 DE # Licence (short name): CC-BY-SA 3.0 DE
# Licence (full name): Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland # Licence (full name): Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland
# Licence-URL: http://creativecommons.org/licenses/by-sa/3.0/de/ # Licence-URL: http://creativecommons.org/licenses/by-sa/3.0/de/
#configinfo Klingonische Zahlen 0 bis 3999
<Multi_key> <k> <0> <space> : "pagh" # KLINGON NUMERAL 0 <Multi_key> <k> <0> <space> : "pagh" # KLINGON NUMERAL 0

View File

@ -1,3 +1,4 @@
#configinfo IPA (international phonetic alphabet)
# IPA-Compose by aleχ, 2009, CC-BY-SA DE 3. # IPA-Compose by aleχ, 2009, CC-BY-SA DE 3.
<Multi_key> <B> <B> : "ʙ" U0299 # LATIN LETTER SMALL CAPITAL B <Multi_key> <B> <B> : "ʙ" U0299 # LATIN LETTER SMALL CAPITAL B

View File

@ -1,3 +1,4 @@
#configinfo mathematische Sonderzeichen
# additional Definitions by Neo keyboard layout - mathematical symbols # additional Definitions by Neo keyboard layout - mathematical symbols

View File

@ -6,6 +6,7 @@
# Licence (short name): CC-BY-SA 3.0 DE # Licence (short name): CC-BY-SA 3.0 DE
# Licence (full name): Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland # Licence (full name): Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland
# Licence-URL: http://creativecommons.org/licenses/by-sa/3.0/de/ # Licence-URL: http://creativecommons.org/licenses/by-sa/3.0/de/
#configinfo römische Zahlen 1 bis 3999
<Multi_key> <r> <1> <space> : "" # SMALL ROMAN NUMERAL 1 <Multi_key> <r> <1> <space> : "" # SMALL ROMAN NUMERAL 1