1# Make file for GCC compiler on Linux or compatible OS
2
3# list of source files for astyle
4SRC = astyle_main.cpp \
5      ASBeautifier.cpp \
6      ASFormatter.cpp \
7      ASEnhancer.cpp \
8      ASLocalizer.cpp \
9      ASResource.cpp
10
11# list of source files for libraries without ASLocalizer
12SRCx = astyle_main.cpp \
13       ASBeautifier.cpp \
14       ASFormatter.cpp \
15       ASEnhancer.cpp \
16       ASResource.cpp
17
18# source directories
19vpath %.cpp ../../src
20vpath %.h   ../../src
21
22# NOTE for java compiles the environment variable $JAVA_HOME must be set
23# example: export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.00
24ifndef JAVA_HOME
25    JAVA_HOME = /usr/lib/jvm/default-java
26endif
27
28# set prefix if not defined on the command line
29ifndef prefix
30    prefix=/usr
31endif
32SYSCONF_PATH=$(prefix)/share/doc/astyle
33
34# define macros
35bindir = bin
36objdir = obj
37ipath=$(prefix)/bin
38CBASEFLAGS = -Wall -Wextra -fno-rtti -fno-exceptions -std=c++11
39JAVAINCS   = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -I/usr/local/openjdk8/include/freebsd
40CXX ?= g++
41INSTALL=install -o $(USER) -g $(USER)
42
43# Library's major version number -- Increment in case of incompatible API
44# change.
45MAJORVER = 3
46# Library's minor version number -- Increment when functionnality is added in a
47# backward-compatible manner; reset to 0 when major number changes.
48MINORVER = 0
49# Library's patch version number -- Increment in case of backward-compatible
50# bug fixes or refactoring; reset to 0 when minor number changes.
51PATCHVER = 1
52# Library's full version number.
53SOLIBVER = $(MAJORVER).$(MINORVER).$(PATCHVER)
54
55##################################################
56
57# define compile options for each build
58ifdef CFLAGS
59    CFLAGSr   = -DNDEBUG $(CBASEFLAGS) $(CFLAGS)
60    CFLAGSd   = -g $(CBASEFLAGS) $(CFLAGS)
61else
62    CFLAGSr   = -DNDEBUG -O3 $(CBASEFLAGS)
63    CFLAGSd   = -g $(CBASEFLAGS)
64endif
65CFLAGSs   = -DASTYLE_LIB -fPIC $(CFLAGSr)
66CFLAGSsd  = -DASTYLE_LIB -fPIC $(CFLAGSd)
67CFLAGSa   = -DASTYLE_LIB $(CFLAGSr)
68CFLAGSad  = -DASTYLE_LIB $(CFLAGSd)
69CFLAGSsj  = -DASTYLE_JNI -fPIC $(CFLAGSr) $(JAVAINCS)
70CFLAGSsjd = -DASTYLE_JNI -fPIC $(CFLAGSd) $(JAVAINCS)
71
72# define link options
73ifdef LDFLAGS
74    LDFLAGSr   = $(LDFLAGS)
75    LDFLAGSd   = $(LDFLAGS)
76else
77    LDFLAGSr   = -s
78    LDFLAGSd   =
79endif
80
81# object files are built from the source list $(SRC)
82# a suffix is added for each build
83OBJ   = $(patsubst %.cpp,$(objdir)/%.o,$(SRC))
84OBJd  = $(patsubst %.cpp,$(objdir)/%_d.o,$(SRC))
85OBJs  = $(patsubst %.cpp,$(objdir)/%_s.o,$(SRCx))
86OBJsd = $(patsubst %.cpp,$(objdir)/%_sd.o,$(SRCx))
87OBJa  = $(patsubst %.cpp,$(objdir)/%_a.o,$(SRCx))
88OBJad = $(patsubst %.cpp,$(objdir)/%_ad.o,$(SRCx))
89OBJsj  = $(patsubst %.cpp,$(objdir)/%_sj.o,$(SRCx))
90OBJsjd = $(patsubst %.cpp,$(objdir)/%_sjd.o,$(SRCx))
91
92# define object file rule (with the suffix) for each build
93
94# OBJ
95$(objdir)/%.o:  %.cpp  astyle.h  astyle_main.h
96	@ mkdir -p $(objdir)
97	$(CXX) $(CFLAGSr) -c $< -o $@
98
99# OBJd
100$(objdir)/%_d.o:  %.cpp  astyle.h  astyle_main.h
101	@ mkdir -p $(objdir)
102	$(CXX) $(CFLAGSd) -c $< -o $@
103
104# OBJs
105$(objdir)/%_s.o:  %.cpp  astyle.h
106	@ mkdir -p $(objdir)
107	$(CXX) $(CFLAGSs) -c $< -o $@
108
109# OBJsd
110$(objdir)/%_sd.o:  %.cpp  astyle.h
111	@ mkdir -p $(objdir)
112	$(CXX) $(CFLAGSsd) -c $< -o $@
113
114# OBJa
115$(objdir)/%_a.o:  %.cpp  astyle.h
116	@ mkdir -p $(objdir)
117	$(CXX) $(CFLAGSa) -c $< -o $@
118
119# OBJad
120$(objdir)/%_ad.o:  %.cpp  astyle.h
121	@ mkdir -p $(objdir)
122	$(CXX) $(CFLAGSad) -c $< -o $@
123
124# OBJsj
125$(objdir)/%_sj.o:  %.cpp  astyle.h
126	@ mkdir -p $(objdir)
127	$(CXX) $(CFLAGSsj) -c $< -o $@
128
129# OBJsjd
130$(objdir)/%_sjd.o:  %.cpp  astyle.h
131	@ mkdir -p $(objdir)
132	$(CXX) $(CFLAGSsjd) -c $< -o $@
133
134##################################################
135# define build dependencies for each command
136
137release:  astyle
138astyle:  $(OBJ)
139	@ mkdir -p $(bindir)
140	$(CXX) $(LDFLAGSr) -o $(bindir)/$@ $^
141	@ echo
142
143debug:  astyled
144astyled:  $(OBJd)
145	@ mkdir -p $(bindir)
146	$(CXX) $(LDFLAGSd) -o $(bindir)/$@ $^
147	@ echo
148
149shared:  libastyle.so
150libastyle.so:  $(OBJs)
151	@ mkdir -p $(bindir)
152	$(CXX) -shared $(LDFLAGSr) -Wl,-soname,libastyle.so.$(MAJORVER) -o $(bindir)/libastyle.so.$(SOLIBVER) $^
153	@ echo
154
155shareddebug:  libastyled.so
156libastyled.so:  $(OBJsd)
157	@ mkdir -p $(bindir)
158	$(CXX) -shared $(LDFLAGSd) -Wl,-soname,libastyled.so.$(MAJORVER) -o $(bindir)/libastyled.so.$(SOLIBVER) $^
159	@ echo
160
161static:  libastyle.a
162libastyle.a:  $(OBJa)
163	@ mkdir -p $(bindir)
164	ar crs $(bindir)/$@ $^
165	@ echo
166
167staticdebug:  libastyled.a
168libastyled.a:  $(OBJad)
169	@ mkdir -p $(bindir)
170	ar crs $(bindir)/$@ $^
171	@ echo
172
173java:  libastylej.so
174libastylej.so:  $(OBJsj)
175	@ mkdir -p $(bindir)
176	$(CXX) -shared $(LDFLAGSr) -Wl,-soname,libastylej.so.$(MAJORVER) -o $(bindir)/libastylej.so.$(SOLIBVER) $^
177	@ echo
178
179javadebug:  libastylejd.so
180libastylejd.so:  $(OBJsjd)
181	@ mkdir -p $(bindir)
182	$(CXX) -shared $(LDFLAGSr) -Wl,-soname,libastylejd.so.$(MAJORVER) -o $(bindir)/libastylejd.so.$(SOLIBVER) $^
183	@ echo
184
185all:  release debug shared shareddebug static staticdebug
186
187javaall:  java javadebug
188
189clean:
190	rm -f $(objdir)/*.o $(bindir)/*astyle*
191
192cleanobj:
193	rm -f $(objdir)/*.o
194
195install:
196	$(INSTALL) -m 755 -d $(ipath)
197	@$(INSTALL) -m 755 $(bindir)/astyle  $(ipath)
198
199	@if [ -d $(SYSCONF_PATH)/html ]; then \
200		rm -rf  $(SYSCONF_PATH)/html; \
201	fi
202
203	$(INSTALL) -m 755 -d $(SYSCONF_PATH)
204	@mkdir -p $(SYSCONF_PATH)/html;
205	@for files in ../../doc/*.html  ../../doc/*.css; \
206	do \
207		$(INSTALL)  -m 644  $$files  $(SYSCONF_PATH)/html; \
208	done
209
210uninstall:
211	rm -f $(ipath)/astyle
212	rm -rf $(SYSCONF_PATH)
213