[PATCH 3/3] Allow make targets to be run outside of $srcdir
David Shea
dshea at redhat.com
Thu Sep 12 19:22:31 UTC 2013
---
Makefile.am | 98 +++++++++++++++++++++++++++--------------------------
configure.ac | 2 +-
scripts/makeupdates | 52 ++++++++++++++++++----------
3 files changed, 85 insertions(+), 67 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 756131b..363bdd0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -47,14 +47,14 @@ tag:
@echo "Tagged as $(ARCHIVE_TAG)"
po-pull:
- rm -f po/en at boldquot.gmo po/en at boldquot.po
- rm -f po/en at quot.gmo po/en at quot.po
+ rm -f $(srcdir)/po/en at boldquot.gmo $(srcdir)/po/en at boldquot.po
+ rm -f $(srcdir)/po/en at quot.gmo $(srcdir)/po/en at quot.po
rpm -q transifex-client &>/dev/null || ( echo "need to run: yum install transifex-client"; exit 1 )
tx pull $(TX_PULL_ARGS)
scratch: po-pull
$(MAKE) ARCHIVE_TAG=HEAD dist
- git checkout -- po/$(PACKAGE_NAME).pot
+ git checkout -- $(srcdir)/po/$(PACKAGE_NAME).pot
scratch-bumpver: po-pull
@opts="-n $(PACKAGE_NAME) -v $(PACKAGE_VERSION) -r $(PACKAGE_RELEASE) -b $(PACKAGE_BUGREPORT)" ; \
@@ -67,11 +67,11 @@ scratch-bumpver: po-pull
if [ ! -z "$(BZDEBUG)" ]; then \
opts="$${opts} -d" ; \
fi ; \
- scripts/makebumpver $${opts} || exit 1 ; \
+ ( cd $(srcdir) && scripts/makebumpver $${opts} ) || exit 1 ; \
$(MAKE) -C po $(PACKAGE_NAME).pot-update ;
release:
- $(MAKE) dist && $(MAKE) tag && git checkout -- po/$(PACKAGE_NAME).pot
+ $(MAKE) dist && $(MAKE) tag && git checkout -- $(srcdir)/po/$(PACKAGE_NAME).pot
api:
doxygen docs/api.cfg
@@ -87,12 +87,14 @@ bumpver: po-pull
if [ ! -z "$(BZDEBUG)" ]; then \
opts="$${opts} -d" ; \
fi ; \
- scripts/makebumpver $${opts} || exit 1 ; \
- $(MAKE) -C po $(PACKAGE_NAME).pot-update ; \
+ ( cd $(srcdir) && scripts/makebumpver $${opts} ) || exit 1 ; \
+ $(MAKE) -C po $(PACKAGE_NAME).pot-update && \
tx push $(TX_PUSH_ARGS)
install-buildrequires:
- yum install $$(grep BuildRequires: anaconda.spec.in | cut -d ' ' -f 2)
+ srcdir="$(srcdir)" && \
+ : $${srcdir:=.} && \
+ yum install $$(grep BuildRequires: $${srcdir}/anaconda.spec.in | cut -d ' ' -f 2)
# Generate an updates.img based on the changed files since the release
# was tagged. Updates are copied to ./updates-img and then the image is
@@ -105,59 +107,59 @@ updates:
if [ "$${keep}" = "Y" ]; then \
opts="$${opts} -k" ; \
fi ; \
- scripts/makeupdates $${opts}
+ ( cd $(srcdir) && scripts/makeupdates $${opts} -b '$(abs_builddir)' )
# UNIT TESTING TARGETS
unittests-logpicker:
- PYTHONPATH=pyanaconda/isys/.libs:tests/:.:utils/ nosetests -v old_tests/logpicker_test
+ PYTHONPATH=$(builddir)/pyanaconda/isys/.libs:tests/:$(srcdir):utils/ nosetests -v old_tests/logpicker_test
# GUI TESTING
runspoke:
- ANACONDA_DATA=${PWD}/data \
- ANACONDA_WIDGETS_OVERRIDES=${PWD}/widgets/python \
- ANACONDA_WIDGETS_DATA=${PWD}/widgets/data \
- ANACONDA_INSTALL_CLASSES=${PWD}/pyanaconda/installclasses \
- PYTHONPATH=.:pyanaconda/isys/.libs:widgets/python/:widgets/src/.libs/ \
- LD_LIBRARY_PATH=widgets/src/.libs \
- UIPATH=pyanaconda/ui/gui/ \
- GI_TYPELIB_PATH=widgets/src/ \
- pyanaconda/ui/gui/tools/run-spoke.py ${SPOKE_MODULE} ${SPOKE_CLASS}
+ ANACONDA_DATA=$(srcdir)/data \
+ ANACONDA_WIDGETS_OVERRIDES=$(srcdir)/widgets/python \
+ ANACONDA_WIDGETS_DATA=$(srcdir)/widgets/data \
+ ANACONDA_INSTALL_CLASSES=$(srcdir)/pyanaconda/installclasses \
+ PYTHONPATH=$(srcdir):$(builddir)/pyanaconda/isys/.libs:$(srcdir)/widgets/python/:$(builddir)/widgets/src/.libs/ \
+ LD_LIBRARY_PATH=$(builddir)/widgets/src/.libs \
+ UIPATH=$(srcdir)/pyanaconda/ui/gui/ \
+ GI_TYPELIB_PATH=$(builddir)/widgets/src/ \
+ $(srcdir)/pyanaconda/ui/gui/tools/run-spoke.py ${SPOKE_MODULE} ${SPOKE_CLASS}
runhub:
- ANACONDA_DATA=${PWD}/data \
- ANACONDA_WIDGETS_OVERRIDES=${PWD}/widgets/python \
- ANACONDA_WIDGETS_DATA=${PWD}/widgets/data \
- ANACONDA_INSTALL_CLASSES=${PWD}/pyanaconda/installclasses \
- PYTHONPATH=.:pyanaconda/isys/.libs:widgets/python/:widgets/src/.libs/ \
- LD_LIBRARY_PATH=widgets/src/.libs \
- UIPATH=pyanaconda/ui/gui/ \
- GI_TYPELIB_PATH=widgets/src/ \
- pyanaconda/ui/gui/tools/run-hub.py ${HUB_MODULE} ${HUB_CLASS}
+ ANACONDA_DATA=$(srcdir)/data \
+ ANACONDA_WIDGETS_OVERRIDES=$(srcdir)/widgets/python \
+ ANACONDA_WIDGETS_DATA=$(srcdir)/widgets/data \
+ ANACONDA_INSTALL_CLASSES=$(srcdir)/pyanaconda/installclasses \
+ PYTHONPATH=$(srcdir):$(builddir)/pyanaconda/isys/.libs:$(srcdir)/widgets/python/:$(builddir)/widgets/src/.libs/ \
+ LD_LIBRARY_PATH=$(builddir)/widgets/src/.libs \
+ UIPATH=$(srcdir)/pyanaconda/ui/gui/ \
+ GI_TYPELIB_PATH=$(builddir)/widgets/src/ \
+ $(srcdir)/pyanaconda/ui/gui/tools/run-hub.py ${HUB_MODULE} ${HUB_CLASS}
runtextspoke:
- ANACONDA_DATA=${PWD}/data \
- ANACONDA_INSTALL_CLASSES=${PWD}/pyanaconda/installclasses \
- PYTHONPATH=.:pyanaconda/isys/.libs:widgets/python/:widgets/src/.libs/ \
- LD_LIBRARY_PATH=widgets/src/.libs \
- pyanaconda/ui/tui/tools/run-text-spoke.py ${SPOKE_MODULE} ${SPOKE_CLASS}
+ ANACONDA_DATA=$(srcdir)/data \
+ ANACONDA_INSTALL_CLASSES=$(srcdir)/pyanaconda/installclasses \
+ PYTHONPATH=$(srcdir):$(builddir)/pyanaconda/isys/.libs:$(srcdir)/widgets/python/:$(builddir)/widgets/src/.libs/ \
+ LD_LIBRARY_PATH=$(builddir)/widgets/src/.libs \
+ $(srcdir)/pyanaconda/ui/tui/tools/run-text-spoke.py ${SPOKE_MODULE} ${SPOKE_CLASS}
runtexthub:
- ANACONDA_DATA=${PWD}/data \
- ANACONDA_INSTALL_CLASSES=${PWD}/pyanaconda/installclasses \
- PYTHONPATH=.:pyanaconda/isys/.libs:widgets/python/:widgets/src/.libs/ \
- LD_LIBRARY_PATH=widgets/src/.libs \
- pyanaconda/ui/tui/tools/run-text-hub.py ${HUB_MODULE} ${HUB_CLASS}
+ ANACONDA_DATA=$(srcdir)/data \
+ ANACONDA_INSTALL_CLASSES=$(srcdir)/pyanaconda/installclasses \
+ PYTHONPATH=$(srcdir):$(builddir)/pyanaconda/isys/.libs:$(srcdir)/widgets/python/:$(builddir)/widgets/src/.libs/ \
+ LD_LIBRARY_PATH=$(builddir)/widgets/src/.libs \
+ $(srcdir)/pyanaconda/ui/tui/tools/run-text-hub.py ${HUB_MODULE} ${HUB_CLASS}
runglade:
- ANACONDA_DATA=${PWD}/data \
- ANACONDA_WIDGETS_OVERRIDES=${PWD}/widgets/python \
- ANACONDA_WIDGETS_DATA=${PWD}/widgets/data \
- ANACONDA_INSTALL_CLASSES=${PWD}/pyanaconda/installclasses \
- PYTHONPATH=.:pyanaconda/isys/.libs:widgets/python/:widgets/src/.libs/ \
- LD_LIBRARY_PATH=widgets/src/.libs \
- UIPATH=pyanaconda/ui/gui/ \
- GI_TYPELIB_PATH=widgets/src/ \
- GLADE_CATALOG_SEARCH_PATH=${PWD}/widgets/glade \
- GLADE_MODULE_SEARCH_PATH=${PWD}/widgets/src/.libs \
+ ANACONDA_DATA=$(srcdir)/data \
+ ANACONDA_WIDGETS_OVERRIDES=$(srcdir)/widgets/python \
+ ANACONDA_WIDGETS_DATA=$(srcdir)/widgets/data \
+ ANACONDA_INSTALL_CLASSES=$(srcdir)/pyanaconda/installclasses \
+ PYTHONPATH=$(srcdir):$(builddir)/pyanaconda/isys/.libs:$(srcdir)/widgets/python/:$(builddir)/widgets/src/.libs/ \
+ LD_LIBRARY_PATH=$(builddir)/widgets/src/.libs \
+ UIPATH=$(srcdir)/pyanaconda/ui/gui/ \
+ GI_TYPELIB_PATH=$(builddir)/widgets/src/ \
+ GLADE_CATALOG_SEARCH_PATH=$(srcdir)/widgets/glade \
+ GLADE_MODULE_SEARCH_PATH=$(builddir)/widgets/src/.libs \
glade ${GLADE_FILE}
diff --git a/configure.ac b/configure.ac
index 624adad..2be4698 100644
--- a/configure.ac
+++ b/configure.ac
@@ -208,7 +208,7 @@ CFLAGS="`cflags_filter $CFLAGS`"
LIBS=
# Get the release number from the spec file
-rel="`awk '/Release:/ { split($2, r, "%"); print r[[1]] }' anaconda.spec.in`"
+rel="`awk '/Release:/ { split($2, r, "%"); print r[[1]] }' $srcdir/anaconda.spec.in`"
AC_SUBST(PACKAGE_RELEASE, [$rel])
# Perform arch related tests
diff --git a/scripts/makeupdates b/scripts/makeupdates
index 273428a..f34b4c7 100755
--- a/scripts/makeupdates
+++ b/scripts/makeupdates
@@ -312,15 +312,22 @@ def isysChanged(tag):
def widgetsChanged(tag):
return _compilableChanged(tag, 'widgets')
-def copyUpdatedIsys(updates, cwd):
- os.chdir(cwd)
-
- if not os.path.isfile('Makefile'):
+def checkAutotools(srcdir, builddir):
+ # Assumes that cwd is srcdir
+ if not os.path.isfile(os.path.join(builddir, 'Makefile')):
if not os.path.isfile('configure'):
os.system('./autogen.sh')
- os.system('./configure --prefix=`rpm --eval %_prefix`')
+ os.chdir(builddir)
+ os.system(os.path.join(srcdir, 'configure') + ' --prefix=`rpm --eval %_prefix` --enable-gtk-doc --enable-introspection')
+ os.chdir(srcdir)
+
+def copyUpdatedIsys(updates, srcdir, builddir):
+ os.chdir(srcdir)
+ print("copyUpdatedIsys BUILDDIR %s" % builddir)
+
+ checkAutotools(srcdir, builddir)
- os.system('make -j %d' % multiprocessing.cpu_count())
+ os.system('make -C %s -j %d' % (builddir, multiprocessing.cpu_count()))
# Updates get overlaid onto the runtime filesystem. Anaconda expects them
# to be in /run/install/updates, so put them in
@@ -332,13 +339,13 @@ def copyUpdatedIsys(updates, cwd):
if not os.path.isdir(tmpupdates):
os.makedirs(tmpupdates)
- isysmodule = os.path.realpath(cwd + '/pyanaconda/isys/.libs/_isys.so')
+ isysmodule = os.path.realpath(os.path.join(builddir,'pyanaconda/isys/.libs/_isys.so'))
if os.path.isfile(isysmodule):
shutil.copy2(isysmodule, tmpupdates)
-def copyUpdatedWidgets(updates, cwd):
- os.chdir(cwd)
+def copyUpdatedWidgets(updates, srcdir, builddir):
+ os.chdir(srcdir)
if os.path.isdir("/lib64"):
libdir = "/lib64/"
@@ -351,22 +358,19 @@ def copyUpdatedWidgets(updates, cwd):
if not os.path.isdir(updates + libdir + "girepository-1.0"):
os.makedirs(updates + libdir + "girepository-1.0")
- if not os.path.isfile('Makefile'):
- if not os.path.isfile('configure'):
- os.system('./autogen.sh')
- os.system('./configure --prefix=`rpm --eval %_prefix` --enable-gtk-doc --enable-introspection')
+ checkAutotools(srcdir, builddir)
- os.system('make')
+ os.system('make -C %s' % builddir)
files = ["libAnacondaWidgets.so", "libAnacondaWidgets.so.1", "libAnacondaWidgets.so.1.0.0"]
for f in files:
- path = os.path.normpath(cwd + "/widgets/src/.libs/" + f)
+ path = os.path.normpath(builddir + "/widgets/src/.libs/" + f)
if os.path.islink(path) and not os.path.exists(updates + libdir + os.path.basename(path)):
os.symlink(os.readlink(path), updates + libdir + os.path.basename(path))
elif os.path.isfile(path):
shutil.copy2(path, updates + libdir)
- typelib = os.path.realpath(cwd + "/widgets/src/AnacondaWidgets-1.0.typelib")
+ typelib = os.path.realpath(builddir + "/widgets/src/AnacondaWidgets-1.0.typelib")
if os.path.isfile(typelib):
shutil.copy2(typelib, updates + libdir + "girepository-1.0")
@@ -782,6 +786,9 @@ def main():
parser.add_argument('-f', '--fetch', action='store', type=str, metavar="ARCH",
help='autofetch new dependencies from Koji for ARCH')
+ parser.add_argument('-b', '--builddir', action='store', type=str,
+ metavar='BUILDDIR', help='build directory for shared objects')
+
args = parser.parse_args()
if not os.path.isfile(configure) and not os.path.isfile(spec):
@@ -796,6 +803,15 @@ def main():
args.tag = getArchiveTagOffset(configure, spec, args.offset)
sys.stdout.write("Using tag: %s\n" % args.tag)
+ if args.builddir:
+ if os.path.isabs(args.builddir):
+ builddir = args.builddir
+ else:
+ builddir = os.path.join(cwd, args.builddir)
+ else:
+ builddir = cwd
+ print("BUILDDIR %s" % builddir)
+
if not os.path.isdir(updates):
os.makedirs(updates)
@@ -803,10 +819,10 @@ def main():
if args.compile:
if isysChanged(args.tag):
- copyUpdatedIsys(updates, cwd)
+ copyUpdatedIsys(updates, cwd, builddir)
if widgetsChanged(args.tag):
- copyUpdatedWidgets(updates, cwd)
+ copyUpdatedWidgets(updates, cwd, builddir)
if args.add_rpms:
# as using -a or --add mutltiple times
--
1.8.3.1
More information about the anaconda-patches
mailing list