7bc94c072463df693818aea612200cbf8e587ef2
[bse.git] / Makefile
1 VERSION=0.24
2 DISTNAME=bse-$(VERSION)
3 DISTBUILD=$(DISTNAME)
4 DISTTAR=../$(DISTNAME).tar
5 DISTTGZ=$(DISTTAR).gz
6 WEBBASE=/home/tony/www/bse
7 PERL=$(shell perl -It -MBSE::Test -e 'print BSE::Test::test_perl()')
8 PERLBIN=$(shell $(PERL) -MConfig -e 'print $$Config{installbin}')
9
10 BSEMODULES=site/cgi-bin/modules/BSE/Modules.pm
11
12 NOOP=echo Nothing
13
14 HTMLDEPS=$(shell $(PERL) -lane 'print $$F[0] if $$F[0] =~ /\.(pm|pl|pod)$$/' MANIFEST)
15
16 MODULES=$(shell grep cgi-bin/.*\.pm MANIFEST | sed -e '/^\#/d' -e 's/[ \t].*//' -e '/^site\/cgi-bin\/modules\/BSE\/\(Modules\|Version\)\.pm/d' )
17 VERSIONDEPS=$(shell $(PERL) site/util/bse_versiondeps.pl MANIFEST)
18
19 POD2TEXT=$(PERLBIN)/pod2text
20 POD2HTML=$(PERLBIN)/pod2html
21
22 .PHONY: help dist cleantree archive distdir clean docs otherdocs dbinfo
23 .PHONY: version modversion testinst test testup checkver regen_known_errors
24 .PHONY: manicheck filecheck manifect htmldocs
25
26 help:
27         @echo make dist - build the tar.gz file and copy to distribution directory
28         @echo make 'archive - build the tar.gz (in the parent directory)'
29         @echo make clean - delete generated files
30         @echo make distdir - build distribution directory
31         @echo make docs - build documentation
32         @echo make testup - upgrade an installation
33
34 # this target needs to be modified so that the output directory includes
35 # the release number
36 dist: cleantree $(DISTTGZ)
37         cp $(DISTTGZ) $(WEBBASE)/dists/
38         cp site/docs/bse.html $(WEBBASE)/relnotes/bse-$(VERSION).html
39         cp site/docs/*.html $(WEBBASE)/docs
40         git tag -m "$(VERSION) release" r$(VERSION)
41
42 # make sure everything is committed
43 cleantree:
44         if grep -q 'perl.*-d:ptkdb' site/cgi-bin/*.pl site/cgi-bin/admin/*.pl ; \
45           then echo '***' The debugger is still enabled ; \
46           exit 1; \
47         fi
48         test -z "`git status -s`" || ( echo "Uncommitted files in the tree"; exit 1 )
49
50 archive: $(DISTTGZ)
51
52 $(DISTTGZ): distdir
53         if [ -e $(DISTTGZ) ] ; \
54           then echo $(DISTTGZ) already exists ; \
55                exit 1 ; \
56         fi
57         tar cf $(DISTTAR) $(DISTBUILD)
58         -$(PERL) -MExtUtils::Command -e rm_rf $(DISTBUILD)
59         gzip $(DISTTAR)
60
61 #       tar czf $(DISTFILE) -C .. bse --exclude '*~' --exclude '*,v' --exclude 'pod2html-*cache'
62
63 # recent ExtUtils::Manifest don't copy the executable bit, fix that here
64
65 distdir: docs dbinfo version
66         -$(PERL) -MExtUtils::Command -e rm_rf $(DISTBUILD)
67         $(PERL) -MExtUtils::Manifest=manicopy,maniread -e "manicopy(maniread(), '$(DISTBUILD)')"
68         $(PERL) site/util/make_versions.pl $(DISTBUILD)/$(BSEMODULES)
69         mkdir $(DISTBUILD)/site/htdocs/shop
70         find $(DISTBUILD) -type f | xargs chmod u+w
71         for i in `cat MANIFEST` ; do if [ -x $$i ] ; then chmod a+x $(DISTBUILD)/$$i ; fi ; done
72
73 clean:
74         $(NOOP)
75
76 docs: INSTALL.txt INSTALL.html otherdocs
77
78 INSTALL.txt: INSTALL.pod
79         $(POD2TEXT) <INSTALL.pod >INSTALL.tmp
80         mv INSTALL.tmp INSTALL.txt
81
82 INSTALL.html: INSTALL.pod
83         $(POD2HTML) --infile=INSTALL.pod --outfile=INSTALL.htmp
84         mv INSTALL.htmp INSTALL.html
85         -rm pod2html-dircache pod2html-itemcache pod2htmd.tmp pod2htmi.tmp
86
87 otherdocs:
88         cd site/docs ; make all PERL=$(PERL)
89
90 dbinfo: site/util/mysql.str
91
92 site/util/mysql.str: schema/bse.sql schema/mysql_build.pl
93         $(PERL) schema/mysql_build.pl >site/util/mysql.str
94
95 version: site/cgi-bin/modules/BSE/Version.pm
96
97 site/cgi-bin/modules/BSE/Version.pm: $(VERSIONDEPS)
98         $(PERL) site/util/bse_mkgitversion.pl $(VERSION) site/cgi-bin/modules/BSE/Version.pm
99
100 modversion: $(BSEMODULES)
101
102 $(BSEMODULES): $(MODULES) site/util/make_versions.pl
103         $(PERL) site/util/make_versions.pl $(BSEMODULES)
104
105 # this is very rough
106 testinst: distdir
107         $(PERL) localinst.perl $(DISTBUILD)
108         $(PERL) -MExtUtils::Command -e rm_rf $(DISTBUILD)
109         cd `$(PERL) -lne 'do { print $$1; exit; } if /^base_dir\s*=\s*(.*)/' test.cfg`/util ; $(PERL) loaddata.pl ../data/db
110
111 testup: checkver distdir
112         $(PERL) localinst.perl $(DISTBUILD) leavedb
113         $(PERL) -MExtUtils::Command -e rm_rf $(DISTBUILD)
114         cd `$(PERL) -lne 'do { print $$1; exit; } if /^base_dir\s*=\s*(.*)/' test.cfg`/util ; $(PERL) upgrade_mysql.pl -b ; $(PERL) loaddata.pl ../data/db
115
116 checkver:
117         if [ -d .git ] ; then perl site/util/check_versions.pl ; fi
118
119 TEST_FILES=t/*.t t/*/*.t
120 TEST_VERBOSE=0
121
122 test: testup
123         $(PERL) '-MTest::Harness=runtests,$$verbose' -Isite/cgi-bin/modules -It -e '$$verbose=$(TEST_VERBOSE); runtests @ARGV' $(TEST_FILES)
124
125 regen_known_errors:
126         $(PERL) t/900-kwalitee/040-podcheck.t -r
127
128 manicheck:
129         $(PERL) -MExtUtils::Manifest=manicheck -e 'manicheck()'
130
131 filecheck:
132         $(PERL) -MExtUtils::Manifest=filecheck -e 'filecheck()'
133
134 manifest:
135         $(PERL) -MExtUtils::Manifest=mkmanifest -e mkmanifest
136
137 htmldocs: $(HTMLDEPS)
138         if [ -z "$(HTMLDOCDIR)" ] ; then \
139           echo Supply HTMLDOCDIR ; exit 1 ; \
140         fi
141         [ -d "$(HTMLDOCDIR)" ] || mkdir -p "$(HTMLDOCDIR)"
142         $(PERL) makehtmldocs.pl "$(HTMLDOCDIR)"