Blame Makefile

Packit bfcc33
OS       ?= $(shell uname -s)
Packit bfcc33
CC       ?= gcc
Packit bfcc33
CXX      ?= g++
Packit bfcc33
RM       ?= rm -f
Packit bfcc33
CP       ?= cp -a
Packit bfcc33
MKDIR    ?= mkdir
Packit bfcc33
RMDIR    ?= rmdir
Packit bfcc33
WINDRES  ?= windres
Packit bfcc33
# Solaris/Illumos flavors
Packit bfcc33
# ginstall from coreutils
Packit bfcc33
ifeq ($(OS),SunOS)
Packit bfcc33
INSTALL  ?= ginstall
Packit bfcc33
endif
Packit bfcc33
INSTALL  ?= install
Packit bfcc33
CFLAGS   ?= -Wall
Packit bfcc33
CXXFLAGS ?= -Wall
Packit bfcc33
LDFLAGS  ?= -Wall
Packit bfcc33
ifeq "x$(COVERAGE)" "x"
Packit bfcc33
  CFLAGS   += -O2
Packit bfcc33
  CXXFLAGS += -O2
Packit bfcc33
  LDFLAGS  += -O2
Packit bfcc33
else
Packit bfcc33
  CFLAGS   += -O1 -fno-omit-frame-pointer
Packit bfcc33
  CXXFLAGS += -O1 -fno-omit-frame-pointer
Packit bfcc33
  LDFLAGS  += -O1 -fno-omit-frame-pointer
Packit bfcc33
endif
Packit bfcc33
LDFLAGS  += -Wl,-undefined,error
Packit bfcc33
CAT      ?= $(if $(filter $(OS),Windows_NT),type,cat)
Packit bfcc33
Packit bfcc33
ifneq (,$(findstring /cygdrive/,$(PATH)))
Packit bfcc33
	UNAME := Cygwin
Packit bfcc33
else
Packit bfcc33
	ifneq (,$(findstring Windows_NT,$(OS)))
Packit bfcc33
		UNAME := Windows
Packit bfcc33
	else
Packit bfcc33
		ifneq (,$(findstring mingw32,$(MAKE)))
Packit bfcc33
			UNAME := Windows
Packit bfcc33
		else
Packit bfcc33
			ifneq (,$(findstring MINGW32,$(shell uname -s)))
Packit bfcc33
				UNAME = Windows
Packit bfcc33
			else
Packit bfcc33
				UNAME := $(shell uname -s)
Packit bfcc33
			endif
Packit bfcc33
		endif
Packit bfcc33
	endif
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
ifeq ($(SASS_LIBSASS_PATH),)
Packit bfcc33
	SASS_LIBSASS_PATH = $(abspath $(CURDIR))
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
ifeq ($(LIBSASS_VERSION),)
Packit bfcc33
	ifneq ($(wildcard ./.git/ ),)
Packit bfcc33
		LIBSASS_VERSION ?= $(shell git describe --abbrev=4 --dirty --always --tags)
Packit bfcc33
	endif
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
ifeq ($(LIBSASS_VERSION),)
Packit bfcc33
	ifneq ($(wildcard VERSION),)
Packit bfcc33
		LIBSASS_VERSION ?= $(shell $(CAT) VERSION)
Packit bfcc33
	endif
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
ifneq ($(LIBSASS_VERSION),)
Packit bfcc33
	CFLAGS   += -DLIBSASS_VERSION="\"$(LIBSASS_VERSION)\""
Packit bfcc33
	CXXFLAGS += -DLIBSASS_VERSION="\"$(LIBSASS_VERSION)\""
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
# enable mandatory flag
Packit bfcc33
ifeq (Windows,$(UNAME))
Packit bfcc33
	ifneq ($(BUILD),shared)
Packit bfcc33
		STATIC_ALL     ?= 1
Packit bfcc33
	endif
Packit bfcc33
	STATIC_LIBGCC    ?= 1
Packit bfcc33
	STATIC_LIBSTDCPP ?= 1
Packit bfcc33
	CXXFLAGS += -std=gnu++0x
Packit bfcc33
	LDFLAGS  += -std=gnu++0x
Packit bfcc33
else
Packit bfcc33
	STATIC_ALL       ?= 0
Packit bfcc33
	STATIC_LIBGCC    ?= 0
Packit bfcc33
	STATIC_LIBSTDCPP ?= 0
Packit bfcc33
	CXXFLAGS += -std=c++0x
Packit bfcc33
	LDFLAGS  += -std=c++0x
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
ifneq ($(SASS_LIBSASS_PATH),)
Packit bfcc33
	CFLAGS   += -I $(SASS_LIBSASS_PATH)/include
Packit bfcc33
	CXXFLAGS += -I $(SASS_LIBSASS_PATH)/include
Packit bfcc33
else
Packit bfcc33
	# this is needed for mingw
Packit bfcc33
	CFLAGS   += -I include
Packit bfcc33
	CXXFLAGS += -I include
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
ifneq ($(EXTRA_CFLAGS),)
Packit bfcc33
	CFLAGS   += $(EXTRA_CFLAGS)
Packit bfcc33
endif
Packit bfcc33
ifneq ($(EXTRA_CXXFLAGS),)
Packit bfcc33
	CXXFLAGS += $(EXTRA_CXXFLAGS)
Packit bfcc33
endif
Packit bfcc33
ifneq ($(EXTRA_LDFLAGS),)
Packit bfcc33
	LDFLAGS  += $(EXTRA_LDFLAGS)
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
LDLIBS = -lm
Packit bfcc33
Packit bfcc33
ifneq ($(BUILD),shared)
Packit bfcc33
	LDLIBS += -lstdc++
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
# link statically into lib
Packit bfcc33
# makes it a lot more portable
Packit bfcc33
# increases size by about 50KB
Packit bfcc33
ifeq ($(STATIC_ALL),1)
Packit bfcc33
	LDFLAGS += -static
Packit bfcc33
endif
Packit bfcc33
ifeq ($(STATIC_LIBGCC),1)
Packit bfcc33
	LDFLAGS += -static-libgcc
Packit bfcc33
endif
Packit bfcc33
ifeq ($(STATIC_LIBSTDCPP),1)
Packit bfcc33
	LDFLAGS += -static-libstdc++
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
ifeq ($(UNAME),Darwin)
Packit bfcc33
	CFLAGS += -stdlib=libc++
Packit bfcc33
	CXXFLAGS += -stdlib=libc++
Packit bfcc33
	LDFLAGS += -stdlib=libc++
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
ifneq (Windows,$(UNAME))
Packit bfcc33
	ifneq (FreeBSD,$(UNAME))
Packit bfcc33
		ifneq (OpenBSD,$(UNAME))
Packit bfcc33
			LDFLAGS += -ldl
Packit bfcc33
			LDLIBS += -ldl
Packit bfcc33
		endif
Packit bfcc33
	endif
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
ifneq ($(BUILD),shared)
Packit bfcc33
	BUILD := static
Packit bfcc33
endif
Packit bfcc33
ifeq ($(DEBUG),1)
Packit bfcc33
	BUILD := debug-$(BUILD)
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
ifeq (,$(TRAVIS_BUILD_DIR))
Packit bfcc33
	ifeq ($(OS),SunOS)
Packit bfcc33
		PREFIX ?= /opt/local
Packit bfcc33
	else
Packit bfcc33
		PREFIX ?= /usr/local
Packit bfcc33
	endif
Packit bfcc33
else
Packit bfcc33
	PREFIX ?= $(TRAVIS_BUILD_DIR)
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
Packit bfcc33
SASS_SASSC_PATH ?= sassc
Packit bfcc33
SASS_SPEC_PATH ?= sass-spec
Packit bfcc33
SASS_SPEC_SPEC_DIR ?= spec
Packit bfcc33
SASSC_BIN = $(SASS_SASSC_PATH)/bin/sassc
Packit bfcc33
RUBY_BIN = ruby
Packit bfcc33
Packit bfcc33
LIB_STATIC = $(SASS_LIBSASS_PATH)/lib/libsass.a
Packit bfcc33
LIB_SHARED = $(SASS_LIBSASS_PATH)/lib/libsass.so
Packit bfcc33
Packit bfcc33
ifeq (Windows,$(UNAME))
Packit bfcc33
	ifeq (shared,$(BUILD))
Packit bfcc33
		CFLAGS     += -D ADD_EXPORTS
Packit bfcc33
		CXXFLAGS   += -D ADD_EXPORTS
Packit bfcc33
		LIB_SHARED  = $(SASS_LIBSASS_PATH)/lib/libsass.dll
Packit bfcc33
	endif
Packit bfcc33
else
Packit bfcc33
	ifneq (Cygwin,$(UNAME))
Packit bfcc33
		CFLAGS   += -fPIC
Packit bfcc33
		CXXFLAGS += -fPIC
Packit bfcc33
		LDFLAGS  += -fPIC
Packit bfcc33
	endif
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
ifeq (Windows,$(UNAME))
Packit bfcc33
	SASSC_BIN = $(SASS_SASSC_PATH)/bin/sassc.exe
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
include Makefile.conf
Packit bfcc33
Packit bfcc33
RESOURCES =
Packit bfcc33
STATICLIB = lib/libsass.a
Packit bfcc33
SHAREDLIB = lib/libsass.so
Packit bfcc33
ifeq (Windows,$(UNAME))
Packit bfcc33
	RESOURCES += res/resource.rc
Packit bfcc33
	SHAREDLIB  = lib/libsass.dll
Packit bfcc33
	ifeq (shared,$(BUILD))
Packit bfcc33
		CFLAGS    += -D ADD_EXPORTS
Packit bfcc33
		CXXFLAGS  += -D ADD_EXPORTS
Packit bfcc33
	endif
Packit bfcc33
else
Packit bfcc33
	ifneq (Cygwin,$(UNAME))
Packit bfcc33
		CFLAGS   += -fPIC
Packit bfcc33
		CXXFLAGS += -fPIC
Packit bfcc33
		LDFLAGS  += -fPIC
Packit bfcc33
	endif
Packit bfcc33
endif
Packit bfcc33
Packit bfcc33
OBJECTS = $(addprefix src/,$(SOURCES:.cpp=.o))
Packit bfcc33
COBJECTS = $(addprefix src/,$(CSOURCES:.c=.o))
Packit bfcc33
RCOBJECTS = $(RESOURCES:.rc=.o)
Packit bfcc33
Packit bfcc33
DEBUG_LVL ?= NONE
Packit bfcc33
Packit bfcc33
CLEANUPS ?=
Packit bfcc33
CLEANUPS += $(RCOBJECTS)
Packit bfcc33
CLEANUPS += $(COBJECTS)
Packit bfcc33
CLEANUPS += $(OBJECTS)
Packit bfcc33
CLEANUPS += $(LIBSASS_LIB)
Packit bfcc33
Packit bfcc33
all: $(BUILD)
Packit bfcc33
Packit bfcc33
debug: $(BUILD)
Packit bfcc33
Packit bfcc33
debug-static: LDFLAGS := -g $(filter-out -O2,$(LDFLAGS))
Packit bfcc33
debug-static: CFLAGS := -g -DDEBUG -DDEBUG_LVL="$(DEBUG_LVL)" $(filter-out -O2,$(CFLAGS))
Packit bfcc33
debug-static: CXXFLAGS := -g -DDEBUG -DDEBUG_LVL="$(DEBUG_LVL)" $(filter-out -O2,$(CXXFLAGS))
Packit bfcc33
debug-static: static
Packit bfcc33
Packit bfcc33
debug-shared: LDFLAGS := -g $(filter-out -O2,$(LDFLAGS))
Packit bfcc33
debug-shared: CFLAGS := -g -DDEBUG -DDEBUG_LVL="$(DEBUG_LVL)" $(filter-out -O2,$(CFLAGS))
Packit bfcc33
debug-shared: CXXFLAGS := -g -DDEBUG -DDEBUG_LVL="$(DEBUG_LVL)" $(filter-out -O2,$(CXXFLAGS))
Packit bfcc33
debug-shared: shared
Packit bfcc33
Packit bfcc33
lib:
Packit bfcc33
	$(MKDIR) lib
Packit bfcc33
Packit bfcc33
lib/libsass.a: lib $(COBJECTS) $(OBJECTS)
Packit bfcc33
	$(AR) rcvs $@ $(COBJECTS) $(OBJECTS)
Packit bfcc33
Packit bfcc33
lib/libsass.so: lib $(COBJECTS) $(OBJECTS)
Packit bfcc33
	$(CXX) -shared $(LDFLAGS) -o $@ $(COBJECTS) $(OBJECTS) $(LDLIBS)
Packit bfcc33
Packit bfcc33
lib/libsass.dll: lib $(COBJECTS) $(OBJECTS) $(RCOBJECTS)
Packit bfcc33
	$(CXX) -shared $(LDFLAGS) -o $@ $(COBJECTS) $(OBJECTS) $(RCOBJECTS) $(LDLIBS) -s -Wl,--subsystem,windows,--out-implib,lib/libsass.a
Packit bfcc33
Packit bfcc33
%.o: %.c
Packit bfcc33
	$(CC) $(CFLAGS) -c -o $@ $<
Packit bfcc33
Packit bfcc33
%.o: %.rc
Packit bfcc33
	$(WINDRES) -i $< -o $@
Packit bfcc33
Packit bfcc33
%.o: %.cpp
Packit bfcc33
	$(CXX) $(CXXFLAGS) -c -o $@ $<
Packit bfcc33
Packit bfcc33
%: %.o static
Packit bfcc33
	$(CXX) $(CXXFLAGS) -o $@ $+ $(LDFLAGS) $(LDLIBS)
Packit bfcc33
Packit bfcc33
install: install-$(BUILD)
Packit bfcc33
Packit bfcc33
static: $(STATICLIB)
Packit bfcc33
shared: $(SHAREDLIB)
Packit bfcc33
Packit bfcc33
$(DESTDIR)$(PREFIX):
Packit bfcc33
	$(MKDIR) $(DESTDIR)$(PREFIX)
Packit bfcc33
Packit bfcc33
$(DESTDIR)$(PREFIX)/lib: $(DESTDIR)$(PREFIX)
Packit bfcc33
	$(MKDIR) $(DESTDIR)$(PREFIX)/lib
Packit bfcc33
Packit bfcc33
$(DESTDIR)$(PREFIX)/include: $(DESTDIR)$(PREFIX)
Packit bfcc33
	$(MKDIR) $(DESTDIR)$(PREFIX)/include
Packit bfcc33
Packit bfcc33
$(DESTDIR)$(PREFIX)/include/sass: $(DESTDIR)$(PREFIX)/include
Packit bfcc33
	$(MKDIR) $(DESTDIR)$(PREFIX)/include/sass
Packit bfcc33
Packit bfcc33
$(DESTDIR)$(PREFIX)/include/%.h: include/%.h \
Packit bfcc33
                                 $(DESTDIR)$(PREFIX)/include \
Packit bfcc33
                                 $(DESTDIR)$(PREFIX)/include/sass
Packit bfcc33
	$(INSTALL) -v -m0644 "$<" "$@"
Packit bfcc33
Packit bfcc33
install-headers: $(DESTDIR)$(PREFIX)/include/sass.h \
Packit bfcc33
                 $(DESTDIR)$(PREFIX)/include/sass2scss.h \
Packit bfcc33
                 $(DESTDIR)$(PREFIX)/include/sass/base.h \
Packit bfcc33
                 $(DESTDIR)$(PREFIX)/include/sass/version.h \
Packit bfcc33
                 $(DESTDIR)$(PREFIX)/include/sass/values.h \
Packit bfcc33
                 $(DESTDIR)$(PREFIX)/include/sass/context.h \
Packit bfcc33
                 $(DESTDIR)$(PREFIX)/include/sass/functions.h
Packit bfcc33
Packit bfcc33
$(DESTDIR)$(PREFIX)/lib/%.a: lib/%.a \
Packit bfcc33
                             $(DESTDIR)$(PREFIX)/lib
Packit bfcc33
	@$(INSTALL) -v -m0755 "$<" "$@"
Packit bfcc33
Packit bfcc33
$(DESTDIR)$(PREFIX)/lib/%.so: lib/%.so \
Packit bfcc33
                             $(DESTDIR)$(PREFIX)/lib
Packit bfcc33
	@$(INSTALL) -v -m0755 "$<" "$@"
Packit bfcc33
Packit bfcc33
$(DESTDIR)$(PREFIX)/lib/%.dll: lib/%.dll \
Packit bfcc33
                               $(DESTDIR)$(PREFIX)/lib
Packit bfcc33
	@$(INSTALL) -v -m0755 "$<" "$@"
Packit bfcc33
Packit bfcc33
install-static: $(DESTDIR)$(PREFIX)/lib/libsass.a
Packit bfcc33
Packit bfcc33
install-shared: $(DESTDIR)$(PREFIX)/lib/libsass.so \
Packit bfcc33
                install-headers
Packit bfcc33
Packit bfcc33
$(SASSC_BIN): $(BUILD)
Packit bfcc33
	$(MAKE) -C $(SASS_SASSC_PATH)
Packit bfcc33
Packit bfcc33
sassc: $(SASSC_BIN)
Packit bfcc33
	$(SASSC_BIN) -v
Packit bfcc33
Packit bfcc33
version: $(SASSC_BIN)
Packit bfcc33
	$(SASSC_BIN) -h
Packit bfcc33
	$(SASSC_BIN) -v
Packit bfcc33
Packit bfcc33
test: $(SASSC_BIN)
Packit bfcc33
	$(RUBY_BIN) $(SASS_SPEC_PATH)/sass-spec.rb -V 3.4 -c $(SASSC_BIN) --impl libsass $(LOG_FLAGS) $(SASS_SPEC_PATH)/$(SASS_SPEC_SPEC_DIR)
Packit bfcc33
Packit bfcc33
test_build: $(SASSC_BIN)
Packit bfcc33
	$(RUBY_BIN) $(SASS_SPEC_PATH)/sass-spec.rb -V 3.4 -c $(SASSC_BIN) --impl libsass $(LOG_FLAGS) $(SASS_SPEC_PATH)/$(SASS_SPEC_SPEC_DIR)
Packit bfcc33
Packit bfcc33
test_full: $(SASSC_BIN)
Packit bfcc33
	$(RUBY_BIN) $(SASS_SPEC_PATH)/sass-spec.rb -V 3.4 -c $(SASSC_BIN) --impl libsass --run-todo $(LOG_FLAGS) $(SASS_SPEC_PATH)/$(SASS_SPEC_SPEC_DIR)
Packit bfcc33
Packit bfcc33
test_probe: $(SASSC_BIN)
Packit bfcc33
	$(RUBY_BIN) $(SASS_SPEC_PATH)/sass-spec.rb -V 3.4 -c $(SASSC_BIN) --impl libsass --probe-todo $(LOG_FLAGS) $(SASS_SPEC_PATH)/$(SASS_SPEC_SPEC_DIR)
Packit bfcc33
Packit bfcc33
clean-objects: lib
Packit bfcc33
	-$(RM) lib/*.a lib/*.so lib/*.dll lib/*.la
Packit bfcc33
	-$(RMDIR) lib
Packit bfcc33
clean: clean-objects
Packit bfcc33
	$(RM) $(CLEANUPS)
Packit bfcc33
Packit bfcc33
clean-all:
Packit bfcc33
	$(MAKE) -C $(SASS_SASSC_PATH) clean
Packit bfcc33
Packit bfcc33
lib-file: lib-file-$(BUILD)
Packit bfcc33
lib-opts: lib-opts-$(BUILD)
Packit bfcc33
Packit bfcc33
lib-file-static:
Packit bfcc33
	@echo $(LIB_STATIC)
Packit bfcc33
lib-file-shared:
Packit bfcc33
	@echo $(LIB_SHARED)
Packit bfcc33
lib-opts-static:
Packit bfcc33
	@echo -L"$(SASS_LIBSASS_PATH)/lib"
Packit bfcc33
lib-opts-shared:
Packit bfcc33
	@echo -L"$(SASS_LIBSASS_PATH)/lib -lsass"
Packit bfcc33
Packit bfcc33
.PHONY: all static shared sassc \
Packit bfcc33
        version install-headers \
Packit bfcc33
        clean clean-all clean-objects \
Packit bfcc33
        debug debug-static debug-shared \
Packit bfcc33
        install install-static install-shared \
Packit bfcc33
        lib-opts lib-opts-shared lib-opts-static \
Packit bfcc33
        lib-file lib-file-shared lib-file-static
Packit bfcc33
.DELETE_ON_ERROR: