Hi,
Inspired by Timofei's work on the cmake branch, I checked it out and tried
to build on Linux.
It worked, almost.
[[[
[ 17%] Building C object
CMakeFiles/libsvn_subr.dir/subversion/libsvn_subr/sysinfo.c.o
/home/dsg/svn_cmake/subversion/libsvn_subr/sysinfo.c: In function
‘linux_release_name’:
/home/dsg/svn_cmake/subversion/libsvn_subr/sysinfo.c:649:31: warning:
implicit declaration of function ‘release_name_from_uname’
[-Wimplicit-function-declaration]
649 | const char *uname_release = release_name_from_uname(pool);
| ^~~~~~~~~~~~~~~~~~~~~~~
/home/dsg/svn_cmake/subversion/libsvn_subr/sysinfo.c:649:31: warning:
initialization of ‘const char *’ from ‘int’ makes pointer from integer
without a cast [-Wint-conversion]
/home/dsg/svn_cmake/subversion/libsvn_subr/sysinfo.c: In function
‘linux_shared_libs’:
/home/dsg/svn_cmake/subversion/libsvn_subr/sysinfo.c:750:65: warning:
implicit declaration of function ‘getpid’ [-Wimplicit-function-declaration]
750 | const char *maps = apr_psprintf(pool, "/proc/%ld/maps",
(long)getpid());
|
^~~~~~
]]]
The above warnings were caused by missing defines HAVE_SYS_UTSNAME_H,
HAVE_UNAME and HAVE_UNISTD_H.
I also got the following error:
[[[
[ 64%] Linking C shared library liblibsvn_ra-1.so
/usr/bin/ld: liblibsvn_ra_svn.a(marshal.c.o): warning: relocation against
`svn_ctype_table' in read-only section `.text'
/usr/bin/ld: liblibsvn_ra_svn.a(client.c.o): relocation R_X86_64_PC32
against symbol `svn_ctype_table' can not be used when making a shared
object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
gmake[2]: *** [CMakeFiles/libsvn_ra.dir/build.make:186: liblibsvn_ra-1.so]
Error 1
gmake[1]: *** [CMakeFiles/Makefile2:330: CMakeFiles/libsvn_ra.dir/all]
Error 2
gmake: *** [Makefile:136: all] Error 2
]]]
I made some effort trying to figure out the proper way to fix this and I
came up with the following changes. After this the build succeeds and I get
a working svn binary.
I'm SURE this doesn't follow CMake best-practice but I'd be happy if it
could be a starting point in getting CMake to work under Linux. I'd also be
happy to see how it SHOULD be done :-)
To get this to work under Macos, someone should look at the
SVN_HAVE_MACOS_PLIST define.
[[[
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt (revision 1919275)
+++ CMakeLists.txt (working copy)
@@ -125,8 +125,29 @@
enable_testing()
endif()
+include(CheckSymbolExists)
+include(CheckIncludeFiles)
+check_include_files("sys/utsname.h" HAVE_SYS_UTSNAME_H)
+if (HAVE_SYS_UTSNAME_H)
+ add_compile_definitions(HAVE_SYS_UTSNAME_H)
+
+ check_symbol_exists(uname sys/utsname.h HAVE_UNAME)
+ if (HAVE_UNAME)
+ add_compile_definitions(HAVE_UNAME)
+ endif()
+endif()
+check_include_files("unistd.h" HAVE_UNISTD_H)
+if (HAVE_UNISTD_H)
+ add_compile_definitions(HAVE_UNISTD_H)
+endif()
+
+if (BUILD_SHARED_LIBS)
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+endif()
+
if(SVN_BUILD_SHARED_FS)
set(SVN_FS_BUILD_TYPE SHARED)
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
else()
set(SVN_FS_BUILD_TYPE STATIC)
endif()
@@ -133,6 +154,7 @@
if(SVN_BUILD_SHARED_RA)
set(SVN_RA_BUILD_TYPE SHARED)
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
else()
set(SVN_RA_BUILD_TYPE STATIC)
endif()
]]]