* [PATCH] pkgconfig support for libsepol, libselinux, and libsemanage
@ 2009-10-21 2:35 Eamon Walsh
2009-10-21 2:41 ` Eamon Walsh
2009-10-21 12:23 ` Stephen Smalley
0 siblings, 2 replies; 7+ messages in thread
From: Eamon Walsh @ 2009-10-21 2:35 UTC (permalink / raw)
To: SELinux List; +Cc: Joshua Brindle, Caleb Case, srivasta, Daniel J Walsh
Add pkgconfig files for libsepol, libselinux, and libsemanage.
Having a pkgconfig file allows the pkg-config(1) tool to be used to
query the presence of the library (or a particular version of it),
and to obtain the C flags and linker arguments required to use it.
Based on Debian patches by Manoj Srivastava<srivasta@debian.org>.
Signed-off-by: Eamon Walsh<ewalsh@tycho.nsa.gov>
---
Note that the .pc.in files themselves could use some review to make
sure the Requires and Libs lines are correct. The sepol and selinux
ones are from the Debian repos; the semanage one I wrote myself.
.gitignore | 1 +
libselinux/src/Makefile | 11 +++++++++--
libselinux/src/libselinux.pc.in | 13 +++++++++++++
libsemanage/src/Makefile | 11 +++++++++--
libsemanage/src/libsemanage.pc.in | 12 ++++++++++++
libsepol/src/Makefile | 12 ++++++++++--
libsepol/src/libsepol.pc.in | 11 +++++++++++
7 files changed, 65 insertions(+), 6 deletions(-)
create mode 100644 libselinux/src/libselinux.pc.in
create mode 100644 libsemanage/src/libsemanage.pc.in
create mode 100644 libsepol/src/libsepol.pc.in
diff --git a/.gitignore b/.gitignore
index c0e010f..9b7ed83 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@
*.a
*.s
*.mo
+*.pc
# Misc
*.patch
diff --git a/libselinux/src/Makefile b/libselinux/src/Makefile
index 74b1e6a..6623706 100644
--- a/libselinux/src/Makefile
+++ b/libselinux/src/Makefile
@@ -12,10 +12,12 @@ RUBYPLATFORM ?= $(shell ruby -e 'print RUBY_PLATFORM')
RUBYINC ?= $(LIBDIR)/ruby/$(RUBYLIBVER)/$(RUBYPLATFORM)
RUBYINSTALL ?= $(LIBDIR)/ruby/site_ruby/$(RUBYLIBVER)/$(RUBYPLATFORM)
+VERSION = $(shell cat ../VERSION)
LIBVERSION = 1
LIBA=libselinux.a
TARGET=libselinux.so
+LIBPC=libselinux.pc
SWIGIF= selinuxswig_python.i selinuxswig_python_exception.i
SWIGRUBYIF= selinuxswig_ruby.i
SWIGCOUT= selinuxswig_wrap.c
@@ -56,7 +58,7 @@ SWIG = swig -Wall -python -o $(SWIGCOUT) -outdir ./
SWIGRUBY = swig -Wall -ruby -o $(SWIGRUBYCOUT) -outdir ./
-all: $(LIBA) $(LIBSO)
+all: $(LIBA) $(LIBSO) $(LIBPC)
pywrap: all $(SWIGSO) $(AUDIT2WHYSO)
@@ -82,6 +84,9 @@ $(LIBSO): $(LOBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^ -ldl -L$(LIBDIR) -Wl,-soname,$(LIBSO),-z,defs,-z,relro
ln -sf $@ $(TARGET)
+$(LIBPC): $(LIBPC).in
+ sed -e 's/@VERSION@/$(VERSION)/; s:@prefix@:$(PREFIX):; s:@libdir@:$(LIBDIR):; s:@includedir@:$(INCLUDEDIR):'< $< > $@
+
selinuxswig_python_exception.i: ../include/selinux/selinux.h
sh exception.sh> $@
@@ -111,6 +116,8 @@ install: all
install -m 644 $(LIBA) $(LIBDIR)
test -d $(SHLIBDIR) || install -m 755 -d $(SHLIBDIR)
install -m 755 $(LIBSO) $(SHLIBDIR)
+ test -d $(LIBDIR)/pkgconfig || install -m 755 -d $(LIBDIR)/pkgconfig
+ install -m 644 $(LIBPC) $(LIBDIR)/pkgconfig
cd $(LIBDIR)&& ln -sf ../../`basename $(SHLIBDIR)`/$(LIBSO) $(TARGET)
install-pywrap: pywrap
@@ -127,7 +134,7 @@ relabel:
/sbin/restorecon $(SHLIBDIR)/$(LIBSO)
clean:
- -rm -f $(OBJS) $(LOBJS) $(LIBA) $(LIBSO) $(SWIGLOBJ) $(SWIGSO) $(TARGET) $(AUDIT2WHYSO) *.o *.lo *~
+ -rm -f $(LIBPC) $(OBJS) $(LOBJS) $(LIBA) $(LIBSO) $(SWIGLOBJ) $(SWIGSO) $(TARGET) $(AUDIT2WHYSO) *.o *.lo *~
distclean: clean
rm -f $(GENERATED) $(SWIGFILES)
diff --git a/libselinux/src/libselinux.pc.in b/libselinux/src/libselinux.pc.in
new file mode 100644
index 0000000..c9608d9
--- /dev/null
+++ b/libselinux/src/libselinux.pc.in
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=@includedir@
+
+Name: libselinux
+Description: SELinux utility library
+Version: @VERSION@
+URL: http://www.nsa.gov/research/selinux/
+Requires.private: libsepol>= 1.12
+Libs: -L${libdir} -lselinux
+Libs.private: -pthread
+Cflags: -I${includedir}
diff --git a/libsemanage/src/Makefile b/libsemanage/src/Makefile
index cfb9558..a249f0f 100644
--- a/libsemanage/src/Makefile
+++ b/libsemanage/src/Makefile
@@ -23,10 +23,12 @@ LFLAGS = -s
YACC = bison
YFLAGS = -d
+VERSION = $(shell cat ../VERSION)
LIBVERSION = 1
LIBA=libsemanage.a
TARGET=libsemanage.so
+LIBPC=libsemanage.pc
SWIGIF= semanageswig_python.i
SWIGRUBYIF= semanageswig_ruby.i
SWIGCOUT= semanageswig_wrap.c
@@ -53,7 +55,7 @@ SWIGRUBY = swig -Wall -ruby -o $(SWIGRUBYCOUT) -outdir ./
GENERATED=$(SWIGCOUT) $(SWIGRUBYCOUT) $(wildcard conf-*.[ch])
-all: $(LIBA) $(LIBSO)
+all: $(LIBA) $(LIBSO) $(LIBPC)
pywrap: all $(SWIGLOBJ) $(SWIGSO)
@@ -79,6 +81,9 @@ $(LIBSO): $(LOBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^ -lsepol -lselinux -lbz2 -lustr -L$(LIBDIR) -Wl,-soname,$(LIBSO),--version-script=libsemanage.map,-z,defs
ln -sf $@ $(TARGET)
+$(LIBPC): $(LIBPC).in
+ sed -e 's/@VERSION@/$(VERSION)/; s:@prefix@:$(PREFIX):; s:@libdir@:$(LIBDIR):; s:@includedir@:$(INCLUDEDIR):'< $< > $@
+
conf-scan.c: conf-scan.l conf-parse.h
$(LEX) $(LFLAGS) -t $< > $@
@@ -119,6 +124,8 @@ install: all
install -m 644 $(LIBA) $(LIBDIR)
test -d $(SHLIBDIR) || install -m 755 -d $(SHLIBDIR)
install -m 755 $(LIBSO) $(SHLIBDIR)
+ test -d $(LIBDIR)/pkgconfig || install -m 755 -d $(LIBDIR)/pkgconfig
+ install -m 644 $(LIBPC) $(LIBDIR)/pkgconfig
test -f $(DEFAULT_SEMANAGE_CONF_LOCATION) || install -m 644 -D semanage.conf $(DEFAULT_SEMANAGE_CONF_LOCATION)
cd $(LIBDIR)&& ln -sf ../../`basename $(SHLIBDIR)`/$(LIBSO) $(TARGET)
@@ -134,7 +141,7 @@ relabel:
/sbin/restorecon $(SHLIBDIR)/$(LIBSO)
clean:
- rm -f $(OBJS) $(LOBJS) $(LIBA) $(LIBSO) $(SWIGLOBJ) $(SWIGSO) $(TARGET) conf-parse.c conf-parse.h conf-scan.c
+ rm -f $(LIBPC) $(OBJS) $(LOBJS) $(LIBA) $(LIBSO) $(SWIGLOBJ) $(SWIGSO) $(TARGET) conf-parse.c conf-parse.h conf-scan.c
distclean: clean
rm -f $(SWIGCOUT) $(SWIGFILES)
diff --git a/libsemanage/src/libsemanage.pc.in b/libsemanage/src/libsemanage.pc.in
new file mode 100644
index 0000000..6d0024c
--- /dev/null
+++ b/libsemanage/src/libsemanage.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=@includedir@
+
+Name: libsemanage
+Description: SELinux management library
+Version: @VERSION@
+URL: http://www.nsa.gov/research/selinux/
+Requires: libselinux
+Libs: -L${libdir} -lsemanage
+Cflags: -I${includedir}
diff --git a/libsepol/src/Makefile b/libsepol/src/Makefile
index 608fe0b..3b19e37 100644
--- a/libsepol/src/Makefile
+++ b/libsepol/src/Makefile
@@ -1,19 +1,22 @@
# Installation directories.
PREFIX ?= $(DESTDIR)/usr
+INCLUDEDIR ?= $(PREFIX)/include
LIBDIR ?= $(PREFIX)/lib
SHLIBDIR ?= $(DESTDIR)/lib
+VERSION = $(shell cat ../VERSION)
LIBVERSION = 1
LIBA=libsepol.a
TARGET=libsepol.so
+LIBPC=libsepol.pc
LIBSO=$(TARGET).$(LIBVERSION)
OBJS= $(patsubst %.c,%.o,$(wildcard *.c))
LOBJS= $(patsubst %.c,%.lo,$(wildcard *.c))
CFLAGS ?= -Werror -Wall -W -Wundef -Wshadow -Wmissing-noreturn -Wmissing-format-attribute
override CFLAGS += -I. -I../include -D_GNU_SOURCE
-all: $(LIBA) $(LIBSO)
+all: $(LIBA) $(LIBSO) $(LIBPC)
$(LIBA): $(OBJS)
$(AR) rcs $@ $^
@@ -23,6 +26,9 @@ $(LIBSO): $(LOBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^ -Wl,-soname,$(LIBSO),--version-script=libsepol.map,-z,defs
ln -sf $@ $(TARGET)
+$(LIBPC): $(LIBPC).in
+ sed -e 's/@VERSION@/$(VERSION)/; s:@prefix@:$(PREFIX):; s:@libdir@:$(LIBDIR):; s:@includedir@:$(INCLUDEDIR):'< $< > $@
+
%.o: %.c
$(CC) $(CFLAGS) -fPIC -c -o $@ $<
@@ -34,13 +40,15 @@ install: all
install -m 644 $(LIBA) $(LIBDIR)
test -d $(SHLIBDIR) || install -m 755 -d $(SHLIBDIR)
install -m 755 $(LIBSO) $(SHLIBDIR)
+ test -d $(LIBDIR)/pkgconfig || install -m 755 -d $(LIBDIR)/pkgconfig
+ install -m 644 $(LIBPC) $(LIBDIR)/pkgconfig
cd $(LIBDIR)&& ln -sf ../../`basename $(SHLIBDIR)`/$(LIBSO) $(TARGET)
relabel:
/sbin/restorecon $(SHLIBDIR)/$(LIBSO)
clean:
- -rm -f $(OBJS) $(LOBJS) $(LIBA) $(LIBSO) $(TARGET)
+ -rm -f $(LIBPC) $(OBJS) $(LOBJS) $(LIBA) $(LIBSO) $(TARGET)
indent:
../../scripts/Lindent $(wildcard *.[ch])
diff --git a/libsepol/src/libsepol.pc.in b/libsepol/src/libsepol.pc.in
new file mode 100644
index 0000000..53a6970
--- /dev/null
+++ b/libsepol/src/libsepol.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=@includedir@
+
+Name: libsepol
+Description: SELinux policy library
+Version: @VERSION@
+URL: http://www.nsa.gov/research/selinux/
+Libs: -L${libdir} -lsepol
+Cflags: -I${includedir}
--
1.6.5.rc2
--
Eamon Walsh<ewalsh@tycho.nsa.gov>
National Security Agency
--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] pkgconfig support for libsepol, libselinux, and libsemanage
2009-10-21 2:35 [PATCH] pkgconfig support for libsepol, libselinux, and libsemanage Eamon Walsh
@ 2009-10-21 2:41 ` Eamon Walsh
2009-10-21 12:23 ` Stephen Smalley
1 sibling, 0 replies; 7+ messages in thread
From: Eamon Walsh @ 2009-10-21 2:41 UTC (permalink / raw)
To: SELinux List; +Cc: Joshua Brindle, Caleb Case, srivasta, Daniel J Walsh
[-- Attachment #1: Type: text/plain, Size: 774 bytes --]
On 10/20/2009 10:35 PM, Eamon Walsh wrote:
> Add pkgconfig files for libsepol, libselinux, and libsemanage.
>
> Having a pkgconfig file allows the pkg-config(1) tool to be used to
> query the presence of the library (or a particular version of it),
> and to obtain the C flags and linker arguments required to use it.
>
> Based on Debian patches by Manoj Srivastava<srivasta@debian.org>.
>
> Signed-off-by: Eamon Walsh<ewalsh@tycho.nsa.gov>
> ---
>
> Note that the .pc.in files themselves could use some review to make
> sure the Requires and Libs lines are correct. The sepol and selinux
> ones are from the Debian repos; the semanage one I wrote myself.
>
>
Re-send with non-mangled patch (attached).
--
Eamon Walsh<ewalsh@tycho.nsa.gov>
National Security Agency
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-pkgconfig-files-for-libsepol-libselinux-and-libs.patch --]
[-- Type: text/x-patch; name="0001-Add-pkgconfig-files-for-libsepol-libselinux-and-libs.patch", Size: 0 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] pkgconfig support for libsepol, libselinux, and libsemanage
2009-10-21 2:35 [PATCH] pkgconfig support for libsepol, libselinux, and libsemanage Eamon Walsh
2009-10-21 2:41 ` Eamon Walsh
@ 2009-10-21 12:23 ` Stephen Smalley
2009-10-21 12:31 ` Stephen Smalley
2009-10-21 14:39 ` [PATCH] " Manoj Srivastava
1 sibling, 2 replies; 7+ messages in thread
From: Stephen Smalley @ 2009-10-21 12:23 UTC (permalink / raw)
To: Eamon Walsh
Cc: SELinux List, Joshua Brindle, Caleb Case, srivasta,
Daniel J Walsh
On Tue, 2009-10-20 at 22:35 -0400, Eamon Walsh wrote:
> Add pkgconfig files for libsepol, libselinux, and libsemanage.
>
> Having a pkgconfig file allows the pkg-config(1) tool to be used to
> query the presence of the library (or a particular version of it),
> and to obtain the C flags and linker arguments required to use it.
>
> Based on Debian patches by Manoj Srivastava<srivasta@debian.org>.
>
> Signed-off-by: Eamon Walsh<ewalsh@tycho.nsa.gov>
> ---
>
> Note that the .pc.in files themselves could use some review to make
> sure the Requires and Libs lines are correct. The sepol and selinux
> ones are from the Debian repos; the semanage one I wrote myself.
> diff --git a/libselinux/src/libselinux.pc.in b/libselinux/src/libselinux.pc.in
> new file mode 100644
> index 0000000..c9608d9
> --- /dev/null
> +++ b/libselinux/src/libselinux.pc.in
> @@ -0,0 +1,13 @@
> +prefix=@prefix@
> +exec_prefix=${prefix}
> +libdir=${exec_prefix}/lib
> +includedir=@includedir@
> +
> +Name: libselinux
> +Description: SELinux utility library
> +Version: @VERSION@
> +URL: http://www.nsa.gov/research/selinux/
> +Requires.private: libsepol>= 1.12
> +Libs: -L${libdir} -lselinux
> +Libs.private: -pthread
> +Cflags: -I${includedir}
Requires.private only applies to the static lib, right? In the shared
lib, libsepol is dlopen'd on demand these days and is only needed if
loading a policy file whose version is greater than the version
supported by the kernel.
I'd drop the >= 1.12 or make it more current.
libpthread should not be necessary any longer (it was temporarily from
libselinux 2.0.82 through 2.0.84); if the program is already linked with
libpthread then libselinux will use pthread_once for lazy
initialization; otherwise it will fall back to a simple test.
Not sure if you should specify libdl or if that is implicitly handled.
> diff --git a/libsemanage/src/libsemanage.pc.in b/libsemanage/src/libsemanage.pc.in
> new file mode 100644
> index 0000000..6d0024c
> --- /dev/null
> +++ b/libsemanage/src/libsemanage.pc.in
> @@ -0,0 +1,12 @@
> +prefix=@prefix@
> +exec_prefix=${prefix}
> +libdir=${exec_prefix}/lib
> +includedir=@includedir@
> +
> +Name: libsemanage
> +Description: SELinux management library
> +Version: @VERSION@
> +URL: http://www.nsa.gov/research/selinux/
> +Requires: libselinux
> +Libs: -L${libdir} -lsemanage
> +Cflags: -I${includedir}
Modern libsemanage requires libsepol, libselinux, libbz2, and libustr.
--
Stephen Smalley
National Security Agency
--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] pkgconfig support for libsepol, libselinux, and libsemanage
2009-10-21 12:23 ` Stephen Smalley
@ 2009-10-21 12:31 ` Stephen Smalley
2009-10-22 18:47 ` [PATCH -v2] " Eamon Walsh
2009-10-21 14:39 ` [PATCH] " Manoj Srivastava
1 sibling, 1 reply; 7+ messages in thread
From: Stephen Smalley @ 2009-10-21 12:31 UTC (permalink / raw)
To: Eamon Walsh
Cc: SELinux List, Joshua Brindle, Caleb Case, srivasta,
Daniel J Walsh
On Wed, 2009-10-21 at 08:23 -0400, Stephen Smalley wrote:
> On Tue, 2009-10-20 at 22:35 -0400, Eamon Walsh wrote:
> > Add pkgconfig files for libsepol, libselinux, and libsemanage.
> >
> > Having a pkgconfig file allows the pkg-config(1) tool to be used to
> > query the presence of the library (or a particular version of it),
> > and to obtain the C flags and linker arguments required to use it.
> >
> > Based on Debian patches by Manoj Srivastava<srivasta@debian.org>.
> >
> > Signed-off-by: Eamon Walsh<ewalsh@tycho.nsa.gov>
> > ---
> >
> > Note that the .pc.in files themselves could use some review to make
> > sure the Requires and Libs lines are correct. The sepol and selinux
> > ones are from the Debian repos; the semanage one I wrote myself.
>
> > diff --git a/libselinux/src/libselinux.pc.in b/libselinux/src/libselinux.pc.in
> > new file mode 100644
> > index 0000000..c9608d9
> > --- /dev/null
> > +++ b/libselinux/src/libselinux.pc.in
> > @@ -0,0 +1,13 @@
> > +prefix=@prefix@
> > +exec_prefix=${prefix}
> > +libdir=${exec_prefix}/lib
> > +includedir=@includedir@
> > +
> > +Name: libselinux
> > +Description: SELinux utility library
> > +Version: @VERSION@
> > +URL: http://www.nsa.gov/research/selinux/
Also the URLs should now point to the userspace.selinuxproject.org site.
--
Stephen Smalley
National Security Agency
--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] pkgconfig support for libsepol, libselinux, and libsemanage
2009-10-21 12:23 ` Stephen Smalley
2009-10-21 12:31 ` Stephen Smalley
@ 2009-10-21 14:39 ` Manoj Srivastava
1 sibling, 0 replies; 7+ messages in thread
From: Manoj Srivastava @ 2009-10-21 14:39 UTC (permalink / raw)
To: selinux
On Wed, Oct 21 2009, Stephen Smalley wrote:
> On Tue, 2009-10-20 at 22:35 -0400, Eamon Walsh wrote:
>> Add pkgconfig files for libsepol, libselinux, and libsemanage.
>>
>> Having a pkgconfig file allows the pkg-config(1) tool to be used to
>> query the presence of the library (or a particular version of it),
>> and to obtain the C flags and linker arguments required to use it.
>>
>> Based on Debian patches by Manoj Srivastava<srivasta@debian.org>.
>>
>> Signed-off-by: Eamon Walsh<ewalsh@tycho.nsa.gov>
>> ---
>
> Requires.private only applies to the static lib, right? In the shared
> lib, libsepol is dlopen'd on demand these days and is only needed if
> loading a policy file whose version is greater than the version
> supported by the kernel.
> I'd drop the >= 1.12 or make it more current.
>
> libpthread should not be necessary any longer (it was temporarily from
> libselinux 2.0.82 through 2.0.84); if the program is already linked with
> libpthread then libselinux will use pthread_once for lazy
> initialization; otherwise it will fall back to a simple test.
>
> Not sure if you should specify libdl or if that is implicitly handled.
It is implicitly handled.
>
>> diff --git a/libsemanage/src/libsemanage.pc.in b/libsemanage/src/libsemanage.pc.in
>> new file mode 100644
>> index 0000000..6d0024c
>> --- /dev/null
>> +++ b/libsemanage/src/libsemanage.pc.in
>> @@ -0,0 +1,12 @@
>> +prefix=@prefix@
>> +exec_prefix=${prefix}
>> +libdir=${exec_prefix}/lib
>> +includedir=@includedir@
>> +
>> +Name: libsemanage
>> +Description: SELinux management library
>> +Version: @VERSION@
>> +URL: http://www.nsa.gov/research/selinux/
>> +Requires: libselinux
>> +Libs: -L${libdir} -lsemanage
>> +Cflags: -I${includedir}
>
> Modern libsemanage requires libsepol, libselinux, libbz2, and libustr.
I need to update that, thanks.
Also, I have patches now to libselinux/src/Makefile to use
pkg-config to look for the location of libsepol.a.
manoj
[topic--debian]: Add support for cross compilation
The Python bindings are always linked against /usr/lib/libsepol.a. This
patch allows the specification of the directory one may find libsepol.a
in.
Signed-off-by: Manoj Srivastava <srivasta@debian.org>
diff --git a/libselinux/src/Makefile b/libselinux/src/Makefile
index b68d586..ac4f467 100644
--- a/libselinux/src/Makefile
+++ b/libselinux/src/Makefile
@@ -52,6 +52,11 @@ ifneq (,$(filter i386,$(ARCH)))
TLSFLAGS += -mno-tls-direct-seg-refs
endif
+LIBSEPOLDIR=$(shell pkg-config --variable=libdir libsepol)
+ifeq (,$(strip $(LIBSEPOLDIR)))
+LIBSEPOLDIR=$(LIBDIR)
+endif
+
SWIG = swig -Wall -python -o $(SWIGCOUT) -outdir ./
SWIGRUBY = swig -Wall -ruby -o $(SWIGRUBYCOUT) -outdir ./
@@ -86,7 +90,7 @@ audit2why.lo: audit2why.c
$(CC) $(CFLAGS) -I$(PYINC) -fPIC -DSHARED -c -o $@ $<
$(AUDIT2WHYSO): audit2why.lo
- $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^ -L. -lselinux ${LIBDIR}/libsepol.a -L$(LIBDIR) -Wl,-soname,$@
+ $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^ -L. -lselinux $(LIBSEPOLDIR)/libsepol.a -L$(LIBDIR) -Wl,-soname,$@
%.o: %.c policy.h
$(CC) $(CFLAGS) $(TLSFLAGS) -c -o $@ $<
--
Manoj Srivastava <srivasta@acm.org> <http://www.golden-gryphon.com/>
1024D/BF24424C print 4966 F272 D093 B493 410B 924B 21BA DABB BF24 424C
--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH -v2] pkgconfig support for libsepol, libselinux, and libsemanage
2009-10-21 12:31 ` Stephen Smalley
@ 2009-10-22 18:47 ` Eamon Walsh
2009-10-29 19:39 ` Eamon Walsh
0 siblings, 1 reply; 7+ messages in thread
From: Eamon Walsh @ 2009-10-22 18:47 UTC (permalink / raw)
To: Stephen Smalley
Cc: SELinux List, Joshua Brindle, Caleb Case, srivasta,
Daniel J Walsh
Add pkgconfig files for libsepol, libselinux, and libsemanage.
Having a pkgconfig file allows the pkg-config tool to be used to
query the presence of the library (or a particular version of it),
and to obtain the C flags and linker arguments to build with it.
Based on Debian patches by Manoj Srivastava <srivasta@debian.org>.
-v2: Corrected URL, fixed requirements for libselinux and libsemanage.
Signed-off-by: Eamon Walsh <ewalsh@tycho.nsa.gov>
---
Notes: Requires.private applies to static linking only, but it will
pull in CFLAGS from dependencies. This is not very well documented.
My main source for information here is a bug report:
https://bugzilla.redhat.com/show_bug.cgi?id=224148
http://wiki.mandriva.com/en/Overlinking
As far as I can tell, a shared library shouldn't have anything listed
in "Requires" or "Libs". The only difference between Required.private
and Libs.private I can tell is that the former takes pkgconfig file
names as arguments and the latter actual -lfoo directives.
.gitignore | 1 +
libselinux/src/Makefile | 11 +++++++++--
libselinux/src/libselinux.pc.in | 12 ++++++++++++
libsemanage/src/Makefile | 11 +++++++++--
libsemanage/src/libsemanage.pc.in | 13 +++++++++++++
libsepol/src/Makefile | 12 ++++++++++--
libsepol/src/libsepol.pc.in | 11 +++++++++++
7 files changed, 65 insertions(+), 6 deletions(-)
create mode 100644 libselinux/src/libselinux.pc.in
create mode 100644 libsemanage/src/libsemanage.pc.in
create mode 100644 libsepol/src/libsepol.pc.in
diff --git a/.gitignore b/.gitignore
index c0e010f..9b7ed83 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@
*.a
*.s
*.mo
+*.pc
# Misc
*.patch
diff --git a/libselinux/src/Makefile b/libselinux/src/Makefile
index 74b1e6a..6623706 100644
--- a/libselinux/src/Makefile
+++ b/libselinux/src/Makefile
@@ -12,10 +12,12 @@ RUBYPLATFORM ?= $(shell ruby -e 'print RUBY_PLATFORM')
RUBYINC ?= $(LIBDIR)/ruby/$(RUBYLIBVER)/$(RUBYPLATFORM)
RUBYINSTALL ?= $(LIBDIR)/ruby/site_ruby/$(RUBYLIBVER)/$(RUBYPLATFORM)
+VERSION = $(shell cat ../VERSION)
LIBVERSION = 1
LIBA=libselinux.a
TARGET=libselinux.so
+LIBPC=libselinux.pc
SWIGIF= selinuxswig_python.i selinuxswig_python_exception.i
SWIGRUBYIF= selinuxswig_ruby.i
SWIGCOUT= selinuxswig_wrap.c
@@ -56,7 +58,7 @@ SWIG = swig -Wall -python -o $(SWIGCOUT) -outdir ./
SWIGRUBY = swig -Wall -ruby -o $(SWIGRUBYCOUT) -outdir ./
-all: $(LIBA) $(LIBSO)
+all: $(LIBA) $(LIBSO) $(LIBPC)
pywrap: all $(SWIGSO) $(AUDIT2WHYSO)
@@ -82,6 +84,9 @@ $(LIBSO): $(LOBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^ -ldl -L$(LIBDIR) -Wl,-soname,$(LIBSO),-z,defs,-z,relro
ln -sf $@ $(TARGET)
+$(LIBPC): $(LIBPC).in
+ sed -e 's/@VERSION@/$(VERSION)/; s:@prefix@:$(PREFIX):; s:@libdir@:$(LIBDIR):; s:@includedir@:$(INCLUDEDIR):' < $< > $@
+
selinuxswig_python_exception.i: ../include/selinux/selinux.h
sh exception.sh > $@
@@ -111,6 +116,8 @@ install: all
install -m 644 $(LIBA) $(LIBDIR)
test -d $(SHLIBDIR) || install -m 755 -d $(SHLIBDIR)
install -m 755 $(LIBSO) $(SHLIBDIR)
+ test -d $(LIBDIR)/pkgconfig || install -m 755 -d $(LIBDIR)/pkgconfig
+ install -m 644 $(LIBPC) $(LIBDIR)/pkgconfig
cd $(LIBDIR) && ln -sf ../../`basename $(SHLIBDIR)`/$(LIBSO) $(TARGET)
install-pywrap: pywrap
@@ -127,7 +134,7 @@ relabel:
/sbin/restorecon $(SHLIBDIR)/$(LIBSO)
clean:
- -rm -f $(OBJS) $(LOBJS) $(LIBA) $(LIBSO) $(SWIGLOBJ) $(SWIGSO) $(TARGET) $(AUDIT2WHYSO) *.o *.lo *~
+ -rm -f $(LIBPC) $(OBJS) $(LOBJS) $(LIBA) $(LIBSO) $(SWIGLOBJ) $(SWIGSO) $(TARGET) $(AUDIT2WHYSO) *.o *.lo *~
distclean: clean
rm -f $(GENERATED) $(SWIGFILES)
diff --git a/libselinux/src/libselinux.pc.in b/libselinux/src/libselinux.pc.in
new file mode 100644
index 0000000..9b3808b
--- /dev/null
+++ b/libselinux/src/libselinux.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=@includedir@
+
+Name: libselinux
+Description: SELinux utility library
+Version: @VERSION@
+URL: http://userspace.selinuxproject.org/
+Requires.private: libsepol
+Libs: -L${libdir} -lselinux
+Cflags: -I${includedir}
diff --git a/libsemanage/src/Makefile b/libsemanage/src/Makefile
index cfb9558..a249f0f 100644
--- a/libsemanage/src/Makefile
+++ b/libsemanage/src/Makefile
@@ -23,10 +23,12 @@ LFLAGS = -s
YACC = bison
YFLAGS = -d
+VERSION = $(shell cat ../VERSION)
LIBVERSION = 1
LIBA=libsemanage.a
TARGET=libsemanage.so
+LIBPC=libsemanage.pc
SWIGIF= semanageswig_python.i
SWIGRUBYIF= semanageswig_ruby.i
SWIGCOUT= semanageswig_wrap.c
@@ -53,7 +55,7 @@ SWIGRUBY = swig -Wall -ruby -o $(SWIGRUBYCOUT) -outdir ./
GENERATED=$(SWIGCOUT) $(SWIGRUBYCOUT) $(wildcard conf-*.[ch])
-all: $(LIBA) $(LIBSO)
+all: $(LIBA) $(LIBSO) $(LIBPC)
pywrap: all $(SWIGLOBJ) $(SWIGSO)
@@ -79,6 +81,9 @@ $(LIBSO): $(LOBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^ -lsepol -lselinux -lbz2 -lustr -L$(LIBDIR) -Wl,-soname,$(LIBSO),--version-script=libsemanage.map,-z,defs
ln -sf $@ $(TARGET)
+$(LIBPC): $(LIBPC).in
+ sed -e 's/@VERSION@/$(VERSION)/; s:@prefix@:$(PREFIX):; s:@libdir@:$(LIBDIR):; s:@includedir@:$(INCLUDEDIR):' < $< > $@
+
conf-scan.c: conf-scan.l conf-parse.h
$(LEX) $(LFLAGS) -t $< > $@
@@ -119,6 +124,8 @@ install: all
install -m 644 $(LIBA) $(LIBDIR)
test -d $(SHLIBDIR) || install -m 755 -d $(SHLIBDIR)
install -m 755 $(LIBSO) $(SHLIBDIR)
+ test -d $(LIBDIR)/pkgconfig || install -m 755 -d $(LIBDIR)/pkgconfig
+ install -m 644 $(LIBPC) $(LIBDIR)/pkgconfig
test -f $(DEFAULT_SEMANAGE_CONF_LOCATION) || install -m 644 -D semanage.conf $(DEFAULT_SEMANAGE_CONF_LOCATION)
cd $(LIBDIR) && ln -sf ../../`basename $(SHLIBDIR)`/$(LIBSO) $(TARGET)
@@ -134,7 +141,7 @@ relabel:
/sbin/restorecon $(SHLIBDIR)/$(LIBSO)
clean:
- rm -f $(OBJS) $(LOBJS) $(LIBA) $(LIBSO) $(SWIGLOBJ) $(SWIGSO) $(TARGET) conf-parse.c conf-parse.h conf-scan.c
+ rm -f $(LIBPC) $(OBJS) $(LOBJS) $(LIBA) $(LIBSO) $(SWIGLOBJ) $(SWIGSO) $(TARGET) conf-parse.c conf-parse.h conf-scan.c
distclean: clean
rm -f $(SWIGCOUT) $(SWIGFILES)
diff --git a/libsemanage/src/libsemanage.pc.in b/libsemanage/src/libsemanage.pc.in
new file mode 100644
index 0000000..d0945f8
--- /dev/null
+++ b/libsemanage/src/libsemanage.pc.in
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=@includedir@
+
+Name: libsemanage
+Description: SELinux management library
+Version: @VERSION@
+URL: http://userspace.selinuxproject.org/
+Requires.private: libselinux libsepol ustr
+Libs: -L${libdir} -lsemanage
+Libs.private: -lbz2
+Cflags: -I${includedir}
diff --git a/libsepol/src/Makefile b/libsepol/src/Makefile
index 608fe0b..3b19e37 100644
--- a/libsepol/src/Makefile
+++ b/libsepol/src/Makefile
@@ -1,19 +1,22 @@
# Installation directories.
PREFIX ?= $(DESTDIR)/usr
+INCLUDEDIR ?= $(PREFIX)/include
LIBDIR ?= $(PREFIX)/lib
SHLIBDIR ?= $(DESTDIR)/lib
+VERSION = $(shell cat ../VERSION)
LIBVERSION = 1
LIBA=libsepol.a
TARGET=libsepol.so
+LIBPC=libsepol.pc
LIBSO=$(TARGET).$(LIBVERSION)
OBJS= $(patsubst %.c,%.o,$(wildcard *.c))
LOBJS= $(patsubst %.c,%.lo,$(wildcard *.c))
CFLAGS ?= -Werror -Wall -W -Wundef -Wshadow -Wmissing-noreturn -Wmissing-format-attribute
override CFLAGS += -I. -I../include -D_GNU_SOURCE
-all: $(LIBA) $(LIBSO)
+all: $(LIBA) $(LIBSO) $(LIBPC)
$(LIBA): $(OBJS)
$(AR) rcs $@ $^
@@ -23,6 +26,9 @@ $(LIBSO): $(LOBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^ -Wl,-soname,$(LIBSO),--version-script=libsepol.map,-z,defs
ln -sf $@ $(TARGET)
+$(LIBPC): $(LIBPC).in
+ sed -e 's/@VERSION@/$(VERSION)/; s:@prefix@:$(PREFIX):; s:@libdir@:$(LIBDIR):; s:@includedir@:$(INCLUDEDIR):' < $< > $@
+
%.o: %.c
$(CC) $(CFLAGS) -fPIC -c -o $@ $<
@@ -34,13 +40,15 @@ install: all
install -m 644 $(LIBA) $(LIBDIR)
test -d $(SHLIBDIR) || install -m 755 -d $(SHLIBDIR)
install -m 755 $(LIBSO) $(SHLIBDIR)
+ test -d $(LIBDIR)/pkgconfig || install -m 755 -d $(LIBDIR)/pkgconfig
+ install -m 644 $(LIBPC) $(LIBDIR)/pkgconfig
cd $(LIBDIR) && ln -sf ../../`basename $(SHLIBDIR)`/$(LIBSO) $(TARGET)
relabel:
/sbin/restorecon $(SHLIBDIR)/$(LIBSO)
clean:
- -rm -f $(OBJS) $(LOBJS) $(LIBA) $(LIBSO) $(TARGET)
+ -rm -f $(LIBPC) $(OBJS) $(LOBJS) $(LIBA) $(LIBSO) $(TARGET)
indent:
../../scripts/Lindent $(wildcard *.[ch])
diff --git a/libsepol/src/libsepol.pc.in b/libsepol/src/libsepol.pc.in
new file mode 100644
index 0000000..bc7635c
--- /dev/null
+++ b/libsepol/src/libsepol.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=@includedir@
+
+Name: libsepol
+Description: SELinux policy library
+Version: @VERSION@
+URL: http://userspace.selinuxproject.org/
+Libs: -L${libdir} -lsepol
+Cflags: -I${includedir}
--
1.6.5.rc2
--
Eamon Walsh
National Security Agency
--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH -v2] pkgconfig support for libsepol, libselinux, and libsemanage
2009-10-22 18:47 ` [PATCH -v2] " Eamon Walsh
@ 2009-10-29 19:39 ` Eamon Walsh
0 siblings, 0 replies; 7+ messages in thread
From: Eamon Walsh @ 2009-10-29 19:39 UTC (permalink / raw)
To: Stephen Smalley
Cc: SELinux List, Joshua Brindle, Caleb Case, srivasta,
Daniel J Walsh
On 10/22/2009 02:47 PM, Eamon Walsh wrote:
> Add pkgconfig files for libsepol, libselinux, and libsemanage.
>
> Having a pkgconfig file allows the pkg-config tool to be used to
> query the presence of the library (or a particular version of it),
> and to obtain the C flags and linker arguments to build with it.
>
> Based on Debian patches by Manoj Srivastava <srivasta@debian.org>.
>
> -v2: Corrected URL, fixed requirements for libselinux and libsemanage.
>
>
> Signed-off-by: Eamon Walsh <ewalsh@tycho.nsa.gov>
> ---
>
>
I have pushed this and bumped the library versions. This will impact
downstreams with pkgconfig files patched in themselves. If anything's
seriously amiss let me know.
--
Eamon Walsh
National Security Agency
--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2009-10-29 19:39 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-21 2:35 [PATCH] pkgconfig support for libsepol, libselinux, and libsemanage Eamon Walsh
2009-10-21 2:41 ` Eamon Walsh
2009-10-21 12:23 ` Stephen Smalley
2009-10-21 12:31 ` Stephen Smalley
2009-10-22 18:47 ` [PATCH -v2] " Eamon Walsh
2009-10-29 19:39 ` Eamon Walsh
2009-10-21 14:39 ` [PATCH] " Manoj Srivastava
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.