Red Hat Bugzilla – Bug 214533
configure needs to support --with-fhs
Last modified: 2015-12-07 11:57:55 EST
Description of problem:
Richard Megginson wrote:
> I think we just need the following options:
> 1) Default paths - user specifies nothing, use defaults for everything -
layout looks like this:
> /opt/fedora-ds - the default prefix
> bin/ - bindir is relative to exec_prefix (which set to prefix by default)
> lib/ - libdir is relative to exec_prefix (which set to prefix by default)
> etc/ - relative to prefix
> var/ - relative to prefix
> share/ - relative to prefix
> include/ - relative to prefix
> which is what we want, I think. I don't think we want to have
/opt/fedora-ds/usr/include or /opt/fedora-ds/usr/bin or the like - I think we
want to have everything under a flat namespace if a prefix is given. And in
this case, we don't need libdir/fedora-ds, share/fedora-ds, etc. since
everything is already under a single path.
> 2) User specified prefix - user specifies --prefix=/path - layout is the same
> This would be useful for development e.g. configure
--prefix=/export/rmeggins/ds72 && make && make install
> 3) FHS style --with-fhs
> This is equivalent to
> --prefix= --exec_prefix=/usr --includedir=/usr/include --datadir=/usr/share
> based on the default definitions in configure:
> So this would result in the following:
> It's weird that both datadir and includedir are defined relative to prefix and
not exec_prefix. If they were defined in terms of exec_prefix, we could just
get FHS by doing
> --prefix= --exec_prefix=/usr
> I think this is all we need. For the GNU style, you just specify
--prefix=/usr/local. I'm not sure what other styles we need to support.
Richard Megginson wrote:
> I think the best approach would be to have configure set all of these paths as
#define in an include file or -D on the gcc command line:
> #define LOCALSTATEDIR "/var"
> #define SYSCONFDIR "/etc"
> #define BINDIR "/usr/bin"
> #define DATADIR "/usr/share"
> #define DOCDIR "/usr/doc"
> I think we also need libdir.
> I think we can just use AC_DEFINE for this, or perhaps configure automatically
> configure can automatically create a config.h that we can include in our files
if we don't want it to define everything on the command line.
Created attachment 140927 [details]
cvs diffs (configure.ac Makefile.am), new file m4/fhs.m4
1. introduced a new option --with-fhs
2. instead of passing the define macro with -D, generate config.h
I verified that the changes in Comment #1 generates config.h with the following
with_fhs/config.h:#define IS_FHS 1
without_fhs:/* #undef IS_FHS */
And the build command line (on RHEL4) looks like this:
if gcc -DHAVE_CONFIG_H -I. -I.. -I. -DXP_UNIX -DLinux -DLINUX -DLINUX2_0
-DLINUX2_2 -DLINUX2_4 -DBUILD_NUM=\"2006.314.1857\" -I../ldap/include
-I../ldap/servers/slapd -I../include -I. -I../lib/ldaputil
-I/usr/include/mozldap6 -I/usr/include/dirsec/nspr4 -I/usr/include/dirsec/nss3
-I/usr/include/dirsec/nss3 -I/usr/include/dirsec/nspr4 -g -O2 -MT
lib/ldaputil/libldaputil_a-ldapdb.o -MD -MP -MF
"lib/ldaputil/.deps/libldaputil_a-ldapdb.Tpo" -c -o
lib/ldaputil/libldaputil_a-ldapdb.o `test -f 'lib/ldaputil/ldapdb.c' || echo
Now, each source file can have this include at the top of the code?
# include <config.h>
(In reply to comment #2)
> Now, each source file can have this include at the top of the code?
> #ifdef HAVE_CONFIG_H
> # include <config.h>
Yes. If there are already common include files, we might be able to save some
work and just put that code in the common include files. OTOH, it's probably
not a big deal to write a script to add this to all our source code.
(In reply to comment #3)
> (In reply to comment #2)
> > Now, each source file can have this include at the top of the code?
> > #ifdef HAVE_CONFIG_H
> > # include <config.h>
> > #endif
> Yes. If there are already common include files, we might be able to save some
> work and just put that code in the common include files. OTOH, it's probably
> not a big deal to write a script to add this to all our source code.
Thanks, Rich! The autoconf manual writes "The package should '#include' the
configuration header file before any other header files, to prevent
inconsistencies in declarations (for example, if it redefines const)." So, I
think it'd be safer in the long run to add the include to all... Let me work on it.
Created attachment 140943 [details]
cvs diffs (all the source codes)
Added the following include next to the end of the copyright block.
+# include <config.h>
I updated all the *.h, *.c, *.cpp, and *.cc files under ldapserver.
(In reply to comment #5)
I assume this "Ok" includes this note "to add this to all our source code." :)
And Nathan gave me a verbal ok, too.
I'm going to check in ALL the source code files in 15 min (starting from 3:30pm)
... Please stop me now if you have any issue.
Created attachment 140948 [details]
cvs commit message (ldapserver)
Checked in the diffs in Comment #6 into HEAD.
Created attachment 140949 [details]
cvs commit (autoconf tools)
Reviewed by Rich (Thank you!)
Checked in the files reviewed (configure.ac, Makefile.am, and m4/fhs.m4) as
well as the generated files by autogen.sh (Makefile.in configure) into HEAD.
Changes: if --with-fhs is set, bindir, libdir, and datadir starts from $prefix/usr:
RCS file: /cvs/dirsec/ldapserver/configure.ac,v
retrieving revision 1.8
diff -t -w -U4 -r1.8 configure.ac
--- configure.ac 10 Nov 2006 23:59:15 -0000 1.8
+++ configure.ac 11 Nov 2006 01:11:45 -0000
@@ -127,9 +127,13 @@
# installation paths
+if test "$with_fhs" = "yes"; then
# relative to sysconfdir
# relative to datadir
Now, ds_newinst.pl works without any changes.
$ cd <prefix>
$ ls usr
bin/ lib/ share/
$ ls usr/*
dbgen.pl* infadd* infadd-bin* ldclt* ldclt-bin* rsearch* rsearch-bin*
$ perl usr/lib/fedora-ds/ds_newinst.pl /tmp/install.inf
[nhosoi@laputa ds72_core]$ perl usr/lib/fedora-ds/ds_newinst.pl
/tmp/install.infSuccess! Your new directory server instance was created
Note: create_instance is going to be updated to support --without-fhs, too.
Note: if $prefix is not added, bindir starts from /usr/bin although I set
Created attachment 141084 [details]
cvs commit message (confiugre.ac configure)
Reviewed by Nathan (Thank you!!)
Checked in into HEAD.
Created attachment 141108 [details]
configure.ac: $prefix should have been @prefix@. $prefix is replaced with the
value of --prefix, but not with AC_PREFIX_DEFAULT when --prefix is not given.
create_instance.[ch]: depending upon the macro IS_FHS, change swich the LIBDIR,
BINDIR, DATADIR, and DOCDIR.
ds_newinst.pl.in: use @libdir@ to get the ds_newinst path.
Created attachment 141122 [details]
cvs commit message
Reviewed by Rich (Thank you!!!)
Checked in into HEAD.
$ cvs st configure
File: configure Status: Up-to-date
Working revision: 1.77
Repository revision: 1.77 /cvs/dirsec/ldapserver/configure,v
Sticky Tag: (none)
Sticky Date: (none)
Sticky Options: (none)
$ ./configure --help | egrep with-fhs
--with-fhs Use FHS layout
--with-fhs-opt Use FHS optional layout
The package built with --with-fhs is installed at the directories defined with
FHS. If --prefix=<path> is added to it, FHS under <prefix> is used. If an inf
file is passed to setup (setup-ds.pl or setup-ds-admin.pl), the directory
instance is created at the locations specified in the inf file (quickinstall