Files
wmic/GNUmakefile
T
2024-12-05 10:40:20 +02:00

229 lines
9.2 KiB
Makefile

###########################################################################
#
# This program is part of Zenoss Core, an open source monitoring platform.
# Copyright (C) 2008-2010, Zenoss Inc.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2, or (at your
# option) any later version, as published by the Free Software Foundation.
#
# For complete information please visit: http://www.zenoss.com/oss/
#
###########################################################################
build: pywmi-build
install: pywmi-installed
all: build install
.PHONY: clean debug tarball
WMI_BUILD_TARGETS = proto bin/wmic bin/winexe libraries
SAMBA_SRCDIR = Samba/source
ZENOSS_BINDIR = $(ZENHOME)/bin
ZENPYTHON = $(ZENOSS_BINDIR)/python
PYTHON ?= $(ZENPYTHON)
PYTHON_EXISTS := $(wildcard $(PYTHON))
# Assuming python was found, tease out path to headers we should
# compile against: e.g., $ZENHOME/include/python#.#
# Extract WMI version for subversion tagging as desired.
#
ifeq ($(PYTHON_EXISTS),$(PYTHON))
PY_INCDIR = $(shell $(PYTHON) pyinclude.py)
GET_VERSION = "import version as v; print(v.VERSION)"
WMI_VERSION := $(shell cd pysamba ; $(PYTHON) -c $(GET_VERSION))
WMI_CPPFLAGS := -I$(PY_INCDIR)
endif
# Install dir for libasync_wmi_lib.so.* and pysamba wrapper code.
# e.g., Samba/source/bin/shared/libasync_wmi_lib.so.0.0.1 --> $(PY_LIBDIR)
#
PY_LIBDIR = $(ZENHOME)/lib/python
#-------------------------------------------------------------------------#
# A key deliverable of this build process is the libasync_wmi shared #
# library. Derive the complete filename for this target from config data #
# and the build platform so we know precisely what should get built and #
# installed. #
# #
# e.g., libasync_wmi_lib.dylib versus libasync_wmi_lib.so.0.0.2 #
#-------------------------------------------------------------------------#
LIBASYNC_WMI_LIB_BASENAME = libasync_wmi_lib
WMI_CONFIG_MK = $(SAMBA_SRCDIR)/wmi/config.mk
LIBASYNC_WMI_LIB_VERSION_nnn = $(shell fgrep -A1 "[LIBRARY::async_wmi_lib]" $(WMI_CONFIG_MK) | sed -e "s/^VERSION=\(.*\)/\1/g" | tail -1)
LIBASYNC_WMI_LIB_VERSION_n = $(shell fgrep -A2 "[LIBRARY::async_wmi_lib]" $(WMI_CONFIG_MK) | sed -e "s/^SO_VERSION=\(.*\)/\1/g" | tail -1)
ifeq ($(shell uname), Darwin)
LIBASYNC_WMI_LIB = $(LIBASYNC_WMI_LIB_BASENAME).dylib.$(LIBASYNC_WMI_LIB_VERSION_nnn)
else
# e.g., libasync_wmi_lib.so.0.0.2 and libasync_wmi_lib.so.0 respectively
LIBASYNC_WMI_LIB := $(LIBASYNC_WMI_LIB_BASENAME).so.$(LIBASYNC_WMI_LIB_VERSION_nnn)
LIBASYNC_WMI_LIB_SO_N := $(LIBASYNC_WMI_LIB_BASENAME).so.$(LIBASYNC_WMI_LIB_VERSION_n)
endif
PATHED_LIBASYNC_WMI_LIB := $(SAMBA_SRCDIR)/bin/shared/$(LIBASYNC_WMI_LIB)
#-------------------------------------------------------------------------#
# Google Breakpad Integration #
#-------------------------------------------------------------------------#
# libasync_wmi_lib.so can be built with google-breakpad crash reporting. #
# http://code.google.com/p/google-breakpad #
# #
# Minidumps are typically written to /tmp. #
# See: Samba/source/librpc/rpc/dcerpc.c #
#-------------------------------------------------------------------------#
# Comment out the next line to disable google-breakpad dependency.
#ifneq ($(shell uname), Darwin)
#USE_BREAKPAD = 1
#endif
ifneq ($(USE_BREAKPAD),)
breakpad_CPPFLAGS = -DBREAKPAD
WMI_CPPFLAGS += $(breakpad_CPPFLAGS)
breakpad_LIB = libbreakpad_client.a
breakpad_LIBDIR ?= $(ZENHOME)/lib
_fqp_breakpad_LIB := $(DESTDIR)$(breakpad_LIBDIR)/$(breakpad_LIB)
fqp_breakpad_LIB = $(patsubst //%,/%,$(_fqp_breakpad_LIB))
breakpad_LIB_SYMLINK = $(SAMBA_SRCDIR)/bin/static/$(breakpad_LIB)
endif
#-------------------------------------------------------------------------#
# Check existence of a directory or file. Bail out of the build if it is missing.
#
define check
@if [ "$1" = "directory" ]; then \
if [ ! -d "$2" ];then \
echo $3 | awk '{printf("Missing: %-20s\n",$$1)}';\
exit 1 ;\
else \
echo "$3 $2" | awk '{printf("Found: %-20s %20s\n",$$1,$$2)}' 1>/dev/null;\
fi ;\
fi
@if [ "$1" = "file" ]; then \
if [ ! -f "$2" ];then \
echo "$3 $2" | awk '{printf("Missing: %-20s %s\n",$$1,$$2)}';\
exit 1 ;\
else \
echo "$3 $2" | awk '{printf("Found: %-20s %20s\n",$$1,$$2)}' 1>/dev/null;\
fi ;\
fi
endef
build-prereqs:
@echo
@echo "Checking prequisites for building WMI"
$(call check,directory,$(ZENHOME),"ZENHOME")
$(call check,file,$(PYTHON),"PYTHON")
$(call check,directory,$(PY_INCDIR),"PY_INCDIR")
ifneq ($(USE_BREAKPAD),)
@if [ ! -f "$(fqp_breakpad_LIB)" ];then \
echo "Unable to find the google breakpad client library we require at:" ;\
echo " $(fqp_breakpad_LIB)" ;\
echo ;\
echo "Either comment out USE_BREAKPAD in this makefile or build the" ;\
echo "breakpad library." ;\
echo ;\
exit 1 ;\
fi
endif
@touch $@
install-prereqs:
@echo
@echo "Checking prequisites for installing WMI"
$(call check,directory,$(ZENHOME),"ZENHOME")
$(call check,directory,$(DESTDIR)$(ZENOSS_BINDIR),"ZENOSS_BINDIR")
$(call check,directory,$(DESTDIR)$(PY_LIBDIR),"PY_LIBDIR")
@touch $@
LIBRPC_CONFIG_MK = $(SAMBA_SRCDIR)/librpc/config.mk
ifeq ($(USE_BREAKPAD),)
LIBRPC_CONFIG_MK_NOBP = $(SAMBA_SRCDIR)/librpc/config.mk.nobreakpad
$(LIBRPC_CONFIG_MK): $(LIBRPC_CONFIG_MK_NOBP)
cp $< $@
else
# Tell the build how to link against the breakpad library.
# e.g., Muck with Samba/source/librpc/config.mk to provide that visibility.
#
LIBRPC_CONFIG_MK_BP = $(SAMBA_SRCDIR)/librpc/config.mk.breakpad
LIBRPC_CONFIG_TAG := $(fqp_breakpad_LIB)
$(LIBRPC_CONFIG_MK): $(LIBRPC_CONFIG_MK_BP)
sed -e "s|_sed_tag_libbreakpad_client_path_|$(LIBRPC_CONFIG_TAG)|" $< >$@ || rm $@
# Create symlink to actual google breakpad library.
# e.g., Samba/source/bin/static/libbreakpad_client.a -> /actual/path/to/libbreakpad_client.a
$(breakpad_LIB_SYMLINK): $(fqp_breakpad_LIB)
@if [ ! -d "$(@D)" ];then \
mkdir -p $(@D) ;\
fi
ln -sf $(fqp_breakpad_LIB) $@
endif
$(SAMBA_SRCDIR)/Makefile: $(SAMBA_SRCDIR)/autogen.sh
cd $(SAMBA_SRCDIR) ;\
./autogen.sh ;\
CPPFLAGS="$(WMI_CPPFLAGS)" ./configure --without-readline --enable-debug
ifeq ($(USE_BREAKPAD),)
pywmi-build: build-prereqs $(LIBRPC_CONFIG_MK) $(SAMBA_SRCDIR)/Makefile
else
pywmi-build: build-prereqs $(LIBRPC_CONFIG_MK) $(SAMBA_SRCDIR)/Makefile $(breakpad_LIB_SYMLINK)
endif
cd $(SAMBA_SRCDIR);\
$(MAKE) $(WMI_BUILD_TARGETS) ;\
touch $@
pywmi-installed: install-prereqs $(DESTDIR)$(PY_LIBDIR) $(DESTDIR)$(ZENOSS_BINDIR) $(SAMBA_SRCDIR)/bin/wmic $(SAMBA_SRCDIR)/bin/winexe $(PATHED_LIBASYNC_WMI_LIB)
cp $(SAMBA_SRCDIR)/bin/wmic $(DESTDIR)$(ZENOSS_BINDIR)
cp $(SAMBA_SRCDIR)/bin/winexe $(DESTDIR)$(ZENOSS_BINDIR)
ifeq ($(shell uname), Darwin)
-(cd $(DESTDIR)$(PY_LIBDIR) && rm -f $(LIBASYNC_WMI_LIB_BASENAME)*)
cp $(PATHED_LIBASYNC_WMI_LIB) $(DESTDIR)$(PY_LIBDIR)/$(LIBASYNC_WMI_LIB_BASENAME).$(LIBASYNC_WMI_LIB_VERSION_nnn).dylib
(cd $(DESTDIR)$(PY_LIBDIR) && ln -sf $(LIBASYNC_WMI_LIB_BASENAME).$(LIBASYNC_WMI_LIB_VERSION_nnn).dylib $(LIBASYNC_WMI_LIB_BASENAME).dylib)
else
-(cd $(DESTDIR)$(PY_LIBDIR) && rm -f $(LIBASYNC_WMI_LIB_BASENAME)*)
cp $(PATHED_LIBASYNC_WMI_LIB) $(DESTDIR)$(PY_LIBDIR)
(cd $(DESTDIR)$(PY_LIBDIR) && ln -sf $(LIBASYNC_WMI_LIB) $(LIBASYNC_WMI_LIB_SO_N))
endif
rm -rf $(DESTDIR)$(PY_LIBDIR)/pysamba
cp -r pysamba $(DESTDIR)$(PY_LIBDIR)
$(DESTDIR)$(ZENOSS_BINDIR) $(DESTDIR)$(PY_LIBDIR):
mkdir -p $@
clean: $(LIBRPC_CONFIG_MK)
-if [ -f "$(SAMBA_SRCDIR)/Makefile" ] ; then\
cd $(SAMBA_SRCDIR) ;\
make distclean ;\
fi
rm -f $(SAMBA_SRCDIR)/bin/shared/*
rm -f $(SAMBA_SRCDIR)/bin/static/*
rm -f $(SAMBA_SRCDIR)/heimdal/lib/des/hcrypto
rm -f build-prereqs
rm -f install-prereqs
rm -f $(LIBRPC_CONFIG_MK)
@-[ -L $(breakpad_LIB_SYMLINK) ] && rm -f $(breakpad_LIB_SYMLINK)
tarball:
-svn rm -m 'cleanup' http://dev.zenoss.org/svn/tags/wmi-$(WMI_VERSION)
svn cp -m "tagging wmi-$(WMI_VERSION)" http://dev.zenoss.org/svn/trunk/wmi http://dev.zenoss.org/svn/tags/wmi-$(WMI_VERSION)
svn export http://dev.zenoss.org/svn/tags/wmi-$(WMI_VERSION)
tar -cjf ../wmi-$(WMI_VERSION).tar.bz2 wmi-$(WMI_VERSION)
rm -rf wmi-$(WMI_VERSION)
debug:
@echo "WMI_VERSION = $(WMI_VERSION)"
@echo "SAMBA_SRCDIR = $(SAMBA_SRCDIR)"
@echo "PY_INCDIR = $(PY_INCDIR)"
@echo "PY_LIBDIR = $(PY_LIBDIR)"
@echo "ZENOSS_BINDIR = $(ZENOSS_BINDIR)"
@echo "PYTHON = $(PYTHON_EXISTS)"
@echo "WMI_CONFIGURE CPPFLAGS="$(WMI_CPPFLAGS)" ./configure --without-readline --enable-debug"
@echo "WMI_MAKE $(MAKE) $(WMI_BUILD_TARGETS)"
ifeq ($(USE_BREAKPAD),)
@echo "USE_BREAKPAD [ disabled ]"
else
@echo "LIBRPC_CONFIG_TAG = $(LIBRPC_CONFIG_TAG)"
@echo "USE_BREAKPAD [ enabled ]"
@echo "breakpad_CPPFLAGS = $(breakpad_CPPFLAGS)"
@echo "breakpad_LIB = $(breakpad_LIB)"
@echo "breakpad_LIBDIR = $(breakpad_LIBDIR)"
@echo "fqp_breakpad_LIB = $(fqp_breakpad_LIB)"
endif