[pacman-dev] [RFC] [PATCH] makepkg: run locally with libtool style wrapper

Allan McRae allan at archlinux.org
Mon May 28 02:01:31 EDT 2012


Build makepkg to scripts/.lib/makepkg and add a wrapper script to
call it. This is not useful at the moment, but is the first step
to allowing makepkg to be split into smaller pieces.

Signed-off-by: Allan McRae <allan at archlinux.org>
---

This seems somewhat horrid, but I could not find a better way to do this.
Once this splitting is started, it will be easy(er) to overhaul the VCS
PKGBUILD system, and perhaps debugging symbol packages too...

Tested that building and running "makepkg" in the usual way works,
"make install" and "make distcheck" work.

 scripts/.gitignore            |    1 +
 scripts/Makefile.am           |   27 ++++++++++++++++++++++++++-
 scripts/makepkg-wrapper.sh.in |   23 +++++++++++++++++++++++
 3 files changed, 50 insertions(+), 1 deletion(-)
 create mode 100644 scripts/makepkg-wrapper.sh.in

diff --git a/scripts/.gitignore b/scripts/.gitignore
index 9e403bf..0310b9b 100644
--- a/scripts/.gitignore
+++ b/scripts/.gitignore
@@ -1,4 +1,5 @@
 makepkg
+makepkg-wrapper
 pacman-db-upgrade
 pacman-key
 pacman-optimize
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 9a08524..71d6cc4 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -4,7 +4,8 @@ AUTOMAKE_OPTIONS = std-options
 SUBDIRS = po
 
 bin_SCRIPTS = \
-	$(OURSCRIPTS)
+	$(OURSCRIPTS) \
+	makepkg-wrapper
 
 OURSCRIPTS = \
 	makepkg \
@@ -16,6 +17,7 @@ OURSCRIPTS = \
 
 EXTRA_DIST = \
 	makepkg.sh.in \
+	makepkg-wrapper.sh.in \
 	pacman-db-upgrade.sh.in \
 	pacman-key.sh.in \
 	pacman-optimize.sh.in \
@@ -32,6 +34,9 @@ LIBRARY = \
 # Files that should be removed, but which Automake does not know.
 MOSTLYCLEANFILES = $(bin_SCRIPTS)
 
+clean-local:
+	$(AM_V_at)rm -rf .lib
+
 if USE_GIT_VERSION
 GIT_VERSION := $(shell sh -c 'git describe --abbrev=4 --dirty | sed s/^v//')
 REAL_PACKAGE_VERSION = $(GIT_VERSION)
@@ -69,6 +74,7 @@ $(OURSCRIPTS): Makefile
 
 makepkg: \
 	$(srcdir)/makepkg.sh.in \
+	$(srcdir)/makepkg-wrapper.sh.in \
 	$(srcdir)/library/parseopts.sh
 
 pacman-db-upgrade: \
@@ -101,8 +107,27 @@ repo-elephant: $(srcdir)/repo-add.sh.in
 	$(RM) repo-elephant
 	$(LN_S) repo-add repo-elephant
 
+makepkg-wrapper: \
+	Makefile \
+	$(srcdir)/makepkg-wrapper.sh.in \
+	$(srcdir)/makepkg.sh.in \
+	$(srcdir)/library/parseopts.sh \
+	| makepkg
+	$(AM_V_at)$(MKDIR_P) .lib
+	$(AM_V_at)mv -f makepkg .lib
+	$(AM_V_at)$(RM) $@
+	$(AM_V_GEN)sed \
+		-e "s|@PWD[@]|$$(pwd)|" \
+		-e '1s|!/bin/bash|!$(BASH_SHELL)|g' \
+		$(srcdir)/$@.sh.in > $@
+	$(AM_V_at)chmod +x,a-w $@
+	$(AM_V_at)$(LN_S) makepkg-wrapper makepkg
+
 install-data-hook:
 	cd $(DESTDIR)$(bindir) && \
+		$(RM) makepkg makepkg-wrapper
+	$(INSTALL) .lib/makepkg $(DESTDIR)$(bindir)/makepkg
+	cd $(DESTDIR)$(bindir) && \
 		$(RM) repo-elephant && \
 		( $(LN_S) repo-add repo-elephant || \
 		ln repo-add repo-elephant || \
diff --git a/scripts/makepkg-wrapper.sh.in b/scripts/makepkg-wrapper.sh.in
new file mode 100644
index 0000000..70cda93
--- /dev/null
+++ b/scripts/makepkg-wrapper.sh.in
@@ -0,0 +1,23 @@
+#!/bin/bash
+#
+#   makepkg - a wrapper for running the real makepkg in the source tree
+#
+#   Copyright (c) 2012 Pacman Development Team <pacman-dev at archlinux.org>
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+DIR=@PWD@
+
+LIBRARY=$DIR/libmakepkg $DIR/.lib/makepkg "$@"
-- 
1.7.10.2



More information about the pacman-dev mailing list