forked from tmm1/cycript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
makefile
172 lines (129 loc) · 4.78 KB
/
makefile
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
SHELL := $(shell which bash 2>/dev/null)
ifndef PKG_TARG
target :=
else
target := $(PKG_TARG)-
endif
prefix := /usr
gcc := g++
flags ?= -g3 -O0 -DYYDEBUG=1
paths := $(foreach path,$(paths),$(wildcard $(path)))
flags += $(foreach path,$(paths),-I$(path) -L$(path))
objc :=
svn := $(shell svnversion)
all:
all := cycript
dpkg_architecture := $(shell which dpkg-architecture 2>/dev/null)
ifneq ($(dpkg_architecture),)
arch := $(shell $(dpkg_architecture) -qDEB_HOST_ARCH 2>/dev/null)
endif
header := Cycript.tab.hh Parser.hpp Pooling.hpp List.hpp Local.hpp cycript.hpp Internal.hpp Error.hpp String.hpp Exception.hpp Standard.hpp
code :=
code += Replace.o Output.o
code += Cycript.tab.o lex.cy.o
code += Network.o Parser.o
code += JavaScriptCore.o Library.o
inject :=
filters := #E4X
ldid := true
entitle := $(ldid)
lib := lib
dll := so
apr_config := apr-1-config
library :=
console := -lreadline
depends :=
restart ?= $(MAKE)
uname_s ?= $(shell uname -s)
uname_p ?= $(shell uname -p)
-include $(uname_s).mk
-include $(uname_s)-$(uname_p).mk
ifneq ($(shell pkg-config libffi --modversion 2>/dev/null),)
flags += $(shell pkg-config --cflags libffi)
endif
ifdef CY_EXECUTE
ifeq ($(filter ObjectiveC,$(filters)),)
ifneq ($(shell which gnustep-config 2>/dev/null),)
include GNUstep.mk
endif
endif
endif
apr := $(shell $(apr_config) --link-ld)
library += $(apr)
console += $(apr)
flags += -Wall -Werror -Wno-parentheses #-Wno-unused
flags += -fno-common
flags += -I. -Iinclude -I$(shell $(apr_config) --includedir)
all += $(lib)cycript.$(dll)
filters += $(shell bison <(echo '%code{}%%_:') -o/dev/null 2>/dev/null && echo Bison24 || echo Bison23)
ifdef arch
deb := $(shell grep ^Package: control.in | cut -d ' ' -f 2-)_$(shell grep ^Version: control.in | cut -d ' ' -f 2 | sed -e 's/\#/$(svn)/')_$(arch).deb
all:
extra::
ifeq ($(depends)$(dll),dylib)
control.tmp: control.in cycript $(lib)cycript.dylib
sed -e 's/&/'"$$(dpkg-query -S $$(otool -lah cycript *.dylib | grep dylib | grep -v ':$$' | sed -e 's/^ *name //;s/ (offset [0-9]*)$$//' | sort -u) 2>/dev/null | sed -e 's/:.*//; /^cycript$$/ d; s/$$/,/' | sort -u | tr '\n' ' ')"'/;s/, $$//;s/#/$(svn)/;s/%/$(arch)/' $< >$@
else
ifeq ($(depends)$(dll),so)
control.tmp: control.in cycript $(lib)cycript.so
sed -e 's/&/'"$$(dpkg-query -S $$(ldd cycript $(lib)cycript.so | sed -e '/:$$/ d; s/^[ \t]*\([^ ]* => \)\?\([^ ]*\) .*/\2/' | sort -u) 2>/dev/null | sed -e 's/:.*//; /^cycript$$/ d; s/$$/,/' | sort -u | tr '\n' ' ')"'/;s/, $$//;s/#/$(svn)/;s/%/$(arch)/' $< >$@
else
control.tmp: control.in
sed -e 's/&/$(foreach depend,$(depends),$(depend),)/;s/,$$//;s/#/$(svn)/;s/%/$(arch)/' $< >$@
endif
endif
control: control.tmp
[[ -e control ]] && diff control control.tmp &>/dev/null || cp -pRf control.tmp control
$(deb): $(all) control
rm -rf package
mkdir -p package/DEBIAN
cp -pR control package/DEBIAN
mkdir -p package$(prefix)/{bin,lib,sbin}
$(restart) extra
cp -pR $(lib)cycript.$(dll) package$(prefix)/lib
cp -pR cycript package$(prefix)/bin
#cp -pR cyrver package$(prefix)/sbin
dpkg-deb -b package $(deb)
endif
all: $(all)
clean::
rm -f *.o $(lib)cycript.$(dll) $(all) Struct.hpp lex.cy.c Cycript.tab.cc Cycript.tab.hh location.hh position.hh stack.hh cyrver Cycript.yy Cycript.l control Bridge.hpp Cycript.output
%.yy: %.yy.in
./Filter.sh <$< >$@ $(filters)
%.l: %.l.in
./Filter.sh <$< >$@ $(filters)
Cycript.tab.cc Cycript.tab.hh location.hh position.hh: Cycript.yy
bison -v --report=state $<
lex.cy.c: Cycript.l
flex -t $< | sed -e 's/int yyl;/yy_size_t yyl;/;s/int yyleng_r;/yy_size_t yyleng_r;/' >$@
#Parser.hpp: Parser.py Parser.dat
# ./Parser.py <Parser.dat >$@
Cycript.tab.o: Cycript.tab.cc $(header)
$(target)$(gcc) $(flags) -c -o $@ $<
lex.cy.o: lex.cy.c $(header)
$(target)$(gcc) $(flags) -c -o $@ $<
%.o: %.cpp $(header)
$(target)$(gcc) $(flags) -c -o $@ $<
#objc := -x c++
%.o: %.mm $(header)
$(target)$(gcc) $(objc) $(flags) -c -o $@ $<
$(lib)cycript.$(dll): $(code)
$(target)$(gcc) $(flags) -shared -dynamiclib -o $@ $(filter %.o,$^) $(library) $(link)
$(ldid) $@
cycript: Console.o $(lib)cycript.$(dll) $(inject)
$(target)$(gcc) $(flags) -o $@ $(filter %.o,$^) -L. -lcycript $(console) $(link)
$(entitle) cycript
package: $(deb)
test: $(deb)
dpkg -i $(deb)
if [[ -e target.cy ]]; then cycript -c target.cy && echo; fi
if [[ -e jquery.js ]]; then /usr/bin/time cycript -c jquery.js >jquery.cyc.js; gzip -9c jquery.cyc.js >jquery.cyc.js.gz; wc -c jquery.{mam,gcc,cyc,bak,yui}.js; wc -c jquery.{cyc,gcc,bak,mam,yui}.js.gz; fi
if [[ -e test.cy ]]; then cycript test.cy; fi
install: cycript $(lib)cycript.$(dll)
sudo cp -p cycript /usr/bin
sudo cp -p $(lib)cycript.$(dll) /usr/lib
sudo chgrp procmod /usr/bin/cycript
sudo chmod g+s /usr/bin/cycript
uninstall:
sudo rm -f /usr/bin/cycript /usr/lib/libcycript.dylib
.PHONY: all clean extra package control.tmp