1*287e80b3SSadaf Ebrahimi# SPDX-License-Identifier: LGPL-2.1 2*287e80b3SSadaf Ebrahimi 3*287e80b3SSadaf Ebrahimi# Utils 4*287e80b3SSadaf Ebrahimi 5*287e80b3SSadaf Ebrahimi PWD := $(shell /bin/pwd) 6*287e80b3SSadaf Ebrahimi GOBJ = $(notdir $(strip $@)) 7*287e80b3SSadaf Ebrahimi BASE1 = $(notdir $(strip $1)) 8*287e80b3SSadaf Ebrahimi BASE2 = $(notdir $(strip $2)) 9*287e80b3SSadaf Ebrahimi BASEPWD = $(notdir $(strip $(PWD))) 10*287e80b3SSadaf Ebrahimi 11*287e80b3SSadaf Ebrahimi 12*287e80b3SSadaf Ebrahimiifeq ($(VERBOSE),1) 13*287e80b3SSadaf Ebrahimi Q = 14*287e80b3SSadaf Ebrahimi S = 15*287e80b3SSadaf Ebrahimielse 16*287e80b3SSadaf Ebrahimi Q = @ 17*287e80b3SSadaf Ebrahimi S = -s 18*287e80b3SSadaf Ebrahimiendif 19*287e80b3SSadaf Ebrahimi 20*287e80b3SSadaf Ebrahimi# Use empty print_* macros if either SILENT or VERBOSE. 21*287e80b3SSadaf Ebrahimiifeq ($(findstring 1,$(SILENT)$(VERBOSE)),1) 22*287e80b3SSadaf Ebrahimi print_compile = 23*287e80b3SSadaf Ebrahimi print_app_build = 24*287e80b3SSadaf Ebrahimi print_fpic_compile = 25*287e80b3SSadaf Ebrahimi print_shared_lib_compile = 26*287e80b3SSadaf Ebrahimi print_plugin_obj_compile = 27*287e80b3SSadaf Ebrahimi print_plugin_build = 28*287e80b3SSadaf Ebrahimi print_install = 29*287e80b3SSadaf Ebrahimi print_uninstall = 30*287e80b3SSadaf Ebrahimi print_update = 31*287e80b3SSadaf Ebrahimi print_descend = 32*287e80b3SSadaf Ebrahimi print_clean = 33*287e80b3SSadaf Ebrahimi print_extract = 34*287e80b3SSadaf Ebrahimi print_sample_build = 35*287e80b3SSadaf Ebrahimi print_sample_obj = 36*287e80b3SSadaf Ebrahimielse 37*287e80b3SSadaf Ebrahimi print_compile = echo ' COMPILE '$(GOBJ); 38*287e80b3SSadaf Ebrahimi print_app_build = echo ' BUILD '$(GOBJ); 39*287e80b3SSadaf Ebrahimi print_fpic_compile = echo ' COMPILE FPIC '$(GOBJ); 40*287e80b3SSadaf Ebrahimi print_shared_lib_compile = echo ' COMPILE SHARED LIB '$(GOBJ); 41*287e80b3SSadaf Ebrahimi print_plugin_obj_compile = echo ' COMPILE PLUGIN OBJ '$(GOBJ); 42*287e80b3SSadaf Ebrahimi print_plugin_build = echo ' BUILD PLUGIN '$(GOBJ); 43*287e80b3SSadaf Ebrahimi print_static_lib_build = echo ' BUILD STATIC LIB '$(GOBJ); 44*287e80b3SSadaf Ebrahimi print_install = echo ' INSTALL '$1' to $(DESTDIR_SQ)$2'; 45*287e80b3SSadaf Ebrahimi print_uninstall = echo ' UNINSTALL $(DESTDIR_SQ)$1'; 46*287e80b3SSadaf Ebrahimi print_update = echo ' UPDATE '$(GOBJ); 47*287e80b3SSadaf Ebrahimi print_descend = echo ' DESCEND '$(BASE1) $(BASE2); 48*287e80b3SSadaf Ebrahimi print_clean = echo ' CLEAN '$(BASEPWD); 49*287e80b3SSadaf Ebrahimi print_extract = echo ' EXTRACT '$(GOBJ); 50*287e80b3SSadaf Ebrahimi print_sample_build = echo ' COMPILE SAMPLE '$(GOBJ); 51*287e80b3SSadaf Ebrahimi print_sample_obj = echo ' COMPILE SAMPLE OBJ '$(GOBJ); 52*287e80b3SSadaf Ebrahimiendif 53*287e80b3SSadaf Ebrahimi 54*287e80b3SSadaf Ebrahimido_fpic_compile = \ 55*287e80b3SSadaf Ebrahimi ($(print_fpic_compile) \ 56*287e80b3SSadaf Ebrahimi $(CC) -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@ -MP -c $(CPPFLAGS) $(CFLAGS) $(EXT) -fPIC $< -o $@) 57*287e80b3SSadaf Ebrahimi 58*287e80b3SSadaf Ebrahimido_compile = \ 59*287e80b3SSadaf Ebrahimi ($(if $(GENERATE_PIC), $(do_fpic_compile), \ 60*287e80b3SSadaf Ebrahimi $(print_compile) \ 61*287e80b3SSadaf Ebrahimi $(CC) -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@ -MP -c $(CPPFLAGS) $(CFLAGS) $(EXT) $< -o $@)) 62*287e80b3SSadaf Ebrahimi 63*287e80b3SSadaf Ebrahimido_app_build = \ 64*287e80b3SSadaf Ebrahimi ($(print_app_build) \ 65*287e80b3SSadaf Ebrahimi $(CC) $^ -rdynamic -o $@ $(LDFLAGS) $(CONFIG_LIBS) $(LIBS)) 66*287e80b3SSadaf Ebrahimi 67*287e80b3SSadaf Ebrahimido_build_static_lib = \ 68*287e80b3SSadaf Ebrahimi ($(print_static_lib_build) \ 69*287e80b3SSadaf Ebrahimi if [ -f $@ ]; then \ 70*287e80b3SSadaf Ebrahimi mv $@ $@.rm; $(RM) $@.rm; \ 71*287e80b3SSadaf Ebrahimi fi; \ 72*287e80b3SSadaf Ebrahimi $(AR) rcs $@ $^) 73*287e80b3SSadaf Ebrahimi 74*287e80b3SSadaf Ebrahimido_compile_shared_library = \ 75*287e80b3SSadaf Ebrahimi ($(print_shared_lib_compile) \ 76*287e80b3SSadaf Ebrahimi $(CC) --shared $^ '-Wl,-soname,$(1),-rpath=$$ORIGIN' -o $@ $(LDFLAGS) $(LIBS)) 77*287e80b3SSadaf Ebrahimi 78*287e80b3SSadaf Ebrahimido_compile_plugin_obj = \ 79*287e80b3SSadaf Ebrahimi ($(print_plugin_obj_compile) \ 80*287e80b3SSadaf Ebrahimi $(CC) -c $(CPPFLAGS) $(CFLAGS) -fPIC -o $@ $<) 81*287e80b3SSadaf Ebrahimi 82*287e80b3SSadaf Ebrahimido_plugin_build = \ 83*287e80b3SSadaf Ebrahimi ($(print_plugin_build) \ 84*287e80b3SSadaf Ebrahimi $(CC) $(CFLAGS) $(LDFLAGS) -shared -nostartfiles -o $@ $<) 85*287e80b3SSadaf Ebrahimi 86*287e80b3SSadaf Ebrahimido_compile_python_plugin_obj = \ 87*287e80b3SSadaf Ebrahimi ($(print_plugin_obj_compile) \ 88*287e80b3SSadaf Ebrahimi $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PYTHON_DIR_SQ) $(PYTHON_INCLUDES) -fPIC -o $@ $<) 89*287e80b3SSadaf Ebrahimi 90*287e80b3SSadaf Ebrahimido_python_plugin_build = \ 91*287e80b3SSadaf Ebrahimi ($(print_plugin_build) \ 92*287e80b3SSadaf Ebrahimi $(CC) $< -shared $(LDFLAGS) $(PYTHON_LDFLAGS) -o $@) 93*287e80b3SSadaf Ebrahimi 94*287e80b3SSadaf Ebrahimido_clean = \ 95*287e80b3SSadaf Ebrahimi ($(print_clean) \ 96*287e80b3SSadaf Ebrahimi $(RM) $1) 97*287e80b3SSadaf Ebrahimi 98*287e80b3SSadaf Ebrahimiextract_example = \ 99*287e80b3SSadaf Ebrahimi $(Q)($(print_extract) \ 100*287e80b3SSadaf Ebrahimi cat $1 | sed -ne '/^EXAMPLE/,/FILES/ { /EXAMPLE/,+2d ; /^FILES/d ; /^--/d ; p}' > $2) 101*287e80b3SSadaf Ebrahimi 102*287e80b3SSadaf Ebrahimido_sample_build = \ 103*287e80b3SSadaf Ebrahimi $(Q)($(print_sample_build) \ 104*287e80b3SSadaf Ebrahimi $(CC) -o $1 $2 $(CFLAGS) $(LIBTRACEFS_STATIC) $(LIBTRACEEVENT_LIBS) -lpthread) 105*287e80b3SSadaf Ebrahimi 106*287e80b3SSadaf Ebrahimido_sample_obj = \ 107*287e80b3SSadaf Ebrahimi $(Q)($(print_sample_obj) \ 108*287e80b3SSadaf Ebrahimi $(CC) -g -Wall -c $(CFLAGS) -o $1 $2 -I../include/ $(LIBTRACEEVENT_INCLUDES)) 109*287e80b3SSadaf Ebrahimi 110*287e80b3SSadaf Ebrahimiifneq ($(findstring $(MAKEFLAGS), w),w) 111*287e80b3SSadaf EbrahimiPRINT_DIR = --no-print-directory 112*287e80b3SSadaf Ebrahimielse 113*287e80b3SSadaf EbrahimiNO_SUBDIR = : 114*287e80b3SSadaf Ebrahimiendif 115*287e80b3SSadaf Ebrahimi 116*287e80b3SSadaf Ebrahimi# 117*287e80b3SSadaf Ebrahimi# Define a callable command for descending to a new directory 118*287e80b3SSadaf Ebrahimi# 119*287e80b3SSadaf Ebrahimi# Call by doing: $(call descend,directory[,target]) 120*287e80b3SSadaf Ebrahimi# 121*287e80b3SSadaf Ebrahimidescend = \ 122*287e80b3SSadaf Ebrahimi ($(print_descend) \ 123*287e80b3SSadaf Ebrahimi mkdir -p $(obj)/$(BASE1); \ 124*287e80b3SSadaf Ebrahimi $(MAKE) $(PRINT_DIR) bdir=$(obj)/$(BASE1) -C $(1) $(2)) 125*287e80b3SSadaf Ebrahimi 126*287e80b3SSadaf Ebrahimidescend_clean = \ 127*287e80b3SSadaf Ebrahimi $(MAKE) $(PRINT_DIR) bdir=$(obj)/$(BASE1) -C $(1) clean 128*287e80b3SSadaf Ebrahimi 129*287e80b3SSadaf Ebrahimidefine make_version.h 130*287e80b3SSadaf Ebrahimi (echo '/* This file is automatically generated. Do not modify. */'; \ 131*287e80b3SSadaf Ebrahimi echo \#define VERSION_CODE $(shell \ 132*287e80b3SSadaf Ebrahimi expr $(VERSION) \* 256 + $(PATCHLEVEL)); \ 133*287e80b3SSadaf Ebrahimi echo '#define EXTRAVERSION ' $(EXTRAVERSION); \ 134*287e80b3SSadaf Ebrahimi echo '#define VERSION_STRING "'$(VERSION).$(PATCHLEVEL).$(EXTRAVERSION)'"'; \ 135*287e80b3SSadaf Ebrahimi echo '#define FILE_VERSION '$(FILE_VERSION); \ 136*287e80b3SSadaf Ebrahimi if [ -d $(src)/.git ]; then \ 137*287e80b3SSadaf Ebrahimi d=`git diff`; \ 138*287e80b3SSadaf Ebrahimi x=""; \ 139*287e80b3SSadaf Ebrahimi if [ ! -z "$$d" ]; then x="+"; fi; \ 140*287e80b3SSadaf Ebrahimi echo '#define VERSION_GIT "'$(shell \ 141*287e80b3SSadaf Ebrahimi git log -1 --pretty=format:"%H" 2>/dev/null)$$x'"'; \ 142*287e80b3SSadaf Ebrahimi else \ 143*287e80b3SSadaf Ebrahimi echo '#define VERSION_GIT "not-a-git-repo"'; \ 144*287e80b3SSadaf Ebrahimi fi \ 145*287e80b3SSadaf Ebrahimi ) > $1 146*287e80b3SSadaf Ebrahimiendef 147*287e80b3SSadaf Ebrahimi 148*287e80b3SSadaf Ebrahimidefine update_version.h 149*287e80b3SSadaf Ebrahimi ($(call make_version.h, $@.tmp); \ 150*287e80b3SSadaf Ebrahimi if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 151*287e80b3SSadaf Ebrahimi rm -f $@.tmp; \ 152*287e80b3SSadaf Ebrahimi else \ 153*287e80b3SSadaf Ebrahimi $(print_update) \ 154*287e80b3SSadaf Ebrahimi mv -f $@.tmp $@; \ 155*287e80b3SSadaf Ebrahimi fi); 156*287e80b3SSadaf Ebrahimiendef 157*287e80b3SSadaf Ebrahimi 158*287e80b3SSadaf Ebrahimidefine update_dir 159*287e80b3SSadaf Ebrahimi (echo $1 > $@.tmp; \ 160*287e80b3SSadaf Ebrahimi if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 161*287e80b3SSadaf Ebrahimi rm -f $@.tmp; \ 162*287e80b3SSadaf Ebrahimi else \ 163*287e80b3SSadaf Ebrahimi $(print_update) \ 164*287e80b3SSadaf Ebrahimi mv -f $@.tmp $@; \ 165*287e80b3SSadaf Ebrahimi fi); 166*287e80b3SSadaf Ebrahimiendef 167*287e80b3SSadaf Ebrahimi 168*287e80b3SSadaf Ebrahimidefine build_prefix 169*287e80b3SSadaf Ebrahimi (echo $1 > $@.tmp; \ 170*287e80b3SSadaf Ebrahimi if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 171*287e80b3SSadaf Ebrahimi rm -f $@.tmp; \ 172*287e80b3SSadaf Ebrahimi else \ 173*287e80b3SSadaf Ebrahimi $(print_update) \ 174*287e80b3SSadaf Ebrahimi mv -f $@.tmp $@; \ 175*287e80b3SSadaf Ebrahimi fi); 176*287e80b3SSadaf Ebrahimiendef 177*287e80b3SSadaf Ebrahimi 178*287e80b3SSadaf Ebrahimidefine do_install_mkdir 179*287e80b3SSadaf Ebrahimi if [ ! -d '$(DESTDIR_SQ)$1' ]; then \ 180*287e80b3SSadaf Ebrahimi $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$1'; \ 181*287e80b3SSadaf Ebrahimi fi 182*287e80b3SSadaf Ebrahimiendef 183*287e80b3SSadaf Ebrahimi 184*287e80b3SSadaf Ebrahimidefine do_install 185*287e80b3SSadaf Ebrahimi $(print_install) \ 186*287e80b3SSadaf Ebrahimi $(call do_install_mkdir,$2); \ 187*287e80b3SSadaf Ebrahimi $(INSTALL) $(if $3,-m $3,) $1 '$(DESTDIR_SQ)$2' 188*287e80b3SSadaf Ebrahimiendef 189*287e80b3SSadaf Ebrahimi 190*287e80b3SSadaf Ebrahimidefine do_install_pkgconfig_file 191*287e80b3SSadaf Ebrahimi if [ -n "${pkgconfig_dir}" ]; then \ 192*287e80b3SSadaf Ebrahimi $(call do_install,$(PKG_CONFIG_FILE),$(pkgconfig_dir),644); \ 193*287e80b3SSadaf Ebrahimi else \ 194*287e80b3SSadaf Ebrahimi (echo Failed to locate pkg-config directory) 1>&2; \ 195*287e80b3SSadaf Ebrahimi fi 196*287e80b3SSadaf Ebrahimiendef 197