summaryrefslogtreecommitdiff
path: root/blocks/Makefile
blob: e2d52a1a16e831ff720e895e61896fe163a6c161 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
SHELL := /bin/bash

BLOCKDIR := blocks/xcosblocks

COMMONSRCFILES := $(sort $(wildcard Xcos/common/*.py))
SRCFILES := $(COMMONSRCFILES)
BLOCKSRCFILES := $(sort $(wildcard Xcos/blocks/*.py))
SRCFILES += $(BLOCKSRCFILES)
PORTSRCFILES := $(sort $(wildcard Xcos/ports/*.py))
SRCFILES += $(PORTSRCFILES)
LINKSRCFILES := $(sort $(wildcard Xcos/links/*.py))
SRCFILES += $(LINKSRCFILES)

XCOS2XMLFILES := $(sort $(wildcard xcos2xml/head.xsl))
XCOS2XMLFILES += $(sort $(wildcard xcos2xml/blocks/*.xsl))
XCOS2XMLFILES += $(sort $(wildcard xcos2xml/ports/*.xsl))
XCOS2XMLFILES += $(sort $(wildcard xcos2xml/links/*.xsl))
XCOS2XMLFILES += $(sort $(wildcard xcos2xml/foot.xsl))

SEDFILE := xcosblocks.sed
TARGET := Xcos/xcosblocks.py
TARGET2 := $(BLOCKDIR)/xcosblocks.py
TARGET3 := eda-frontend/public/xcos2xml.xsl

all : $(SEDFILE) $(TARGET) $(TARGET2) $(TARGET3)

$(SEDFILE) : Makefile $(BLOCKSRCFILES) $(PORTSRCFILES) $(LINKSRCFILES)
	@echo Making $@ ...
	@( \
		sed -n 's/^def \([^(]*\).*/s,^\\( *\\(return\\)\\? \\)\\(\1(\\),\\1Blocks.\\3,/p' $(BLOCKSRCFILES); \
		sed -n 's/^def \([^(]*\).*/s,^\\( *\\(return\\)\\? \\)\\(\1(\\),\\1Ports.\\3,/p' $(PORTSRCFILES); \
		sed -n 's/^def \([^(]*\).*/s,^\\( *\\(return\\)\\? \\)\\(\1(\\),\\1Links.\\3,/p' $(LINKSRCFILES); \
	) > $@

$(TARGET) : xcosblocks.sed $(SRCFILES)
	@echo Making $@ ...
	@( \
		for f in $(COMMONSRCFILES); do \
	    echo "# BEGIN $$f"; \
	    sed -e '/^from \(blocks\|common\|links\|ports\)\..* import /d' "$$f"; \
	    echo; \
	    echo "# END $$f"; \
		done; \
		echo; \
		echo; \
	  echo 'class Blocks:'; \
		for f in $(BLOCKSRCFILES); do \
	    echo; \
	    echo "    # BEGIN $$f"; \
	    sed -e '/^from \(blocks\|common\|links\|ports\)\..* import /d' -e '/^$$/N;/^\n$$/D' "$$f" | sed 's/^\(.\)/    \1/'; \
	    echo "    # END $$f"; \
		done; \
		echo; \
		echo; \
	  echo 'class Ports:'; \
		for f in $(PORTSRCFILES); do \
	    echo; \
	    echo "    # BEGIN $$f"; \
	    sed -e '/^from \(blocks\|common\|links\|ports\)\..* import /d' -e '/^$$/N;/^\n$$/D' "$$f" | sed 's/^\(.\)/    \1/'; \
	    echo "    # END $$f"; \
		done; \
		echo; \
		echo; \
	  echo 'class Links:'; \
		for f in $(LINKSRCFILES); do \
	    echo; \
	    echo "    # BEGIN $$f"; \
	    sed -e '/^from \(blocks\|common\|links\|ports\)\..* import /d' -e '/^$$/N;/^\n$$/D' "$$f" | sed 's/^\(.\)/    \1/'; \
	    echo "    # END $$f"; \
		done; \
	) > $@
	@sed -i -f $< $@

flake8 : $(TARGET)
	flake8 --statistics

.srcflake8 : $(TARGET)
	@echo 'flake8 common/*.py blocks/*.py ports/*.py links/*.py'
	@flake8 $(TARGET)
	touch $@

$(TARGET2) : .srcflake8
	cp -f $(TARGET) $@

$(TARGET3) : $(XCOS2XMLFILES)
	@echo Making $@ ...
	@for f in $^; do \
	    cat "$$f"; \
	done > $@