UtrechtUniversity / davrods

An Apache WebDAV interface to iRODS
GNU Lesser General Public License v3.0
23 stars 12 forks source link

davrods not compiling for irods 4.3.2 on el9 #35

Open cookie33 opened 2 months ago

cookie33 commented 2 months ago

Hi,

We needed a version of davrods for iRODS 4.3.2 on el9. We build it ourselves.

We did following:

~/git
# git clone https://github.com/UtrechtUniversity/davrods.git

update CMakelist.txt with version 4.3.2

~/git/davrods/build
# grep 4.3 ../CMakeLists.txt
set(IRODSRT_VERSION "4.3.2" CACHE STRING "iRODS client library version")

create makefiles

~/git/davrods/build
# cmake ..

build

~/git/davrods/build
# make
[  9%] Building C object CMakeFiles/mod_davrods.dir/src/mod_davrods.c.o
[ 18%] Building C object CMakeFiles/mod_davrods.dir/src/auth.c.o
[ 27%] Building C object CMakeFiles/mod_davrods.dir/src/common.c.o
[ 36%] Building C object CMakeFiles/mod_davrods.dir/src/config.c.o
[ 45%] Building C object CMakeFiles/mod_davrods.dir/src/prop.c.o
[ 54%] Building C object CMakeFiles/mod_davrods.dir/src/propdb.c.o
[ 63%] Building C object CMakeFiles/mod_davrods.dir/src/repo.c.o
In file included from /usr/include/string.h:519,
                 from /usr/include/apr-1/apr_want.h:63,
                 from /usr/include/apr-1/apr_pools.h:47,
                 from /usr/include/apr-1/apr_tables.h:26,
                 from /usr/include/apr-1/apr_hooks.h:22,
                 from /usr/include/httpd/ap_hooks.h:40,
                 from /usr/include/httpd/ap_config.h:25,
                 from /usr/include/httpd/httpd.h:44,
                 from /root/git/davrods/src/mod_davrods.h:29,
                 from /root/git/davrods/src/common.h:25,
                 from /root/git/davrods/src/repo.h:25,
                 from /root/git/davrods/src/repo.c:22:
In function ‘strncpy’,
    inlined from ‘walker’ at /root/git/davrods/src/repo.c:1527:13:
/usr/include/bits/string_fortified.h:95:10: warning: ‘__builtin_strncpy’ specified bound 32 equals destination size [-Wstringop-truncation]
   95 |   return __builtin___strncpy_chk (__dest, __src, __len,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   96 |                                   __glibc_objsize (__dest));
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘strncpy’,
    inlined from ‘walker’ at /root/git/davrods/src/repo.c:1528:13:
/usr/include/bits/string_fortified.h:95:10: warning: ‘__builtin_strncpy’ specified bound 32 equals destination size [-Wstringop-truncation]
   95 |   return __builtin___strncpy_chk (__dest, __src, __len,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   96 |                                   __glibc_objsize (__dest));
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~
[ 72%] Building C object CMakeFiles/mod_davrods.dir/src/listing.c.o
[ 81%] Building C object CMakeFiles/mod_davrods.dir/src/lock_local.c.o
[ 90%] Building C object CMakeFiles/mod_davrods.dir/src/byterange.c.o
[100%] Linking C shared library mod_davrods.so
/usr/bin/ld: CMakeFiles/mod_davrods.dir/src/auth.c.o:/root/git/davrods/src/mod_davrods.h:35: multiple definition of `davrods_module'; CMakeFiles/mod_davrods.dir/src/mod_davrods.c.o:/root/git/davrods/src/mod_davrods.h:35: first defined here
/usr/bin/ld: CMakeFiles/mod_davrods.dir/src/common.c.o:/root/git/davrods/src/mod_davrods.h:35: multiple definition of `davrods_module'; CMakeFiles/mod_davrods.dir/src/mod_davrods.c.o:/root/git/davrods/src/mod_davrods.h:35: first defined here
/usr/bin/ld: CMakeFiles/mod_davrods.dir/src/config.c.o:/root/git/davrods/src/mod_davrods.h:35: multiple definition of `davrods_module'; CMakeFiles/mod_davrods.dir/src/mod_davrods.c.o:/root/git/davrods/src/mod_davrods.h:35: first defined here
/usr/bin/ld: CMakeFiles/mod_davrods.dir/src/prop.c.o:/root/git/davrods/src/mod_davrods.h:35: multiple definition of `davrods_module'; CMakeFiles/mod_davrods.dir/src/mod_davrods.c.o:/root/git/davrods/src/mod_davrods.h:35: first defined here
/usr/bin/ld: CMakeFiles/mod_davrods.dir/src/propdb.c.o:/root/git/davrods/src/mod_davrods.h:35: multiple definition of `davrods_module'; CMakeFiles/mod_davrods.dir/src/mod_davrods.c.o:/root/git/davrods/src/mod_davrods.h:35: first defined here
/usr/bin/ld: CMakeFiles/mod_davrods.dir/src/repo.c.o:/root/git/davrods/src/mod_davrods.h:35: multiple definition of `davrods_module'; CMakeFiles/mod_davrods.dir/src/mod_davrods.c.o:/root/git/davrods/src/mod_davrods.h:35: first defined here
/usr/bin/ld: CMakeFiles/mod_davrods.dir/src/listing.c.o:/root/git/davrods/src/mod_davrods.h:35: multiple definition of `davrods_module'; CMakeFiles/mod_davrods.dir/src/mod_davrods.c.o:/root/git/davrods/src/mod_davrods.h:35: first defined here
/usr/bin/ld: CMakeFiles/mod_davrods.dir/src/lock_local.c.o:/root/git/davrods/src/mod_davrods.h:35: multiple definition of `davrods_module'; CMakeFiles/mod_davrods.dir/src/mod_davrods.c.o:/root/git/davrods/src/mod_davrods.h:35: first defined here
/usr/bin/ld: CMakeFiles/mod_davrods.dir/src/byterange.c.o:/root/git/davrods/src/mod_davrods.h:35: multiple definition of `davrods_module'; CMakeFiles/mod_davrods.dir/src/mod_davrods.c.o:/root/git/davrods/src/mod_davrods.h:35: first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/mod_davrods.dir/build.make:241: mod_davrods.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/mod_davrods.dir/all] Error 2
make: *** [Makefile:156: all] Error 2

Fixed as follows:

~/git/davrods/build
# git diff
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7966f53..47f6b03 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.8.12)

 project(davrods C)

-set(IRODSRT_VERSION "4.2.12" CACHE STRING "iRODS client library version")
+set(IRODSRT_VERSION "4.3.2" CACHE STRING "iRODS client library version")

 set(DAVRODS_FEATURE     "1.5.1")
 set(DAVRODS_VERSION     "${IRODSRT_VERSION}_${DAVRODS_FEATURE}")
@@ -65,6 +65,7 @@ add_compile_options(-Wall
                     -g3
                     -ggdb
                     -O2
+                    -fcommon
                     -fexceptions
                     -DLINUX
                     -D_REENTRANT

And then it builds

~/git/davrods/build
[main|+1]
root# make
-- Configuring done (0.3s)
-- Generating done (0.0s)
-- Build files have been written to: /root/git/davrods/build
[  9%] Building C object CMakeFiles/mod_davrods.dir/src/mod_davrods.c.o
[ 18%] Building C object CMakeFiles/mod_davrods.dir/src/auth.c.o
[ 27%] Building C object CMakeFiles/mod_davrods.dir/src/common.c.o
[ 36%] Building C object CMakeFiles/mod_davrods.dir/src/config.c.o
[ 45%] Building C object CMakeFiles/mod_davrods.dir/src/prop.c.o
[ 54%] Building C object CMakeFiles/mod_davrods.dir/src/propdb.c.o
[ 63%] Building C object CMakeFiles/mod_davrods.dir/src/repo.c.o
In file included from /usr/include/string.h:519,
                 from /usr/include/apr-1/apr_want.h:63,
                 from /usr/include/apr-1/apr_pools.h:47,
                 from /usr/include/apr-1/apr_tables.h:26,
                 from /usr/include/apr-1/apr_hooks.h:22,
                 from /usr/include/httpd/ap_hooks.h:40,
                 from /usr/include/httpd/ap_config.h:25,
                 from /usr/include/httpd/httpd.h:44,
                 from /root/git/davrods/src/mod_davrods.h:29,
                 from /root/git/davrods/src/common.h:25,
                 from /root/git/davrods/src/repo.h:25,
                 from /root/git/davrods/src/repo.c:22:
In function ‘strncpy’,
    inlined from ‘walker’ at /root/git/davrods/src/repo.c:1527:13:
/usr/include/bits/string_fortified.h:95:10: warning: ‘__builtin_strncpy’ specified bound 32 equals destination size [-Wstringop-truncation]
   95 |   return __builtin___strncpy_chk (__dest, __src, __len,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   96 |                                   __glibc_objsize (__dest));
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘strncpy’,
    inlined from ‘walker’ at /root/git/davrods/src/repo.c:1528:13:
/usr/include/bits/string_fortified.h:95:10: warning: ‘__builtin_strncpy’ specified bound 32 equals destination size [-Wstringop-truncation]
   95 |   return __builtin___strncpy_chk (__dest, __src, __len,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   96 |                                   __glibc_objsize (__dest));
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~
[ 72%] Building C object CMakeFiles/mod_davrods.dir/src/listing.c.o
[ 81%] Building C object CMakeFiles/mod_davrods.dir/src/lock_local.c.o
[ 90%] Building C object CMakeFiles/mod_davrods.dir/src/byterange.c.o
[100%] Linking C shared library mod_davrods.so
[100%] Built target mod_davrods

And we are able to create a package from it:

~/git/davrods/build
# make package
[100%] Built target mod_davrods
Run CPack packaging tool...
CPack: Create package using RPM
CPack: Install projects
CPack: - Run preinstall target for: davrods
CPack: - Install project: davrods []
CPack: Create package
CMake Warning (dev) at /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:188 (message):
  CPackRPM:Warning: Path /etc/httpd/conf.d/davrods-anonymous-vhost.conf is
  not on one of the relocatable paths! Package will be partially relocatable.
Call Stack (most recent call first):
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1056 (cpack_rpm_prepare_relocation_paths)
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1968 (cpack_rpm_generate_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:188 (message):
  CPackRPM:Warning: Path /etc/httpd/conf.d/davrods-vhost.conf is not on one
  of the relocatable paths! Package will be partially relocatable.
Call Stack (most recent call first):
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1056 (cpack_rpm_prepare_relocation_paths)
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1968 (cpack_rpm_generate_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:188 (message):
  CPackRPM:Warning: Path /etc/httpd/conf.modules.d/10-davrods.conf is not on
  one of the relocatable paths! Package will be partially relocatable.
Call Stack (most recent call first):
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1056 (cpack_rpm_prepare_relocation_paths)
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1968 (cpack_rpm_generate_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:188 (message):
  CPackRPM:Warning: Path /etc/httpd/irods/README.md is not on one of the
  relocatable paths! Package will be partially relocatable.
Call Stack (most recent call first):
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1056 (cpack_rpm_prepare_relocation_paths)
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1968 (cpack_rpm_generate_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:188 (message):
  CPackRPM:Warning: Path /etc/httpd/irods/footer.html is not on one of the
  relocatable paths! Package will be partially relocatable.
Call Stack (most recent call first):
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1056 (cpack_rpm_prepare_relocation_paths)
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1968 (cpack_rpm_generate_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:188 (message):
  CPackRPM:Warning: Path /etc/httpd/irods/head.html is not on one of the
  relocatable paths! Package will be partially relocatable.
Call Stack (most recent call first):
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1056 (cpack_rpm_prepare_relocation_paths)
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1968 (cpack_rpm_generate_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:188 (message):
  CPackRPM:Warning: Path /etc/httpd/irods/header.html is not on one of the
  relocatable paths! Package will be partially relocatable.
Call Stack (most recent call first):
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1056 (cpack_rpm_prepare_relocation_paths)
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1968 (cpack_rpm_generate_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:188 (message):
  CPackRPM:Warning: Path /etc/httpd/irods/irods_environment.json is not on
  one of the relocatable paths! Package will be partially relocatable.
Call Stack (most recent call first):
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1056 (cpack_rpm_prepare_relocation_paths)
  /usr/share/cmake/Modules/Internal/CPack/CPackRPM.cmake:1968 (cpack_rpm_generate_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

CPackRPM: Will use GENERATED spec file: /root/git/davrods/build/_CPack_Packages/Linux/RPM/SPECS/davrods.spec
CPack: - package: /root/git/davrods/build/davrods-4.3.2_1.5.1-1.rpm generated.

Two questions:

Greetings

Cookie33

korydraughn commented 2 months ago

Warnings should be treated as errors, unless you're sure the warning is irrelevant.

As for using -fcommon, I'd say it's not a proper fix. My guess is the code has ODR violations which need to be addressed. Based on the implementation, it looks like all that's needed is to mark the declaration as extern.

The line of interest: https://github.com/UtrechtUniversity/davrods/blob/2a3cb96643802fe3d80a648c44819b147465c689/src/mod_davrods.h#L35

Suggested change:

-module AP_MODULE_DECLARE_DATA davrods_module;
+extern module AP_MODULE_DECLARE_DATA davrods_module;
cookie33 commented 2 months ago

Thanks.

The build passes with the proposed update on Centos7 with iRODS 4.3.1 The build passes with the proposed update on el9 with iRODS 4.3.2