2016-11-11 15:54:13 -06:00
|
|
|
ACLOCAL_AMFLAGS = -I m4
|
|
|
|
|
2017-01-03 07:32:05 -06:00
|
|
|
if ENABLE_SERVER
|
|
|
|
SERVER_SUBDIRS = daemons init install ipaserver
|
|
|
|
endif
|
2017-02-21 14:55:21 -06:00
|
|
|
|
|
|
|
if WITH_IPATESTS
|
|
|
|
IPATESTS_SUBDIRS = ipatests
|
|
|
|
endif
|
|
|
|
|
2016-11-30 03:19:18 -06:00
|
|
|
IPACLIENT_SUBDIRS = ipaclient ipalib ipapython
|
2017-02-17 10:46:42 -06:00
|
|
|
IPA_PLACEHOLDERS = freeipa ipa ipaplatform ipaserver ipatests
|
2017-02-16 08:27:49 -06:00
|
|
|
SUBDIRS = asn1 util client contrib po pypi \
|
2017-02-21 14:55:21 -06:00
|
|
|
$(IPACLIENT_SUBDIRS) ipaplatform $(IPATESTS_SUBDIRS) $(SERVER_SUBDIRS)
|
2017-01-03 07:32:05 -06:00
|
|
|
|
2016-11-09 06:34:04 -06:00
|
|
|
MOSTLYCLEANFILES = ipasetup.pyc ipasetup.pyo \
|
|
|
|
ignore_import_errors.pyc ignore_import_errors.pyo \
|
|
|
|
ipasetup.pyc ipasetup.pyo \
|
2016-11-09 09:16:45 -06:00
|
|
|
pylint_plugins.pyc pylint_plugins.pyo
|
2016-11-01 06:56:40 -05:00
|
|
|
|
|
|
|
# user-facing scripts
|
|
|
|
dist_bin_SCRIPTS = ipa
|
|
|
|
|
|
|
|
# files required for build but not installed
|
|
|
|
dist_noinst_SCRIPTS = ignore_import_errors.py \
|
|
|
|
makeapi \
|
|
|
|
makeaci \
|
|
|
|
make-doc \
|
|
|
|
make-test \
|
|
|
|
pylint_plugins.py
|
|
|
|
|
2016-11-23 07:59:57 -06:00
|
|
|
ipasetup.py: ipasetup.py.in $(CONFIG_STATUS)
|
|
|
|
$(AM_V_GEN)sed \
|
|
|
|
-e 's|@VERSION[@]|$(VERSION)|g' \
|
|
|
|
$< > $@
|
|
|
|
|
2017-03-17 04:35:48 -05:00
|
|
|
.wheelconstraints: .wheelconstraints.in $(CONFIG_STATUS)
|
|
|
|
$(AM_V_GEN)sed \
|
|
|
|
-e 's|@VERSION[@]|$(VERSION)|g' \
|
|
|
|
$< > $@
|
|
|
|
|
2016-11-01 06:56:40 -05:00
|
|
|
EXTRA_DIST = .mailmap \
|
|
|
|
ACI.txt \
|
|
|
|
API.txt \
|
|
|
|
BUILD.txt \
|
2016-11-11 15:54:13 -06:00
|
|
|
config.rpath \
|
2017-02-28 12:04:03 -06:00
|
|
|
README.md \
|
2016-11-01 06:56:40 -05:00
|
|
|
Contributors.txt \
|
|
|
|
COPYING.openssl \
|
2016-11-03 04:34:53 -05:00
|
|
|
contrib \
|
2016-11-03 07:00:31 -05:00
|
|
|
doc \
|
2016-11-22 08:45:53 -06:00
|
|
|
freeipa.spec.in \
|
2016-11-23 07:59:57 -06:00
|
|
|
ipasetup.py.in \
|
2017-03-17 04:35:48 -05:00
|
|
|
pylintrc \
|
|
|
|
.wheelconstraints.in
|
2016-11-07 09:46:37 -06:00
|
|
|
|
2016-11-09 06:34:04 -06:00
|
|
|
clean-local:
|
|
|
|
rm -rf "$(RPMBUILD)"
|
|
|
|
rm -rf "$(top_builddir)/dist"
|
2016-11-17 09:43:17 -06:00
|
|
|
rm -rf "$(top_builddir)/.tox"
|
2016-11-09 06:34:04 -06:00
|
|
|
rm -rf "$(top_srcdir)/__pycache__"
|
2016-11-09 09:16:45 -06:00
|
|
|
rm -f "$(top_builddir)"/$(PACKAGE)-*.tar.gz
|
|
|
|
|
2016-11-09 06:34:04 -06:00
|
|
|
|
2016-11-07 09:46:37 -06:00
|
|
|
# convenience targets for RPM build
|
2016-11-09 09:16:45 -06:00
|
|
|
.PHONY: rpmroot rpmdistdir version-update _dist-version-bakein _rpms-prep \
|
2016-11-10 03:14:32 -06:00
|
|
|
rpms _rpms-body srpms _srpms-body
|
2016-11-07 09:46:37 -06:00
|
|
|
RPMBUILD ?= $(abs_builddir)/rpmbuild
|
|
|
|
TARBALL = $(PACKAGE)-$(VERSION).tar.gz
|
2016-11-22 08:45:53 -06:00
|
|
|
|
|
|
|
freeipa.spec: freeipa.spec.in $(top_builddir)/$(CONFIG_STATUS)
|
|
|
|
$(AM_V_GEN)sed \
|
|
|
|
-e 's|@VERSION[@]|$(VERSION)|g' \
|
|
|
|
-e 's|@VENDOR_SUFFIX[@]|$(VENDOR_SUFFIX)|g' \
|
|
|
|
$< > $@
|
|
|
|
|
2016-11-07 09:46:37 -06:00
|
|
|
rpmroot:
|
|
|
|
mkdir -p $(RPMBUILD)/BUILD
|
|
|
|
mkdir -p $(RPMBUILD)/RPMS
|
|
|
|
mkdir -p $(RPMBUILD)/SOURCES
|
|
|
|
mkdir -p $(RPMBUILD)/SPECS
|
|
|
|
mkdir -p $(RPMBUILD)/SRPMS
|
|
|
|
|
|
|
|
rpmdistdir:
|
|
|
|
mkdir -p $(top_builddir)/dist/rpms
|
|
|
|
mkdir -p $(top_builddir)/dist/srpms
|
|
|
|
|
2016-11-09 09:16:45 -06:00
|
|
|
# force IPA version re-generation (useful for build from Git)
|
|
|
|
version-update:
|
|
|
|
touch $(srcdir)/VERSION.m4
|
|
|
|
|
|
|
|
# convert Git snapshot version to static value usable from inside of tarball
|
|
|
|
_dist-version-bakein:
|
|
|
|
if !IS_GIT_SNAPSHOT
|
|
|
|
@echo "version-bakein target requires IPA_VERSION_IS_GIT_SNAPSHOT=yes"
|
|
|
|
exit 1
|
|
|
|
endif !IS_GIT_SNAPSHOT
|
|
|
|
chmod u+w $(top_distdir)/VERSION.m4
|
|
|
|
$(SED) -e 's/^define(IPA_VERSION_IS_GIT_SNAPSHOT,.*)/define(IPA_VERSION_IS_GIT_SNAPSHOT, no)/' -i $(top_distdir)/VERSION.m4
|
|
|
|
$(SED) -e 's/^define(IPA_VERSION_PRE_RELEASE,\(.*\))/define(IPA_VERSION_PRE_RELEASE,\1.$(GIT_VERSION))/' -i $(top_distdir)/VERSION.m4
|
|
|
|
cd $(top_distdir) && autoconf # re-generate configure from VERSION.m4
|
|
|
|
|
|
|
|
if IS_GIT_SNAPSHOT
|
|
|
|
VERSION_UPDATE_TARGET = version-update
|
|
|
|
VERSION_BAKEIN_TARGET = _dist-version-bakein
|
|
|
|
endif IS_GIT_SNAPSHOT
|
|
|
|
|
|
|
|
# HACK to support IPA_VERSION_IS_GIT_SNAPSHOT:
|
|
|
|
# touch VERSION.m4 will reexecute configure and change $(VERSION) used by dist
|
|
|
|
# but it will not change $(VERSION) in already running target rpms.
|
|
|
|
# We need to record new $(TARBALL) value used by dist for furher use
|
|
|
|
# in rpms target.
|
|
|
|
dist-hook: $(VERSION_BAKEIN_TARGET)
|
|
|
|
echo "$(TARBALL)" > $(top_builddir)/.tarball_name
|
|
|
|
echo "$(VERSION)" > $(top_builddir)/.version
|
|
|
|
|
2016-11-22 08:45:53 -06:00
|
|
|
_rpms-prep: dist-gzip rpmroot rpmdistdir freeipa.spec
|
2016-11-09 09:16:45 -06:00
|
|
|
cp $(top_builddir)/$$(cat $(top_builddir)/.tarball_name) $(RPMBUILD)/SOURCES/
|
|
|
|
rm -f $(top_builddir)/.tarball_name
|
|
|
|
|
|
|
|
rpms: $(VERSION_UPDATE_TARGET)
|
|
|
|
$(MAKE) _rpms-body
|
|
|
|
|
|
|
|
_rpms-body: _rpms-prep
|
2016-11-07 09:46:37 -06:00
|
|
|
rpmbuild --define "_topdir $(RPMBUILD)" -ba $(top_builddir)/$(PACKAGE).spec
|
2016-11-09 09:16:45 -06:00
|
|
|
cp $(RPMBUILD)/RPMS/*/*$$(cat $(top_builddir)/.version)*.rpm $(top_builddir)/dist/rpms/
|
|
|
|
cp $(RPMBUILD)/SRPMS/*$$(cat $(top_builddir)/.version)*.src.rpm $(top_builddir)/dist/srpms/
|
|
|
|
rm -f rm -f $(top_builddir)/.version
|
2016-11-08 02:55:13 -06:00
|
|
|
|
2016-11-10 03:14:32 -06:00
|
|
|
srpms: $(VERSION_UPDATE_TARGET)
|
|
|
|
$(MAKE) _srpms-body
|
|
|
|
|
|
|
|
_srpms-body: _rpms-prep
|
|
|
|
rpmbuild --define "_topdir $(RPMBUILD)" -bs $(top_builddir)/$(PACKAGE).spec
|
|
|
|
cp $(RPMBUILD)/SRPMS/*$$(cat $(top_builddir)/.version)*.src.rpm $(top_builddir)/dist/srpms/
|
|
|
|
rm -f rm -f $(top_builddir)/.version
|
|
|
|
|
2017-01-21 12:34:12 -06:00
|
|
|
.PHONY: lite-server
|
|
|
|
lite-server: $(top_builddir)/ipapython/version.py
|
|
|
|
+$(MAKE) -C $(top_builddir)/install/ui
|
|
|
|
PYTHONPATH=$(top_srcdir) $(PYTHON) -bb \
|
|
|
|
contrib/lite-server.py $(LITESERVER_ARGS)
|
|
|
|
|
2016-11-08 02:55:13 -06:00
|
|
|
.PHONY: lint
|
2016-11-08 08:08:58 -06:00
|
|
|
if WITH_POLINT
|
|
|
|
POLINT_TARGET = polint
|
|
|
|
endif WITH_POLINT
|
2016-11-08 02:55:13 -06:00
|
|
|
if WITH_PYLINT
|
|
|
|
PYLINT_TARGET = pylint
|
|
|
|
endif WITH_PYLINT
|
2016-11-08 02:24:51 -06:00
|
|
|
if WITH_JSLINT
|
|
|
|
JSLINT_TARGET = jslint
|
|
|
|
endif WITH_JSLINT
|
2016-11-08 08:08:58 -06:00
|
|
|
lint: acilint apilint $(POLINT_TARGET) $(PYLINT_TARGET) $(JSLINT_TARGET)
|
2016-11-08 07:23:39 -06:00
|
|
|
|
2017-03-15 02:31:38 -05:00
|
|
|
.PHONY: devcheck
|
|
|
|
devcheck: all
|
|
|
|
if ! WITH_POLINT
|
|
|
|
@echo "ERROR: polint not available"; exit 1
|
|
|
|
endif
|
|
|
|
if ! WITH_PYLINT
|
|
|
|
@echo "ERROR: pylint not available"; exit 1
|
|
|
|
endif
|
|
|
|
if ! WITH_JSLINT
|
|
|
|
@echo "ERROR: jslint not available"; exit 1
|
|
|
|
endif
|
|
|
|
if ! WITH_PYTHON2
|
|
|
|
@echo "ERROR: python2 not available"; exit 1
|
|
|
|
endif
|
|
|
|
@ # run all linters, tests, and check with Python 2
|
|
|
|
PYTHONPATH=$(top_srcdir) $(PYTHON2) ipatests/ipa-run-tests \
|
|
|
|
--ipaclient-unittests
|
|
|
|
$(MAKE) $(AM_MAKEFLAGS) acilint apilint polint jslint check
|
|
|
|
$(MAKE) $(AM_MAKEFLAGS) PYTHON=$(PYTHON2) pylint
|
|
|
|
if WITH_PYTHON3
|
|
|
|
@ # just tests and pylint on Python 3
|
|
|
|
PYTHONPATH=$(top_srcdir) $(PYTHON3) ipatests/ipa-run-tests \
|
|
|
|
--ipaclient-unittests
|
|
|
|
$(MAKE) $(AM_MAKEFLAGS) PYTHON=$(PYTHON3) pylint
|
|
|
|
else
|
|
|
|
@echo "WARNING: python3 not available"
|
|
|
|
endif
|
|
|
|
@echo "All tests passed."
|
|
|
|
|
2017-02-22 12:19:35 -06:00
|
|
|
.PHONY: $(top_builddir)/ipapython/version.py
|
|
|
|
$(top_builddir)/ipapython/version.py:
|
|
|
|
(cd $(top_builddir)/ipapython && make version.py)
|
|
|
|
|
2016-11-08 07:23:39 -06:00
|
|
|
.PHONY: acilint
|
2016-11-22 10:00:04 -06:00
|
|
|
acilint: $(top_builddir)/ipapython/version.py
|
2016-11-08 07:23:39 -06:00
|
|
|
cd $(srcdir); ./makeaci --validate
|
2016-11-08 02:55:13 -06:00
|
|
|
|
2016-11-08 07:26:09 -06:00
|
|
|
.PHONY: apilint
|
2016-11-22 10:00:04 -06:00
|
|
|
apilint: $(top_builddir)/ipapython/version.py
|
2016-11-08 07:26:09 -06:00
|
|
|
cd $(srcdir); ./makeapi --validate
|
|
|
|
|
2016-11-08 08:08:58 -06:00
|
|
|
.PHONY: polint
|
|
|
|
polint:
|
2016-11-15 09:43:58 -06:00
|
|
|
$(MAKE) -C $(srcdir)/po validate-src-strings validate-po test-gettext
|
2016-11-08 08:08:58 -06:00
|
|
|
|
2016-11-16 05:51:58 -06:00
|
|
|
# Run pylint for all python files. Finds all python files/packages, skips
|
|
|
|
# folders rpmbuild, freeipa-* and dist. Skip (match, but don't print) .*,
|
|
|
|
# *.in, *~. Finally print all python files, including scripts that do not
|
|
|
|
# have python extension.
|
2016-11-22 10:00:04 -06:00
|
|
|
|
2017-02-22 12:19:35 -06:00
|
|
|
.PHONY: pylint
|
|
|
|
|
|
|
|
if WITH_PYLINT
|
2016-11-23 07:59:57 -06:00
|
|
|
pylint: $(top_builddir)/ipapython/version.py ipasetup.py
|
2016-11-08 02:55:13 -06:00
|
|
|
FILES=`find $(top_srcdir) \
|
|
|
|
-type d -exec test -e '{}/__init__.py' \; -print -prune -o \
|
2016-11-16 05:51:58 -06:00
|
|
|
-path './rpmbuild' -prune -o \
|
|
|
|
-path './freeipa-*' -prune -o \
|
|
|
|
-path './dist' -prune -o \
|
2017-02-23 09:19:30 -06:00
|
|
|
-path './pypi' -prune -o \
|
2016-11-17 09:43:17 -06:00
|
|
|
-path './.tox' -prune -o \
|
2016-11-16 05:51:58 -06:00
|
|
|
-name '.*' -o \
|
|
|
|
-name '*.in' -o \
|
2016-11-08 02:55:13 -06:00
|
|
|
-name '*~' -o \
|
2016-11-16 05:51:58 -06:00
|
|
|
-name '*.py' -print -o \
|
2016-11-08 02:55:13 -06:00
|
|
|
-type f -exec grep -qsm1 '^#!.*\bpython' '{}' \; -print`; \
|
2017-03-15 02:31:38 -05:00
|
|
|
echo "Pylint on $(PYTHON) is running, please wait ..."; \
|
2016-12-08 04:26:18 -06:00
|
|
|
PYTHONPATH=$(top_srcdir) $(PYTHON) -m pylint \
|
2017-02-14 02:58:44 -06:00
|
|
|
--rcfile=$(top_srcdir)/pylintrc \
|
|
|
|
--load-plugins pylint_plugins \
|
|
|
|
$${FILES}
|
2017-02-22 12:19:35 -06:00
|
|
|
endif # WITH_PYLINT
|
2016-11-08 02:24:51 -06:00
|
|
|
|
2016-11-22 09:07:32 -06:00
|
|
|
.PHONY: jslint jslint-ui jslint-ui-test jslint-html \
|
|
|
|
$(top_builddir)/install/ui/src/libs/loader.js
|
2017-02-22 12:19:35 -06:00
|
|
|
|
|
|
|
if WITH_JSLINT
|
2016-11-08 02:24:51 -06:00
|
|
|
jslint: jslint-ui jslint-ui-test jslint-html
|
|
|
|
|
2016-11-22 09:07:32 -06:00
|
|
|
$(top_builddir)/install/ui/src/libs/loader.js:
|
|
|
|
(cd $(top_builddir)/install/ui/src/libs && make loader.js)
|
|
|
|
|
2016-11-08 02:24:51 -06:00
|
|
|
# create temporary symlinks to allow jslint to find libs/loader.js
|
2016-11-22 09:07:32 -06:00
|
|
|
jslint-ui: $(top_builddir)/install/ui/src/libs/loader.js
|
2016-11-08 02:24:51 -06:00
|
|
|
cd $(top_srcdir)/install/ui; \
|
|
|
|
$(MKDIR_P) js; \
|
|
|
|
rm -f js/libs; \
|
|
|
|
$(LN_S) ../src/libs js/libs; \
|
|
|
|
jsl -nologo -nosummary -nofilelisting -conf jsl.conf; \
|
|
|
|
rm js/libs; \
|
|
|
|
rmdir js
|
|
|
|
|
|
|
|
jslint-ui-test:
|
|
|
|
cd $(top_srcdir)/install/ui/test; \
|
|
|
|
jsl -nologo -nosummary -nofilelisting -conf jsl.conf
|
|
|
|
|
|
|
|
jslint-html:
|
|
|
|
cd $(top_srcdir)/install/html; \
|
|
|
|
jsl -nologo -nosummary -nofilelisting -conf jsl.conf
|
2017-02-22 12:19:35 -06:00
|
|
|
endif # WITH_JSLINT
|
2016-10-27 07:04:58 -05:00
|
|
|
|
2017-02-17 10:46:42 -06:00
|
|
|
.PHONY: bdist_wheel wheel_bundle wheel_placeholder pypi_packages
|
2016-10-27 07:04:58 -05:00
|
|
|
WHEELDISTDIR = $(top_builddir)/dist/wheels
|
2017-04-03 06:35:58 -05:00
|
|
|
WHEELPYPIDIR = $(top_builddir)/dist/pypi
|
2016-10-27 07:04:58 -05:00
|
|
|
WHEELBUNDLEDIR = $(top_builddir)/dist/bundle
|
|
|
|
|
2017-01-17 05:16:25 -06:00
|
|
|
@MK_IFEQ@ ($(IPA_SERVER_WHEELS),1)
|
|
|
|
IPA_WHEEL_PACKAGES @MK_ASSIGN@ $(IPACLIENT_SUBDIRS) ipaplatform ipaserver
|
|
|
|
IPA_OMIT_INSTALL @MK_ASSIGN@ 0
|
|
|
|
@MK_ELSE@
|
|
|
|
IPA_WHEEL_PACKAGES @MK_ASSIGN@ $(IPACLIENT_SUBDIRS)
|
|
|
|
IPA_OMIT_INSTALL @MK_ASSIGN@ 1
|
|
|
|
@MK_ENDIF@
|
|
|
|
|
|
|
|
# additional wheels for bundle, e.g. IPA_EXTRA_WHEELS="ipatests[webui] pylint"
|
|
|
|
IPA_EXTRA_WHEELS=
|
|
|
|
|
2016-10-27 07:04:58 -05:00
|
|
|
$(WHEELDISTDIR):
|
|
|
|
mkdir -p $(WHEELDISTDIR)
|
|
|
|
|
|
|
|
$(WHEELBUNDLEDIR):
|
|
|
|
mkdir -p $(WHEELBUNDLEDIR)
|
|
|
|
|
2017-04-03 06:35:58 -05:00
|
|
|
$(WHEELPYPIDIR):
|
|
|
|
mkdir -p $(WHEELPYPIDIR)
|
|
|
|
|
2016-10-27 07:04:58 -05:00
|
|
|
bdist_wheel: $(WHEELDISTDIR)
|
2017-01-17 05:16:25 -06:00
|
|
|
rm -f $(foreach item,$(IPA_WHEEL_PACKAGES) ipatests,$(WHEELDISTDIR)/$(item)-*.whl)
|
|
|
|
export IPA_OMIT_INSTALL=$(IPA_OMIT_INSTALL); \
|
|
|
|
for dir in $(IPA_WHEEL_PACKAGES) ipatests; do \
|
2016-10-27 07:04:58 -05:00
|
|
|
$(MAKE) $(AM_MAKEFLAGS) -C $${dir} $@ || exit 1; \
|
|
|
|
done
|
|
|
|
|
2017-03-17 04:35:48 -05:00
|
|
|
wheel_bundle: $(WHEELBUNDLEDIR) bdist_wheel .wheelconstraints
|
2017-01-17 05:16:25 -06:00
|
|
|
rm -f $(foreach item,$(IPA_WHEEL_PACKAGES) ipatests,$(WHEELBUNDLEDIR)/$(item)-*.whl)
|
|
|
|
@# dbus-python sometimes fails when MAKEFLAGS is set to -j2 or higher
|
|
|
|
MAKEFLAGS= $(PYTHON) -m pip wheel \
|
2017-03-17 04:35:48 -05:00
|
|
|
--disable-pip-version-check \
|
|
|
|
--constraint .wheelconstraints \
|
|
|
|
--find-links $(WHEELDISTDIR) \
|
|
|
|
--find-links $(WHEELBUNDLEDIR) \
|
|
|
|
--wheel-dir $(WHEELBUNDLEDIR) \
|
2017-04-25 06:15:02 -05:00
|
|
|
$(IPA_EXTRA_WHEELS) $(IPA_WHEEL_PACKAGES)
|
2016-11-14 03:27:15 -06:00
|
|
|
|
2017-04-03 06:35:58 -05:00
|
|
|
pypi_packages: $(WHEELPYPIDIR) .wheelconstraints
|
|
|
|
rm -f $(WHEELPYPIDIR)/*
|
|
|
|
for dir in $(IPACLIENT_SUBDIRS); do \
|
|
|
|
$(MAKE) $(AM_MAKEFLAGS) \
|
2016-11-17 09:43:17 -06:00
|
|
|
IPA_OMIT_INSTALL=1 WHEELDISTDIR="$(abspath $(WHEELPYPIDIR))" \
|
2017-04-03 06:35:58 -05:00
|
|
|
-C $${dir} bdist_wheel || exit 1; \
|
|
|
|
done
|
2017-02-17 10:46:42 -06:00
|
|
|
for dir in $(IPA_PLACEHOLDERS); do \
|
2017-04-03 06:35:58 -05:00
|
|
|
$(MAKE) $(AM_MAKEFLAGS) \
|
2016-11-17 09:43:17 -06:00
|
|
|
IPA_OMIT_INSTALL=1 WHEELDISTDIR="$(abspath $(WHEELPYPIDIR))" \
|
2017-04-03 06:35:58 -05:00
|
|
|
-C $(top_srcdir)/pypi/$${dir} bdist_wheel || exit 1; \
|
2017-02-17 10:46:42 -06:00
|
|
|
done
|
|
|
|
@echo -e "\n\nTo upload packages to PyPI, run:\n"
|
2017-04-03 06:35:58 -05:00
|
|
|
@echo -e " twine upload $(WHEELPYPIDIR)/*-$(VERSION)-py2.py3-none-any.whl\n"
|
2017-02-17 10:46:42 -06:00
|
|
|
|
2016-11-14 03:27:15 -06:00
|
|
|
.PHONY:
|
|
|
|
strip-po:
|
|
|
|
$(MAKE) -C po strip-po
|