1## Process this file with automake to produce Makefile.in
2# These are made, in order presented, from the toplevel make
3SUBDIRS = libdieharder dieharder include
4
5# These are automagically included in the make dist rule.  I
6# do believe that I'm going to have to eliminate my own version
7# of this below.  Sigh.  Time to actually learn to use the GBT
8# properly, I suppose.
9# EXTRA_DIST = autogen.sh dieharder-config.in configure.ac \
10#  THANKS BUGS SUPPORT dieharder.spec.in dieharder.m4 test_dieharder.sh
11EXTRA_DIST = autogen.sh set_ld_library_path Copyright
12
13#========================================================================
14# This is the toplevel Makefile for the dieharder project.  It has
15# some specialized targets:
16#
17# make          alone should build the entire application as usual
18# make install  should install it.  Use configure --prefix= to specify
19#               a toplevel path other than the default /usr.
20#
21# make tgz      makes $(TGZ) of entire tree for standalone or rpm build
22# make rpm      makes $(RPM) packages built by dieharder.spec
23#
24#========================================================================
25# These are targets just for me to facilitate project management.
26#========================================================================
27# make svn      does a svn commit and creates the timestamp $(SVNTIME)
28# make sync     does a svn commit and syncs to list of svn-tree hosts
29# make installweb  installs to project website for download
30# make installrepo installs to yum repo
31#
32#========================================================================
33PROJECT = dieharder
34LIBRARY = libdieharder
35LIBTIME = libwulf.time
36INCTIME = include.time
37PROGRAM = dieharder
38PROGTIME = dieharder.time
39MANUAL = manual
40MANTIME = manual.time
41RDIEHARDER = RDieHarder
42
43#========================================================================
44# Constructs used in project maintenance and installation.
45#
46# The destination on an ssh-accessible remote webserver $(WLOGIN),
47# used as:
48#    $(HOME)/public_html/$(WDIR)
49#========================================================================
50WLOGIN = ganesh.phy.duke.edu
51WDIR = General
52ABS = $(PROJECT).abs
53PHP = $(PROJECT).php
54
55
56#========================================================================
57# This is revision information, automagically set from autoconf.  The
58# actual version information is set ONLY in configure.ac
59#========================================================================
60VERSION=@VERSION@
61RELEASE=@RELEASE@
62LITTLE_ENDIAN=@LITTLE_ENDIAN@
63
64#========================================================================
65# RPM/tarball target objects.  We need rules for all of these.
66#========================================================================
67PROJECTDIR = $(PROJECT)-$(VERSION)
68TAR = $(PROJECTDIR).tar
69TGZ = $(PROJECTDIR).tgz
70SPEC = $(PROJECT).spec
71
72#========================================================================
73# List of variants one can make.  all is the default.  We always
74# presume the simplest of dependencies and remake if includes change
75# for example.
76#========================================================================
77all: $(LIBTIME) $(PROGTIME) $(INCTIME)
78
79# This is not, actually, a particularly useful toplevel target.  To
80# work correctly it also would require a full parsing of all
81# lower level dependencies.  I'm leaving it in for the moment just
82# to have a default target at the toplevel that CAN be used to test.
83$(LIBTIME):
84	(cd $(LIBRARY); \
85	make)
86
87$(INCTIME):
88	(cd include; \
89	make)
90
91$(PROGTIME):
92	(cd $(PROGRAM); \
93	make)
94
95$(ABS): Makefile
96	cat $(ABS) | \
97	sed -e 's/^\(<center><H2>Version \)\(.*\)/\1$(VERSION)<\/H2><\/center>/' > /tmp/$(ABS).$$
98	mv /tmp/$(ABS).$$ $(ABS)
99
100#========================================================================
101# This is a required target for both its own sake and to support the
102# rpm build.  It has to run unconditionally when called.  Note that we
103# make PRECISELY what we need in terms of the source directories,
104# excluding all restricted material and irrelevant data.
105#========================================================================
106tgz: Makefile COPYING Copyright NOTES README $(SPEC) $(ABS) $(PHP)
107	( rm -rf $(TAR) $(TGZ) $(PROJECTDIR); \
108	mkdir -p $(PROJECTDIR); \
109	cd $(LIBRARY); \
110	make clean; \
111	cd ..; \
112	cp -r $(LIBRARY) $(PROJECTDIR); \
113	cd $(PROGRAM); \
114	make clean; \
115	cd ..; \
116	cp -r $(PROGRAM) $(PROJECTDIR); \
117	cd $(MANUAL); \
118	make clean; \
119	cd ..; \
120	cp -r $(MANUAL) $(PROJECTDIR); \
121	cp -r include $(PROJECTDIR); \
122	cp -r m4 $(PROJECTDIR); \
123	cp $(ABS) $(PROJECTDIR); \
124	cp $(PHP) $(PROJECTDIR); \
125	cp Makefile $(PROJECTDIR); \
126	cp Makefile.am $(PROJECTDIR); \
127	cp Makefile.in $(PROJECTDIR); \
128	cp configure $(PROJECTDIR); \
129	cp config.h.in $(PROJECTDIR); \
130	cp $(SPEC).in $(PROJECTDIR); \
131	cp dieharder_version.h.in $(PROJECTDIR); \
132	cp dieharder.html.in $(PROJECTDIR); \
133	cp dieharder-config.in $(PROJECTDIR); \
134	cp autogen.sh $(PROJECTDIR); \
135	cp missing $(PROJECTDIR); \
136	cp aclocal.m4 $(PROJECTDIR); \
137	cp mkinstalldirs $(PROJECTDIR); \
138	cp ltmain.sh $(PROJECTDIR); \
139	cp depcomp $(PROJECTDIR); \
140	cp configure $(PROJECTDIR); \
141	cp configure.ac $(PROJECTDIR); \
142	cp config.guess $(PROJECTDIR); \
143	cp config.sub $(PROJECTDIR); \
144	cp config.status $(PROJECTDIR); \
145	cp install-sh $(PROJECTDIR); \
146	cp Copyright $(PROJECTDIR); \
147	cp COPYING $(PROJECTDIR); \
148	cp INSTALL $(PROJECTDIR); \
149	cp AUTHORS $(PROJECTDIR); \
150	cp NEWS $(PROJECTDIR); \
151	cp ChangeLog $(PROJECTDIR); \
152	cp README $(PROJECTDIR); \
153	cp NOTES $(PROJECTDIR); \
154	tar -cvpf $(TAR) \
155            --exclude=.svn \
156	    --exclude=Cruft \
157	    --exclude=Exclude \
158            --exclude=*.tar \
159            --exclude=*.tgz \
160            --exclude=*.rpm \
161            ./$(PROJECTDIR); \
162	gzip $(TAR); \
163	mv $(TAR).gz $(TGZ); \
164	rm -rf $(PROJECTDIR))
165
166LIBTOOL_DEPS = @LIBTOOL_DEPS@
167libtool: $(LIBTOOL_DEPS)
168	$(SHELL) ./config.status --recheck
169
170#========================================================================
171# rpm target special stuff
172#
173# To work in userspace, add the following:
174# %_topdir	/home/rgb/Src/redhat
175# to your personal $(HOME)/.rpmmacros after building
176# yourself a private copy of the /usr/src/redhat directory structure.
177#
178# RPM_TOPDIR=/usr/src/redhat
179RPM_TOPDIR=$(HOME)/Src/rpm_tree
180
181# This is needed to get the right library and binary rpm.
182ARCH=`uname -i`
183# ARCH=i386
184# These are the three rpms automagically built by the spec
185SSRPM = $(PROJECT)-src-$(VERSION)-$(RELEASE).src.rpm
186SRPM = $(PROJECT)-$(VERSION)-$(RELEASE).src.rpm
187LRPM = libdieharder-$(VERSION)-$(RELEASE).$(ARCH).rpm
188PRPM = dieharder-$(VERSION)-$(RELEASE).$(ARCH).rpm
189
190$(TGZ): tgz
191$(SRPM): rpm
192$(LRPM): rpm
193$(PRPM): rpm
194
195#========================================================================
196# One stop shop.  Basically we build this every time, we hope.
197rpm:	Makefile $(TGZ)
198	rm -rf /var/tmp/dieharder*
199	cp $(TGZ) $(RPM_TOPDIR)/SOURCES
200	cp $(SPEC) $(RPM_TOPDIR)/SPECS
201	rpmbuild -ba --target=$(ARCH) $(RPM_TOPDIR)/SPECS/$(SPEC)
202	cp $(RPM_TOPDIR)/SRPMS/$(SSRPM) $(SRPM)
203	cp $(RPM_TOPDIR)/RPMS/$(ARCH)/$(LRPM) .
204	cp $(RPM_TOPDIR)/RPMS/$(ARCH)/$(PRPM) .
205
206# I can leave this target in here, but I have to run it BY HAND right
207# before a release build.  Otherwise a src rpm rebuild can fail for
208# people without the svn repo in odd ways.
209ChangeLog: $(SVNTIME)
210	svn2cl dieharder.svn.time
211
212#========================================================================
213# Make targets for checking in to svn, syncing svn repo from a local
214# (e.g. laptop) to one or more network/primary repos.
215#========================================================================
216SVNTREE = $(HOME)/Src/svn-tree
217SVNPATH = $(SVNTREE)/$(PROJECT)
218SVNTIME = $(PROJECT:=.svn.time)
219
220svn:
221	echo "New Checkin `date`" >> $(SVNTIME)	# Will force a commit and increment revision
222	svn commit .
223	cat $(SVNTIME) | \
224	sed -e '/^New Checkin/d' >> $(SVNTIME).tmp
225	mv $(SVNTIME).tmp $(SVNTIME)
226
227sync:
228	echo "New Checkin `date`" >> $(SVNTIME)	# Will force a commit and increment revision
229	svn commit .		# Do the commit
230	rsync -avz --delete $(SVNPATH) ganesh.phy.duke.edu:/home/einstein/prof/rgb/Src/svn-tree
231	rsync -avz --delete $(SVNPATH) 209.42.212.5:$(SVNTREE)
232	cat $(SVNTIME) | \
233	sed -e '/^New Checkin/d' >> $(SVNTIME).tmp
234	mv $(SVNTIME).tmp $(SVNTIME)
235
236installweb : $(TGZ) $(RPM) $(SRPM) $(LRPM) $(PRPM) $(MRPM) $(ABS) $(PHP)
237	(ssh $(WLOGIN) mkdir -p public_html/$(WDIR)/$(PROJECT);\
238	rsync -avz $(TGZ) $(WLOGIN):public_html/$(WDIR)/$(PROJECT)/; \
239	rsync -avz $(SRPM) $(WLOGIN):public_html/$(WDIR)/$(PROJECT)/; \
240	rsync -avz $(LRPM) $(WLOGIN):public_html/$(WDIR)/$(PROJECT)/; \
241	rsync -avz $(PRPM) $(WLOGIN):public_html/$(WDIR)/$(PROJECT)/; \
242	rsync -avz $(MRPM) $(WLOGIN):public_html/$(WDIR)/$(PROJECT)/; \
243	rsync -avz $(ABS) $(WLOGIN):public_html/$(WDIR)/$(PROJECT)/; \
244	ssh $(WLOGIN) "cd public_html/$(WDIR)/$(PROJECT);ln -sf $(TGZ) $(PROJECT).tgz"; \
245	ssh $(WLOGIN) "cd public_html/$(WDIR)/$(PROJECT);ln -sf $(SRPM) $(PROJECT).src.rpm"; \
246	ssh $(WLOGIN) "cd public_html/$(WDIR)/$(PROJECT);rm Current*;touch Current_Is_$(VERSION)"; \
247	rsync -avz $(PHP) $(WLOGIN):public_html/$(WDIR)/)
248
249REPOSERVER = uriel
250REPOPATH = /var/www/html/fc/6/local/
251installrepo : $(TGZ) $(RPM) $(SRPM) $(LRPM) $(PRPM) $(MRPM) $(ABS) $(PHP)
252	(ssh $(REPOSERVER) mkdir -p $(REPOPATH);\
253	rsync -avz $(TGZ) root@$(REPOSERVER):$(REPOPATH);\
254	rsync -avz $(SRPM) root@$(REPOSERVER):$(REPOPATH)/SRPM;\
255	ssh $(REPOSERVER) mkdir -p $(REPOPATH)/$(ARCH);\
256	rsync -avz $(LRPM) root@$(REPOSERVER):$(REPOPATH)/$(ARCH);\
257	rsync -avz $(PRPM) root@$(REPOSERVER):$(REPOPATH)/$(ARCH);\
258	rsync -avz $(MRPM) root@$(REPOSERVER):$(REPOPATH)/$(ARCH);\
259	ssh root@$(REPOSERVER) "cd $(REPOPATH)/$(ARCH);createrepo .")
260
261#========================================================================
262# This target takes the dieharder sources and "magically" transforms
263# them into RDieHarder sources.
264RDHTAR=RDieHarder_@VERSION@.tar
265RDHPKG=RDieHarder_@VERSION@.tar.gz
266
267$(RDHPKG): rdhpkg
268
269rdhpkg:
270	rm -rf RDieHarder/src/*.h RDieHarder/src/*.c \
271	RDieHarder/src/*.o RDieHarder/src/Makefile RDieHarder/src/*.so
272	cp dieharder/*.c RDieHarder/src/
273	cp dieharder/*.h RDieHarder/src/
274	mv RDieHarder/src/rdieharder.c RDieHarder/src/dieharder.c
275	cp dieharder/Makefile.RDH RDieHarder/src/Makefile
276	tar -cvpf $(RDHTAR) RDieHarder
277	gzip -f $(RDHTAR)
278
279# This can be run by anybody
280rdhclean:
281	rm -rf RDieHarder/src/*.h RDieHarder/src/*.c $(RDHTAR) $(RDHPKG) \
282	RDieHarder/src/*.o RDieHarder/src/Makefile RDieHarder/src/*.so
283
284# This can be run as anybody
285rdhprep:
286	rm -rf RDieHarder/src/*.h RDieHarder/src/*.c \
287	RDieHarder/src/*.o RDieHarder/src/Makefile RDieHarder/src/*.so
288	cp dieharder/*.c RDieHarder/src/
289	cp dieharder/*.h RDieHarder/src/
290	mv RDieHarder/src/rdieharder.c RDieHarder/src/dieharder.c
291	cp dieharder/Makefile.RDH RDieHarder/src/Makefile
292
293# This has to be run only as root, sorry.
294rdh:	$(RDHPKG)
295	R CMD INSTALL $(RDHPKG)
296
297