| 
0
 | 
     1 # ERLANG_INC is used for -I, below, so add paths where it might be on linux, freebsd, etc.
 | 
| 
 | 
     2 ERLANG_INC=-I /usr/lib64/erlang/usr/include -I /usr/local/lib/erlang/usr/include
 | 
| 
 | 
     3 DYNCALL_SRC_PATH=../../../dyncall
 | 
| 
 | 
     4 
 | 
| 
 | 
     5 # Be sure to 'make clean' after changing the version
 | 
| 
 | 
     6 VERSION=0.1
 | 
| 
 | 
     7 
 | 
| 
 | 
     8 OUTPUTS = priv/erldc.so ebin/dyncall.beam ebin/erldc.app
 | 
| 
 | 
     9 
 | 
| 
 | 
    10 # Used by install target.  Default empty DESTDIR is for a real install to root filesystem (/).
 | 
| 
 | 
    11 # Override DESTDIR for testing or for a staged install
 | 
| 
 | 
    12 DESTDIR=
 | 
| 
 | 
    13 ERLANG_INST_DIR=/usr/lib64/erlang
 | 
| 
 | 
    14 
 | 
| 
 | 
    15 all: $(OUTPUTS)
 | 
| 
 | 
    16 
 | 
| 
 | 
    17 priv/erldc.so: c_src/dyncallnif.c
 | 
| 
 | 
    18 	[ -d priv ] || mkdir priv
 | 
| 
 | 
    19 	cc -o $@ -fPIC -shared \
 | 
| 
 | 
    20 	$(ERLANG_INC) -I $(DYNCALL_SRC_PATH) \
 | 
| 
 | 
    21 	$(DYNCALL_SRC_PATH)/dyncall/*.o \
 | 
| 
 | 
    22 	c_src/dyncallnif.c
 | 
| 
 | 
    23 
 | 
| 
 | 
    24 priv/erldc_testtargets.so: c_src/erldctesttargets.c
 | 
| 
 | 
    25 	[ -d priv ] || mkdir priv
 | 
| 
 | 
    26 	cc -o $@ -shared -fPIC c_src/erldctesttargets.c
 | 
| 
 | 
    27 
 | 
| 
 | 
    28 ebin/dyncall.beam: src/dyncall.erl
 | 
| 
 | 
    29 	erlc +debug_info -o ebin src/dyncall.erl
 | 
| 
 | 
    30 
 | 
| 
 | 
    31 ebin/erldc.app: src/erldc.app.src
 | 
| 
 | 
    32 	sed -e 's/---VERSION---/$(VERSION)/' src/erldc.app.src >$@
 | 
| 
 | 
    33 
 | 
| 
 | 
    34 # Dialyzer, credit to erlang.mk 
 | 
| 
 | 
    35 DIALYZER_OPTS ?= -Werror_handling -Wrace_conditions \
 | 
| 
 | 
    36 	-Wunmatched_returns # -Wunderspecs
 | 
| 
 | 
    37 
 | 
| 
 | 
    38 build-plt: 
 | 
| 
 | 
    39 	rm -f test/*.beam
 | 
| 
 | 
    40 	dialyzer --build_plt --output_plt dyncall.plt \
 | 
| 
 | 
    41 		--apps erts kernel stdlib .
 | 
| 
 | 
    42 
 | 
| 
 | 
    43 dialyze: $(OUTPUTS)
 | 
| 
 | 
    44 	dialyzer --src src --plt dyncall.plt --no_native $(DIALYZER_OPTS)
 | 
| 
 | 
    45 
 | 
| 
 | 
    46 tests: $(OUTPUTS) priv/erldc_testtargets.so
 | 
| 
 | 
    47 	mkdir -p log
 | 
| 
 | 
    48 	# Add priv to runtime ld path so we get test targets
 | 
| 
 | 
    49 	export LD_LIBRARY_PATH=$$(pwd)/priv:${LD_LIBRARY_PATH}; \
 | 
| 
 | 
    50 		ct_run -pa ebin -logdir log \
 | 
| 
 | 
    51 			-suite linkload_SUITE call_SUITE \
 | 
| 
 | 
    52 				misc_SUITE callf_SUITE
 | 
| 
 | 
    53 	rm -f test/*.beam
 | 
| 
 | 
    54 
 | 
| 
 | 
    55 clean:
 | 
| 
 | 
    56 	rm -rf priv ebin/* test/*.beam log
 | 
| 
 | 
    57 
 | 
| 
 | 
    58 # Convention appears to be install binaries and source, but not tests or build-related things
 | 
| 
 | 
    59 install: $(OUTPUTS)
 | 
| 
 | 
    60 	appdir=$(DESTDIR)$(ERLANG_INST_DIR)/lib/erldc-$(VERSION); \
 | 
| 
 | 
    61 	install -d $$appdir $$appdir/ebin $$appdir/priv $$appdir/src $$appdir/c_src $$appdir/include; \
 | 
| 
 | 
    62 	install README.txt $$appdir; \
 | 
| 
 | 
    63 	install src/*.erl $$appdir/src; \
 | 
| 
 | 
    64 	install include/*.hrl $$appdir/include; \
 | 
| 
 | 
    65 	install c_src/*.c $$appdir/c_src; \
 | 
| 
 | 
    66 	install ebin/* $$appdir/ebin; \
 | 
| 
 | 
    67 	install priv/erldc.so $$appdir/priv
 | 
| 
 | 
    68 
 | 
| 
 | 
    69 uninstall:
 | 
| 
 | 
    70 	appdir=$(DESTDIR)$(ERLANG_INST_DIR)/lib/erldc-$(VERSION); \
 | 
| 
 | 
    71 	rm -rf $$appdir
 | 
| 
 | 
    72 
 | 
| 
 | 
    73 .PHONY: clean all tests build-plt dialyze install uninstall
 |