[apparmor] [PATCH] towards a common build infrastructure

Kees Cook kees at ubuntu.com
Sat May 5 21:38:15 UTC 2012


I'd like to start trying to move to a common autoconf infrastructure where
the build elements are selected at configure time, etc. This will let us
get rid of the unusual common/Make.rules logic, provide cleaner common
build targets, potential for easier parallelization of the build, etc.

This is the first step, which moves the configure.ac from
libraries/libapparmor down into the top level directory. Currently
only libraries/libapparmor is automake-ified, but with the autoconf
infrastructure moved, we can start adding directories one at a time
until all the by-hand Makefiles have been replaced.

To help with with transition, I've added some by-hand Makefiles to
needed subdirectories so that the top-level "make", "make check", and
"make clean"s will get passed all the way down.

Signed-off-by: Kees Cook <kees at ubuntu.com>

=== modified file '.bzrignore'
--- .bzrignore	2011-08-09 08:17:42 +0000
+++ .bzrignore	2012-05-05 20:46:57 +0000
@@ -1,4 +1,18 @@
 apparmor-*
+aclocal.m4
+autom4te.cache
+compile
+config.guess
+config.log
+config.status
+config.sub
+configure
+depcomp
+install-sh
+libtool
+ltmain.sh
+missing
+ylwrap
 parser/po/*.mo
 parser/af_names.h
 parser/cap_names.h
@@ -25,23 +39,10 @@
 parser/techdoc.log
 parser/techdoc.pdf
 parser/techdoc.toc
+profiles/common
 libraries/libapparmor/Makefile
 libraries/libapparmor/Makefile.in
-libraries/libapparmor/aclocal.m4
 libraries/libapparmor/audit.log
-libraries/libapparmor/autom4te.cache
-libraries/libapparmor/compile
-libraries/libapparmor/config.guess
-libraries/libapparmor/config.log
-libraries/libapparmor/config.status
-libraries/libapparmor/config.sub
-libraries/libapparmor/configure
-libraries/libapparmor/depcomp
-libraries/libapparmor/install-sh
-libraries/libapparmor/libtool
-libraries/libapparmor/ltmain.sh
-libraries/libapparmor/missing
-libraries/libapparmor/ylwrap
 libraries/libapparmor/doc/Makefile
 libraries/libapparmor/doc/Makefile.in
 libraries/libapparmor/doc/*.2

=== modified file 'Makefile'
--- Makefile	2012-03-22 20:17:48 +0000
+++ Makefile	2012-05-05 21:14:28 +0000
@@ -2,15 +2,17 @@
 #
 OVERRIDE_TARBALL=yes
 
+all: build
+
 include common/Make.rules
 
-DIRS=parser \
-     profiles \
-     utils \
-     libraries/libapparmor \
-     changehat/mod_apparmor \
-     changehat/pam_apparmor \
-     tests
+SUBDIRS=\
+	libraries \
+	utils \
+	parser \
+	changehat \
+	profiles \
+	tests
 
 REPO_URL?=lp:apparmor
 # alternate possibilities to export from
@@ -25,6 +27,24 @@
 # embedded in ${VERSION}
 TAG_VERSION=$(subst ~,-,${VERSION})
 
+# Support the top-level automake targets during transition.
+.PHONY: am--refresh
+	for dir in libraries/libapparmor; do \
+		make -C $$dir am--refresh || exit 1; \
+	done
+
+.PHONY: build
+build: configure
+	for dir in $(SUBDIRS); do \
+		make -C $$dir || exit 1; \
+	done
+
+.PHONY: check
+check:
+	for dir in $(SUBDIRS); do \
+		make -C $$dir check || exit 1; \
+	done
+
 .PHONY: tarball
 tarball: clean
 	REPO_VERSION=`$(value REPO_VERSION_CMD)` ; \
@@ -50,15 +70,14 @@
 .PHONY: clean
 clean:
 	-rm -rf ${RELEASE_DIR} ./apparmor-${VERSION}~*
-	for dir in $(DIRS); do \
+	for dir in $(SUBDIRS); do \
 		make -C $$dir clean; \
 	done
 
 .PHONY: setup
 setup:
-	cd $(__SETUP_DIR)/libraries/libapparmor && ./autogen.sh
+	cd $(__SETUP_DIR) && ./autogen.sh
 
 .PHONY: tag
 tag:
 	bzr tag apparmor_${TAG_VERSION}
-

=== modified file 'README'
--- README	2011-09-12 20:30:17 +0000
+++ README	2012-05-05 20:48:29 +0000
@@ -58,9 +58,6 @@
 To build and install AppArmor userspace on your system, build and install in
 the following order.
 
-
-libapparmor:
-$ cd ./libraries/libapparmor
 $ sh ./autogen.sh
 $ sh ./configure --prefix=/usr --with-perl	# see below
 $ make
@@ -71,40 +68,6 @@
  and --with-ruby, to generate python and ruby bindings to libapparmor,
  respectively.]
 
-
-Utilities:
-$ cd utils
-$ make
-$ make check
-$ make install
-
-
-parser:
-$ cd parser
-$ make
-$ make check
-$ make install
-
-
-Apache mod_apparmor:
-$ cd changehat/mod_apparmor
-$ make		# depends on libapparmor having been built first
-$ make install
-
-
-PAM AppArmor:
-$ cd changehat/pam_apparmor
-$ make		# depends on libapparmor having been built first
-$ make install
-
-
-Profiles:
-$ cd profiles
-$ make
-$ make check	# depends on the parser having been built first
-$ make install
-
-
 [Note that for the parser and the utils, if you only with to build/use
  some of the locale languages, you can override the default by passing
  the LANGS arguments to make; e.g. make all install "LANGS=en_US fr".]
@@ -183,4 +146,3 @@
 -----------------------------------------------
 
 TODO
-

=== renamed file 'libraries/libapparmor/autogen.sh' => 'autogen.sh'
=== added file 'changehat/Makefile'
--- changehat/Makefile	1970-01-01 00:00:00 +0000
+++ changehat/Makefile	2012-05-05 21:14:51 +0000
@@ -0,0 +1,21 @@
+SUBDIRS=mod_apparmor pam_apparmor
+
+all: build
+
+.PHONY: build
+build:
+	for dir in $(SUBDIRS); do \
+		make -C $$dir || exit 1; \
+	done
+
+.PHONY: check
+check:
+	for dir in $(SUBDIRS); do \
+		make -C $$dir check || exit 1; \
+	done
+
+.PHONY: clean
+clean:
+	for dir in $(SUBDIRS); do \
+		make -C $$dir clean || exit 1; \
+	done

=== modified file 'changehat/mod_apparmor/Makefile'
--- changehat/mod_apparmor/Makefile	2011-03-18 06:32:34 +0000
+++ changehat/mod_apparmor/Makefile	2012-05-05 21:29:24 +0000
@@ -62,3 +62,7 @@
 clean: _clean
 	rm -rf .libs
 	rm -f *.la *.lo *.so *.o *.slo Make.rules
+
+.PHONY: check
+check:
+	@echo "'check' target unimplemented"

=== modified file 'changehat/pam_apparmor/Makefile'
--- changehat/pam_apparmor/Makefile	2011-02-08 15:21:20 +0000
+++ changehat/pam_apparmor/Makefile	2012-05-05 21:29:19 +0000
@@ -47,9 +47,12 @@
 install: $(NAME).so
 	install -m 755 -d $(SECDIR)
 	install -m 555 $(NAME).so $(SECDIR)/
-	
+
 .PHONY: clean
 clean: ${MAKE_RULES}
 	rm -f core core.* *.so *.o *.s *.a *~
 	rm -f ${NAME}-*.tar.gz Make.rules
 
+.PHONY: check
+check:
+	@echo "'check' target unimplemented"

=== renamed file 'libraries/libapparmor/configure.in' => 'configure.ac'
--- libraries/libapparmor/configure.in	2010-10-07 22:37:30 +0000
+++ configure.ac	2012-05-05 21:35:40 +0000
@@ -1,11 +1,10 @@
 m4_define([__apparmor_version], m4_sinclude(common/Version))
-m4_ifdef(__apparmor_version, , m4_define([__apparmor_version], m4_sinclude(../../common/Version)))
 m4_define([__aalen], decr(len(__apparmor_version)))
 m4_define([apparmor_version], m4_substr(__apparmor_version, 0, __aalen))
 
-AC_INIT(configure.in)
+AC_INIT(configure.ac)
 
-AM_INIT_AUTOMAKE(libapparmor1, apparmor_version)
+AM_INIT_AUTOMAKE(apparmor, apparmor_version)
 
 AM_PROG_LEX
 AC_PROG_YACC
@@ -13,8 +12,20 @@
 
 AC_PATH_PROG([SWIG], [swig])
 
-sinclude(m4/ac_pod2man.m4)
-PROG_POD2MAN
+AC_CHECK_PROG(POD2MAN,pod2man,pod2man,no)
+if test "$POD2MAN" = "no"; then
+    AC_MSG_ERROR([
+The pod2man program was not found in the default path.  pod2man is part of
+Perl, which can be retrieved from:
+
+    http://www.perl.com/
+
+The latest version at this time is 5.6.1; it is available packaged as the
+following archive:
+
+    http://www.perl.com/CPAN/src/stable.tar.gz
+])
+fi
 
 AC_MSG_CHECKING(Checking for Python)
 AC_ARG_WITH(python,
@@ -70,17 +81,17 @@
 AM_PROG_LIBTOOL
 
 AC_OUTPUT(
-Makefile
-doc/Makefile
-src/Makefile
-swig/Makefile
-swig/perl/Makefile
-swig/perl/Makefile.PL
-swig/python/Makefile
-swig/python/setup.py
-swig/ruby/Makefile
-testsuite/Makefile
-testsuite/config/Makefile
-testsuite/libaalogparse.test/Makefile
-testsuite/lib/Makefile
+libraries/libapparmor/Makefile
+libraries/libapparmor/doc/Makefile
+libraries/libapparmor/src/Makefile
+libraries/libapparmor/swig/Makefile
+libraries/libapparmor/swig/perl/Makefile
+libraries/libapparmor/swig/perl/Makefile.PL
+libraries/libapparmor/swig/python/Makefile
+libraries/libapparmor/swig/python/setup.py
+libraries/libapparmor/swig/ruby/Makefile
+libraries/libapparmor/testsuite/Makefile
+libraries/libapparmor/testsuite/config/Makefile
+libraries/libapparmor/testsuite/libaalogparse.test/Makefile
+libraries/libapparmor/testsuite/lib/Makefile
 )

=== added file 'libraries/Makefile'
--- libraries/Makefile	1970-01-01 00:00:00 +0000
+++ libraries/Makefile	2012-05-05 21:14:40 +0000
@@ -0,0 +1,21 @@
+SUBDIRS=libapparmor
+
+all: build
+
+.PHONY: build
+build:
+	for dir in $(SUBDIRS); do \
+		make -C $$dir || exit 1; \
+	done
+
+.PHONY: check
+check:
+	for dir in $(SUBDIRS); do \
+		make -C $$dir check || exit 1; \
+	done
+
+.PHONY: clean
+clean:
+	for dir in $(SUBDIRS); do \
+		make -C $$dir clean || exit 1; \
+	done

=== modified file 'libraries/libapparmor/Makefile.am'
--- libraries/libapparmor/Makefile.am	2008-05-19 22:48:31 +0000
+++ libraries/libapparmor/Makefile.am	2012-05-05 21:06:26 +0000
@@ -21,5 +21,5 @@
 	svn export -r $(REPO_VERSION) $(REPO_URL) $(RELEASE_DIR)
 	$(SVNTAR) -f $(SVNTARBALL) $(RELEASE_DIR)
 	rm -rf $(RELEASE_DIR)
-	
+
 EXTRA_DIST = AUTHORS ChangeLog COPYING.LGPL INSTALL NEWS README

=== removed file 'libraries/libapparmor/m4/ac_pod2man.m4'
--- libraries/libapparmor/m4/ac_pod2man.m4	2009-05-12 21:58:54 +0000
+++ libraries/libapparmor/m4/ac_pod2man.m4	1970-01-01 00:00:00 +0000
@@ -1,16 +0,0 @@
-AC_DEFUN([PROG_POD2MAN],[
-   AC_CHECK_PROG(POD2MAN,pod2man,pod2man,no)
-   if test "$POD2MAN" = "no"; then
-      AC_MSG_ERROR([
-The pod2man program was not found in the default path.  pod2man is part of
-Perl, which can be retrieved from:
-
-    http://www.perl.com/
-
-The latest version at this time is 5.6.1; it is available packaged as the
-following archive:
-
-    http://www.perl.com/CPAN/src/stable.tar.gz
-])
-   fi
-])

=== modified file 'libraries/libapparmor/src/Makefile.am'
--- libraries/libapparmor/src/Makefile.am	2012-04-25 19:15:19 +0000
+++ libraries/libapparmor/src/Makefile.am	2012-05-05 21:07:03 +0000
@@ -24,10 +24,11 @@
 
 libapparmor_la_SOURCES = grammar.y libaalogparse.c kernel_interface.c scanner.c
 libapparmor_la_LDFLAGS = -version-info 1:2:0 -XCClinker -dynamic \
-	-Wl,--version-script=$(top_srcdir)/src/libapparmor.map -Wl,-soname=libapparmor.so.1
+	-Wl,--version-script=$(srcdir)/libapparmor.map -Wl,-soname=libapparmor.so.1
 
 libimmunix_la_SOURCES = kernel_interface.c libimmunix_warning.c
-libimmunix_la_LDFLAGS = -version-info 1:2:0 -Wl,--version-script=$(top_srcdir)/src/libapparmor.map -Wl,-soname=libimmunix.so.1
+libimmunix_la_LDFLAGS = -version-info 1:2:0 \
+	-Wl,--version-script=$(srcdir)/libapparmor.map -Wl,-soname=libimmunix.so.1
 
 tst_aalogmisc_SOURCES = tst_aalogmisc.c
 tst_aalogmisc_LDADD = .libs/libapparmor.a

=== modified file 'libraries/libapparmor/swig/java/Makefile.am'
--- libraries/libapparmor/swig/java/Makefile.am	2008-05-19 22:48:31 +0000
+++ libraries/libapparmor/swig/java/Makefile.am	2012-05-05 21:22:22 +0000
@@ -4,18 +4,18 @@
 
 all-local: apparmorlogparse_wrap.o
 	$(CC) -module apparmorlogparse_wrap.o -o libaalogparse.so
-        
+
 apparmorlogparse_wrap.o: apparmorlogparse_wrap.c
-	$(CC) -c apparmorlogparse_wrap.c $(CFLAGS) -I../../src -I/usr/include/classpath  -fno-strict-aliasing -o apparmorlogparse_wrap.o
-        
+	$(CC) -c apparmorlogparse_wrap.c $(CFLAGS) -I$(srcdir)/../../src -I/usr/include/classpath  -fno-strict-aliasing -o apparmorlogparse_wrap.o
+
 clean-local:
 	rm -rf org
 
-apparmorlogparse_wrap.c: org/aalogparse ../SWIG/*.i
-	$(SWIG) -java -I../SWIG -I../../src -outdir org/aalogparse \
+apparmorlogparse_wrap.c: org/aalogparse $(srcdir)/../SWIG/*.i
+	$(SWIG) -java -I$(srcdir)/../SWIG -I$(srcdir)/../../src -outdir org/aalogparse \
 		-package org.aalogparse -o apparmorlogparse_wrap.c libaalogparse.i
 
 org/aalogparse:
 	mkdir -p org/aalogparse
 
-EXTRA_DIST = $(BUILT_SOURCES) 
+EXTRA_DIST = $(BUILT_SOURCES)

=== modified file 'libraries/libapparmor/swig/perl/Makefile.PL.in'
--- libraries/libapparmor/swig/perl/Makefile.PL.in	2012-04-25 19:15:19 +0000
+++ libraries/libapparmor/swig/perl/Makefile.PL.in	2012-05-05 21:04:50 +0000
@@ -10,8 +10,8 @@
 	'FIRST_MAKEFILE' => 'Makefile.perl',
 	'ABSTRACT' => q[Perl interface to AppArmor] ,
 	'VERSION' => q[@VERSION@],
-	'INC' => q[@CPPFLAGS@ -I at top_srcdir@/src @CFLAGS@],
-	'LIBS' => q[-L at top_builddir@/src/.libs/ -lapparmor @LIBS@],
+	'INC' => q[@CPPFLAGS@ -I at srcdir@/../../src @CFLAGS@],
+	'LIBS' => q[-L at builddir@/../../src/.libs/ -lapparmor @LIBS@],
 	'OBJECT' => 'libapparmor_wrap.o', # $(OBJ_EXT)
 ) ;
 

=== modified file 'libraries/libapparmor/swig/python/setup.py.in'
--- libraries/libapparmor/swig/python/setup.py.in	2011-11-10 17:22:09 +0000
+++ libraries/libapparmor/swig/python/setup.py.in	2012-05-05 21:24:19 +0000
@@ -12,8 +12,8 @@
       packages		= [ 'LibAppArmor' ],
       ext_package	= 'LibAppArmor',
       ext_modules	= [Extension('_LibAppArmor', ['libapparmor_wrap.c'],
-					include_dirs=['@top_srcdir@/src'],
-					extra_link_args = '-L at top_builddir@/src/.libs -lapparmor'.split(),
-# static:				extra_link_args = '@top_builddir@/src/.libs/libapparmor.a'.split(),
+					include_dirs=['@srcdir@/../../src'],
+					extra_link_args = '-L at builddir@/../../src/.libs -lapparmor'.split(),
+# static:				extra_link_args = '@builddir@/../../src/.libs/libapparmor.a'.split(),
 			)],
       )

=== modified file 'libraries/libapparmor/swig/ruby/Makefile.am'
--- libraries/libapparmor/swig/ruby/Makefile.am	2009-05-12 21:56:56 +0000
+++ libraries/libapparmor/swig/ruby/Makefile.am	2012-05-05 21:21:20 +0000
@@ -4,12 +4,12 @@
 noinst_DATA =           LibAppArmor.so
 
 LibAppArmor_wrap.c : $(srcdir)/../SWIG/libapparmor.i
-	$(SWIG) -ruby -module LibAppArmor -I$(top_srcdir)/src -o $@ $(srcdir)/../SWIG/libapparmor.i
+	$(SWIG) -ruby -module LibAppArmor -I$(srcdir)/../../src -o $@ $(srcdir)/../SWIG/libapparmor.i
 
 MOSTLYCLEANFILES=LibAppArmor_wrap.c
 
 Makefile.ruby: extconf.rb
-	PREFIX=$(prefix) $(RUBY) $< --with-LibAppArmor-include=$(top_srcdir)/src
+	PREFIX=$(prefix) $(RUBY) $< --with-LibAppArmor-include=$(srcdir)/../../src
 
 LibAppArmor.so: LibAppArmor_wrap.c Makefile.ruby
 	$(MAKE) -fMakefile.ruby

=== modified file 'libraries/libapparmor/testsuite/Makefile.am'
--- libraries/libapparmor/testsuite/Makefile.am	2012-04-25 19:15:19 +0000
+++ libraries/libapparmor/testsuite/Makefile.am	2012-05-05 21:18:44 +0000
@@ -2,7 +2,7 @@
 PACKAGE = libaalogparse
 AUTOMAKE_OPTIONS = dejagnu
 
-INCLUDES = -I. -I$(top_srcdir)/src
+INCLUDES = -I. -I$(srcdir)/../src
 
 AM_CPPFLAGS = $(DEBUG_FLAGS) -DLOCALEDIR=\"${localedir}\"
 AM_CFLAGS = -Wall

=== renamed directory 'libraries/libapparmor/m4' => 'm4'
=== modified file 'tests/Makefile'
--- tests/Makefile	2011-05-23 23:05:10 +0000
+++ tests/Makefile	2012-05-05 21:33:48 +0000
@@ -5,3 +5,7 @@
 	for dir in $(SUBDIRS) ; do \
 		make clean -C $${dir} ; \
 	done
+
+.PHONY: check
+check:
+	@echo Automatic testing disabled


-- 
Kees Cook



More information about the AppArmor mailing list