# File "Makefile": compilation rules for Malaga

# This file is part of Malaga, a system for Left Associative Grammars.
# Copyright (C) 1995-1998 Bjoern Beutel
#
# Bjoern Beutel
# Universitaet Erlangen-Nuernberg
# Abteilung fuer Computerlinguistik
# Bismarckstrasse 12
# D-91054 Erlangen
# e-mail: malaga@linguistik.uni-erlangen.de 
#
# 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

#------------------------------------------------------------------------------

# The Malaga binary directory:
BIN = ../bin

# The Malaga library directory:
LIB = ../lib

# The Malaga TCL directory:
TCL = ../tcl

#------------------------------------------------------------------------------

# Use this definition to create a debug version of Malaga:
#OPTIONS = -DDEBUG -g

# Use this definition to create an optimized version of Malaga:
OPTIONS = -O3 -s

#------------------------------------------------------------------------------

# Use these definitions to create a ISO 8859-1 version of Malaga:
CHAR_SET = LATIN1
HANGUL = 
HANGUL_O =
TRIES_O =
POOLS_O =

# Use these definitions to create a hangul version of Malaga:
#CHAR_SET = HANGUL
#HANGUL = -hangul
#HANGUL_O = hangul.o
#TRIES_O = tries.o
#POOLS_O = pools.o

#------------------------------------------------------------------------------

# How to link a shared library for HP-UX
#LINK_SHARED = ld -b
#SHARED_EXT = sl

# How to link a shared library for Linux and other operating systems
LINK_SHARED = gcc -shared
SHARED_EXT = so

#------------------------------------------------------------------------------

# How to compile a C source file:
COMPILE = gcc -c $(OPTIONS) -ansi -pedantic -Wall -Wstrict-prototypes -fpic \
          -D$(CHAR_SET)

# How to link an executable:
LINK = gcc $(OPTIONS)

# How to create an archive:
ARCHIVE = ar rcs

# "malaga" is the interactive analysis program
# "maldump" dumps Malaga rule files
# "mallex" generates the allomorph lexicon
# "malmake" checks dependencies and calls "malrul", "mallex" and "malsym"
# "malrul" compiles rule files
# "malsym" compiles symbol files
MALAGA = $(BIN)/malaga$(HANGUL)
MALDUMP = $(BIN)/maldump$(HANGUL)
MALLEX = $(BIN)/mallex$(HANGUL)
MALMAKE = $(BIN)/malmake$(HANGUL)
MALRUL = $(BIN)/malrul$(HANGUL)
MALSYM = $(BIN)/malsym$(HANGUL)
MALAGA_BIN = $(MALAGA) $(MALDUMP) $(MALLEX) $(MALMAKE) $(MALRUL) $(MALSYM)

# "libmalaga.a" is a library for both morphological and syntactical analysis
LIBMALAGA = $(LIB)/libmalaga$(HANGUL).a

# "libmalaga.$(SHARED_EXT)" is the shared version of "libmalaga".
LIBMALAGA_S = $(LIB)/libmalaga$(HANGUL).$(SHARED_EXT)

# "libmatrix.$(SHARED_EXT)" is a TCL/Tk library that displays Malaga values.
LIBMATRIX = $(TCL)/libmatrix.$(SHARED_EXT)

# implicit rules --------------------------------------------------------------

.c.o:
	$(COMPILE) $<

# primary goals ---------------------------------------------------------------

all: bin lib

new: clean all

bin: $(MALAGA_BIN)

lib: $(LIBMALAGA) $(LIBMALAGA_S) $(LIBMATRIX)

clean:
	rm -f *.o $(MALAGA_BIN) $(LIBMALAGA) $(LIBMALAGA_S) $(LIBMATRIX)

# libmalaga -------------------------------------------------------------------

LIBMALAGA_OBJS = analysis.o basic.o cache.o commands.o files.o input.o \
                 lexicon.o libmalaga.o malaga_files.o malaga_lib.o options.o \
                 patterns.o pools.o rules.o scanner.o symbols.o \
                 transmit_process.o tries.o values.o $(HANGUL_O)

$(LIBMALAGA): $(LIBMALAGA_OBJS)
	$(ARCHIVE) $(LIBMALAGA) $(LIBMALAGA_OBJS)

$(LIBMALAGA_S): $(LIBMALAGA_OBJS)
	$(LINK_SHARED) $(LIBMALAGA_OBJS) -o$(LIBMALAGA_S) 

# libmatrix -------------------------------------------------------------------

LIBMATRIX_OBJS = basic.o files.o libmatrix.o scanner.o

$(LIBMATRIX): $(LIBMATRIX_OBJS)
	$(LINK_SHARED) $(LIBMATRIX_OBJS) -o$(LIBMATRIX)

# malaga ----------------------------------------------------------------------

MALAGA_OBJS = analysis.o basic.o breakpoints.o cache.o commands.o debugger.o \
              display_process.o files.o generation.o input.o lexicon.o \
              malaga.o malaga_files.o malaga_lib.o options.o patterns.o \
              pools.o rules.o scanner.o symbols.o transmit_process.o tries.o \
              values.o $(HANGUL_O)

$(MALAGA): $(MALAGA_OBJS)
	$(LINK) $(MALAGA_OBJS) -o $(MALAGA)

# maldump ---------------------------------------------------------------------

MALDUMP_OBJS = basic.o files.o malaga_files.o maldump.o patterns.o pools.o \
               rules.o symbols.o values.o $(HANGUL_O) $(TRIES_O)

$(MALDUMP): $(MALDUMP_OBJS)
	$(LINK) $(MALDUMP_OBJS) -o $(MALDUMP)

# mallex ----------------------------------------------------------------------

MALLEX_OBJS = basic.o breakpoints.o commands.o debugger.o display_process.o \
              files.o input.o lex_compiler.o malaga_files.o mallex.o \
              options.o patterns.o pools.o rules.o scanner.o symbols.o \
              tries.o values.o $(HANGUL_O)

$(MALLEX): $(MALLEX_OBJS)
	$(LINK) $(MALLEX_OBJS) -o $(MALLEX)

# malmake ---------------------------------------------------------------------

MALMAKE_OBJS = basic.o files.o input.o malmake.o

$(MALMAKE): $(MALMAKE_OBJS)
	$(LINK) $(MALMAKE_OBJS) -o $(MALMAKE)

# malrul ----------------------------------------------------------------------

MALRUL_OBJS = basic.o files.o malaga_files.o malrul.o patterns.o pools.o \
              rule_code.o rule_compiler.o rule_parser.o rule_symbols.o \
              scanner.o symbols.o values.o $(HANGUL_O) $(TRIES_O)

$(MALRUL): $(MALRUL_OBJS)
	$(LINK) $(MALRUL_OBJS) -o $(MALRUL)

# malsym ----------------------------------------------------------------------

MALSYM_OBJS = basic.o files.o malaga_files.o malsym.o pools.o scanner.o \
              sym_compiler.o symbols.o values.o $(HANGUL_O) $(TRIES_O)

$(MALSYM): $(MALSYM_OBJS)
	$(LINK) $(MALSYM_OBJS) -o $(MALSYM)

# object files in alphabetical order ------------------------------------------
###
analysis.o: basic.h pools.h values.h tries.h instr_type.h rule_type.h rules.h \
	lex_type.h lexicon.h cache.h analysis.h
basic.o: basic.h
breakpoints.o: basic.h pools.h values.h files.h instr_type.h rule_type.h \
	rules.h input.h commands.h breakpoints.h
cache.o: basic.h pools.h values.h cache.h
commands.o: basic.h input.h files.h commands.h
debugger.o: basic.h pools.h values.h symbols.h files.h input.h commands.h \
	options.h instr_type.h rule_type.h rules.h display_process.h \
	breakpoints.h debugger.h
display_process.o: basic.h files.h input.h display_process.h
files.o: basic.h files.h
generation.o: basic.h pools.h values.h input.h commands.h instr_type.h \
	rule_type.h rules.h tries.h lex_type.h lexicon.h analysis.h \
	debugger.h hangul.h generation.h
hangul.o: basic.h pools.h tries.h hangul.h
input.o: basic.h input.h
lex_compiler.o: basic.h pools.h values.h tries.h instr_type.h rule_type.h \
	rules.h scanner.h files.h malaga_files.h symbols.h lex_type.h input.h \
	commands.h hangul.h lex_compiler.h
lexicon.o: basic.h pools.h values.h tries.h files.h malaga_files.h lex_type.h \
	lexicon.h
libmalaga.o: basic.h pools.h values.h symbols.h files.h instr_type.h \
	rule_type.h rules.h tries.h analysis.h input.h commands.h options.h \
	malaga_lib.h hangul.h libmalaga.h
libmatrix.o: basic.h scanner.h
malaga.o: basic.h pools.h values.h symbols.h files.h display_process.h \
	instr_type.h rule_type.h rules.h tries.h analysis.h input.h \
	commands.h options.h malaga_lib.h generation.h debugger.h \
	breakpoints.h cache.h hangul.h
malaga_files.o: basic.h malaga_files.h
malaga_lib.o: basic.h pools.h values.h input.h commands.h options.h \
	malaga_lib.h instr_type.h rule_type.h rules.h files.h analysis.h \
	cache.h symbols.h lex_type.h lexicon.h transmit_process.h hangul.h
maldump.o: basic.h pools.h values.h symbols.h files.h instr_type.h \
	rule_type.h rules.h hangul.h
mallex.o: basic.h pools.h values.h symbols.h scanner.h instr_type.h \
	rule_type.h rules.h files.h lex_compiler.h input.h commands.h \
	options.h breakpoints.h debugger.h display_process.h hangul.h
malmake.o: basic.h files.h malaga_files.h input.h
malrul.o: basic.h pools.h values.h symbols.h scanner.h files.h instr_type.h \
	rule_code.h rule_compiler.h hangul.h
malsym.o: basic.h pools.h values.h scanner.h files.h sym_compiler.h hangul.h
options.o: basic.h pools.h values.h symbols.h input.h commands.h instr_type.h \
	rule_type.h rules.h hangul.h options.h
patterns.o: basic.h patterns.h
pools.o: basic.h files.h pools.h
rule_code.o: basic.h pools.h values.h symbols.h instr_type.h rule_type.h \
	files.h malaga_files.h rule_code.h
rule_compiler.o: basic.h pools.h values.h scanner.h instr_type.h rule_type.h \
	rule_code.h rule_parser.h rule_symbols.h files.h rule_compiler.h
rule_parser.o: basic.h pools.h values.h symbols.h patterns.h files.h \
	scanner.h instr_type.h rule_type.h rule_code.h rule_symbols.h \
	hangul.h rule_parser.h
rule_symbols.o: basic.h pools.h values.h instr_type.h rule_type.h rule_code.h \
	rule_symbols.h
rules.o: basic.h pools.h values.h symbols.h patterns.h files.h malaga_files.h \
	instr_type.h rule_type.h rules.h
scanner.o: basic.h files.h scanner.h
sym_compiler.o: basic.h pools.h values.h scanner.h files.h malaga_files.h \
	sym_type.h symbols.h sym_compiler.h
symbols.o: basic.h pools.h values.h files.h malaga_files.h sym_type.h \
	symbols.h
transmit_process.o: basic.h pools.h values.h files.h input.h scanner.h \
	symbols.h transmit_process.h
tries.o: basic.h pools.h tries.h
values.o: basic.h pools.h hangul.h values.h
