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  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
21CPPFLAGS += -DPIC
22CFLAGS += -std=c99 -fvisibility=hidden -fPIC
23CXXFLAGS += -std=c++11 -fvisibility=hidden -fPIC
24LDFLAGS += -shared -Wl,-z,relro,-z,now
25STRIPFLAGS += -s --strip-program=$(STRIP)
26
27GUIPPFLAGS += -DPUGL_HAVE_CAIRO
28
29LANGUAGE ?= EN
30
31ifdef UWU
32  GUIPPFLAGS += -DUWU
33  GUIBGFILE = surface2.png
34  LANGUAGE = UWU
35  SKIN = UWU
36else
37  GUIBGFILE = surface.png
38endif
39
40ifeq ($(shell test -e src/Locale_$(LANGUAGE).hpp && echo -n yes),yes)
41  GUIPPFLAGS += -DLOCALEFILE=\"Locale_$(LANGUAGE).hpp\"
42endif
43
44ifeq ($(shell test -e src/Skin_$(SKIN).hpp && echo -n yes),yes)
45  GUIPPFLAGS += -DSKINFILE=\"Skin_$(SKIN).hpp\"
46endif
47
48ifeq ($(shell test -e surface_$(SKIN).png && echo -n yes),yes)
49  GUIBGFILE = surface_$(SKIN).png
50else
51  GUIBGFILE = surface.png
52endif
53
54DSPCFLAGS += `$(PKG_CONFIG) --cflags $(LV2_LIBS)`
55GUICFLAGS += `$(PKG_CONFIG) --cflags $(GUI_LIBS)`
56DSPLFLAGS += `$(PKG_CONFIG) --libs $(LV2_LIBS)`
57GUILFLAGS += `$(PKG_CONFIG) --libs $(GUI_LIBS)`
58
59BUNDLE = BSlizr.lv2
60DSP = BSlizr
61DSP_SRC = ./src/BSlizr.cpp
62GUI = BSlizr_GUI
63GUI_SRC = ./src/BSlizr_GUI.cpp
64OBJ_EXT = .so
65DSP_OBJ = $(DSP)$(OBJ_EXT)
66GUI_OBJ = $(GUI)$(OBJ_EXT)
67B_OBJECTS = $(addprefix $(BUNDLE)/, $(DSP_OBJ) $(GUI_OBJ))
68FILES = manifest.ttl BSlizr.ttl LICENSE
69B_FILES = $(addprefix $(BUNDLE)/, $(FILES))
70
71DSP_INCL = \
72	src/Message.cpp \
73	src/BUtilities/stof.cpp
74
75GUI_CXX_INCL = \
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/HSwitch.cpp \
83	src/BWidgets/HSliderValue.cpp \
84	src/BWidgets/HSlider.cpp \
85	src/BWidgets/HScale.cpp \
86	src/BWidgets/RangeWidget.cpp \
87	src/BWidgets/ValueWidget.cpp \
88	src/BWidgets/Knob.cpp \
89	src/BWidgets/Label.cpp \
90	src/BWidgets/Window.cpp \
91	src/BWidgets/Widget.cpp \
92	src/BWidgets/BStyles.cpp \
93	src/BWidgets/BColors.cpp \
94	src/BUtilities/to_string.cpp \
95	src/BUtilities/stof.cpp
96
97GUI_C_INCL = \
98	src/screen.c \
99	src/BWidgets/cairoplus.c \
100	src/BWidgets/pugl/implementation.c \
101	src/BWidgets/pugl/x11_stub.c \
102	src/BWidgets/pugl/x11_cairo.c \
103	src/BWidgets/pugl/x11.c
104
105ifeq ($(shell $(PKG_CONFIG) --exists 'lv2 >= 1.12.4' || echo no), no)
106  $(error lv2 >= 1.12.4 not found. Please install lv2 >= 1.12.4 first.)
107endif
108ifeq ($(shell $(PKG_CONFIG) --exists 'x11 >= 1.6.0' || echo no), no)
109  $(error x11 >= 1.6.0 not found. Please install x11 >= 1.6.0 first.)
110endif
111ifeq ($(shell $(PKG_CONFIG) --exists 'cairo >= 1.12.0' || echo no), no)
112  $(error cairo >= 1.12.0 not found. Please install cairo >= 1.12.0 first.)
113endif
114
115$(BUNDLE): clean $(DSP_OBJ) $(GUI_OBJ)
116	@cp $(FILES) $(BUNDLE)
117	@cp $(GUIBGFILE) $(BUNDLE)/surface.png
118
119all: $(BUNDLE)
120
121$(DSP_OBJ): $(DSP_SRC)
122	@echo -n Build $(BUNDLE) DSP...
123	@mkdir -p $(BUNDLE)
124	@$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $(DSPCFLAGS) -Wl,--start-group $(DSPLFLAGS) $< $(DSP_INCL) -Wl,--end-group -o $(BUNDLE)/$@
125	@echo \ done.
126
127$(GUI_OBJ): $(GUI_SRC)
128	@echo -n Build $(BUNDLE) GUI...
129	@mkdir -p $(BUNDLE)
130	@mkdir -p $(BUNDLE)/tmp
131	@cd $(BUNDLE)/tmp; $(CC) $(CPPFLAGS) $(GUIPPFLAGS) $(CFLAGS) $(GUICFLAGS) $(addprefix ../../, $(GUI_C_INCL)) -c
132	@cd $(BUNDLE)/tmp; $(CXX) $(CPPFLAGS) $(GUIPPFLAGS) $(CXXFLAGS) $(GUICFLAGS) $(addprefix ../../, $< $(GUI_CXX_INCL)) -c
133	@$(CXX) $(CPPFLAGS) $(GUIPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $(GUICFLAGS) -Wl,--start-group $(GUILFLAGS) $(BUNDLE)/tmp/*.o -Wl,--end-group -o $(BUNDLE)/$@
134	@rm -rf $(BUNDLE)/tmp
135	@echo \ done.
136
137install:
138	@echo -n Install $(BUNDLE) to $(DESTDIR)$(LV2DIR)...
139	@$(INSTALL) -d $(DESTDIR)$(LV2DIR)/$(BUNDLE)
140	@$(INSTALL_PROGRAM) -m755 $(B_OBJECTS) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
141	@$(INSTALL_DATA) $(B_FILES) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
142	@cp -R $(BUNDLE) $(DESTDIR)$(LV2DIR)
143	@echo \ done.
144
145install-strip:
146	@echo -n "Install (stripped)" $(BUNDLE) to $(DESTDIR)$(LV2DIR)...
147	@$(INSTALL) -d $(DESTDIR)$(LV2DIR)/$(BUNDLE)
148	@$(INSTALL_PROGRAM) -m755 $(STRIPFLAGS) $(B_OBJECTS) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
149	@$(INSTALL_DATA) $(B_FILES) $(DESTDIR)$(LV2DIR)/$(BUNDLE)
150	@cp -R $(BUNDLE) $(DESTDIR)$(LV2DIR)
151	@echo \ done.
152
153uninstall:
154	@echo -n Uninstall $(BUNDLE)...
155	@rm -f $(addprefix $(DESTDIR)$(LV2DIR)/$(BUNDLE)/, $(FILES))
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 install-strip uninstall clean
165
166.NOTPARALLEL:
167