1SHELL = /bin/sh
2
3PKG_CONFIG ?= pkg-config
4GUI_LIBS += lv2 x11 cairo
5LV2_LIBS += lv2
6ifneq ($(shell $(PKG_CONFIG) --exists fontconfig || echo no), no)
7  override GUI_LIBS += fontconfig
8  override 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
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
37LANGUAGE ?= EN
38GUIBGFILE = surface.png
39
40ifeq ($(shell test -e src/Locale_$(LANGUAGE).hpp && echo -n yes),yes)
41  override GUIPPFLAGS += -DLOCALEFILE=\"Locale_$(LANGUAGE).hpp\"
42endif
43
44ifeq ($(shell test -e src/Skin_$(SKIN).hpp && echo -n yes),yes)
45  override GUIPPFLAGS += -DSKINFILE=\"Skin_$(SKIN).hpp\"
46endif
47
48ifeq ($(shell test -e surface_$(SKIN).png && echo -n yes),yes)
49  override GUIBGFILE = inc/surface_$(SKIN).png
50else
51  override GUIBGFILE = inc/surface.png
52endif
53
54ifdef WWW_BROWSER_CMD
55  override GUIPPFLAGS += -DWWW_BROWSER_CMD=\"$(WWW_BROWSER_CMD)\"
56endif
57
58BUNDLE = BAngr.lv2
59DSP = BAngr
60DSP_SRC = ./src/BAngr.cpp
61GUI = BAngrGUI
62GUI_SRC = ./src/BAngrGUI.cpp
63OBJ_EXT = .so
64DSP_OBJ = $(DSP)$(OBJ_EXT)
65GUI_OBJ = $(GUI)$(OBJ_EXT)
66B_OBJECTS = $(addprefix $(BUNDLE)/, $(DSP_OBJ) $(GUI_OBJ))
67ROOTFILES = \
68	*.ttl \
69	LICENSE
70
71INCFILES = inc/*.png
72
73B_FILES = $(addprefix $(BUNDLE)/, $(ROOTFILES) $(INCFILES))
74
75DSP_INCL = src/Airwindows/XRegion.cpp
76
77GUI_CXX_INCL = \
78	src/BWidgets/PopupListBox.cpp \
79	src/BWidgets/ListBox.cpp \
80	src/BWidgets/ChoiceBox.cpp \
81	src/BWidgets/BItems.cpp \
82	src/BWidgets/ItemBox.cpp \
83	src/BWidgets/DownButton.cpp \
84	src/BWidgets/UpButton.cpp \
85	src/BWidgets/Button.cpp \
86	src/BWidgets/HSliderValue.cpp \
87	src/BWidgets/HSlider.cpp \
88	src/BWidgets/Knob.cpp \
89	src/BWidgets/HScale.cpp \
90	src/BWidgets/ToggleButton.cpp \
91	src/BWidgets/Button.cpp \
92	src/BWidgets/RangeWidget.cpp \
93	src/BWidgets/ValueWidget.cpp \
94	src/BWidgets/Label.cpp \
95	src/BWidgets/Text.cpp \
96	src/BWidgets/Window.cpp \
97	src/BWidgets/Widget.cpp \
98	src/BWidgets/BStyles.cpp \
99	src/BWidgets/BColors.cpp \
100	src/BUtilities/to_string.cpp \
101	src/BUtilities/stof.cpp \
102	src/BUtilities/vsystem.cpp
103
104GUI_C_INCL = \
105	src/screen.c \
106	src/BWidgets/cairoplus.c \
107	src/BWidgets/pugl/implementation.c \
108	src/BWidgets/pugl/x11_stub.c \
109	src/BWidgets/pugl/x11_cairo.c \
110	src/BWidgets/pugl/x11.c
111
112ifeq ($(shell $(PKG_CONFIG) --exists 'lv2 >= 1.12.4' || echo no), no)
113  $(error lv2 >= 1.12.4 not found. Please install lv2 >= 1.12.4 first.)
114endif
115ifeq ($(shell $(PKG_CONFIG) --exists 'x11 >= 1.6.0' || echo no), no)
116  $(error x11 >= 1.6.0 not found. Please install x11 >= 1.6.0 first.)
117endif
118ifeq ($(shell $(PKG_CONFIG) --exists 'cairo >= 1.12.0' || echo no), no)
119  $(error cairo >= 1.12.0 not found. Please install cairo >= 1.12.0 first.)
120endif
121
122$(BUNDLE): clean $(DSP_OBJ) $(GUI_OBJ)
123	@cp $(ROOTFILES) $(BUNDLE)
124	@mkdir -p $(BUNDLE)/inc
125	@cp $(INCFILES) $(BUNDLE)/inc
126
127all: $(BUNDLE)
128
129$(DSP_OBJ): $(DSP_SRC)
130	@echo -n Build $(BUNDLE) DSP...
131	@mkdir -p $(BUNDLE)
132	@$(CXX) $(CPPFLAGS) $(OPTIMIZATIONS) $(CXXFLAGS) $(LDFLAGS) $(DSPCFLAGS) -Wl,--start-group $(DSPLIBS) $< $(DSP_INCL) -Wl,--end-group -o $(BUNDLE)/$@
133	@$(STRIP) $(STRIPFLAGS) $(BUNDLE)/$@
134	@echo \ done.
135
136$(GUI_OBJ): $(GUI_SRC)
137	@echo -n Build $(BUNDLE) GUI...
138	@mkdir -p $(BUNDLE)
139	@mkdir -p $(BUNDLE)/tmp
140	@cd $(BUNDLE)/tmp; $(CC) $(CPPFLAGS) $(GUIPPFLAGS) $(CFLAGS) $(GUICFLAGS) $(addprefix ../../, $(GUI_C_INCL)) -c
141	@cd $(BUNDLE)/tmp; $(CXX) $(CPPFLAGS) $(GUIPPFLAGS) $(CXXFLAGS) $(GUICFLAGS) $(addprefix ../../, $< $(GUI_CXX_INCL)) -c
142	@$(CXX) $(CPPFLAGS) $(GUIPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $(GUICFLAGS) -Wl,--start-group $(GUILIBS) $(BUNDLE)/tmp/*.o -Wl,--end-group -o $(BUNDLE)/$@
143	@$(STRIP) $(STRIPFLAGS) $(BUNDLE)/$@
144	@rm -rf $(BUNDLE)/tmp
145	@echo \ done.
146
147install:
148	@echo -n Install $(BUNDLE) to $(DESTDIR)$(LV2DIR)...
149	@$(INSTALL) -d $(DESTDIR)$(LV2DIR)/$(BUNDLE)
150	@$(INSTALL) -d $(DESTDIR)$(LV2DIR)/$(BUNDLE)/inc
151	@$(INSTALL_PROGRAM) -m755 $(B_OBJECTS) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
152	@$(INSTALL_DATA) $(addprefix $(BUNDLE)/, $(ROOTFILES)) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
153	@$(INSTALL_DATA) $(addprefix $(BUNDLE)/, $(INCFILES)) $(DESTDIR)$(LV2DIR)/$(BUNDLE)/inc
154	@echo \ done.
155
156uninstall:
157	@echo -n Uninstall $(BUNDLE)...
158	@rm -f $(addprefix $(DESTDIR)$(LV2DIR)/$(BUNDLE)/, $(ROOTFILES) $(INCFILES))
159	-@rmdir $(DESTDIR)$(LV2DIR)/$(BUNDLE)/inc
160	@rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(GUI_OBJ)
161	@rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(DSP_OBJ)
162	-@rmdir $(DESTDIR)$(LV2DIR)/$(BUNDLE)
163	@echo \ done.
164
165clean:
166	@rm -rf $(BUNDLE)
167
168.PHONY: all install uninstall clean
169
170.NOTPARALLEL:
171