summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorTing-Wei Lan <lantw@src.gnome.org>2019-07-22 14:32:59 +0800
committerTing-Wei Lan <lantw@src.gnome.org>2019-07-22 15:58:18 +0800
commit39de081ad5e50e484487918e9302c11ffbaa3bc9 (patch)
tree9d44f61776e50afb187c2bbfce3dca211ea43330 /cmake
parentcd22dd2d9596eafe802a1957713063084aff45ff (diff)
downloadlibical-git-39de081ad5e50e484487918e9302c11ffbaa3bc9.tar.gz
GtkDoc.cmake - include LDFLAGS in gtkdoc-scangobj command line
When a library provides no way to find linker flags for linking with it, the build system usually depends on the user to necessary put -L flags in LDFLAGS environment variable in order to find it. However, GtkDoc module constructs the command line by itself, and it forgets to add LDFLAGS to the command line of gtkdoc-scangobj. It is especially important to include LDFLAGS on non-GNU systems. For example, FreeBSD libc doesn't include a gettext implementation. GLib requires gettext, and it pulls in an external gettext runtime for it. However, gettext-runtime doesn't include a .pc file, so LDFLAGS is required if gettext-runtime isn't installed in the same prefix as GLib. Failing to include LDFLAGS in --ldflags passed to gtkdoc-scangobj can result in a linking error because -lintl cannot be found. In addition to the change to include LDFLAGS, this commit also changes the following things: - Instead of constructing _scangobj_ldflags in reverse order, do it in normal order. Appending is easier to understand than prepending, and the linker also interprets -L and -l flags in normal order. - Move -L${LIB_INSTALL_DIR} to the bottom. This is what the comment says, and it is expected to work because we no longer constructs _scangobj_ldflags in reverse order. - Move NOT TARGET case to a separate loop. This change is pulled from evolution-data-server. The reason of doing so is that we should put internal libraries in front of external libraries, so the linker always prefers libraries built as parts of the project to libraries installed on the system.
Diffstat (limited to 'cmake')
-rw-r--r--cmake/modules/GtkDoc.cmake19
1 files changed, 14 insertions, 5 deletions
diff --git a/cmake/modules/GtkDoc.cmake b/cmake/modules/GtkDoc.cmake
index 03a0c1dd..cc5b2bb4 100644
--- a/cmake/modules/GtkDoc.cmake
+++ b/cmake/modules/GtkDoc.cmake
@@ -94,9 +94,8 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign
list(APPEND _scangobj_deps ${opt})
endforeach()
- # Add them as the last, thus in-tree headers/libs have precedence
+ # Add it as the last, thus in-tree headers have precedence
list(APPEND _scangobj_cflags_list -I${INCLUDE_INSTALL_DIR})
- list(APPEND _scangobj_ldflags -L${LIB_INSTALL_DIR})
if(_scangobj_deps)
list(REMOVE_DUPLICATES _scangobj_deps)
@@ -119,7 +118,7 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign
if(NOT _output_name)
set(_output_name ${opt})
endif()
- set(_scangobj_ldflags "-L$<TARGET_FILE_DIR:${opt}> -l${_output_name} ${_scangobj_ldflags}")
+ set(_scangobj_ldflags "${_scangobj_ldflags} -L$<TARGET_FILE_DIR:${opt}> -l${_output_name}")
if(_target_type STREQUAL "SHARED_LIBRARY" OR (_target_type STREQUAL "MODULE_LIBRARY"))
set(_scangobj_ld_lib_dirs "${_scangobj_ld_lib_dirs}:$<TARGET_FILE_DIR:${opt}>")
@@ -127,11 +126,21 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign
unset(_output_name)
endif()
unset(_target_type)
- else()
- set(_scangobj_ldflags "${opt} ${_scangobj_ldflags}")
endif()
endforeach()
+ # Add extra flags from LDFLAGS environment variable
+ set(_scangobj_ldflags "${_scangobj_ldflags} ${CMAKE_SHARED_LINKER_FLAGS}")
+
+ foreach(opt IN LISTS _scangobj_deps)
+ if(NOT TARGET ${opt})
+ set(_scangobj_ldflags "${_scangobj_ldflags} ${opt}")
+ endif()
+ endforeach()
+
+ # Add it as the last, thus in-tree libs have precedence
+ set(_scangobj_ldflags "${_scangobj_ldflags} -L${LIB_INSTALL_DIR}")
+
set(_scangobj_prefix ${CMAKE_COMMAND} -E env LD_LIBRARY_PATH="${_scangobj_ld_lib_dirs}:${LIB_INSTALL_DIR}:$ENV{LD_LIBRARY_PATH}")
# if(NOT (_scangobj_cflags STREQUAL ""))