2019-02-16 00:16:52 +01:00
|
|
|
###########################################################################
|
|
|
|
|
#
|
|
|
|
|
# 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)
|
2024-12-05 10:39:36 +02:00
|
|
|
GET_VERSION = "import version as v; print(v.VERSION)"
|
2019-02-16 00:16:52 +01:00
|
|
|
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
|