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