mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2025-12-26 04:00:08 +01:00
When reviewing this commit, I said
Looks OK, although this is going to become impossible if we start
using the externally-curated list of warnings from
<https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html>,
which I've been quite tempted to do.
That time has now come. I think it's more valuable to have comprehensive
warnings under our primary build system, Autotools, than to have
some fairly elaborate CMake scripting to pick up the same compiler
warnings in both build systems; the CMake build system is primarily
there to give us the ability to compile with MSVC, which has orthogonal
compiler warning options anyway.
This reverts commit 41427560af.
Signed-off-by: Simon McVittie <smcv@debian.org>
Acked-by: Ralf Habacker <ralf.habacker@freenet.de>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=97357
168 lines
6.2 KiB
CMake
168 lines
6.2 KiB
CMake
#
|
|
# cmake package for autotools support
|
|
#
|
|
# @Author Ralf Habacker
|
|
#
|
|
|
|
#
|
|
# load autotools configure file into an internal list named _configure_ac
|
|
#
|
|
macro(autoinit config)
|
|
set(_configure_ac_name ${config})
|
|
file(READ ${config} _configure_ac_raw)
|
|
# Convert file contents into a CMake list (where each element in the list
|
|
# is one line of the file)
|
|
STRING(REGEX REPLACE ";" "\\\\;" _configure_ac "${_configure_ac_raw}")
|
|
STRING(REGEX REPLACE "\n" ";" _configure_ac "${_configure_ac}")
|
|
endmacro()
|
|
|
|
# extracts version information from autoconf config file
|
|
# and set related cmake variables
|
|
#
|
|
# returns
|
|
# ${prefix}_VERSION
|
|
# ${prefix}_VERSION_STRING
|
|
# ${prefix}_MAJOR_VERSION
|
|
# ${prefix}_MINOR_VERSION
|
|
# ${prefix}_MICRO_VERSION
|
|
# ${prefix}_LIBRARY_AGE
|
|
# ${prefix}_LIBRARY_REVISION
|
|
# ${prefix}_LIBRARY_CURRENT
|
|
#
|
|
macro(autoversion prefix)
|
|
string(TOUPPER ${prefix} prefix_upper)
|
|
string (REGEX REPLACE ".*${prefix}_major_version], .([0-9]+).*" "\\1" ${prefix_upper}_MAJOR_VERSION ${_configure_ac_raw})
|
|
string (REGEX REPLACE ".*${prefix}_minor_version], .([0-9]+).*" "\\1" ${prefix_upper}_MINOR_VERSION ${_configure_ac_raw})
|
|
string (REGEX REPLACE ".*${prefix}_micro_version], .([0-9]+).*" "\\1" ${prefix_upper}_MICRO_VERSION ${_configure_ac_raw})
|
|
set (${prefix_upper}_VERSION ${${prefix_upper}_MAJOR_VERSION}.${${prefix_upper}_MINOR_VERSION}.${${prefix_upper}_MICRO_VERSION})
|
|
set (${prefix_upper}_VERSION_STRING "${${prefix_upper}_VERSION}")
|
|
string (REGEX REPLACE ".*LT_AGE=([0-9]+).*" "\\1" ${prefix_upper}_LIBRARY_AGE ${_configure_ac_raw})
|
|
string (REGEX REPLACE ".*LT_CURRENT=([0-9]+).*" "\\1" ${prefix_upper}_LIBRARY_CURRENT ${_configure_ac_raw})
|
|
string (REGEX REPLACE ".*LT_REVISION=([0-9]+).*" "\\1" ${prefix_upper}_LIBRARY_REVISION ${_configure_ac_raw})
|
|
endmacro()
|
|
|
|
#
|
|
# Defines package related variables (PACKAGE_..., PACKAGE and VERSION)
|
|
# as done by autotools.
|
|
#
|
|
# Additional it defines a cmake variable named PACKAGE_CONFIG_H_TEMPLATE
|
|
# which could be placed in config.h templates to have those variables
|
|
# defined at code level like shown below:
|
|
#
|
|
# config.h.template
|
|
# ...
|
|
# @AUTOPACKAGE_CONFIG_H_TEMPLATE@
|
|
# ...
|
|
#
|
|
macro(autopackage name version url support_url)
|
|
# Define to the full name of this package.
|
|
set(PACKAGE_NAME ${name})
|
|
|
|
# Define to the version of this package.
|
|
set(PACKAGE_VERSION ${version})
|
|
|
|
# Define to the home page for this package.
|
|
set(PACKAGE_URL ${url})
|
|
|
|
# Define to the address where bug reports for this package should be sent.
|
|
set(PACKAGE_BUGREPORT ${support_url})
|
|
|
|
# Define to the full name and version of this package.
|
|
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
|
|
|
|
# Define to the one symbol short name of this package.
|
|
set(PACKAGE_TARNAME ${PACKAGE_NAME})
|
|
|
|
set(PACKAGE ${name})
|
|
set(VERSION ${DBUS_VERSION_STRING})
|
|
|
|
string(CONFIGURE "/* generated by cmake macro autopackage */\n
|
|
/* Define to the address where bug reports for this package should be sent. */
|
|
#define PACKAGE_BUGREPORT \"@PACKAGE_BUGREPORT@\"
|
|
|
|
/* Define to the full name of this package. */
|
|
#define PACKAGE_NAME \"@PACKAGE_NAME@\"
|
|
|
|
/* Define to the full name and version of this package. */
|
|
#define PACKAGE_STRING \"@PACKAGE_STRING@\"
|
|
|
|
/* Define to the one symbol short name of this package. */
|
|
#define PACKAGE_TARNAME \"@PACKAGE_TARNAME@\"
|
|
|
|
/* Define to the home page for this package. */
|
|
#define PACKAGE_URL \"@PACKAGE_URL@\"
|
|
|
|
/* Define to the version of this package. */
|
|
#define PACKAGE_VERSION \"@PACKAGE_VERSION@\"
|
|
|
|
/* defined by autotools package */
|
|
#define PACKAGE \"@PACKAGE@\"
|
|
#define VERSION \"@VERSION@\"
|
|
" AUTOPACKAGE_CONFIG_H_TEMPLATE)
|
|
endmacro(autopackage)
|
|
|
|
#
|
|
# define a cmake variable from autotools AC_DEFINE statement
|
|
#
|
|
macro(autodefine name)
|
|
foreach(line ${_configure_ac})
|
|
if(line MATCHES ".*AC_DEFINE(.*${name}.*).*")
|
|
string (REGEX REPLACE ".*AC_DEFINE(.*).*" "\\1" value ${line})
|
|
string (REGEX REPLACE ".*,(.*),.*" "\\1" value2 ${value})
|
|
string (REPLACE "[" "" value3 ${value2})
|
|
string (REPLACE "]" "" value4 ${value3})
|
|
set(${name} ${value4})
|
|
endif()
|
|
endforeach()
|
|
endmacro()
|
|
|
|
macro(autoheaderchecks config_h_in configure_checks_file config_h_cmake)
|
|
file(READ ${configure_checks_file} configure_checks_file_raw)
|
|
file(READ ${config_h_in} _config_h_in_raw)
|
|
file(READ ${config_h_cmake} _config_h_cmake_raw)
|
|
STRING(REGEX REPLACE ";" "\\\\;" _config_h_in "${_config_h_in_raw}")
|
|
STRING(REGEX REPLACE "\n" ";" _config_h_in "${_config_h_in}")
|
|
foreach(line ${_config_h_in})
|
|
#message(STATUS ${line})
|
|
if(line MATCHES ".*HAVE_.*_H.*")
|
|
string (REGEX REPLACE ".*HAVE_(.*)_H.*" "\\1" key ${line})
|
|
set(full_key "HAVE_${key}_H")
|
|
if(key MATCHES ".*_.*")
|
|
string(REGEX MATCH "^[A-Z0-9]+" dir ${key})
|
|
string(REGEX MATCH "[A-Z0-9]+$" file ${key})
|
|
string(TOLOWER ${dir} dirname)
|
|
string(TOLOWER ${file} filename)
|
|
set(check "check_include_file(${dirname}/${filename}.h ${full_key})")
|
|
set(config_define "#cmakedefine ${full_key}")
|
|
else()
|
|
set(file ${key})
|
|
string(TOLOWER ${file} filename)
|
|
set(check "check_include_file(${filename}.h ${full_key})")
|
|
set(config_define "#cmakedefine ${full_key}")
|
|
endif()
|
|
if(NOT configure_checks_file_raw MATCHES ".*${full_key}.*")
|
|
message("${check}")
|
|
endif()
|
|
if(NOT _config_h_cmake_raw MATCHES "${full_key}")
|
|
message("${config_define}")
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
endmacro(autoheaderchecks)
|
|
|
|
#
|
|
# parses config.h template and create cmake equivalent
|
|
# not implemented yet
|
|
#
|
|
macro(autoconfig template output)
|
|
file(READ ${template} contents)
|
|
# Convert file contents into a CMake list (where each element in the list
|
|
# is one line of the file)
|
|
STRING(REGEX REPLACE ";" "\\\\;" contents "${contents}")
|
|
STRING(REGEX REPLACE "\n" ";" contents "${contents}")
|
|
foreach(line contents)
|
|
message(STATUS ${line})
|
|
# find #undef lines
|
|
# append to config.h #define <variable-name> <variable-content>
|
|
endforeach()
|
|
endmacro()
|