Update to pythi8.170
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8170 / Makefile
1 #
2 # Libraries Makefile. Some ideas from Geant4 Makefiles
3 #
4 #                  M. Kirsanov 07.04.2006
5 #                     Modified 18.11.2006
6 #                     26.03.2008 CLHEP dependency removed
7 #                  N. Lavesson 28.04.2009 clean/distclean separated
8 #                  M. Kirsanov 21.07.2009 Mac-OSX flags added
9
10 SHELL = /bin/sh
11
12 -include config.mk
13
14 # flags:
15 #
16 #FFLAGSSHARED = -fPIC
17 CFLAGSSHARED = -fPIC
18 CXXFLAGSSHARED = -fPIC
19
20
21 HEPMCERROR=
22 ifneq (x$(HEPMCLOCATION),x)
23  ifeq ($(wildcard $(HEPMCLOCATION)/include/HepMC/*.h),)
24   HEPMCERROR= HepMC interface: ERROR, no HepMC headers found in ${HEPMCLOCATION}/include/HepMC
25  endif
26 endif
27
28 # Location of directories.
29 MYTMPDIR=tmp
30 TOPDIR=$(shell \pwd)
31 INCDIR=include
32 SRCDIR=src
33 LIBDIR=lib
34 LIBDIRARCH=lib/archive
35 BINDIR=bin
36
37 # Location of libraries to be built.
38 ifeq ($(SHAREDLIBS),yes)
39   targets=$(LIBDIRARCH)/libpythia8.a
40   targets+=$(LIBDIR)/libpythia8.$(SHAREDSUFFIX)
41   targets+=$(LIBDIRARCH)/liblhapdfdummy.a
42   targets+=$(LIBDIR)/liblhapdfdummy.$(SHAREDSUFFIX)
43 else
44   targets=$(LIBDIRARCH)/libpythia8.a
45   targets+=$(LIBDIRARCH)/liblhapdfdummy.a
46 endif
47
48 ifneq (x$(HEPMCLOCATION),x)
49  targets+=$(LIBDIRARCH)/libhepmcinterface.a
50  ifeq ($(SHAREDLIBS),yes)
51   targets+=$(LIBDIR)/libhepmcinterface.$(SHAREDSUFFIX)
52  endif
53 endif
54
55
56 all: $(targets) config.mk
57
58 config.mk: ./configure
59         ./configure
60
61 # Main part: build Pythia8 library. 
62
63 $(MYTMPDIR)/%.o : $(SRCDIR)/%.cc
64         @mkdir -p $(MYTMPDIR)
65         $(CXX) $(CXXFLAGS) $(CXXFLAGSSHARED) -c -I$(INCDIR) $< -o $@
66
67 $(MYTMPDIR)/archive/%.o : $(SRCDIR)/%.cc
68         @mkdir -p $(MYTMPDIR)/archive
69         $(CXX) $(CXXFLAGS) -c -I$(INCDIR) $< -o $@
70
71 $(MYTMPDIR)/%.o : lhapdfdummy/%.cc
72         @mkdir -p $(MYTMPDIR)
73         $(CXX) $(CXXFLAGS) $(CXXFLAGSSHARED) -c -I$(INCDIR) $< -o $@
74
75 $(MYTMPDIR)/archive/%.o : lhapdfdummy/%.cc
76         @mkdir -p $(MYTMPDIR)/archive
77         $(CXX) $(CXXFLAGS) -c -I$(INCDIR) $< -o $@
78
79 # Creating the dependency files *.d
80 # The compiler with option -M is used to build the dependency strings. They
81 # are further edited with sed (stream editor). The first sed command adds the
82 # dependency for the *.d files themselves, the second one is needed because
83 # object files are put in the directory different from src. The last line
84 # removes empty *.d files produced in case of error.
85
86 ifeq ($(SHAREDLIBS),yes)
87   $(MYTMPDIR)/%.d : $(SRCDIR)/%.cc
88         @echo Making dependency for file $<; \
89         mkdir -p $(MYTMPDIR); \
90         $(CC) -M -I$(INCDIR) $< | \
91         sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' | \
92         sed 's/$*\.o/$(MYTMPDIR)\/$*.o/' > $@; \
93         [ -s $@ ] || rm -f $@
94 endif
95
96 $(MYTMPDIR)/archive/%.d : $(SRCDIR)/%.cc
97         @echo Making dependency for file $<; \
98         mkdir -p $(MYTMPDIR)/archive; \
99         $(CC) -M -I$(INCDIR) $< | \
100         sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' | \
101         sed 's/$*\.o/$(MYTMPDIR)\/archive\/$*.o/' > $@; \
102         [ -s $@ ] || rm -f $@
103
104 objects := $(patsubst $(SRCDIR)/%.cc,$(MYTMPDIR)/%.o,$(wildcard $(SRCDIR)/*.cc))
105 objectsarch := $(patsubst $(SRCDIR)/%.cc,$(MYTMPDIR)/archive/%.o,$(wildcard $(SRCDIR)/*.cc))
106
107 $(LIBDIR)/libpythia8.$(SHAREDSUFFIX): $(objects)
108         @mkdir -p $(LIBDIR)
109         $(CXX) $(LDFLAGSSHARED) -o $@ $(objects) $(LDFLAGLIBNAME),$(notdir $@)
110
111 $(LIBDIRARCH)/libpythia8.a: $(objectsarch)
112         @mkdir -p $(LIBDIRARCH)
113         ar cru $@ $(objectsarch)
114
115 objdum := $(patsubst lhapdfdummy/%.cc,$(MYTMPDIR)/%.o,$(wildcard lhapdfdummy/*.cc))
116 objdumarch := $(patsubst lhapdfdummy/%.cc,$(MYTMPDIR)/archive/%.o,$(wildcard lhapdfdummy/*.cc))
117
118 $(LIBDIR)/liblhapdfdummy.$(SHAREDSUFFIX): $(objdum)
119         @mkdir -p $(LIBDIR)
120         $(CXX) $(LDFLAGSSHARED) -o $@ $(objdum) $(LDFLAGLIBNAME),$(notdir $@)
121
122 $(LIBDIRARCH)/liblhapdfdummy.a: $(objdumarch)
123         @mkdir -p $(LIBDIRARCH)
124         ar cru $@ $(objdumarch)
125
126 deps := $(patsubst $(SRCDIR)/%.cc,$(MYTMPDIR)/%.d,$(wildcard $(SRCDIR)/*.cc))
127 depsarch := $(patsubst $(SRCDIR)/%.cc,$(MYTMPDIR)/archive/%.d,$(wildcard $(SRCDIR)/*.cc))
128
129
130 # The "if" below is needed in order to avoid producing the dependency files
131 # when you want to just clean
132
133 ifeq (,$(findstring clean, $(MAKECMDGOALS)))
134 -include $(deps)
135 -include $(depsarch)
136 endif
137
138 # Build HepMC interface part if HepMC location is set.
139
140 ifneq (x$(HEPMCLOCATION),x)
141  HEPMCINCLUDE=-I$(HEPMCLOCATION)/include
142
143  ifeq (x$(HEPMCERROR),x)
144
145    $(MYTMPDIR)/%.o : hepmcinterface/%.cc config.mk
146         @mkdir -p $(MYTMPDIR)
147         $(CXX) $(CXXFLAGS) $(CXXFLAGSSHARED) $(HEPMCVFLAG) -c -I$(INCDIR) $(HEPMCINCLUDE) $< -o $@
148
149    $(MYTMPDIR)/archive/%.o : hepmcinterface/%.cc config.mk
150         @mkdir -p $(MYTMPDIR)/archive
151         $(CXX) $(CXXFLAGS) $(HEPMCVFLAG) -c -I$(INCDIR) $(HEPMCINCLUDE) $< -o $@
152
153    $(MYTMPDIR)/%.d : hepmcinterface/%.cc
154         @echo Making dependency for file $<; \
155         mkdir -p $(MYTMPDIR); \
156         $(CC) -M -I$(INCDIR) $(HEPMCINCLUDE) $< | \
157         sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' | \
158         sed 's/$*.o/$(MYTMPDIR)\/$*.o/' > $@; \
159         [ -s $@ ] || rm -f $@
160
161    $(MYTMPDIR)/archive/%.d : hepmcinterface/%.cc
162         @echo Making dependency for file $<; \
163         mkdir -p $(MYTMPDIR)/archive; \
164         $(CC) -M -I$(INCDIR) $(HEPMCINCLUDE) $< | \
165         sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' | \
166         sed 's/$*.o/$(MYTMPDIR)\/archive\/$*.o/' > $@; \
167         [ -s $@ ] || rm -f $@
168
169    objectsI := $(patsubst hepmcinterface/%.cc,$(MYTMPDIR)/%.o,$(wildcard hepmcinterface/*.cc))
170    objectsIarch := $(patsubst hepmcinterface/%.cc,$(MYTMPDIR)/archive/%.o,$(wildcard hepmcinterface/*.cc))
171
172    $(LIBDIR)/libhepmcinterface.$(SHAREDSUFFIX) : $(objectsI)
173         @mkdir -p $(LIBDIR)
174         $(CXX) $(LDFLAGSSHARED) $(objectsI) -o $@ $(LDFLAGLIBNAME),$(notdir $@)
175
176    $(LIBDIRARCH)/libhepmcinterface.a : $(objectsIarch)
177         @mkdir -p $(LIBDIRARCH)
178         ar cru $(LIBDIRARCH)/libhepmcinterface.a $(objectsIarch)
179
180    depsI := $(patsubst hepmcinterface/%.cc,$(MYTMPDIR)/%.d,$(wildcard hepmcinterface/*.cc))
181    depsIarch := $(patsubst hepmcinterface/%.cc,$(MYTMPDIR)/archive/%.d,$(wildcard hepmcinterface/*.cc))
182
183    ifeq (,$(findstring clean, $(MAKECMDGOALS)))
184    -include $(depsI)
185    -include $(depsIarch)
186    endif
187
188  else
189
190    $(LIBDIRARCH)/libhepmcinterface.a $(LIBDIR)/libhepmcinterface.$(SHAREDSUFFIX) :
191         @echo $(HEPMCERROR)
192
193
194
195  endif
196
197 endif
198
199
200 # Install targets:
201
202 ifneq (x$(INSTALLDIR),x.)
203  install: installmain installdata
204  installmain:
205         cp -r include $(INSTALLDIR)/.
206         cp -r lib $(INSTALLDIR)/.
207         cp -p config.mk $(INSTALLDIR)/.
208
209  ifneq ($(DATADIR),$(INSTALLDIR))
210   installdata:
211         cp -r xmldoc $(DATADIR)/.
212         ln -fs $(DATADIR)/xmldoc $(INSTALLDIR)/xmldoc
213  else
214   installdata:
215         cp -r xmldoc $(INSTALLDIR)/.
216  endif
217 else
218  install:
219         @echo "everything is already installed"
220 endif
221
222
223 # Clean up: remove (almost?) everything that cannot be recreated.
224
225 .PHONY: clean distclean
226
227 clean:
228         rm -rf $(MYTMPDIR)
229         rm -rf $(LIBDIR)
230         rm -rf $(BINDIR)
231         cd examples; rm -rf bin; rm -f *.exe; cd -
232         cd rootexamples; rm -f *.exe; cd -
233
234 distclean: clean
235         rm -f config.mk
236         rm -f *~; rm -f \#*;
237         cd $(SRCDIR); rm -f *~; rm -f \#*; cd -
238         cd $(INCDIR); rm -f *~; rm -f \#*; cd -
239         cd xmldoc; rm -f *~; rm -f \#*; cd -
240         cd htmldoc; rm -f *~; rm -f \#*; cd -
241         cd phpdoc; rm -f *~; rm -f \#*; cd -
242         cd hepmcinterface; rm -f *~; rm -f \#*; cd -
243         cd lhapdfdummy; rm -f *~; rm -f \#*; cd -
244         cd examples; rm -f *~; rm -f \#*; rm -f core*; rm -f config.*; cd -
245         cd rootexamples; rm -f *~; rm -f \#*; rm -f core*; rm -f config.*; cd -
246