# libctl: flexible Guile-based control files for scientific software # Copyright (C) 1998 Steven G. Johnson # # This file may be used without restriction. It is in the public # domain, and is NOT restricted by the terms of any GNU license. # # This library 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 # Library General Public License for more details. # # Steven G. Johnson can be contacted at stevenj@alum.mit.edu. SHELL = @SHELL@ ############################################################################## # Makefile.in for programs using libctl (assumes that autoconf is # being used, of course). You should only need to change the definitions # in this section of the file. SPECIFICATION_FILE = mpb.scm PROGRAM_NAME = mpb # what is printed out when invoking your program with --version: VERSION_STRING = "MIT Photonic Bands @MPB_VERSION@, Copyright (C) 1999-2001 by MIT." # objects for program sources: OBJECTS = mpb.o epsilon.o fields.o epsilon_file.o matrix-smob.o field-smob.o \ geom.o # since we use the geom.scm utilities HEADERS = # any extra header files you are dependent on MY_LIBS = ../src/maxwell/maxwell.a \ ../src/matrixio/matrixio.a \ ../src/matrices/matrices.a \ ../src/util/util.a MY_LDFLAGS = # extra -L flags go here MY_CPPFLAGS = -I. -I../src/util -I../src/matrices -I../src/matrixio \ -I../src/maxwell MY_DEFS = -DHAVE_CTL_HOOKS=1 -DHAVE_CTL_EXPORT_HOOK=1 # The following variables should be detected and set by autoconf: # libctl install. dir., e.g. /usr/local/share/libctl LIBCTL_DIR = @LIBCTL_DIR@ # gen-ctl-io program GEN_CTL_IO = @GEN_CTL_IO@ ############################################################################## # don't (normally) edit past here # ############################################################################## CC = @CC@ CFLAGS = @CFLAGS@ CPPFLAGS = -I. $(MY_CPPFLAGS) @CPPFLAGS@ DEFS = @DEFS@ $(CTL_DEFS) $(MY_DEFS) ############################################################################## LIBS = $(MY_LIBS) @LIBS@ LDFLAGS = $(MY_LDFLAGS) @LDFLAGS@ ############################################################################## INSTALL = @INSTALL@ prefix = @prefix@ mandir = @mandir@ # c.f. AC_ARG_PROGRAM autoconf docs: transform=@program_transform_name@ @SET_MAKE@ ############################################################################## CTL_DEFS = -DCTL_SCM='"'$(LIBCTL_DIR)/base/ctl.scm'"' \ -DINCLUDE_SCM='"'$(LIBCTL_DIR)/base/include.scm'"' \ -DSPEC_SCM='"'$(prefix)/share/libctl/specs/$(SPECIFICATION_FILE)'"' \ -DVERSION_STRING='"'$(VERSION_STRING)'"' ############################################################################## ALL_OBJECTS = main.o ctl-io.o $(OBJECTS) all: $(PROGRAM_NAME) mpb-split-tmp main.o: main.c ctl-io.h mpb.o: mpb.c ctl-io.h mpb.h epsilon.o: epsilon.c ctl-io.h mpb.h fields.o: fields.c ctl-io.h mpb.h matrix-smob.o: matrix-smob.c matrix-smob.h my-smob.h ctl-io.h mpb.h field-smob.o: field-smob.c field-smob.h my-smob.h ctl-io.h mpb.h ctl-io.c ctl-io.h: $(SPECIFICATION_FILE) $(GEN_CTL_IO) $(SPECIFICATION_FILE) $(LIBCTL_DIR) # Some hackery follows. The program executable needs to have the # location of the spec file hard-coded into it. However, we have to # hard-code the location that the spec file *will* be in when it is # installed...but we would still like to be able to run the program # before installing it. So, the actual executable is named # .$(PROGRAM_NAME) (notice the leading dot), and $(PROGRAM_NAME) is a # shell script that calls the executable, specifying the uninstalled # spec file location via the --spec-file command-line argument. 'make # install' copies the real executable and spec files into their final # locations. $(PROGRAM_NAME): ctl-io.h $(ALL_OBJECTS) $(MY_LIBS) $(CC) $(LDFLAGS) $(CFLAGS) $(ALL_OBJECTS) $(LIBS) -o .$@ rm -f $@ echo '#!/bin/sh' > $@ echo `pwd`/.$@ --spec-file=`pwd`/$(SPECIFICATION_FILE) '$$*' >> $@ chmod u+x $@ main.c: $(LIBCTL_DIR)/base/main.c cp -f $(LIBCTL_DIR)/base/main.c $@ geom.c: $(LIBCTL_DIR)/utils/geom.c cp -f $(LIBCTL_DIR)/utils/geom.c $@ .c.o: $(HEADERS) ctl-io.h $(CC) -c $(DEFS) $(CPPFLAGS) $(CFLAGS) $< -o $@ # 'make install' target. This is supplied here so that you can easily # copy this Makefile into your own program, but it should not be # called for the example program included with libctl (and is not, at # least by the top-level Makefile). Two reasons: first, you don't # really want to install the example program; and second, it won't # work because LIBCTL_DIR is not set to the global (post-install) # location of libctl. install: install-mpb @INSTALL_MPB_SPLIT@ install-mpb: $(PROGRAM_NAME) $(INSTALL) -d $(prefix)/bin $(INSTALL) -m 0755 -s .$(PROGRAM_NAME) $(prefix)/bin/`echo $(PROGRAM_NAME)|sed '$(transform)'` $(INSTALL) -d $(prefix)/share/libctl/specs $(INSTALL) -m 0644 $(SPECIFICATION_FILE) $(prefix)/share/libctl/specs $(INSTALL) -d $(mandir)/man1 $(INSTALL) -m 0644 $(PROGRAM_NAME).1 $(mandir)/man1 mpb-split-tmp: rm -f mpb-split-tmp mpb_name=`echo mpb | sed '$(transform)'`; \ sed "s%\./mpb%"$(prefix)/bin/"$$mpb_name%g" mpb-split > mpb-split-tmp; install-mpb-split: mpb-split-tmp mpb_name=`echo mpb | sed '$(transform)'`; \ $(INSTALL) -m 0755 mpb-split-tmp $(prefix)/bin/$${mpb_name}-split $(INSTALL) -d $(mandir)/man1 $(INSTALL) -m 0644 mpb-split.1 $(mandir)/man1 clean: rm -f $(ALL_OBJECTS) ctl-io.c ctl-io.h main.c geom.c \ .$(PROGRAM_NAME) $(PROGRAM_NAME) core mpb-split-tmp ############################################################################## check: $(PROGRAM_NAME) ./$(PROGRAM_NAME) examples/check.ctl