/*
 * Imakefile
 *
 * Copyright (C) 1996-1998 Satoshi KURAMOCHI <satoshi@ueda.info.waseda.ac.jp>
 *
 * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

/* $Id: Imakefile,v 1.16 1998-04-08 17:27:17+09 satoshi Exp $ */

#include "Local.config"
#include ".version"

########################################################################

#ifdef Have_OSS
SUBDIRS = Xmidisel
PROGRAMS = eplaymidi xeplaymidi xwrdplay
#else
PROGRAMS = xwrdplay
DEFS += -DNOSERVER
#endif

#ifdef Use_Xaw3d
XAWLIB = -lXaw3d
DEFS += -DUse_Xaw3d
#endif

#ifdef Use_Kanji
DEFS += -DKANJI
KCONVOBJ = kconv.o
KCONVSRC = kconv.cc
#endif

#ifdef Have_getopt
DEFS += -DHAVE_GETOPT_H
#else
GETOPT_SRCS = getopt.c getopt1.c
GETOPT_OBJS = getopt.o getopt1.o
#endif

DEFINES = $(DEFS) $(PROTO_DEFINES) -DVERSION=\"$(VERSION)\" \
          -DEPLAYMIDIPATH=\"$(EPLAYMIDI_APPDIR)\" \
          -DFMPATCHPATH=\"$(FMPATCHDIR)\"
CXXEXTRA_DEFINES = $(DEFINES)
/*CXXEXTRA_INCLUDES = -I/usr/local/include/g++*/

#ifdef DEBUG
DEFS += -DDEBUG
CXXDEBUGFLAGS = -g -O2 -pedantic -Wall -pipe \
		/*-fno-default-inline -fkeep-inline-functions*/
#else
#ifdef DISTMAKE
CXXDEBUGFLAGS = -V 2.8.2 -b i586-unknown-linuxlibc1 -m486 \
		-O9 -Wall -pedantic -pipe -s
#else
CXXDEBUGFLAGS = -O6 -Wall -pipe -s
#endif
#endif

#define PassCDebugFlags

#ifdef FreeBSDArchitecture
SYS_LIBRARIES += -lcompat -lxpg4
#endif

# in case of using gcc instead of g++
EXTRA_DEFINES = -x c++
CDEBUGFLAGS = $(CXXDEBUGFLAGS)
EXTRA_INCLUDES = $(CXXEXTRA_INCLUDES)

DEPENDFLAGS = $(CXXEXTRA_INCLUDES)

############### DO NOT TOUCH ANYTHING BELOW THIS LINE ##################

OBJS1 = playmidi.o  playevents.o  patchload.o  emumidi.o  multisig.o \
        midifile.o  rcpfile.o  instrument.o  filelist.o  server.o  \
        server_impl.o  $(KCONVOBJ) $(GETOPT_OBJS)
SRCS1 = playmidi.cc playevents.cc patchload.cc emumidi.cc multisig.cc \
        midifile.cc rcpfile.cc instrument.cc filelist.cc server.cc \
        server_impl.cc $(KCONVSRC) $(GETOPT_SRCS)
OBJS2 = xeplaymidi.o  instrument.o  server.o  $(GETOPT_OBJS)
SRCS2 = xeplaymidi.cc instrument.cc server.cc $(GETOPT_SRCS)
OBJS3 = xwrdplay.o  magfile.o  server.o  $(KCONVOBJ) $(GETOPT_OBJS)
SRCS3 = xwrdplay.cc magfile.cc server.cc $(KCONVSRC) $(GETOPT_SRCS)
XPMLIB = -lXpm

SRCS = $(SRCS1) $(SRCS2) $(SRCS3)
OBJS = $(OBJS1) $(OBJS2) $(OBJS3)

DOCS = COPYING README.eplaymidi README.eplaymidi.j
ORIGSRCS = Imakefile Local.config xeplaymidi.cc instrument.cc lcdchars.h \
           rcpfile.cc xwrdplay.cc kconv.cc kconv.h shmem.h wrd.h filelist.cc \
           filelist.h server.cc server.h server_impl.cc server_impl.h \
           buttons.h
GETOPTSRCS = getopt.c getopt1.c getopt.h
MAGSRCS = magfile.cc magfile.h
IMAGES = images/icon.xpm images/gm.xpm images/gs.xpm images/xg.xpm
MISC = sample.resource sample.resource.j wrd.gperf .version
PATCHFILE = playmidi-patch-$(VERSION)
DISTFILES = $(DOCS) $(ORIGSRCS) $(GETOPTSRCS) $(MAGSRCS) $(PATCHFILE) \
            $(IMAGES) $(MISC)
DISTDIR = eplaymidi-$(VERSION)
BINDIST = eplaymidi-$(ARCH)-$(VERSION)
ARCH = x86-linux

AllTarget($(PROGRAMS))
DependTarget()
NormalCplusplusProgramTarget(eplaymidi,$(OBJS1),,,$(SYS_LIBRARIES))
NormalCplusplusProgramTarget(xeplaymidi,$(OBJS2),XawClientDepLibs,XawClientLibs $(XPMLIB),$(SYS_LIBRARIES))
NormalCplusplusProgramTarget(xwrdplay,$(OBJS3),$(DEPXLIB),$(XLIB),$(SYS_LIBRARIES))
MakeDirectories(install,$(EPLAYMIDI_APPDIR))
#ifdef Have_OSS
InstallProgram(eplaymidi,$(EPLAYMIDI_BINDIR))
InstallProgram(xeplaymidi,$(EPLAYMIDI_BINDIR))
#endif
InstallProgram(xwrdplay,$(EPLAYMIDI_BINDIR))
#ifdef Have_OSS
InstallNonExec(icon.xpm,$(EPLAYMIDI_APPDIR))
InstallNonExec(gm.xpm,$(EPLAYMIDI_APPDIR))
InstallNonExec(gs.xpm,$(EPLAYMIDI_APPDIR))
InstallNonExec(xg.xpm,$(EPLAYMIDI_APPDIR))
InstallNonExec(drums.o3,$(FMPATCHDIR))
InstallNonExec(drums.sb,$(FMPATCHDIR))
InstallNonExec(std.o3,$(FMPATCHDIR))
InstallNonExec(std.sb,$(FMPATCHDIR))
#endif

MakeSubdirs($(SUBDIRS))
MakefileSubdirs($(SUBDIRS))
DependSubdirs($(SUBDIRS))
CleanSubdirs($(SUBDIRS))
InstallSubdirs($(SUBDIRS))
InstallManSubdirs($(SUBDIRS))

# If your C++ compiler cannot be specified the language for the input
# files explicitly unlike g++, you should type `make rename' to rename
# `*.c' to `*.cc'.
rename:: .renamed

.renamed:
	mv -i playmidi.c playmidi.cc
	mv -i playevents.c playevents.cc
	mv -i patchload.c patchload.cc
	mv -i emumidi.c emumidi.cc
	mv -i multisig.c multisig.cc
	mv -i midifile.c midifile.cc
	touch $@

wrd.h: wrd.gperf
	(gperf -D -l -c -C -a -f -o -k1,2,4,$$ -n -p -S1 -g -t -N \
	 is_reserved_word wrd.gperf) > $@

DIFF = diff -u --minimal --speed-large-files
$(PATCHFILE): diff
diff::
	-$(RM) $(PATCHFILE)
	-($(DIFF) playmidi-1.2/emumidi.c emumidi.cc) >> $(PATCHFILE); true
	-($(DIFF) playmidi-1.2/midifile.c midifile.cc) >> $(PATCHFILE); true
	-($(DIFF) playmidi-1.2/midifile.h midifile.h) >> $(PATCHFILE); true
	-($(DIFF) playmidi-1.2/multisig.c multisig.cc) >> $(PATCHFILE); true
	-($(DIFF) playmidi-1.2/patchload.c patchload.cc) >> $(PATCHFILE); true
	-($(DIFF) playmidi-1.2/playevents.c playevents.cc) >> $(PATCHFILE); true
	-($(DIFF) playmidi-1.2/playmidi.c playmidi.cc) >> $(PATCHFILE); true
	-($(DIFF) playmidi-1.2/playmidi.h playmidi.h) >> $(PATCHFILE); true
	-($(DIFF) playmidi-1.2/etc.magic.add etc.magic.add) >> $(PATCHFILE); true
#	gzip -9f $(PATCHFILE)

distribute: $(PATCHFILE)
	-rm -frv $(DISTDIR)
	mkdir $(DISTDIR)
	cp -av $(DISTFILES) $(DISTDIR)/
	mkdir $(DISTDIR)/Xmidisel
	cp -av Xmidisel//**/*.h Xmidisel//**/*.cc Xmidisel/Imakefile $(DISTDIR)/Xmidisel
	tar zxf ../playmidi_1.2.tgz -C $(DISTDIR)/
	tar zcvf $(DISTDIR).tar.gz $(DISTDIR)

bindist:
	-rm -frv $(DISTDIR)
	mkdir $(DISTDIR)
	cp -av Imakefile *.h $(SRCS) $(DISTDIR)/
	(cd $(DISTDIR) && xmkmf && make && rm *.o)
	tar zcvf $(BINDIST).tar.gz $(DISTDIR)

TAGS::
	etags -C -S $(SRCS) *.h

