2018-08-22 10:15:55 -05:00
NULL =
2016-11-11 15:54:13 -06:00
ACLOCAL_AMFLAGS = -I m4
2017-01-03 07:32:05 -06:00
i f E N A B L E _ S E R V E R
2020-04-08 04:54:28 -05:00
IPASERVER_SUBDIRS = ipaserver ipasphinx
2020-03-20 04:00:06 -05:00
SERVER_SUBDIRS = daemons init install
2017-01-03 07:32:05 -06:00
e n d i f
2017-02-21 14:55:21 -06:00
i f W I T H _ I P A T E S T S
IPATESTS_SUBDIRS = ipatests
e n d i f
2017-10-11 05:09:30 -05:00
IPACLIENT_SUBDIRS = ipaclient ipalib ipaplatform ipapython
2018-02-22 06:38:41 -06:00
PYTHON_SUBDIRS = $( IPACLIENT_SUBDIRS) $( IPATESTS_SUBDIRS) $( IPASERVER_SUBDIRS)
2019-04-18 08:55:00 -05:00
PYTHON_SCRIPT_SUBDIRS = \
$( top_builddir) \
$( top_builddir) /client \
$( top_builddir) /daemons/dnssec \
$( top_builddir) /install/certmonger \
$( top_builddir) /install/oddjob \
$( top_builddir) /install/restart_scripts \
$( top_builddir) /install/tools \
$( NULL)
2020-02-17 07:24:56 -06:00
AZURE_PYTHON_SCRIPT_SUBDIR = $( top_builddir) /ipatests/azure
2017-10-11 05:09:30 -05:00
IPA_PLACEHOLDERS = freeipa ipa ipaserver ipatests
2020-03-20 04:00:06 -05:00
SUBDIRS = \
asn1 \
util \
client \
contrib \
po \
pypi \
selinux \
$( PYTHON_SUBDIRS) \
$( SERVER_SUBDIRS) \
$( NULL)
2017-10-11 05:09:30 -05:00
GENERATED_PYTHON_FILES = \
$( top_builddir) /ipaplatform/override.py \
2018-08-22 10:15:55 -05:00
$( top_builddir) /ipapython/version.py \
$( top_builddir) /makeaci \
$( top_builddir) /makeapi \
$( NULL)
2017-01-03 07:32:05 -06:00
2016-11-09 06:34:04 -06:00
MOSTLYCLEANFILES = 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
2018-08-22 10:15:55 -05:00
nodist_bin_SCRIPTS = ipa
2016-11-01 06:56:40 -05:00
# files required for build but not installed
2018-08-22 10:15:55 -05:00
nodist_noinst_SCRIPTS = \
makeapi \
makeaci \
$( NULL)
dist_noinst_SCRIPTS = \
make-doc \
make-test \
pylint_plugins.py \
$( NULL)
# templates
dist_noinst_DATA = \
ipa.in \
makeaci.in \
makeapi.in \
$( NULL)
2016-11-01 06:56:40 -05:00
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
2018-10-23 05:40:40 -05:00
rm -rf " $( top_srcdir) /cov-int "
rm -f " $( top_srcdir) /freeipa.tgz "
2020-04-21 10:51:51 -05:00
$( MAKE) -C " $( top_srcdir) /doc " distclean
2016-11-09 09:16:45 -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 :
i f ! I S _ G I T _ S N A P S H O T
@echo "version-bakein target requires IPA_VERSION_IS_GIT_SNAPSHOT=yes"
exit 1
e n d i f ! I S _ G I T _ S N A P S H O T
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
i f I S _ G I T _ S N A P S H O T
VERSION_UPDATE_TARGET = version-update
VERSION_BAKEIN_TARGET = _dist-version-bakein
e n d i f I S _ G I T _ S N A P S H O T
# 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
2017-02-07 07:56:39 -06:00
rpmbuild --define " _topdir $( RPMBUILD) " -ba $( top_builddir) /$( PACKAGE) .spec $( RPMBUILD_OPTS)
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
2017-02-07 07:56:39 -06:00
rpmbuild --define " _topdir $( RPMBUILD) " -bs $( top_builddir) /$( PACKAGE) .spec $( RPMBUILD_OPTS)
2016-11-10 03:14:32 -06:00
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
2017-10-11 05:09:30 -05:00
lite-server : $( GENERATED_PYTHON_FILES )
2017-01-21 12:34:12 -06:00
+$( 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
i f W I T H _ P O L I N T
POLINT_TARGET = polint
e n d i f W I T H _ P O L I N T
2016-11-08 02:55:13 -06:00
i f W I T H _ P Y L I N T
PYLINT_TARGET = pylint
e n d i f W I T H _ P Y L I N T
2016-11-08 02:24:51 -06:00
i f W I T H _ J S L I N T
JSLINT_TARGET = jslint
e n d i f W I T H _ J S L I N T
2018-09-28 05:51:39 -05:00
lint : acilint apilint $( POLINT_TARGET ) $( PYLINT_TARGET ) $( JSLINT_TARGET ) rpmlint yamllint
2016-11-08 07:23:39 -06:00
2017-03-15 02:31:38 -05:00
.PHONY : devcheck
devcheck : all
i f ! W I T H _ P O L I N T
@echo "ERROR: polint not available" ; exit 1
e n d i f
i f ! W I T H _ P Y L I N T
@echo "ERROR: pylint not available" ; exit 1
e n d i f
i f ! W I T H _ J S L I N T
@echo "ERROR: jslint not available" ; exit 1
e n d i f
2018-02-14 10:00:44 -06:00
@ # just tests, aci, api and pylint on Python 3
2020-05-05 13:45:13 -05:00
PATH = $( abspath ipatests) :$$ PATH PYTHONPATH = $( abspath $( top_srcdir) ) \
$( PYTHON) ipatests/ipa-run-tests --ipaclient-unittests
2018-09-28 05:51:39 -05:00
$( MAKE) $( AM_MAKEFLAGS) acilint apilint polint pylint jslint rpmlint yamllint check
2017-03-15 02:31:38 -05:00
@echo "All tests passed."
2017-12-11 00:57:40 -06:00
.PHONY : fastcheck fasttest fastlint
fastcheck :
2018-09-28 05:51:39 -05:00
@$( MAKE) -j1 $( AM_MAKEFLAGS) fastlint rpmlint yamllint fasttest apilint acilint
2017-12-11 00:57:40 -06:00
fasttest : $( GENERATED_PYTHON_FILES ) ipasetup .py
@ # --ignore doubles speed of total test run compared to pytest.skip()
@ # on module.
2019-07-08 03:35:23 -05:00
PATH = $( abspath ipatests) :$$ PATH PYTHONPATH = $( abspath $( top_srcdir) ) \
$( PYTHON) ipatests/ipa-run-tests \
2017-12-11 00:57:40 -06:00
--skip-ipaapi \
--ignore $( abspath $( top_srcdir) ) /ipatests/test_integration \
--ignore $( abspath $( top_srcdir) ) /ipatests/test_xmlrpc
fastlint : $( GENERATED_PYTHON_FILES ) ipasetup .py
i f ! W I T H _ P Y L I N T
@echo "ERROR: pylint not available" ; exit 1
e n d i f
@echo " Fast linting with $( PYTHON) from branch ' $( GIT_BRANCH) ' "
@MERGEBASE= $$ ( git merge-base --fork-point $( GIT_BRANCH) ) ; \
2019-06-28 17:38:04 -05:00
PYFILES = $$ ( git diff --name-only --diff-filter= d $$ { MERGEBASE} \
| grep -E '\.py$$' ) ; \
INFILES = $$ ( git diff --name-only --diff-filter= d $$ { MERGEBASE} \
| grep -E '\.in$$' \
| xargs -n1 file 2>/dev/null | grep Python \
| cut -d':' -f1; ) ; \
if [ -n " $$ {PYFILES} " ] && [ -n " $$ {INFILES} " ] ; then \
FILES = " $$ ( printf $$ {PYFILES}\\n $$ {INFILES} ) " ; \
elif [ -n " $$ {PYFILES} " ] ; then \
FILES = " $$ {PYFILES} " ; \
else \
FILES = " $$ {INFILES} " ; \
fi ; \
2017-12-11 00:57:40 -06:00
if [ -n " $$ {FILES} " ] ; then \
2018-01-05 04:19:18 -06:00
echo -e " Fast linting files:\n $$ {FILES}\n " ; \
2017-12-11 00:57:40 -06:00
echo "pycodestyle" ; \
echo "-----------" ; \
2018-02-16 10:23:23 -06:00
git diff -U0 $$ { MERGEBASE} | \
2018-01-05 04:19:18 -06:00
$( PYTHON) -m pycodestyle --diff || exit $$ ?; \
echo -e "\npylint" ; \
echo "------" ; \
PYTHONPATH = $( abspath $( top_srcdir) ) $( PYTHON) -m pylint \
--rcfile= $( top_srcdir) /pylintrc \
--load-plugins pylint_plugins \
$$ { FILES} || exit $$ ?; \
2017-12-11 00:57:40 -06:00
else \
echo "No modified Python files found" ; \
fi
2017-10-11 05:09:30 -05:00
.PHONY : $( top_builddir ) /ipaplatform /override .py
$(top_builddir)/ipaplatform/override.py :
( cd $( top_builddir) /ipaplatform && make override.py)
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
2017-10-11 05:09:30 -05:00
acilint : $( GENERATED_PYTHON_FILES )
2020-03-27 05:45:17 -05:00
cd $( srcdir) ; \
PYTHONPATH = $( abspath $( top_srcdir) ) $( PYTHON) ./makeaci --validate
.PHONY : aci
aci : $( GENERATED_PYTHON_FILES )
cd $( srcdir) ; \
PYTHONPATH = $( abspath $( top_srcdir) ) $( PYTHON) ./makeaci
2016-11-08 02:55:13 -06:00
2016-11-08 07:26:09 -06:00
.PHONY : apilint
2017-10-11 05:09:30 -05:00
apilint : $( GENERATED_PYTHON_FILES )
2020-03-27 05:45:17 -05:00
cd $( srcdir) ; \
PYTHONPATH = $( abspath $( top_srcdir) ) $( PYTHON) ./makeapi --validate
.PHONY : api
api : $( GENERATED_PYTHON_FILES )
cd $( srcdir) ; \
PYTHONPATH = $( abspath $( top_srcdir) ) $( PYTHON) ./makeapi
2016-11-08 07:26:09 -06:00
2016-11-08 08:08:58 -06:00
.PHONY : polint
polint :
2018-02-14 10:00:44 -06:00
$( MAKE) -C $( srcdir) /po PYTHON = $( PYTHON) \
validate-src-strings validate-po test-gettext
2016-11-08 08:08:58 -06:00
2018-09-28 05:51:39 -05:00
.PHONY : rpmlint
rpmlint : freeipa .spec
rpmlint ./$<
2019-08-29 12:36:39 -05:00
# Try to load yml/yaml files via safe_load, which recognizes only standard
# YAML tags and cannot construct an arbitrary Python object.
# There are Jinja yaml templates, which differ from reqular ones. These
# files should be placed on skip list (YAML_TEMPLATE_FILES), otherwise
# safe_load fails.
2018-09-28 05:51:39 -05:00
.PHONY : yamllint
2019-08-29 12:36:39 -05:00
yamllint :
YAML_TEMPLATE_FILES = " \
$( top_srcdir) /ipatests/azure/templates/ipa-test-config-template.yaml \
" ; \
echo "jinja template files:" ; \
for YAML in $$ { YAML_TEMPLATE_FILES} ; do \
echo $$ { YAML} ; \
$( PYTHON) -c " import yaml; f = open(' $$ {YAML}'); yaml.safe_load(f); f.close() " >/dev/null 2>& 1 \
&& { echo Unexpected PASS of parsing yaml: $$ { YAML} . This file is a regular yaml.; exit 1; } ; \
done ; \
YAML_FILES = ` find $( top_srcdir) \
\( -name '*.yaml' -o \
-name '*.yml' \) \
$$ ( printf '! -path %s ' $$ { YAML_TEMPLATE_FILES} ) ` ; \
echo -e "\nlint yaml files" ; \
echo "-----------" ; \
for YAML in $$ { YAML_FILES} ; do \
echo $$ { YAML} ; \
$( PYTHON) -c " import yaml; f = open(' $$ {YAML}'); yaml.safe_load(f); f.close() " || { echo Your YAML file: $$ { YAML} has a wrong syntax or this is a Jinja template. In the latter clause, consider to add your YAML file to the YAML_TEMPLATE_FILES list in Makefile.am.; exit 1; } \
done ; \
echo "-----------"
2018-09-28 05:51:39 -05:00
2020-04-17 08:32:21 -05:00
# Build & lint documentation.
#
.PHONY : doclint
doclint :
2020-04-21 10:51:51 -05:00
@echo -e "\nBuild and lint documentation"
@echo "-----------"
$( MAKE) -C $( top_srcdir) /doc/ lint
2020-04-17 08:32:21 -05:00
@echo "-----------"
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
i f W I T H _ P Y L I N T
2019-04-18 08:55:00 -05:00
pylint : $( GENERATED_PYTHON_FILES ) ipasetup .py python_scripts
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` ; \
2020-02-17 07:24:56 -06:00
FILES = ` echo -e " $$ {FILES}\n $( AZURE_PYTHON_SCRIPT_SUBDIR) " ` ; \
echo -e " Pylint on $( PYTHON) is running over files:\n $$ {FILES}\nPlease wait ...\n " ; \
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
e n d i f # 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
i f W I T H _ J S L I N T
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; \
2017-08-21 04:40:33 -05:00
jsl -nologo -nosummary -nofilelisting -conf jsl.conf;
2016-11-08 02:24:51 -06:00
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
e n d i f # 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
@ M K _ I F E Q @ ( $( IPA_SERVER_WHEELS ) , 1 )
IPA_WHEEL_PACKAGES @MK_ASSIGN@ $( IPACLIENT_SUBDIRS) ipaplatform ipaserver
IPA_OMIT_INSTALL @MK_ASSIGN@ 0
@ M K _ E L S E @
IPA_WHEEL_PACKAGES @MK_ASSIGN@ $( IPACLIENT_SUBDIRS)
IPA_OMIT_INSTALL @MK_ASSIGN@ 1
@ M K _ E N D I F @
# 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
2018-02-22 06:38:41 -06:00
.PHONY : python_install
python_install :
for dir in $( PYTHON_SUBDIRS) ; do \
$( MAKE) $( AM_MAKEFLAGS) -C $$ { dir} install || exit 1; \
done
2019-04-18 08:55:00 -05:00
.PHONY : python_scripts
python_scripts :
for dir in $( PYTHON_SCRIPT_SUBDIRS) ; do \
$( MAKE) $( AM_MAKEFLAGS) -C $$ { dir} python_scripts_sub || exit 1; \
done
2016-11-14 03:27:15 -06:00
.PHONY :
strip-po :
$( MAKE) -C po strip-po
2018-08-22 10:15:55 -05:00
2018-10-23 05:40:40 -05:00
.PHONY : cov -scan
cov-scan :
$( MAKE) clean
@# analyse C code with workaround for missing _Float types
@# https://stackoverflow.com/questions/50434236/coverity-scan-fails-to-build-stdlib-h-with-gnu-source-defined
cov-build --dir cov-int $( MAKE) all \
CFLAGS = "-D_Float32=float -D_Float32x=double -D_Float64=double -D_Float64x='long double' -D_Float128='long double'"
@# remove build directories and analyse Python
rm -rf ipa*/build
cov-build --dir cov-int --no-command \
$( foreach d,$( PYTHON_SUBDIRS) ,--fs-capture-search $( d) )
@# analyze JS files
cov-build --dir cov-int --no-command --fs-capture-search install/ui
@# compress and upload
tar czvf freeipa.tgz cov-int
if [ -n " $$ {COVERITY_SCAN_TOKEN} " ] ; then \
curl --progress-bar --output /dev/null \
--form token = $$ { COVERITY_SCAN_TOKEN} \
--form email = scan@mg.freeipa.org \
--form file = @freeipa.tgz \
--form version = " $( VERSION) " \
--form description = "FreeIPA" \
"https://scan.coverity.com/builds?project=freeipa%2Ffreeipa" ; \
fi
2018-08-22 10:15:55 -05:00
PYTHON_SHEBANG = \
ipa \
makeaci \
makeapi \
$( NULL)
CLEANFILES = $( PYTHON_SHEBANG)
i n c l u d e $( top_srcdir ) / M a k e f i l e . p y t h o n s c r i p t s . a m