VMS Installation Notes Jouk Jansen sent us his changes to get FFTW 1.2 running under VMS. To get fftw_test working, he copied GETOPT.C from http://www.openvms.digital.com/cd/UUDECODE/SRC. He also made the following changes to FFTW files: In src/Makefile: # VMS LIBFFT = libfftw.olb HEADERS = fftw.h INCLUDE = /include=[] LIBDIR = sys$library INCLUDEDIR =sys$library RM = delete CP = copy MAKE = mms AR = library CC = cc CFLAGS = /optimize$(INCLUDE) NOTW_PREFIX=fn_ TWID_PREFIX=ftw_ NOTWI_PREFIX=fni_ TWIDI_PREFIX=ftwi_ NOTW_BLOCKS=$(NOTW_PREFIX)1.obj;,$(NOTW_PREFIX)2.obj;,$(NOTW_PREFIX)3.obj;, \ $(NOTW_PREFIX)4.obj;,$(NOTW_PREFIX)5.obj;,$(NOTW_PREFIX)6.obj;, \ $(NOTW_PREFIX)7.obj;,$(NOTW_PREFIX)8.obj;,$(NOTW_PREFIX)9.obj;, \ $(NOTW_PREFIX)10.obj;,$(NOTW_PREFIX)11.obj;,$(NOTW_PREFIX)12.obj;, \ $(NOTW_PREFIX)13.obj;,$(NOTW_PREFIX)14.obj;,$(NOTW_PREFIX)15.obj;, \ $(NOTW_PREFIX)16.obj;,$(NOTW_PREFIX)32.obj;,$(NOTW_PREFIX)64.obj;, TWID_BLOCKS=$(TWID_PREFIX)2.obj;,$(TWID_PREFIX)3.obj;,$(TWID_PREFIX)4.obj;, \ $(TWID_PREFIX)5.obj;,$(TWID_PREFIX)6.obj;,$(TWID_PREFIX)7.obj;, \ $(TWID_PREFIX)8.obj;,$(TWID_PREFIX)9.obj;,$(TWID_PREFIX)10.obj;, \ $(TWID_PREFIX)16.obj;,$(TWID_PREFIX)32.obj;,$(TWID_PREFIX)64.obj;, NOTWI_BLOCKS=$(NOTWI_PREFIX)1.obj;,$(NOTWI_PREFIX)2.obj;,$(NOTWI_PREFIX)3.obj;,\ $(NOTWI_PREFIX)4.obj;,$(NOTWI_PREFIX)5.obj;,$(NOTWI_PREFIX)6.obj;, \ $(NOTWI_PREFIX)7.obj;,$(NOTWI_PREFIX)8.obj;,$(NOTWI_PREFIX)9.obj;, \ $(NOTWI_PREFIX)10.obj;,$(NOTWI_PREFIX)11.obj;,$(NOTWI_PREFIX)12.obj;, \ $(NOTWI_PREFIX)13.obj;,$(NOTWI_PREFIX)14.obj;,$(NOTWI_PREFIX)15.obj;, \ $(NOTWI_PREFIX)16.obj;,$(NOTWI_PREFIX)32.obj;,$(NOTWI_PREFIX)64.obj;, TWIDI_BLOCKS=$(TWIDI_PREFIX)2.obj;,$(TWIDI_PREFIX)3.obj;, \ $(TWIDI_PREFIX)4.obj;,$(TWIDI_PREFIX)5.obj;,$(TWIDI_PREFIX)6.obj;, \ $(TWIDI_PREFIX)7.obj;,$(TWIDI_PREFIX)8.obj;,$(TWIDI_PREFIX)9.obj;, \ $(TWIDI_PREFIX)10.obj;,$(TWIDI_PREFIX)16.obj;,$(TWIDI_PREFIX)32.obj;,\ $(TWIDI_PREFIX)64.obj;, NOTW_SRC=$(NOTW_PREFIX)1.c $(NOTW_PREFIX)2.c $(NOTW_PREFIX)3.c \ $(NOTW_PREFIX)4.c $(NOTW_PREFIX)5.c $(NOTW_PREFIX)6.c \ $(NOTW_PREFIX)7.c $(NOTW_PREFIX)8.c $(NOTW_PREFIX)9.c \ $(NOTW_PREFIX)10.c $(NOTW_PREFIX)11.c $(NOTW_PREFIX)12.c \ $(NOTW_PREFIX)13.c $(NOTW_PREFIX)14.c $(NOTW_PREFIX)15.c \ $(NOTW_PREFIX)16.c $(NOTW_PREFIX)32.c $(NOTW_PREFIX)64.c TWID_SRC=$(TWID_PREFIX)2.c $(TWID_PREFIX)3.c $(TWID_PREFIX)4.c \ $(TWID_PREFIX)5.c $(TWID_PREFIX)6.c $(TWID_PREFIX)7.c \ $(TWID_PREFIX)8.c $(TWID_PREFIX)9.c $(TWID_PREFIX)10.c \ $(TWID_PREFIX)16.c $(TWID_PREFIX)32.c $(TWID_PREFIX)64.c NOTWI_SRC=$(NOTWI_PREFIX)1.c $(NOTWI_PREFIX)2.c $(NOTWI_PREFIX)3.c \ $(NOTWI_PREFIX)4.c $(NOTWI_PREFIX)5.c $(NOTWI_PREFIX)6.c \ $(NOTWI_PREFIX)7.c $(NOTWI_PREFIX)8.c $(NOTWI_PREFIX)9.c \ $(NOTWI_PREFIX)10.c $(NOTWI_PREFIX)11.c $(NOTWI_PREFIX)12.c \ $(NOTWI_PREFIX)13.c $(NOTWI_PREFIX)14.c $(NOTWI_PREFIX)15.c \ $(NOTWI_PREFIX)16.c $(NOTWI_PREFIX)32.c $(NOTWI_PREFIX)64.c TWIDI_SRC=$(TWIDI_PREFIX)2.c $(TWIDI_PREFIX)3.c $(TWIDI_PREFIX)4.c \ $(TWIDI_PREFIX)5.c $(TWIDI_PREFIX)6.c $(TWIDI_PREFIX)7.c \ $(TWIDI_PREFIX)8.c $(TWIDI_PREFIX)9.c $(TWIDI_PREFIX)10.c \ $(TWIDI_PREFIX)16.c $(TWIDI_PREFIX)32.c $(TWIDI_PREFIX)64.c OTHEROBJ = timer.obj;,config.obj;,planner.obj;,twiddle.obj;,executor.obj;,naive.obj;,\ generic.obj;,fftwnd.obj;,malloc.obj;,wisdom.obj;,common_io.obj; BLOCKS = $(NOTW_BLOCKS) $(NOTWI_BLOCKS) $(TWID_BLOCKS) $(TWIDI_BLOCKS) ALLOBJ = $(BLOCKS) $(OTHEROBJ) all : $(MAKE) $(LIBFFT) install : $(LIBFFT) $(CP) $(LIBFFT) $(LIBDIR) $(RANLIB) $(LIBDIR)/$(LIBFFT) $(CP) $(HEADERS) $(INCLUDEDIR) $(LIBFFT) : $(ALLOBJ) $(AR)/create $(LIBFFT) $(ALLOBJ) sources : $(MAKE) -f Makefile.sources $(NOTW_SRC) $(NOTWI_SRC) \ $(TWID_SRC) $(TWIDI_SRC) \ NOTW_PREFIX=$(NOTW_PREFIX) \ NOTWI_PREFIX=$(NOTWI_PREFIX) \ TWID_PREFIX=$(TWID_PREFIX) \ TWIDI_PREFIX=$(TWIDI_PREFIX) realclean : clean $(RM) $(LIBFFT) $(NOTW_SRC) $(NOTWI_SRC) $(TWID_SRC) $(TWIDI_SRC) clean : $(RM) -f *.obj;,*~ core a.out test gmon.objut mon.out *.zi *.zo *.s genfft $(ALLOBJ) : $(HEADERS) konst.h In tests/Makefile: # VMS FFTWDIR=[-.src] LIBFFT = $(FFTWDIR)libfftw.olb HEADERS = $(FFTWDIR)fftw.h INCLUDE = /include=$(FFTWDIR) # DECC CC = cc CFLAGS = /optimize$(INCLUDE) all : mms fftw_test mms testnd fftw_test :fftw_test.c $(LIBFFT) $(CC) $(CFLAGS) fftw_test.c $(CC) $(CFLAGS) getopt.c link fftw_test,getopt,$(LIBFFT)/l testnd :testnd.c go_fft.c $(LIBFFT) $(CC) $(CFLAGS) testnd.c $(CC) $(CFLAGS) go_fft.c link testnd,go_fft,$(LIBFFT)/l clean : rm -f *.o *~ core a.out test testnd gmon.out mon.out *.s In tests/fftw_test.c: Define the following global variable: char *__progname; In the main() subroutine, just before the "if (argc <= 1)" line, insert: __progname = argv[0];