1SHELL = /bin/sh
2
3PKG_CONFIG ?= pkg-config
4GUI_LIBS += lv2 sndfile x11 cairo
5LV2_LIBS += lv2 sndfile
6ifneq ($(shell $(PKG_CONFIG) --exists fontconfig || echo no), no)
7  GUI_LIBS += fontconfig
8  GUIPPFLAGS += -DPKG_HAVE_FONTCONFIG
9endif
10
11CC ?= gcc
12CXX ?= g++
13INSTALL ?= install
14INSTALL_PROGRAM ?= $(INSTALL)
15INSTALL_DATA ?= $(INSTALL) -m644
16STRIP ?= strip
17
18PREFIX ?= /usr/local
19LV2DIR ?= $(PREFIX)/lib/lv2
20
21OPTIMIZATIONS ?=-O3 -ffast-math
22CFLAGS ?=-Wall
23CXXFLAGS ?=-Wall
24STRIPFLAGS ?=-s --strip-program=$(STRIP)
25LDFLAGS ?=-Wl,-Bstatic -Wl,-Bdynamic -Wl,--as-needed
26
27override CFLAGS += -std=c99 -fvisibility=hidden -fPIC
28override CXXFLAGS += -std=c++11 -fvisibility=hidden -fPIC
29override LDFLAGS += -shared -pthread
30
31override GUIPPFLAGS += -DPUGL_HAVE_CAIRO
32DSPCFLAGS += `$(PKG_CONFIG) --cflags $(LV2_LIBS)`
33GUICFLAGS += `$(PKG_CONFIG) --cflags $(GUI_LIBS)`
34DSPLIBS += -lm `$(PKG_CONFIG) --libs $(LV2_LIBS)`
35GUILIBS += -lm `$(PKG_CONFIG) --libs $(GUI_LIBS)`
36
37ifeq ($(shell test -e src/Locale_$(LANGUAGE).hpp && echo -n yes),yes)
38  override GUIPPFLAGS += -DLOCALEFILE=\"Locale_$(LANGUAGE).hpp\"
39endif
40
41ifdef WWW_BROWSER_CMD
42  override GUIPPFLAGS += -DWWW_BROWSER_CMD=\"$(WWW_BROWSER_CMD)\"
43endif
44
45BUNDLE = BOops.lv2
46DSP = BOops
47DSP_SRC = ./src/BOops.cpp
48GUI = BOopsGUI
49GUI_SRC = ./src/BOopsGUI.cpp
50OBJ_EXT = .so
51DSP_OBJ = $(DSP)$(OBJ_EXT)
52GUI_OBJ = $(GUI)$(OBJ_EXT)
53B_OBJECTS = $(addprefix $(BUNDLE)/, $(DSP_OBJ) $(GUI_OBJ))
54ROOTFILES = \
55	*.ttl \
56	LICENSE
57
58INCFILES = inc/*.png inc/*.wav
59
60B_FILES = $(addprefix $(BUNDLE)/, $(ROOTFILES) $(INCFILES))
61
62DSP_INCL = \
63	src/Message.cpp \
64	src/BUtilities/stof.cpp \
65	src/Slot.cpp \
66	src/Airwindows/Galactic.cpp \
67	src/Airwindows/Infinity2.cpp \
68	src/Airwindows/XRegion.cpp
69
70GUI_CXX_INCL = \
71	src/SampleChooser.cpp \
72	src/PatternChooser.cpp \
73	src/Pattern.cpp \
74	src/ShapeWidget.cpp \
75	src/SelectWidget.cpp \
76	src/ValueSelect.cpp \
77	src/DownClick.cpp \
78	src/UpClick.cpp \
79	src/BWidgets/FileChooser.cpp \
80	src/BWidgets/HPianoRoll.cpp \
81	src/BWidgets/PianoWidget.cpp \
82	src/BWidgets/MessageBox.cpp \
83	src/BWidgets/TextToggleButton.cpp \
84	src/BWidgets/TextButton.cpp \
85	src/BWidgets/DrawingSurface.cpp \
86	src/BWidgets/PopupListBox.cpp \
87	src/BWidgets/ListBox.cpp \
88	src/BWidgets/ChoiceBox.cpp \
89	src/BWidgets/ItemBox.cpp \
90	src/BWidgets/Text.cpp \
91	src/BWidgets/UpButton.cpp \
92	src/BWidgets/DownButton.cpp \
93	src/BWidgets/ToggleButton.cpp \
94	src/BWidgets/Button.cpp \
95	src/BWidgets/HSlider.cpp \
96	src/BWidgets/HScale.cpp \
97	src/BWidgets/Knob.cpp \
98	src/BWidgets/RangeWidget.cpp \
99	src/BWidgets/ValueWidget.cpp \
100	src/BWidgets/ImageIcon.cpp \
101	src/BWidgets/Icon.cpp \
102	src/BWidgets/Label.cpp \
103	src/BWidgets/Window.cpp \
104	src/BWidgets/Widget.cpp \
105	src/BWidgets/BStyles.cpp \
106	src/BWidgets/BColors.cpp \
107	src/BWidgets/BItems.cpp \
108	src/BUtilities/to_string.cpp \
109	src/BUtilities/stof.cpp \
110	src/BUtilities/vsystem.cpp
111
112GUI_C_INCL = \
113	src/screen.c \
114	src/BWidgets/cairoplus.c \
115	src/BWidgets/pugl/implementation.c \
116	src/BWidgets/pugl/x11_stub.c \
117	src/BWidgets/pugl/x11_cairo.c \
118	src/BWidgets/pugl/x11.c
119
120$(BUNDLE): check clean $(DSP_OBJ) $(GUI_OBJ)
121	@cp $(ROOTFILES) $(BUNDLE)
122	@mkdir -p $(BUNDLE)/inc
123	@cp $(INCFILES) $(BUNDLE)/inc
124
125all: $(BUNDLE)
126
127$(DSP_OBJ): $(DSP_SRC)
128	@echo -n Build $(BUNDLE) DSP...
129	@mkdir -p $(BUNDLE)
130	@$(CXX) $(CPPFLAGS) $(OPTIMIZATIONS) $(CXXFLAGS) $(LDFLAGS) $(DSPCFLAGS) -Wl,--start-group $(DSPLIBS) $< $(DSP_INCL) -Wl,--end-group -o $(BUNDLE)/$@
131	@echo \ done.
132
133$(GUI_OBJ): $(GUI_SRC)
134	@echo -n Build $(BUNDLE) GUI...
135	@mkdir -p $(BUNDLE)
136	@mkdir -p $(BUNDLE)/tmp
137	@cd $(BUNDLE)/tmp; $(CC) $(CPPFLAGS) $(GUIPPFLAGS) $(CFLAGS) $(GUICFLAGS) $(addprefix ../../, $(GUI_C_INCL)) -c
138	@cd $(BUNDLE)/tmp; $(CXX) $(CPPFLAGS) $(GUIPPFLAGS) $(CXXFLAGS) $(GUICFLAGS) $(addprefix ../../, $< $(GUI_CXX_INCL)) -c
139	@$(CXX) $(CPPFLAGS) $(GUIPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $(GUICFLAGS) -Wl,--start-group $(GUILIBS) $(BUNDLE)/tmp/*.o -Wl,--end-group -o $(BUNDLE)/$@
140	@rm -rf $(BUNDLE)/tmp
141	@echo \ done.
142
143install:
144	@echo -n Install $(BUNDLE) to $(DESTDIR)$(LV2DIR)...
145	@$(INSTALL) -d $(DESTDIR)$(LV2DIR)/$(BUNDLE)
146	@$(INSTALL) -d $(DESTDIR)$(LV2DIR)/$(BUNDLE)/inc
147	@$(INSTALL_PROGRAM) -m755 $(B_OBJECTS) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
148	@$(INSTALL_DATA) $(addprefix $(BUNDLE)/, $(ROOTFILES)) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
149	@$(INSTALL_DATA) $(addprefix $(BUNDLE)/, $(INCFILES)) $(DESTDIR)$(LV2DIR)/$(BUNDLE)/inc
150	@echo \ done.
151
152install-strip:
153	@echo -n "Install (stripped)" $(BUNDLE) to $(DESTDIR)$(LV2DIR)...
154	@$(INSTALL) -d $(DESTDIR)$(LV2DIR)/$(BUNDLE)
155	@$(INSTALL) -d $(DESTDIR)$(LV2DIR)/$(BUNDLE)/inc
156	@$(INSTALL_PROGRAM) -m755 $(STRIPFLAGS) $(B_OBJECTS) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
157	@$(INSTALL_DATA) $(addprefix $(BUNDLE)/, $(ROOTFILES)) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
158	@$(INSTALL_DATA) $(addprefix $(BUNDLE)/, $(INCFILES)) $(DESTDIR)$(LV2DIR)/$(BUNDLE)/inc
159	@echo \ done.
160
161uninstall:
162	@echo -n Uninstall $(BUNDLE)...
163	@rm -f $(addprefix $(DESTDIR)$(LV2DIR)/$(BUNDLE)/, $(ROOTFILES) $(INCFILES))
164	-@rmdir $(DESTDIR)$(LV2DIR)/$(BUNDLE)/inc
165	@rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(GUI_OBJ)
166	@rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(DSP_OBJ)
167	-@rmdir $(DESTDIR)$(LV2DIR)/$(BUNDLE)
168	@echo \ done.
169
170check:
171ifeq ($(shell $(PKG_CONFIG) --exists 'sndfile > 1.0.18' || echo no), no)
172  $(error sndfile >= 1.0.18 not found. Please install sndfile >= 1.0.18 first.)
173endif
174ifeq ($(shell $(PKG_CONFIG) --exists 'lv2 >= 1.14.0' || echo no), no)
175  $(error lv2 >= 1.14.0 not found. Please install lv2 >= 1.14.0 first.)
176endif
177ifeq ($(shell $(PKG_CONFIG) --exists 'x11 >= 1.6.0' || echo no), no)
178  $(error x11 >= 1.6.0 not found. Please install x11 >= 1.6.0 first.)
179endif
180ifeq ($(shell $(PKG_CONFIG) --exists 'cairo >= 1.12.0' || echo no), no)
181  $(error cairo >= 1.12.0 not found. Please install cairo >= 1.12.0 first.)
182endif
183
184clean:
185	@rm -rf $(BUNDLE)
186
187.PHONY: all install uninstall check clean
188
189.NOTPARALLEL:
190