X-Git-Url: https://git.hcoop.net/bpt/coccinelle.git/blobdiff_plain/faf9a90c4f9e1e85931cb6b01de660587416eb97..8f657093d128c6436330659d273c2762ac9cbf79:/Makefile diff --git a/Makefile b/Makefile index c20c3cf..fa0db61 100644 --- a/Makefile +++ b/Makefile @@ -1,64 +1,120 @@ +# Copyright 2010, INRIA, University of Copenhagen +# Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix # Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen -# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller +# Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix # This file is part of Coccinelle. -# +# # Coccinelle is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, according to version 2 of the License. -# +# # Coccinelle 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 General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with Coccinelle. If not, see . -# +# # The authors reserve the right to distribute this or future versions of # Coccinelle under other licenses. + ############################################################################# # Configuration section ############################################################################# -include Makefile.config +-include /etc/lsb-release -VERSION=$(shell cat globals/config.ml |grep version |perl -p -e 's/.*"(.*)".*/$$1/;') +VERSION=$(shell cat globals/config.ml.in |grep version |perl -p -e 's/.*"(.*)".*/$$1/;') +CCVERSION=$(shell cat scripts/coccicheck/README |grep "Coccicheck version" |perl -p -e 's/.*version (.*)[ ]*/$$1/;') +PKGVERSION=$(shell dpkg-parsechangelog -ldebian/changelog.$(DISTRIB_CODENAME) 2> /dev/null \ + | sed -n 's/^Version: \(.*\)/\1/p' ) ############################################################################## # Variables ############################################################################## TARGET=spatch +PRJNAME=coccinelle SRC=flag_cocci.ml cocci.ml testing.ml test.ml main.ml - ifeq ($(FEATURE_PYTHON),1) -PYCMA=pycaml/pycaml.cma -PYDIR=pycaml -PYLIB=dllpycaml_stubs.so -# the following is essential for Coccinelle to compile under gentoo (wierd) -OPTLIBFLAGS=-cclib dllpycaml_stubs.so +PYCMA=pycaml.cma +# the following is essential for Coccinelle to compile under gentoo (weird) +#OPTLIBFLAGS=-cclib dllpycaml_stubs.so else PYCMA= -PYDIR= -PYLIB= +endif OPTLIBFLAGS= + +ifeq ("$(SEXPDIR)","ocamlsexp") +SEXPLIB=sexplib.cmo +OPTSEXPLIB=sexplib.cmx +else +SEXPLIB=sexplib.cma +OPTSEXPLIB=sexplib.cmxa endif +ifeq ("$(DYNLINK)","no") +DYNLINK= +else +DYNLINK=dynlink.cma +endif + +SEXPSYSCMA=bigarray.cma nums.cma -SYSLIBS=str.cma unix.cma -LIBS=commons/commons.cma globals/globals.cma\ +SYSLIBS=str.cma unix.cma $(SEXPSYSCMA) $(PYCMA) $(DYNLINK) # threads.cma +LIBS=commons/commons.cma \ + commons/commons_sexp.cma \ + globals/globals.cma \ ctl/ctl.cma \ parsing_cocci/cocci_parser.cma parsing_c/parsing_c.cma \ engine/cocciengine.cma popl09/popl.cma \ - extra/extra.cma $(PYCMA) python/coccipython.cma + extra/extra.cma python/coccipython.cma ocaml/cocciocaml.cma + +# Should we use the local version of pycaml +ifeq ($(FEATURE_PYTHON),1) +ifeq ("$(PYCAMLDIR)","pycaml") +LOCALPYCAML=pycaml +else +LOCALPYCAML= +endif +endif + +# Should we use the local version of menhirLib +ifeq ("$(MENHIRDIR)","menhirlib") +LOCALMENHIR=menhirlib +else +LOCALMENHIR= +endif -MAKESUBDIRS=commons globals menhirlib $(PYDIR) ctl parsing_cocci parsing_c \ - engine popl09 extra python -INCLUDEDIRS=commons commons/ocamlextra globals menhirlib $(PYDIR) ctl \ - parsing_cocci parsing_c engine popl09 extra python +# Should we use the local version of ocamlsexp +ifeq ("$(SEXPDIR)","ocamlsexp") +LOCALSEXP=ocamlsexp +else +LOCALSEXP= +endif + +# used for depend: and a little for rec & rec.opt +MAKESUBDIRS=$(LOCALPYCAML) $(LOCALSEXP) commons \ + globals $(LOCALMENHIR) ctl parsing_cocci parsing_c \ + engine popl09 extra python ocaml + +# used for clean: +# It is like MAKESUBDIRS but also +# force cleaning of local library copies +CLEANSUBDIRS=pycaml ocamlsexp commons \ + globals menhirlib ctl parsing_cocci parsing_c \ + engine popl09 extra python ocaml + +INCLUDEDIRSDEP=commons commons/ocamlextra $(LOCALSEXP) \ + globals $(LOCALMENHIR) $(LOCALPYCAML) ctl \ + parsing_cocci parsing_c engine popl09 extra python ocaml + +INCLUDEDIRS=$(INCLUDEDIRSDEP) $(SEXPDIR) $(MENHIRDIR) $(PYCAMLDIR) ############################################################################## # Generic variables @@ -75,31 +131,26 @@ EXEC=$(TARGET) # Generic ocaml variables ############################################################################## -OCAMLCFLAGS= #-g -dtypes # -w A +OCAMLCFLAGS= # for profiling add -p -inline 0 # but 'make forprofiling' below does that for you. # This flag is also used in subdirectories so don't change its name here. -OPTFLAGS= -# the following is essential for Coccinelle to compile under gentoo -# but is now defined above in this file -#OPTLIBFLAGS=-cclib dllpycaml_stubs.so - -# the OPTBIN variable is here to allow to use ocamlc.opt instead of -# ocaml, when it is available, which speeds up compilation. So -# if you want the fast version of the ocaml chain tools, set this var -# or setenv it to ".opt" in your startup script. -OPTBIN= #.opt +# To enable backtrace support for native code, you need to put -g in OPTFLAGS +# to also link with -g. +OPTFLAGS= -g OCAMLC=ocamlc$(OPTBIN) $(OCAMLCFLAGS) $(INCLUDES) OCAMLOPT=ocamlopt$(OPTBIN) $(OPTFLAGS) $(INCLUDES) OCAMLLEX=ocamllex #-ml # -ml for debugging lexer, but slightly slower OCAMLYACC=ocamlyacc -v -OCAMLDEP=ocamldep #$(INCLUDES) +OCAMLDEP=ocamldep $(INCLUDEDIRSDEP:%=-I %) OCAMLMKTOP=ocamlmktop -g -custom $(INCLUDES) # can also be set via 'make static' -STATIC= #-ccopt -static +CFLAGS=-pie -fPIE -fpic -fPIC -static +STATICCFLAGS=$(CFLAGS:%=-ccopt %) +STATIC= # $(STATICCFLAGS) # can also be unset via 'make purebytecode' BYTECODE_STATIC=-custom @@ -107,281 +158,285 @@ BYTECODE_STATIC=-custom ############################################################################## # Top rules ############################################################################## -.PHONY: all all.opt opt top clean configure -.PHONY: $(MAKESUBDIRS) $(MAKESUBDIRS:%=%.opt) +.PHONY:: all all.opt byte opt top clean distclean configure +.PHONY:: $(MAKESUBDIRS) $(MAKESUBDIRS:%=%.opt) subdirs subdirs.opt + +all: Makefile.config byte preinstall + +opt: all.opt +all.opt: opt-compil preinstall + +world: preinstall + $(MAKE) byte + $(MAKE) opt-compil -all: +byte: .depend $(MAKE) subdirs $(MAKE) $(EXEC) -opt: +opt-compil: .depend $(MAKE) subdirs.opt $(MAKE) $(EXEC).opt -all.opt: opt top: $(EXEC).top -subdirs: $(MAKESUBDIRS) -subdirs.opt: $(MAKESUBDIRS:%=%.opt) +subdirs: + +for D in $(MAKESUBDIRS); do $(MAKE) $$D || exit 1 ; done + $(MAKE) -C commons sexp OCAMLCFLAGS="$(OCAMLCFLAGS)" + +subdirs.opt: + +for D in $(MAKESUBDIRS); do $(MAKE) $$D.opt || exit 1 ; done + $(MAKE) -C commons sexp.opt OPTFLAGS="$(OPTFLAGS)" $(MAKESUBDIRS): $(MAKE) -C $@ OCAMLCFLAGS="$(OCAMLCFLAGS)" all $(MAKESUBDIRS:%=%.opt): - $(MAKE) -C $(@:%.opt=%) OCAMLCFLAGS="$(OCAMLCFLAGS)" all.opt - -commons: -globals: -menhirlib: -parsing_cocci:globals menhirlib -parsing_c:parsing_cocci -ctl:globals commons -engine: parsing_cocci parsing_c ctl -popl09:engine -extra: parsing_cocci parsing_c ctl -pycaml: -python:pycaml parsing_cocci parsing_c - -commons.opt: -globals.opt: -menhirlib.opt: -parsing_cocci.opt:globals.opt menhirlib.opt -parsing_c.opt:parsing_cocci.opt -ctl.opt:globals.opt commons.opt -engine.opt: parsing_cocci.opt parsing_c.opt ctl.opt -popl09.opt:engine.opt -extra.opt: parsing_cocci.opt parsing_c.opt ctl.opt -pycaml.opt: -python.opt:pycaml.opt parsing_cocci.opt parsing_c.opt + $(MAKE) -C $(@:%.opt=%) OPTFLAGS="$(OPTFLAGS)" all.opt + +#dependencies: +# commons: +# globals: +# menhirlib: +# parsing_cocci: commons globals menhirlib +# parsing_c:parsing_cocci +# ctl:globals commons +# engine: parsing_cocci parsing_c ctl +# popl09:engine +# extra: parsing_cocci parsing_c ctl +# pycaml: +# python:pycaml parsing_cocci parsing_c clean:: - set -e; for i in $(MAKESUBDIRS); do $(MAKE) -C $$i clean; done + set -e; for i in $(CLEANSUBDIRS); do $(MAKE) -C $$i $@; done + $(MAKE) -C demos/spp $@ -configure: - ./configure - -$(LIBS): #$(MAKESUBDIRS) -$(LIBS:.cma=.cmxa): #$(MAKESUBDIRS:%=%.opt) +$(LIBS): $(MAKESUBDIRS) +$(LIBS:.cma=.cmxa): $(MAKESUBDIRS:%=%.opt) $(OBJS):$(LIBS) $(OPTOBJS):$(LIBS:.cma=.cmxa) $(EXEC): $(LIBS) $(OBJS) - $(OCAMLC) $(BYTECODE_STATIC) -o $@ $(SYSLIBS) $^ + $(OCAMLC) $(BYTECODE_STATIC) -o $@ $(SYSLIBS) $(SEXPLIB) $^ $(EXEC).opt: $(LIBS:.cma=.cmxa) $(OPTOBJS) - $(OCAMLOPT) $(STATIC) -o $@ $(SYSLIBS:.cma=.cmxa) $(OPTLIBFLAGS) $^ + $(OCAMLOPT) $(STATIC) -o $@ $(SYSLIBS:.cma=.cmxa) $(OPTSEXPLIB) $(OPTLIBFLAGS) $^ $(EXEC).top: $(LIBS) $(OBJS) - $(OCAMLMKTOP) -custom -o $@ $(SYSLIBS) $^ + $(OCAMLMKTOP) -custom -o $@ $(SYSLIBS) $(SEXPLIB) $^ clean:: rm -f $(TARGET) $(TARGET).opt $(TARGET).top -clean:: - rm -f dllpycaml_stubs.so +.PHONY:: tools configure +configure: + ./configure -.PHONY: tools all configure +Makefile.config: + @echo "Makefile.config is missing. Have you run ./configure?" + @exit 1 -tools: +tools: $(LIBS) $(MAKE) -C tools -clean:: - $(MAKE) -C tools clean +distclean:: + if [ -d tools ] ; then $(MAKE) -C tools distclean ; fi static: rm -f spatch.opt spatch - $(MAKE) STATIC="-ccopt -static" spatch.opt + $(MAKE) STATIC="$(STATICCFLAGS)" spatch.opt cp spatch.opt spatch purebytecode: rm -f spatch.opt spatch $(MAKE) BYTECODE_STATIC="" spatch + perl -p -i -e 's/^#!.*/#!\/usr\/bin\/ocamlrun/' spatch + + +############################################################################## +# Build documentation +############################################################################## +.PHONY:: docs + +docs: + make -C docs + +clean:: + make -C docs clean + +distclean:: + make -C docs distclean +############################################################################## +# Pre-Install (customization of spatch frontend script) +############################################################################## + +preinstall: docs/spatch.1 scripts/spatch scripts/spatch.opt scripts/spatch.byte + +docs/spatch.1: Makefile.config + $(MAKE) -C docs spatch.1 + +# user will use spatch to run spatch.opt (native) +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: 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 + sed "s|LIBDIR|$(LIBDIR)|g" scripts/spatch.byte.tmp \ + > scripts/spatch.byte + rm -f scripts/spatch.byte.tmp3 \ + scripts/spatch.byte.tmp2 \ + scripts/spatch.byte.tmp + +# user will use spatch.opt to run spatch.opt (native) +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 + sed "s|LIBDIR|$(LIBDIR)|g" scripts/spatch.opt.tmp \ + > scripts/spatch.opt + rm -f scripts/spatch.opt.tmp scripts/spatch.opt.tmp2 + +clean:: + rm -f scripts/spatch scripts/spatch.byte scripts/spatch.opt ############################################################################## # Install ############################################################################## # don't remove DESTDIR, it can be set by package build system like ebuild -install: all +# for staged installation. +install-common: mkdir -p $(DESTDIR)$(BINDIR) mkdir -p $(DESTDIR)$(LIBDIR) - mkdir -p $(DESTDIR)$(SHAREDIR) + mkdir -p $(DESTDIR)$(SHAREDIR)/ocaml + mkdir -p $(DESTDIR)$(SHAREDIR)/commons + mkdir -p $(DESTDIR)$(SHAREDIR)/globals + mkdir -p $(DESTDIR)$(SHAREDIR)/parsing_c mkdir -p $(DESTDIR)$(MANDIR)/man1 - cp spatch $(DESTDIR)$(BINDIR) - cp standard.h $(DESTDIR)$(SHAREDIR) - cp standard.iso $(DESTDIR)$(SHAREDIR) - cp docs/spatch.1 $(DESTDIR)$(MANDIR)/man1/ - mkdir -p $(DESTDIR)$(SHAREDIR)/python - cp -a python/coccilib $(DESTDIR)$(SHAREDIR)/python - cp -f dllpycaml_stubs.so $(DESTDIR)$(LIBDIR) + $(INSTALL_DATA) standard.h $(DESTDIR)$(SHAREDIR) + $(INSTALL_DATA) standard.iso $(DESTDIR)$(SHAREDIR) + $(INSTALL_DATA) ocaml/coccilib.cmi $(DESTDIR)$(SHAREDIR)/ocaml/ + $(INSTALL_DATA) parsing_c/*.cmi $(DESTDIR)$(SHAREDIR)/parsing_c/ + $(INSTALL_DATA) commons/*.cmi $(DESTDIR)$(SHAREDIR)/commons/ + $(INSTALL_DATA) globals/iteration.cmi $(DESTDIR)$(SHAREDIR)/globals/ + $(INSTALL_DATA) docs/spatch.1 $(DESTDIR)$(MANDIR)/man1/ + @if [ $(FEATURE_PYTHON) -eq 1 ]; then $(MAKE) install-python; fi + +install-bash: + mkdir -p $(DESTDIR)$(BASH_COMPLETION_DIR) + $(INSTALL_DATA) scripts/spatch.bash_completion \ + $(DESTDIR)$(BASH_COMPLETION_DIR)/spatch + +install-tools: + mkdir -p $(DESTDIR)$(BINDIR) + $(INSTALL_PROGRAM) tools/splitpatch \ + $(DESTDIR)$(BINDIR)/splitpatch + $(INSTALL_PROGRAM) tools/cocci-send-email.perl \ + $(DESTDIR)$(BINDIR)/cocci-send-email.perl + +install-python: + mkdir -p $(DESTDIR)$(SHAREDIR)/python/coccilib/coccigui + $(INSTALL_DATA) python/coccilib/*.py \ + $(DESTDIR)$(SHAREDIR)/python/coccilib + $(INSTALL_DATA) python/coccilib/coccigui/*.py \ + $(DESTDIR)$(SHAREDIR)/python/coccilib/coccigui + $(INSTALL_DATA) python/coccilib/coccigui/pygui.glade \ + $(DESTDIR)$(SHAREDIR)/python/coccilib/coccigui + $(INSTALL_DATA) python/coccilib/coccigui/pygui.gladep \ + $(DESTDIR)$(SHAREDIR)/python/coccilib/coccigui + if [ -f pycaml/dllpycaml_stubs.so ]; then \ + $(INSTALL_LIB) pycaml/dllpycaml_stubs.so $(DESTDIR)$(LIBDIR) ; fi + +install: install-common + @if test -x spatch -a ! -x spatch.opt ; then \ + $(MAKE) install-byte;fi + @if test ! -x spatch -a -x spatch.opt ; then \ + $(MAKE) install-def; $(MAKE) install-opt;fi + @if test -x spatch -a -x spatch.opt ; then \ + $(MAKE) install-byte; $(MAKE) install-opt;fi + @if test ! -x spatch -a ! -x spatch.opt ; then \ + echo "\n\n\t==> Run 'make', 'make opt', or both first. <==\n\n";fi + @echo "" + @echo "\tYou can also install spatch by copying the program spatch" + @echo "\t(available in this directory) anywhere you want and" + @echo "\tgive it the right options to find its configuration files." @echo "" - @echo "You can also install spatch by copying the program spatch" - @echo "(available in this directory) anywhere you want and" - @echo "give it the right options to find its configuration files." + +# user will use spatch to run spatch.opt (native) +install-def: + $(INSTALL_PROGRAM) spatch.opt $(DESTDIR)$(SHAREDIR) + $(INSTALL_PROGRAM) scripts/spatch $(DESTDIR)$(BINDIR)/spatch + +# user will use spatch to run spatch (bytecode) +install-byte: + $(INSTALL_PROGRAM) spatch $(DESTDIR)$(SHAREDIR) + $(INSTALL_PROGRAM) scripts/spatch.byte $(DESTDIR)$(BINDIR)/spatch + +# user will use spatch.opt to run spatch.opt (native) +install-opt: + $(INSTALL_PROGRAM) spatch.opt $(DESTDIR)$(SHAREDIR) + $(INSTALL_PROGRAM) scripts/spatch.opt $(DESTDIR)$(BINDIR)/spatch.opt uninstall: rm -f $(DESTDIR)$(BINDIR)/spatch + rm -f $(DESTDIR)$(BINDIR)/spatch.opt rm -f $(DESTDIR)$(LIBDIR)/dllpycaml_stubs.so + rm -f $(DESTDIR)$(SHAREDIR)/spatch + rm -f $(DESTDIR)$(SHAREDIR)/spatch.opt rm -f $(DESTDIR)$(SHAREDIR)/standard.h rm -f $(DESTDIR)$(SHAREDIR)/standard.iso - rm -rf $(DESTDIR)$(SHAREDIR)/python/coccilib + rm -f $(DESTDIR)$(SHAREDIR)/ocaml/coccilib.cmi + rm -f $(DESTDIR)$(SHAREDIR)/parsing_c/*.cmi + rm -f $(DESTDIR)$(SHAREDIR)/commons/*.cmi + rm -f $(DESTDIR)$(SHAREDIR)/globals/*.cmi + rm -f $(DESTDIR)$(SHAREDIR)/python/coccilib/coccigui/* + rm -f $(DESTDIR)$(SHAREDIR)/python/coccilib/*.py + rmdir --ignore-fail-on-non-empty -p \ + $(DESTDIR)$(SHAREDIR)/python/coccilib/coccigui + rmdir $(DESTDIR)$(SHAREDIR)/globals + rmdir $(DESTDIR)$(SHAREDIR)/commons + rmdir $(DESTDIR)$(SHAREDIR)/parsing_c + rmdir $(DESTDIR)$(SHAREDIR)/ocaml + rmdir $(DESTDIR)$(SHAREDIR) rm -f $(DESTDIR)$(MANDIR)/man1/spatch.1 +uninstall-bash: + rm -f $(DESTDIR)$(BASH_COMPLETION_DIR)/spatch + rmdir --ignore-fail-on-non-empty -p \ + $(DESTDIR)$(BASH_COMPLETION_DIR) +uninstall-tools: + rm -f $(DESTDIR)$(BINDIR)/splitpatch + rm -f $(DESTDIR)$(BINDIR)/cocci-send-email.perl version: - @echo $(VERSION) - - -############################################################################## -# Package rules -############################################################################## - -PACKAGE=coccinelle-$(VERSION) - -BINSRC=spatch env.sh env.csh standard.h standard.iso \ - *.txt docs/* \ - demos/foo.* demos/simple.* -# $(PYLIB) python/coccilib/ demos/printloc.* -BINSRC2=$(BINSRC:%=$(PACKAGE)/%) - -TMP=/tmp -OCAMLVERSION=$(shell ocaml -version |perl -p -e 's/.*version (.*)/$$1/;') - -# Procedure to do first time: -# cd ~/release -# cvs checkout coccinelle -# cd coccinelle -# cvs update -d -P -# touch **/* -# make licensify -# remember to comment the -g -dtypes in this Makefile - -# Procedure to do each time: -# cvs update -# modify globals/config.ml -# cd globals/; cvs commit -m"new version" (do not commit from the root!) -# ./configure --without-python -# make package -# make website -# Check also 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. - - -package: - make srctar - make bintar - make staticbintar - make bytecodetar - -# I currently pre-generate the parser so the user does not have to -# install menhir on his machine. I also do a few cleanups like 'rm todo_pos'. -# You may have first to do a 'make licensify'. -srctar: - make clean - cp -a . $(TMP)/$(PACKAGE) - cd $(TMP)/$(PACKAGE); cd parsing_cocci/; make parser_cocci_menhir.ml - cd $(TMP)/$(PACKAGE); rm todo_pos - 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) - -clean:: - rm -f $(PACKAGE) - rm -f $(PACKAGE)-bin-x86.tgz - rm -f $(PACKAGE)-bin-x86-static.tgz - rm -f $(PACKAGE)-bin-bytecode-$(OCAMLVERSION).tgz - - - -TOLICENSIFY=ctl engine parsing_cocci popl popl09 python -licensify: - ocaml tools/licensify.ml - set -e; for i in $(TOLICENSIFY); do cd $$i; ocaml ../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) + @echo "spatch $(VERSION)" + @echo "spatch $(PKGVERSION) ($(DISTRIB_ID))" + @echo "coccicheck $(CCVERSION)" ############################################################################## -# Pad specific rules +# Deb package (for Ubuntu) and release rules ############################################################################## -#TOP=/home/pad/mobile/project-coccinelle -WEBSITE=/home/pad/mobile/homepage/software/project-coccinelle - -website: - cp $(TMP)/$(PACKAGE).tgz $(WEBSITE) - cp $(TMP)/$(PACKAGE)-bin-x86.tgz $(WEBSITE) - cp $(TMP)/$(PACKAGE)-bin-x86-static.tgz $(WEBSITE) - cp $(TMP)/$(PACKAGE)-bin-bytecode-$(OCAMLVERSION).tgz $(WEBSITE) - - -#TXT=$(wildcard *.txt) -syncwiki: -# unison ~/public_html/wiki/wiki-LFS/data/pages/ docs/wiki/ -# set -e; for i in $(TXT); do unison $$i docs/wiki/$$i; done - -darcsweb: -# @echo pull from ~/public_html/darcs/c-coccinelle and c-commons and lib-xxx - -DARCSFORESTS=commons \ - parsing_c parsing_cocci engine - -update_darcs: - darcs pull - set -e; for i in $(DARCSFORESTS); do cd $$i; darcs pull; cd ..; done - -#darcs diff -u -diff_darcs: - set -e; for i in $(DARCSFORESTS); do cd $$i; darcs diff -u; cd ..; done - +include Makefile.release ############################################################################## # Developer rules ############################################################################## +-include Makefile.dev + test: $(TARGET) ./$(TARGET) -testall @@ -448,14 +503,25 @@ beforedepend:: test.ml clean:: rm -f *.cm[iox] *.o *.annot - -clean:: rm -f *~ .*~ *.exe #*# +distclean:: clean + set -e; for i in $(MAKESUBDIRS); do $(MAKE) -C $$i $@; done + rm -f .depend + rm -f Makefile.config + rm -f globals/config.ml test.ml + rm -f TAGS + rm -f tests/SCORE_actual.sexp + rm -f tests/SCORE_best_of_both.sexp + find -name ".#*1.*" | xargs rm -f + beforedepend:: depend:: beforedepend $(OCAMLDEP) *.mli *.ml > .depend - set -e; for i in $(MAKESUBDIRS); do $(MAKE) -C $$i depend; done + set -e; for i in $(MAKESUBDIRS); do $(MAKE) -C $$i $@; done + +.depend:: + @if [ ! -f .depend ] ; then $(MAKE) depend ; fi -include .depend