Re: [PATCH RESEND 2/2] btrfs-progs: make all programs and libraries optional
On Mon, Jul 16, 2018 at 10:44:52AM -0700, Omar Sandoval wrote: > On Mon, Jul 16, 2018 at 04:56:57PM +0200, David Sterba wrote: > > On Thu, Jul 12, 2018 at 04:11:19PM -0700, Omar Sandoval wrote: > > > From: Omar Sandoval > > > > > > We have a build system internally which only needs to build the > > > libraries out of a repository, not any binaries. I looked at how this > > > works with other projects, and the best example was util-linux, which > > > makes it possible to enable or disable everything individually. This is > > > nice and really flexible, so let's do the same. This way, if you only > > > want to build and install libbtrfsutil, you can simply do > > > > > > ./configure --disable-documentation --disable-all-programs > > > --enable-libbtrfsutil > > > make > > > make install > > > > I think this is an overkill and abusing the --enable-XXX options. You > > want to avoid building the tools by default, so adding an option for > > that is fine. Selectively building only certain tools can utilize that > > option too and just follow with 'make btrfs-image' etc. > > Yeah, it's easy to build stuff selectively, but `make install` will > still try to build everything, that's the part I'm more concerned with. Oh right, installation. What if it installs just the binaries that are built? The default actions done by configure & make & make install would not change, but there could be configure --disable-all, then selectively make and final make install would be for p in $(progs_install); if test -f $p && $(INSTALL) ...; fi > > The number of --enable-* will stay minimal and we don't even have to > > discuss how to find a good naming scheme (that works for util-linux but > > looks a bit confusing for btrfs-progs). > > Ok, I can collapse these into just --disable-programs/--enable-programs, > and --disable-libraries/--enable-libraries? That would be enough for me. Sounds ok. -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH RESEND 2/2] btrfs-progs: make all programs and libraries optional
On Mon, Jul 16, 2018 at 04:56:57PM +0200, David Sterba wrote: > On Thu, Jul 12, 2018 at 04:11:19PM -0700, Omar Sandoval wrote: > > From: Omar Sandoval > > > > We have a build system internally which only needs to build the > > libraries out of a repository, not any binaries. I looked at how this > > works with other projects, and the best example was util-linux, which > > makes it possible to enable or disable everything individually. This is > > nice and really flexible, so let's do the same. This way, if you only > > want to build and install libbtrfsutil, you can simply do > > > > ./configure --disable-documentation --disable-all-programs > > --enable-libbtrfsutil > > make > > make install > > I think this is an overkill and abusing the --enable-XXX options. You > want to avoid building the tools by default, so adding an option for > that is fine. Selectively building only certain tools can utilize that > option too and just follow with 'make btrfs-image' etc. Yeah, it's easy to build stuff selectively, but `make install` will still try to build everything, that's the part I'm more concerned with. > The number of --enable-* will stay minimal and we don't even have to > discuss how to find a good naming scheme (that works for util-linux but > looks a bit confusing for btrfs-progs). Ok, I can collapse these into just --disable-programs/--enable-programs, and --disable-libraries/--enable-libraries? That would be enough for me. -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH RESEND 2/2] btrfs-progs: make all programs and libraries optional
On Thu, Jul 12, 2018 at 04:11:19PM -0700, Omar Sandoval wrote: > From: Omar Sandoval > > We have a build system internally which only needs to build the > libraries out of a repository, not any binaries. I looked at how this > works with other projects, and the best example was util-linux, which > makes it possible to enable or disable everything individually. This is > nice and really flexible, so let's do the same. This way, if you only > want to build and install libbtrfsutil, you can simply do > > ./configure --disable-documentation --disable-all-programs > --enable-libbtrfsutil > make > make install I think this is an overkill and abusing the --enable-XXX options. You want to avoid building the tools by default, so adding an option for that is fine. Selectively building only certain tools can utilize that option too and just follow with 'make btrfs-image' etc. The number of --enable-* will stay minimal and we don't even have to discuss how to find a good naming scheme (that works for util-linux but looks a bit confusing for btrfs-progs). -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 2/2] btrfs-progs: make all programs and libraries optional
From: Omar Sandoval We have a build system internally which only needs to build the libraries out of a repository, not any binaries. I looked at how this works with other projects, and the best example was util-linux, which makes it possible to enable or disable everything individually. This is nice and really flexible, so let's do the same. This way, if you only want to build and install libbtrfsutil, you can simply do ./configure --disable-documentation --disable-all-programs --enable-libbtrfsutil make make install Signed-off-by: Omar Sandoval --- Makefile| 129 +++- Makefile.inc.in | 16 +- configure.ac| 138 +--- 3 files changed, 226 insertions(+), 57 deletions(-) diff --git a/Makefile b/Makefile index 62102baf..fe71b694 100644 --- a/Makefile +++ b/Makefile @@ -206,22 +206,40 @@ endif MAKEOPTS = --no-print-directory Q=$(Q) -# build all by default -progs = $(progs_install) btrfsck btrfs-corrupt-block - -# install only selected -progs_install = btrfs mkfs.btrfs btrfs-map-logical btrfs-image \ - btrfs-find-root btrfstune \ - btrfs-select-super - -# other tools, not built by default -progs_extra = btrfs-fragments - -progs_static = $(foreach p,$(progs),$(p).static) - -ifneq ($(DISABLE_BTRFSCONVERT),1) +ifeq ($(BUILD_BTRFS),1) +progs_install += btrfs +progs += btrfsck +endif +ifeq ($(BUILD_CONVERT),1) progs_install += btrfs-convert endif +ifeq ($(BUILD_CORRUPT_BLOCK),1) +progs += btrfs-corrupt-block +endif +ifeq ($(BUILD_FIND_ROOT),1) +progs_install += btrfs-find-root +endif +ifeq ($(BUILD_FRAGMENTS),1) +progs += btrfs-fragments +endif +ifeq ($(BUILD_IMAGE),1) +progs_install += btrfs-image +endif +ifeq ($(BUILD_MAP_LOGICAL),1) +progs_install += btrfs-map-logical +endif +ifeq ($(BUILD_MKFS),1) +progs_install += mkfs.btrfs +endif +ifeq ($(BUILD_SELECT_SUPER),1) +progs_install += btrfs-select-super +endif +ifeq ($(BUILD_TUNE),1) +progs_install += btrfstune +endif + +progs += $(progs_install) +progs_static = $(foreach p,$(progs),$(p).static) # external libs required by various binaries; for btrfs-foo, # specify btrfs_foo_libs = ; see $($(subst...)) rules below @@ -233,7 +251,7 @@ cmds_restore_cflags = -DBTRFSRESTORE_ZSTD=$(BTRFSRESTORE_ZSTD) CHECKER_FLAGS += $(btrfs_convert_cflags) # collect values of the variables above -standalone_deps = $(foreach dep,$(patsubst %,%_objects,$(subst -,_,$(filter btrfs-%, $(progs) $(progs_extra,$($(dep))) +standalone_deps = $(foreach dep,$(patsubst %,%_objects,$(subst -,_,$(filter btrfs-%, $(progs,$($(dep))) SUBDIRS = BUILDDIRS = $(patsubst %,build-%,$(SUBDIRS)) @@ -262,10 +280,21 @@ static_convert_objects = $(patsubst %.o, %.static.o, $(convert_objects)) static_mkfs_objects = $(patsubst %.o, %.static.o, $(mkfs_objects)) static_image_objects = $(patsubst %.o, %.static.o, $(image_objects)) -libs_shared = libbtrfs.so.0.1 libbtrfsutil.so.$(libbtrfsutil_version) -libs_static = libbtrfs.a libbtrfsutil.a +ifeq ($(BUILD_LIBBTRFS),1) +ifeq ($(BUILD_SHARED),1) +libs_shared += libbtrfs.so.0.1 +lib_links += libbtrfs.so.0 libbtrfs.so +endif +libs_static += libbtrfs.a +endif +ifeq ($(BUILD_LIBBTRFSUTIL),1) +ifeq ($(BUILD_SHARED),1) +libs_shared += libbtrfsutil.so.$(libbtrfsutil_version) +lib_links += libbtrfsutil.so.$(libbtrfsutil_major) libbtrfsutil.so +endif +libs_static += libbtrfsutil.a +endif libs = $(libs_shared) $(libs_static) -lib_links = libbtrfs.so.0 libbtrfs.so libbtrfsutil.so.$(libbtrfsutil_major) libbtrfsutil.so # make C=1 to enable sparse ifdef C @@ -303,7 +332,7 @@ endif $($(subst -,_,btrfs-$(@:%/$(notdir $@)=%)-cflags)) all: $(progs) $(libs) $(lib_links) $(BUILDDIRS) -ifeq ($(PYTHON_BINDINGS),1) +ifeq ($(BUILD_PYTHON),1) all: libbtrfsutil_python endif $(SUBDIRS): $(BUILDDIRS) @@ -353,7 +382,7 @@ testsuite: btrfs-corrupt-block fssum @echo "Export tests as a package" $(Q)cd tests && ./export-testsuite.sh -ifeq ($(PYTHON_BINDINGS),1) +ifeq ($(BUILD_PYTHON),1) test-libbtrfsutil: libbtrfsutil_python mkfs.btrfs $(Q)cd libbtrfsutil/python; \ LD_LIBRARY_PATH=../.. $(PYTHON) -m unittest discover -v tests @@ -413,7 +442,7 @@ libbtrfsutil.so.$(libbtrfsutil_major) libbtrfsutil.so: libbtrfsutil.so.$(libbtrf @echo "[LN] $@" $(Q)$(LN_S) -f $< $@ -ifeq ($(PYTHON_BINDINGS),1) +ifeq ($(BUILD_PYTHON),1) libbtrfsutil_python: libbtrfsutil.so.$(libbtrfsutil_major) libbtrfsutil.so libbtrfsutil/btrfsutil.h @echo "[PY] libbtrfsutil" $(Q)cd libbtrfsutil/python; \ @@ -439,14 +468,14 @@ btrfs-%.static: btrfs-%.static.o $(static_objects) $(patsubst %.o,%.static.o,$(s $(static_libbtrfs_objects) $(STATIC_LDFLAGS) \ $($(subst -,_,$(subst .static,,$@)-libs)) $(STATIC_LIBS) -btrfs-%: btrfs-%.o $(objects) $(standalone_deps) $(libs_static) +btrfs-%: btrfs-%.o $(objects) $(standalone_deps)