# Carpeta de destí a on posarem els fitxers.
INSTALL_PREFIX = ../../../ntlgjs

# Subdirectoris a copiar de SRCDIR a OUTDIR
#COPYDIRS = img
COPYDIRS =

#COMPRESSOR = java -jar yuicompressor-2.4.6.jar
#COMPRESSOR = yuicompressor
#COMPRESSOR_FLAGS = --charset utf-8 --verbose

### uglify: npm install uglify-js -g
# --source-map
# --source-map-root
# --source-map-url
# --source-map-include-sources
# --in-source-map
# --source-map-inline
#UGLIFY = uglifyjs
#UGLIFY_FLAGS = --ie8 --compress --mangle --
#debug: UGLIFY = cat
#debug: UGLIFY_FLAGS =

#
# Javascript i CSS del tema
#
# uglify:
#   npm install uglify-js -g
#   npm install uglifycss -g
UGLIFYJS_CMD = uglifyjs
#UGLIFYJS_FLAGS =  --compress --mangle --ie8 --
UGLIFYJS_FLAGS =  --mangle --ie8 --

# Target dependant variables
debug: UGLIFYJS_FLAGS = --beautify --ie8 --

UGLIFYCSS_CMD = uglifycss
UGLIFYCSS_FLAGS =

SASS = sass -E utf-8
# --style NAME
#	Output style. Can be nested (default), compact, compressed, or expanded.
#
# --sourcemap=TYPE
#	How to link generated output to the source files.
#	auto (default): relative paths where possible, file URIs elsewhere
#	file: always absolute file URIs
#	inline: include the source text in the sourcemap
#	none: no sourcemaps
#
# --debug-info
#	Emit output that can be used by the FireSass Firebug plugin.
#
# --no-cache
#	 Don't cache parsed Sass files.
#SASS_FLAGS = --style expanded --sourcemap=auto
SASS_FLAGS = --no-cache --style compressed --sourcemap=none

# Target dependant variables
debug: SASS_FLAGS = --style expanded --sourcemap=auto

# Carpeta local on deixarem els fitxers finals.
SRCDIR = .
OUTDIR = $(INSTALL_PREFIX)

MKDIR = mkdir -p

# Per buscar fitxers recursivament. e.g. SRC_JS := $(call rwildcard,$(SRCDIR)/js/,*.js)
# En teoria això es pot fet via $(wildcard $(SRCDIR)/js/**/*.js) però no sempre funciona...
# ATENCIÓ: QUE NECESSITA UN SLASH FINAL AL NOM DEL DIRECTORI I NO POT
# HABER ESPAI ENTRE LA COMA DE DESPRES DEL DIRECTORI I L'EXTENSIÓ!!!!!
rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))

### Fitxers css generat via SCSS
# Excloure els fitxers que comencen amb _
EXCLUDE_SCSS = $(call rwildcard, $(SRCDIR)/scss/,_*.scss)
SCSS_FILES = $(filter-out $(EXCLUDE_SCSS),$(call rwildcard, $(SRCDIR)/scss/,*.scss))
SCSS_BUILD := $(patsubst $(SRCDIR)/scss/%,$(OUTDIR)/css/%,$(SCSS_FILES:.scss=.css))
SCSS_INSTALL := $(patsubst $(SRCDIR)/scss/%,$(INSTALL_PREFIX)/css/%,$(SCSS_FILES:.scss=.css))

### Fitxers css que no estan fets via SCSS
CSS_FILES = $(filter-out %-min.css,$(call rwildcard, $(SRCDIR)/css/,*.css))
CSS_BUILD := $(patsubst $(SRCDIR)/%,$(OUTDIR)/%,$(CSS_FILES))

### Fitxers js
# Excloure els fitxers que acaben amb _{EL QUE SIGUI}.js
EXCLUDE_JS = $(call rwildcard, $(SRCDIR)/js/,*_*.js)
JS_FILES = $(filter-out $(EXCLUDE_JS),$(call rwildcard, $(SRCDIR)/js/,*.js))
JS_BUILD := $(patsubst $(SRCDIR)/%,$(OUTDIR)/%,$(JS_FILES))

build: build-scss minify-css minify-js

all: clean sass minify-css minify-js
release: clean sass minify-css minify-js install
debug: sass copy-css copy-js

build-scss: $(SCSS_FILES) $(SCSS_BUILD)
minify-css: $(CSS_FILES) $(CSS_BUILD)
minify-js: $(JS_FILES) $(JS_BUILD)

# Aixó sols serveix per fitxers .scss de "primer nivell"...
# (falta la part que detectaria canvis en els @imports)
$(OUTDIR)/css/%.css: $(SRCDIR)/scss/%.scss
	@test -d $(@D) || $(MKDIR) $(@D)
	$(SASS) -I $(SRCDIR)/scss/ $(SASS_FLAGS) $< $@

$(OUTDIR)/%.css: $(SRCDIR)/%.css
	@test -d $(@D) || $(MKDIR) $(@D)
	$(UGLIFYCSS_CMD) $(UGLIFYCSS_FLAGS) $< >$@

$(OUTDIR)/%.js: $(SRCDIR)/%.js
	@echo '==> $@'
	@test -d $(@D) || $(MKDIR) $(@D)
	@$(UGLIFYJS_CMD) $(UGLIFYJS_FLAGS) $< >$@

sass:
	@test -d $(INSTALL_PREFIX)/css || $(MKDIR) $(INSTALL_PREFIX)/css
	@echo '==> Compilant SASS'
	$(SASS) --update $(SRCDIR)/scss:$(INSTALL_PREFIX)/css/ $(SASS_FLAGS)

copy-css:
	@test -d $(INSTALL_PREFIX)/css || $(MKDIR) $(INSTALL_PREFIX)/css
	@echo '==> Copiant CSS'
	@for file in $(CSS_FILES); do \
	    cp $$file $(INSTALL_PREFIX)/css; \
	done

copy-js:
	@test -d $(INSTALL_PREFIX)/js || $(MKDIR) $(INSTALL_PREFIX)/js
	@echo '==> Copiant JS'
	@for file in $(JS_FILES); do \
	    cp $$file $(INSTALL_PREFIX)/js; \
	done

# Install: packer -S inotify-tools
# Si dona error el make:
#   echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
watch:
	@while true; do \
	    make debug; \
	    inotifywait -qre close_write $(SRCDIR); \
	done

# Copiar directoris addicionals al directori destí. Son els definits a COPYDIRS (img, fonts, etz...)
copy: $(COPYDIRS)
$(COPYDIRS):
	@test -d $(INSTALL_PREFIX) || $(MKDIR) $(INSTALL_PREFIX)
	@echo '==> Copiant $@ '
	rsync -rupE $(SRCDIR)/$@ $(INSTALL_PREFIX)

# Copiem els fitxers que estan al directori css (que no son els generats via scss...)
install: all copy
	@test -d $(INSTALL_PREFIX) || $(MKDIR) $(INSTALL_PREFIX)

clean:
	@echo '==> Clean'
	@for file in $(SCSS_INSTALL); do \
	    if [ -e $$file ]; then \
		rm $$file; \
	    fi; \
	    if [ -e $$file.map ]; then \
		rm $$file.map; \
	    fi; \
	done
	@for file in $(CSS_BUILD); do \
	    if [ -e $$file ]; then \
		rm $$file; \
	    fi; \
	done
	@for file in $(JS_BUILD); do \
	    if [ -e $$file ]; then \
		rm $$file; \
	    fi; \
	done

distclean: clean
	# Eliminar RECURSIVAMENT!!!
	rm -rf $(addprefix $(INSTALL_PREFIX)/, $(COPYDIRS))
	# Eliminar sols si està buit
	rmdir --ignore-fail-on-non-empty $(INSTALL_PREFIX)/css
	rmdir --ignore-fail-on-non-empty $(INSTALL_PREFIX)/js

# Per mostrar el contigut de qualsevol variable.
# eg: make showvar-CSS_FILES
showvar-%:
	@echo '$*=$($*)'

.PHONY : sass all release debug install copy $(COPYDIRS) clean distclean
