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
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 = BSEQuencer.lv2
46DSP = BSEQuencer
47DSP_SRC = ./src/BSEQuencer.cpp
48GUI = BSEQuencer_GUI
49GUI_SRC = ./src/BSEQuencer_GUI.cpp
50OBJ_EXT = .so
51DSP_OBJ = $(DSP)$(OBJ_EXT)
52GUI_OBJ = $(GUI)$(OBJ_EXT)
53B_OBJECTS = $(addprefix $(BUNDLE)/, $(DSP_OBJ) $(GUI_OBJ))
54FILES = *.ttl surface.png DrumSymbol.png NoteSymbol.png EditSymbol.png ScaleEditor.png LICENSE
55B_FILES = $(addprefix $(BUNDLE)/, $(FILES))
56
57DSP_INCL = src/BUtilities/stof.cpp
58
59GUI_CXX_INCL = \
60	src/BWidgets/ImageIcon.cpp \
61	src/BWidgets/Icon.cpp \
62	src/BWidgets/HPianoRoll.cpp \
63	src/BWidgets/PianoWidget.cpp \
64	src/BWidgets/TextToggleButton.cpp \
65	src/BWidgets/ToggleButton.cpp \
66	src/BWidgets/TextButton.cpp \
67	src/BWidgets/HSwitch.cpp \
68	src/BWidgets/PopupListBox.cpp \
69	src/BWidgets/ListBox.cpp \
70	src/BWidgets/ChoiceBox.cpp \
71	src/BWidgets/ItemBox.cpp \
72	src/BWidgets/Text.cpp \
73	src/BWidgets/UpButton.cpp \
74	src/BWidgets/DownButton.cpp \
75	src/BWidgets/Button.cpp \
76	src/BWidgets/DrawingSurface.cpp \
77	src/BWidgets/DialValue.cpp \
78	src/BWidgets/Dial.cpp \
79	src/BWidgets/VSliderValue.cpp \
80	src/BWidgets/VSlider.cpp \
81	src/BWidgets/VScale.cpp \
82	src/BWidgets/HSliderValue.cpp \
83	src/BWidgets/HSlider.cpp \
84	src/BWidgets/HScale.cpp \
85	src/BWidgets/RangeWidget.cpp \
86	src/BWidgets/ValueWidget.cpp \
87	src/BWidgets/Knob.cpp \
88	src/BWidgets/Label.cpp \
89	src/BWidgets/Window.cpp \
90	src/BWidgets/Widget.cpp \
91	src/BWidgets/BStyles.cpp \
92	src/BWidgets/BColors.cpp \
93	src/BWidgets/BItems.cpp \
94	src/BUtilities/to_string.cpp \
95	src/BUtilities/stof.cpp \
96	src/BUtilities/vsystem.cpp
97
98GUI_C_INCL = \
99	src/screen.c \
100	src/BWidgets/cairoplus.c \
101	src/BWidgets/pugl/implementation.c \
102	src/BWidgets/pugl/x11_stub.c \
103	src/BWidgets/pugl/x11_cairo.c \
104	src/BWidgets/pugl/x11.c
105
106ifeq ($(shell $(PKG_CONFIG) --exists 'lv2 >= 1.12.4' || echo no), no)
107  $(error lv2 >= 1.12.4 not found. Please install lv2 >= 1.12.4 first.)
108endif
109ifeq ($(shell $(PKG_CONFIG) --exists 'x11 >= 1.6.0' || echo no), no)
110  $(error x11 >= 1.6.0 not found. Please install x11 >= 1.6.0 first.)
111endif
112ifeq ($(shell $(PKG_CONFIG) --exists 'cairo >= 1.12.0' || echo no), no)
113  $(error cairo >= 1.12.0 not found. Please install cairo >= 1.12.0 first.)
114endif
115
116$(BUNDLE): clean $(DSP_OBJ) $(GUI_OBJ)
117	@cp $(FILES) $(BUNDLE)
118
119all: $(BUNDLE)
120
121$(DSP_OBJ): $(DSP_SRC)
122	@echo -n Build $(BUNDLE) DSP...
123	@mkdir -p $(BUNDLE)
124	@$(CXX) $(CPPFLAGS) $(OPTIMIZATIONS) $(CXXFLAGS) $(LDFLAGS) $(DSPCFLAGS) -Wl,--start-group $(DSPLIBS) $< $(DSP_INCL) -Wl,--end-group -o $(BUNDLE)/$@
125	@$(STRIP) $(STRIPFLAGS) $(BUNDLE)/$@
126	@echo \ done.
127
128$(GUI_OBJ): $(GUI_SRC)
129	@echo -n Build $(BUNDLE) GUI...
130	@mkdir -p $(BUNDLE)
131	@mkdir -p $(BUNDLE)/tmp
132	@cd $(BUNDLE)/tmp; $(CC) $(CPPFLAGS) $(GUIPPFLAGS) $(CFLAGS) $(GUICFLAGS) $(addprefix ../../, $(GUI_C_INCL)) -c
133	@cd $(BUNDLE)/tmp; $(CXX) $(CPPFLAGS) $(GUIPPFLAGS) $(CXXFLAGS) $(GUICFLAGS) $(addprefix ../../, $< $(GUI_CXX_INCL)) -c
134	@$(CXX) $(CPPFLAGS) $(GUIPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $(GUICFLAGS) -Wl,--start-group $(GUILIBS) $(BUNDLE)/tmp/*.o -Wl,--end-group -o $(BUNDLE)/$@
135	@$(STRIP) $(STRIPFLAGS) $(BUNDLE)/$@
136	@rm -rf $(BUNDLE)/tmp
137	@echo \ done.
138
139install:
140	@echo -n Install $(BUNDLE) to $(DESTDIR)$(LV2DIR)...
141	@$(INSTALL) -d $(DESTDIR)$(LV2DIR)/$(BUNDLE)
142	@$(INSTALL_PROGRAM) -m755 $(B_OBJECTS) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
143	@$(INSTALL_DATA) $(B_FILES) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
144	@cp -R $(BUNDLE) $(DESTDIR)$(LV2DIR)
145	@echo \ done.
146
147uninstall:
148	@echo -n Uninstall $(BUNDLE)...
149	@rm -f $(addprefix $(DESTDIR)$(LV2DIR)/$(BUNDLE)/, $(FILES))
150	@rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(GUI_OBJ)
151	@rm -f $(DESTDIR)$(LV2DIR)/$(BUNDLE)/$(DSP_OBJ)
152	-@rmdir $(DESTDIR)$(LV2DIR)/$(BUNDLE)
153	@echo \ done.
154
155clean:
156	@rm -rf $(BUNDLE)
157
158.PHONY: all install uninstall clean
159
160.NOTPARALLEL:
161