preinstall: scripts/spatch scripts/spatch.opt scripts/spatch.byte
# user will use spatch to run spatch.opt (native)
-scripts/spatch:
+scripts/spatch: Makefile.config
cp scripts/spatch.sh scripts/spatch.tmp2
sed "s|SHAREDIR|$(SHAREDIR)|g" scripts/spatch.tmp2 > scripts/spatch.tmp
sed "s|LIBDIR|$(LIBDIR)|g" scripts/spatch.tmp > scripts/spatch
rm -f scripts/spatch.tmp2 scripts/spatch.tmp
# user will use spatch to run spatch (bytecode)
-scripts/spatch.byte:
+scripts/spatch.byte: Makefile.config
cp scripts/spatch.sh scripts/spatch.byte.tmp3
sed "s|\.opt||" scripts/spatch.byte.tmp3 > scripts/spatch.byte.tmp2
sed "s|SHAREDIR|$(SHAREDIR)|g" scripts/spatch.byte.tmp2 \
scripts/spatch.byte.tmp
# user will use spatch.opt to run spatch.opt (native)
-scripts/spatch.opt:
+scripts/spatch.opt: Makefile.config
cp scripts/spatch.sh scripts/spatch.opt.tmp2
sed "s|SHAREDIR|$(SHAREDIR)|g" scripts/spatch.opt.tmp2 \
> scripts/spatch.opt.tmp
##############################################################################
-# Package rules
+# Deb package (for Ubuntu) and release rules
##############################################################################
-PACKAGE=$(PRJNAME)-$(VERSION)
-CCPACKAGE=coccicheck-$(CCVERSION)
-
-BINSRC=spatch env.sh env.csh standard.h standard.iso \
- *.txt \
- docs/manual/manual.pdf docs/manual/options.pdf docs/manual/main_grammar.pdf docs/spatch.1 \
- docs/manual/cocci-python.txt \
- demos/*
-BINSRC-PY=$(BINSRC) $(PYLIB) python/coccilib/
-BINSRC2=$(BINSRC:%=$(PACKAGE)/%)
-BINSRC2-PY=$(BINSRC-PY:%=$(PACKAGE)/%)
-
-TMP=/tmp
-OCAMLVERSION=$(shell ocaml -version |perl -p -e 's/.*version (.*)/$$1/;')
-
-# Procedure to do first time:
-# cd ~/release
-# cvs checkout coccinelle -dP
-# cd coccinelle
-#
-# Procedure to do each time:
-#
-# 1) make prepackage # WARN: These will clean your local rep. of pending modifications
-#
-# UPDATE VERSION number in globals/config.ml.in
-# and commit it with
-#
-# 2) make release
-#
-# The project is then automatically licensified.
-#
-# Remember to comment the -g -dtypes in this Makefile
-# You can also remove a few things, for instance I removed in this
-# Makefile things related to popl/ and popl09/
-# make sure that ocaml is the distribution ocaml of /usr/bin, not ~pad/...
-#
-# 3) make package
-#
-# if WEBSITE is set properly, you can also run 'make website'
-# Check that run an ocaml in /usr/bin
-
-# To test you can try compile and run spatch from different instances
-# like my ~/coccinelle, ~/release/coccinelle, and the /tmp/coccinelle-0.X
-# downloaded from the website.
-
-# For 'make srctar' it must done from a clean
-# repo such as ~/release/coccinelle. It must also be a repo where
-# the scripts/licensify has been run at least once.
-# For the 'make bintar' I can do it from my original repo.
-
-prepackage:
- cvs up -CdP
- $(MAKE) distclean
- sed -i "s|^OCAMLCFLAGS=.*$$|OCAMLCFLAGS=|" Makefile
-
-release:
- cvs ci -m "Release $(VERSION)" globals/config.ml.in
- $(MAKE) licensify
-
-package:
- $(MAKE) package-src
- $(MAKE) package-nopython
- $(MAKE) package-python
-
-package-src:
- $(MAKE) distclean # Clean project
- $(MAKE) srctar
- $(MAKE) coccicheck
-
-package-nopython:
- $(MAKE) distclean # Clean project
- ./configure --without-python
- $(MAKE) docs
- $(MAKE) bintar
- $(MAKE) bytecodetar
- $(MAKE) staticbintar
-
-package-python:
- $(MAKE) distclean # Clean project
- ./configure # Reconfigure project with Python support
- $(MAKE) docs
- $(MAKE) bintar-python
- $(MAKE) bytecodetar-python
-
-
-# I currently pre-generate the parser so the user does not have to
-# install menhir on his machine. We could also do a few cleanups.
-# You may have first to do a 'make licensify'.
-#
-# update: make docs generates pdf but also some ugly .log files, so
-# make clean is there to remove them while not removing the pdf
-# (only distclean remove the pdfs).
-srctar:
- make distclean
- make docs
- make clean
- cp -a . $(TMP)/$(PACKAGE)
- cd $(TMP)/$(PACKAGE); cd parsing_cocci/; make parser_cocci_menhir.ml
- cd $(TMP); tar cvfz $(PACKAGE).tgz --exclude-vcs $(PACKAGE)
- rm -rf $(TMP)/$(PACKAGE)
-
-
-bintar: all
- rm -f $(TMP)/$(PACKAGE)
- ln -s `pwd` $(TMP)/$(PACKAGE)
- cd $(TMP); tar cvfz $(PACKAGE)-bin-x86.tgz --exclude-vcs $(BINSRC2)
- rm -f $(TMP)/$(PACKAGE)
-
-staticbintar: all.opt
- rm -f $(TMP)/$(PACKAGE)
- ln -s `pwd` $(TMP)/$(PACKAGE)
- make static
- cd $(TMP); tar cvfz $(PACKAGE)-bin-x86-static.tgz --exclude-vcs $(BINSRC2)
- rm -f $(TMP)/$(PACKAGE)
-
-# add ocaml version in name ?
-bytecodetar: all
- rm -f $(TMP)/$(PACKAGE)
- ln -s `pwd` $(TMP)/$(PACKAGE)
- make purebytecode
- cd $(TMP); tar cvfz $(PACKAGE)-bin-bytecode-$(OCAMLVERSION).tgz --exclude-vcs $(BINSRC2)
- rm -f $(TMP)/$(PACKAGE)
-
-bintar-python: all
- rm -f $(TMP)/$(PACKAGE)
- ln -s `pwd` $(TMP)/$(PACKAGE)
- cd $(TMP); tar cvfz $(PACKAGE)-bin-x86-python.tgz --exclude-vcs $(BINSRC2-PY)
- rm -f $(TMP)/$(PACKAGE)
-
-# add ocaml version in name ?
-bytecodetar-python: all
- rm -f $(TMP)/$(PACKAGE)
- ln -s `pwd` $(TMP)/$(PACKAGE)
- make purebytecode
- cd $(TMP); tar cvfz $(PACKAGE)-bin-bytecode-$(OCAMLVERSION)-python.tgz --exclude-vcs $(BINSRC2-PY)
- rm -f $(TMP)/$(PACKAGE)
-
-coccicheck:
- cp -a `pwd`/scripts/coccicheck $(TMP)/$(CCPACKAGE)
- tar cvfz $(TMP)/$(CCPACKAGE).tgz -C $(TMP) --exclude-vcs $(CCPACKAGE)
- rm -rf $(TMP)/$(CCPACKAGE)
-
-clean-packages::
- rm -f $(TMP)/$(PACKAGE).tgz
- rm -f $(TMP)/$(PACKAGE)-bin-x86.tgz
- rm -f $(TMP)/$(PACKAGE)-bin-x86-static.tgz
- rm -f $(TMP)/$(PACKAGE)-bin-bytecode-$(OCAMLVERSION).tgz
- rm -f $(TMP)/$(PACKAGE)-bin-x86-python.tgz
- rm -f $(TMP)/$(PACKAGE)-bin-bytecode-$(OCAMLVERSION)-python.tgz
- rm -f $(TMP)/$(CCPACKAGE).tgz
-
-#
-# No need to licensify 'demos'. Because these is basic building blocks
-# to use SmPL.
-#
-TOLICENSIFY=ctl engine globals parsing_cocci popl popl09 python scripts tools
-licensify:
- ocaml str.cma tools/licensify.ml
- set -e; for i in $(TOLICENSIFY); do cd $$i; ocaml str.cma ../tools/licensify.ml; cd ..; done
-
-# When checking out the source from diku sometimes I have some "X in the future"
-# error messages.
-fixdates:
- echo do 'touch **/*.*'
-
-#fixCVS:
-# cvs update -d -P
-# echo do 'rm -rf **/CVS'
-
-ocamlversion:
- @echo $(OCAMLVERSION)
-
-
-##############################################################################
-# Packaging rules -- To build deb packages
-##############################################################################
-EXCL_SYNC=--exclude ".git" \
- --exclude ".gitignore" \
- --exclude ".cvsignore" \
- --exclude "tests" \
- --exclude "TODO" \
- --cvs-exclude
-
-prepack:
- rsync -a $(EXCL_SYNC) . $(TMP)/$(PACKAGE)
- $(MAKE) -C $(TMP)/$(PACKAGE) licensify
- rm -rf $(TMP)/$(PACKAGE)/tools
-
-packsrc: prepack
-# $(MAKE) -C $(TMP)/$(PACKAGE)/debian lucid
- $(MAKE) -C $(TMP)/$(PACKAGE)/debian karmic
- $(MAKE) push
- rm -rf $(TMP)/$(PACKAGE)/
-
-push:
- cd $(TMP)/ && for p in `ls $(PRJNAME)_$(VERSION).deb*_source.changes`; do dput $(PRJNAME) $$p ; done
- rm -rf $(TMP)/$(PRJNAME)_$(VERSION).deb*_source.changes
- rm -rf $(TMP)/$(PRJNAME)_$(VERSION).deb*_source.$(PRJNAME).upload
- rm -rf $(TMP)/$(PRJNAME)_$(VERSION).deb*.dsc
- rm -rf $(TMP)/$(PRJNAME)_$(VERSION).deb*.tar.gz
-
-packbin: prepack
- $(MAKE) -C $(TMP)/$(PACKAGE)/debian binary
- rm -rf $(TMP)/$(PACKAGE)/
- rm -rf $(TMP)/$(PRJNAME)_$(VERSION).deb*_source.build
+include Makefile.release
##############################################################################
# Developer rules