# ---------------------------------------------------------------------------- #
## \file Makefile
## \author Sebastien Beaugrand
## \sa http://beaugrand.chez.com/
## \copyright CeCILL 2.1 Free Software license
# ---------------------------------------------------------------------------- #
YEAR = 2023
# cal options
#MOON = build/moon-events build/moon-themes
MOON = build/moon-events
# sundial options
#CFLAGS += -DWITH_EQUATION_OF_TIME
CFLAGS += -DWITH_AZIMUT
#CFLAGS += -DWITH_DECLINATION
GCODE_FONT = 7seg
include config.mk
ifneq ($(MAKECMDGOALS),dist-cal)
ifneq ($(MAKECMDGOALS),dist-sundial)
-include config-pr-symlink.mk
endif
endif
.PHONY: all
all:
@echo
@echo "Usage: make cal"
@echo " make { portrait-cal$(YEAR).pdf }"
@echo " make { testAlgos | testEaster | testSun }"
@echo " make sundial"
@echo " make { portrait-sundial.pdf }"
@echo " make { pygcode | gcode | grbl | laser }"
@echo " make azimut"
@echo " make { testAzimut }"
@echo " make dist-clean"
@echo " make { dist-cal | dist-sundial }"
@echo " [WIDTH=61.0 HEIGHT=29.7 STRAIGHT_STYLUS_LENGTH=6.5]"
@echo
PROROOT = ..
include $(PROROOT)/makefiles/repo.mk
LDLIBS = -lm
OBJECTS_NDEP_MAKEFILE_LIST = y
include $(PROROOT)/makefiles/ccpp.mk
%.pdf: %.tex
cd build && TEXINPUTS="..:"\
pdflatex --halt-on-error --shell-escape ../$<
mv build/$@ .
.PHONY: cal dist-cal
cal dist-cal: build cal$(YEAR).pdf
cal$(YEAR).pdf: cal.tex\
build/sun $(MOON)\
build/moonphase.mf build/calendar build/calendar/calend0.tex\
build/year.tex build/lat.tex build/lon.tex build/h0.tex build/vacances$(YEAR).tex
cd build && TEXINPUTS="calendar:..:"\
pdflatex --halt-on-error --shell-escape ../$<
mv build/cal.pdf $@
build/moonphase.mf: $(REPO)/moonphase.mf
@ln -sf $< $@
$(REPO)/moonphase.mf:
@curl -o $@\
http://dante.ctan.org/tex-archive/fonts/moonphase/moonphase.mf
build/calendar:
@mkdir $@
build/calendar/calend0.tex: $(REPO)/calendar.zip
@unzip $< -d build
@touch $@
$(REPO)/calendar.zip:
@curl -o $@\
http://dante.ctan.org/tex-archive/macros/plain/contrib/calendar.zip
build/year.tex: $(MAKEFILE_LIST)
@echo "\def\\\annee{$(YEAR)}" >$@
build/lat.tex: $(MAKEFILE_LIST)
@echo "\def\latitude{$(LAT)}" >$@
build/lon.tex: $(MAKEFILE_LIST)
@echo "\def\longitude{$(LON)}" >$@
build/h0.tex: $(MAKEFILE_LIST)
@echo "\def\h0{$(H0)}" >$@
build/vacances$(YEAR).tex: vacances.sh $(MAKEFILE_LIST)
$< $(YEAR) tex >$@
build/%: build/%.o build/algos.o
$(LINK.c) $^ $(LDLIBS) -o $@
.PHONY: testAlgos
testAlgos: build build/testAlgos
@build/testAlgos && echo OK
.PHONY: testEaster
testEaster:
testPaques.sh | diff -y --suppress-common-lines testPaquesDim.ref -
cd build && TEXINPUTS="..:" pdflatex ../testPaques.tex | grep G= |\
diff -y --suppress-common-lines ../testPaquesLun.ref -
cut -d ' ' -f 1 testPaquesLun.ref >build/lun.ref
cat testPaquesDim.ref |\
awk 'BEGIN { FS = "-| " } { print $$2"/"$$1"/"$$3 }' |\
xargs -I {} date -d "{} +1 day" +%d-%m-%Y |\
diff -y --suppress-common-lines build/lun.ref -
.PHONY: testSun
testSun: build build/sun
@build/sun `date +%Y-%m-%d` $(LAT) $(LON) $(H0)
.PHONY: azimut
azimut: build/azimut
.PHONY: testAzimut
testAzimut: build/azimut
@$< 2021-06-21 48.44728 1.48749 7.66666 | diff $@.ref -
.PHONY: sundial dist-sundial
sundial dist-sundial: sundial.pdf
build/config.tex: $(MAKEFILE_LIST)
@mkdir -p build
@echo "\\\newlength{\sousStylaire}" >$@
@echo -n "\setlength{\sousStylaire}" >>$@
@echo "$(LAT) $(STRAIGHT_STYLUS_LENGTH)" |\
awk '{ a=$$1*3.14159/180; printf "{%fcm}\n",$$2*sin(a)/cos(a) }' >>$@
@echo "\\\newlength{\width}" >>$@
@echo "\setlength{\width}{$(WIDTH)cm}" >>$@
@echo "\\\newlength{\height}" >>$@
@echo "\setlength{\height}{$(HEIGHT)cm}" >>$@
@echo "\\\newlength{\horizon}" >>$@
@echo -n "\setlength{\horizon}" >>$@
@echo "$(STYLUS_ANGLE) $(STRAIGHT_STYLUS_LENGTH)" |\
awk '{ a=(90-$$1)*3.14159/180; printf "{%fcm}\n",$$2*sin(a)/cos(a) }' >>$@
build/%.dat: sundial.sh build/sundial
$< $(YEAR) $(LAT) $(LON)\
$(STRAIGHT_STYLUS_LENGTH) $(GNOMONIC_DECLINATION) $(STYLUS_ANGLE) $@
DATAS =\
build/hiv07.dat build/pri07.dat build/ete07.dat build/aut07.dat\
build/hiv08.dat build/pri08.dat build/ete08.dat build/aut08.dat\
build/hiv09.dat build/pri09.dat build/ete09.dat build/aut09.dat\
build/hiv10.dat build/pri10.dat build/ete10.dat build/aut10.dat\
build/hiv11.dat build/pri11.dat build/ete11.dat build/aut11.dat\
build/hiv12.dat build/pri12.dat build/ete12.dat build/aut12.dat\
build/hiv13.dat build/pri13.dat build/ete13.dat build/aut13.dat\
build/hiv14.dat build/pri14.dat build/ete14.dat build/aut14.dat\
build/hiv15.dat build/pri15.dat build/ete15.dat build/aut15.dat\
build/hiv16.dat build/pri16.dat build/ete16.dat build/aut16.dat\
build/hiv17.dat build/pri17.dat build/ete17.dat build/aut17.dat
DATAS_5 =\
build/hiv07_5.dat build/pri07_5.dat build/ete07_5.dat build/aut07_5.dat\
build/hiv08_5.dat build/pri08_5.dat build/ete08_5.dat build/aut08_5.dat\
build/hiv09_5.dat build/pri09_5.dat build/ete09_5.dat build/aut09_5.dat\
build/hiv10_5.dat build/pri10_5.dat build/ete10_5.dat build/aut10_5.dat\
build/hiv11_5.dat build/pri11_5.dat build/ete11_5.dat build/aut11_5.dat\
build/hiv12_5.dat build/pri12_5.dat build/ete12_5.dat build/aut12_5.dat\
build/hiv13_5.dat build/pri13_5.dat build/ete13_5.dat build/aut13_5.dat\
build/hiv14_5.dat build/pri14_5.dat build/ete14_5.dat build/aut14_5.dat\
build/hiv15_5.dat build/pri15_5.dat build/ete15_5.dat build/aut15_5.dat\
build/hiv16_5.dat build/pri16_5.dat build/ete16_5.dat build/aut16_5.dat
$(DATAS): build/config.tex
$(DATAS_5): build/config.tex
sundial.pdf: build/config.tex $(DATAS) $(DATAS_5)
pysundialTool1.ngc: build/config.tex $(DATAS)
pysundialTool2.ngc: build/config.tex $(DATAS_5)
sundialTool1.pdf: build/config.tex build/decorations.tex
sundialTool2.pdf: build/config.tex build/decorations_5.tex
build/decorations.tex: deco2tex.py $(DATAS)
@$< -t 1 >$@
build/decorations_5.tex: deco2tex.py $(DATAS_5)
@$< -t 2 >$@
.PHONY: pygcode
pygcode: pysundialTool1.ngc pysundialTool2.ngc
pysundialTool1.ngc: gcode.py
@$< -f $(GCODE_FONT) -t 1 >$@
pysundialTool2.ngc: gcode.py
@$< -f $(GCODE_FONT) -t 2 >$@
.PHONY: gcode grbl
gcode: sundialTool1.ngc sundialTool2.ngc
grbl: grbl-sundialTool1.ngc grbl-sundialTool2.ngc
sundialTool1.ngc grbl-sundialTool1.ngc: sundialTool1.pdf FORCE
@$(MAKE) --no-print-directory -f grbl.mk $@ PROJECT=sundialTool1
@grblminmax.awk $@
sundialTool2.ngc grbl-sundialTool2.ngc: sundialTool2.pdf FORCE
@$(MAKE) --no-print-directory -f grbl.mk $@ PROJECT=sundialTool2
@grblminmax.awk $@
.PHONY: laser
laser: laser-grbl-sundial.ngc
laser-grbl-sundial.ngc: laser-grbl-sundialTool1.ngc laser-grbl-sundialTool2.ngc
@cat $^ | sed\
-e '0,/^M2/{/^M2/d}'\
-e '0,/(M9/{/(M9/d}'\
-e 's/(M9.*/G0 X0 Y0/'\
>$@
laser-grbl-sundialTool1.ngc: grbl-sundialTool1.ngc $(MAKEFILE_LIST)
@sed\
-e 's/M3 S15000.*/S300/'\
-e 's/G00 Z0.100 F.*/F12.0\n(begin1)\n(begin2)/'\
-e 's/G00 Z0.100/M5/'\
-e 's/G00 Z-0.010/M3/'\
$< |\
sed '/(begin2)/,/G01 X0.001 Y0.001/d' |\
sed '/(begin1)/,/G01 X0.001 Y0.001/d' |\
cat >$@
laser-grbl-sundialTool2.ngc: grbl-sundialTool2.ngc $(MAKEFILE_LIST)
@sed\
-e 's/M3 S15000.*/S300/'\
-e 's/G00 Z0.100 F.*/F48.0\n(begin1)\n(begin2)/'\
-e 's/G00 Z0.100/M5/'\
-e 's/G00 Z-0.010/M3/'\
$< |\
sed '/(begin2)/,/G01 X0.001 Y0.001/d' |\
sed '/(begin1)/,/G01 X0.001 Y0.001/d' |\
cat >$@
.PHONY: FORCE
FORCE:
portrait-%.pdf: %.pdf
pdfjam -q --angle 90 -o $@ $<
.PHONY: dist-clean
dist-clean:
@$(RM) *.pdf build/*.tex build/*.dat build/moon-*
@$(RM) *.ngc build/*.ngc build/*.pdf
PROJECT = cal
TARDEPEND +=\
gcodefonts/*.py\
gcodefonts/Makefile\
bin/pdftogcode.sh\
bin/gcode2grbl.awk\
bin/grblsimplify.sh\
makefiles/gcode.mk
include $(PROROOT)/makefiles/tar.mk