blob: 1d2e244b218f739ec387d53f5848ec8d5e072d1d [file]
# Makefile.am for texi2any C libraries
#
# Copyright 2015-2026 Free Software Foundation, Inc.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
AUTOMAKE_OPTIONS = subdir-objects
EXTRA_DIST =
CLEANFILES =
MAINTAINERCLEANFILES =
######################## Gnulib ################################
# We do not set an explicit -I to find config.h, as it is in the
# top buildir and automake knows how to add flags to find it there.
GNULIB_CPPFLAGS = -I$(top_srcdir)/gnulib/lib \
-I$(top_builddir)/gnulib/lib
################### End Gnulib section #########################
# for ppport.h that is needed by a few source files.
AM_CPPFLAGS = -I$(srcdir)
converterlibdir = $(libdir)/$(CONVERTER)
AM_CPPFLAGS += -DDATADIR=\"$(datadir)\" -DSYSCONFDIR=\"$(sysconfdir)\"
# used for all the libraries, even those that do not compile against
# Perl, to have consistent compiling and linking flags.
AM_CFLAGS = $(perl_conf_LIB_CFLAGS)
# used for executables. The different libraries have specific flags
# because the can have libtool version arguments and also because those
# compiled against Gnulib code may need specific flags.
# This corresponds to part of ExtUtils::Embed ldopts corresponding to LDFLAGS
AM_LDFLAGS = $(perl_conf_LDFLAGS)
librarydir = $(converterlibdir)/lib
# -------------------------------------------------------
noinst_LTLIBRARIES =
library_LTLIBRARIES =
############ Convenience library for code calling Perl from C and for XS
# interfaces, separate to use different flags to be sure that Perl headers
# are not used and configure/Gnulib/libc headers and functions are used.
noinst_LTLIBRARIES += libperlcall_utils.la
libperlcall_utils_la_SOURCES = \
main/xs_utils.c \
main/xs_utils.h \
main/interpreter_use_types.h
if ! DISABLE_XS
libperlcall_utils_la_SOURCES += main/set_perl_interpreter.c
else
libperlcall_utils_la_SOURCES += main/replace_set_perl_interpreter.c
endif
libperlcall_utils_la_CPPFLAGS = -I$(srcdir)/main $(AM_CPPFLAGS) $(GNULIB_CPPFLAGS)
libperlcall_utils_la_LIBADD = $(top_builddir)/gnulib/lib/libgnu.la
########################## shared common, parser and structure library
library_LTLIBRARIES += libtexinfo.la
if SWIG_INTERFACES
# do a static library for the SWIG interface without embedded Perl.
noinst_LTLIBRARIES += libtexinfo-static.la
endif
# The files in the main directory correspond to code used both
# by the parser, by converters and by C code used for interfacing with
# Perl. In particular, conversion of the tree to Texinfo code and to raw text
# is in the main directory.
# The files in the parsetexi directory correspond to the parser code. They
# depend on the files in main but not the other way around.
# Files in structuring_transfo depend only on the files in main and not
# the other way around.
# No include of Perl headers for the files in C_libtexinfo_sources.
C_libtexinfo_sources = \
main/tree_types.h \
main/document_types.h \
main/source_mark_types.h \
main/tree.c \
main/tree.h \
main/text.c \
main/text.h \
main/base_utils.c \
main/base_utils.h \
main/element_types.c \
main/element_types.h \
main/command_ids.h \
main/builtin_commands.c \
main/builtin_commands.h \
main/types_data.h \
main/debug.c \
main/debug.h \
main/errors.c \
main/errors.h \
main/extra.c \
main/extra.h \
main/structure_list.c \
main/structure_list.h \
main/convert_to_texinfo.c \
main/convert_to_texinfo.h \
main/convert_to_text.c \
main/convert_to_text.h \
main/convert_utils.c \
main/convert_utils.h \
main/customization_options.c \
main/customization_options.h \
main/html_conversion_data.c \
main/html_conversion_data.h \
main/html_css_data.c \
main/html_css_data.h \
main/floats.c \
main/floats.h \
main/manipulate_tree.c \
main/manipulate_tree.h \
main/reader_types.h \
main/reader_api.h \
main/reader.c \
main/reader.h \
main/node_name_normalization.c \
main/node_name_normalization.h \
main/command_stack.c \
main/command_stack.h \
main/cmd_structuring.c \
main/cmd_text.c \
main/parser_conf.c \
main/parser_conf.h \
main/targets.c \
main/targets.h \
main/options_init_free.c \
main/options_defaults.c \
main/options_defaults.h \
main/option_types.h \
main/options_data.h \
main/global_commands_types.h \
main/utils.c \
main/utils.h \
main/system.h \
main/converter_types.h \
main/unicode.c \
main/unicode.h \
main/hashmap.c \
main/hashmap.h \
main/translations.c \
main/translations.h \
main/document.c \
main/document.h \
main/manipulate_indices.h \
main/manipulate_indices.c \
main/output_unit.c \
main/output_unit.h \
main/txi_config.c \
main/txi_config.h \
main/txi_documentlanguage_languages.c \
main/txi_documentlanguage_regions.c \
main/txi_documentlanguage_scripts.c \
main/txi_documentlanguage_variants.c \
main/unicode-collation/collation_data_loader.c \
main/unicode-collation/collation_data_loader.h \
main/unicode-collation/collation_key.c \
main/unicode-collation/collation_key.h \
parsetexi/api.c \
parsetexi/api.h \
parsetexi/parser.c \
parsetexi/parser.h \
parsetexi/input.c \
parsetexi/input.h \
parsetexi/close.c \
parsetexi/conf.c \
parsetexi/conf.h \
parsetexi/context_stack.c \
parsetexi/context_stack.h \
parsetexi/debug_parser.c \
parsetexi/debug_parser.h \
parsetexi/errors_parser.c \
parsetexi/errors_parser.h \
parsetexi/end_line.c \
parsetexi/separator.c \
parsetexi/multitable.c \
parsetexi/indices.c \
parsetexi/indices.h \
parsetexi/commands.c \
parsetexi/commands.h \
parsetexi/macro.c \
parsetexi/macro.h \
parsetexi/handle_commands.c \
parsetexi/handle_commands.h \
parsetexi/def.c \
parsetexi/def.h \
parsetexi/menus.c \
parsetexi/labels.c \
parsetexi/labels.h \
parsetexi/counter.c \
parsetexi/counter.h \
parsetexi/source_marks.c \
parsetexi/source_marks.h \
structuring_transfo/structuring.c \
structuring_transfo/structuring.h \
structuring_transfo/transformations.c \
structuring_transfo/transformations.h
EXTRA_DIST += main/accent_tables_8bit_codepoints.c
EXTRA_DIST += main/command_data.c
EXTRA_DIST += main/cmd_unicode.c
EXTRA_DIST += main/cmd_text.c
EXTRA_DIST += main/global_multi_commands_case.c
EXTRA_DIST += main/global_unique_commands_case.c
EXTRA_DIST += main/unicode-collation/collation-table.c
EXTRA_DIST += main/unicode-collation/README
libtexinfo_la_SOURCES = \
$(C_libtexinfo_sources)
# convenience library separate from but only used in libtexinfo to have
# different CPPFLAGS to make sure that Gnulib header files are not used
# in compilation.
# does not actually require iconv, but it is only used as a convenience
# library for libtexinfo.la, which requires iconv
noinst_LTLIBRARIES += libcallperl_libtexinfo.la
# api_to_perl.c and call_perl_function.c functions are called in other
# parts of the libtexinfo code and need to be compiled with Perl headers
libcallperl_libtexinfo_la_SOURCES = \
main/api_to_perl.h \
main/call_perl_function.h \
main/call_document_perl_functions.h
if ! DISABLE_XS
libcallperl_libtexinfo_la_SOURCES += \
ppport.h \
main/api_to_perl.c \
main/call_perl_function.c \
main/call_document_perl_functions.c
else
libcallperl_libtexinfo_la_SOURCES += \
main/replace_perl_api_call.c
endif
libcallperl_libtexinfo_la_CPPFLAGS = -I$(srcdir)/main $(perl_conf_CPPFLAGS)
libcallperl_libtexinfo_la_LIBADD = libperlcall_utils.la $(platform_PERL_LIBADD)
libcallperl_libtexinfo_la_LDFLAGS = $(perl_conf_LIB_LDFLAGS)
# locate include files under out-of-source builds.
libtexinfo_la_CPPFLAGS = -I$(srcdir)/main -I$(srcdir)/parsetexi $(AM_CPPFLAGS) $(GNULIB_CPPFLAGS)
libtexinfo_la_LIBADD = libcallperl_libtexinfo.la $(platform_PERL_LIBADD)
# $(LIBPTHREAD) $(LIBTHREAD) and $(PTHREAD_ONCE_LIB) are needed by
# uchar-h-c23 gnulib module, which is needed by Unicode collation code
# and could be replaced by uchar-h in other code. If Unicode collation code
# is moved to another library it could be possible to use uchar-h although
# it is probably better for future uses to have uchar-h-c23.
C_libtexinfo_LIBS = $(HARD_LOCALE_LIB) $(LIBPTHREAD) $(LIBTHREAD) $(LTLIBC32CONV) $(LTLIBINTL) $(LTLIBICONV) $(LTLIBUNISTRING) $(MBRTOWC_LIB) $(PTHREAD_ONCE_LIB) $(SETLOCALE_NULL_LIB)
libtexinfo_la_LDFLAGS = -version-info 1:0:0 $(perl_conf_LIB_LDFLAGS) $(C_libtexinfo_LIBS)
#libtexinfo_la_LDFLAGS = -version-info 1:0:0 -Wl,--no-undefined $(perl_conf_LIB_LDFLAGS) $(perl_conf_LIBS) $(C_libtexinfo_LIBS)
# static internal library without Perl at all
libtexinfo_static_la_SOURCES = $(libtexinfo_la_SOURCES)
libtexinfo_static_la_SOURCES += main/replace_set_perl_interpreter.c \
main/replace_perl_api_call.c
libtexinfo_static_la_CPPFLAGS = $(libtexinfo_la_CPPFLAGS)
libtexinfo_static_la_LIBADD = $(top_builddir)/gnulib/lib/libgnu.la
libtexinfo_static_la_LDFLAGS = $(C_libtexinfo_LIBS)
BUILT_SOURCES = main/accent_tables_8bit_codepoints.c \
convert/cmd_converter.c \
convert/converters_options.c \
convert/converters_options.h \
main/cmd_structuring.c \
main/cmd_text.c \
main/cmd_unicode.c \
main/command_data.c \
main/command_ids.h \
main/html_conversion_data.c \
main/html_conversion_data.h \
main/html_css_data.c \
main/html_css_data.h \
main/element_types.c \
main/element_types.h \
main/global_commands_types.h \
main/global_multi_commands_case.c \
main/global_unique_commands_case.c \
main/options_init_free.c \
main/options_defaults.c \
main/options_defaults.h \
main/options_get_perl.c \
main/options_data.h
# Need to be distributed
EXTRA_DIST += main/element_types.txt main/element_types.awk \
main/command_data.awk
products_element_types = $(srcdir)/main/element_types.c \
$(srcdir)/main/element_types.h
# See "Multiple Outputs" in the automake manual for this and following
# rules that produce multiple files from the same helper program.
$(srcdir)/stamp.element_types: main/element_types.txt main/element_types.awk
@rm -f tmp.element_types
@touch tmp.element_types
$(GAWK) -v srcdir=$(srcdir)/main -f $(srcdir)/main/element_types.awk \
$(srcdir)/main/element_types.txt
@mv -f tmp.element_types $@
$(products_element_types): $(srcdir)/stamp.element_types
@test -f $@ || rm -f stamp.element_types
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp.element_types
EXTRA_DIST += stamp.element_types
MAINTAINERCLEANFILES += $(products_element_types) stamp.element_types
products_command_data = $(srcdir)/main/command_data.c \
$(srcdir)/main/command_ids.h \
$(srcdir)/main/global_multi_commands_case.c \
$(srcdir)/main/global_unique_commands_case.c \
$(srcdir)/main/global_commands_types.h
$(srcdir)/stamp.command_data: ../data/command_data.txt main/command_data.awk
@rm -f tmp.command_data
@touch tmp.command_data
$(GAWK) -v srcdir=$(srcdir)/main -f $(srcdir)/main/command_data.awk \
$(srcdir)/../data/command_data.txt
@mv -f tmp.command_data $@
$(products_command_data): $(srcdir)/stamp.command_data
@test -f $@ || rm -f stamp.command_data
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp.command_data
EXTRA_DIST += stamp.command_data
MAINTAINERCLEANFILES += $(products_command_data) stamp.command_data
# Order matters
products_code_commands_values = $(srcdir)/main/cmd_text.c \
$(srcdir)/main/cmd_unicode.c \
$(srcdir)/main/cmd_structuring.c \
$(srcdir)/convert/cmd_converter.c
$(srcdir)/stamp.code_commands_values: ../data/commands_values.txt main/command_data.c $(srcdir)/../maintain/generate_code_commands_values.pl
@rm -f tmp.code_commands_values
@touch -f tmp.code_commands_values
$(PERL) $(srcdir)/../maintain/generate_code_commands_values.pl \
$(srcdir)/../data/commands_values.txt C \
$(products_code_commands_values) \
$(srcdir)/main/command_data.c
@mv -f tmp.code_commands_values $@
$(products_code_commands_values): $(srcdir)/stamp.code_commands_values
@test -f $@ || rm -f stamp.code_commands_values
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp.code_commands_values
EXTRA_DIST += stamp.code_commands_values
MAINTAINERCLEANFILES += $(products_code_commands_values) stamp.code_commands_values
TXI_MODULES_ENV = srcdir="$(srcdir)"; export srcdir;
$(srcdir)/main/accent_tables_8bit_codepoints.c: $(srcdir)/../perl/Texinfo/UnicodeData.pm $(srcdir)/../maintain/setup_accent_tables.pl
$(TXI_MODULES_ENV) $(PERL) $(srcdir)/../maintain/setup_accent_tables.pl $@
MAINTAINERCLEANFILES += main/accent_tables_8bit_codepoints.c
# Order matters
products_C_options_info = $(srcdir)/main/options_init_free.c \
$(srcdir)/main/options_data.h \
$(srcdir)/main/options_defaults.c \
$(srcdir)/main/options_defaults.h \
$(srcdir)/convert/converters_options.c \
$(srcdir)/convert/converters_options.h \
$(srcdir)/main/options_get_perl.c
$(srcdir)/stamp.regenerate_C_options_info: ../data/options_data.txt ../data/converters_defaults.txt main/command_data.c $(srcdir)/../maintain/regenerate_C_options_info.pl
@rm -f tmp.regenerate_C_options_info
@touch tmp.regenerate_C_options_info
$(PERL) $(srcdir)/../maintain/regenerate_C_options_info.pl \
< $(srcdir)/../data/options_data.txt \
$(srcdir)/main/command_data.c \
$(srcdir)/../data/converters_defaults.txt \
$(products_C_options_info)
@mv -f tmp.regenerate_C_options_info $@
$(products_C_options_info): $(srcdir)/stamp.regenerate_C_options_info
@test -f $@ || rm -f $(srcdir)/stamp.regenerate_C_options_info
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/stamp.regenerate_C_options_info
EXTRA_DIST += stamp.regenerate_C_options_info
MAINTAINERCLEANFILES += $(products_C_options_info) stamp.regenerate_C_options_info
# target that can be built upon cd'ing to the build directory, as needed
# when building translated source files from the top level directory to
# avoid make failing in po* directories.
translated_source_files: $(srcdir)/main/html_conversion_data.c
# Order matters
products_code_convert_data = $(srcdir)/main/html_conversion_data.c \
$(srcdir)/main/html_conversion_data.h
$(srcdir)/stamp.code_convert_data: main/command_data.c $(srcdir)/../data/default_direction_strings.csv $(srcdir)/../data/default_special_unit_info.csv $(srcdir)/../data/html_style_commands_element.csv $(srcdir)/../maintain/generate_code_convert_data.pl
@rm -f tmp.code_convert_data
@touch tmp.code_convert_data
$(PERL) $(srcdir)/../maintain/generate_code_convert_data.pl \
< $(srcdir)/main/command_data.c \
$(srcdir)/../data/default_direction_strings.csv \
$(srcdir)/../data/default_special_unit_info.csv \
$(srcdir)/../data/html_style_commands_element.csv \
C $(products_code_convert_data)
@mv -f tmp.code_convert_data $@
$(products_code_convert_data): $(srcdir)/stamp.code_convert_data
@test -f $@ || rm -f $(srcdir)/stamp.code_convert_data
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/stamp.code_convert_data
EXTRA_DIST += stamp.code_convert_data
MAINTAINERCLEANFILES += $(products_code_convert_data) stamp.code_convert_data
# Order matters
products_css_data = $(srcdir)/main/html_css_data.c \
$(srcdir)/main/html_css_data.h
$(srcdir)/stamp.css_data: $(srcdir)/../data/default_css_element_class_styles.csv $(srcdir)/../maintain/generate_css_data.pl
@rm -f tmp.css_data
@touch tmp.css_data
$(PERL) $(srcdir)/../maintain/generate_css_data.pl \
$(srcdir)/../data/default_css_element_class_styles.csv \
C $(products_css_data)
@mv -f tmp.css_data $@
$(products_css_data): $(srcdir)/stamp.css_data
@test -f $@ || rm -f $(srcdir)/stamp.css_data
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/stamp.css_data
EXTRA_DIST += stamp.css_data
MAINTAINERCLEANFILES += $(products_css_data) stamp.css_data
################################# common Perl C code shared library used
# to call libtexinfo from Perl XS .xs interfaces and other Perl C codes
if ! DISABLE_XS
library_LTLIBRARIES += libtexinfoxs.la
libtexinfoxs_la_as_dependency = libtexinfoxs.la
endif
libtexinfoxs_la_SOURCES= \
main/build_perl_info.c \
main/build_perl_info.h \
main/get_perl_info.c \
main/get_perl_info.h \
main/options_get_perl.c
# locate include files under out-of-source builds.
libtexinfoxs_la_CPPFLAGS = -I$(srcdir)/main $(AM_CPPFLAGS) $(perl_conf_CPPFLAGS)
libtexinfoxs_la_LIBADD = libtexinfo.la $(platform_PERL_LIBADD)
libtexinfoxs_la_LDFLAGS = -version-info 1:0:0 $(perl_conf_LIB_LDFLAGS)
# example to trigger errors associated with no undefined
#libtexinfoxs_la_LDFLAGS = -version-info 1:0:0 -Wl,--no-undefined $(perl_conf_LIB_LDFLAGS) $(perl_conf_LIBS)
########################## shared C library for conversion
# Conversion to raw text and to Texinfo code is in the libtexinfo library.
# Note that having a library and not reusing source files is important to
# share converter data among the XS objects used for conversion.
library_LTLIBRARIES += libtexinfo-convert.la
if SWIG_INTERFACES
# do a static library for the SWIG interface without embedded Perl.
noinst_LTLIBRARIES += libtexinfo-convert-static.la
endif
C_libtexinfo_convert_sources = \
convert/converter.c \
convert/converter.h \
convert/convert_indices.c \
convert/convert_indices.h \
convert/cmd_converter.c \
convert/converters_options.c \
convert/converters_options.h \
convert/convert_html.h \
convert/convert_html.c \
convert/format_html.h \
convert/format_html.c \
convert/html_converter_types.h \
convert/html_converter_init_options.c \
convert/html_converter_finish.c \
convert/html_conversion_state.c \
convert/html_conversion_state.h \
convert/html_prepare_converter.c \
convert/html_prepare_converter.h \
convert/html_conversion_api.h \
convert/html_converter_api.c \
convert/html_converter_api.h \
convert/plaintexinfo_converter_api.c \
convert/plaintexinfo_converter_api.h \
convert/rawtext_converter_api.c \
convert/rawtext_converter_api.h
# convenience library compiled with Perl headers, separate to be able to
# have different flags from libtexinfo-convert, to avoid Gnulib flags.
# Internal for libtexinfo-convert.
# call_html_perl_function.c code is called from libtexinfo-convert C code.
# build_html_perl_state.c functions are called from call_html_perl_function.c.
# call_conversion_perl.c is also included although it is not directly used,
# to have it in a library different from libtexinfo-main where different flags
# (for embedding Perl) are used for the Perl part.
noinst_LTLIBRARIES += libcallperl_libtexinfo_convert.la
libcallperl_libtexinfo_convert_la_SOURCES = \
convert/call_html_perl_function.h \
convert/call_conversion_perl.h
if ! DISABLE_XS
libcallperl_libtexinfo_convert_la_SOURCES += \
convert/build_html_perl_state.h \
convert/build_html_perl_state.c \
convert/call_html_perl_function.c \
convert/call_conversion_perl.c
else
libcallperl_libtexinfo_convert_la_SOURCES += \
convert/replace_perl_call_html_function.c \
convert/replace_call_conversion_perl.c
endif
libcallperl_libtexinfo_convert_la_CPPFLAGS = -I$(srcdir)/main -I$(srcdir)/convert $(perl_conf_CPPFLAGS)
libcallperl_libtexinfo_convert_la_LIBADD = $(libtexinfoxs_la_as_dependency) libtexinfo.la $(platform_PERL_LIBADD)
libcallperl_libtexinfo_convert_la_LDFLAGS = $(perl_conf_LIB_LDFLAGS)
libtexinfo_convert_la_SOURCES = \
$(C_libtexinfo_convert_sources)
# locate include files under out-of-source builds.
libtexinfo_convert_la_CPPFLAGS = -I$(srcdir)/main -I$(srcdir)/parsetexi -I$(srcdir)/convert -I$(srcdir)/structuring_transfo $(AM_CPPFLAGS) $(GNULIB_CPPFLAGS)
libtexinfo_convert_la_LIBADD = $(libtexinfoxs_la_as_dependency) libtexinfo.la libcallperl_libtexinfo_convert.la $(platform_PERL_LIBADD)
libtexinfo_convert_la_LDFLAGS = -version-info 1:0:0 $(perl_conf_LIB_LDFLAGS) $(EUIDACCESS_LIBGEN) $(LTLIBINTL) $(LTLIBICONV) $(LTLIBUNISTRING)
# example to trigger errors associated with no undefined
#libtexinfo_convert_la_LDFLAGS = -version-info 1:0:0 -Wl,--no-undefined $(perl_conf_LIB_LDFLAGS) $(perl_conf_LIBS) $(EUIDACCESS_LIBGEN) $(LTLIBINTL) $(LTLIBICONV) $(LTLIBUNISTRING)
# static internal library
libtexinfo_convert_static_la_SOURCES = $(libtexinfo_convert_la_SOURCES)
libtexinfo_convert_static_la_SOURCES += \
convert/replace_perl_call_html_function.c \
convert/replace_call_conversion_perl.c
libtexinfo_convert_static_la_CPPFLAGS = $(libtexinfo_convert_la_CPPFLAGS)
libtexinfo_convert_static_la_LIBADD = libtexinfo-static.la
libtexinfo_convert_static_la_LDFLAGS = $(EUIDACCESS_LIBGEN) $(LTLIBINTL) $(LTLIBICONV) $(LTLIBUNISTRING)
################################# common Perl C code shared library used
# to call libtexinfo-convert from Perl XS *.xs interfaces
if ! DISABLE_XS
library_LTLIBRARIES += libtexinfo-convertxs.la
endif
libtexinfo_convertxs_la_SOURCES = \
convert/build_html_perl_info.h \
convert/build_html_perl_info.c \
convert/get_converter_perl_info.c \
convert/get_converter_perl_info.h
# following files were in libtexinfo_convertxs once, but are not built
# anymore, only kept as examples
EXTRA_DIST += tree_elements/build_perl_tree_elements.h \
tree_elements/build_perl_tree_elements.c \
tree_elements/get_perl_tree_elements.h \
tree_elements/get_perl_tree_elements.c
# locate include files under out-of-source builds.
libtexinfo_convertxs_la_CPPFLAGS = -I$(srcdir)/main -I$(srcdir)/convert $(AM_CPPFLAGS) $(perl_conf_CPPFLAGS)
libtexinfo_convertxs_la_LIBADD = libtexinfo-convert.la libtexinfoxs.la libtexinfo.la $(platform_PERL_LIBADD)
libtexinfo_convertxs_la_LDFLAGS = -version-info 1:0:0 $(perl_conf_LIB_LDFLAGS)
# example to trigger errors associated with no undefined
#libtexinfo_convertxs_la_LDFLAGS = -version-info 1:0:0 -Wl,--no-undefined $(perl_conf_LIB_LDFLAGS) $(perl_conf_LIBS)
################################ main program and swig interface library
# loads interpreter and provides a high level API for the main program
# and SWIG interface.
# NOTE we build libtexinfo-main.la even if PERL_EMBEDDED is not set as some
# code in libtexinfo-main does not directly need a Perl interpreter.
# In that case, the library does not load an interpreter and will lack
# all the features involving the interpreter, may not load if libperl is
# not already loaded in memory when the library is loaded (and could
# crash?). Testing this configuration is not easy as
# ctexi2any cannot be built in that situation.
library_LTLIBRARIES += libtexinfo-main.la
if SWIG_INTERFACES
# do a static library for the SWIG interface without embedded Perl.
noinst_LTLIBRARIES += libtexinfo-main-static.la
endif
# convenience library for embedded Perl called from libtexinfo-main C code,
# to be able to use specific flags for compilation and linking different from
# other libraries with code including Perl headers, and without Gnulib.
# Internal for libtexinfo-main.
noinst_LTLIBRARIES += libperlembed_libtexinfo_main.la
libperlembed_libtexinfo_main_la_SOURCES = \
convert/call_embed_perl.h
if PERL_EMBEDDED
libperlembed_libtexinfo_main_la_SOURCES += convert/call_embed_perl.c
else
# replace by functions doing nothing, needed for linking
libperlembed_libtexinfo_main_la_SOURCES += convert/replace_call_embed_perl.c
endif
if PERL_EMBEDDED
# contains part of ExtUtils::Embed ldopts corresponding to LIBADD
libperlembed_libtexinfo_main_la_LIBADD = $(perl_conf_LIBS)
else
libperlembed_libtexinfo_main_la_LIBADD = $(platform_PERL_LIBADD)
endif
libperlembed_libtexinfo_main_la_LDFLAGS = $(perl_conf_LIB_LDFLAGS)
# ExtUtils::Embed does not distinguish CPPFLAGS from CFLAGS, but
# we do as much as possible.
# This part corresponds to perl_inc in ExtUtils::Embed ccopts, and
# is better in CPPFLAGS.
libperlembed_libtexinfo_main_la_CPPFLAGS = $(perl_conf_CPPFLAGS)
# The flags that are used through AM_CFLAGS contain
# flags part of ExtUtils::Embed ccopts corresponding to
# Perl config ccflags. May contain flags that would have better been
# in CPPFLAGS. Also flags for compilation as part of a library
# from Perl, not in ExtUtils::Embed ccopts.
C_libtexinfo_main_sources = \
api_for_swig/swig_element_data.h \
api_for_swig/swig_element_types.h \
api_for_swig/swig_text_options.h \
api_for_swig/swig_text_options_types.h \
api_for_swig/swig_error_messages_types.h \
api_for_swig/swig_interface.c \
api_for_swig/swig_interface.h \
api_for_swig/swig_parser_api.c \
api_for_swig/swig_parser_api.h \
convert/texinfo.c \
convert/texinfo.h
libtexinfo_main_la_SOURCES = \
$(C_libtexinfo_main_sources)
# locate include files under out-of-source builds.
# NOTE not sure that Gnulib is directly used, but it could.
libtexinfo_main_la_CPPFLAGS = -I$(srcdir)/main -I$(srcdir)/convert -I$(srcdir)/structuring_transfo -I$(srcdir)/parsetexi $(AM_CPPFLAGS) $(GNULIB_CPPFLAGS)
libtexinfo_main_la_LIBADD = $(libtexinfoxs_la_as_dependency) libtexinfo.la libtexinfo-convert.la libperlembed_libtexinfo_main.la
if PERL_EMBEDDED
# contains part of ExtUtils::Embed ldopts corresponding to LIBADD
libtexinfo_main_la_LIBADD += $(perl_conf_LIBS)
endif
# contains part of ExtUtils::Embed ldopts corresponding to LDFLAGS
libtexinfo_main_la_LDFLAGS = -version-info 0:0:0 $(perl_conf_LIB_LDFLAGS) $(LTLIBINTL)
# example to trigger errors associated with no undefined
#libtexinfo_main_la_LDFLAGS = -version-info 0:0:0 -Wl,--no-undefined $(perl_conf_LIB_LDFLAGS) $(LTLIBINTL) $(perl_conf_LIBS)
# convenience static library
libtexinfo_main_static_la_SOURCES = $(libtexinfo_main_la_SOURCES)
libtexinfo_main_static_la_SOURCES += convert/replace_call_embed_perl.c
libtexinfo_main_static_la_CPPFLAGS = $(libtexinfo_main_la_CPPFLAGS)
# libtexinfo is already in libtexinfo-convert-static
libtexinfo_main_static_la_LIBADD = libtexinfo-convert-static.la
libtexinfo_main_static_la_LDFLAGS = $(LTLIBINTL)
############################################### main program in C
noinst_PROGRAMS =
# if PERL_EMBEDDED is not set, it is possible that libperl.so is not there and
# -lperl is not resolved. The libperl symbols are needed at link time for the
# libraries linked against ctexi2any that are compiled against the Perl
# headers, as they need symbols defined in libperl. Therefore, we only build
# ctexi2any if PERL_EMBEDDED is true.
# The libraries themselves do not need -lperl because they can have undefined
# symbols at link time (if not linked with -no-undefined), in contrast with
# programs such as ctexi2any. At run time, when the libraries are dlopened
# by XSLoader.pm from a Perl interpreter they will resolve the undefined
# symbols using the libperl integrated in the Perl interpreter, even though
# the symbols were undefined at link time.
if PERL_EMBEDDED
noinst_PROGRAMS += ctexi2any
endif
ctexi2any_SOURCES = \
texi2any.c
# perl_conf_LIBS contains part of ExtUtils::Embed ldopts corresponding to LDADD
# Gnulib is directly needed on some platforms for getopt-gnu.
# The Gnulib link variables are needed at least on Solaris and not added
# by libtool.
ctexi2any_LDADD = libtexinfo-main.la libtexinfoxs.la libtexinfo-convert.la libtexinfo.la $(perl_conf_LIBS) $(EUIDACCESS_LIBGEN) $(HARD_LOCALE_LIB) $(LIBPTHREAD) $(LIBTHREAD) $(LTLIBC32CONV) $(LTLIBINTL) $(LTLIBICONV) $(LTLIBUNISTRING) $(MBRTOWC_LIB) $(PTHREAD_ONCE_LIB) $(SETLOCALE_NULL_LIB)
# Perl LDFLAGS are brought in by AM_LDFLAGS
# NOTE it is important to use perl_conf_CFLAGS here to match
# with perl_conf_LDFLAGS used for linking, or in some platforms where
# the compiling and linking flags must match there will be a failure to
# build (for example AlmaLinux).
ctexi2any_CFLAGS = $(perl_conf_CFLAGS)
ctexi2any_CPPFLAGS = -I$(srcdir)/parsetexi -I$(srcdir)/convert -I$(srcdir)/main -I$(srcdir)/structuring_transfo $(AM_CPPFLAGS) $(GNULIB_CPPFLAGS) -DEMBED_PERL
# in configure.ac, it is checked that Perl is embedded (and that shared
# libraries are built)
if PREFER_C_TEXI2ANY
bin_PROGRAMS = texi2any
endif
texi2any_SOURCES = $(ctexi2any_SOURCES)
texi2any_LDADD = $(ctexi2any_LDADD)
texi2any_CPPFLAGS = $(ctexi2any_CPPFLAGS)
texi2any_CFLAGS = $(ctexi2any_CFLAGS)
if PREFER_C_TEXI2ANY
install-exec-hook:
makeinfo_f=`echo makeinfo$(EXEEXT) | sed -e '$(transform)'`; rm -f $(DESTDIR)$(bindir)/$$makeinfo_f
-makeinfo_f=`echo makeinfo$(EXEEXT) | sed -e '$(transform)'`; texi2any_f=`echo texi2any$(EXEEXT)| sed -e '$(transform)'`; (cd $(DESTDIR)$(bindir)/ && $(LN_S) $$texi2any_f $$makeinfo_f)
endif
################################# C only static main program demonstrator
# The same effect can be obtained with the main program in C with
# XS disabled at configure time or the interpreter disabled at runtime.
# Not really useful nowadays besides making sure that the replacement functions
# required for linking are provided.
if ! DISABLE_ADDITIONAL_CHECKS
noinst_PROGRAMS += teximakehtml
endif
teximakehtml_SOURCES = \
$(C_libtexinfo_sources) \
$(C_libtexinfo_convert_sources) \
$(C_libtexinfo_main_sources) \
texi2any.c \
main/replace_set_perl_interpreter.c \
main/replace_perl_api_call.c \
convert/replace_perl_call_html_function.c \
convert/replace_call_conversion_perl.c \
convert/replace_call_embed_perl.c
# Perl flags are not useful, but we use the same flags as for
# configure checks, such that they are consistent for detected
# libraries flags such as LTLIBINTL.
# Perl LDFLAGS are brought in by AM_LDFLAGS
teximakehtml_CFLAGS = $(perl_conf_CFLAGS)
teximakehtml_LDADD = $(top_builddir)/gnulib/lib/libgnu.la $(EUIDACCESS_LIBGEN) $(HARD_LOCALE_LIB) $(LIBPTHREAD) $(LIBTHREAD) $(LTLIBC32CONV) $(LTLIBINTL) $(LTLIBICONV) $(LTLIBUNISTRING) $(MBRTOWC_LIB) $(PTHREAD_ONCE_LIB) $(SETLOCALE_NULL_LIB)
teximakehtml_CPPFLAGS = -I$(srcdir)/parsetexi -I$(srcdir)/convert -I$(srcdir)/main -I$(srcdir)/structuring_transfo $(AM_CPPFLAGS) $(GNULIB_CPPFLAGS)