1 OS ?= $(shell uname -s)
9 # Solaris/Illumos flavors
10 # ginstall from coreutils
18 ifeq "x$(COVERAGE)" "x"
23 CFLAGS += -O1 -fno-omit-frame-pointer
24 CXXFLAGS += -O1 -fno-omit-frame-pointer
25 LDFLAGS += -O1 -fno-omit-frame-pointer
27 LDFLAGS += -Wl,-undefined,error
28 CAT ?= $(if $(filter $(OS),Windows_NT),type,cat)
30 ifneq (,$(findstring /cygdrive/,$(PATH)))
33 ifneq (,$(findstring Windows_NT,$(OS)))
36 ifneq (,$(findstring mingw32,$(MAKE)))
39 ifneq (,$(findstring MINGW32,$(shell uname -s)))
42 UNAME := $(shell uname -s)
48 ifeq ($(SASS_LIBSASS_PATH),)
49 SASS_LIBSASS_PATH = $(abspath $(CURDIR))
52 ifeq ($(LIBSASS_VERSION),)
53 ifneq ($(wildcard ./.git/ ),)
54 LIBSASS_VERSION ?= $(shell git describe --abbrev=4 --dirty --always --tags)
58 ifeq ($(LIBSASS_VERSION),)
59 ifneq ($(wildcard VERSION),)
60 LIBSASS_VERSION ?= $(shell $(CAT) VERSION)
64 ifneq ($(LIBSASS_VERSION),)
65 CFLAGS += -DLIBSASS_VERSION="\"$(LIBSASS_VERSION)\""
66 CXXFLAGS += -DLIBSASS_VERSION="\"$(LIBSASS_VERSION)\""
69 # enable mandatory flag
70 ifeq (Windows,$(UNAME))
71 ifneq ($(BUILD),shared)
76 CXXFLAGS += -std=gnu++0x
77 LDFLAGS += -std=gnu++0x
82 CXXFLAGS += -std=c++0x
86 ifneq ($(SASS_LIBSASS_PATH),)
87 CFLAGS += -I $(SASS_LIBSASS_PATH)/include
88 CXXFLAGS += -I $(SASS_LIBSASS_PATH)/include
90 # this is needed for mingw
92 CXXFLAGS += -I include
95 ifneq ($(EXTRA_CFLAGS),)
96 CFLAGS += $(EXTRA_CFLAGS)
98 ifneq ($(EXTRA_CXXFLAGS),)
99 CXXFLAGS += $(EXTRA_CXXFLAGS)
101 ifneq ($(EXTRA_LDFLAGS),)
102 LDFLAGS += $(EXTRA_LDFLAGS)
107 ifneq ($(BUILD),shared)
111 # link statically into lib
112 # makes it a lot more portable
113 # increases size by about 50KB
114 ifeq ($(STATIC_ALL),1)
117 ifeq ($(STATIC_LIBGCC),1)
118 LDFLAGS += -static-libgcc
120 ifeq ($(STATIC_LIBSTDCPP),1)
121 LDFLAGS += -static-libstdc++
124 ifeq ($(UNAME),Darwin)
125 CFLAGS += -stdlib=libc++
126 CXXFLAGS += -stdlib=libc++
127 LDFLAGS += -stdlib=libc++
130 ifneq (Windows,$(UNAME))
131 ifneq (FreeBSD,$(UNAME))
132 ifneq (OpenBSD,$(UNAME))
139 ifneq ($(BUILD),shared)
143 BUILD := debug-$(BUILD)
146 ifeq (,$(TRAVIS_BUILD_DIR))
153 PREFIX ?= $(TRAVIS_BUILD_DIR)
157 SASS_SASSC_PATH ?= sassc
158 SASS_SPEC_PATH ?= sass-spec
159 SASS_SPEC_SPEC_DIR ?= spec
160 SASSC_BIN = $(SASS_SASSC_PATH)/bin/sassc
163 LIB_STATIC = $(SASS_LIBSASS_PATH)/lib/libsass.a
164 LIB_SHARED = $(SASS_LIBSASS_PATH)/lib/libsass.so
166 ifeq (Windows,$(UNAME))
167 ifeq (shared,$(BUILD))
168 CFLAGS += -D ADD_EXPORTS
169 CXXFLAGS += -D ADD_EXPORTS
170 LIB_SHARED = $(SASS_LIBSASS_PATH)/lib/libsass.dll
173 ifneq (Cygwin,$(UNAME))
180 ifeq (Windows,$(UNAME))
181 SASSC_BIN = $(SASS_SASSC_PATH)/bin/sassc.exe
184 include Makefile.conf
187 STATICLIB = lib/libsass.a
188 SHAREDLIB = lib/libsass.so
189 ifeq (Windows,$(UNAME))
190 RESOURCES += res/resource.rc
191 SHAREDLIB = lib/libsass.dll
192 ifeq (shared,$(BUILD))
193 CFLAGS += -D ADD_EXPORTS
194 CXXFLAGS += -D ADD_EXPORTS
197 ifneq (Cygwin,$(UNAME))
204 OBJECTS = $(addprefix src/,$(SOURCES:.cpp=.o))
205 COBJECTS = $(addprefix src/,$(CSOURCES:.c=.o))
206 RCOBJECTS = $(RESOURCES:.rc=.o)
211 CLEANUPS += $(RCOBJECTS)
212 CLEANUPS += $(COBJECTS)
213 CLEANUPS += $(OBJECTS)
214 CLEANUPS += $(LIBSASS_LIB)
220 debug-static: LDFLAGS := -g $(filter-out -O2,$(LDFLAGS))
221 debug-static: CFLAGS := -g -DDEBUG -DDEBUG_LVL="$(DEBUG_LVL)" $(filter-out -O2,$(CFLAGS))
222 debug-static: CXXFLAGS := -g -DDEBUG -DDEBUG_LVL="$(DEBUG_LVL)" $(filter-out -O2,$(CXXFLAGS))
225 debug-shared: LDFLAGS := -g $(filter-out -O2,$(LDFLAGS))
226 debug-shared: CFLAGS := -g -DDEBUG -DDEBUG_LVL="$(DEBUG_LVL)" $(filter-out -O2,$(CFLAGS))
227 debug-shared: CXXFLAGS := -g -DDEBUG -DDEBUG_LVL="$(DEBUG_LVL)" $(filter-out -O2,$(CXXFLAGS))
233 lib/libsass.a: lib $(COBJECTS) $(OBJECTS)
234 $(AR) rcvs $@ $(COBJECTS) $(OBJECTS)
236 lib/libsass.so: lib $(COBJECTS) $(OBJECTS)
237 $(CXX) -shared $(LDFLAGS) -o $@ $(COBJECTS) $(OBJECTS) $(LDLIBS)
239 lib/libsass.dll: lib $(COBJECTS) $(OBJECTS) $(RCOBJECTS)
240 $(CXX) -shared $(LDFLAGS) -o $@ $(COBJECTS) $(OBJECTS) $(RCOBJECTS) $(LDLIBS) -s -Wl,--subsystem,windows,--out-implib,lib/libsass.a
243 $(CC) $(CFLAGS) -c -o $@ $<
246 $(WINDRES) -i $< -o $@
249 $(CXX) $(CXXFLAGS) -c -o $@ $<
252 $(CXX) $(CXXFLAGS) -o $@ $+ $(LDFLAGS) $(LDLIBS)
254 install: install-$(BUILD)
260 $(MKDIR) $(DESTDIR)$(PREFIX)
262 $(DESTDIR)$(PREFIX)/lib: $(DESTDIR)$(PREFIX)
263 $(MKDIR) $(DESTDIR)$(PREFIX)/lib
265 $(DESTDIR)$(PREFIX)/include: $(DESTDIR)$(PREFIX)
266 $(MKDIR) $(DESTDIR)$(PREFIX)/include
268 $(DESTDIR)$(PREFIX)/include/sass: $(DESTDIR)$(PREFIX)/include
269 $(MKDIR) $(DESTDIR)$(PREFIX)/include/sass
271 $(DESTDIR)$(PREFIX)/include/%.h: include/%.h \
272 $(DESTDIR)$(PREFIX)/include \
273 $(DESTDIR)$(PREFIX)/include/sass
274 $(INSTALL) -v -m0644 "$<" "$@"
276 install-headers: $(DESTDIR)$(PREFIX)/include/sass.h \
277 $(DESTDIR)$(PREFIX)/include/sass2scss.h \
278 $(DESTDIR)$(PREFIX)/include/sass/base.h \
279 $(DESTDIR)$(PREFIX)/include/sass/version.h \
280 $(DESTDIR)$(PREFIX)/include/sass/values.h \
281 $(DESTDIR)$(PREFIX)/include/sass/context.h \
282 $(DESTDIR)$(PREFIX)/include/sass/functions.h
284 $(DESTDIR)$(PREFIX)/lib/%.a: lib/%.a \
285 $(DESTDIR)$(PREFIX)/lib
286 @$(INSTALL) -v -m0755 "$<" "$@"
288 $(DESTDIR)$(PREFIX)/lib/%.so: lib/%.so \
289 $(DESTDIR)$(PREFIX)/lib
290 @$(INSTALL) -v -m0755 "$<" "$@"
292 $(DESTDIR)$(PREFIX)/lib/%.dll: lib/%.dll \
293 $(DESTDIR)$(PREFIX)/lib
294 @$(INSTALL) -v -m0755 "$<" "$@"
296 install-static: $(DESTDIR)$(PREFIX)/lib/libsass.a
298 install-shared: $(DESTDIR)$(PREFIX)/lib/libsass.so \
301 $(SASSC_BIN): $(BUILD)
302 $(MAKE) -C $(SASS_SASSC_PATH)
307 version: $(SASSC_BIN)
312 $(RUBY_BIN) $(SASS_SPEC_PATH)/sass-spec.rb -V 3.5 -c $(SASSC_BIN) --impl libsass $(LOG_FLAGS) $(SASS_SPEC_PATH)/$(SASS_SPEC_SPEC_DIR)
314 test_build: $(SASSC_BIN)
315 $(RUBY_BIN) $(SASS_SPEC_PATH)/sass-spec.rb -V 3.5 -c $(SASSC_BIN) --impl libsass $(LOG_FLAGS) $(SASS_SPEC_PATH)/$(SASS_SPEC_SPEC_DIR)
317 test_full: $(SASSC_BIN)
318 $(RUBY_BIN) $(SASS_SPEC_PATH)/sass-spec.rb -V 3.5 -c $(SASSC_BIN) --impl libsass --run-todo $(LOG_FLAGS) $(SASS_SPEC_PATH)/$(SASS_SPEC_SPEC_DIR)
320 test_probe: $(SASSC_BIN)
321 $(RUBY_BIN) $(SASS_SPEC_PATH)/sass-spec.rb -V 3.5 -c $(SASSC_BIN) --impl libsass --probe-todo $(LOG_FLAGS) $(SASS_SPEC_PATH)/$(SASS_SPEC_SPEC_DIR)
324 -$(RM) lib/*.a lib/*.so lib/*.dll lib/*.la
330 $(MAKE) -C $(SASS_SASSC_PATH) clean
332 lib-file: lib-file-$(BUILD)
333 lib-opts: lib-opts-$(BUILD)
340 @echo -L"$(SASS_LIBSASS_PATH)/lib"
342 @echo -L"$(SASS_LIBSASS_PATH)/lib -lsass"
344 .PHONY: all static shared sassc \
345 version install-headers \
346 clean clean-all clean-objects \
347 debug debug-static debug-shared \
348 install install-static install-shared \
349 lib-opts lib-opts-shared lib-opts-static \
350 lib-file lib-file-shared lib-file-static