radare2/libr/Makefile
2014-01-19 00:52:33 +01:00

179 lines
5.4 KiB
Makefile

include ../global.mk
include config.mk
include ../mk/${COMPILER}.mk
PREFIX?=${PWD}/../prefix
PFX=${DESTDIR}/${PREFIX}
LFX=${DESTDIR}/${LIBDIR}
IFX=${DESTDIR}/${INCLUDEDIR}
PWD=$(shell pwd)
LIBS0=util hash
LIBS1=reg cons db magic diff bp search config socket
LIBS2=syscall cmd lang io crypto flags bin
LIBS3=fs anal
LIBS4=parse
LIBS5=asm debug
LIBS6=egg
#LIBS6+=print
LIBS7=core
LIBS=$(LIBS0) $(LIBS1) $(LIBS2) $(LIBS3) $(LIBS4) $(LIBS5) $(LIBS6) $(LIBS7)
.PHONY: $(LIBS)
all:
${MAKE} $(LIBS0)
${MAKE} $(LIBS1)
${MAKE} $(LIBS2)
${MAKE} $(LIBS3)
${MAKE} $(LIBS4)
${MAKE} $(LIBS5)
${MAKE} $(LIBS6)
${MAKE} $(LIBS7)
ifeq (${WITHNONPIC},1)
${MAKE} libr.a
endif
# looks hacky :D
#AR=arm-linux-androideabi-ar
libr.a:
rm -rf .libr
mkdir .libr
for a in */libr_*.a ; do \
mkdir -p .libr/$$a ; \
cp -f $$a .libr/$$a ; \
(cd .libr/$$a ; ${AR} x *.a ; rm -f *.a ) ; \
done
${AR} qv libr.a `find .libr/ | grep '\\.o$$'`
rm -rf .libr
gnu_libr.a: $(shell ls */libr_*.a 2>/dev/null)
rm -f libr.a
echo CREATE libr.a > libr.m
for a in */libr_*.a ; do echo ADDLIB $$a >> libr.m ; done
echo SAVE >> libr.m
# ar -M is a gnu-ism .. try to find a proper portable way to do that
${CC_AR} -M < libr.m
rm -f libr.m
$(LIBS):
@echo "DIR $@"
@${MAKE} -C $@
pkgcfg:
@for lib in ${LIBS}; do ( cd $${lib} && ${MAKE} pkgcfg ); done
cd asm && ${MAKE} pkgcfg NAME=libr DEPS="r_`echo ${LIBS}|sed -e 's, , r_,g'`"
# TODO: Magically generate libr.pc.acr here using LIBS and so :)
install-pkgconfig:
${INSTALL_DIR} ${LFX}/pkgconfig
for a in ../pkgcfg/*.pc ; do ${INSTALL_DATA} $$a ${LFX}/pkgconfig ; done
install-includes:
${INSTALL_DIR} ${IFX}/libr
(cd include && for a in *.h ; do ${INSTALL_DATA} $$a ${IFX}/libr ; done)
${INSTALL_DIR} ${IFX}/libr/sflib
(cd include/sflib && for a in * ; do \
${INSTALL_DIR} ${IFX}/libr/sflib/$$a ; \
for b in $$a/*.h ; do \
${INSTALL_DATA} $$b ${IFX}/libr/sflib/$$b ; \
done ; \
done)
${INSTALL_DIR} ${IFX}/libr/sdb
(cd include/sdb && for a in * ; do \
${INSTALL_DATA} $$a ${IFX}/libr/sdb/$$a ; \
done)
symstall install-symlink:
mkdir -p ${PFX}/bin ${IFX} ${LFX}/pkgconfig ${LFX}/radare2/${VERSION}
rm -rf ${IFX}/libr && ln -fs ${PWD}/include ${IFX}/libr
cd ../pkgcfg && for a in *.pc ; do \
if [ -e ${PWD}/../pkgcfg/$${a} ] ; then \
ln -fs ${PWD}/../pkgcfg/$${a} ${LFX}/pkgconfig/$${a} ; \
fi ; \
done
for a in ${LIBS} ; do \
ln -fs ${PWD}/$${a}/libr_$${a}.${EXT_SO} ${LFX}/libr_$${a}.${EXT_SO} ; \
ln -fs ${PWD}/$${a}/libr_$${a}.${EXT_SO} ${LFX}/libr_$${a}.${EXT_SO}.${LIBVERSION} ; \
ln -fs ${PWD}/$${a}/libr_$${a}.${EXT_AR} ${LFX}/libr_$${a}.${EXT_AR} ; \
for b in $${a}/p/*.${EXT_SO} ; do \
if [ -e ${PWD}/$${b} ] ; then \
ln -fs ${PWD}/$${b} ${LFX}/radare2/${VERSION}/ ; \
fi ; \
done ; \
( cd ${LFX}/radare2 ; ln -fs ${VERSION} last ) ; \
done
install: install-includes install-pkgconfig
# TODO :Use INSTALL_DATA_DIR instead of mkdir
# libraries
@${INSTALL_DIR} ${LFX}
@for a in `find * -type f | grep -e '\.${EXT_SO}$$' | grep -Ev '(lib|parse)/t/' | grep lib | grep -v /bin/ | grep -v /p/` ; do \
b=`echo $$a|cut -d / -f 2`; \
echo " ${LFX}/$$b.${LIBVERSION}"; \
${INSTALL_LIB} $$a ${LFX}/$$b.${LIBVERSION} ; \
( cd ${LFX} ; ln -fs $$b.${LIBVERSION} $$b ) ; \
done
# object archives
@for a in `find * -type f | grep -e '\.a$$' | grep -v fs/p` ; do \
echo " ${LFX}/$$a"; ${INSTALL_DATA} $$a ${LFX} ; done
# plugins
@${INSTALL_DIR} ${LFX}/radare2/${VERSION}
@for a in `find */p -perm -u+x -type f | grep -v exe | grep -v dll | grep ${EXT_SO}`; \
do echo " ${LFX}/radare2/${VERSION}/$$a"; \
${INSTALL_DATA} $$a ${LFX}/radare2/${VERSION} ; done
cd ${LFX}/radare2 ; ln -fs ${VERSION} last
#@echo "lang/p/radare.* ${DESTDIR}/${PFX}/${LIBDIR}/radare2/${VERSION}"
#${INSTALL_DATA} lang/p/radare.* ${LFX}/radare2/${VERSION}
deinstall uninstall:
# libraries
-@for a in `find * | grep -e '\.${EXT_SO}$$' | grep -v 'lib/t' | grep lib` ; do \
a=`echo $$a | awk -F / '{ print $$NF; }'`; \
echo ${LFX}/$$a ; rm -f ${LFX}/$$a ; done
# object archives
-@for a in `find * | grep -e '\.a$$'` ; do \
a=`echo $$a | awk -F / '{ print $$NF; }'`; \
echo ${LFX}/$$a ; rm -f ${LFX}/$$a ; done
# includes
-if [ -h ${IFX}/libr ]; then \
rm -f ${IFX}/libr ; \
else \
(cd include && for a in * ; do rm -f ${IFX}/libr/$$a ; done) ; \
fi
# programs
-@for a in `find */t -perm -u+x -type f | grep 2`; do \
a=`echo $$a|awk -F / '{ print $$NF; }'`; \
echo ${PFX}/bin/$$a ; rm -f ${PFX}/bin/$$a ; done
# plugins
-@for a in `find */p -perm -u+x -type f`; do \
a="${LFX}/radare2/${VERSION}/`echo $$a|awk -F / '{ print $$NF; }'`"; \
echo $$a ; rm -f $$a ; done
rm -rf ${LFX}/radare2/${VERSION}
rm -f ${LFX}/pkgconfig/libr.pc
rm -f ${LFX}/pkgconfig/r_*.pc
# test programs
rm -rf ${PFX}/bin/libr-test
# TODO: use for a in LIBS (like in binr/Makefile)
rm -rf ${IFX}/libr
rm -rf ${LFX}/libr_*.so.${LIBVERSION}
rm -rf ${LFX}/libr_*.so.0
rm -rf ${LFX}/libr_*.so
rm -rf ${LFX}/libr_*.a
rm -rf ${LFX}/libr2.so*
rm -rf ${LFX}/libr2.a
rm -rf ${LFX}/libr.so*
rm -rf ${LFX}/libr.a
rm -rf ${DESTDIR}${DATADIR}/share/doc/radare2
@echo libr aka radare2 has been uninstalled from PREFIX=${PFX}
clean:
for lib in ${LIBS}; do ( cd $${lib} && ${MAKE} clean ); done
mrproper:
for lib in ${LIBS}; do ( cd $${lib} && ${MAKE} mrproper ); done
.PHONY: sloc mrproper clean pkgcfg install deinstall uninstall libr
.PHONY: install-includes install-pkgconfig install-symlink all