Определите, какие определения препроцессора используются включенными заголовками библиотеки - PullRequest
0 голосов
/ 03 мая 2018

Я смотрю на проект, в котором есть много определений препроцессора, сгенерированных в config.h с помощью autotools.

Теперь некоторые из них взяты из более ранних версий исходного кода, а также из его частей, вырезанных из исходных файлов, которые больше не присутствуют. Итак, часть этого файла теперь бесполезна и не должна генерироваться. Вопрос - какая часть?

Одна вещь, которую вы можете сделать, это поиск использования определений препроцессора в текущих источниках проекта. Я сделал это Но - есть определения, которые влияют на заголовки других библиотек при включении, такие как _GNU_SOURCE

Мой вопрос: Как я могу определить, какие определения (включая те, которые в настоящее время закомментированы в config.h) имеют потенциал для заголовков, включенных в источники?

(Конечно, здесь нужна точность, а не воспоминание, поскольку бесполезный #define не так уж и плох, но недостающее определение мне действительно нужно избегать.)

1 Ответ

0 голосов
/ 05 августа 2018

Самый простой способ - позволить autoscan создать файл configure.scan, тогда вы сможете вырезать и вставить то, что вам нужно.

$ cd myCproject
$ autoscan
aclocal.m4:16: warning: this file was generated for autoconf 2.63.
You have another version of autoconf.  It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically `autoreconf'.
configure.ac:6: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body
../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from...
../../lib/autoconf/general.m4:2672: _AC_LINK_IFELSE is expanded from...
../../lib/autoconf/general.m4:2689: AC_LINK_IFELSE is expanded from...
aclocal.m4:1037: _LT_SYS_MODULE_PATH_AIX is expanded from...
aclocal.m4:4176: _LT_LINKER_SHLIBS is expanded from...
aclocal.m4:5251: _LT_LANG_C_CONFIG is expanded from...
aclocal.m4:159: _LT_SETUP is expanded from...
aclocal.m4:88: LT_INIT is expanded from...
configure.ac:6: the top level
configure.ac:6: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body
../../lib/autoconf/lang.m4:193: AC_LANG_CONFTEST is expanded from...
../../lib/autoconf/general.m4:2672: _AC_LINK_IFELSE is expanded from...
../../lib/autoconf/general.m4:2689: AC_LINK_IFELSE is expanded from...
aclocal.m4:4176: _LT_LINKER_SHLIBS is expanded from...
aclocal.m4:5251: _LT_LANG_C_CONFIG is expanded from...
aclocal.m4:159: _LT_SETUP is expanded from...
aclocal.m4:88: LT_INIT is expanded from...
configure.ac:6: the top level
configure.ac: warning: missing AC_CHECK_FUNCS([clock_gettime]) wanted by: acs.c:405
configure.ac: warning: missing AC_CHECK_FUNCS([gethrtime]) wanted by: atomicclock.c:52
configure.ac: warning: missing AC_CHECK_FUNCS([gettimeofday]) wanted by: atomicclock.c:99
configure.ac: warning: missing AC_CHECK_HEADERS([mach/mach.h]) wanted by: atomicclock.c:16
configure.ac: warning: missing AC_CHECK_HEADERS([sys/time.h]) wanted by: atomicclock.c:13
configure.ac: warning: missing AC_PROG_CXX wanted by: ltmain.sh:677
configure.ac: warning: missing AC_PROG_RANLIB wanted by: ltmain.sh:1601
configure.ac: warning: missing AC_TYPE_UINT64_T wanted by: acs.c:338
$

По завершении создается файл configure.scan. Фактический пример моего личного проекта показан как:

AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_RANLIB

# Checks for libraries.
# FIXME: Replace `main' with a function in `-lrt':
AC_CHECK_LIB([rt], [main])

# Checks for header files.
AC_CHECK_HEADERS([mach/mach.h stdint.h stdlib.h string.h sys/time.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T

# Checks for library functions.
AC_CHECK_FUNCS([clock_gettime gethrtime gettimeofday])

AC_CONFIG_FILES([Makefile])
AC_CONFIG_SUBDIRS([automake-1.15])
AC_OUTPUT

Вы можете вырезать и вставить то, что вам нужно, из configure.scan и вставить его в соответствующий раздел в своем собственном configure.am (или configure.in) файле.

autoscan Утилита является частью пакета autoconf.

...