2 # Libraries Makefile. Some ideas from Geant4 Makefiles
4 # M. Kirsanov 07.04.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
18 CXXFLAGSSHARED = -fPIC
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
28 # Location of directories.
34 LIBDIRARCH=lib/archive
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)
44 targets=$(LIBDIRARCH)/libpythia8.a
45 targets+=$(LIBDIRARCH)/liblhapdfdummy.a
48 ifneq (x$(HEPMCLOCATION),x)
49 targets+=$(LIBDIRARCH)/libhepmcinterface.a
50 ifeq ($(SHAREDLIBS),yes)
51 targets+=$(LIBDIR)/libhepmcinterface.$(SHAREDSUFFIX)
56 all: $(targets) config.mk
58 config.mk: ./configure
61 # Main part: build Pythia8 library.
63 $(MYTMPDIR)/%.o : $(SRCDIR)/%.cc
65 $(CXX) $(CXXFLAGS) $(CXXFLAGSSHARED) -c -I$(INCDIR) $< -o $@
67 $(MYTMPDIR)/archive/%.o : $(SRCDIR)/%.cc
68 @mkdir -p $(MYTMPDIR)/archive
69 $(CXX) $(CXXFLAGS) -c -I$(INCDIR) $< -o $@
71 $(MYTMPDIR)/%.o : lhapdfdummy/%.cc
73 $(CXX) $(CXXFLAGS) $(CXXFLAGSSHARED) -c -I$(INCDIR) $< -o $@
75 $(MYTMPDIR)/archive/%.o : lhapdfdummy/%.cc
76 @mkdir -p $(MYTMPDIR)/archive
77 $(CXX) $(CXXFLAGS) -c -I$(INCDIR) $< -o $@
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.
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/' > $@; \
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 $@
104 objects := $(patsubst $(SRCDIR)/%.cc,$(MYTMPDIR)/%.o,$(wildcard $(SRCDIR)/*.cc))
105 objectsarch := $(patsubst $(SRCDIR)/%.cc,$(MYTMPDIR)/archive/%.o,$(wildcard $(SRCDIR)/*.cc))
107 $(LIBDIR)/libpythia8.$(SHAREDSUFFIX): $(objects)
109 $(CXX) $(LDFLAGSSHARED) -o $@ $(objects) $(LDFLAGLIBNAME),$(notdir $@)
111 $(LIBDIRARCH)/libpythia8.a: $(objectsarch)
112 @mkdir -p $(LIBDIRARCH)
113 ar cru $@ $(objectsarch)
115 objdum := $(patsubst lhapdfdummy/%.cc,$(MYTMPDIR)/%.o,$(wildcard lhapdfdummy/*.cc))
116 objdumarch := $(patsubst lhapdfdummy/%.cc,$(MYTMPDIR)/archive/%.o,$(wildcard lhapdfdummy/*.cc))
118 $(LIBDIR)/liblhapdfdummy.$(SHAREDSUFFIX): $(objdum)
120 $(CXX) $(LDFLAGSSHARED) -o $@ $(objdum) $(LDFLAGLIBNAME),$(notdir $@)
122 $(LIBDIRARCH)/liblhapdfdummy.a: $(objdumarch)
123 @mkdir -p $(LIBDIRARCH)
124 ar cru $@ $(objdumarch)
126 deps := $(patsubst $(SRCDIR)/%.cc,$(MYTMPDIR)/%.d,$(wildcard $(SRCDIR)/*.cc))
127 depsarch := $(patsubst $(SRCDIR)/%.cc,$(MYTMPDIR)/archive/%.d,$(wildcard $(SRCDIR)/*.cc))
130 # The "if" below is needed in order to avoid producing the dependency files
131 # when you want to just clean
133 ifeq (,$(findstring clean, $(MAKECMDGOALS)))
138 # Build HepMC interface part if HepMC location is set.
140 ifneq (x$(HEPMCLOCATION),x)
141 HEPMCINCLUDE=-I$(HEPMCLOCATION)/include
143 ifeq (x$(HEPMCERROR),x)
145 $(MYTMPDIR)/%.o : hepmcinterface/%.cc config.mk
146 @mkdir -p $(MYTMPDIR)
147 $(CXX) $(CXXFLAGS) $(CXXFLAGSSHARED) $(HEPMCVFLAG) -c -I$(INCDIR) $(HEPMCINCLUDE) $< -o $@
149 $(MYTMPDIR)/archive/%.o : hepmcinterface/%.cc config.mk
150 @mkdir -p $(MYTMPDIR)/archive
151 $(CXX) $(CXXFLAGS) $(HEPMCVFLAG) -c -I$(INCDIR) $(HEPMCINCLUDE) $< -o $@
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 $@
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 $@
169 objectsI := $(patsubst hepmcinterface/%.cc,$(MYTMPDIR)/%.o,$(wildcard hepmcinterface/*.cc))
170 objectsIarch := $(patsubst hepmcinterface/%.cc,$(MYTMPDIR)/archive/%.o,$(wildcard hepmcinterface/*.cc))
172 $(LIBDIR)/libhepmcinterface.$(SHAREDSUFFIX) : $(objectsI)
174 $(CXX) $(LDFLAGSSHARED) $(objectsI) -o $@ $(LDFLAGLIBNAME),$(notdir $@)
176 $(LIBDIRARCH)/libhepmcinterface.a : $(objectsIarch)
177 @mkdir -p $(LIBDIRARCH)
178 ar cru $(LIBDIRARCH)/libhepmcinterface.a $(objectsIarch)
180 depsI := $(patsubst hepmcinterface/%.cc,$(MYTMPDIR)/%.d,$(wildcard hepmcinterface/*.cc))
181 depsIarch := $(patsubst hepmcinterface/%.cc,$(MYTMPDIR)/archive/%.d,$(wildcard hepmcinterface/*.cc))
183 ifeq (,$(findstring clean, $(MAKECMDGOALS)))
185 -include $(depsIarch)
190 $(LIBDIRARCH)/libhepmcinterface.a $(LIBDIR)/libhepmcinterface.$(SHAREDSUFFIX) :
202 ifneq (x$(INSTALLDIR),x.)
203 install: installmain installdata
205 cp -r include $(INSTALLDIR)/.
206 cp -r lib $(INSTALLDIR)/.
207 cp -p config.mk $(INSTALLDIR)/.
209 ifneq ($(DATADIR),$(INSTALLDIR))
211 cp -r xmldoc $(DATADIR)/.
212 ln -fs $(DATADIR)/xmldoc $(INSTALLDIR)/xmldoc
215 cp -r xmldoc $(INSTALLDIR)/.
219 @echo "everything is already installed"
223 # Clean up: remove (almost?) everything that cannot be recreated.
225 .PHONY: clean distclean
231 cd examples; rm -rf bin; rm -f *.exe; cd -
232 cd rootexamples; rm -f *.exe; cd -
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 -