All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH liburing 0/2] pkg-config support
@ 2019-05-25  8:58 Stefan Hajnoczi
  2019-05-25  8:58 ` [PATCH liburing 1/2] pkgconfig: install a liburing.pc file Stefan Hajnoczi
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Stefan Hajnoczi @ 2019-05-25  8:58 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-block, Aarushi Mehta, Julia Suvorova, Stefan Hajnoczi

Patch 1 adds pkg-config support so that applications are not required to
hardcode compiler flags that may change depending on the distro.

Patch 2 moves installation paths to ./configure so they are adjustable from the
command-line and do not require modifying the makefile.  This is necessary so
Fedora x86_64 can set libdir to /usr/lib64.

I have tested this by building Aarushi Mehta's QEMU io_uring support
using pkg-config on a Fedora x86_64 host.

Stefan Hajnoczi (2):
  pkgconfig: install a liburing.pc file
  configure: move directory options to ./configure

 configure      | 55 +++++++++++++++++++++++++++++++++++++++++++++++++-
 Makefile       | 17 ++++++++++------
 .gitignore     |  2 ++
 liburing.pc.in | 12 +++++++++++
 4 files changed, 79 insertions(+), 7 deletions(-)
 create mode 100644 liburing.pc.in

-- 
2.21.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH liburing 1/2] pkgconfig: install a liburing.pc file
  2019-05-25  8:58 [PATCH liburing 0/2] pkg-config support Stefan Hajnoczi
@ 2019-05-25  8:58 ` Stefan Hajnoczi
  2019-05-25  8:58 ` [PATCH liburing 2/2] configure: move directory options to ./configure Stefan Hajnoczi
  2019-05-25 12:37 ` [PATCH liburing 0/2] pkg-config support Jens Axboe
  2 siblings, 0 replies; 4+ messages in thread
From: Stefan Hajnoczi @ 2019-05-25  8:58 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-block, Aarushi Mehta, Julia Suvorova, Stefan Hajnoczi

pkg-config (https://pkgconfig.freedesktop.org/) makes it easier to build
applications that have library dependencies.  Libraries ship .pc files
containing the compiler and linker flags needed to build successfully.
This saves applications from hardcoding these details into their build
scripts, especially when these details can change between operating
systems or distributions.

To build a liburing application:

  gcc $(pkg-config --cflags --libs liburing) -o myapp myapp.c

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 Makefile       | 13 +++++++++++--
 .gitignore     |  2 ++
 liburing.pc.in | 12 ++++++++++++
 3 files changed, 25 insertions(+), 2 deletions(-)
 create mode 100644 liburing.pc.in

diff --git a/Makefile b/Makefile
index d42dd45..6755713 100644
--- a/Makefile
+++ b/Makefile
@@ -33,13 +33,22 @@ ifneq ($(MAKECMDGOALS),clean)
 include config-host.mak
 endif
 
-install:
+%.pc: %.pc.in
+	sed -e "s%@prefix@%$(prefix)%g" \
+	    -e "s%@libdir@%$(libdir)%g" \
+	    -e "s%@includedir@%$(includedir)%g" \
+	    -e "s%@NAME@%$(NAME)%g" \
+	    -e "s%@VERSION@%$(VERSION)%g" \
+	    $< >$@
+
+install: $(NAME).pc
 	@$(MAKE) -C src install prefix=$(DESTDIR)$(prefix) includedir=$(DESTDIR)$(includedir) libdir=$(DESTDIR)$(libdir)
+	$(INSTALL) -D -m 644 $(NAME).pc $(DESTDIR)$(libdir)/pkgconfig/$(NAME).pc
 	$(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man2
 	$(INSTALL) -m 644 man/*.2 $(DESTDIR)$(mandir)/man2
 
 clean:
-	@rm -f config-host.mak config-host.h cscope.out
+	@rm -f config-host.mak config-host.h cscope.out $(NAME).pc
 	@$(MAKE) -C src clean
 	@$(MAKE) -C test clean
 	@$(MAKE) -C examples clean
diff --git a/.gitignore b/.gitignore
index e292825..08ba0e0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,5 @@
 config-host.h
 config-host.mak
 config.log
+
+liburing.pc
diff --git a/liburing.pc.in b/liburing.pc.in
new file mode 100644
index 0000000..e621939
--- /dev/null
+++ b/liburing.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=${prefix}
+libdir=@libdir@
+includedir=@includedir@
+
+Name: @NAME@
+Version: @VERSION@
+Description: io_uring library
+URL: http://git.kernel.dk/cgit/liburing/
+
+Libs: -L${libdir} -luring
+Cflags: -I${includedir}
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH liburing 2/2] configure: move directory options to ./configure
  2019-05-25  8:58 [PATCH liburing 0/2] pkg-config support Stefan Hajnoczi
  2019-05-25  8:58 ` [PATCH liburing 1/2] pkgconfig: install a liburing.pc file Stefan Hajnoczi
@ 2019-05-25  8:58 ` Stefan Hajnoczi
  2019-05-25 12:37 ` [PATCH liburing 0/2] pkg-config support Jens Axboe
  2 siblings, 0 replies; 4+ messages in thread
From: Stefan Hajnoczi @ 2019-05-25  8:58 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-block, Aarushi Mehta, Julia Suvorova, Stefan Hajnoczi

libdir is hardcoded to ${prefix}/lib in Makefile.  Fedora x86_64 uses
/usr/lib64 and this means libaries will be installed in the wrong place.

This patch moves prefix, includedir, libdir, and mandir into ./configure
for easier customization.  To build and install on Fedora x86_64:

  # ./configure --libdir=/usr/lib64
  # make && make install

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 configure | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 Makefile  |  4 ----
 2 files changed, 54 insertions(+), 5 deletions(-)

diff --git a/configure b/configure
index ef71a14..19c2b54 100755
--- a/configure
+++ b/configure
@@ -10,6 +10,10 @@ else
 fi
 
 cc=gcc
+prefix=/usr
+includedir="$prefix/include"
+libdir="$prefix/lib"
+mandir="$prefix/man"
 
 TMPC="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}.c"
 TMPC2="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}-2.c"
@@ -98,11 +102,60 @@ has() {
   type "$1" >/dev/null 2>&1
 }
 
+output_mak() {
+  echo "$1=$2" >> $config_host_mak
+}
+
 output_sym() {
-  echo "$1=y" >> $config_host_mak
+  output_mak "$1" "y"
   echo "#define $1" >> $config_host_h
 }
 
+print_and_output_mak() {
+  print_config "$1" "$2"
+  output_mak "$1" "$2"
+}
+
+for opt do
+  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
+  case "$opt" in
+  --help|-h) show_help=yes
+  ;;
+  --prefix=*) prefix="$optarg"
+  ;;
+  --includedir=*) includedir="$optarg"
+  ;;
+  --libdir=*) libdir="$optarg"
+  ;;
+  --mandir=*) mandir="$optarg"
+  ;;
+  *)
+    echo "ERROR: unkown option $opt"
+    echo "Try '$0 --help' for more information"
+    exit 1
+  ;;
+  esac
+done
+
+if test "$show_help" = "yes"; then
+cat <<EOF
+
+Usage: configure [options]
+Options: [defaults in brackets after descriptions]
+  --help                   print this message
+  --prefix=PATH            install in PATH [$prefix]
+  --includedir=PATH        install headers in PATH [$includedir]
+  --libdir=PATH            install libraries in PATH [$libdir]
+  --mandir=PATH            install man pages in PATH [$mandir]
+EOF
+exit 0
+fi
+
+print_and_output_mak "prefix" "$prefix"
+print_and_output_mak "includedir" "$includedir"
+print_and_output_mak "libdir" "$libdir"
+print_and_output_mak "mandir" "$mandir"
+
 ##########################################
 # check for __kernel_rwf_t
 __kernel_rwf_t="no"
diff --git a/Makefile b/Makefile
index 6755713..ea639d6 100644
--- a/Makefile
+++ b/Makefile
@@ -5,10 +5,6 @@ TAG = $(NAME)-$(VERSION)
 RPMBUILD=$(shell `which rpmbuild >&/dev/null` && echo "rpmbuild" || echo "rpm")
 
 INSTALL=install
-prefix ?= /usr
-includedir=$(prefix)/include
-libdir=$(prefix)/lib
-mandir=$(prefix)/man
 
 default: all
 
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH liburing 0/2] pkg-config support
  2019-05-25  8:58 [PATCH liburing 0/2] pkg-config support Stefan Hajnoczi
  2019-05-25  8:58 ` [PATCH liburing 1/2] pkgconfig: install a liburing.pc file Stefan Hajnoczi
  2019-05-25  8:58 ` [PATCH liburing 2/2] configure: move directory options to ./configure Stefan Hajnoczi
@ 2019-05-25 12:37 ` Jens Axboe
  2 siblings, 0 replies; 4+ messages in thread
From: Jens Axboe @ 2019-05-25 12:37 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: linux-block, Aarushi Mehta, Julia Suvorova

On 5/25/19 2:58 AM, Stefan Hajnoczi wrote:
> Patch 1 adds pkg-config support so that applications are not required to
> hardcode compiler flags that may change depending on the distro.
> 
> Patch 2 moves installation paths to ./configure so they are adjustable from the
> command-line and do not require modifying the makefile.  This is necessary so
> Fedora x86_64 can set libdir to /usr/lib64.
> 
> I have tested this by building Aarushi Mehta's QEMU io_uring support
> using pkg-config on a Fedora x86_64 host.

Applied, thanks.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-05-25 12:37 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-25  8:58 [PATCH liburing 0/2] pkg-config support Stefan Hajnoczi
2019-05-25  8:58 ` [PATCH liburing 1/2] pkgconfig: install a liburing.pc file Stefan Hajnoczi
2019-05-25  8:58 ` [PATCH liburing 2/2] configure: move directory options to ./configure Stefan Hajnoczi
2019-05-25 12:37 ` [PATCH liburing 0/2] pkg-config support Jens Axboe

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.