aqbanking-6.9.1/ 0000755 0001750 0001750 00000000000 15131211176 010461 5 0000000 0000000 aqbanking-6.9.1/test-driver 0000755 0001750 0001750 00000011417 14215102164 012601 0000000 0000000 #! /bin/sh
# test-driver - basic testsuite driver script.
scriptversion=2018-03-07.03; # UTC
# Copyright (C) 2011-2021 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# This file is maintained in Automake, please report
# bugs to or send patches to
# .
# Make unconditional expansion of undefined variables an error. This
# helps a lot in preventing typo-related bugs.
set -u
usage_error ()
{
echo "$0: $*" >&2
print_usage >&2
exit 2
}
print_usage ()
{
cat <"$log_file"
"$@" >>"$log_file" 2>&1
estatus=$?
if test $enable_hard_errors = no && test $estatus -eq 99; then
tweaked_estatus=1
else
tweaked_estatus=$estatus
fi
case $tweaked_estatus:$expect_failure in
0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
0:*) col=$grn res=PASS recheck=no gcopy=no;;
77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
*:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
*:*) col=$red res=FAIL recheck=yes gcopy=yes;;
esac
# Report the test outcome and exit status in the logs, so that one can
# know whether the test passed or failed simply by looking at the '.log'
# file, without the need of also peaking into the corresponding '.trs'
# file (automake bug#11814).
echo "$res $test_name (exit status: $estatus)" >>"$log_file"
# Report outcome to console.
echo "${col}${res}${std}: $test_name"
# Register the test result, and other relevant metadata.
echo ":test-result: $res" > $trs_file
echo ":global-test-result: $res" >> $trs_file
echo ":recheck: $recheck" >> $trs_file
echo ":copy-in-global-log: $gcopy" >> $trs_file
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:
aqbanking-6.9.1/NEWS 0000644 0001750 0001750 00000063314 15056605641 011121 0000000 0000000
This file is no longer maintained. See ChangeLog for recent news.
===========================================================================
Released AqBanking - 3.99.7rc1 (2009-01-22)
===========================================================================
This is the first release candidate for AqBanking4. Some bugs have been
fixed.
===========================================================================
Released AqBanking - 3.99.0 (2008-11-08)
===========================================================================
This is the first beta release of AqBanking4. Now multiple applications can
use AqBanking concurrently without interference. This was archieved by
implementing a lock-and-reload mechanism which makes sure that the latest
configuration is used in any case. AqBanking4 facilitates import of previous
configurations by the application. The SWIFT parser has yet again been
improved.
This release requires Gwenhywfar 3.5.2 or better.
===========================================================================
Released AqBanking - 3.7.2 (2008-08-26)
===========================================================================
This release fixes a problem with some HBCI-RDH accounts when requesting
the system id. A CSV profile for Austrian Postbank has been added.
===========================================================================
Released AqBanking - 3.7.1 (2008-08-16)
===========================================================================
This release features workarounds for recently discovered problems with
HBCI, improves the CSV importer and adds two CSV profiles. The OFX parser
is now more tolerant (thanks to David Reiser for providing test files).
===========================================================================
Released AqBanking - 3.7.0 (2008-08-11)
===========================================================================
This release fixes many HBCI-related problems, features a safer PIN
handling and provides improved support for WIN32 platforms.
Error responses to segment HKEND with HBCI job HKSYNC are now ignored,
a CSV profil for LBB Berlin has been added and the build system was cleaned
up. The iTAN mode to be used can now be chosen by the user.
This release needs at least Gwenhywfar 3.4.0.
===========================================================================
Released AqBanking - 3.6.2 (2008-07-09)
===========================================================================
This release fixes two serious bugs which could crash an application.
An update is recommended.
===========================================================================
Released AqBanking - 3.6.1 (2008-07-08)
===========================================================================
This release fixes some minor bugs. It allows for the HBCI version to be
selected even in PIN/TAN mode. The account type can now also be set from
within the graphical setup dialogs.
===========================================================================
Released AqBanking - 3.6.0 (2008-07-01)
===========================================================================
This release adds a SEPA exporter which is able to create CCM documents. It
simplifies working with ImExporterContexts.
===========================================================================
Released AqBanking - 3.5.1 (2008-06-11)
===========================================================================
This release fixes some more bugs and allows to be build with the special
version of aqbanking-cli with EBICS support.
When a new pin is to be entered for any reason (e.g. changing the password
of a key file) the user is now always asked (no pin caching in this case).
===========================================================================
Released AqBanking - 3.5.0 (2008-06-06)
===========================================================================
This release improves support for FinTS3 (now transfers/debit notes work in
Pin/Tan mode of FinTS3). The TAN method can now be choosen by the user (no
GUI yet). Some bugs have been fixed and the CSV exporter now exports values
in floating point format instead of rationals (however, rationals are still
supported here).
===========================================================================
Released AqBanking - 3.4.2 (2008-05-27)
===========================================================================
This release updates the German bank info files and adds export
capabilities to the DTAUS ImExporter module.
===========================================================================
Released AqBanking - 3.4.1 (2008-04-25)
===========================================================================
This release fixes a problem with some weird SWIFT MT940 files. Transfer
jobs now add transfers to the IMEXPORTER given to AB_Banking_ExecuteJobs.
===========================================================================
Released AqBanking - 3.4.0 (2008-04-22)
===========================================================================
This is a bugfix and cleanup release. Obsolete code has been removed
and some bugs in the SWIFT parser have been fixed. All plugins are now
loaded using GWEN's plugin framework. The OFX parser is now able to import
investment accounts. Support for static linking has been improved.
===========================================================================
Released AqBanking - 3.3.0 (2008-03-16)
===========================================================================
This release fixes many bugs especially in the HBCI code. AqBanking now
starts to manage CryptToken (because this is now used in two backends).
This release requires Gwenhywfar 3.2.0 or better.
===========================================================================
Released AqBanking - 3.2.1 (2008-02-08)
===========================================================================
This release fixes two bugs: One in the HBCI backend and the other in the
OFX parser. The AqHBCI user wizard now automatically sets the NO_BASE64
flag for "Dt. Apotheker- und Aerztebank".
===========================================================================
Released AqBanking - 3.2.0 (2008-01-29)
===========================================================================
This release now finally works with APO Bank (their server is quite special).
The user settings page of the AqHBCI setup wizard now offers some advanced
settings. Informational bank messages are now stored in the imexporter
context. This release has preliminary support for FinTS 3.0 (the successor
of HBCI). Some bugs have been fixed.
===========================================================================
Released AqBanking - 3.1.1 (2008-01-28)
===========================================================================
This release adds the option "--hbciversion" to the AqHBCI tool. This is
used to select the HBCI protocol version to be used. It also tries to fix
a problem with transfers in 2-step pin/tan mode (in this mode sometimes the
job result was not available. The QT4-port code has been fixed.
===========================================================================
Released AqBanking - 3.1.0 (2008-01-25)
===========================================================================
This release fixes some important bugs and adds basic supports for import/
export of securities (stocks, mutual funds etc).
===========================================================================
Released AqBanking - 3.0.1 (2007-11-27)
===========================================================================
This release fixes an important bug in Pin/Tan mode. An update is strongly
recommended.
===========================================================================
Released AqBanking - 3.0.0 (2007-11-22)
===========================================================================
This release fixes a few bugs.
===========================================================================
Released AqBanking - 2.9.17rc5 (2007-11-17)
===========================================================================
This release simplifies WIN32 installations.
===========================================================================
Released AqBanking - 2.9.16rc4 (2007-11-14)
===========================================================================
This is a bugfix and cleanup release.
===========================================================================
Released AqBanking - 2.9.15rc3 (2007-11-13)
===========================================================================
This release introduces yet more workarounds for difficult servers.
===========================================================================
Released AqBanking - 2.9.14rc2 (2007-11-11)
===========================================================================
This release introduces workarounds for common server problems.
===========================================================================
Released AqBanking - 2.9.13rc1 (2007-11-09)
===========================================================================
This is a release candidate for the next stable release. This version adds
the command "getcert" to the aqhbci-tool.
===========================================================================
Released AqBanking - 2.9.12beta (2007-11-07)
===========================================================================
This is a bugfix release.
===========================================================================
Released AqBanking - 2.9.11beta (2007-11-03)
===========================================================================
This release fixes some bugs in AqHBCI. It is now more tolerant when
checking the name of a remote signer since the security does not come from
the signer name but from the signature.
===========================================================================
Released AqBanking - 2.9.10beta (2007-11-02)
===========================================================================
The HBCI user wizard now retries retrieving of SSL certificates with SSL3
in case the default SSL setup doesn't work. This version only installs a
single configuration shell script (aqbanking-config). This is now able to
return the configuration of AqHBCI and QBanking as well so there is no need
for multiple of those files.
===========================================================================
Released AqBanking - 2.9.9beta (2007-10-31)
===========================================================================
With this release the HBCI setup wizard is back and working again. Some
important bugs have been fixed and the German bank info files have been
updated.
===========================================================================
Released AqBanking - 2.9.8beta (2007-10-30)
===========================================================================
The previous release was missing two files.
===========================================================================
Released AqBanking - 2.9.7beta (2007-10-28)
===========================================================================
This release fixes some bugs in AqOfxConnect and a potential problem in
AqHBCI. With the latest CVS version of LibOFX it now also allows changing
some protocol-relevant settings (like appid, OFX header version).
===========================================================================
Released AqBanking - 2.9.6beta (2007-10-27)
===========================================================================
This release features support for OFX Direct Connect again. The tutorials
have been adapted so that they demonstrate the current API. AqBanking is now
completely relocatable on WIN32 platforms (and if enabled by a configure
option on Linux as well).
===========================================================================
Released AqBanking - 2.9.5beta (2007-10-25)
===========================================================================
The previous release was missing a file. This release is complete.
===========================================================================
Released AqBanking - 2.9.4beta (2007-10-24)
===========================================================================
This is the first release of AqBanking which no longer requires OpenSSL.
It is also the first to be prepared for cross-compiling for win32 platforms.
Pin/Tan with Netbank works again and many bugs from the last beta release
have been fixed. This version now uses Gwen's new CryptToken framework.
===========================================================================
Released AqBanking - 2.9.3beta (2007-09-11)
===========================================================================
With this release AqBanking has been adapted to the latest version of
Gwenhywfar. Currently the only working online banking backend is AqHBCI,
the other backends will be reenabled as needed.
This release needs Gwenhywfar 2.9.2beta.
===========================================================================
Released AqBanking - 2.9.2beta (2007-05-14)
===========================================================================
This release fixes some major bugs in the previous version. A new banking
job for loading prepaid cards for cell phones has been added (so far
implemented only for HBCI). Started working on FinTS3 support in AqHBCI.
===========================================================================
Released AqBanking - 2.9.1beta (2007-04-04)
===========================================================================
This release fixes some important bugs discovered after the previous release.
===========================================================================
Released AqBanking - 2.9.0beta (2007-04-03)
===========================================================================
This is the first release of AqBanking3. It now uses libgmp instead of simple
"double" type for more precise calculations. AqBanking now uses the GUI
functions of Gwenhywfar3 instead of declaring its own GUI modules. The OFX DC
plugin now supports additional account types. General code cleanup.
This version requires Gwenhywfar3>=2.9.0beta and Libchipcard3>=3.1.0beta.
===========================================================================
Released AqBanking - 2.2.4 (2006-12-27)
===========================================================================
AqGeldKarte has been fixed and adapted to Libchipcard3 which is now required
instead of Libchipcard2. The QBanking frontend is now less verbous, QT should
now be found on Darwin, too. Some other minor bugs have been fixed as well
and the bank data files for Germany have been updated.
===========================================================================
Released AqBanking - 2.2.3 (2006-10-10)
===========================================================================
This version now allows to setup iTAN HBCI accounts.
===========================================================================
Released AqBanking - 2.2.2beta (2006-10-09)
===========================================================================
This version has improved support for HBCI iTAN mode, adds an import profile
for ABN AMRO Bank (NL) and fixes some errors. Please test!
===========================================================================
Released AqBanking - 2.2.1 (2006-08-25)
===========================================================================
This release fixes some minor bugs and typos. The HBCI plugin now also works
with HBCI servers with a faulty iTAN implementation (using iTAN method 900).
===========================================================================
Released AqBanking - 2.2.0 (2006-07-13)
===========================================================================
This release introduces support for HBCI iTAN mode, adds the ability to
modify the PIN in PIN/TAN mode and finally fixes some nasty umlaut problems.
An XML exporter for transaction export has been added. Bank info files for
Germany and Austria have been updated.
===========================================================================
Released AqBanking - 2.1.0 (2006-06-15)
===========================================================================
The YellowNet plugin now uses XML files provided by PostFinance instead of
hard-to-get MT940 files when downloading transaction statements. It also
contains some OFX-related fixes and an improved German translation.
===========================================================================
Released AqBanking - 2.0.0 (2006-04-03)
===========================================================================
No major bugs have been reported so I decided to finally release
AqBanking 2.0.0.
===========================================================================
Released AqBanking - 1.9.11rc1 (2006-03-26)
===========================================================================
This is the first release candidate of AqBanking2. Creating users for HBCI
and now works again and an important bug in OFX DirectConnect has been
fixed.
===========================================================================
Released AqBanking - 1.9.10beta (2006-03-23)
===========================================================================
This release fixes a bug in AqHBCI which prevented PINTAN media from being
created. It also now includes an improved version of the SWIFT parser which
reads more kinds of SWIFT documents (especially those provided by some
Swiss banks).
===========================================================================
Released AqBanking - 1.9.9beta (2006-03-20)
===========================================================================
This release fixes some bugs in YellowNet code and improves the documentation.
It needs the latest release of Gwenhywfar (2.1.0).
===========================================================================
Released AqBanking - 1.9.8beta (2006-03-07)
===========================================================================
This release fixes some bugs concerning importing/creating HBCI users and
problems with the YellowNet backend. The build system and the API have been
cleaned up (including documentation). An update is recommended.
Depending applications need to be recompiled due to changes in the API.
This version is source-compatible with the previous release.
===========================================================================
Released AqBanking - 1.9.7beta (2006-02-06)
===========================================================================
This release fixes some bugs in the build-system, adds a CSV profile for
American Express cards and some tutorials. An updated RPM specfile is now
available.
===========================================================================
Released AqBanking - 1.9.6beta (2006-01-30)
===========================================================================
This release fixes a problem of AqHBCI with attach points. It now allows the
reception of multi-message responses from the bank.
===========================================================================
Released AqBanking - 1.9.5beta (2006-01-28)
===========================================================================
This version fixes some makefiles of the new backends.
===========================================================================
Released AqBanking - 1.9.4beta (2006-01-27)
===========================================================================
This release adds a backend for YellowNet (Suisse Postfinance, binary-only),
adds a fake-backend to be used for accounts which are not managed via any
other online banking backend and fixes some bugs. Most importantly, OFX Direct
Connect now works again (thanks to David Reiser!!)
===========================================================================
Released AqBanking - 1.9.3beta (2006-01-26)
===========================================================================
This release fixes some bugs, improves safety of working with crypt tokens
(now a crypt token can report a bad pin), includes a help system, features
hidden visibility for the QT3-depending files and an improved GTK2 frontend.
Nearly complete German translation is now provided.
===========================================================================
Released AqBanking - 1.9.2beta (2006-01-19)
===========================================================================
This relese fixes a bug which made Gnucash unable to find the QT3 wizard.
It also reintroduces support for OFX DirectConnect (yet untested, though).
===========================================================================
Released AqBanking - 1.9.1beta (2006-01-17)
===========================================================================
This release fixes many bugs in the previous version. It is now able to
completely migrate user configuration data from older versions to the
current one.
===========================================================================
Released AqBanking - 1.9.0beta (2006-01-11)
===========================================================================
This version features a complete redesign of the configuration framework.
It also removes some deprecated functions and makes use of GCCs visibility
feature (thus removing several hundred symbols from the libraries export
table which decreases application loading time).
===========================================================================
Released AqBanking - 1.8.1beta (2005-12-15)
===========================================================================
This version fixes some network problems and cleans up the build system.
It now allows to choose the transfer mode independently for transfer orders
and debit notes.
===========================================================================
Released AqBanking - 1.8.0beta (2005-11-22)
===========================================================================
This version fixes many bugs, adapts to Gwenhywfar2 (1.99.0) and fixes
many problems encountered in HBCI-PIN/TAN mode. The user setup wizard for
HBCI has been rewritten (but it can only import existing media for now).
===========================================================================
Released AqBanking - 1.6.0beta (2005/09/02)
===========================================================================
This release fixes some bugs and adds job-related logging (to be viewed with
aqbanking-tool's new command "joblog").
===========================================================================
Released AqBanking - 1.3.0beta (2005/07/15)
===========================================================================
This release now includes all backends (AqHBCI, AqDTAUS,
AqGeldKarte, AqOfxConnect) and all frontends (console, gtk2, qt3,
kde3) and all QT3 setup wizards for all backends. AqHBCI now uses
Gwenhywfar's CryptToken plugins instead of its own media
plugins. "aqhbci-tool" can now be used to setup a new user from
console. An ERI importer plugin has been added, some important
bugs have been fixed and code duplication has been replaced by the
new QT3 frontend. (Note: Further information in German can be
found on http://linuxwiki.de/AqBanking )
Please note that the media plugins for AqHBCI (DDVCard, RSACard)
are now obsoleted by the latest versions of AqBanking, Gwen and
Libchipcard2.
New package structure since aqbanking-1.3.0
-------------------------------------------
Starting from aqbanking-1.3.0, the aqbanking package now includes
all sub-packages that previously were released in separate
packages or projects.
Source packages
---------------
In particular, all the following source packages are now included
by and obsoleted by aqbanking-1.3.0.tar.gz and newer versions:
aqhbci
aqhbci-qt-tools
aqdtaus
aqdtaus-qt-tools
aqgeldkarte
aqgeldkarte-qt-tools
aqofxconnect
aqofxconnect-qt-tools
kbanking
g2banking
-> Again, these are now all obsoleted by aqbanking-1.3.0.tar.gz
and newer.
The chipcard-related sub-packages of aqbanking/aqhbci are also
obsoleted by aqbanking-1.3.0 and libchipcard-1.9.13, because the
relevant source code files are now included in libchipcard:
aqhbci-ddvcard
aqhbci-rsacard
-> Again, these are now all obsoleted by aqbanking-1.3.0.tar.gz
with libchipcard-1.9.13.tar.gz and newer.
RPM packages
------------
The aqbanking-1.3.0.tar.gz source packages will create several
different RPM packages according to the different requirements of
each of its parts. In particular:
aqbanking -> Still named aqbanking
aqhbci -> Obsoleted by aqbanking
aqdtaus -> Obsoleted by aqbanking
aqhbci-qt-tools -> Obsoleted by aqbanking-qt3
aqdtaus-qt-tools -> Obsoleted by aqbanking-qt3
kbanking -> Obsoleted by aqbanking-kde3
g2banking -> Obsoleted by aqbanking-gtk2
aqhbci-ddvcard -> Obsoleted by libchipcard
aqhbci-rsacard -> Obsoleted by libchipcard
aqgeldkarte -> Obsoleted by aqbanking-geldkarte
aqgeldkarte-qt-tools -> Obsoleted by aqbanking-geldkarte-qt3
aqofxconnect -> Obsoleted by aqbanking-ofx
aqofxconnect-qt-tools -> Obsoleted by aqbanking-ofx-qt3
aqbanking-6.9.1/aqbanking-config.cmake.in 0000664 0001750 0001750 00000003036 14043610744 015217 0000000 0000000
macro(set_and_check _var _file)
set(${_var} "${_file}")
if(NOT EXISTS "${_file}")
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
endif()
endmacro()
macro(check_required_components _NAME)
foreach(comp ${${_NAME}_FIND_COMPONENTS})
if(NOT ${_NAME}_${comp}_FOUND)
if(${_NAME}_FIND_REQUIRED_${comp})
set(${_NAME}_FOUND FALSE)
endif()
endif()
endforeach()
endmacro()
include(CMakeFindDependencyMacro)
find_dependency(gwenhywfar "@GWENHYWFAR_MINIMUM_VERSION@")
set_and_check(prefix "@prefix@")
set_and_check(exec_prefix "@exec_prefix@")
set_and_check(includedir "@includedir@")
set_and_check(AQBANKING_INCLUDE_DIRS "@aqbanking_headerdir@")
if(WIN32)
set_and_check(AQBANKING_LIBRARIES "@libdir@/libaqbanking.dll.a")
elseif(APPLE)
set_and_check(AQBANKING_LIBRARIES "@libdir@/libaqbanking.@AQBANKING_SO_EFFECTIVE@.dylib")
else()
set_and_check(AQBANKING_LIBRARIES "@libdir@/libaqbanking.so.@AQBANKING_SO_EFFECTIVE@")
endif()
set(AQBANKING_FOUND true)
# The target is available since aqbanking 5.6.5
if(AQBANKING_FOUND AND NOT TARGET aqbanking::aqbanking)
add_library(aqbanking::aqbanking UNKNOWN IMPORTED)
set_target_properties(aqbanking::aqbanking PROPERTIES
IMPORTED_LOCATION "${AQBANKING_LIBRARIES}"
INTERFACE_INCLUDE_DIRECTORIES "${AQBANKING_INCLUDE_DIRS}"
INTERFACE_LINK_LIBRARIES gwenhywfar::core
)
endif()
set(AQBANKING_LIBRARIES ${AQBANKING_LIBRARIES} ${GWENHYWFAR_LIBRARIES})
mark_as_advanced( AQBANKING_INCLUDE_DIRS AQBANKING_LIBRARIES )
aqbanking-6.9.1/ltmain.sh 0000755 0001750 0001750 00001212401 14605317530 012233 0000000 0000000 #! /usr/bin/env sh
## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
## by inline-source v2019-02-19.15
# libtool (GNU libtool) 2.4.7
# Provide generalized library-building support services.
# Written by Gordon Matzigkeit , 1996
# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc.
# This is free software; see the source for copying conditions. There is NO
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# GNU Libtool is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# As a special exception to the GNU General Public License,
# if you distribute this file as part of a program or library that
# is built using GNU Libtool, you may include this file under the
# same distribution terms that you use for the rest of that program.
#
# GNU Libtool is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
PROGRAM=libtool
PACKAGE=libtool
VERSION="2.4.7 Debian-2.4.7-7~deb12u1"
package_revision=2.4.7
## ------ ##
## Usage. ##
## ------ ##
# Run './libtool --help' for help with using this script from the
# command line.
## ------------------------------- ##
## User overridable command paths. ##
## ------------------------------- ##
# After configure completes, it has a better idea of some of the
# shell tools we need than the defaults used by the functions shared
# with bootstrap, so set those here where they can still be over-
# ridden by the user, but otherwise take precedence.
: ${AUTOCONF="autoconf"}
: ${AUTOMAKE="automake"}
## -------------------------- ##
## Source external libraries. ##
## -------------------------- ##
# Much of our low-level functionality needs to be sourced from external
# libraries, which are installed to $pkgauxdir.
# Set a version string for this script.
scriptversion=2019-02-19.15; # UTC
# General shell script boiler plate, and helper functions.
# Written by Gary V. Vaughan, 2004
# This is free software. There is NO warranty; not even for
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# Copyright (C) 2004-2019, 2021 Bootstrap Authors
#
# This file is dual licensed under the terms of the MIT license
# , and GPL version 2 or later
# . You must apply one of
# these licenses when using or redistributing this software or any of
# the files within it. See the URLs above, or the file `LICENSE`
# included in the Bootstrap distribution for the full license texts.
# Please report bugs or propose patches to:
#
## ------ ##
## Usage. ##
## ------ ##
# Evaluate this file near the top of your script to gain access to
# the functions and variables defined here:
#
# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
#
# If you need to override any of the default environment variable
# settings, do that before evaluating this file.
## -------------------- ##
## Shell normalisation. ##
## -------------------- ##
# Some shells need a little help to be as Bourne compatible as possible.
# Before doing anything else, make sure all that help has been provided!
DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
else
case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
fi
# NLS nuisances: We save the old values in case they are required later.
_G_user_locale=
_G_safe_locale=
for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
do
eval "if test set = \"\${$_G_var+set}\"; then
save_$_G_var=\$$_G_var
$_G_var=C
export $_G_var
_G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
_G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
fi"
done
# These NLS vars are set unconditionally (bootstrap issue #24). Unset those
# in case the environment reset is needed later and the $save_* variant is not
# defined (see the code above).
LC_ALL=C
LANGUAGE=C
export LANGUAGE LC_ALL
# Make sure IFS has a sensible default
sp=' '
nl='
'
IFS="$sp $nl"
# There are apparently some retarded systems that use ';' as a PATH separator!
if test "${PATH_SEPARATOR+set}" != set; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
PATH_SEPARATOR=';'
}
fi
# func_unset VAR
# --------------
# Portably unset VAR.
# In some shells, an 'unset VAR' statement leaves a non-zero return
# status if VAR is already unset, which might be problematic if the
# statement is used at the end of a function (thus poisoning its return
# value) or when 'set -e' is active (causing even a spurious abort of
# the script in this case).
func_unset ()
{
{ eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
}
# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
func_unset CDPATH
# Make sure ${,E,F}GREP behave sanely.
func_unset GREP_OPTIONS
## ------------------------- ##
## Locate command utilities. ##
## ------------------------- ##
# func_executable_p FILE
# ----------------------
# Check that FILE is an executable regular file.
func_executable_p ()
{
test -f "$1" && test -x "$1"
}
# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
# --------------------------------------------
# Search for either a program that responds to --version with output
# containing "GNU", or else returned by CHECK_FUNC otherwise, by
# trying all the directories in PATH with each of the elements of
# PROGS_LIST.
#
# CHECK_FUNC should accept the path to a candidate program, and
# set $func_check_prog_result if it truncates its output less than
# $_G_path_prog_max characters.
func_path_progs ()
{
_G_progs_list=$1
_G_check_func=$2
_G_PATH=${3-"$PATH"}
_G_path_prog_max=0
_G_path_prog_found=false
_G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
for _G_dir in $_G_PATH; do
IFS=$_G_save_IFS
test -z "$_G_dir" && _G_dir=.
for _G_prog_name in $_G_progs_list; do
for _exeext in '' .EXE; do
_G_path_prog=$_G_dir/$_G_prog_name$_exeext
func_executable_p "$_G_path_prog" || continue
case `"$_G_path_prog" --version 2>&1` in
*GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
*) $_G_check_func $_G_path_prog
func_path_progs_result=$func_check_prog_result
;;
esac
$_G_path_prog_found && break 3
done
done
done
IFS=$_G_save_IFS
test -z "$func_path_progs_result" && {
echo "no acceptable sed could be found in \$PATH" >&2
exit 1
}
}
# We want to be able to use the functions in this file before configure
# has figured out where the best binaries are kept, which means we have
# to search for them ourselves - except when the results are already set
# where we skip the searches.
# Unless the user overrides by setting SED, search the path for either GNU
# sed, or the sed that truncates its output the least.
test -z "$SED" && {
_G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
for _G_i in 1 2 3 4 5 6 7; do
_G_sed_script=$_G_sed_script$nl$_G_sed_script
done
echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
_G_sed_script=
func_check_prog_sed ()
{
_G_path_prog=$1
_G_count=0
printf 0123456789 >conftest.in
while :
do
cat conftest.in conftest.in >conftest.tmp
mv conftest.tmp conftest.in
cp conftest.in conftest.nl
echo '' >> conftest.nl
"$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break
diff conftest.out conftest.nl >/dev/null 2>&1 || break
_G_count=`expr $_G_count + 1`
if test "$_G_count" -gt "$_G_path_prog_max"; then
# Best one so far, save it but keep looking for a better one
func_check_prog_result=$_G_path_prog
_G_path_prog_max=$_G_count
fi
# 10*(2^10) chars as input seems more than enough
test 10 -lt "$_G_count" && break
done
rm -f conftest.in conftest.tmp conftest.nl conftest.out
}
func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
rm -f conftest.sed
SED=$func_path_progs_result
}
# Unless the user overrides by setting GREP, search the path for either GNU
# grep, or the grep that truncates its output the least.
test -z "$GREP" && {
func_check_prog_grep ()
{
_G_path_prog=$1
_G_count=0
_G_path_prog_max=0
printf 0123456789 >conftest.in
while :
do
cat conftest.in conftest.in >conftest.tmp
mv conftest.tmp conftest.in
cp conftest.in conftest.nl
echo 'GREP' >> conftest.nl
"$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break
diff conftest.out conftest.nl >/dev/null 2>&1 || break
_G_count=`expr $_G_count + 1`
if test "$_G_count" -gt "$_G_path_prog_max"; then
# Best one so far, save it but keep looking for a better one
func_check_prog_result=$_G_path_prog
_G_path_prog_max=$_G_count
fi
# 10*(2^10) chars as input seems more than enough
test 10 -lt "$_G_count" && break
done
rm -f conftest.in conftest.tmp conftest.nl conftest.out
}
func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
GREP=$func_path_progs_result
}
## ------------------------------- ##
## User overridable command paths. ##
## ------------------------------- ##
# All uppercase variable names are used for environment variables. These
# variables can be overridden by the user before calling a script that
# uses them if a suitable command of that name is not already available
# in the command search PATH.
: ${CP="cp -f"}
: ${ECHO="printf %s\n"}
: ${EGREP="$GREP -E"}
: ${FGREP="$GREP -F"}
: ${LN_S="ln -s"}
: ${MAKE="make"}
: ${MKDIR="mkdir"}
: ${MV="mv -f"}
: ${RM="rm -f"}
: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
## -------------------- ##
## Useful sed snippets. ##
## -------------------- ##
sed_dirname='s|/[^/]*$||'
sed_basename='s|^.*/||'
# Sed substitution that helps us do robust quoting. It backslashifies
# metacharacters that are still active within double-quoted strings.
sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
# Same as above, but do not quote variable references.
sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
# Sed substitution that turns a string into a regex matching for the
# string literally.
sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
# Sed substitution that converts a w32 file name or path
# that contains forward slashes, into one that contains
# (escaped) backslashes. A very naive implementation.
sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
# Re-'\' parameter expansions in output of sed_double_quote_subst that
# were '\'-ed in input to the same. If an odd number of '\' preceded a
# '$' in input to sed_double_quote_subst, that '$' was protected from
# expansion. Since each input '\' is now two '\'s, look for any number
# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'.
_G_bs='\\'
_G_bs2='\\\\'
_G_bs4='\\\\\\\\'
_G_dollar='\$'
sed_double_backslash="\
s/$_G_bs4/&\\
/g
s/^$_G_bs2$_G_dollar/$_G_bs&/
s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
s/\n//g"
# require_check_ifs_backslash
# ---------------------------
# Check if we can use backslash as IFS='\' separator, and set
# $check_ifs_backshlash_broken to ':' or 'false'.
require_check_ifs_backslash=func_require_check_ifs_backslash
func_require_check_ifs_backslash ()
{
_G_save_IFS=$IFS
IFS='\'
_G_check_ifs_backshlash='a\\b'
for _G_i in $_G_check_ifs_backshlash
do
case $_G_i in
a)
check_ifs_backshlash_broken=false
;;
'')
break
;;
*)
check_ifs_backshlash_broken=:
break
;;
esac
done
IFS=$_G_save_IFS
require_check_ifs_backslash=:
}
## ----------------- ##
## Global variables. ##
## ----------------- ##
# Except for the global variables explicitly listed below, the following
# functions in the '^func_' namespace, and the '^require_' namespace
# variables initialised in the 'Resource management' section, sourcing
# this file will not pollute your global namespace with anything
# else. There's no portable way to scope variables in Bourne shell
# though, so actually running these functions will sometimes place
# results into a variable named after the function, and often use
# temporary variables in the '^_G_' namespace. If you are careful to
# avoid using those namespaces casually in your sourcing script, things
# should continue to work as you expect. And, of course, you can freely
# overwrite any of the functions or variables defined here before
# calling anything to customize them.
EXIT_SUCCESS=0
EXIT_FAILURE=1
EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
# Allow overriding, eg assuming that you follow the convention of
# putting '$debug_cmd' at the start of all your functions, you can get
# bash to show function call trace with:
#
# debug_cmd='echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
debug_cmd=${debug_cmd-":"}
exit_cmd=:
# By convention, finish your script with:
#
# exit $exit_status
#
# so that you can set exit_status to non-zero if you want to indicate
# something went wrong during execution without actually bailing out at
# the point of failure.
exit_status=$EXIT_SUCCESS
# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
# is ksh but when the shell is invoked as "sh" and the current value of
# the _XPG environment variable is not equal to 1 (one), the special
# positional parameter $0, within a function call, is the name of the
# function.
progpath=$0
# The name of this program.
progname=`$ECHO "$progpath" |$SED "$sed_basename"`
# Make sure we have an absolute progpath for reexecution:
case $progpath in
[\\/]*|[A-Za-z]:\\*) ;;
*[\\/]*)
progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
progdir=`cd "$progdir" && pwd`
progpath=$progdir/$progname
;;
*)
_G_IFS=$IFS
IFS=${PATH_SEPARATOR-:}
for progdir in $PATH; do
IFS=$_G_IFS
test -x "$progdir/$progname" && break
done
IFS=$_G_IFS
test -n "$progdir" || progdir=`pwd`
progpath=$progdir/$progname
;;
esac
## ----------------- ##
## Standard options. ##
## ----------------- ##
# The following options affect the operation of the functions defined
# below, and should be set appropriately depending on run-time para-
# meters passed on the command line.
opt_dry_run=false
opt_quiet=false
opt_verbose=false
# Categories 'all' and 'none' are always available. Append any others
# you will pass as the first argument to func_warning from your own
# code.
warning_categories=
# By default, display warnings according to 'opt_warning_types'. Set
# 'warning_func' to ':' to elide all warnings, or func_fatal_error to
# treat the next displayed warning as a fatal error.
warning_func=func_warn_and_continue
# Set to 'all' to display all warnings, 'none' to suppress all
# warnings, or a space delimited list of some subset of
# 'warning_categories' to display only the listed warnings.
opt_warning_types=all
## -------------------- ##
## Resource management. ##
## -------------------- ##
# This section contains definitions for functions that each ensure a
# particular resource (a file, or a non-empty configuration variable for
# example) is available, and if appropriate to extract default values
# from pertinent package files. Call them using their associated
# 'require_*' variable to ensure that they are executed, at most, once.
#
# It's entirely deliberate that calling these functions can set
# variables that don't obey the namespace limitations obeyed by the rest
# of this file, in order that that they be as useful as possible to
# callers.
# require_term_colors
# -------------------
# Allow display of bold text on terminals that support it.
require_term_colors=func_require_term_colors
func_require_term_colors ()
{
$debug_cmd
test -t 1 && {
# COLORTERM and USE_ANSI_COLORS environment variables take
# precedence, because most terminfo databases neglect to describe
# whether color sequences are supported.
test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
if test 1 = "$USE_ANSI_COLORS"; then
# Standard ANSI escape sequences
tc_reset='[0m'
tc_bold='[1m'; tc_standout='[7m'
tc_red='[31m'; tc_green='[32m'
tc_blue='[34m'; tc_cyan='[36m'
else
# Otherwise trust the terminfo database after all.
test -n "`tput sgr0 2>/dev/null`" && {
tc_reset=`tput sgr0`
test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
tc_standout=$tc_bold
test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
}
fi
}
require_term_colors=:
}
## ----------------- ##
## Function library. ##
## ----------------- ##
# This section contains a variety of useful functions to call in your
# scripts. Take note of the portable wrappers for features provided by
# some modern shells, which will fall back to slower equivalents on
# less featureful shells.
# func_append VAR VALUE
# ---------------------
# Append VALUE onto the existing contents of VAR.
# _G_HAVE_PLUSEQ_OP
# Can be empty, in which case the shell is probed, "yes" if += is
# useable or anything else if it does not work.
if test -z "$_G_HAVE_PLUSEQ_OP" && \
__PLUSEQ_TEST="a" && \
__PLUSEQ_TEST+=" b" 2>/dev/null && \
test "a b" = "$__PLUSEQ_TEST"; then
_G_HAVE_PLUSEQ_OP=yes
fi
if test yes = "$_G_HAVE_PLUSEQ_OP"
then
# This is an XSI compatible shell, allowing a faster implementation...
eval 'func_append ()
{
$debug_cmd
eval "$1+=\$2"
}'
else
# ...otherwise fall back to using expr, which is often a shell builtin.
func_append ()
{
$debug_cmd
eval "$1=\$$1\$2"
}
fi
# func_append_quoted VAR VALUE
# ----------------------------
# Quote VALUE and append to the end of shell variable VAR, separated
# by a space.
if test yes = "$_G_HAVE_PLUSEQ_OP"; then
eval 'func_append_quoted ()
{
$debug_cmd
func_quote_arg pretty "$2"
eval "$1+=\\ \$func_quote_arg_result"
}'
else
func_append_quoted ()
{
$debug_cmd
func_quote_arg pretty "$2"
eval "$1=\$$1\\ \$func_quote_arg_result"
}
fi
# func_append_uniq VAR VALUE
# --------------------------
# Append unique VALUE onto the existing contents of VAR, assuming
# entries are delimited by the first character of VALUE. For example:
#
# func_append_uniq options " --another-option option-argument"
#
# will only append to $options if " --another-option option-argument "
# is not already present somewhere in $options already (note spaces at
# each end implied by leading space in second argument).
func_append_uniq ()
{
$debug_cmd
eval _G_current_value='`$ECHO $'$1'`'
_G_delim=`expr "$2" : '\(.\)'`
case $_G_delim$_G_current_value$_G_delim in
*"$2$_G_delim"*) ;;
*) func_append "$@" ;;
esac
}
# func_arith TERM...
# ------------------
# Set func_arith_result to the result of evaluating TERMs.
test -z "$_G_HAVE_ARITH_OP" \
&& (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
&& _G_HAVE_ARITH_OP=yes
if test yes = "$_G_HAVE_ARITH_OP"; then
eval 'func_arith ()
{
$debug_cmd
func_arith_result=$(( $* ))
}'
else
func_arith ()
{
$debug_cmd
func_arith_result=`expr "$@"`
}
fi
# func_basename FILE
# ------------------
# Set func_basename_result to FILE with everything up to and including
# the last / stripped.
if test yes = "$_G_HAVE_XSI_OPS"; then
# If this shell supports suffix pattern removal, then use it to avoid
# forking. Hide the definitions single quotes in case the shell chokes
# on unsupported syntax...
_b='func_basename_result=${1##*/}'
_d='case $1 in
*/*) func_dirname_result=${1%/*}$2 ;;
* ) func_dirname_result=$3 ;;
esac'
else
# ...otherwise fall back to using sed.
_b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
_d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"`
if test "X$func_dirname_result" = "X$1"; then
func_dirname_result=$3
else
func_append func_dirname_result "$2"
fi'
fi
eval 'func_basename ()
{
$debug_cmd
'"$_b"'
}'
# func_dirname FILE APPEND NONDIR_REPLACEMENT
# -------------------------------------------
# Compute the dirname of FILE. If nonempty, add APPEND to the result,
# otherwise set result to NONDIR_REPLACEMENT.
eval 'func_dirname ()
{
$debug_cmd
'"$_d"'
}'
# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
# --------------------------------------------------------
# Perform func_basename and func_dirname in a single function
# call:
# dirname: Compute the dirname of FILE. If nonempty,
# add APPEND to the result, otherwise set result
# to NONDIR_REPLACEMENT.
# value returned in "$func_dirname_result"
# basename: Compute filename of FILE.
# value retuned in "$func_basename_result"
# For efficiency, we do not delegate to the functions above but instead
# duplicate the functionality here.
eval 'func_dirname_and_basename ()
{
$debug_cmd
'"$_b"'
'"$_d"'
}'
# func_echo ARG...
# ----------------
# Echo program name prefixed message.
func_echo ()
{
$debug_cmd
_G_message=$*
func_echo_IFS=$IFS
IFS=$nl
for _G_line in $_G_message; do
IFS=$func_echo_IFS
$ECHO "$progname: $_G_line"
done
IFS=$func_echo_IFS
}
# func_echo_all ARG...
# --------------------
# Invoke $ECHO with all args, space-separated.
func_echo_all ()
{
$ECHO "$*"
}
# func_echo_infix_1 INFIX ARG...
# ------------------------------
# Echo program name, followed by INFIX on the first line, with any
# additional lines not showing INFIX.
func_echo_infix_1 ()
{
$debug_cmd
$require_term_colors
_G_infix=$1; shift
_G_indent=$_G_infix
_G_prefix="$progname: $_G_infix: "
_G_message=$*
# Strip color escape sequences before counting printable length
for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
do
test -n "$_G_tc" && {
_G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
_G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
}
done
_G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes
func_echo_infix_1_IFS=$IFS
IFS=$nl
for _G_line in $_G_message; do
IFS=$func_echo_infix_1_IFS
$ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
_G_prefix=$_G_indent
done
IFS=$func_echo_infix_1_IFS
}
# func_error ARG...
# -----------------
# Echo program name prefixed message to standard error.
func_error ()
{
$debug_cmd
$require_term_colors
func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2
}
# func_fatal_error ARG...
# -----------------------
# Echo program name prefixed message to standard error, and exit.
func_fatal_error ()
{
$debug_cmd
func_error "$*"
exit $EXIT_FAILURE
}
# func_grep EXPRESSION FILENAME
# -----------------------------
# Check whether EXPRESSION matches any line of FILENAME, without output.
func_grep ()
{
$debug_cmd
$GREP "$1" "$2" >/dev/null 2>&1
}
# func_len STRING
# ---------------
# Set func_len_result to the length of STRING. STRING may not
# start with a hyphen.
test -z "$_G_HAVE_XSI_OPS" \
&& (eval 'x=a/b/c;
test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
&& _G_HAVE_XSI_OPS=yes
if test yes = "$_G_HAVE_XSI_OPS"; then
eval 'func_len ()
{
$debug_cmd
func_len_result=${#1}
}'
else
func_len ()
{
$debug_cmd
func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
}
fi
# func_mkdir_p DIRECTORY-PATH
# ---------------------------
# Make sure the entire path to DIRECTORY-PATH is available.
func_mkdir_p ()
{
$debug_cmd
_G_directory_path=$1
_G_dir_list=
if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
# Protect directory names starting with '-'
case $_G_directory_path in
-*) _G_directory_path=./$_G_directory_path ;;
esac
# While some portion of DIR does not yet exist...
while test ! -d "$_G_directory_path"; do
# ...make a list in topmost first order. Use a colon delimited
# list incase some portion of path contains whitespace.
_G_dir_list=$_G_directory_path:$_G_dir_list
# If the last portion added has no slash in it, the list is done
case $_G_directory_path in */*) ;; *) break ;; esac
# ...otherwise throw away the child directory and loop
_G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
done
_G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
func_mkdir_p_IFS=$IFS; IFS=:
for _G_dir in $_G_dir_list; do
IFS=$func_mkdir_p_IFS
# mkdir can fail with a 'File exist' error if two processes
# try to create one of the directories concurrently. Don't
# stop in that case!
$MKDIR "$_G_dir" 2>/dev/null || :
done
IFS=$func_mkdir_p_IFS
# Bail out if we (or some other process) failed to create a directory.
test -d "$_G_directory_path" || \
func_fatal_error "Failed to create '$1'"
fi
}
# func_mktempdir [BASENAME]
# -------------------------
# Make a temporary directory that won't clash with other running
# libtool processes, and avoids race conditions if possible. If
# given, BASENAME is the basename for that directory.
func_mktempdir ()
{
$debug_cmd
_G_template=${TMPDIR-/tmp}/${1-$progname}
if test : = "$opt_dry_run"; then
# Return a directory name, but don't create it in dry-run mode
_G_tmpdir=$_G_template-$$
else
# If mktemp works, use that first and foremost
_G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
if test ! -d "$_G_tmpdir"; then
# Failing that, at least try and use $RANDOM to avoid a race
_G_tmpdir=$_G_template-${RANDOM-0}$$
func_mktempdir_umask=`umask`
umask 0077
$MKDIR "$_G_tmpdir"
umask $func_mktempdir_umask
fi
# If we're not in dry-run mode, bomb out on failure
test -d "$_G_tmpdir" || \
func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
fi
$ECHO "$_G_tmpdir"
}
# func_normal_abspath PATH
# ------------------------
# Remove doubled-up and trailing slashes, "." path components,
# and cancel out any ".." path components in PATH after making
# it an absolute path.
func_normal_abspath ()
{
$debug_cmd
# These SED scripts presuppose an absolute path with a trailing slash.
_G_pathcar='s|^/\([^/]*\).*$|\1|'
_G_pathcdr='s|^/[^/]*||'
_G_removedotparts=':dotsl
s|/\./|/|g
t dotsl
s|/\.$|/|'
_G_collapseslashes='s|/\{1,\}|/|g'
_G_finalslash='s|/*$|/|'
# Start from root dir and reassemble the path.
func_normal_abspath_result=
func_normal_abspath_tpath=$1
func_normal_abspath_altnamespace=
case $func_normal_abspath_tpath in
"")
# Empty path, that just means $cwd.
func_stripname '' '/' "`pwd`"
func_normal_abspath_result=$func_stripname_result
return
;;
# The next three entries are used to spot a run of precisely
# two leading slashes without using negated character classes;
# we take advantage of case's first-match behaviour.
///*)
# Unusual form of absolute path, do nothing.
;;
//*)
# Not necessarily an ordinary path; POSIX reserves leading '//'
# and for example Cygwin uses it to access remote file shares
# over CIFS/SMB, so we conserve a leading double slash if found.
func_normal_abspath_altnamespace=/
;;
/*)
# Absolute path, do nothing.
;;
*)
# Relative path, prepend $cwd.
func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
;;
esac
# Cancel out all the simple stuff to save iterations. We also want
# the path to end with a slash for ease of parsing, so make sure
# there is one (and only one) here.
func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
-e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
while :; do
# Processed it all yet?
if test / = "$func_normal_abspath_tpath"; then
# If we ascended to the root using ".." the result may be empty now.
if test -z "$func_normal_abspath_result"; then
func_normal_abspath_result=/
fi
break
fi
func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
-e "$_G_pathcar"`
func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
-e "$_G_pathcdr"`
# Figure out what to do with it
case $func_normal_abspath_tcomponent in
"")
# Trailing empty path component, ignore it.
;;
..)
# Parent dir; strip last assembled component from result.
func_dirname "$func_normal_abspath_result"
func_normal_abspath_result=$func_dirname_result
;;
*)
# Actual path component, append it.
func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
;;
esac
done
# Restore leading double-slash if one was found on entry.
func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
}
# func_notquiet ARG...
# --------------------
# Echo program name prefixed message only when not in quiet mode.
func_notquiet ()
{
$debug_cmd
$opt_quiet || func_echo ${1+"$@"}
# A bug in bash halts the script if the last line of a function
# fails when set -e is in force, so we need another command to
# work around that:
:
}
# func_relative_path SRCDIR DSTDIR
# --------------------------------
# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
func_relative_path ()
{
$debug_cmd
func_relative_path_result=
func_normal_abspath "$1"
func_relative_path_tlibdir=$func_normal_abspath_result
func_normal_abspath "$2"
func_relative_path_tbindir=$func_normal_abspath_result
# Ascend the tree starting from libdir
while :; do
# check if we have found a prefix of bindir
case $func_relative_path_tbindir in
$func_relative_path_tlibdir)
# found an exact match
func_relative_path_tcancelled=
break
;;
$func_relative_path_tlibdir*)
# found a matching prefix
func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
func_relative_path_tcancelled=$func_stripname_result
if test -z "$func_relative_path_result"; then
func_relative_path_result=.
fi
break
;;
*)
func_dirname $func_relative_path_tlibdir
func_relative_path_tlibdir=$func_dirname_result
if test -z "$func_relative_path_tlibdir"; then
# Have to descend all the way to the root!
func_relative_path_result=../$func_relative_path_result
func_relative_path_tcancelled=$func_relative_path_tbindir
break
fi
func_relative_path_result=../$func_relative_path_result
;;
esac
done
# Now calculate path; take care to avoid doubling-up slashes.
func_stripname '' '/' "$func_relative_path_result"
func_relative_path_result=$func_stripname_result
func_stripname '/' '/' "$func_relative_path_tcancelled"
if test -n "$func_stripname_result"; then
func_append func_relative_path_result "/$func_stripname_result"
fi
# Normalisation. If bindir is libdir, return '.' else relative path.
if test -n "$func_relative_path_result"; then
func_stripname './' '' "$func_relative_path_result"
func_relative_path_result=$func_stripname_result
fi
test -n "$func_relative_path_result" || func_relative_path_result=.
:
}
# func_quote_portable EVAL ARG
# ----------------------------
# Internal function to portably implement func_quote_arg. Note that we still
# keep attention to performance here so we as much as possible try to avoid
# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
func_quote_portable ()
{
$debug_cmd
$require_check_ifs_backslash
func_quote_portable_result=$2
# one-time-loop (easy break)
while true
do
if $1; then
func_quote_portable_result=`$ECHO "$2" | $SED \
-e "$sed_double_quote_subst" -e "$sed_double_backslash"`
break
fi
# Quote for eval.
case $func_quote_portable_result in
*[\\\`\"\$]*)
# Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
# contains the shell wildcard characters.
case $check_ifs_backshlash_broken$func_quote_portable_result in
:*|*[\[\*\?]*)
func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
| $SED "$sed_quote_subst"`
break
;;
esac
func_quote_portable_old_IFS=$IFS
for _G_char in '\' '`' '"' '$'
do
# STATE($1) PREV($2) SEPARATOR($3)
set start "" ""
func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
IFS=$_G_char
for _G_part in $func_quote_portable_result
do
case $1 in
quote)
func_append func_quote_portable_result "$3$2"
set quote "$_G_part" "\\$_G_char"
;;
start)
set first "" ""
func_quote_portable_result=
;;
first)
set quote "$_G_part" ""
;;
esac
done
done
IFS=$func_quote_portable_old_IFS
;;
*) ;;
esac
break
done
func_quote_portable_unquoted_result=$func_quote_portable_result
case $func_quote_portable_result in
# double-quote args containing shell metacharacters to delay
# word splitting, command substitution and variable expansion
# for a subsequent eval.
# many bourne shells cannot handle close brackets correctly
# in scan sets, so we specify it separately.
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
func_quote_portable_result=\"$func_quote_portable_result\"
;;
esac
}
# func_quotefast_eval ARG
# -----------------------
# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG',
# but optimized for speed. Result is stored in $func_quotefast_eval.
if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
printf -v _GL_test_printf_tilde %q '~'
if test '\~' = "$_GL_test_printf_tilde"; then
func_quotefast_eval ()
{
printf -v func_quotefast_eval_result %q "$1"
}
else
# Broken older Bash implementations. Make those faster too if possible.
func_quotefast_eval ()
{
case $1 in
'~'*)
func_quote_portable false "$1"
func_quotefast_eval_result=$func_quote_portable_result
;;
*)
printf -v func_quotefast_eval_result %q "$1"
;;
esac
}
fi
else
func_quotefast_eval ()
{
func_quote_portable false "$1"
func_quotefast_eval_result=$func_quote_portable_result
}
fi
# func_quote_arg MODEs ARG
# ------------------------
# Quote one ARG to be evaled later. MODEs argument may contain zero or more
# specifiers listed below separated by ',' character. This function returns two
# values:
# i) func_quote_arg_result
# double-quoted (when needed), suitable for a subsequent eval
# ii) func_quote_arg_unquoted_result
# has all characters that are still active within double
# quotes backslashified. Available only if 'unquoted' is specified.
#
# Available modes:
# ----------------
# 'eval' (default)
# - escape shell special characters
# 'expand'
# - the same as 'eval'; but do not quote variable references
# 'pretty'
# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might
# be used later in func_quote to get output like: 'echo "a b"' instead
# of 'echo a\ b'. This is slower than default on some shells.
# 'unquoted'
# - produce also $func_quote_arg_unquoted_result which does not contain
# wrapping double-quotes.
#
# Examples for 'func_quote_arg pretty,unquoted string':
#
# string | *_result | *_unquoted_result
# ------------+-----------------------+-------------------
# " | \" | \"
# a b | "a b" | a b
# "a b" | "\"a b\"" | \"a b\"
# * | "*" | *
# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\"
#
# Examples for 'func_quote_arg pretty,unquoted,expand string':
#
# string | *_result | *_unquoted_result
# --------------+---------------------+--------------------
# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\"
func_quote_arg ()
{
_G_quote_expand=false
case ,$1, in
*,expand,*)
_G_quote_expand=:
;;
esac
case ,$1, in
*,pretty,*|*,expand,*|*,unquoted,*)
func_quote_portable $_G_quote_expand "$2"
func_quote_arg_result=$func_quote_portable_result
func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
;;
*)
# Faster quote-for-eval for some shells.
func_quotefast_eval "$2"
func_quote_arg_result=$func_quotefast_eval_result
;;
esac
}
# func_quote MODEs ARGs...
# ------------------------
# Quote all ARGs to be evaled later and join them into single command. See
# func_quote_arg's description for more info.
func_quote ()
{
$debug_cmd
_G_func_quote_mode=$1 ; shift
func_quote_result=
while test 0 -lt $#; do
func_quote_arg "$_G_func_quote_mode" "$1"
if test -n "$func_quote_result"; then
func_append func_quote_result " $func_quote_arg_result"
else
func_append func_quote_result "$func_quote_arg_result"
fi
shift
done
}
# func_stripname PREFIX SUFFIX NAME
# ---------------------------------
# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
# PREFIX and SUFFIX must not contain globbing or regex special
# characters, hashes, percent signs, but SUFFIX may contain a leading
# dot (in which case that matches only a dot).
if test yes = "$_G_HAVE_XSI_OPS"; then
eval 'func_stripname ()
{
$debug_cmd
# pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
# positional parameters, so assign one to ordinary variable first.
func_stripname_result=$3
func_stripname_result=${func_stripname_result#"$1"}
func_stripname_result=${func_stripname_result%"$2"}
}'
else
func_stripname ()
{
$debug_cmd
case $2 in
.*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
esac
}
fi
# func_show_eval CMD [FAIL_EXP]
# -----------------------------
# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
# is given, then evaluate it.
func_show_eval ()
{
$debug_cmd
_G_cmd=$1
_G_fail_exp=${2-':'}
func_quote_arg pretty,expand "$_G_cmd"
eval "func_notquiet $func_quote_arg_result"
$opt_dry_run || {
eval "$_G_cmd"
_G_status=$?
if test 0 -ne "$_G_status"; then
eval "(exit $_G_status); $_G_fail_exp"
fi
}
}
# func_show_eval_locale CMD [FAIL_EXP]
# ------------------------------------
# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
# is given, then evaluate it. Use the saved locale for evaluation.
func_show_eval_locale ()
{
$debug_cmd
_G_cmd=$1
_G_fail_exp=${2-':'}
$opt_quiet || {
func_quote_arg expand,pretty "$_G_cmd"
eval "func_echo $func_quote_arg_result"
}
$opt_dry_run || {
eval "$_G_user_locale
$_G_cmd"
_G_status=$?
eval "$_G_safe_locale"
if test 0 -ne "$_G_status"; then
eval "(exit $_G_status); $_G_fail_exp"
fi
}
}
# func_tr_sh
# ----------
# Turn $1 into a string suitable for a shell variable name.
# Result is stored in $func_tr_sh_result. All characters
# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
# if $1 begins with a digit, a '_' is prepended as well.
func_tr_sh ()
{
$debug_cmd
case $1 in
[0-9]* | *[!a-zA-Z0-9_]*)
func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
;;
* )
func_tr_sh_result=$1
;;
esac
}
# func_verbose ARG...
# -------------------
# Echo program name prefixed message in verbose mode only.
func_verbose ()
{
$debug_cmd
$opt_verbose && func_echo "$*"
:
}
# func_warn_and_continue ARG...
# -----------------------------
# Echo program name prefixed warning message to standard error.
func_warn_and_continue ()
{
$debug_cmd
$require_term_colors
func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
}
# func_warning CATEGORY ARG...
# ----------------------------
# Echo program name prefixed warning message to standard error. Warning
# messages can be filtered according to CATEGORY, where this function
# elides messages where CATEGORY is not listed in the global variable
# 'opt_warning_types'.
func_warning ()
{
$debug_cmd
# CATEGORY must be in the warning_categories list!
case " $warning_categories " in
*" $1 "*) ;;
*) func_internal_error "invalid warning category '$1'" ;;
esac
_G_category=$1
shift
case " $opt_warning_types " in
*" $_G_category "*) $warning_func ${1+"$@"} ;;
esac
}
# func_sort_ver VER1 VER2
# -----------------------
# 'sort -V' is not generally available.
# Note this deviates from the version comparison in automake
# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
# but this should suffice as we won't be specifying old
# version formats or redundant trailing .0 in bootstrap.conf.
# If we did want full compatibility then we should probably
# use m4_version_compare from autoconf.
func_sort_ver ()
{
$debug_cmd
printf '%s\n%s\n' "$1" "$2" \
| sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
}
# func_lt_ver PREV CURR
# ---------------------
# Return true if PREV and CURR are in the correct order according to
# func_sort_ver, otherwise false. Use it like this:
#
# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
func_lt_ver ()
{
$debug_cmd
test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
}
# Local variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
# time-stamp-time-zone: "UTC"
# End:
#! /bin/sh
# A portable, pluggable option parser for Bourne shell.
# Written by Gary V. Vaughan, 2010
# This is free software. There is NO warranty; not even for
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# Copyright (C) 2010-2019, 2021 Bootstrap Authors
#
# This file is dual licensed under the terms of the MIT license
# , and GPL version 2 or later
# . You must apply one of
# these licenses when using or redistributing this software or any of
# the files within it. See the URLs above, or the file `LICENSE`
# included in the Bootstrap distribution for the full license texts.
# Please report bugs or propose patches to:
#
# Set a version string for this script.
scriptversion=2019-02-19.15; # UTC
## ------ ##
## Usage. ##
## ------ ##
# This file is a library for parsing options in your shell scripts along
# with assorted other useful supporting features that you can make use
# of too.
#
# For the simplest scripts you might need only:
#
# #!/bin/sh
# . relative/path/to/funclib.sh
# . relative/path/to/options-parser
# scriptversion=1.0
# func_options ${1+"$@"}
# eval set dummy "$func_options_result"; shift
# ...rest of your script...
#
# In order for the '--version' option to work, you will need to have a
# suitably formatted comment like the one at the top of this file
# starting with '# Written by ' and ending with '# Copyright'.
#
# For '-h' and '--help' to work, you will also need a one line
# description of your script's purpose in a comment directly above the
# '# Written by ' line, like the one at the top of this file.
#
# The default options also support '--debug', which will turn on shell
# execution tracing (see the comment above debug_cmd below for another
# use), and '--verbose' and the func_verbose function to allow your script
# to display verbose messages only when your user has specified
# '--verbose'.
#
# After sourcing this file, you can plug in processing for additional
# options by amending the variables from the 'Configuration' section
# below, and following the instructions in the 'Option parsing'
# section further down.
## -------------- ##
## Configuration. ##
## -------------- ##
# You should override these variables in your script after sourcing this
# file so that they reflect the customisations you have added to the
# option parser.
# The usage line for option parsing errors and the start of '-h' and
# '--help' output messages. You can embed shell variables for delayed
# expansion at the time the message is displayed, but you will need to
# quote other shell meta-characters carefully to prevent them being
# expanded when the contents are evaled.
usage='$progpath [OPTION]...'
# Short help message in response to '-h' and '--help'. Add to this or
# override it after sourcing this library to reflect the full set of
# options your script accepts.
usage_message="\
--debug enable verbose shell tracing
-W, --warnings=CATEGORY
report the warnings falling in CATEGORY [all]
-v, --verbose verbosely report processing
--version print version information and exit
-h, --help print short or long help message and exit
"
# Additional text appended to 'usage_message' in response to '--help'.
long_help_message="
Warning categories include:
'all' show all warnings
'none' turn off all the warnings
'error' warnings are treated as fatal errors"
# Help message printed before fatal option parsing errors.
fatal_help="Try '\$progname --help' for more information."
## ------------------------- ##
## Hook function management. ##
## ------------------------- ##
# This section contains functions for adding, removing, and running hooks
# in the main code. A hook is just a list of function names that can be
# run in order later on.
# func_hookable FUNC_NAME
# -----------------------
# Declare that FUNC_NAME will run hooks added with
# 'func_add_hook FUNC_NAME ...'.
func_hookable ()
{
$debug_cmd
func_append hookable_fns " $1"
}
# func_add_hook FUNC_NAME HOOK_FUNC
# ---------------------------------
# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must
# first have been declared "hookable" by a call to 'func_hookable'.
func_add_hook ()
{
$debug_cmd
case " $hookable_fns " in
*" $1 "*) ;;
*) func_fatal_error "'$1' does not accept hook functions." ;;
esac
eval func_append ${1}_hooks '" $2"'
}
# func_remove_hook FUNC_NAME HOOK_FUNC
# ------------------------------------
# Remove HOOK_FUNC from the list of hook functions to be called by
# FUNC_NAME.
func_remove_hook ()
{
$debug_cmd
eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
}
# func_propagate_result FUNC_NAME_A FUNC_NAME_B
# ---------------------------------------------
# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
# *_result variable of FUNC_NAME_B.
func_propagate_result ()
{
$debug_cmd
func_propagate_result_result=:
if eval "test \"\${${1}_result+set}\" = set"
then
eval "${2}_result=\$${1}_result"
else
func_propagate_result_result=false
fi
}
# func_run_hooks FUNC_NAME [ARG]...
# ---------------------------------
# Run all hook functions registered to FUNC_NAME.
# It's assumed that the list of hook functions contains nothing more
# than a whitespace-delimited list of legal shell function names, and
# no effort is wasted trying to catch shell meta-characters or preserve
# whitespace.
func_run_hooks ()
{
$debug_cmd
_G_rc_run_hooks=false
case " $hookable_fns " in
*" $1 "*) ;;
*) func_fatal_error "'$1' does not support hook functions." ;;
esac
eval _G_hook_fns=\$$1_hooks; shift
for _G_hook in $_G_hook_fns; do
func_unset "${_G_hook}_result"
eval $_G_hook '${1+"$@"}'
func_propagate_result $_G_hook func_run_hooks
if $func_propagate_result_result; then
eval set dummy "$func_run_hooks_result"; shift
fi
done
}
## --------------- ##
## Option parsing. ##
## --------------- ##
# In order to add your own option parsing hooks, you must accept the
# full positional parameter list from your hook function. You may remove
# or edit any options that you action, and then pass back the remaining
# unprocessed options in '_result', escaped
# suitably for 'eval'.
#
# The '_result' variable is automatically unset
# before your hook gets called; for best performance, only set the
# *_result variable when necessary (i.e. don't call the 'func_quote'
# function unnecessarily because it can be an expensive operation on some
# machines).
#
# Like this:
#
# my_options_prep ()
# {
# $debug_cmd
#
# # Extend the existing usage message.
# usage_message=$usage_message'
# -s, --silent don'\''t print informational messages
# '
# # No change in '$@' (ignored completely by this hook). Leave
# # my_options_prep_result variable intact.
# }
# func_add_hook func_options_prep my_options_prep
#
#
# my_silent_option ()
# {
# $debug_cmd
#
# args_changed=false
#
# # Note that, for efficiency, we parse as many options as we can
# # recognise in a loop before passing the remainder back to the
# # caller on the first unrecognised argument we encounter.
# while test $# -gt 0; do
# opt=$1; shift
# case $opt in
# --silent|-s) opt_silent=:
# args_changed=:
# ;;
# # Separate non-argument short options:
# -s*) func_split_short_opt "$_G_opt"
# set dummy "$func_split_short_opt_name" \
# "-$func_split_short_opt_arg" ${1+"$@"}
# shift
# args_changed=:
# ;;
# *) # Make sure the first unrecognised option "$_G_opt"
# # is added back to "$@" in case we need it later,
# # if $args_changed was set to 'true'.
# set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
# esac
# done
#
# # Only call 'func_quote' here if we processed at least one argument.
# if $args_changed; then
# func_quote eval ${1+"$@"}
# my_silent_option_result=$func_quote_result
# fi
# }
# func_add_hook func_parse_options my_silent_option
#
#
# my_option_validation ()
# {
# $debug_cmd
#
# $opt_silent && $opt_verbose && func_fatal_help "\
# '--silent' and '--verbose' options are mutually exclusive."
# }
# func_add_hook func_validate_options my_option_validation
#
# You'll also need to manually amend $usage_message to reflect the extra
# options you parse. It's preferable to append if you can, so that
# multiple option parsing hooks can be added safely.
# func_options_finish [ARG]...
# ----------------------------
# Finishing the option parse loop (call 'func_options' hooks ATM).
func_options_finish ()
{
$debug_cmd
func_run_hooks func_options ${1+"$@"}
func_propagate_result func_run_hooks func_options_finish
}
# func_options [ARG]...
# ---------------------
# All the functions called inside func_options are hookable. See the
# individual implementations for details.
func_hookable func_options
func_options ()
{
$debug_cmd
_G_options_quoted=false
for my_func in options_prep parse_options validate_options options_finish
do
func_unset func_${my_func}_result
func_unset func_run_hooks_result
eval func_$my_func '${1+"$@"}'
func_propagate_result func_$my_func func_options
if $func_propagate_result_result; then
eval set dummy "$func_options_result"; shift
_G_options_quoted=:
fi
done
$_G_options_quoted || {
# As we (func_options) are top-level options-parser function and
# nobody quoted "$@" for us yet, we need to do it explicitly for
# caller.
func_quote eval ${1+"$@"}
func_options_result=$func_quote_result
}
}
# func_options_prep [ARG]...
# --------------------------
# All initialisations required before starting the option parse loop.
# Note that when calling hook functions, we pass through the list of
# positional parameters. If a hook function modifies that list, and
# needs to propagate that back to rest of this script, then the complete
# modified list must be put in 'func_run_hooks_result' before returning.
func_hookable func_options_prep
func_options_prep ()
{
$debug_cmd
# Option defaults:
opt_verbose=false
opt_warning_types=
func_run_hooks func_options_prep ${1+"$@"}
func_propagate_result func_run_hooks func_options_prep
}
# func_parse_options [ARG]...
# ---------------------------
# The main option parsing loop.
func_hookable func_parse_options
func_parse_options ()
{
$debug_cmd
_G_parse_options_requote=false
# this just eases exit handling
while test $# -gt 0; do
# Defer to hook functions for initial option parsing, so they
# get priority in the event of reusing an option name.
func_run_hooks func_parse_options ${1+"$@"}
func_propagate_result func_run_hooks func_parse_options
if $func_propagate_result_result; then
eval set dummy "$func_parse_options_result"; shift
# Even though we may have changed "$@", we passed the "$@" array
# down into the hook and it quoted it for us (because we are in
# this if-branch). No need to quote it again.
_G_parse_options_requote=false
fi
# Break out of the loop if we already parsed every option.
test $# -gt 0 || break
# We expect that one of the options parsed in this function matches
# and thus we remove _G_opt from "$@" and need to re-quote.
_G_match_parse_options=:
_G_opt=$1
shift
case $_G_opt in
--debug|-x) debug_cmd='set -x'
func_echo "enabling shell trace mode" >&2
$debug_cmd
;;
--no-warnings|--no-warning|--no-warn)
set dummy --warnings none ${1+"$@"}
shift
;;
--warnings|--warning|-W)
if test $# = 0 && func_missing_arg $_G_opt; then
_G_parse_options_requote=:
break
fi
case " $warning_categories $1" in
*" $1 "*)
# trailing space prevents matching last $1 above
func_append_uniq opt_warning_types " $1"
;;
*all)
opt_warning_types=$warning_categories
;;
*none)
opt_warning_types=none
warning_func=:
;;
*error)
opt_warning_types=$warning_categories
warning_func=func_fatal_error
;;
*)
func_fatal_error \
"unsupported warning category: '$1'"
;;
esac
shift
;;
--verbose|-v) opt_verbose=: ;;
--version) func_version ;;
-\?|-h) func_usage ;;
--help) func_help ;;
# Separate optargs to long options (plugins may need this):
--*=*) func_split_equals "$_G_opt"
set dummy "$func_split_equals_lhs" \
"$func_split_equals_rhs" ${1+"$@"}
shift
;;
# Separate optargs to short options:
-W*)
func_split_short_opt "$_G_opt"
set dummy "$func_split_short_opt_name" \
"$func_split_short_opt_arg" ${1+"$@"}
shift
;;
# Separate non-argument short options:
-\?*|-h*|-v*|-x*)
func_split_short_opt "$_G_opt"
set dummy "$func_split_short_opt_name" \
"-$func_split_short_opt_arg" ${1+"$@"}
shift
;;
--) _G_parse_options_requote=: ; break ;;
-*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
*) set dummy "$_G_opt" ${1+"$@"}; shift
_G_match_parse_options=false
break
;;
esac
if $_G_match_parse_options; then
_G_parse_options_requote=:
fi
done
if $_G_parse_options_requote; then
# save modified positional parameters for caller
func_quote eval ${1+"$@"}
func_parse_options_result=$func_quote_result
fi
}
# func_validate_options [ARG]...
# ------------------------------
# Perform any sanity checks on option settings and/or unconsumed
# arguments.
func_hookable func_validate_options
func_validate_options ()
{
$debug_cmd
# Display all warnings if -W was not given.
test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
func_run_hooks func_validate_options ${1+"$@"}
func_propagate_result func_run_hooks func_validate_options
# Bail if the options were screwed!
$exit_cmd $EXIT_FAILURE
}
## ----------------- ##
## Helper functions. ##
## ----------------- ##
# This section contains the helper functions used by the rest of the
# hookable option parser framework in ascii-betical order.
# func_fatal_help ARG...
# ----------------------
# Echo program name prefixed message to standard error, followed by
# a help hint, and exit.
func_fatal_help ()
{
$debug_cmd
eval \$ECHO \""Usage: $usage"\"
eval \$ECHO \""$fatal_help"\"
func_error ${1+"$@"}
exit $EXIT_FAILURE
}
# func_help
# ---------
# Echo long help message to standard output and exit.
func_help ()
{
$debug_cmd
func_usage_message
$ECHO "$long_help_message"
exit 0
}
# func_missing_arg ARGNAME
# ------------------------
# Echo program name prefixed message to standard error and set global
# exit_cmd.
func_missing_arg ()
{
$debug_cmd
func_error "Missing argument for '$1'."
exit_cmd=exit
}
# func_split_equals STRING
# ------------------------
# Set func_split_equals_lhs and func_split_equals_rhs shell variables
# after splitting STRING at the '=' sign.
test -z "$_G_HAVE_XSI_OPS" \
&& (eval 'x=a/b/c;
test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
&& _G_HAVE_XSI_OPS=yes
if test yes = "$_G_HAVE_XSI_OPS"
then
# This is an XSI compatible shell, allowing a faster implementation...
eval 'func_split_equals ()
{
$debug_cmd
func_split_equals_lhs=${1%%=*}
func_split_equals_rhs=${1#*=}
if test "x$func_split_equals_lhs" = "x$1"; then
func_split_equals_rhs=
fi
}'
else
# ...otherwise fall back to using expr, which is often a shell builtin.
func_split_equals ()
{
$debug_cmd
func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
func_split_equals_rhs=
test "x$func_split_equals_lhs=" = "x$1" \
|| func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
}
fi #func_split_equals
# func_split_short_opt SHORTOPT
# -----------------------------
# Set func_split_short_opt_name and func_split_short_opt_arg shell
# variables after splitting SHORTOPT after the 2nd character.
if test yes = "$_G_HAVE_XSI_OPS"
then
# This is an XSI compatible shell, allowing a faster implementation...
eval 'func_split_short_opt ()
{
$debug_cmd
func_split_short_opt_arg=${1#??}
func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
}'
else
# ...otherwise fall back to using expr, which is often a shell builtin.
func_split_short_opt ()
{
$debug_cmd
func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
}
fi #func_split_short_opt
# func_usage
# ----------
# Echo short help message to standard output and exit.
func_usage ()
{
$debug_cmd
func_usage_message
$ECHO "Run '$progname --help |${PAGER-more}' for full usage"
exit 0
}
# func_usage_message
# ------------------
# Echo short help message to standard output.
func_usage_message ()
{
$debug_cmd
eval \$ECHO \""Usage: $usage"\"
echo
$SED -n 's|^# ||
/^Written by/{
x;p;x
}
h
/^Written by/q' < "$progpath"
echo
eval \$ECHO \""$usage_message"\"
}
# func_version
# ------------
# Echo version message to standard output and exit.
# The version message is extracted from the calling file's header
# comments, with leading '# ' stripped:
# 1. First display the progname and version
# 2. Followed by the header comment line matching /^# Written by /
# 3. Then a blank line followed by the first following line matching
# /^# Copyright /
# 4. Immediately followed by any lines between the previous matches,
# except lines preceding the intervening completely blank line.
# For example, see the header comments of this file.
func_version ()
{
$debug_cmd
printf '%s\n' "$progname $scriptversion"
$SED -n '
/^# Written by /!b
s|^# ||; p; n
:fwd2blnk
/./ {
n
b fwd2blnk
}
p; n
:holdwrnt
s|^# ||
s|^# *$||
/^Copyright /!{
/./H
n
b holdwrnt
}
s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
G
s|\(\n\)\n*|\1|g
p; q' < "$progpath"
exit $?
}
# Local variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
# time-stamp-time-zone: "UTC"
# End:
# Set a version string.
scriptversion='(GNU libtool) 2.4.7'
# func_echo ARG...
# ----------------
# Libtool also displays the current mode in messages, so override
# funclib.sh func_echo with this custom definition.
func_echo ()
{
$debug_cmd
_G_message=$*
func_echo_IFS=$IFS
IFS=$nl
for _G_line in $_G_message; do
IFS=$func_echo_IFS
$ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
done
IFS=$func_echo_IFS
}
# func_warning ARG...
# -------------------
# Libtool warnings are not categorized, so override funclib.sh
# func_warning with this simpler definition.
func_warning ()
{
$debug_cmd
$warning_func ${1+"$@"}
}
## ---------------- ##
## Options parsing. ##
## ---------------- ##
# Hook in the functions to make sure our own options are parsed during
# the option parsing loop.
usage='$progpath [OPTION]... [MODE-ARG]...'
# Short help message in response to '-h'.
usage_message="Options:
--config show all configuration variables
--debug enable verbose shell tracing
-n, --dry-run display commands without modifying any files
--features display basic configuration information and exit
--mode=MODE use operation mode MODE
--no-warnings equivalent to '-Wnone'
--preserve-dup-deps don't remove duplicate dependency libraries
--quiet, --silent don't print informational messages
--tag=TAG use configuration variables from tag TAG
-v, --verbose print more informational messages than default
--version print version information
-W, --warnings=CATEGORY report the warnings falling in CATEGORY [all]
-h, --help, --help-all print short, long, or detailed help message
"
# Additional text appended to 'usage_message' in response to '--help'.
func_help ()
{
$debug_cmd
func_usage_message
$ECHO "$long_help_message
MODE must be one of the following:
clean remove files from the build directory
compile compile a source file into a libtool object
execute automatically set library path, then run a program
finish complete the installation of libtool libraries
install install libraries or executables
link create a library or an executable
uninstall remove libraries from an installed directory
MODE-ARGS vary depending on the MODE. When passed as first option,
'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
Try '$progname --help --mode=MODE' for a more detailed description of MODE.
When reporting a bug, please describe a test case to reproduce it and
include the following information:
host-triplet: $host
shell: $SHELL
compiler: $LTCC
compiler flags: $LTCFLAGS
linker: $LD (gnu? $with_gnu_ld)
version: $progname $scriptversion Debian-2.4.7-7~deb12u1
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
Report bugs to .
GNU libtool home page: .
General help using GNU software: ."
exit 0
}
# func_lo2o OBJECT-NAME
# ---------------------
# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
# object suffix.
lo2o=s/\\.lo\$/.$objext/
o2lo=s/\\.$objext\$/.lo/
if test yes = "$_G_HAVE_XSI_OPS"; then
eval 'func_lo2o ()
{
case $1 in
*.lo) func_lo2o_result=${1%.lo}.$objext ;;
* ) func_lo2o_result=$1 ;;
esac
}'
# func_xform LIBOBJ-OR-SOURCE
# ---------------------------
# Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
# suffix to a '.lo' libtool-object suffix.
eval 'func_xform ()
{
func_xform_result=${1%.*}.lo
}'
else
# ...otherwise fall back to using sed.
func_lo2o ()
{
func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
}
func_xform ()
{
func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
}
fi
# func_fatal_configuration ARG...
# -------------------------------
# Echo program name prefixed message to standard error, followed by
# a configuration failure hint, and exit.
func_fatal_configuration ()
{
func_fatal_error ${1+"$@"} \
"See the $PACKAGE documentation for more information." \
"Fatal configuration error."
}
# func_config
# -----------
# Display the configuration for all the tags in this script.
func_config ()
{
re_begincf='^# ### BEGIN LIBTOOL'
re_endcf='^# ### END LIBTOOL'
# Default configuration.
$SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
# Now print the configurations for the tags.
for tagname in $taglist; do
$SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
done
exit $?
}
# func_features
# -------------
# Display the features supported by this script.
func_features ()
{
echo "host: $host"
if test yes = "$build_libtool_libs"; then
echo "enable shared libraries"
else
echo "disable shared libraries"
fi
if test yes = "$build_old_libs"; then
echo "enable static libraries"
else
echo "disable static libraries"
fi
exit $?
}
# func_enable_tag TAGNAME
# -----------------------
# Verify that TAGNAME is valid, and either flag an error and exit, or
# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
# variable here.
func_enable_tag ()
{
# Global variable:
tagname=$1
re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
sed_extractcf=/$re_begincf/,/$re_endcf/p
# Validate tagname.
case $tagname in
*[!-_A-Za-z0-9,/]*)
func_fatal_error "invalid tag name: $tagname"
;;
esac
# Don't test for the "default" C tag, as we know it's
# there but not specially marked.
case $tagname in
CC) ;;
*)
if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
taglist="$taglist $tagname"
# Evaluate the configuration. Be careful to quote the path
# and the sed script, to avoid splitting on whitespace, but
# also don't use non-portable quotes within backquotes within
# quotes we have to do it in 2 steps:
extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
eval "$extractedcf"
else
func_error "ignoring unknown tag $tagname"
fi
;;
esac
}
# func_check_version_match
# ------------------------
# Ensure that we are using m4 macros, and libtool script from the same
# release of libtool.
func_check_version_match ()
{
if test "$package_revision" != "$macro_revision"; then
if test "$VERSION" != "$macro_version"; then
if test -z "$macro_version"; then
cat >&2 <<_LT_EOF
$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
$progname: definition of this LT_INIT comes from an older release.
$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
$progname: and run autoconf again.
_LT_EOF
else
cat >&2 <<_LT_EOF
$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
$progname: and run autoconf again.
_LT_EOF
fi
else
cat >&2 <<_LT_EOF
$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
$progname: but the definition of this LT_INIT comes from revision $macro_revision.
$progname: You should recreate aclocal.m4 with macros from revision $package_revision
$progname: of $PACKAGE $VERSION and run autoconf again.
_LT_EOF
fi
exit $EXIT_MISMATCH
fi
}
# libtool_options_prep [ARG]...
# -----------------------------
# Preparation for options parsed by libtool.
libtool_options_prep ()
{
$debug_mode
# Option defaults:
opt_config=false
opt_dlopen=
opt_dry_run=false
opt_help=false
opt_mode=
opt_preserve_dup_deps=false
opt_quiet=false
nonopt=
preserve_args=
_G_rc_lt_options_prep=:
_G_rc_lt_options_prep=:
# Shorthand for --mode=foo, only valid as the first argument
case $1 in
clean|clea|cle|cl)
shift; set dummy --mode clean ${1+"$@"}; shift
;;
compile|compil|compi|comp|com|co|c)
shift; set dummy --mode compile ${1+"$@"}; shift
;;
execute|execut|execu|exec|exe|ex|e)
shift; set dummy --mode execute ${1+"$@"}; shift
;;
finish|finis|fini|fin|fi|f)
shift; set dummy --mode finish ${1+"$@"}; shift
;;
install|instal|insta|inst|ins|in|i)
shift; set dummy --mode install ${1+"$@"}; shift
;;
link|lin|li|l)
shift; set dummy --mode link ${1+"$@"}; shift
;;
uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
shift; set dummy --mode uninstall ${1+"$@"}; shift
;;
*)
_G_rc_lt_options_prep=false
;;
esac
if $_G_rc_lt_options_prep; then
# Pass back the list of options.
func_quote eval ${1+"$@"}
libtool_options_prep_result=$func_quote_result
fi
}
func_add_hook func_options_prep libtool_options_prep
# libtool_parse_options [ARG]...
# ---------------------------------
# Provide handling for libtool specific options.
libtool_parse_options ()
{
$debug_cmd
_G_rc_lt_parse_options=false
# Perform our own loop to consume as many options as possible in
# each iteration.
while test $# -gt 0; do
_G_match_lt_parse_options=:
_G_opt=$1
shift
case $_G_opt in
--dry-run|--dryrun|-n)
opt_dry_run=:
;;
--config) func_config ;;
--dlopen|-dlopen)
opt_dlopen="${opt_dlopen+$opt_dlopen
}$1"
shift
;;
--preserve-dup-deps)
opt_preserve_dup_deps=: ;;
--features) func_features ;;
--finish) set dummy --mode finish ${1+"$@"}; shift ;;
--help) opt_help=: ;;
--help-all) opt_help=': help-all' ;;
--mode) test $# = 0 && func_missing_arg $_G_opt && break
opt_mode=$1
case $1 in
# Valid mode arguments:
clean|compile|execute|finish|install|link|relink|uninstall) ;;
# Catch anything else as an error
*) func_error "invalid argument for $_G_opt"
exit_cmd=exit
break
;;
esac
shift
;;
--no-silent|--no-quiet)
opt_quiet=false
func_append preserve_args " $_G_opt"
;;
--no-warnings|--no-warning|--no-warn)
opt_warning=false
func_append preserve_args " $_G_opt"
;;
--no-verbose)
opt_verbose=false
func_append preserve_args " $_G_opt"
;;
--silent|--quiet)
opt_quiet=:
opt_verbose=false
func_append preserve_args " $_G_opt"
;;
--tag) test $# = 0 && func_missing_arg $_G_opt && break
opt_tag=$1
func_append preserve_args " $_G_opt $1"
func_enable_tag "$1"
shift
;;
--verbose|-v) opt_quiet=false
opt_verbose=:
func_append preserve_args " $_G_opt"
;;
# An option not handled by this hook function:
*) set dummy "$_G_opt" ${1+"$@"} ; shift
_G_match_lt_parse_options=false
break
;;
esac
$_G_match_lt_parse_options && _G_rc_lt_parse_options=:
done
if $_G_rc_lt_parse_options; then
# save modified positional parameters for caller
func_quote eval ${1+"$@"}
libtool_parse_options_result=$func_quote_result
fi
}
func_add_hook func_parse_options libtool_parse_options
# libtool_validate_options [ARG]...
# ---------------------------------
# Perform any sanity checks on option settings and/or unconsumed
# arguments.
libtool_validate_options ()
{
# save first non-option argument
if test 0 -lt $#; then
nonopt=$1
shift
fi
# preserve --debug
test : = "$debug_cmd" || func_append preserve_args " --debug"
case $host in
# Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
# see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
*cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
# don't eliminate duplications in $postdeps and $predeps
opt_duplicate_compiler_generated_deps=:
;;
*)
opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
;;
esac
$opt_help || {
# Sanity checks first:
func_check_version_match
test yes != "$build_libtool_libs" \
&& test yes != "$build_old_libs" \
&& func_fatal_configuration "not configured to build any kind of library"
# Darwin sucks
eval std_shrext=\"$shrext_cmds\"
# Only execute mode is allowed to have -dlopen flags.
if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
func_error "unrecognized option '-dlopen'"
$ECHO "$help" 1>&2
exit $EXIT_FAILURE
fi
# Change the help message to a mode-specific one.
generic_help=$help
help="Try '$progname --help --mode=$opt_mode' for more information."
}
# Pass back the unparsed argument list
func_quote eval ${1+"$@"}
libtool_validate_options_result=$func_quote_result
}
func_add_hook func_validate_options libtool_validate_options
# Process options as early as possible so that --help and --version
# can return quickly.
func_options ${1+"$@"}
eval set dummy "$func_options_result"; shift
## ----------- ##
## Main. ##
## ----------- ##
magic='%%%MAGIC variable%%%'
magic_exe='%%%MAGIC EXE variable%%%'
# Global variables.
extracted_archives=
extracted_serial=0
# If this variable is set in any of the actions, the command in it
# will be execed at the end. This prevents here-documents from being
# left over by shells.
exec_cmd=
# A function that is used when there is no print builtin or printf.
func_fallback_echo ()
{
eval 'cat <<_LTECHO_EOF
$1
_LTECHO_EOF'
}
# func_generated_by_libtool
# True iff stdin has been generated by Libtool. This function is only
# a basic sanity check; it will hardly flush out determined imposters.
func_generated_by_libtool_p ()
{
$GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
}
# func_lalib_p file
# True iff FILE is a libtool '.la' library or '.lo' object file.
# This function is only a basic sanity check; it will hardly flush out
# determined imposters.
func_lalib_p ()
{
test -f "$1" &&
$SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
}
# func_lalib_unsafe_p file
# True iff FILE is a libtool '.la' library or '.lo' object file.
# This function implements the same check as func_lalib_p without
# resorting to external programs. To this end, it redirects stdin and
# closes it afterwards, without saving the original file descriptor.
# As a safety measure, use it only where a negative result would be
# fatal anyway. Works if 'file' does not exist.
func_lalib_unsafe_p ()
{
lalib_p=no
if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
for lalib_p_l in 1 2 3 4
do
read lalib_p_line
case $lalib_p_line in
\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
esac
done
exec 0<&5 5<&-
fi
test yes = "$lalib_p"
}
# func_ltwrapper_script_p file
# True iff FILE is a libtool wrapper script
# This function is only a basic sanity check; it will hardly flush out
# determined imposters.
func_ltwrapper_script_p ()
{
test -f "$1" &&
$lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
}
# func_ltwrapper_executable_p file
# True iff FILE is a libtool wrapper executable
# This function is only a basic sanity check; it will hardly flush out
# determined imposters.
func_ltwrapper_executable_p ()
{
func_ltwrapper_exec_suffix=
case $1 in
*.exe) ;;
*) func_ltwrapper_exec_suffix=.exe ;;
esac
$GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
}
# func_ltwrapper_scriptname file
# Assumes file is an ltwrapper_executable
# uses $file to determine the appropriate filename for a
# temporary ltwrapper_script.
func_ltwrapper_scriptname ()
{
func_dirname_and_basename "$1" "" "."
func_stripname '' '.exe' "$func_basename_result"
func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
}
# func_ltwrapper_p file
# True iff FILE is a libtool wrapper script or wrapper executable
# This function is only a basic sanity check; it will hardly flush out
# determined imposters.
func_ltwrapper_p ()
{
func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
}
# func_execute_cmds commands fail_cmd
# Execute tilde-delimited COMMANDS.
# If FAIL_CMD is given, eval that upon failure.
# FAIL_CMD may read-access the current command in variable CMD!
func_execute_cmds ()
{
$debug_cmd
save_ifs=$IFS; IFS='~'
for cmd in $1; do
IFS=$sp$nl
eval cmd=\"$cmd\"
IFS=$save_ifs
func_show_eval "$cmd" "${2-:}"
done
IFS=$save_ifs
}
# func_source file
# Source FILE, adding directory component if necessary.
# Note that it is not necessary on cygwin/mingw to append a dot to
# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
# behavior happens only for exec(3), not for open(2)! Also, sourcing
# 'FILE.' does not work on cygwin managed mounts.
func_source ()
{
$debug_cmd
case $1 in
*/* | *\\*) . "$1" ;;
*) . "./$1" ;;
esac
}
# func_resolve_sysroot PATH
# Replace a leading = in PATH with a sysroot. Store the result into
# func_resolve_sysroot_result
func_resolve_sysroot ()
{
func_resolve_sysroot_result=$1
case $func_resolve_sysroot_result in
=*)
func_stripname '=' '' "$func_resolve_sysroot_result"
func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
;;
esac
}
# func_replace_sysroot PATH
# If PATH begins with the sysroot, replace it with = and
# store the result into func_replace_sysroot_result.
func_replace_sysroot ()
{
case $lt_sysroot:$1 in
?*:"$lt_sysroot"*)
func_stripname "$lt_sysroot" '' "$1"
func_replace_sysroot_result='='$func_stripname_result
;;
*)
# Including no sysroot.
func_replace_sysroot_result=$1
;;
esac
}
# func_infer_tag arg
# Infer tagged configuration to use if any are available and
# if one wasn't chosen via the "--tag" command line option.
# Only attempt this if the compiler in the base compile
# command doesn't match the default compiler.
# arg is usually of the form 'gcc ...'
func_infer_tag ()
{
$debug_cmd
if test -n "$available_tags" && test -z "$tagname"; then
CC_quoted=
for arg in $CC; do
func_append_quoted CC_quoted "$arg"
done
CC_expanded=`func_echo_all $CC`
CC_quoted_expanded=`func_echo_all $CC_quoted`
case $@ in
# Blanks in the command may have been stripped by the calling shell,
# but not from the CC environment variable when configure was run.
" $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
" $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
# Blanks at the start of $base_compile will cause this to fail
# if we don't check for them as well.
*)
for z in $available_tags; do
if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
# Evaluate the configuration.
eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
CC_quoted=
for arg in $CC; do
# Double-quote args containing other shell metacharacters.
func_append_quoted CC_quoted "$arg"
done
CC_expanded=`func_echo_all $CC`
CC_quoted_expanded=`func_echo_all $CC_quoted`
case "$@ " in
" $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
" $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
# The compiler in the base compile command matches
# the one in the tagged configuration.
# Assume this is the tagged configuration we want.
tagname=$z
break
;;
esac
fi
done
# If $tagname still isn't set, then no tagged configuration
# was found and let the user know that the "--tag" command
# line option must be used.
if test -z "$tagname"; then
func_echo "unable to infer tagged configuration"
func_fatal_error "specify a tag with '--tag'"
# else
# func_verbose "using $tagname tagged configuration"
fi
;;
esac
fi
}
# func_write_libtool_object output_name pic_name nonpic_name
# Create a libtool object file (analogous to a ".la" file),
# but don't create it if we're doing a dry run.
func_write_libtool_object ()
{
write_libobj=$1
if test yes = "$build_libtool_libs"; then
write_lobj=\'$2\'
else
write_lobj=none
fi
if test yes = "$build_old_libs"; then
write_oldobj=\'$3\'
else
write_oldobj=none
fi
$opt_dry_run || {
cat >${write_libobj}T </dev/null`
if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
$SED -e "$sed_naive_backslashify"`
else
func_convert_core_file_wine_to_w32_result=
fi
fi
}
# end: func_convert_core_file_wine_to_w32
# func_convert_core_path_wine_to_w32 ARG
# Helper function used by path conversion functions when $build is *nix, and
# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
# configured wine environment available, with the winepath program in $build's
# $PATH. Assumes ARG has no leading or trailing path separator characters.
#
# ARG is path to be converted from $build format to win32.
# Result is available in $func_convert_core_path_wine_to_w32_result.
# Unconvertible file (directory) names in ARG are skipped; if no directory names
# are convertible, then the result may be empty.
func_convert_core_path_wine_to_w32 ()
{
$debug_cmd
# unfortunately, winepath doesn't convert paths, only file names
func_convert_core_path_wine_to_w32_result=
if test -n "$1"; then
oldIFS=$IFS
IFS=:
for func_convert_core_path_wine_to_w32_f in $1; do
IFS=$oldIFS
func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
if test -n "$func_convert_core_file_wine_to_w32_result"; then
if test -z "$func_convert_core_path_wine_to_w32_result"; then
func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
else
func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
fi
fi
done
IFS=$oldIFS
fi
}
# end: func_convert_core_path_wine_to_w32
# func_cygpath ARGS...
# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
# (2), returns the Cygwin file name or path in func_cygpath_result (input
# file name or path is assumed to be in w32 format, as previously converted
# from $build's *nix or MSYS format). In case (3), returns the w32 file name
# or path in func_cygpath_result (input file name or path is assumed to be in
# Cygwin format). Returns an empty string on error.
#
# ARGS are passed to cygpath, with the last one being the file name or path to
# be converted.
#
# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
# environment variable; do not put it in $PATH.
func_cygpath ()
{
$debug_cmd
if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
if test "$?" -ne 0; then
# on failure, ensure result is empty
func_cygpath_result=
fi
else
func_cygpath_result=
func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
fi
}
#end: func_cygpath
# func_convert_core_msys_to_w32 ARG
# Convert file name or path ARG from MSYS format to w32 format. Return
# result in func_convert_core_msys_to_w32_result.
func_convert_core_msys_to_w32 ()
{
$debug_cmd
# awkward: cmd appends spaces to result
func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
$SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
}
#end: func_convert_core_msys_to_w32
# func_convert_file_check ARG1 ARG2
# Verify that ARG1 (a file name in $build format) was converted to $host
# format in ARG2. Otherwise, emit an error message, but continue (resetting
# func_to_host_file_result to ARG1).
func_convert_file_check ()
{
$debug_cmd
if test -z "$2" && test -n "$1"; then
func_error "Could not determine host file name corresponding to"
func_error " '$1'"
func_error "Continuing, but uninstalled executables may not work."
# Fallback:
func_to_host_file_result=$1
fi
}
# end func_convert_file_check
# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
# Verify that FROM_PATH (a path in $build format) was converted to $host
# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
# func_to_host_file_result to a simplistic fallback value (see below).
func_convert_path_check ()
{
$debug_cmd
if test -z "$4" && test -n "$3"; then
func_error "Could not determine the host path corresponding to"
func_error " '$3'"
func_error "Continuing, but uninstalled executables may not work."
# Fallback. This is a deliberately simplistic "conversion" and
# should not be "improved". See libtool.info.
if test "x$1" != "x$2"; then
lt_replace_pathsep_chars="s|$1|$2|g"
func_to_host_path_result=`echo "$3" |
$SED -e "$lt_replace_pathsep_chars"`
else
func_to_host_path_result=$3
fi
fi
}
# end func_convert_path_check
# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
# and appending REPL if ORIG matches BACKPAT.
func_convert_path_front_back_pathsep ()
{
$debug_cmd
case $4 in
$1 ) func_to_host_path_result=$3$func_to_host_path_result
;;
esac
case $4 in
$2 ) func_append func_to_host_path_result "$3"
;;
esac
}
# end func_convert_path_front_back_pathsep
##################################################
# $build to $host FILE NAME CONVERSION FUNCTIONS #
##################################################
# invoked via '$to_host_file_cmd ARG'
#
# In each case, ARG is the path to be converted from $build to $host format.
# Result will be available in $func_to_host_file_result.
# func_to_host_file ARG
# Converts the file name ARG from $build format to $host format. Return result
# in func_to_host_file_result.
func_to_host_file ()
{
$debug_cmd
$to_host_file_cmd "$1"
}
# end func_to_host_file
# func_to_tool_file ARG LAZY
# converts the file name ARG from $build format to toolchain format. Return
# result in func_to_tool_file_result. If the conversion in use is listed
# in (the comma separated) LAZY, no conversion takes place.
func_to_tool_file ()
{
$debug_cmd
case ,$2, in
*,"$to_tool_file_cmd",*)
func_to_tool_file_result=$1
;;
*)
$to_tool_file_cmd "$1"
func_to_tool_file_result=$func_to_host_file_result
;;
esac
}
# end func_to_tool_file
# func_convert_file_noop ARG
# Copy ARG to func_to_host_file_result.
func_convert_file_noop ()
{
func_to_host_file_result=$1
}
# end func_convert_file_noop
# func_convert_file_msys_to_w32 ARG
# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
# conversion to w32 is not available inside the cwrapper. Returns result in
# func_to_host_file_result.
func_convert_file_msys_to_w32 ()
{
$debug_cmd
func_to_host_file_result=$1
if test -n "$1"; then
func_convert_core_msys_to_w32 "$1"
func_to_host_file_result=$func_convert_core_msys_to_w32_result
fi
func_convert_file_check "$1" "$func_to_host_file_result"
}
# end func_convert_file_msys_to_w32
# func_convert_file_cygwin_to_w32 ARG
# Convert file name ARG from Cygwin to w32 format. Returns result in
# func_to_host_file_result.
func_convert_file_cygwin_to_w32 ()
{
$debug_cmd
func_to_host_file_result=$1
if test -n "$1"; then
# because $build is cygwin, we call "the" cygpath in $PATH; no need to use
# LT_CYGPATH in this case.
func_to_host_file_result=`cygpath -m "$1"`
fi
func_convert_file_check "$1" "$func_to_host_file_result"
}
# end func_convert_file_cygwin_to_w32
# func_convert_file_nix_to_w32 ARG
# Convert file name ARG from *nix to w32 format. Requires a wine environment
# and a working winepath. Returns result in func_to_host_file_result.
func_convert_file_nix_to_w32 ()
{
$debug_cmd
func_to_host_file_result=$1
if test -n "$1"; then
func_convert_core_file_wine_to_w32 "$1"
func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
fi
func_convert_file_check "$1" "$func_to_host_file_result"
}
# end func_convert_file_nix_to_w32
# func_convert_file_msys_to_cygwin ARG
# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
# Returns result in func_to_host_file_result.
func_convert_file_msys_to_cygwin ()
{
$debug_cmd
func_to_host_file_result=$1
if test -n "$1"; then
func_convert_core_msys_to_w32 "$1"
func_cygpath -u "$func_convert_core_msys_to_w32_result"
func_to_host_file_result=$func_cygpath_result
fi
func_convert_file_check "$1" "$func_to_host_file_result"
}
# end func_convert_file_msys_to_cygwin
# func_convert_file_nix_to_cygwin ARG
# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
# in a wine environment, working winepath, and LT_CYGPATH set. Returns result
# in func_to_host_file_result.
func_convert_file_nix_to_cygwin ()
{
$debug_cmd
func_to_host_file_result=$1
if test -n "$1"; then
# convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
func_convert_core_file_wine_to_w32 "$1"
func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
func_to_host_file_result=$func_cygpath_result
fi
func_convert_file_check "$1" "$func_to_host_file_result"
}
# end func_convert_file_nix_to_cygwin
#############################################
# $build to $host PATH CONVERSION FUNCTIONS #
#############################################
# invoked via '$to_host_path_cmd ARG'
#
# In each case, ARG is the path to be converted from $build to $host format.
# The result will be available in $func_to_host_path_result.
#
# Path separators are also converted from $build format to $host format. If
# ARG begins or ends with a path separator character, it is preserved (but
# converted to $host format) on output.
#
# All path conversion functions are named using the following convention:
# file name conversion function : func_convert_file_X_to_Y ()
# path conversion function : func_convert_path_X_to_Y ()
# where, for any given $build/$host combination the 'X_to_Y' value is the
# same. If conversion functions are added for new $build/$host combinations,
# the two new functions must follow this pattern, or func_init_to_host_path_cmd
# will break.
# func_init_to_host_path_cmd
# Ensures that function "pointer" variable $to_host_path_cmd is set to the
# appropriate value, based on the value of $to_host_file_cmd.
to_host_path_cmd=
func_init_to_host_path_cmd ()
{
$debug_cmd
if test -z "$to_host_path_cmd"; then
func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
to_host_path_cmd=func_convert_path_$func_stripname_result
fi
}
# func_to_host_path ARG
# Converts the path ARG from $build format to $host format. Return result
# in func_to_host_path_result.
func_to_host_path ()
{
$debug_cmd
func_init_to_host_path_cmd
$to_host_path_cmd "$1"
}
# end func_to_host_path
# func_convert_path_noop ARG
# Copy ARG to func_to_host_path_result.
func_convert_path_noop ()
{
func_to_host_path_result=$1
}
# end func_convert_path_noop
# func_convert_path_msys_to_w32 ARG
# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
# conversion to w32 is not available inside the cwrapper. Returns result in
# func_to_host_path_result.
func_convert_path_msys_to_w32 ()
{
$debug_cmd
func_to_host_path_result=$1
if test -n "$1"; then
# Remove leading and trailing path separator characters from ARG. MSYS
# behavior is inconsistent here; cygpath turns them into '.;' and ';.';
# and winepath ignores them completely.
func_stripname : : "$1"
func_to_host_path_tmp1=$func_stripname_result
func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
func_to_host_path_result=$func_convert_core_msys_to_w32_result
func_convert_path_check : ";" \
"$func_to_host_path_tmp1" "$func_to_host_path_result"
func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
fi
}
# end func_convert_path_msys_to_w32
# func_convert_path_cygwin_to_w32 ARG
# Convert path ARG from Cygwin to w32 format. Returns result in
# func_to_host_file_result.
func_convert_path_cygwin_to_w32 ()
{
$debug_cmd
func_to_host_path_result=$1
if test -n "$1"; then
# See func_convert_path_msys_to_w32:
func_stripname : : "$1"
func_to_host_path_tmp1=$func_stripname_result
func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
func_convert_path_check : ";" \
"$func_to_host_path_tmp1" "$func_to_host_path_result"
func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
fi
}
# end func_convert_path_cygwin_to_w32
# func_convert_path_nix_to_w32 ARG
# Convert path ARG from *nix to w32 format. Requires a wine environment and
# a working winepath. Returns result in func_to_host_file_result.
func_convert_path_nix_to_w32 ()
{
$debug_cmd
func_to_host_path_result=$1
if test -n "$1"; then
# See func_convert_path_msys_to_w32:
func_stripname : : "$1"
func_to_host_path_tmp1=$func_stripname_result
func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
func_convert_path_check : ";" \
"$func_to_host_path_tmp1" "$func_to_host_path_result"
func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
fi
}
# end func_convert_path_nix_to_w32
# func_convert_path_msys_to_cygwin ARG
# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
# Returns result in func_to_host_file_result.
func_convert_path_msys_to_cygwin ()
{
$debug_cmd
func_to_host_path_result=$1
if test -n "$1"; then
# See func_convert_path_msys_to_w32:
func_stripname : : "$1"
func_to_host_path_tmp1=$func_stripname_result
func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
func_to_host_path_result=$func_cygpath_result
func_convert_path_check : : \
"$func_to_host_path_tmp1" "$func_to_host_path_result"
func_convert_path_front_back_pathsep ":*" "*:" : "$1"
fi
}
# end func_convert_path_msys_to_cygwin
# func_convert_path_nix_to_cygwin ARG
# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
# a wine environment, working winepath, and LT_CYGPATH set. Returns result in
# func_to_host_file_result.
func_convert_path_nix_to_cygwin ()
{
$debug_cmd
func_to_host_path_result=$1
if test -n "$1"; then
# Remove leading and trailing path separator characters from
# ARG. msys behavior is inconsistent here, cygpath turns them
# into '.;' and ';.', and winepath ignores them completely.
func_stripname : : "$1"
func_to_host_path_tmp1=$func_stripname_result
func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
func_to_host_path_result=$func_cygpath_result
func_convert_path_check : : \
"$func_to_host_path_tmp1" "$func_to_host_path_result"
func_convert_path_front_back_pathsep ":*" "*:" : "$1"
fi
}
# end func_convert_path_nix_to_cygwin
# func_dll_def_p FILE
# True iff FILE is a Windows DLL '.def' file.
# Keep in sync with _LT_DLL_DEF_P in libtool.m4
func_dll_def_p ()
{
$debug_cmd
func_dll_def_p_tmp=`$SED -n \
-e 's/^[ ]*//' \
-e '/^\(;.*\)*$/d' \
-e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \
-e q \
"$1"`
test DEF = "$func_dll_def_p_tmp"
}
# func_mode_compile arg...
func_mode_compile ()
{
$debug_cmd
# Get the compilation command and the source file.
base_compile=
srcfile=$nonopt # always keep a non-empty value in "srcfile"
suppress_opt=yes
suppress_output=
arg_mode=normal
libobj=
later=
pie_flag=
for arg
do
case $arg_mode in
arg )
# do not "continue". Instead, add this to base_compile
lastarg=$arg
arg_mode=normal
;;
target )
libobj=$arg
arg_mode=normal
continue
;;
normal )
# Accept any command-line options.
case $arg in
-o)
test -n "$libobj" && \
func_fatal_error "you cannot specify '-o' more than once"
arg_mode=target
continue
;;
-pie | -fpie | -fPIE)
func_append pie_flag " $arg"
continue
;;
-shared | -static | -prefer-pic | -prefer-non-pic)
func_append later " $arg"
continue
;;
-no-suppress)
suppress_opt=no
continue
;;
-Xcompiler)
arg_mode=arg # the next one goes into the "base_compile" arg list
continue # The current "srcfile" will either be retained or
;; # replaced later. I would guess that would be a bug.
-Wc,*)
func_stripname '-Wc,' '' "$arg"
args=$func_stripname_result
lastarg=
save_ifs=$IFS; IFS=,
for arg in $args; do
IFS=$save_ifs
func_append_quoted lastarg "$arg"
done
IFS=$save_ifs
func_stripname ' ' '' "$lastarg"
lastarg=$func_stripname_result
# Add the arguments to base_compile.
func_append base_compile " $lastarg"
continue
;;
*)
# Accept the current argument as the source file.
# The previous "srcfile" becomes the current argument.
#
lastarg=$srcfile
srcfile=$arg
;;
esac # case $arg
;;
esac # case $arg_mode
# Aesthetically quote the previous argument.
func_append_quoted base_compile "$lastarg"
done # for arg
case $arg_mode in
arg)
func_fatal_error "you must specify an argument for -Xcompile"
;;
target)
func_fatal_error "you must specify a target with '-o'"
;;
*)
# Get the name of the library object.
test -z "$libobj" && {
func_basename "$srcfile"
libobj=$func_basename_result
}
;;
esac
# Recognize several different file suffixes.
# If the user specifies -o file.o, it is replaced with file.lo
case $libobj in
*.[cCFSifmso] | \
*.ada | *.adb | *.ads | *.asm | \
*.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
*.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
func_xform "$libobj"
libobj=$func_xform_result
;;
esac
case $libobj in
*.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
*)
func_fatal_error "cannot determine name of library object from '$libobj'"
;;
esac
func_infer_tag $base_compile
for arg in $later; do
case $arg in
-shared)
test yes = "$build_libtool_libs" \
|| func_fatal_configuration "cannot build a shared library"
build_old_libs=no
continue
;;
-static)
build_libtool_libs=no
build_old_libs=yes
continue
;;
-prefer-pic)
pic_mode=yes
continue
;;
-prefer-non-pic)
pic_mode=no
continue
;;
esac
done
func_quote_arg pretty "$libobj"
test "X$libobj" != "X$func_quote_arg_result" \
&& $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
&& func_warning "libobj name '$libobj' may not contain shell special characters."
func_dirname_and_basename "$obj" "/" ""
objname=$func_basename_result
xdir=$func_dirname_result
lobj=$xdir$objdir/$objname
test -z "$base_compile" && \
func_fatal_help "you must specify a compilation command"
# Delete any leftover library objects.
if test yes = "$build_old_libs"; then
removelist="$obj $lobj $libobj ${libobj}T"
else
removelist="$lobj $libobj ${libobj}T"
fi
# On Cygwin there's no "real" PIC flag so we must build both object types
case $host_os in
cygwin* | mingw* | pw32* | os2* | cegcc*)
pic_mode=default
;;
esac
if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
# non-PIC code in shared libraries is not supported
pic_mode=default
fi
# Calculate the filename of the output object if compiler does
# not support -o with -c
if test no = "$compiler_c_o"; then
output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
lockfile=$output_obj.lock
else
output_obj=
need_locks=no
lockfile=
fi
# Lock this critical section if it is needed
# We use this script file to make the link, it avoids creating a new file
if test yes = "$need_locks"; then
until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
func_echo "Waiting for $lockfile to be removed"
sleep 2
done
elif test warn = "$need_locks"; then
if test -f "$lockfile"; then
$ECHO "\
*** ERROR, $lockfile exists and contains:
`cat $lockfile 2>/dev/null`
This indicates that another process is trying to use the same
temporary object file, and libtool could not work around it because
your compiler does not support '-c' and '-o' together. If you
repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."
$opt_dry_run || $RM $removelist
exit $EXIT_FAILURE
fi
func_append removelist " $output_obj"
$ECHO "$srcfile" > "$lockfile"
fi
$opt_dry_run || $RM $removelist
func_append removelist " $lockfile"
trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
srcfile=$func_to_tool_file_result
func_quote_arg pretty "$srcfile"
qsrcfile=$func_quote_arg_result
# Only build a PIC object if we are building libtool libraries.
if test yes = "$build_libtool_libs"; then
# Without this assignment, base_compile gets emptied.
fbsd_hideous_sh_bug=$base_compile
if test no != "$pic_mode"; then
command="$base_compile $qsrcfile $pic_flag"
else
# Don't build PIC code
command="$base_compile $qsrcfile"
fi
func_mkdir_p "$xdir$objdir"
if test -z "$output_obj"; then
# Place PIC objects in $objdir
func_append command " -o $lobj"
fi
func_show_eval_locale "$command" \
'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
if test warn = "$need_locks" &&
test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
$ECHO "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`
but it should contain:
$srcfile
This indicates that another process is trying to use the same
temporary object file, and libtool could not work around it because
your compiler does not support '-c' and '-o' together. If you
repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."
$opt_dry_run || $RM $removelist
exit $EXIT_FAILURE
fi
# Just move the object if needed, then go on to compile the next one
if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
func_show_eval '$MV "$output_obj" "$lobj"' \
'error=$?; $opt_dry_run || $RM $removelist; exit $error'
fi
# Allow error messages only from the first compilation.
if test yes = "$suppress_opt"; then
suppress_output=' >/dev/null 2>&1'
fi
fi
# Only build a position-dependent object if we build old libraries.
if test yes = "$build_old_libs"; then
if test yes != "$pic_mode"; then
# Don't build PIC code
command="$base_compile $qsrcfile$pie_flag"
else
command="$base_compile $qsrcfile $pic_flag"
fi
if test yes = "$compiler_c_o"; then
func_append command " -o $obj"
fi
# Suppress compiler output if we already did a PIC compilation.
func_append command "$suppress_output"
func_show_eval_locale "$command" \
'$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
if test warn = "$need_locks" &&
test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
$ECHO "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`
but it should contain:
$srcfile
This indicates that another process is trying to use the same
temporary object file, and libtool could not work around it because
your compiler does not support '-c' and '-o' together. If you
repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."
$opt_dry_run || $RM $removelist
exit $EXIT_FAILURE
fi
# Just move the object if needed
if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
func_show_eval '$MV "$output_obj" "$obj"' \
'error=$?; $opt_dry_run || $RM $removelist; exit $error'
fi
fi
$opt_dry_run || {
func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
# Unlock the critical section if it was locked
if test no != "$need_locks"; then
removelist=$lockfile
$RM "$lockfile"
fi
}
exit $EXIT_SUCCESS
}
$opt_help || {
test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
}
func_mode_help ()
{
# We need to display help for each of the modes.
case $opt_mode in
"")
# Generic help is extracted from the usage comments
# at the start of this file.
func_help
;;
clean)
$ECHO \
"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
Remove files from the build directory.
RM is the name of the program to use to delete files associated with each FILE
(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
to RM.
If FILE is a libtool library, object or program, all the files associated
with it are deleted. Otherwise, only FILE itself is deleted using RM."
;;
compile)
$ECHO \
"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
Compile a source file into a libtool library object.
This mode accepts the following additional options:
-o OUTPUT-FILE set the output file name to OUTPUT-FILE
-no-suppress do not suppress compiler output for multiple passes
-prefer-pic try to build PIC objects only
-prefer-non-pic try to build non-PIC objects only
-shared do not build a '.o' file suitable for static linking
-static only build a '.o' file suitable for static linking
-Wc,FLAG
-Xcompiler FLAG pass FLAG directly to the compiler
COMPILE-COMMAND is a command to be used in creating a 'standard' object file
from the given SOURCEFILE.
The output file name is determined by removing the directory component from
SOURCEFILE, then substituting the C source code suffix '.c' with the
library object suffix, '.lo'."
;;
execute)
$ECHO \
"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
Automatically set library path, then run a program.
This mode accepts the following additional options:
-dlopen FILE add the directory containing FILE to the library path
This mode sets the library path environment variable according to '-dlopen'
flags.
If any of the ARGS are libtool executable wrappers, then they are translated
into their corresponding uninstalled binary, and any of their required library
directories are added to the library path.
Then, COMMAND is executed, with ARGS as arguments."
;;
finish)
$ECHO \
"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
Complete the installation of libtool libraries.
Each LIBDIR is a directory that contains libtool libraries.
The commands that this mode executes may require superuser privileges. Use
the '--dry-run' option if you just want to see what would be executed."
;;
install)
$ECHO \
"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
Install executables or libraries.
INSTALL-COMMAND is the installation command. The first component should be
either the 'install' or 'cp' program.
The following components of INSTALL-COMMAND are treated specially:
-inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
The rest of the components are interpreted as arguments to that command (only
BSD-compatible install options are recognized)."
;;
link)
$ECHO \
"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
Link object files or libraries together to form another library, or to
create an executable program.
LINK-COMMAND is a command using the C compiler that you would use to create
a program from several object files.
The following components of LINK-COMMAND are treated specially:
-all-static do not do any dynamic linking at all
-avoid-version do not add a version suffix if possible
-bindir BINDIR specify path to binaries directory (for systems where
libraries must be found in the PATH setting at runtime)
-dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime
-dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
-export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-export-symbols SYMFILE
try to export only the symbols listed in SYMFILE
-export-symbols-regex REGEX
try to export only the symbols matching REGEX
-LLIBDIR search LIBDIR for required installed libraries
-lNAME OUTPUT-FILE requires the installed library libNAME
-module build a library that can dlopened
-no-fast-install disable the fast-install mode
-no-install link a not-installable executable
-no-undefined declare that a library does not refer to external symbols
-o OUTPUT-FILE create OUTPUT-FILE from the specified objects
-objectlist FILE use a list of object files found in FILE to specify objects
-os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes)
-precious-files-regex REGEX
don't remove output files matching REGEX
-release RELEASE specify package release information
-rpath LIBDIR the created library will eventually be installed in LIBDIR
-R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
-shared only do dynamic linking of libtool libraries
-shrext SUFFIX override the standard shared library file extension
-static do not do any dynamic linking of uninstalled libtool libraries
-static-libtool-libs
do not do any dynamic linking of libtool libraries
-version-info CURRENT[:REVISION[:AGE]]
specify library version info [each variable defaults to 0]
-weak LIBNAME declare that the target provides the LIBNAME interface
-Wc,FLAG
-Xcompiler FLAG pass linker-specific FLAG directly to the compiler
-Wa,FLAG
-Xassembler FLAG pass linker-specific FLAG directly to the assembler
-Wl,FLAG
-Xlinker FLAG pass linker-specific FLAG directly to the linker
-XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
All other options (arguments beginning with '-') are ignored.
Every other argument is treated as a filename. Files ending in '.la' are
treated as uninstalled libtool libraries, other files are standard or library
object files.
If the OUTPUT-FILE ends in '.la', then a libtool library is created,
only library objects ('.lo' files) may be specified, and '-rpath' is
required, except when creating a convenience library.
If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
using 'ar' and 'ranlib', or on Windows using 'lib'.
If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
is created, otherwise an executable program is created."
;;
uninstall)
$ECHO \
"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
Remove libraries from an installation directory.
RM is the name of the program to use to delete files associated with each FILE
(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
to RM.
If FILE is a libtool library, all the files associated with it are deleted.
Otherwise, only FILE itself is deleted using RM."
;;
*)
func_fatal_help "invalid operation mode '$opt_mode'"
;;
esac
echo
$ECHO "Try '$progname --help' for more information about other modes."
}
# Now that we've collected a possible --mode arg, show help if necessary
if $opt_help; then
if test : = "$opt_help"; then
func_mode_help
else
{
func_help noexit
for opt_mode in compile link execute install finish uninstall clean; do
func_mode_help
done
} | $SED -n '1p; 2,$s/^Usage:/ or: /p'
{
func_help noexit
for opt_mode in compile link execute install finish uninstall clean; do
echo
func_mode_help
done
} |
$SED '1d
/^When reporting/,/^Report/{
H
d
}
$x
/information about other modes/d
/more detailed .*MODE/d
s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
fi
exit $?
fi
# func_mode_execute arg...
func_mode_execute ()
{
$debug_cmd
# The first argument is the command name.
cmd=$nonopt
test -z "$cmd" && \
func_fatal_help "you must specify a COMMAND"
# Handle -dlopen flags immediately.
for file in $opt_dlopen; do
test -f "$file" \
|| func_fatal_help "'$file' is not a file"
dir=
case $file in
*.la)
func_resolve_sysroot "$file"
file=$func_resolve_sysroot_result
# Check to see that this really is a libtool archive.
func_lalib_unsafe_p "$file" \
|| func_fatal_help "'$lib' is not a valid libtool archive"
# Read the libtool library.
dlname=
library_names=
func_source "$file"
# Skip this library if it cannot be dlopened.
if test -z "$dlname"; then
# Warn if it was a shared library.
test -n "$library_names" && \
func_warning "'$file' was not linked with '-export-dynamic'"
continue
fi
func_dirname "$file" "" "."
dir=$func_dirname_result
if test -f "$dir/$objdir/$dlname"; then
func_append dir "/$objdir"
else
if test ! -f "$dir/$dlname"; then
func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
fi
fi
;;
*.lo)
# Just add the directory containing the .lo file.
func_dirname "$file" "" "."
dir=$func_dirname_result
;;
*)
func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
continue
;;
esac
# Get the absolute pathname.
absdir=`cd "$dir" && pwd`
test -n "$absdir" && dir=$absdir
# Now add the directory to shlibpath_var.
if eval "test -z \"\$$shlibpath_var\""; then
eval "$shlibpath_var=\"\$dir\""
else
eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
fi
done
# This variable tells wrapper scripts just to set shlibpath_var
# rather than running their programs.
libtool_execute_magic=$magic
# Check if any of the arguments is a wrapper script.
args=
for file
do
case $file in
-* | *.la | *.lo ) ;;
*)
# Do a test to see if this is really a libtool program.
if func_ltwrapper_script_p "$file"; then
func_source "$file"
# Transform arg to wrapped name.
file=$progdir/$program
elif func_ltwrapper_executable_p "$file"; then
func_ltwrapper_scriptname "$file"
func_source "$func_ltwrapper_scriptname_result"
# Transform arg to wrapped name.
file=$progdir/$program
fi
;;
esac
# Quote arguments (to preserve shell metacharacters).
func_append_quoted args "$file"
done
if $opt_dry_run; then
# Display what would be done.
if test -n "$shlibpath_var"; then
eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
echo "export $shlibpath_var"
fi
$ECHO "$cmd$args"
exit $EXIT_SUCCESS
else
if test -n "$shlibpath_var"; then
# Export the shlibpath_var.
eval "export $shlibpath_var"
fi
# Restore saved environment variables
for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
do
eval "if test \"\${save_$lt_var+set}\" = set; then
$lt_var=\$save_$lt_var; export $lt_var
else
$lt_unset $lt_var
fi"
done
# Now prepare to actually exec the command.
exec_cmd=\$cmd$args
fi
}
test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
# func_mode_finish arg...
func_mode_finish ()
{
$debug_cmd
libs=
libdirs=
admincmds=
for opt in "$nonopt" ${1+"$@"}
do
if test -d "$opt"; then
func_append libdirs " $opt"
elif test -f "$opt"; then
if func_lalib_unsafe_p "$opt"; then
func_append libs " $opt"
else
func_warning "'$opt' is not a valid libtool archive"
fi
else
func_fatal_error "invalid argument '$opt'"
fi
done
if test -n "$libs"; then
if test -n "$lt_sysroot"; then
sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
else
sysroot_cmd=
fi
# Remove sysroot references
if $opt_dry_run; then
for lib in $libs; do
echo "removing references to $lt_sysroot and '=' prefixes from $lib"
done
else
tmpdir=`func_mktempdir`
for lib in $libs; do
$SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
> $tmpdir/tmp-la
mv -f $tmpdir/tmp-la $lib
done
${RM}r "$tmpdir"
fi
fi
if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
for libdir in $libdirs; do
if test -n "$finish_cmds"; then
# Do each command in the finish commands.
func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
'"$cmd"'"'
fi
if test -n "$finish_eval"; then
# Do the single finish_eval.
eval cmds=\"$finish_eval\"
$opt_dry_run || eval "$cmds" || func_append admincmds "
$cmds"
fi
done
fi
# Exit here if they wanted silent mode.
$opt_quiet && exit $EXIT_SUCCESS
if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
echo "----------------------------------------------------------------------"
echo "Libraries have been installed in:"
for libdir in $libdirs; do
$ECHO " $libdir"
done
echo
echo "If you ever happen to want to link against installed libraries"
echo "in a given directory, LIBDIR, you must either use libtool, and"
echo "specify the full pathname of the library, or use the '-LLIBDIR'"
echo "flag during linking and do at least one of the following:"
if test -n "$shlibpath_var"; then
echo " - add LIBDIR to the '$shlibpath_var' environment variable"
echo " during execution"
fi
if test -n "$runpath_var"; then
echo " - add LIBDIR to the '$runpath_var' environment variable"
echo " during linking"
fi
if test -n "$hardcode_libdir_flag_spec"; then
libdir=LIBDIR
eval flag=\"$hardcode_libdir_flag_spec\"
$ECHO " - use the '$flag' linker flag"
fi
if test -n "$admincmds"; then
$ECHO " - have your system administrator run these commands:$admincmds"
fi
if test -f /etc/ld.so.conf; then
echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
fi
echo
echo "See any operating system documentation about shared libraries for"
case $host in
solaris2.[6789]|solaris2.1[0-9])
echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
echo "pages."
;;
*)
echo "more information, such as the ld(1) and ld.so(8) manual pages."
;;
esac
echo "----------------------------------------------------------------------"
fi
exit $EXIT_SUCCESS
}
test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
# func_mode_install arg...
func_mode_install ()
{
$debug_cmd
# There may be an optional sh(1) argument at the beginning of
# install_prog (especially on Windows NT).
if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
# Allow the use of GNU shtool's install command.
case $nonopt in *shtool*) :;; *) false;; esac
then
# Aesthetically quote it.
func_quote_arg pretty "$nonopt"
install_prog="$func_quote_arg_result "
arg=$1
shift
else
install_prog=
arg=$nonopt
fi
# The real first argument should be the name of the installation program.
# Aesthetically quote it.
func_quote_arg pretty "$arg"
func_append install_prog "$func_quote_arg_result"
install_shared_prog=$install_prog
case " $install_prog " in
*[\\\ /]cp\ *) install_cp=: ;;
*) install_cp=false ;;
esac
# We need to accept at least all the BSD install flags.
dest=
files=
opts=
prev=
install_type=
isdir=false
stripme=
no_mode=:
for arg
do
arg2=
if test -n "$dest"; then
func_append files " $dest"
dest=$arg
continue
fi
case $arg in
-d) isdir=: ;;
-f)
if $install_cp; then :; else
prev=$arg
fi
;;
-g | -m | -o)
prev=$arg
;;
-s)
stripme=" -s"
continue
;;
-*)
;;
*)
# If the previous option needed an argument, then skip it.
if test -n "$prev"; then
if test X-m = "X$prev" && test -n "$install_override_mode"; then
arg2=$install_override_mode
no_mode=false
fi
prev=
else
dest=$arg
continue
fi
;;
esac
# Aesthetically quote the argument.
func_quote_arg pretty "$arg"
func_append install_prog " $func_quote_arg_result"
if test -n "$arg2"; then
func_quote_arg pretty "$arg2"
fi
func_append install_shared_prog " $func_quote_arg_result"
done
test -z "$install_prog" && \
func_fatal_help "you must specify an install program"
test -n "$prev" && \
func_fatal_help "the '$prev' option requires an argument"
if test -n "$install_override_mode" && $no_mode; then
if $install_cp; then :; else
func_quote_arg pretty "$install_override_mode"
func_append install_shared_prog " -m $func_quote_arg_result"
fi
fi
if test -z "$files"; then
if test -z "$dest"; then
func_fatal_help "no file or destination specified"
else
func_fatal_help "you must specify a destination"
fi
fi
# Strip any trailing slash from the destination.
func_stripname '' '/' "$dest"
dest=$func_stripname_result
# Check to see that the destination is a directory.
test -d "$dest" && isdir=:
if $isdir; then
destdir=$dest
destname=
else
func_dirname_and_basename "$dest" "" "."
destdir=$func_dirname_result
destname=$func_basename_result
# Not a directory, so check to see that there is only one file specified.
set dummy $files; shift
test "$#" -gt 1 && \
func_fatal_help "'$dest' is not a directory"
fi
case $destdir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
for file in $files; do
case $file in
*.lo) ;;
*)
func_fatal_help "'$destdir' must be an absolute directory name"
;;
esac
done
;;
esac
# This variable tells wrapper scripts just to set variables rather
# than running their programs.
libtool_install_magic=$magic
staticlibs=
future_libdirs=
current_libdirs=
for file in $files; do
# Do each installation.
case $file in
*.$libext)
# Do the static libraries later.
func_append staticlibs " $file"
;;
*.la)
func_resolve_sysroot "$file"
file=$func_resolve_sysroot_result
# Check to see that this really is a libtool archive.
func_lalib_unsafe_p "$file" \
|| func_fatal_help "'$file' is not a valid libtool archive"
library_names=
old_library=
relink_command=
func_source "$file"
# Add the libdir to current_libdirs if it is the destination.
if test "X$destdir" = "X$libdir"; then
case "$current_libdirs " in
*" $libdir "*) ;;
*) func_append current_libdirs " $libdir" ;;
esac
else
# Note the libdir as a future libdir.
case "$future_libdirs " in
*" $libdir "*) ;;
*) func_append future_libdirs " $libdir" ;;
esac
fi
func_dirname "$file" "/" ""
dir=$func_dirname_result
func_append dir "$objdir"
if test -n "$relink_command"; then
# Determine the prefix the user has applied to our future dir.
inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
# Don't allow the user to place us outside of our expected
# location b/c this prevents finding dependent libraries that
# are installed to the same prefix.
# At present, this check doesn't affect windows .dll's that
# are installed into $libdir/../bin (currently, that works fine)
# but it's something to keep an eye on.
test "$inst_prefix_dir" = "$destdir" && \
func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
if test -n "$inst_prefix_dir"; then
# Stick the inst_prefix_dir data into the link command.
relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
else
relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
fi
func_warning "relinking '$file'"
func_show_eval "$relink_command" \
'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
fi
# See the names of the shared library.
set dummy $library_names; shift
if test -n "$1"; then
realname=$1
shift
srcname=$realname
test -n "$relink_command" && srcname=${realname}T
# Install the shared library and build the symlinks.
func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
'exit $?'
tstripme=$stripme
case $host_os in
cygwin* | mingw* | pw32* | cegcc*)
case $realname in
*.dll.a)
tstripme=
;;
esac
;;
os2*)
case $realname in
*_dll.a)
tstripme=
;;
esac
;;
esac
if test -n "$tstripme" && test -n "$striplib"; then
func_show_eval "$striplib $destdir/$realname" 'exit $?'
fi
if test "$#" -gt 0; then
# Delete the old symlinks, and create new ones.
# Try 'ln -sf' first, because the 'ln' binary might depend on
# the symlink we replace! Solaris /bin/ln does not understand -f,
# so we also need to try rm && ln -s.
for linkname
do
test "$linkname" != "$realname" \
&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
done
fi
# Do each command in the postinstall commands.
lib=$destdir/$realname
func_execute_cmds "$postinstall_cmds" 'exit $?'
fi
# Install the pseudo-library for information purposes.
func_basename "$file"
name=$func_basename_result
instname=$dir/${name}i
func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
# Maybe install the static library, too.
test -n "$old_library" && func_append staticlibs " $dir/$old_library"
;;
*.lo)
# Install (i.e. copy) a libtool object.
# Figure out destination file name, if it wasn't already specified.
if test -n "$destname"; then
destfile=$destdir/$destname
else
func_basename "$file"
destfile=$func_basename_result
destfile=$destdir/$destfile
fi
# Deduce the name of the destination old-style object file.
case $destfile in
*.lo)
func_lo2o "$destfile"
staticdest=$func_lo2o_result
;;
*.$objext)
staticdest=$destfile
destfile=
;;
*)
func_fatal_help "cannot copy a libtool object to '$destfile'"
;;
esac
# Install the libtool object if requested.
test -n "$destfile" && \
func_show_eval "$install_prog $file $destfile" 'exit $?'
# Install the old object if enabled.
if test yes = "$build_old_libs"; then
# Deduce the name of the old-style object file.
func_lo2o "$file"
staticobj=$func_lo2o_result
func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
fi
exit $EXIT_SUCCESS
;;
*)
# Figure out destination file name, if it wasn't already specified.
if test -n "$destname"; then
destfile=$destdir/$destname
else
func_basename "$file"
destfile=$func_basename_result
destfile=$destdir/$destfile
fi
# If the file is missing, and there is a .exe on the end, strip it
# because it is most likely a libtool script we actually want to
# install
stripped_ext=
case $file in
*.exe)
if test ! -f "$file"; then
func_stripname '' '.exe' "$file"
file=$func_stripname_result
stripped_ext=.exe
fi
;;
esac
# Do a test to see if this is really a libtool program.
case $host in
*cygwin* | *mingw*)
if func_ltwrapper_executable_p "$file"; then
func_ltwrapper_scriptname "$file"
wrapper=$func_ltwrapper_scriptname_result
else
func_stripname '' '.exe' "$file"
wrapper=$func_stripname_result
fi
;;
*)
wrapper=$file
;;
esac
if func_ltwrapper_script_p "$wrapper"; then
notinst_deplibs=
relink_command=
func_source "$wrapper"
# Check the variables that should have been set.
test -z "$generated_by_libtool_version" && \
func_fatal_error "invalid libtool wrapper script '$wrapper'"
finalize=:
for lib in $notinst_deplibs; do
# Check to see that each library is installed.
libdir=
if test -f "$lib"; then
func_source "$lib"
fi
libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
if test -n "$libdir" && test ! -f "$libfile"; then
func_warning "'$lib' has not been installed in '$libdir'"
finalize=false
fi
done
relink_command=
func_source "$wrapper"
outputname=
if test no = "$fast_install" && test -n "$relink_command"; then
$opt_dry_run || {
if $finalize; then
tmpdir=`func_mktempdir`
func_basename "$file$stripped_ext"
file=$func_basename_result
outputname=$tmpdir/$file
# Replace the output file specification.
relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
$opt_quiet || {
func_quote_arg expand,pretty "$relink_command"
eval "func_echo $func_quote_arg_result"
}
if eval "$relink_command"; then :
else
func_error "error: relink '$file' with the above command before installing it"
$opt_dry_run || ${RM}r "$tmpdir"
continue
fi
file=$outputname
else
func_warning "cannot relink '$file'"
fi
}
else
# Install the binary that we compiled earlier.
file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
fi
fi
# remove .exe since cygwin /usr/bin/install will append another
# one anyway
case $install_prog,$host in
*/usr/bin/install*,*cygwin*)
case $file:$destfile in
*.exe:*.exe)
# this is ok
;;
*.exe:*)
destfile=$destfile.exe
;;
*:*.exe)
func_stripname '' '.exe' "$destfile"
destfile=$func_stripname_result
;;
esac
;;
esac
func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
$opt_dry_run || if test -n "$outputname"; then
${RM}r "$tmpdir"
fi
;;
esac
done
for file in $staticlibs; do
func_basename "$file"
name=$func_basename_result
# Set up the ranlib parameters.
oldlib=$destdir/$name
func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
tool_oldlib=$func_to_tool_file_result
func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
if test -n "$stripme" && test -n "$old_striplib"; then
func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
fi
# Do each command in the postinstall commands.
func_execute_cmds "$old_postinstall_cmds" 'exit $?'
done
test -n "$future_libdirs" && \
func_warning "remember to run '$progname --finish$future_libdirs'"
if test -n "$current_libdirs"; then
# Maybe just do a dry run.
$opt_dry_run && current_libdirs=" -n$current_libdirs"
exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
else
exit $EXIT_SUCCESS
fi
}
test install = "$opt_mode" && func_mode_install ${1+"$@"}
# func_generate_dlsyms outputname originator pic_p
# Extract symbols from dlprefiles and create ${outputname}S.o with
# a dlpreopen symbol table.
func_generate_dlsyms ()
{
$debug_cmd
my_outputname=$1
my_originator=$2
my_pic_p=${3-false}
my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
my_dlsyms=
if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
if test -n "$NM" && test -n "$global_symbol_pipe"; then
my_dlsyms=${my_outputname}S.c
else
func_error "not configured to extract global symbols from dlpreopened files"
fi
fi
if test -n "$my_dlsyms"; then
case $my_dlsyms in
"") ;;
*.c)
# Discover the nlist of each of the dlfiles.
nlist=$output_objdir/$my_outputname.nm
func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
# Parse the name list into a source file.
func_verbose "creating $output_objdir/$my_dlsyms"
$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
#ifdef __cplusplus
extern \"C\" {
#endif
#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
#endif
/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
/* DATA imports from DLLs on WIN32 can't be const, because runtime
relocations are performed -- see ld's documentation on pseudo-relocs. */
# define LT_DLSYM_CONST
#elif defined __osf__
/* This system does not cope well with relocations in const data. */
# define LT_DLSYM_CONST
#else
# define LT_DLSYM_CONST const
#endif
#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
/* External symbol declarations for the compiler. */\
"
if test yes = "$dlself"; then
func_verbose "generating symbol list for '$output'"
$opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
# Add our own program objects to the symbol list.
progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
for progfile in $progfiles; do
func_to_tool_file "$progfile" func_convert_file_msys_to_w32
func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
$opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
done
if test -n "$exclude_expsyms"; then
$opt_dry_run || {
eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
eval '$MV "$nlist"T "$nlist"'
}
fi
if test -n "$export_symbols_regex"; then
$opt_dry_run || {
eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
eval '$MV "$nlist"T "$nlist"'
}
fi
# Prepare the list of exported symbols
if test -z "$export_symbols"; then
export_symbols=$output_objdir/$outputname.exp
$opt_dry_run || {
$RM $export_symbols
eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
case $host in
*cygwin* | *mingw* | *cegcc* )
eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
;;
esac
}
else
$opt_dry_run || {
eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
eval '$MV "$nlist"T "$nlist"'
case $host in
*cygwin* | *mingw* | *cegcc* )
eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
;;
esac
}
fi
fi
for dlprefile in $dlprefiles; do
func_verbose "extracting global C symbols from '$dlprefile'"
func_basename "$dlprefile"
name=$func_basename_result
case $host in
*cygwin* | *mingw* | *cegcc* )
# if an import library, we need to obtain dlname
if func_win32_import_lib_p "$dlprefile"; then
func_tr_sh "$dlprefile"
eval "curr_lafile=\$libfile_$func_tr_sh_result"
dlprefile_dlbasename=
if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
# Use subshell, to avoid clobbering current variable values
dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
if test -n "$dlprefile_dlname"; then
func_basename "$dlprefile_dlname"
dlprefile_dlbasename=$func_basename_result
else
# no lafile. user explicitly requested -dlpreopen .
$sharedlib_from_linklib_cmd "$dlprefile"
dlprefile_dlbasename=$sharedlib_from_linklib_result
fi
fi
$opt_dry_run || {
if test -n "$dlprefile_dlbasename"; then
eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
else
func_warning "Could not compute DLL name from $name"
eval '$ECHO ": $name " >> "$nlist"'
fi
func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
$SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
}
else # not an import lib
$opt_dry_run || {
eval '$ECHO ": $name " >> "$nlist"'
func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
}
fi
;;
*)
$opt_dry_run || {
eval '$ECHO ": $name " >> "$nlist"'
func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
}
;;
esac
done
$opt_dry_run || {
# Make sure we have at least an empty file.
test -f "$nlist" || : > "$nlist"
if test -n "$exclude_expsyms"; then
$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
$MV "$nlist"T "$nlist"
fi
# Try sorting and uniquifying the output.
if $GREP -v "^: " < "$nlist" |
if sort -k 3 /dev/null 2>&1; then
sort -k 3
else
sort +2
fi |
uniq > "$nlist"S; then
:
else
$GREP -v "^: " < "$nlist" > "$nlist"S
fi
if test -f "$nlist"S; then
eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
else
echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
fi
func_show_eval '$RM "${nlist}I"'
if test -n "$global_symbol_to_import"; then
eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
fi
echo >> "$output_objdir/$my_dlsyms" "\
/* The mapping between symbol names and symbols. */
typedef struct {
const char *name;
void *address;
} lt_dlsymlist;
extern LT_DLSYM_CONST lt_dlsymlist
lt_${my_prefix}_LTX_preloaded_symbols[];\
"
if test -s "$nlist"I; then
echo >> "$output_objdir/$my_dlsyms" "\
static void lt_syminit(void)
{
LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
for (; symbol->name; ++symbol)
{"
$SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
echo >> "$output_objdir/$my_dlsyms" "\
}
}"
fi
echo >> "$output_objdir/$my_dlsyms" "\
LT_DLSYM_CONST lt_dlsymlist
lt_${my_prefix}_LTX_preloaded_symbols[] =
{ {\"$my_originator\", (void *) 0},"
if test -s "$nlist"I; then
echo >> "$output_objdir/$my_dlsyms" "\
{\"@INIT@\", (void *) <_syminit},"
fi
case $need_lib_prefix in
no)
eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
;;
*)
eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
;;
esac
echo >> "$output_objdir/$my_dlsyms" "\
{0, (void *) 0}
};
/* This works around a problem in FreeBSD linker */
#ifdef FREEBSD_WORKAROUND
static const void *lt_preloaded_setup() {
return lt_${my_prefix}_LTX_preloaded_symbols;
}
#endif
#ifdef __cplusplus
}
#endif\
"
} # !$opt_dry_run
pic_flag_for_symtable=
case "$compile_command " in
*" -static "*) ;;
*)
case $host in
# compiling the symbol table file with pic_flag works around
# a FreeBSD bug that causes programs to crash when -lm is
# linked before any other PIC object. But we must not use
# pic_flag when linking with -static. The problem exists in
# FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
*-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
*-*-hpux*)
pic_flag_for_symtable=" $pic_flag" ;;
*)
$my_pic_p && pic_flag_for_symtable=" $pic_flag"
;;
esac
;;
esac
symtab_cflags=
for arg in $LTCFLAGS; do
case $arg in
-pie | -fpie | -fPIE) ;;
*) func_append symtab_cflags " $arg" ;;
esac
done
# Now compile the dynamic symbol file.
func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
# Clean up the generated files.
func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
# Transform the symbol file into the correct name.
symfileobj=$output_objdir/${my_outputname}S.$objext
case $host in
*cygwin* | *mingw* | *cegcc* )
if test -f "$output_objdir/$my_outputname.def"; then
compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
else
compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
fi
;;
*)
compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
;;
esac
;;
*)
func_fatal_error "unknown suffix for '$my_dlsyms'"
;;
esac
else
# We keep going just in case the user didn't refer to
# lt_preloaded_symbols. The linker will fail if global_symbol_pipe
# really was required.
# Nullify the symbol file.
compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
fi
}
# func_cygming_gnu_implib_p ARG
# This predicate returns with zero status (TRUE) if
# ARG is a GNU/binutils-style import library. Returns
# with nonzero status (FALSE) otherwise.
func_cygming_gnu_implib_p ()
{
$debug_cmd
func_to_tool_file "$1" func_convert_file_msys_to_w32
func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
test -n "$func_cygming_gnu_implib_tmp"
}
# func_cygming_ms_implib_p ARG
# This predicate returns with zero status (TRUE) if
# ARG is an MS-style import library. Returns
# with nonzero status (FALSE) otherwise.
func_cygming_ms_implib_p ()
{
$debug_cmd
func_to_tool_file "$1" func_convert_file_msys_to_w32
func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
test -n "$func_cygming_ms_implib_tmp"
}
# func_win32_libid arg
# return the library type of file 'arg'
#
# Need a lot of goo to handle *both* DLLs and import libs
# Has to be a shell function in order to 'eat' the argument
# that is supplied when $file_magic_command is called.
# Despite the name, also deal with 64 bit binaries.
func_win32_libid ()
{
$debug_cmd
win32_libid_type=unknown
win32_fileres=`file -L $1 2>/dev/null`
case $win32_fileres in
*ar\ archive\ import\ library*) # definitely import
win32_libid_type="x86 archive import"
;;
*ar\ archive*) # could be an import, or static
# Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
$EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
case $nm_interface in
"MS dumpbin")
if func_cygming_ms_implib_p "$1" ||
func_cygming_gnu_implib_p "$1"
then
win32_nmres=import
else
win32_nmres=
fi
;;
*)
func_to_tool_file "$1" func_convert_file_msys_to_w32
win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
$SED -n -e '
1,100{
/ I /{
s|.*|import|
p
q
}
}'`
;;
esac
case $win32_nmres in
import*) win32_libid_type="x86 archive import";;
*) win32_libid_type="x86 archive static";;
esac
fi
;;
*DLL*)
win32_libid_type="x86 DLL"
;;
*executable*) # but shell scripts are "executable" too...
case $win32_fileres in
*MS\ Windows\ PE\ Intel*)
win32_libid_type="x86 DLL"
;;
esac
;;
esac
$ECHO "$win32_libid_type"
}
# func_cygming_dll_for_implib ARG
#
# Platform-specific function to extract the
# name of the DLL associated with the specified
# import library ARG.
# Invoked by eval'ing the libtool variable
# $sharedlib_from_linklib_cmd
# Result is available in the variable
# $sharedlib_from_linklib_result
func_cygming_dll_for_implib ()
{
$debug_cmd
sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
}
# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
#
# The is the core of a fallback implementation of a
# platform-specific function to extract the name of the
# DLL associated with the specified import library LIBNAME.
#
# SECTION_NAME is either .idata$6 or .idata$7, depending
# on the platform and compiler that created the implib.
#
# Echos the name of the DLL associated with the
# specified import library.
func_cygming_dll_for_implib_fallback_core ()
{
$debug_cmd
match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
$OBJDUMP -s --section "$1" "$2" 2>/dev/null |
$SED '/^Contents of section '"$match_literal"':/{
# Place marker at beginning of archive member dllname section
s/.*/====MARK====/
p
d
}
# These lines can sometimes be longer than 43 characters, but
# are always uninteresting
/:[ ]*file format pe[i]\{,1\}-/d
/^In archive [^:]*:/d
# Ensure marker is printed
/^====MARK====/p
# Remove all lines with less than 43 characters
/^.\{43\}/!d
# From remaining lines, remove first 43 characters
s/^.\{43\}//' |
$SED -n '
# Join marker and all lines until next marker into a single line
/^====MARK====/ b para
H
$ b para
b
:para
x
s/\n//g
# Remove the marker
s/^====MARK====//
# Remove trailing dots and whitespace
s/[\. \t]*$//
# Print
/./p' |
# we now have a list, one entry per line, of the stringified
# contents of the appropriate section of all members of the
# archive that possess that section. Heuristic: eliminate
# all those that have a first or second character that is
# a '.' (that is, objdump's representation of an unprintable
# character.) This should work for all archives with less than
# 0x302f exports -- but will fail for DLLs whose name actually
# begins with a literal '.' or a single character followed by
# a '.'.
#
# Of those that remain, print the first one.
$SED -e '/^\./d;/^.\./d;q'
}
# func_cygming_dll_for_implib_fallback ARG
# Platform-specific function to extract the
# name of the DLL associated with the specified
# import library ARG.
#
# This fallback implementation is for use when $DLLTOOL
# does not support the --identify-strict option.
# Invoked by eval'ing the libtool variable
# $sharedlib_from_linklib_cmd
# Result is available in the variable
# $sharedlib_from_linklib_result
func_cygming_dll_for_implib_fallback ()
{
$debug_cmd
if func_cygming_gnu_implib_p "$1"; then
# binutils import library
sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
elif func_cygming_ms_implib_p "$1"; then
# ms-generated import library
sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
else
# unknown
sharedlib_from_linklib_result=
fi
}
# func_extract_an_archive dir oldlib
func_extract_an_archive ()
{
$debug_cmd
f_ex_an_ar_dir=$1; shift
f_ex_an_ar_oldlib=$1
if test yes = "$lock_old_archive_extraction"; then
lockfile=$f_ex_an_ar_oldlib.lock
until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
func_echo "Waiting for $lockfile to be removed"
sleep 2
done
fi
func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
'stat=$?; rm -f "$lockfile"; exit $stat'
if test yes = "$lock_old_archive_extraction"; then
$opt_dry_run || rm -f "$lockfile"
fi
if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
:
else
func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
fi
}
# func_extract_archives gentop oldlib ...
func_extract_archives ()
{
$debug_cmd
my_gentop=$1; shift
my_oldlibs=${1+"$@"}
my_oldobjs=
my_xlib=
my_xabs=
my_xdir=
for my_xlib in $my_oldlibs; do
# Extract the objects.
case $my_xlib in
[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
*) my_xabs=`pwd`"/$my_xlib" ;;
esac
func_basename "$my_xlib"
my_xlib=$func_basename_result
my_xlib_u=$my_xlib
while :; do
case " $extracted_archives " in
*" $my_xlib_u "*)
func_arith $extracted_serial + 1
extracted_serial=$func_arith_result
my_xlib_u=lt$extracted_serial-$my_xlib ;;
*) break ;;
esac
done
extracted_archives="$extracted_archives $my_xlib_u"
my_xdir=$my_gentop/$my_xlib_u
func_mkdir_p "$my_xdir"
case $host in
*-darwin*)
func_verbose "Extracting $my_xabs"
# Do not bother doing anything if just a dry run
$opt_dry_run || {
darwin_orig_dir=`pwd`
cd $my_xdir || exit $?
darwin_archive=$my_xabs
darwin_curdir=`pwd`
func_basename "$darwin_archive"
darwin_base_archive=$func_basename_result
darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
if test -n "$darwin_arches"; then
darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
darwin_arch=
func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
for darwin_arch in $darwin_arches; do
func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
$LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
cd "unfat-$$/$darwin_base_archive-$darwin_arch"
func_extract_an_archive "`pwd`" "$darwin_base_archive"
cd "$darwin_curdir"
$RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
done # $darwin_arches
## Okay now we've a bunch of thin objects, gotta fatten them up :)
darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
darwin_file=
darwin_files=
for darwin_file in $darwin_filelist; do
darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
$LIPO -create -output "$darwin_file" $darwin_files
done # $darwin_filelist
$RM -rf unfat-$$
cd "$darwin_orig_dir"
else
cd $darwin_orig_dir
func_extract_an_archive "$my_xdir" "$my_xabs"
fi # $darwin_arches
} # !$opt_dry_run
;;
*)
func_extract_an_archive "$my_xdir" "$my_xabs"
;;
esac
my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
done
func_extract_archives_result=$my_oldobjs
}
# func_emit_wrapper [arg=no]
#
# Emit a libtool wrapper script on stdout.
# Don't directly open a file because we may want to
# incorporate the script contents within a cygwin/mingw
# wrapper executable. Must ONLY be called from within
# func_mode_link because it depends on a number of variables
# set therein.
#
# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
# variable will take. If 'yes', then the emitted script
# will assume that the directory where it is stored is
# the $objdir directory. This is a cygwin/mingw-specific
# behavior.
func_emit_wrapper ()
{
func_emit_wrapper_arg1=${1-no}
$ECHO "\
#! $SHELL
# $output - temporary wrapper script for $objdir/$outputname
# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
#
# The $output program cannot be directly executed until all the libtool
# libraries that it depends on are installed.
#
# This wrapper script should never be moved out of the build directory.
# If it is, it will not operate correctly.
# Sed substitution that helps us do robust quoting. It backslashifies
# metacharacters that are still active within double-quoted strings.
sed_quote_subst='$sed_quote_subst'
# Be Bourne compatible
if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
# Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
else
case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
fi
BIN_SH=xpg4; export BIN_SH # for Tru64
DUALCASE=1; export DUALCASE # for MKS sh
# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
relink_command=\"$relink_command\"
# This environment variable determines our operation mode.
if test \"\$libtool_install_magic\" = \"$magic\"; then
# install mode needs the following variables:
generated_by_libtool_version='$macro_version'
notinst_deplibs='$notinst_deplibs'
else
# When we are sourced in execute mode, \$file and \$ECHO are already set.
if test \"\$libtool_execute_magic\" != \"$magic\"; then
file=\"\$0\""
func_quote_arg pretty "$ECHO"
qECHO=$func_quote_arg_result
$ECHO "\
# A function that is used when there is no print builtin or printf.
func_fallback_echo ()
{
eval 'cat <<_LTECHO_EOF
\$1
_LTECHO_EOF'
}
ECHO=$qECHO
fi
# Very basic option parsing. These options are (a) specific to
# the libtool wrapper, (b) are identical between the wrapper
# /script/ and the wrapper /executable/ that is used only on
# windows platforms, and (c) all begin with the string "--lt-"
# (application programs are unlikely to have options that match
# this pattern).
#
# There are only two supported options: --lt-debug and
# --lt-dump-script. There is, deliberately, no --lt-help.
#
# The first argument to this parsing function should be the
# script's $0 value, followed by "$@".
lt_option_debug=
func_parse_lt_options ()
{
lt_script_arg0=\$0
shift
for lt_opt
do
case \"\$lt_opt\" in
--lt-debug) lt_option_debug=1 ;;
--lt-dump-script)
lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
cat \"\$lt_dump_D/\$lt_dump_F\"
exit 0
;;
--lt-*)
\$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
exit 1
;;
esac
done
# Print the debug banner immediately:
if test -n \"\$lt_option_debug\"; then
echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
fi
}
# Used when --lt-debug. Prints its arguments to stdout
# (redirection is the responsibility of the caller)
func_lt_dump_args ()
{
lt_dump_args_N=1;
for lt_arg
do
\$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
done
}
# Core function for launching the target application
func_exec_program_core ()
{
"
case $host in
# Backslashes separate directories on plain windows
*-*-mingw | *-*-os2* | *-cegcc*)
$ECHO "\
if test -n \"\$lt_option_debug\"; then
\$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
func_lt_dump_args \${1+\"\$@\"} 1>&2
fi
exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
"
;;
*)
$ECHO "\
if test -n \"\$lt_option_debug\"; then
\$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
func_lt_dump_args \${1+\"\$@\"} 1>&2
fi
exec \"\$progdir/\$program\" \${1+\"\$@\"}
"
;;
esac
$ECHO "\
\$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
exit 1
}
# A function to encapsulate launching the target application
# Strips options in the --lt-* namespace from \$@ and
# launches target application with the remaining arguments.
func_exec_program ()
{
case \" \$* \" in
*\\ --lt-*)
for lt_wr_arg
do
case \$lt_wr_arg in
--lt-*) ;;
*) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
esac
shift
done ;;
esac
func_exec_program_core \${1+\"\$@\"}
}
# Parse options
func_parse_lt_options \"\$0\" \${1+\"\$@\"}
# Find the directory that this script lives in.
thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
test \"x\$thisdir\" = \"x\$file\" && thisdir=.
# Follow symbolic links until we get to the real thisdir.
file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
while test -n \"\$file\"; do
destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
# If there was a directory component, then change thisdir.
if test \"x\$destdir\" != \"x\$file\"; then
case \"\$destdir\" in
[\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
*) thisdir=\"\$thisdir/\$destdir\" ;;
esac
fi
file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
done
# Usually 'no', except on cygwin/mingw when embedded into
# the cwrapper.
WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
# special case for '.'
if test \"\$thisdir\" = \".\"; then
thisdir=\`pwd\`
fi
# remove .libs from thisdir
case \"\$thisdir\" in
*[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
$objdir ) thisdir=. ;;
esac
fi
# Try to get the absolute directory name.
absdir=\`cd \"\$thisdir\" && pwd\`
test -n \"\$absdir\" && thisdir=\"\$absdir\"
"
if test yes = "$fast_install"; then
$ECHO "\
program=lt-'$outputname'$exeext
progdir=\"\$thisdir/$objdir\"
if test ! -f \"\$progdir/\$program\" ||
{ file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
test \"X\$file\" != \"X\$progdir/\$program\"; }; then
file=\"\$\$-\$program\"
if test ! -d \"\$progdir\"; then
$MKDIR \"\$progdir\"
else
$RM \"\$progdir/\$file\"
fi"
$ECHO "\
# relink executable if necessary
if test -n \"\$relink_command\"; then
if relink_command_output=\`eval \$relink_command 2>&1\`; then :
else
\$ECHO \"\$relink_command_output\" >&2
$RM \"\$progdir/\$file\"
exit 1
fi
fi
$MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
{ $RM \"\$progdir/\$program\";
$MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
$RM \"\$progdir/\$file\"
fi"
else
$ECHO "\
program='$outputname'
progdir=\"\$thisdir/$objdir\"
"
fi
$ECHO "\
if test -f \"\$progdir/\$program\"; then"
# fixup the dll searchpath if we need to.
#
# Fix the DLL searchpath if we need to. Do this before prepending
# to shlibpath, because on Windows, both are PATH and uninstalled
# libraries must come first.
if test -n "$dllsearchpath"; then
$ECHO "\
# Add the dll search path components to the executable PATH
PATH=$dllsearchpath:\$PATH
"
fi
# Export our shlibpath_var if we have one.
if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
$ECHO "\
# Add our own library path to $shlibpath_var
$shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
# Some systems cannot cope with colon-terminated $shlibpath_var
# The second colon is a workaround for a bug in BeOS R4 sed
$shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
export $shlibpath_var
"
fi
$ECHO "\
if test \"\$libtool_execute_magic\" != \"$magic\"; then
# Run the actual program with our arguments.
func_exec_program \${1+\"\$@\"}
fi
else
# The program doesn't exist.
\$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
\$ECHO \"This script is just a wrapper for \$program.\" 1>&2
\$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
exit 1
fi
fi\
"
}
# func_emit_cwrapperexe_src
# emit the source code for a wrapper executable on stdout
# Must ONLY be called from within func_mode_link because
# it depends on a number of variable set therein.
func_emit_cwrapperexe_src ()
{
cat <
#include
#ifdef _MSC_VER
# include
# include
# include
#else
# include
# include
# ifdef __CYGWIN__
# include
# endif
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
/* declarations of non-ANSI functions */
#if defined __MINGW32__
# ifdef __STRICT_ANSI__
int _putenv (const char *);
# endif
#elif defined __CYGWIN__
# ifdef __STRICT_ANSI__
char *realpath (const char *, char *);
int putenv (char *);
int setenv (const char *, const char *, int);
# endif
/* #elif defined other_platform || defined ... */
#endif
/* portability defines, excluding path handling macros */
#if defined _MSC_VER
# define setmode _setmode
# define stat _stat
# define chmod _chmod
# define getcwd _getcwd
# define putenv _putenv
# define S_IXUSR _S_IEXEC
#elif defined __MINGW32__
# define setmode _setmode
# define stat _stat
# define chmod _chmod
# define getcwd _getcwd
# define putenv _putenv
#elif defined __CYGWIN__
# define HAVE_SETENV
# define FOPEN_WB "wb"
/* #elif defined other platforms ... */
#endif
#if defined PATH_MAX
# define LT_PATHMAX PATH_MAX
#elif defined MAXPATHLEN
# define LT_PATHMAX MAXPATHLEN
#else
# define LT_PATHMAX 1024
#endif
#ifndef S_IXOTH
# define S_IXOTH 0
#endif
#ifndef S_IXGRP
# define S_IXGRP 0
#endif
/* path handling portability macros */
#ifndef DIR_SEPARATOR
# define DIR_SEPARATOR '/'
# define PATH_SEPARATOR ':'
#endif
#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
defined __OS2__
# define HAVE_DOS_BASED_FILE_SYSTEM
# define FOPEN_WB "wb"
# ifndef DIR_SEPARATOR_2
# define DIR_SEPARATOR_2 '\\'
# endif
# ifndef PATH_SEPARATOR_2
# define PATH_SEPARATOR_2 ';'
# endif
#endif
#ifndef DIR_SEPARATOR_2
# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
#else /* DIR_SEPARATOR_2 */
# define IS_DIR_SEPARATOR(ch) \
(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
#endif /* DIR_SEPARATOR_2 */
#ifndef PATH_SEPARATOR_2
# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
#else /* PATH_SEPARATOR_2 */
# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
#endif /* PATH_SEPARATOR_2 */
#ifndef FOPEN_WB
# define FOPEN_WB "w"
#endif
#ifndef _O_BINARY
# define _O_BINARY 0
#endif
#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
#define XFREE(stale) do { \
if (stale) { free (stale); stale = 0; } \
} while (0)
#if defined LT_DEBUGWRAPPER
static int lt_debug = 1;
#else
static int lt_debug = 0;
#endif
const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
void *xmalloc (size_t num);
char *xstrdup (const char *string);
const char *base_name (const char *name);
char *find_executable (const char *wrapper);
char *chase_symlinks (const char *pathspec);
int make_executable (const char *path);
int check_executable (const char *path);
char *strendzap (char *str, const char *pat);
void lt_debugprintf (const char *file, int line, const char *fmt, ...);
void lt_fatal (const char *file, int line, const char *message, ...);
static const char *nonnull (const char *s);
static const char *nonempty (const char *s);
void lt_setenv (const char *name, const char *value);
char *lt_extend_str (const char *orig_value, const char *add, int to_end);
void lt_update_exe_path (const char *name, const char *value);
void lt_update_lib_path (const char *name, const char *value);
char **prepare_spawn (char **argv);
void lt_dump_script (FILE *f);
EOF
cat <= 0)
&& (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
return 1;
else
return 0;
}
int
make_executable (const char *path)
{
int rval = 0;
struct stat st;
lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
nonempty (path));
if ((!path) || (!*path))
return 0;
if (stat (path, &st) >= 0)
{
rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
}
return rval;
}
/* Searches for the full path of the wrapper. Returns
newly allocated full path name if found, NULL otherwise
Does not chase symlinks, even on platforms that support them.
*/
char *
find_executable (const char *wrapper)
{
int has_slash = 0;
const char *p;
const char *p_next;
/* static buffer for getcwd */
char tmp[LT_PATHMAX + 1];
size_t tmp_len;
char *concat_name;
lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
nonempty (wrapper));
if ((wrapper == NULL) || (*wrapper == '\0'))
return NULL;
/* Absolute path? */
#if defined HAVE_DOS_BASED_FILE_SYSTEM
if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
{
concat_name = xstrdup (wrapper);
if (check_executable (concat_name))
return concat_name;
XFREE (concat_name);
}
else
{
#endif
if (IS_DIR_SEPARATOR (wrapper[0]))
{
concat_name = xstrdup (wrapper);
if (check_executable (concat_name))
return concat_name;
XFREE (concat_name);
}
#if defined HAVE_DOS_BASED_FILE_SYSTEM
}
#endif
for (p = wrapper; *p; p++)
if (*p == '/')
{
has_slash = 1;
break;
}
if (!has_slash)
{
/* no slashes; search PATH */
const char *path = getenv ("PATH");
if (path != NULL)
{
for (p = path; *p; p = p_next)
{
const char *q;
size_t p_len;
for (q = p; *q; q++)
if (IS_PATH_SEPARATOR (*q))
break;
p_len = (size_t) (q - p);
p_next = (*q == '\0' ? q : q + 1);
if (p_len == 0)
{
/* empty path: current directory */
if (getcwd (tmp, LT_PATHMAX) == NULL)
lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
nonnull (strerror (errno)));
tmp_len = strlen (tmp);
concat_name =
XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
memcpy (concat_name, tmp, tmp_len);
concat_name[tmp_len] = '/';
strcpy (concat_name + tmp_len + 1, wrapper);
}
else
{
concat_name =
XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
memcpy (concat_name, p, p_len);
concat_name[p_len] = '/';
strcpy (concat_name + p_len + 1, wrapper);
}
if (check_executable (concat_name))
return concat_name;
XFREE (concat_name);
}
}
/* not found in PATH; assume curdir */
}
/* Relative path | not found in path: prepend cwd */
if (getcwd (tmp, LT_PATHMAX) == NULL)
lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
nonnull (strerror (errno)));
tmp_len = strlen (tmp);
concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
memcpy (concat_name, tmp, tmp_len);
concat_name[tmp_len] = '/';
strcpy (concat_name + tmp_len + 1, wrapper);
if (check_executable (concat_name))
return concat_name;
XFREE (concat_name);
return NULL;
}
char *
chase_symlinks (const char *pathspec)
{
#ifndef S_ISLNK
return xstrdup (pathspec);
#else
char buf[LT_PATHMAX];
struct stat s;
char *tmp_pathspec = xstrdup (pathspec);
char *p;
int has_symlinks = 0;
while (strlen (tmp_pathspec) && !has_symlinks)
{
lt_debugprintf (__FILE__, __LINE__,
"checking path component for symlinks: %s\n",
tmp_pathspec);
if (lstat (tmp_pathspec, &s) == 0)
{
if (S_ISLNK (s.st_mode) != 0)
{
has_symlinks = 1;
break;
}
/* search backwards for last DIR_SEPARATOR */
p = tmp_pathspec + strlen (tmp_pathspec) - 1;
while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
p--;
if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
{
/* no more DIR_SEPARATORS left */
break;
}
*p = '\0';
}
else
{
lt_fatal (__FILE__, __LINE__,
"error accessing file \"%s\": %s",
tmp_pathspec, nonnull (strerror (errno)));
}
}
XFREE (tmp_pathspec);
if (!has_symlinks)
{
return xstrdup (pathspec);
}
tmp_pathspec = realpath (pathspec, buf);
if (tmp_pathspec == 0)
{
lt_fatal (__FILE__, __LINE__,
"could not follow symlinks for %s", pathspec);
}
return xstrdup (tmp_pathspec);
#endif
}
char *
strendzap (char *str, const char *pat)
{
size_t len, patlen;
assert (str != NULL);
assert (pat != NULL);
len = strlen (str);
patlen = strlen (pat);
if (patlen <= len)
{
str += len - patlen;
if (STREQ (str, pat))
*str = '\0';
}
return str;
}
void
lt_debugprintf (const char *file, int line, const char *fmt, ...)
{
va_list args;
if (lt_debug)
{
(void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
va_start (args, fmt);
(void) vfprintf (stderr, fmt, args);
va_end (args);
}
}
static void
lt_error_core (int exit_status, const char *file,
int line, const char *mode,
const char *message, va_list ap)
{
fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
vfprintf (stderr, message, ap);
fprintf (stderr, ".\n");
if (exit_status >= 0)
exit (exit_status);
}
void
lt_fatal (const char *file, int line, const char *message, ...)
{
va_list ap;
va_start (ap, message);
lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
va_end (ap);
}
static const char *
nonnull (const char *s)
{
return s ? s : "(null)";
}
static const char *
nonempty (const char *s)
{
return (s && !*s) ? "(empty)" : nonnull (s);
}
void
lt_setenv (const char *name, const char *value)
{
lt_debugprintf (__FILE__, __LINE__,
"(lt_setenv) setting '%s' to '%s'\n",
nonnull (name), nonnull (value));
{
#ifdef HAVE_SETENV
/* always make a copy, for consistency with !HAVE_SETENV */
char *str = xstrdup (value);
setenv (name, str, 1);
#else
size_t len = strlen (name) + 1 + strlen (value) + 1;
char *str = XMALLOC (char, len);
sprintf (str, "%s=%s", name, value);
if (putenv (str) != EXIT_SUCCESS)
{
XFREE (str);
}
#endif
}
}
char *
lt_extend_str (const char *orig_value, const char *add, int to_end)
{
char *new_value;
if (orig_value && *orig_value)
{
size_t orig_value_len = strlen (orig_value);
size_t add_len = strlen (add);
new_value = XMALLOC (char, add_len + orig_value_len + 1);
if (to_end)
{
strcpy (new_value, orig_value);
strcpy (new_value + orig_value_len, add);
}
else
{
strcpy (new_value, add);
strcpy (new_value + add_len, orig_value);
}
}
else
{
new_value = xstrdup (add);
}
return new_value;
}
void
lt_update_exe_path (const char *name, const char *value)
{
lt_debugprintf (__FILE__, __LINE__,
"(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
nonnull (name), nonnull (value));
if (name && *name && value && *value)
{
char *new_value = lt_extend_str (getenv (name), value, 0);
/* some systems can't cope with a ':'-terminated path #' */
size_t len = strlen (new_value);
while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
{
new_value[--len] = '\0';
}
lt_setenv (name, new_value);
XFREE (new_value);
}
}
void
lt_update_lib_path (const char *name, const char *value)
{
lt_debugprintf (__FILE__, __LINE__,
"(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
nonnull (name), nonnull (value));
if (name && *name && value && *value)
{
char *new_value = lt_extend_str (getenv (name), value, 0);
lt_setenv (name, new_value);
XFREE (new_value);
}
}
EOF
case $host_os in
mingw*)
cat <<"EOF"
/* Prepares an argument vector before calling spawn().
Note that spawn() does not by itself call the command interpreter
(getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&v);
v.dwPlatformId == VER_PLATFORM_WIN32_NT;
}) ? "cmd.exe" : "command.com").
Instead it simply concatenates the arguments, separated by ' ', and calls
CreateProcess(). We must quote the arguments since Win32 CreateProcess()
interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
special way:
- Space and tab are interpreted as delimiters. They are not treated as
delimiters if they are surrounded by double quotes: "...".
- Unescaped double quotes are removed from the input. Their only effect is
that within double quotes, space and tab are treated like normal
characters.
- Backslashes not followed by double quotes are not special.
- But 2*n+1 backslashes followed by a double quote become
n backslashes followed by a double quote (n >= 0):
\" -> "
\\\" -> \"
\\\\\" -> \\"
*/
#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
char **
prepare_spawn (char **argv)
{
size_t argc;
char **new_argv;
size_t i;
/* Count number of arguments. */
for (argc = 0; argv[argc] != NULL; argc++)
;
/* Allocate new argument vector. */
new_argv = XMALLOC (char *, argc + 1);
/* Put quoted arguments into the new argument vector. */
for (i = 0; i < argc; i++)
{
const char *string = argv[i];
if (string[0] == '\0')
new_argv[i] = xstrdup ("\"\"");
else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
{
int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
size_t length;
unsigned int backslashes;
const char *s;
char *quoted_string;
char *p;
length = 0;
backslashes = 0;
if (quote_around)
length++;
for (s = string; *s != '\0'; s++)
{
char c = *s;
if (c == '"')
length += backslashes + 1;
length++;
if (c == '\\')
backslashes++;
else
backslashes = 0;
}
if (quote_around)
length += backslashes + 1;
quoted_string = XMALLOC (char, length + 1);
p = quoted_string;
backslashes = 0;
if (quote_around)
*p++ = '"';
for (s = string; *s != '\0'; s++)
{
char c = *s;
if (c == '"')
{
unsigned int j;
for (j = backslashes + 1; j > 0; j--)
*p++ = '\\';
}
*p++ = c;
if (c == '\\')
backslashes++;
else
backslashes = 0;
}
if (quote_around)
{
unsigned int j;
for (j = backslashes; j > 0; j--)
*p++ = '\\';
*p++ = '"';
}
*p = '\0';
new_argv[i] = quoted_string;
}
else
new_argv[i] = (char *) string;
}
new_argv[argc] = NULL;
return new_argv;
}
EOF
;;
esac
cat <<"EOF"
void lt_dump_script (FILE* f)
{
EOF
func_emit_wrapper yes |
$SED -n -e '
s/^\(.\{79\}\)\(..*\)/\1\
\2/
h
s/\([\\"]\)/\\\1/g
s/$/\\n/
s/\([^\n]*\).*/ fputs ("\1", f);/p
g
D'
cat <<"EOF"
}
EOF
}
# end: func_emit_cwrapperexe_src
# func_win32_import_lib_p ARG
# True if ARG is an import lib, as indicated by $file_magic_cmd
func_win32_import_lib_p ()
{
$debug_cmd
case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
*import*) : ;;
*) false ;;
esac
}
# func_suncc_cstd_abi
# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
# Several compiler flags select an ABI that is incompatible with the
# Cstd library. Avoid specifying it if any are in CXXFLAGS.
func_suncc_cstd_abi ()
{
$debug_cmd
case " $compile_command " in
*" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
suncc_use_cstd_abi=no
;;
*)
suncc_use_cstd_abi=yes
;;
esac
}
# func_mode_link arg...
func_mode_link ()
{
$debug_cmd
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
# It is impossible to link a dll without this setting, and
# we shouldn't force the makefile maintainer to figure out
# what system we are compiling for in order to pass an extra
# flag for every libtool invocation.
# allow_undefined=no
# FIXME: Unfortunately, there are problems with the above when trying
# to make a dll that has undefined symbols, in which case not
# even a static library is built. For now, we need to specify
# -no-undefined on the libtool link line when we can be certain
# that all symbols are satisfied, otherwise we get a static library.
allow_undefined=yes
;;
*)
allow_undefined=yes
;;
esac
libtool_args=$nonopt
base_compile="$nonopt $@"
compile_command=$nonopt
finalize_command=$nonopt
compile_rpath=
finalize_rpath=
compile_shlibpath=
finalize_shlibpath=
convenience=
old_convenience=
deplibs=
old_deplibs=
compiler_flags=
linker_flags=
dllsearchpath=
lib_search_path=`pwd`
inst_prefix_dir=
new_inherited_linker_flags=
avoid_version=no
bindir=
dlfiles=
dlprefiles=
dlself=no
export_dynamic=no
export_symbols=
export_symbols_regex=
generated=
libobjs=
ltlibs=
module=no
no_install=no
objs=
os2dllname=
non_pic_objects=
precious_files_regex=
prefer_static_libs=no
preload=false
prev=
prevarg=
release=
rpath=
xrpath=
perm_rpath=
temp_rpath=
thread_safe=no
vinfo=
vinfo_number=no
weak_libs=
single_module=$wl-single_module
func_infer_tag $base_compile
# We need to know -static, to get the right output filenames.
for arg
do
case $arg in
-shared)
test yes != "$build_libtool_libs" \
&& func_fatal_configuration "cannot build a shared library"
build_old_libs=no
break
;;
-all-static | -static | -static-libtool-libs)
case $arg in
-all-static)
if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
func_warning "complete static linking is impossible in this configuration"
fi
if test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
fi
prefer_static_libs=yes
;;
-static)
if test -z "$pic_flag" && test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
fi
prefer_static_libs=built
;;
-static-libtool-libs)
if test -z "$pic_flag" && test -n "$link_static_flag"; then
dlopen_self=$dlopen_self_static
fi
prefer_static_libs=yes
;;
esac
build_libtool_libs=no
build_old_libs=yes
break
;;
esac
done
# See if our shared archives depend on static archives.
test -n "$old_archive_from_new_cmds" && build_old_libs=yes
# Go through the arguments, transforming them on the way.
while test "$#" -gt 0; do
arg=$1
shift
func_quote_arg pretty,unquoted "$arg"
qarg=$func_quote_arg_unquoted_result
func_append libtool_args " $func_quote_arg_result"
# If the previous option needs an argument, assign it.
if test -n "$prev"; then
case $prev in
output)
func_append compile_command " @OUTPUT@"
func_append finalize_command " @OUTPUT@"
;;
esac
case $prev in
bindir)
bindir=$arg
prev=
continue
;;
dlfiles|dlprefiles)
$preload || {
# Add the symbol object into the linking commands.
func_append compile_command " @SYMFILE@"
func_append finalize_command " @SYMFILE@"
preload=:
}
case $arg in
*.la | *.lo) ;; # We handle these cases below.
force)
if test no = "$dlself"; then
dlself=needless
export_dynamic=yes
fi
prev=
continue
;;
self)
if test dlprefiles = "$prev"; then
dlself=yes
elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
dlself=yes
else
dlself=needless
export_dynamic=yes
fi
prev=
continue
;;
*)
if test dlfiles = "$prev"; then
func_append dlfiles " $arg"
else
func_append dlprefiles " $arg"
fi
prev=
continue
;;
esac
;;
expsyms)
export_symbols=$arg
test -f "$arg" \
|| func_fatal_error "symbol file '$arg' does not exist"
prev=
continue
;;
expsyms_regex)
export_symbols_regex=$arg
prev=
continue
;;
framework)
case $host in
*-*-darwin*)
case "$deplibs " in
*" $qarg.ltframework "*) ;;
*) func_append deplibs " $qarg.ltframework" # this is fixed later
;;
esac
;;
esac
prev=
continue
;;
inst_prefix)
inst_prefix_dir=$arg
prev=
continue
;;
mllvm)
# Clang does not use LLVM to link, so we can simply discard any
# '-mllvm $arg' options when doing the link step.
prev=
continue
;;
objectlist)
if test -f "$arg"; then
save_arg=$arg
moreargs=
for fil in `cat "$save_arg"`
do
# func_append moreargs " $fil"
arg=$fil
# A libtool-controlled object.
# Check to see that this really is a libtool object.
if func_lalib_unsafe_p "$arg"; then
pic_object=
non_pic_object=
# Read the .lo file
func_source "$arg"
if test -z "$pic_object" ||
test -z "$non_pic_object" ||
test none = "$pic_object" &&
test none = "$non_pic_object"; then
func_fatal_error "cannot find name of object for '$arg'"
fi
# Extract subdirectory from the argument.
func_dirname "$arg" "/" ""
xdir=$func_dirname_result
if test none != "$pic_object"; then
# Prepend the subdirectory the object is found in.
pic_object=$xdir$pic_object
if test dlfiles = "$prev"; then
if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
func_append dlfiles " $pic_object"
prev=
continue
else
# If libtool objects are unsupported, then we need to preload.
prev=dlprefiles
fi
fi
# CHECK ME: I think I busted this. -Ossama
if test dlprefiles = "$prev"; then
# Preload the old-style object.
func_append dlprefiles " $pic_object"
prev=
fi
# A PIC object.
func_append libobjs " $pic_object"
arg=$pic_object
fi
# Non-PIC object.
if test none != "$non_pic_object"; then
# Prepend the subdirectory the object is found in.
non_pic_object=$xdir$non_pic_object
# A standard non-PIC object
func_append non_pic_objects " $non_pic_object"
if test -z "$pic_object" || test none = "$pic_object"; then
arg=$non_pic_object
fi
else
# If the PIC object exists, use it instead.
# $xdir was prepended to $pic_object above.
non_pic_object=$pic_object
func_append non_pic_objects " $non_pic_object"
fi
else
# Only an error if not doing a dry-run.
if $opt_dry_run; then
# Extract subdirectory from the argument.
func_dirname "$arg" "/" ""
xdir=$func_dirname_result
func_lo2o "$arg"
pic_object=$xdir$objdir/$func_lo2o_result
non_pic_object=$xdir$func_lo2o_result
func_append libobjs " $pic_object"
func_append non_pic_objects " $non_pic_object"
else
func_fatal_error "'$arg' is not a valid libtool object"
fi
fi
done
else
func_fatal_error "link input file '$arg' does not exist"
fi
arg=$save_arg
prev=
continue
;;
os2dllname)
os2dllname=$arg
prev=
continue
;;
precious_regex)
precious_files_regex=$arg
prev=
continue
;;
release)
release=-$arg
prev=
continue
;;
rpath | xrpath)
# We need an absolute path.
case $arg in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
func_fatal_error "only absolute run-paths are allowed"
;;
esac
if test rpath = "$prev"; then
case "$rpath " in
*" $arg "*) ;;
*) func_append rpath " $arg" ;;
esac
else
case "$xrpath " in
*" $arg "*) ;;
*) func_append xrpath " $arg" ;;
esac
fi
prev=
continue
;;
shrext)
shrext_cmds=$arg
prev=
continue
;;
weak)
func_append weak_libs " $arg"
prev=
continue
;;
xassembler)
func_append compiler_flags " -Xassembler $qarg"
prev=
func_append compile_command " -Xassembler $qarg"
func_append finalize_command " -Xassembler $qarg"
continue
;;
xcclinker)
func_append linker_flags " $qarg"
func_append compiler_flags " $qarg"
prev=
func_append compile_command " $qarg"
func_append finalize_command " $qarg"
continue
;;
xcompiler)
func_append compiler_flags " $qarg"
prev=
func_append compile_command " $qarg"
func_append finalize_command " $qarg"
continue
;;
xlinker)
func_append linker_flags " $qarg"
func_append compiler_flags " $wl$qarg"
prev=
func_append compile_command " $wl$qarg"
func_append finalize_command " $wl$qarg"
continue
;;
*)
eval "$prev=\"\$arg\""
prev=
continue
;;
esac
fi # test -n "$prev"
prevarg=$arg
case $arg in
-all-static)
if test -n "$link_static_flag"; then
# See comment for -static flag below, for more details.
func_append compile_command " $link_static_flag"
func_append finalize_command " $link_static_flag"
fi
continue
;;
-allow-undefined)
# FIXME: remove this flag sometime in the future.
func_fatal_error "'-allow-undefined' must not be used because it is the default"
;;
-avoid-version)
avoid_version=yes
continue
;;
-bindir)
prev=bindir
continue
;;
-dlopen)
prev=dlfiles
continue
;;
-dlpreopen)
prev=dlprefiles
continue
;;
-export-dynamic)
export_dynamic=yes
continue
;;
-export-symbols | -export-symbols-regex)
if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
func_fatal_error "more than one -exported-symbols argument is not allowed"
fi
if test X-export-symbols = "X$arg"; then
prev=expsyms
else
prev=expsyms_regex
fi
continue
;;
-framework)
prev=framework
continue
;;
-inst-prefix-dir)
prev=inst_prefix
continue
;;
# The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
# so, if we see these flags be careful not to treat them like -L
-L[A-Z][A-Z]*:*)
case $with_gcc/$host in
no/*-*-irix* | /*-*-irix*)
func_append compile_command " $arg"
func_append finalize_command " $arg"
;;
esac
continue
;;
-L*)
func_stripname "-L" '' "$arg"
if test -z "$func_stripname_result"; then
if test "$#" -gt 0; then
func_fatal_error "require no space between '-L' and '$1'"
else
func_fatal_error "need path for '-L' option"
fi
fi
func_resolve_sysroot "$func_stripname_result"
dir=$func_resolve_sysroot_result
# We need an absolute path.
case $dir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
absdir=`cd "$dir" && pwd`
test -z "$absdir" && \
func_fatal_error "cannot determine absolute directory name of '$dir'"
dir=$absdir
;;
esac
case "$deplibs " in
*" -L$dir "* | *" $arg "*)
# Will only happen for absolute or sysroot arguments
;;
*)
# Preserve sysroot, but never include relative directories
case $dir in
[\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
*) func_append deplibs " -L$dir" ;;
esac
func_append lib_search_path " $dir"
;;
esac
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
case :$dllsearchpath: in
*":$dir:"*) ;;
::) dllsearchpath=$dir;;
*) func_append dllsearchpath ":$dir";;
esac
case :$dllsearchpath: in
*":$testbindir:"*) ;;
::) dllsearchpath=$testbindir;;
*) func_append dllsearchpath ":$testbindir";;
esac
;;
esac
continue
;;
-l*)
if test X-lc = "X$arg" || test X-lm = "X$arg"; then
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
# These systems don't actually have a C or math library (as such)
continue
;;
*-*-os2*)
# These systems don't actually have a C library (as such)
test X-lc = "X$arg" && continue
;;
*-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
# Do not include libc due to us having libc/libc_r.
test X-lc = "X$arg" && continue
;;
*-*-rhapsody* | *-*-darwin1.[012])
# Rhapsody C and math libraries are in the System framework
func_append deplibs " System.ltframework"
continue
;;
*-*-sco3.2v5* | *-*-sco5v6*)
# Causes problems with __ctype
test X-lc = "X$arg" && continue
;;
*-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
# Compiler inserts libc in the correct place for threads to work
test X-lc = "X$arg" && continue
;;
esac
elif test X-lc_r = "X$arg"; then
case $host in
*-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
# Do not include libc_r directly, use -pthread flag.
continue
;;
esac
fi
func_append deplibs " $arg"
continue
;;
-mllvm)
prev=mllvm
continue
;;
-module)
module=yes
continue
;;
# Tru64 UNIX uses -model [arg] to determine the layout of C++
# classes, name mangling, and exception handling.
# Darwin uses the -arch flag to determine output architecture.
-model|-arch|-isysroot|--sysroot)
func_append compiler_flags " $arg"
func_append compile_command " $arg"
func_append finalize_command " $arg"
prev=xcompiler
continue
;;
# Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
-pthread)
case $host in
*solaris2*) ;;
*)
case "$new_inherited_linker_flags " in
*" $arg "*) ;;
* ) func_append new_inherited_linker_flags " $arg" ;;
esac
;;
esac
continue
;;
-mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
|-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
func_append compiler_flags " $arg"
func_append compile_command " $arg"
func_append finalize_command " $arg"
case "$new_inherited_linker_flags " in
*" $arg "*) ;;
* ) func_append new_inherited_linker_flags " $arg" ;;
esac
continue
;;
-multi_module)
single_module=$wl-multi_module
continue
;;
-no-fast-install)
fast_install=no
continue
;;
-no-install)
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
# The PATH hackery in wrapper scripts is required on Windows
# and Darwin in order for the loader to find any dlls it needs.
func_warning "'-no-install' is ignored for $host"
func_warning "assuming '-no-fast-install' instead"
fast_install=no
;;
*) no_install=yes ;;
esac
continue
;;
-no-undefined)
allow_undefined=no
continue
;;
-objectlist)
prev=objectlist
continue
;;
-os2dllname)
prev=os2dllname
continue
;;
-o) prev=output ;;
-precious-files-regex)
prev=precious_regex
continue
;;
-release)
prev=release
continue
;;
-rpath)
prev=rpath
continue
;;
-R)
prev=xrpath
continue
;;
-R*)
func_stripname '-R' '' "$arg"
dir=$func_stripname_result
# We need an absolute path.
case $dir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
=*)
func_stripname '=' '' "$dir"
dir=$lt_sysroot$func_stripname_result
;;
*)
func_fatal_error "only absolute run-paths are allowed"
;;
esac
case "$xrpath " in
*" $dir "*) ;;
*) func_append xrpath " $dir" ;;
esac
continue
;;
-shared)
# The effects of -shared are defined in a previous loop.
continue
;;
-shrext)
prev=shrext
continue
;;
-static | -static-libtool-libs)
# The effects of -static are defined in a previous loop.
# We used to do the same as -all-static on platforms that
# didn't have a PIC flag, but the assumption that the effects
# would be equivalent was wrong. It would break on at least
# Digital Unix and AIX.
continue
;;
-thread-safe)
thread_safe=yes
continue
;;
-version-info)
prev=vinfo
continue
;;
-version-number)
prev=vinfo
vinfo_number=yes
continue
;;
-weak)
prev=weak
continue
;;
-Wc,*)
func_stripname '-Wc,' '' "$arg"
args=$func_stripname_result
arg=
save_ifs=$IFS; IFS=,
for flag in $args; do
IFS=$save_ifs
func_quote_arg pretty "$flag"
func_append arg " $func_quote_arg_result"
func_append compiler_flags " $func_quote_arg_result"
done
IFS=$save_ifs
func_stripname ' ' '' "$arg"
arg=$func_stripname_result
;;
-Wl,*)
func_stripname '-Wl,' '' "$arg"
args=$func_stripname_result
arg=
save_ifs=$IFS; IFS=,
for flag in $args; do
IFS=$save_ifs
func_quote_arg pretty "$flag"
func_append arg " $wl$func_quote_arg_result"
func_append compiler_flags " $wl$func_quote_arg_result"
func_append linker_flags " $func_quote_arg_result"
done
IFS=$save_ifs
func_stripname ' ' '' "$arg"
arg=$func_stripname_result
;;
-Xassembler)
prev=xassembler
continue
;;
-Xcompiler)
prev=xcompiler
continue
;;
-Xlinker)
prev=xlinker
continue
;;
-XCClinker)
prev=xcclinker
continue
;;
# -msg_* for osf cc
-msg_*)
func_quote_arg pretty "$arg"
arg=$func_quote_arg_result
;;
# Flags to be passed through unchanged, with rationale:
# -64, -mips[0-9] enable 64-bit mode for the SGI compiler
# -r[0-9][0-9]* specify processor for the SGI compiler
# -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
# +DA*, +DD* enable 64-bit mode for the HP compiler
# -q* compiler args for the IBM compiler
# -m*, -t[45]*, -txscale* architecture-specific flags for GCC
# -F/path path to uninstalled frameworks, gcc on darwin
# -p, -pg, --coverage, -fprofile-* profiling flags for GCC
# -fstack-protector* stack protector flags for GCC
# @file GCC response files
# -tp=* Portland pgcc target processor selection
# --sysroot=* for sysroot support
# -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
# -specs=* GCC specs files
# -stdlib=* select c++ std lib with clang
# -fsanitize=* Clang/GCC memory and address sanitizer
# -fuse-ld=* Linker select flags for GCC
# -static-* direct GCC to link specific libraries statically
# -fcilkplus Cilk Plus language extension features for C/C++
# -Wa,* Pass flags directly to the assembler
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
-specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus|-Wa,*)
func_quote_arg pretty "$arg"
arg=$func_quote_arg_result
func_append compile_command " $arg"
func_append finalize_command " $arg"
func_append compiler_flags " $arg"
continue
;;
-Z*)
if test os2 = "`expr $host : '.*\(os2\)'`"; then
# OS/2 uses -Zxxx to specify OS/2-specific options
compiler_flags="$compiler_flags $arg"
func_append compile_command " $arg"
func_append finalize_command " $arg"
case $arg in
-Zlinker | -Zstack)
prev=xcompiler
;;
esac
continue
else
# Otherwise treat like 'Some other compiler flag' below
func_quote_arg pretty "$arg"
arg=$func_quote_arg_result
fi
;;
# Some other compiler flag.
-* | +*)
func_quote_arg pretty "$arg"
arg=$func_quote_arg_result
;;
*.$objext)
# A standard object.
func_append objs " $arg"
;;
*.lo)
# A libtool-controlled object.
# Check to see that this really is a libtool object.
if func_lalib_unsafe_p "$arg"; then
pic_object=
non_pic_object=
# Read the .lo file
func_source "$arg"
if test -z "$pic_object" ||
test -z "$non_pic_object" ||
test none = "$pic_object" &&
test none = "$non_pic_object"; then
func_fatal_error "cannot find name of object for '$arg'"
fi
# Extract subdirectory from the argument.
func_dirname "$arg" "/" ""
xdir=$func_dirname_result
test none = "$pic_object" || {
# Prepend the subdirectory the object is found in.
pic_object=$xdir$pic_object
if test dlfiles = "$prev"; then
if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
func_append dlfiles " $pic_object"
prev=
continue
else
# If libtool objects are unsupported, then we need to preload.
prev=dlprefiles
fi
fi
# CHECK ME: I think I busted this. -Ossama
if test dlprefiles = "$prev"; then
# Preload the old-style object.
func_append dlprefiles " $pic_object"
prev=
fi
# A PIC object.
func_append libobjs " $pic_object"
arg=$pic_object
}
# Non-PIC object.
if test none != "$non_pic_object"; then
# Prepend the subdirectory the object is found in.
non_pic_object=$xdir$non_pic_object
# A standard non-PIC object
func_append non_pic_objects " $non_pic_object"
if test -z "$pic_object" || test none = "$pic_object"; then
arg=$non_pic_object
fi
else
# If the PIC object exists, use it instead.
# $xdir was prepended to $pic_object above.
non_pic_object=$pic_object
func_append non_pic_objects " $non_pic_object"
fi
else
# Only an error if not doing a dry-run.
if $opt_dry_run; then
# Extract subdirectory from the argument.
func_dirname "$arg" "/" ""
xdir=$func_dirname_result
func_lo2o "$arg"
pic_object=$xdir$objdir/$func_lo2o_result
non_pic_object=$xdir$func_lo2o_result
func_append libobjs " $pic_object"
func_append non_pic_objects " $non_pic_object"
else
func_fatal_error "'$arg' is not a valid libtool object"
fi
fi
;;
*.$libext)
# An archive.
func_append deplibs " $arg"
func_append old_deplibs " $arg"
continue
;;
*.la)
# A libtool-controlled library.
func_resolve_sysroot "$arg"
if test dlfiles = "$prev"; then
# This library was specified with -dlopen.
func_append dlfiles " $func_resolve_sysroot_result"
prev=
elif test dlprefiles = "$prev"; then
# The library was specified with -dlpreopen.
func_append dlprefiles " $func_resolve_sysroot_result"
prev=
else
func_append deplibs " $func_resolve_sysroot_result"
fi
continue
;;
# Some other compiler argument.
*)
# Unknown arguments in both finalize_command and compile_command need
# to be aesthetically quoted because they are evaled later.
func_quote_arg pretty "$arg"
arg=$func_quote_arg_result
;;
esac # arg
# Now actually substitute the argument into the commands.
if test -n "$arg"; then
func_append compile_command " $arg"
func_append finalize_command " $arg"
fi
done # argument parsing loop
test -n "$prev" && \
func_fatal_help "the '$prevarg' option requires an argument"
if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
eval arg=\"$export_dynamic_flag_spec\"
func_append compile_command " $arg"
func_append finalize_command " $arg"
fi
oldlibs=
# calculate the name of the file, without its directory
func_basename "$output"
outputname=$func_basename_result
libobjs_save=$libobjs
if test -n "$shlibpath_var"; then
# get the directories listed in $shlibpath_var
eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
else
shlib_search_path=
fi
eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
# Definition is injected by LT_CONFIG during libtool generation.
func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
func_dirname "$output" "/" ""
output_objdir=$func_dirname_result$objdir
func_to_tool_file "$output_objdir/"
tool_output_objdir=$func_to_tool_file_result
# Create the object directory.
func_mkdir_p "$output_objdir"
# Determine the type of output
case $output in
"")
func_fatal_help "you must specify an output file"
;;
*.$libext) linkmode=oldlib ;;
*.lo | *.$objext) linkmode=obj ;;
*.la) linkmode=lib ;;
*) linkmode=prog ;; # Anything else should be a program.
esac
specialdeplibs=
libs=
# Find all interdependent deplibs by searching for libraries
# that are linked more than once (e.g. -la -lb -la)
for deplib in $deplibs; do
if $opt_preserve_dup_deps; then
case "$libs " in
*" $deplib "*) func_append specialdeplibs " $deplib" ;;
esac
fi
func_append libs " $deplib"
done
if test lib = "$linkmode"; then
libs="$predeps $libs $compiler_lib_search_path $postdeps"
# Compute libraries that are listed more than once in $predeps
# $postdeps and mark them as special (i.e., whose duplicates are
# not to be eliminated).
pre_post_deps=
if $opt_duplicate_compiler_generated_deps; then
for pre_post_dep in $predeps $postdeps; do
case "$pre_post_deps " in
*" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
esac
func_append pre_post_deps " $pre_post_dep"
done
fi
pre_post_deps=
fi
deplibs=
newdependency_libs=
newlib_search_path=
need_relink=no # whether we're linking any uninstalled libtool libraries
notinst_deplibs= # not-installed libtool libraries
notinst_path= # paths that contain not-installed libtool libraries
case $linkmode in
lib)
passes="conv dlpreopen link"
for file in $dlfiles $dlprefiles; do
case $file in
*.la) ;;
*)
func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
;;
esac
done
;;
prog)
compile_deplibs=
finalize_deplibs=
alldeplibs=false
newdlfiles=
newdlprefiles=
passes="conv scan dlopen dlpreopen link"
;;
*) passes="conv"
;;
esac
for pass in $passes; do
# The preopen pass in lib mode reverses $deplibs; put it back here
# so that -L comes before libs that need it for instance...
if test lib,link = "$linkmode,$pass"; then
## FIXME: Find the place where the list is rebuilt in the wrong
## order, and fix it there properly
tmp_deplibs=
for deplib in $deplibs; do
tmp_deplibs="$deplib $tmp_deplibs"
done
deplibs=$tmp_deplibs
fi
if test lib,link = "$linkmode,$pass" ||
test prog,scan = "$linkmode,$pass"; then
libs=$deplibs
deplibs=
fi
if test prog = "$linkmode"; then
case $pass in
dlopen) libs=$dlfiles ;;
dlpreopen) libs=$dlprefiles ;;
link)
libs="$deplibs %DEPLIBS%"
test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
;;
esac
fi
if test lib,dlpreopen = "$linkmode,$pass"; then
# Collect and forward deplibs of preopened libtool libs
for lib in $dlprefiles; do
# Ignore non-libtool-libs
dependency_libs=
func_resolve_sysroot "$lib"
case $lib in
*.la) func_source "$func_resolve_sysroot_result" ;;
esac
# Collect preopened libtool deplibs, except any this library
# has declared as weak libs
for deplib in $dependency_libs; do
func_basename "$deplib"
deplib_base=$func_basename_result
case " $weak_libs " in
*" $deplib_base "*) ;;
*) func_append deplibs " $deplib" ;;
esac
done
done
libs=$dlprefiles
fi
if test dlopen = "$pass"; then
# Collect dlpreopened libraries
save_deplibs=$deplibs
deplibs=
fi
for deplib in $libs; do
lib=
found=false
case $deplib in
-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
|-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
if test prog,link = "$linkmode,$pass"; then
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
else
func_append compiler_flags " $deplib"
if test lib = "$linkmode"; then
case "$new_inherited_linker_flags " in
*" $deplib "*) ;;
* ) func_append new_inherited_linker_flags " $deplib" ;;
esac
fi
fi
continue
;;
-l*)
if test lib != "$linkmode" && test prog != "$linkmode"; then
func_warning "'-l' is ignored for archives/objects"
continue
fi
func_stripname '-l' '' "$deplib"
name=$func_stripname_result
if test lib = "$linkmode"; then
searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
else
searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
fi
for searchdir in $searchdirs; do
for search_ext in .la $std_shrext .so .a; do
# Search the libtool library
lib=$searchdir/lib$name$search_ext
if test -f "$lib"; then
if test .la = "$search_ext"; then
found=:
else
found=false
fi
break 2
fi
done
done
if $found; then
# deplib is a libtool library
# If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
# We need to do some special things here, and not later.
if test yes = "$allow_libtool_libs_with_static_runtimes"; then
case " $predeps $postdeps " in
*" $deplib "*)
if func_lalib_p "$lib"; then
library_names=
old_library=
func_source "$lib"
for l in $old_library $library_names; do
ll=$l
done
if test "X$ll" = "X$old_library"; then # only static version available
found=false
func_dirname "$lib" "" "."
ladir=$func_dirname_result
lib=$ladir/$old_library
if test prog,link = "$linkmode,$pass"; then
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
else
deplibs="$deplib $deplibs"
test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
fi
continue
fi
fi
;;
*) ;;
esac
fi
else
# deplib doesn't seem to be a libtool library
if test prog,link = "$linkmode,$pass"; then
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
else
deplibs="$deplib $deplibs"
test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
fi
continue
fi
;; # -l
*.ltframework)
if test prog,link = "$linkmode,$pass"; then
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
else
deplibs="$deplib $deplibs"
if test lib = "$linkmode"; then
case "$new_inherited_linker_flags " in
*" $deplib "*) ;;
* ) func_append new_inherited_linker_flags " $deplib" ;;
esac
fi
fi
continue
;;
-L*)
case $linkmode in
lib)
deplibs="$deplib $deplibs"
test conv = "$pass" && continue
newdependency_libs="$deplib $newdependency_libs"
func_stripname '-L' '' "$deplib"
func_resolve_sysroot "$func_stripname_result"
func_append newlib_search_path " $func_resolve_sysroot_result"
;;
prog)
if test conv = "$pass"; then
deplibs="$deplib $deplibs"
continue
fi
if test scan = "$pass"; then
deplibs="$deplib $deplibs"
else
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
fi
func_stripname '-L' '' "$deplib"
func_resolve_sysroot "$func_stripname_result"
func_append newlib_search_path " $func_resolve_sysroot_result"
;;
*)
func_warning "'-L' is ignored for archives/objects"
;;
esac # linkmode
continue
;; # -L
-R*)
if test link = "$pass"; then
func_stripname '-R' '' "$deplib"
func_resolve_sysroot "$func_stripname_result"
dir=$func_resolve_sysroot_result
# Make sure the xrpath contains only unique directories.
case "$xrpath " in
*" $dir "*) ;;
*) func_append xrpath " $dir" ;;
esac
fi
deplibs="$deplib $deplibs"
continue
;;
*.la)
func_resolve_sysroot "$deplib"
lib=$func_resolve_sysroot_result
;;
*.$libext)
if test conv = "$pass"; then
deplibs="$deplib $deplibs"
continue
fi
case $linkmode in
lib)
# Linking convenience modules into shared libraries is allowed,
# but linking other static libraries is non-portable.
case " $dlpreconveniencelibs " in
*" $deplib "*) ;;
*)
valid_a_lib=false
case $deplibs_check_method in
match_pattern*)
set dummy $deplibs_check_method; shift
match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
| $EGREP "$match_pattern_regex" > /dev/null; then
valid_a_lib=:
fi
;;
pass_all)
valid_a_lib=:
;;
esac
if $valid_a_lib; then
echo
$ECHO "*** Warning: Linking the shared library $output against the"
$ECHO "*** static library $deplib is not portable!"
deplibs="$deplib $deplibs"
else
echo
$ECHO "*** Warning: Trying to link with static lib archive $deplib."
echo "*** I have the capability to make that library automatically link in when"
echo "*** you link to this library. But I can only do this if you have a"
echo "*** shared version of the library, which you do not appear to have"
echo "*** because the file extensions .$libext of this argument makes me believe"
echo "*** that it is just a static archive that I should not use here."
fi
;;
esac
continue
;;
prog)
if test link != "$pass"; then
deplibs="$deplib $deplibs"
else
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
fi
continue
;;
esac # linkmode
;; # *.$libext
*.lo | *.$objext)
if test conv = "$pass"; then
deplibs="$deplib $deplibs"
elif test prog = "$linkmode"; then
if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
# If there is no dlopen support or we're linking statically,
# we need to preload.
func_append newdlprefiles " $deplib"
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
else
func_append newdlfiles " $deplib"
fi
fi
continue
;;
%DEPLIBS%)
alldeplibs=:
continue
;;
esac # case $deplib
$found || test -f "$lib" \
|| func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
# Check to see that this really is a libtool archive.
func_lalib_unsafe_p "$lib" \
|| func_fatal_error "'$lib' is not a valid libtool archive"
func_dirname "$lib" "" "."
ladir=$func_dirname_result
dlname=
dlopen=
dlpreopen=
libdir=
library_names=
old_library=
inherited_linker_flags=
# If the library was installed with an old release of libtool,
# it will not redefine variables installed, or shouldnotlink
installed=yes
shouldnotlink=no
avoidtemprpath=
# Read the .la file
func_source "$lib"
# Convert "-framework foo" to "foo.ltframework"
if test -n "$inherited_linker_flags"; then
tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
case " $new_inherited_linker_flags " in
*" $tmp_inherited_linker_flag "*) ;;
*) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
esac
done
fi
dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
if test lib,link = "$linkmode,$pass" ||
test prog,scan = "$linkmode,$pass" ||
{ test prog != "$linkmode" && test lib != "$linkmode"; }; then
test -n "$dlopen" && func_append dlfiles " $dlopen"
test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
fi
if test conv = "$pass"; then
# Only check for convenience libraries
deplibs="$lib $deplibs"
if test -z "$libdir"; then
if test -z "$old_library"; then
func_fatal_error "cannot find name of link library for '$lib'"
fi
# It is a libtool convenience library, so add in its objects.
func_append convenience " $ladir/$objdir/$old_library"
func_append old_convenience " $ladir/$objdir/$old_library"
tmp_libs=
for deplib in $dependency_libs; do
deplibs="$deplib $deplibs"
if $opt_preserve_dup_deps; then
case "$tmp_libs " in
*" $deplib "*) func_append specialdeplibs " $deplib" ;;
esac
fi
func_append tmp_libs " $deplib"
done
elif test prog != "$linkmode" && test lib != "$linkmode"; then
func_fatal_error "'$lib' is not a convenience library"
fi
continue
fi # $pass = conv
# Get the name of the library we link against.
linklib=
if test -n "$old_library" &&
{ test yes = "$prefer_static_libs" ||
test built,no = "$prefer_static_libs,$installed"; }; then
linklib=$old_library
else
for l in $old_library $library_names; do
linklib=$l
done
fi
if test -z "$linklib"; then
func_fatal_error "cannot find name of link library for '$lib'"
fi
# This library was specified with -dlopen.
if test dlopen = "$pass"; then
test -z "$libdir" \
&& func_fatal_error "cannot -dlopen a convenience library: '$lib'"
if test -z "$dlname" ||
test yes != "$dlopen_support" ||
test no = "$build_libtool_libs"
then
# If there is no dlname, no dlopen support or we're linking
# statically, we need to preload. We also need to preload any
# dependent libraries so libltdl's deplib preloader doesn't
# bomb out in the load deplibs phase.
func_append dlprefiles " $lib $dependency_libs"
else
func_append newdlfiles " $lib"
fi
continue
fi # $pass = dlopen
# We need an absolute path.
case $ladir in
[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
*)
abs_ladir=`cd "$ladir" && pwd`
if test -z "$abs_ladir"; then
func_warning "cannot determine absolute directory name of '$ladir'"
func_warning "passing it literally to the linker, although it might fail"
abs_ladir=$ladir
fi
;;
esac
func_basename "$lib"
laname=$func_basename_result
# Find the relevant object directory and library name.
if test yes = "$installed"; then
if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
func_warning "library '$lib' was moved."
dir=$ladir
absdir=$abs_ladir
libdir=$abs_ladir
else
dir=$lt_sysroot$libdir
absdir=$lt_sysroot$libdir
fi
test yes = "$hardcode_automatic" && avoidtemprpath=yes
else
if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
dir=$ladir
absdir=$abs_ladir
# Remove this search path later
func_append notinst_path " $abs_ladir"
else
dir=$ladir/$objdir
absdir=$abs_ladir/$objdir
# Remove this search path later
func_append notinst_path " $abs_ladir"
fi
fi # $installed = yes
func_stripname 'lib' '.la' "$laname"
name=$func_stripname_result
# This library was specified with -dlpreopen.
if test dlpreopen = "$pass"; then
if test -z "$libdir" && test prog = "$linkmode"; then
func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
fi
case $host in
# special handling for platforms with PE-DLLs.
*cygwin* | *mingw* | *cegcc* )
# Linker will automatically link against shared library if both
# static and shared are present. Therefore, ensure we extract
# symbols from the import library if a shared library is present
# (otherwise, the dlopen module name will be incorrect). We do
# this by putting the import library name into $newdlprefiles.
# We recover the dlopen module name by 'saving' the la file
# name in a special purpose variable, and (later) extracting the
# dlname from the la file.
if test -n "$dlname"; then
func_tr_sh "$dir/$linklib"
eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
func_append newdlprefiles " $dir/$linklib"
else
func_append newdlprefiles " $dir/$old_library"
# Keep a list of preopened convenience libraries to check
# that they are being used correctly in the link pass.
test -z "$libdir" && \
func_append dlpreconveniencelibs " $dir/$old_library"
fi
;;
* )
# Prefer using a static library (so that no silly _DYNAMIC symbols
# are required to link).
if test -n "$old_library"; then
func_append newdlprefiles " $dir/$old_library"
# Keep a list of preopened convenience libraries to check
# that they are being used correctly in the link pass.
test -z "$libdir" && \
func_append dlpreconveniencelibs " $dir/$old_library"
# Otherwise, use the dlname, so that lt_dlopen finds it.
elif test -n "$dlname"; then
func_append newdlprefiles " $dir/$dlname"
else
func_append newdlprefiles " $dir/$linklib"
fi
;;
esac
fi # $pass = dlpreopen
if test -z "$libdir"; then
# Link the convenience library
if test lib = "$linkmode"; then
deplibs="$dir/$old_library $deplibs"
elif test prog,link = "$linkmode,$pass"; then
compile_deplibs="$dir/$old_library $compile_deplibs"
finalize_deplibs="$dir/$old_library $finalize_deplibs"
else
deplibs="$lib $deplibs" # used for prog,scan pass
fi
continue
fi
if test prog = "$linkmode" && test link != "$pass"; then
func_append newlib_search_path " $ladir"
deplibs="$lib $deplibs"
linkalldeplibs=false
if test no != "$link_all_deplibs" || test -z "$library_names" ||
test no = "$build_libtool_libs"; then
linkalldeplibs=:
fi
tmp_libs=
for deplib in $dependency_libs; do
case $deplib in
-L*) func_stripname '-L' '' "$deplib"
func_resolve_sysroot "$func_stripname_result"
func_append newlib_search_path " $func_resolve_sysroot_result"
;;
esac
# Need to link against all dependency_libs?
if $linkalldeplibs; then
deplibs="$deplib $deplibs"
else
# Need to hardcode shared library paths
# or/and link against static libraries
newdependency_libs="$deplib $newdependency_libs"
fi
if $opt_preserve_dup_deps; then
case "$tmp_libs " in
*" $deplib "*) func_append specialdeplibs " $deplib" ;;
esac
fi
func_append tmp_libs " $deplib"
done # for deplib
continue
fi # $linkmode = prog...
if test prog,link = "$linkmode,$pass"; then
if test -n "$library_names" &&
{ { test no = "$prefer_static_libs" ||
test built,yes = "$prefer_static_libs,$installed"; } ||
test -z "$old_library"; }; then
# We need to hardcode the library path
if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
# Make sure the rpath contains only unique directories.
case $temp_rpath: in
*"$absdir:"*) ;;
*) func_append temp_rpath "$absdir:" ;;
esac
fi
# Hardcode the library path.
# Skip directories that are in the system default run-time
# search path.
case " $sys_lib_dlsearch_path " in
*" $absdir "*) ;;
*)
case "$compile_rpath " in
*" $absdir "*) ;;
*) func_append compile_rpath " $absdir" ;;
esac
;;
esac
case " $sys_lib_dlsearch_path " in
*" $libdir "*) ;;
*)
case "$finalize_rpath " in
*" $libdir "*) ;;
*) func_append finalize_rpath " $libdir" ;;
esac
;;
esac
fi # $linkmode,$pass = prog,link...
if $alldeplibs &&
{ test pass_all = "$deplibs_check_method" ||
{ test yes = "$build_libtool_libs" &&
test -n "$library_names"; }; }; then
# We only need to search for static libraries
continue
fi
fi
link_static=no # Whether the deplib will be linked statically
use_static_libs=$prefer_static_libs
if test built = "$use_static_libs" && test yes = "$installed"; then
use_static_libs=no
fi
if test -n "$library_names" &&
{ test no = "$use_static_libs" || test -z "$old_library"; }; then
case $host in
*cygwin* | *mingw* | *cegcc* | *os2*)
# No point in relinking DLLs because paths are not encoded
func_append notinst_deplibs " $lib"
need_relink=no
;;
*)
if test no = "$installed"; then
func_append notinst_deplibs " $lib"
need_relink=yes
fi
;;
esac
# This is a shared library
# Warn about portability, can't link against -module's on some
# systems (darwin). Don't bleat about dlopened modules though!
dlopenmodule=
for dlpremoduletest in $dlprefiles; do
if test "X$dlpremoduletest" = "X$lib"; then
dlopenmodule=$dlpremoduletest
break
fi
done
if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
echo
if test prog = "$linkmode"; then
$ECHO "*** Warning: Linking the executable $output against the loadable module"
else
$ECHO "*** Warning: Linking the shared library $output against the loadable module"
fi
$ECHO "*** $linklib is not portable!"
fi
if test lib = "$linkmode" &&
test yes = "$hardcode_into_libs"; then
# Hardcode the library path.
# Skip directories that are in the system default run-time
# search path.
case " $sys_lib_dlsearch_path " in
*" $absdir "*) ;;
*)
case "$compile_rpath " in
*" $absdir "*) ;;
*) func_append compile_rpath " $absdir" ;;
esac
;;
esac
case " $sys_lib_dlsearch_path " in
*" $libdir "*) ;;
*)
case "$finalize_rpath " in
*" $libdir "*) ;;
*) func_append finalize_rpath " $libdir" ;;
esac
;;
esac
fi
if test -n "$old_archive_from_expsyms_cmds"; then
# figure out the soname
set dummy $library_names
shift
realname=$1
shift
libname=`eval "\\$ECHO \"$libname_spec\""`
# use dlname if we got it. it's perfectly good, no?
if test -n "$dlname"; then
soname=$dlname
elif test -n "$soname_spec"; then
# bleh windows
case $host in
*cygwin* | mingw* | *cegcc* | *os2*)
func_arith $current - $age
major=$func_arith_result
versuffix=-$major
;;
esac
eval soname=\"$soname_spec\"
else
soname=$realname
fi
# Make a new name for the extract_expsyms_cmds to use
soroot=$soname
func_basename "$soroot"
soname=$func_basename_result
func_stripname 'lib' '.dll' "$soname"
newlib=libimp-$func_stripname_result.a
# If the library has no export list, then create one now
if test -f "$output_objdir/$soname-def"; then :
else
func_verbose "extracting exported symbol list from '$soname'"
func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
fi
# Create $newlib
if test -f "$output_objdir/$newlib"; then :; else
func_verbose "generating import library for '$soname'"
func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
fi
# make sure the library variables are pointing to the new library
dir=$output_objdir
linklib=$newlib
fi # test -n "$old_archive_from_expsyms_cmds"
if test prog = "$linkmode" || test relink != "$opt_mode"; then
add_shlibpath=
add_dir=
add=
lib_linked=yes
case $hardcode_action in
immediate | unsupported)
if test no = "$hardcode_direct"; then
add=$dir/$linklib
case $host in
*-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
*-*-sysv4*uw2*) add_dir=-L$dir ;;
*-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
*-*-unixware7*) add_dir=-L$dir ;;
*-*-darwin* )
# if the lib is a (non-dlopened) module then we cannot
# link against it, someone is ignoring the earlier warnings
if /usr/bin/file -L $add 2> /dev/null |
$GREP ": [^:]* bundle" >/dev/null; then
if test "X$dlopenmodule" != "X$lib"; then
$ECHO "*** Warning: lib $linklib is a module, not a shared library"
if test -z "$old_library"; then
echo
echo "*** And there doesn't seem to be a static archive available"
echo "*** The link will probably fail, sorry"
else
add=$dir/$old_library
fi
elif test -n "$old_library"; then
add=$dir/$old_library
fi
fi
esac
elif test no = "$hardcode_minus_L"; then
case $host in
*-*-sunos*) add_shlibpath=$dir ;;
esac
add_dir=-L$dir
add=-l$name
elif test no = "$hardcode_shlibpath_var"; then
add_shlibpath=$dir
add=-l$name
else
lib_linked=no
fi
;;
relink)
if test yes = "$hardcode_direct" &&
test no = "$hardcode_direct_absolute"; then
add=$dir/$linklib
elif test yes = "$hardcode_minus_L"; then
add_dir=-L$absdir
# Try looking first in the location we're being installed to.
if test -n "$inst_prefix_dir"; then
case $libdir in
[\\/]*)
func_append add_dir " -L$inst_prefix_dir$libdir"
;;
esac
fi
add=-l$name
elif test yes = "$hardcode_shlibpath_var"; then
add_shlibpath=$dir
add=-l$name
else
lib_linked=no
fi
;;
*) lib_linked=no ;;
esac
if test yes != "$lib_linked"; then
func_fatal_configuration "unsupported hardcode properties"
fi
if test -n "$add_shlibpath"; then
case :$compile_shlibpath: in
*":$add_shlibpath:"*) ;;
*) func_append compile_shlibpath "$add_shlibpath:" ;;
esac
fi
if test prog = "$linkmode"; then
test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
test -n "$add" && compile_deplibs="$add $compile_deplibs"
else
test -n "$add_dir" && deplibs="$add_dir $deplibs"
test -n "$add" && deplibs="$add $deplibs"
if test yes != "$hardcode_direct" &&
test yes != "$hardcode_minus_L" &&
test yes = "$hardcode_shlibpath_var"; then
case :$finalize_shlibpath: in
*":$libdir:"*) ;;
*) func_append finalize_shlibpath "$libdir:" ;;
esac
fi
fi
fi
if test prog = "$linkmode" || test relink = "$opt_mode"; then
add_shlibpath=
add_dir=
add=
# Finalize command for both is simple: just hardcode it.
if test yes = "$hardcode_direct" &&
test no = "$hardcode_direct_absolute"; then
add=$libdir/$linklib
elif test yes = "$hardcode_minus_L"; then
add_dir=-L$libdir
add=-l$name
elif test yes = "$hardcode_shlibpath_var"; then
case :$finalize_shlibpath: in
*":$libdir:"*) ;;
*) func_append finalize_shlibpath "$libdir:" ;;
esac
add=-l$name
elif test yes = "$hardcode_automatic"; then
if test -n "$inst_prefix_dir" &&
test -f "$inst_prefix_dir$libdir/$linklib"; then
add=$inst_prefix_dir$libdir/$linklib
else
add=$libdir/$linklib
fi
else
# We cannot seem to hardcode it, guess we'll fake it.
add_dir=-L$libdir
# Try looking first in the location we're being installed to.
if test -n "$inst_prefix_dir"; then
case $libdir in
[\\/]*)
func_append add_dir " -L$inst_prefix_dir$libdir"
;;
esac
fi
add=-l$name
fi
if test prog = "$linkmode"; then
test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
else
test -n "$add_dir" && deplibs="$add_dir $deplibs"
test -n "$add" && deplibs="$add $deplibs"
fi
fi
elif test prog = "$linkmode"; then
# Here we assume that one of hardcode_direct or hardcode_minus_L
# is not unsupported. This is valid on all known static and
# shared platforms.
if test unsupported != "$hardcode_direct"; then
test -n "$old_library" && linklib=$old_library
compile_deplibs="$dir/$linklib $compile_deplibs"
finalize_deplibs="$dir/$linklib $finalize_deplibs"
else
compile_deplibs="-l$name -L$dir $compile_deplibs"
finalize_deplibs="-l$name -L$dir $finalize_deplibs"
fi
elif test yes = "$build_libtool_libs"; then
# Not a shared library
if test pass_all != "$deplibs_check_method"; then
# We're trying link a shared library against a static one
# but the system doesn't support it.
# Just print a warning and add the library to dependency_libs so
# that the program can be linked against the static library.
echo
$ECHO "*** Warning: This system cannot link to static lib archive $lib."
echo "*** I have the capability to make that library automatically link in when"
echo "*** you link to this library. But I can only do this if you have a"
echo "*** shared version of the library, which you do not appear to have."
if test yes = "$module"; then
echo "*** But as you try to build a module library, libtool will still create "
echo "*** a static module, that should work as long as the dlopening application"
echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
if test -z "$global_symbol_pipe"; then
echo
echo "*** However, this would only work if libtool was able to extract symbol"
echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
echo "*** not find such a program. So, this module is probably useless."
echo "*** 'nm' from GNU binutils and a full rebuild may help."
fi
if test no = "$build_old_libs"; then
build_libtool_libs=module
build_old_libs=yes
else
build_libtool_libs=no
fi
fi
else
deplibs="$dir/$old_library $deplibs"
link_static=yes
fi
fi # link shared/static library?
if test lib = "$linkmode"; then
if test -n "$dependency_libs" &&
{ test yes != "$hardcode_into_libs" ||
test yes = "$build_old_libs" ||
test yes = "$link_static"; }; then
# Extract -R from dependency_libs
temp_deplibs=
for libdir in $dependency_libs; do
case $libdir in
-R*) func_stripname '-R' '' "$libdir"
temp_xrpath=$func_stripname_result
case " $xrpath " in
*" $temp_xrpath "*) ;;
*) func_append xrpath " $temp_xrpath";;
esac;;
*) func_append temp_deplibs " $libdir";;
esac
done
dependency_libs=$temp_deplibs
fi
func_append newlib_search_path " $absdir"
# Link against this library
test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
# ... and its dependency_libs
tmp_libs=
for deplib in $dependency_libs; do
newdependency_libs="$deplib $newdependency_libs"
case $deplib in
-L*) func_stripname '-L' '' "$deplib"
func_resolve_sysroot "$func_stripname_result";;
*) func_resolve_sysroot "$deplib" ;;
esac
if $opt_preserve_dup_deps; then
case "$tmp_libs " in
*" $func_resolve_sysroot_result "*)
func_append specialdeplibs " $func_resolve_sysroot_result" ;;
esac
fi
func_append tmp_libs " $func_resolve_sysroot_result"
done
if test no != "$link_all_deplibs"; then
# Add the search paths of all dependency libraries
for deplib in $dependency_libs; do
path=
case $deplib in
-L*) path=$deplib ;;
*.la)
func_resolve_sysroot "$deplib"
deplib=$func_resolve_sysroot_result
func_dirname "$deplib" "" "."
dir=$func_dirname_result
# We need an absolute path.
case $dir in
[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
*)
absdir=`cd "$dir" && pwd`
if test -z "$absdir"; then
func_warning "cannot determine absolute directory name of '$dir'"
absdir=$dir
fi
;;
esac
if $GREP "^installed=no" $deplib > /dev/null; then
case $host in
*-*-darwin*)
depdepl=
eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
if test -n "$deplibrary_names"; then
for tmp in $deplibrary_names; do
depdepl=$tmp
done
if test -f "$absdir/$objdir/$depdepl"; then
depdepl=$absdir/$objdir/$depdepl
darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
if test -z "$darwin_install_name"; then
darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
fi
func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
path=
fi
fi
;;
*)
path=-L$absdir/$objdir
;;
esac
else
eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
test -z "$libdir" && \
func_fatal_error "'$deplib' is not a valid libtool archive"
test "$absdir" != "$libdir" && \
func_warning "'$deplib' seems to be moved"
path=-L$absdir
fi
;;
esac
case " $deplibs " in
*" $path "*) ;;
*) deplibs="$path $deplibs" ;;
esac
done
fi # link_all_deplibs != no
fi # linkmode = lib
done # for deplib in $libs
if test link = "$pass"; then
if test prog = "$linkmode"; then
compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
else
compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
fi
fi
dependency_libs=$newdependency_libs
if test dlpreopen = "$pass"; then
# Link the dlpreopened libraries before other libraries
for deplib in $save_deplibs; do
deplibs="$deplib $deplibs"
done
fi
if test dlopen != "$pass"; then
test conv = "$pass" || {
# Make sure lib_search_path contains only unique directories.
lib_search_path=
for dir in $newlib_search_path; do
case "$lib_search_path " in
*" $dir "*) ;;
*) func_append lib_search_path " $dir" ;;
esac
done
newlib_search_path=
}
if test prog,link = "$linkmode,$pass"; then
vars="compile_deplibs finalize_deplibs"
else
vars=deplibs
fi
for var in $vars dependency_libs; do
# Add libraries to $var in reverse order
eval tmp_libs=\"\$$var\"
new_libs=
for deplib in $tmp_libs; do
# FIXME: Pedantically, this is the right thing to do, so
# that some nasty dependency loop isn't accidentally
# broken:
#new_libs="$deplib $new_libs"
# Pragmatically, this seems to cause very few problems in
# practice:
case $deplib in
-L*) new_libs="$deplib $new_libs" ;;
-R*) ;;
*)
# And here is the reason: when a library appears more
# than once as an explicit dependence of a library, or
# is implicitly linked in more than once by the
# compiler, it is considered special, and multiple
# occurrences thereof are not removed. Compare this
# with having the same library being listed as a
# dependency of multiple other libraries: in this case,
# we know (pedantically, we assume) the library does not
# need to be listed more than once, so we keep only the
# last copy. This is not always right, but it is rare
# enough that we require users that really mean to play
# such unportable linking tricks to link the library
# using -Wl,-lname, so that libtool does not consider it
# for duplicate removal.
case " $specialdeplibs " in
*" $deplib "*) new_libs="$deplib $new_libs" ;;
*)
case " $new_libs " in
*" $deplib "*) ;;
*) new_libs="$deplib $new_libs" ;;
esac
;;
esac
;;
esac
done
tmp_libs=
for deplib in $new_libs; do
case $deplib in
-L*)
case " $tmp_libs " in
*" $deplib "*) ;;
*) func_append tmp_libs " $deplib" ;;
esac
;;
*) func_append tmp_libs " $deplib" ;;
esac
done
eval $var=\"$tmp_libs\"
done # for var
fi
# Add Sun CC postdeps if required:
test CXX = "$tagname" && {
case $host_os in
linux*)
case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*) # Sun C++ 5.9
func_suncc_cstd_abi
if test no != "$suncc_use_cstd_abi"; then
func_append postdeps ' -library=Cstd -library=Crun'
fi
;;
esac
;;
solaris*)
func_cc_basename "$CC"
case $func_cc_basename_result in
CC* | sunCC*)
func_suncc_cstd_abi
if test no != "$suncc_use_cstd_abi"; then
func_append postdeps ' -library=Cstd -library=Crun'
fi
;;
esac
;;
esac
}
# Last step: remove runtime libs from dependency_libs
# (they stay in deplibs)
tmp_libs=
for i in $dependency_libs; do
case " $predeps $postdeps $compiler_lib_search_path " in
*" $i "*)
i=
;;
esac
if test -n "$i"; then
func_append tmp_libs " $i"
fi
done
dependency_libs=$tmp_libs
done # for pass
if test prog = "$linkmode"; then
dlfiles=$newdlfiles
fi
if test prog = "$linkmode" || test lib = "$linkmode"; then
dlprefiles=$newdlprefiles
fi
case $linkmode in
oldlib)
if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
func_warning "'-dlopen' is ignored for archives"
fi
case " $deplibs" in
*\ -l* | *\ -L*)
func_warning "'-l' and '-L' are ignored for archives" ;;
esac
test -n "$rpath" && \
func_warning "'-rpath' is ignored for archives"
test -n "$xrpath" && \
func_warning "'-R' is ignored for archives"
test -n "$vinfo" && \
func_warning "'-version-info/-version-number' is ignored for archives"
test -n "$release" && \
func_warning "'-release' is ignored for archives"
test -n "$export_symbols$export_symbols_regex" && \
func_warning "'-export-symbols' is ignored for archives"
# Now set the variables for building old libraries.
build_libtool_libs=no
oldlibs=$output
func_append objs "$old_deplibs"
;;
lib)
# Make sure we only generate libraries of the form 'libNAME.la'.
case $outputname in
lib*)
func_stripname 'lib' '.la' "$outputname"
name=$func_stripname_result
eval shared_ext=\"$shrext_cmds\"
eval libname=\"$libname_spec\"
;;
*)
test no = "$module" \
&& func_fatal_help "libtool library '$output' must begin with 'lib'"
if test no != "$need_lib_prefix"; then
# Add the "lib" prefix for modules if required
func_stripname '' '.la' "$outputname"
name=$func_stripname_result
eval shared_ext=\"$shrext_cmds\"
eval libname=\"$libname_spec\"
else
func_stripname '' '.la' "$outputname"
libname=$func_stripname_result
fi
;;
esac
if test -n "$objs"; then
if test pass_all != "$deplibs_check_method"; then
func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
else
echo
$ECHO "*** Warning: Linking the shared library $output against the non-libtool"
$ECHO "*** objects $objs is not portable!"
func_append libobjs " $objs"
fi
fi
test no = "$dlself" \
|| func_warning "'-dlopen self' is ignored for libtool libraries"
set dummy $rpath
shift
test 1 -lt "$#" \
&& func_warning "ignoring multiple '-rpath's for a libtool library"
install_libdir=$1
oldlibs=
if test -z "$rpath"; then
if test yes = "$build_libtool_libs"; then
# Building a libtool convenience library.
# Some compilers have problems with a '.al' extension so
# convenience libraries should have the same extension an
# archive normally would.
oldlibs="$output_objdir/$libname.$libext $oldlibs"
build_libtool_libs=convenience
build_old_libs=yes
fi
test -n "$vinfo" && \
func_warning "'-version-info/-version-number' is ignored for convenience libraries"
test -n "$release" && \
func_warning "'-release' is ignored for convenience libraries"
else
# Parse the version information argument.
save_ifs=$IFS; IFS=:
set dummy $vinfo 0 0 0
shift
IFS=$save_ifs
test -n "$7" && \
func_fatal_help "too many parameters to '-version-info'"
# convert absolute version numbers to libtool ages
# this retains compatibility with .la files and attempts
# to make the code below a bit more comprehensible
case $vinfo_number in
yes)
number_major=$1
number_minor=$2
number_revision=$3
#
# There are really only two kinds -- those that
# use the current revision as the major version
# and those that subtract age and use age as
# a minor version. But, then there is irix
# that has an extra 1 added just for fun
#
case $version_type in
# correct linux to gnu/linux during the next big refactor
darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none)
func_arith $number_major + $number_minor
current=$func_arith_result
age=$number_minor
revision=$number_revision
;;
freebsd-aout|qnx|sunos)
current=$number_major
revision=$number_minor
age=0
;;
irix|nonstopux)
func_arith $number_major + $number_minor
current=$func_arith_result
age=$number_minor
revision=$number_minor
lt_irix_increment=no
;;
*)
func_fatal_configuration "$modename: unknown library version type '$version_type'"
;;
esac
;;
no)
current=$1
revision=$2
age=$3
;;
esac
# Check that each of the things are valid numbers.
case $current in
0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
*)
func_error "CURRENT '$current' must be a nonnegative integer"
func_fatal_error "'$vinfo' is not valid version information"
;;
esac
case $revision in
0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
*)
func_error "REVISION '$revision' must be a nonnegative integer"
func_fatal_error "'$vinfo' is not valid version information"
;;
esac
case $age in
0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
*)
func_error "AGE '$age' must be a nonnegative integer"
func_fatal_error "'$vinfo' is not valid version information"
;;
esac
if test "$age" -gt "$current"; then
func_error "AGE '$age' is greater than the current interface number '$current'"
func_fatal_error "'$vinfo' is not valid version information"
fi
# Calculate the version variables.
major=
versuffix=
verstring=
case $version_type in
none) ;;
darwin)
# Like Linux, but with the current version available in
# verstring for coding it into the library header
func_arith $current - $age
major=.$func_arith_result
versuffix=$major.$age.$revision
# Darwin ld doesn't like 0 for these options...
func_arith $current + 1
minor_current=$func_arith_result
xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
# On Darwin other compilers
case $CC in
nagfor*)
verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
;;
*)
verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
;;
esac
;;
freebsd-aout)
major=.$current
versuffix=.$current.$revision
;;
freebsd-elf | midnightbsd-elf)
func_arith $current - $age
major=.$func_arith_result
versuffix=$major.$age.$revision
;;
irix | nonstopux)
if test no = "$lt_irix_increment"; then
func_arith $current - $age
else
func_arith $current - $age + 1
fi
major=$func_arith_result
case $version_type in
nonstopux) verstring_prefix=nonstopux ;;
*) verstring_prefix=sgi ;;
esac
verstring=$verstring_prefix$major.$revision
# Add in all the interfaces that we are compatible with.
loop=$revision
while test 0 -ne "$loop"; do
func_arith $revision - $loop
iface=$func_arith_result
func_arith $loop - 1
loop=$func_arith_result
verstring=$verstring_prefix$major.$iface:$verstring
done
# Before this point, $major must not contain '.'.
major=.$major
versuffix=$major.$revision
;;
linux) # correct to gnu/linux during the next big refactor
func_arith $current - $age
major=.$func_arith_result
versuffix=$major.$age.$revision
;;
osf)
func_arith $current - $age
major=.$func_arith_result
versuffix=.$current.$age.$revision
verstring=$current.$age.$revision
# Add in all the interfaces that we are compatible with.
loop=$age
while test 0 -ne "$loop"; do
func_arith $current - $loop
iface=$func_arith_result
func_arith $loop - 1
loop=$func_arith_result
verstring=$verstring:$iface.0
done
# Make executables depend on our current version.
func_append verstring ":$current.0"
;;
qnx)
major=.$current
versuffix=.$current
;;
sco)
major=.$current
versuffix=.$current
;;
sunos)
major=.$current
versuffix=.$current.$revision
;;
windows)
# Use '-' rather than '.', since we only want one
# extension on DOS 8.3 file systems.
func_arith $current - $age
major=$func_arith_result
versuffix=-$major
;;
*)
func_fatal_configuration "unknown library version type '$version_type'"
;;
esac
# Clear the version info if we defaulted, and they specified a release.
if test -z "$vinfo" && test -n "$release"; then
major=
case $version_type in
darwin)
# we can't check for "0.0" in archive_cmds due to quoting
# problems, so we reset it completely
verstring=
;;
*)
verstring=0.0
;;
esac
if test no = "$need_version"; then
versuffix=
else
versuffix=.0.0
fi
fi
# Remove version info from name if versioning should be avoided
if test yes,no = "$avoid_version,$need_version"; then
major=
versuffix=
verstring=
fi
# Check to see if the archive will have undefined symbols.
if test yes = "$allow_undefined"; then
if test unsupported = "$allow_undefined_flag"; then
if test yes = "$build_old_libs"; then
func_warning "undefined symbols not allowed in $host shared libraries; building static only"
build_libtool_libs=no
else
func_fatal_error "can't build $host shared library unless -no-undefined is specified"
fi
fi
else
# Don't allow undefined symbols.
allow_undefined_flag=$no_undefined_flag
fi
fi
func_generate_dlsyms "$libname" "$libname" :
func_append libobjs " $symfileobj"
test " " = "$libobjs" && libobjs=
if test relink != "$opt_mode"; then
# Remove our outputs, but don't remove object files since they
# may have been created when compiling PIC objects.
removelist=
tempremovelist=`$ECHO "$output_objdir/*"`
for p in $tempremovelist; do
case $p in
*.$objext | *.gcno)
;;
$output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
if test -n "$precious_files_regex"; then
if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
then
continue
fi
fi
func_append removelist " $p"
;;
*) ;;
esac
done
test -n "$removelist" && \
func_show_eval "${RM}r \$removelist"
fi
# Now set the variables for building old libraries.
if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
func_append oldlibs " $output_objdir/$libname.$libext"
# Transform .lo files to .o files.
oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
fi
# Eliminate all temporary directories.
#for path in $notinst_path; do
# lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
# deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
# dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
#done
if test -n "$xrpath"; then
# If the user specified any rpath flags, then add them.
temp_xrpath=
for libdir in $xrpath; do
func_replace_sysroot "$libdir"
func_append temp_xrpath " -R$func_replace_sysroot_result"
case "$finalize_rpath " in
*" $libdir "*) ;;
*) func_append finalize_rpath " $libdir" ;;
esac
done
if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
dependency_libs="$temp_xrpath $dependency_libs"
fi
fi
# Make sure dlfiles contains only unique files that won't be dlpreopened
old_dlfiles=$dlfiles
dlfiles=
for lib in $old_dlfiles; do
case " $dlprefiles $dlfiles " in
*" $lib "*) ;;
*) func_append dlfiles " $lib" ;;
esac
done
# Make sure dlprefiles contains only unique files
old_dlprefiles=$dlprefiles
dlprefiles=
for lib in $old_dlprefiles; do
case "$dlprefiles " in
*" $lib "*) ;;
*) func_append dlprefiles " $lib" ;;
esac
done
if test yes = "$build_libtool_libs"; then
if test -n "$rpath"; then
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
# these systems don't actually have a c library (as such)!
;;
*-*-rhapsody* | *-*-darwin1.[012])
# Rhapsody C library is in the System framework
func_append deplibs " System.ltframework"
;;
*-*-netbsd*)
# Don't link with libc until the a.out ld.so is fixed.
;;
*-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
# Do not include libc due to us having libc/libc_r.
;;
*-*-sco3.2v5* | *-*-sco5v6*)
# Causes problems with __ctype
;;
*-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
# Compiler inserts libc in the correct place for threads to work
;;
*)
# Add libc to deplibs on all other systems if necessary.
if test yes = "$build_libtool_need_lc"; then
func_append deplibs " -lc"
fi
;;
esac
fi
# Transform deplibs into only deplibs that can be linked in shared.
name_save=$name
libname_save=$libname
release_save=$release
versuffix_save=$versuffix
major_save=$major
# I'm not sure if I'm treating the release correctly. I think
# release should show up in the -l (ie -lgmp5) so we don't want to
# add it in twice. Is that correct?
release=
versuffix=
major=
newdeplibs=
droppeddeps=no
case $deplibs_check_method in
pass_all)
# Don't check for shared/static. Everything works.
# This might be a little naive. We might want to check
# whether the library exists or not. But this is on
# osf3 & osf4 and I'm not really sure... Just
# implementing what was already the behavior.
newdeplibs=$deplibs
;;
test_compile)
# This code stresses the "libraries are programs" paradigm to its
# limits. Maybe even breaks it. We compile a program, linking it
# against the deplibs as a proxy for the library. Then we can check
# whether they linked in statically or dynamically with ldd.
$opt_dry_run || $RM conftest.c
cat > conftest.c </dev/null`
$nocaseglob
else
potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
fi
for potent_lib in $potential_libs; do
# Follow soft links.
if ls -lLd "$potent_lib" 2>/dev/null |
$GREP " -> " >/dev/null; then
continue
fi
# The statement above tries to avoid entering an
# endless loop below, in case of cyclic links.
# We might still enter an endless loop, since a link
# loop can be closed while we follow links,
# but so what?
potlib=$potent_lib
while test -h "$potlib" 2>/dev/null; do
potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
case $potliblink in
[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
esac
done
if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
$SED -e 10q |
$EGREP "$file_magic_regex" > /dev/null; then
func_append newdeplibs " $a_deplib"
a_deplib=
break 2
fi
done
done
fi
if test -n "$a_deplib"; then
droppeddeps=yes
echo
$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
echo "*** I have the capability to make that library automatically link in when"
echo "*** you link to this library. But I can only do this if you have a"
echo "*** shared version of the library, which you do not appear to have"
echo "*** because I did check the linker path looking for a file starting"
if test -z "$potlib"; then
$ECHO "*** with $libname but no candidates were found. (...for file magic test)"
else
$ECHO "*** with $libname and none of the candidates passed a file format test"
$ECHO "*** using a file magic. Last file checked: $potlib"
fi
fi
;;
*)
# Add a -L argument.
func_append newdeplibs " $a_deplib"
;;
esac
done # Gone through all deplibs.
;;
match_pattern*)
set dummy $deplibs_check_method; shift
match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
for a_deplib in $deplibs; do
case $a_deplib in
-l*)
func_stripname -l '' "$a_deplib"
name=$func_stripname_result
if test yes = "$allow_libtool_libs_with_static_runtimes"; then
case " $predeps $postdeps " in
*" $a_deplib "*)
func_append newdeplibs " $a_deplib"
a_deplib=
;;
esac
fi
if test -n "$a_deplib"; then
libname=`eval "\\$ECHO \"$libname_spec\""`
for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
for potent_lib in $potential_libs; do
potlib=$potent_lib # see symlink-check above in file_magic test
if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
$EGREP "$match_pattern_regex" > /dev/null; then
func_append newdeplibs " $a_deplib"
a_deplib=
break 2
fi
done
done
fi
if test -n "$a_deplib"; then
droppeddeps=yes
echo
$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
echo "*** I have the capability to make that library automatically link in when"
echo "*** you link to this library. But I can only do this if you have a"
echo "*** shared version of the library, which you do not appear to have"
echo "*** because I did check the linker path looking for a file starting"
if test -z "$potlib"; then
$ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
else
$ECHO "*** with $libname and none of the candidates passed a file format test"
$ECHO "*** using a regex pattern. Last file checked: $potlib"
fi
fi
;;
*)
# Add a -L argument.
func_append newdeplibs " $a_deplib"
;;
esac
done # Gone through all deplibs.
;;
none | unknown | *)
newdeplibs=
tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
if test yes = "$allow_libtool_libs_with_static_runtimes"; then
for i in $predeps $postdeps; do
# can't use Xsed below, because $i might contain '/'
tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
done
fi
case $tmp_deplibs in
*[!\ \ ]*)
echo
if test none = "$deplibs_check_method"; then
echo "*** Warning: inter-library dependencies are not supported in this platform."
else
echo "*** Warning: inter-library dependencies are not known to be supported."
fi
echo "*** All declared inter-library dependencies are being dropped."
droppeddeps=yes
;;
esac
;;
esac
versuffix=$versuffix_save
major=$major_save
release=$release_save
libname=$libname_save
name=$name_save
case $host in
*-*-rhapsody* | *-*-darwin1.[012])
# On Rhapsody replace the C library with the System framework
newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
;;
esac
if test yes = "$droppeddeps"; then
if test yes = "$module"; then
echo
echo "*** Warning: libtool could not satisfy all declared inter-library"
$ECHO "*** dependencies of module $libname. Therefore, libtool will create"
echo "*** a static module, that should work as long as the dlopening"
echo "*** application is linked with the -dlopen flag."
if test -z "$global_symbol_pipe"; then
echo
echo "*** However, this would only work if libtool was able to extract symbol"
echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
echo "*** not find such a program. So, this module is probably useless."
echo "*** 'nm' from GNU binutils and a full rebuild may help."
fi
if test no = "$build_old_libs"; then
oldlibs=$output_objdir/$libname.$libext
build_libtool_libs=module
build_old_libs=yes
else
build_libtool_libs=no
fi
else
echo "*** The inter-library dependencies that have been dropped here will be"
echo "*** automatically added whenever a program is linked with this library"
echo "*** or is declared to -dlopen it."
if test no = "$allow_undefined"; then
echo
echo "*** Since this library must not contain undefined symbols,"
echo "*** because either the platform does not support them or"
echo "*** it was explicitly requested with -no-undefined,"
echo "*** libtool will only create a static version of it."
if test no = "$build_old_libs"; then
oldlibs=$output_objdir/$libname.$libext
build_libtool_libs=module
build_old_libs=yes
else
build_libtool_libs=no
fi
fi
fi
fi
# Done checking deplibs!
deplibs=$newdeplibs
fi
# Time to change all our "foo.ltframework" stuff back to "-framework foo"
case $host in
*-*-darwin*)
newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
;;
esac
# move library search paths that coincide with paths to not yet
# installed libraries to the beginning of the library search list
new_libs=
for path in $notinst_path; do
case " $new_libs " in
*" -L$path/$objdir "*) ;;
*)
case " $deplibs " in
*" -L$path/$objdir "*)
func_append new_libs " -L$path/$objdir" ;;
esac
;;
esac
done
for deplib in $deplibs; do
case $deplib in
-L*)
case " $new_libs " in
*" $deplib "*) ;;
*) func_append new_libs " $deplib" ;;
esac
;;
*) func_append new_libs " $deplib" ;;
esac
done
deplibs=$new_libs
# All the library-specific variables (install_libdir is set above).
library_names=
old_library=
dlname=
# Test again, we may have decided not to build it any more
if test yes = "$build_libtool_libs"; then
# Remove $wl instances when linking with ld.
# FIXME: should test the right _cmds variable.
case $archive_cmds in
*\$LD\ *) wl= ;;
esac
if test yes = "$hardcode_into_libs"; then
# Hardcode the library paths
hardcode_libdirs=
dep_rpath=
rpath=$finalize_rpath
test relink = "$opt_mode" || rpath=$compile_rpath$rpath
for libdir in $rpath; do
if test -n "$hardcode_libdir_flag_spec"; then
if test -n "$hardcode_libdir_separator"; then
func_replace_sysroot "$libdir"
libdir=$func_replace_sysroot_result
if test -z "$hardcode_libdirs"; then
hardcode_libdirs=$libdir
else
# Just accumulate the unique libdirs.
case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
;;
esac
fi
else
eval flag=\"$hardcode_libdir_flag_spec\"
func_append dep_rpath " $flag"
fi
elif test -n "$runpath_var"; then
case "$perm_rpath " in
*" $libdir "*) ;;
*) func_append perm_rpath " $libdir" ;;
esac
fi
done
# Substitute the hardcoded libdirs into the rpath.
if test -n "$hardcode_libdir_separator" &&
test -n "$hardcode_libdirs"; then
libdir=$hardcode_libdirs
eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
fi
if test -n "$runpath_var" && test -n "$perm_rpath"; then
# We should set the runpath_var.
rpath=
for dir in $perm_rpath; do
func_append rpath "$dir:"
done
eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
fi
test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
fi
shlibpath=$finalize_shlibpath
test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
if test -n "$shlibpath"; then
eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
fi
# Get the real and link names of the library.
eval shared_ext=\"$shrext_cmds\"
eval library_names=\"$library_names_spec\"
set dummy $library_names
shift
realname=$1
shift
if test -n "$soname_spec"; then
eval soname=\"$soname_spec\"
else
soname=$realname
fi
if test -z "$dlname"; then
dlname=$soname
fi
lib=$output_objdir/$realname
linknames=
for link
do
func_append linknames " $link"
done
# Use standard objects if they are pic
test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
test "X$libobjs" = "X " && libobjs=
delfiles=
if test -n "$export_symbols" && test -n "$include_expsyms"; then
$opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
export_symbols=$output_objdir/$libname.uexp
func_append delfiles " $export_symbols"
fi
orig_export_symbols=
case $host_os in
cygwin* | mingw* | cegcc*)
if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
# exporting using user supplied symfile
func_dll_def_p "$export_symbols" || {
# and it's NOT already a .def file. Must figure out
# which of the given symbols are data symbols and tag
# them as such. So, trigger use of export_symbols_cmds.
# export_symbols gets reassigned inside the "prepare
# the list of exported symbols" if statement, so the
# include_expsyms logic still works.
orig_export_symbols=$export_symbols
export_symbols=
always_export_symbols=yes
}
fi
;;
esac
# Prepare the list of exported symbols
if test -z "$export_symbols"; then
if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
func_verbose "generating symbol list for '$libname.la'"
export_symbols=$output_objdir/$libname.exp
$opt_dry_run || $RM $export_symbols
cmds=$export_symbols_cmds
save_ifs=$IFS; IFS='~'
for cmd1 in $cmds; do
IFS=$save_ifs
# Take the normal branch if the nm_file_list_spec branch
# doesn't work or if tool conversion is not needed.
case $nm_file_list_spec~$to_tool_file_cmd in
*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
try_normal_branch=yes
eval cmd=\"$cmd1\"
func_len " $cmd"
len=$func_len_result
;;
*)
try_normal_branch=no
;;
esac
if test yes = "$try_normal_branch" \
&& { test "$len" -lt "$max_cmd_len" \
|| test "$max_cmd_len" -le -1; }
then
func_show_eval "$cmd" 'exit $?'
skipped_export=false
elif test -n "$nm_file_list_spec"; then
func_basename "$output"
output_la=$func_basename_result
save_libobjs=$libobjs
save_output=$output
output=$output_objdir/$output_la.nm
func_to_tool_file "$output"
libobjs=$nm_file_list_spec$func_to_tool_file_result
func_append delfiles " $output"
func_verbose "creating $NM input file list: $output"
for obj in $save_libobjs; do
func_to_tool_file "$obj"
$ECHO "$func_to_tool_file_result"
done > "$output"
eval cmd=\"$cmd1\"
func_show_eval "$cmd" 'exit $?'
output=$save_output
libobjs=$save_libobjs
skipped_export=false
else
# The command line is too long to execute in one step.
func_verbose "using reloadable object file for export list..."
skipped_export=:
# Break out early, otherwise skipped_export may be
# set to false by a later but shorter cmd.
break
fi
done
IFS=$save_ifs
if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
fi
fi
fi
if test -n "$export_symbols" && test -n "$include_expsyms"; then
tmp_export_symbols=$export_symbols
test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
$opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
fi
if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
# The given exports_symbols file has to be filtered, so filter it.
func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
# FIXME: $output_objdir/$libname.filter potentially contains lots of
# 's' commands, which not all seds can handle. GNU sed should be fine
# though. Also, the filter scales superlinearly with the number of
# global variables. join(1) would be nice here, but unfortunately
# isn't a blessed tool.
$opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
func_append delfiles " $export_symbols $output_objdir/$libname.filter"
export_symbols=$output_objdir/$libname.def
$opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
fi
tmp_deplibs=
for test_deplib in $deplibs; do
case " $convenience " in
*" $test_deplib "*) ;;
*)
func_append tmp_deplibs " $test_deplib"
;;
esac
done
deplibs=$tmp_deplibs
if test -n "$convenience"; then
if test -n "$whole_archive_flag_spec" &&
test yes = "$compiler_needs_object" &&
test -z "$libobjs"; then
# extract the archives, so we have objects to list.
# TODO: could optimize this to just extract one archive.
whole_archive_flag_spec=
fi
if test -n "$whole_archive_flag_spec"; then
save_libobjs=$libobjs
eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
test "X$libobjs" = "X " && libobjs=
else
gentop=$output_objdir/${outputname}x
func_append generated " $gentop"
func_extract_archives $gentop $convenience
func_append libobjs " $func_extract_archives_result"
test "X$libobjs" = "X " && libobjs=
fi
fi
if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
eval flag=\"$thread_safe_flag_spec\"
func_append linker_flags " $flag"
fi
# Make a backup of the uninstalled library when relinking
if test relink = "$opt_mode"; then
$opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
fi
# Do each of the archive commands.
if test yes = "$module" && test -n "$module_cmds"; then
if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
eval test_cmds=\"$module_expsym_cmds\"
cmds=$module_expsym_cmds
else
eval test_cmds=\"$module_cmds\"
cmds=$module_cmds
fi
else
if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
eval test_cmds=\"$archive_expsym_cmds\"
cmds=$archive_expsym_cmds
else
eval test_cmds=\"$archive_cmds\"
cmds=$archive_cmds
fi
fi
if test : != "$skipped_export" &&
func_len " $test_cmds" &&
len=$func_len_result &&
test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
:
else
# The command line is too long to link in one step, link piecewise
# or, if using GNU ld and skipped_export is not :, use a linker
# script.
# Save the value of $output and $libobjs because we want to
# use them later. If we have whole_archive_flag_spec, we
# want to use save_libobjs as it was before
# whole_archive_flag_spec was expanded, because we can't
# assume the linker understands whole_archive_flag_spec.
# This may have to be revisited, in case too many
# convenience libraries get linked in and end up exceeding
# the spec.
if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
save_libobjs=$libobjs
fi
save_output=$output
func_basename "$output"
output_la=$func_basename_result
# Clear the reloadable object creation command queue and
# initialize k to one.
test_cmds=
concat_cmds=
objlist=
last_robj=
k=1
if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
output=$output_objdir/$output_la.lnkscript
func_verbose "creating GNU ld script: $output"
echo 'INPUT (' > $output
for obj in $save_libobjs
do
func_to_tool_file "$obj"
$ECHO "$func_to_tool_file_result" >> $output
done
echo ')' >> $output
func_append delfiles " $output"
func_to_tool_file "$output"
output=$func_to_tool_file_result
elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
output=$output_objdir/$output_la.lnk
func_verbose "creating linker input file list: $output"
: > $output
set x $save_libobjs
shift
firstobj=
if test yes = "$compiler_needs_object"; then
firstobj="$1 "
shift
fi
for obj
do
func_to_tool_file "$obj"
$ECHO "$func_to_tool_file_result" >> $output
done
func_append delfiles " $output"
func_to_tool_file "$output"
output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
else
if test -n "$save_libobjs"; then
func_verbose "creating reloadable object files..."
output=$output_objdir/$output_la-$k.$objext
eval test_cmds=\"$reload_cmds\"
func_len " $test_cmds"
len0=$func_len_result
len=$len0
# Loop over the list of objects to be linked.
for obj in $save_libobjs
do
func_len " $obj"
func_arith $len + $func_len_result
len=$func_arith_result
if test -z "$objlist" ||
test "$len" -lt "$max_cmd_len"; then
func_append objlist " $obj"
else
# The command $test_cmds is almost too long, add a
# command to the queue.
if test 1 -eq "$k"; then
# The first file doesn't have a previous command to add.
reload_objs=$objlist
eval concat_cmds=\"$reload_cmds\"
else
# All subsequent reloadable object files will link in
# the last one created.
reload_objs="$objlist $last_robj"
eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
fi
last_robj=$output_objdir/$output_la-$k.$objext
func_arith $k + 1
k=$func_arith_result
output=$output_objdir/$output_la-$k.$objext
objlist=" $obj"
func_len " $last_robj"
func_arith $len0 + $func_len_result
len=$func_arith_result
fi
done
# Handle the remaining objects by creating one last
# reloadable object file. All subsequent reloadable object
# files will link in the last one created.
test -z "$concat_cmds" || concat_cmds=$concat_cmds~
reload_objs="$objlist $last_robj"
eval concat_cmds=\"\$concat_cmds$reload_cmds\"
if test -n "$last_robj"; then
eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
fi
func_append delfiles " $output"
else
output=
fi
${skipped_export-false} && {
func_verbose "generating symbol list for '$libname.la'"
export_symbols=$output_objdir/$libname.exp
$opt_dry_run || $RM $export_symbols
libobjs=$output
# Append the command to create the export file.
test -z "$concat_cmds" || concat_cmds=$concat_cmds~
eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
if test -n "$last_robj"; then
eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
fi
}
test -n "$save_libobjs" &&
func_verbose "creating a temporary reloadable object file: $output"
# Loop through the commands generated above and execute them.
save_ifs=$IFS; IFS='~'
for cmd in $concat_cmds; do
IFS=$save_ifs
$opt_quiet || {
func_quote_arg expand,pretty "$cmd"
eval "func_echo $func_quote_arg_result"
}
$opt_dry_run || eval "$cmd" || {
lt_exit=$?
# Restore the uninstalled library and exit
if test relink = "$opt_mode"; then
( cd "$output_objdir" && \
$RM "${realname}T" && \
$MV "${realname}U" "$realname" )
fi
exit $lt_exit
}
done
IFS=$save_ifs
if test -n "$export_symbols_regex" && ${skipped_export-false}; then
func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
fi
fi
${skipped_export-false} && {
if test -n "$export_symbols" && test -n "$include_expsyms"; then
tmp_export_symbols=$export_symbols
test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
$opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
fi
if test -n "$orig_export_symbols"; then
# The given exports_symbols file has to be filtered, so filter it.
func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
# FIXME: $output_objdir/$libname.filter potentially contains lots of
# 's' commands, which not all seds can handle. GNU sed should be fine
# though. Also, the filter scales superlinearly with the number of
# global variables. join(1) would be nice here, but unfortunately
# isn't a blessed tool.
$opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
func_append delfiles " $export_symbols $output_objdir/$libname.filter"
export_symbols=$output_objdir/$libname.def
$opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
fi
}
libobjs=$output
# Restore the value of output.
output=$save_output
if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
test "X$libobjs" = "X " && libobjs=
fi
# Expand the library linking commands again to reset the
# value of $libobjs for piecewise linking.
# Do each of the archive commands.
if test yes = "$module" && test -n "$module_cmds"; then
if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
cmds=$module_expsym_cmds
else
cmds=$module_cmds
fi
else
if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
cmds=$archive_expsym_cmds
else
cmds=$archive_cmds
fi
fi
fi
if test -n "$delfiles"; then
# Append the command to remove temporary files to $cmds.
eval cmds=\"\$cmds~\$RM $delfiles\"
fi
# Add any objects from preloaded convenience libraries
if test -n "$dlprefiles"; then
gentop=$output_objdir/${outputname}x
func_append generated " $gentop"
func_extract_archives $gentop $dlprefiles
func_append libobjs " $func_extract_archives_result"
test "X$libobjs" = "X " && libobjs=
fi
save_ifs=$IFS; IFS='~'
for cmd in $cmds; do
IFS=$sp$nl
eval cmd=\"$cmd\"
IFS=$save_ifs
$opt_quiet || {
func_quote_arg expand,pretty "$cmd"
eval "func_echo $func_quote_arg_result"
}
$opt_dry_run || eval "$cmd" || {
lt_exit=$?
# Restore the uninstalled library and exit
if test relink = "$opt_mode"; then
( cd "$output_objdir" && \
$RM "${realname}T" && \
$MV "${realname}U" "$realname" )
fi
exit $lt_exit
}
done
IFS=$save_ifs
# Restore the uninstalled library and exit
if test relink = "$opt_mode"; then
$opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
if test -n "$convenience"; then
if test -z "$whole_archive_flag_spec"; then
func_show_eval '${RM}r "$gentop"'
fi
fi
exit $EXIT_SUCCESS
fi
# Create links to the real library.
for linkname in $linknames; do
if test "$realname" != "$linkname"; then
func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
fi
done
# If -module or -export-dynamic was specified, set the dlname.
if test yes = "$module" || test yes = "$export_dynamic"; then
# On all known operating systems, these are identical.
dlname=$soname
fi
fi
;;
obj)
if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
func_warning "'-dlopen' is ignored for objects"
fi
case " $deplibs" in
*\ -l* | *\ -L*)
func_warning "'-l' and '-L' are ignored for objects" ;;
esac
test -n "$rpath" && \
func_warning "'-rpath' is ignored for objects"
test -n "$xrpath" && \
func_warning "'-R' is ignored for objects"
test -n "$vinfo" && \
func_warning "'-version-info' is ignored for objects"
test -n "$release" && \
func_warning "'-release' is ignored for objects"
case $output in
*.lo)
test -n "$objs$old_deplibs" && \
func_fatal_error "cannot build library object '$output' from non-libtool objects"
libobj=$output
func_lo2o "$libobj"
obj=$func_lo2o_result
;;
*)
libobj=
obj=$output
;;
esac
# Delete the old objects.
$opt_dry_run || $RM $obj $libobj
# Objects from convenience libraries. This assumes
# single-version convenience libraries. Whenever we create
# different ones for PIC/non-PIC, this we'll have to duplicate
# the extraction.
reload_conv_objs=
gentop=
# if reload_cmds runs $LD directly, get rid of -Wl from
# whole_archive_flag_spec and hope we can get by with turning comma
# into space.
case $reload_cmds in
*\$LD[\ \$]*) wl= ;;
esac
if test -n "$convenience"; then
if test -n "$whole_archive_flag_spec"; then
eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
else
gentop=$output_objdir/${obj}x
func_append generated " $gentop"
func_extract_archives $gentop $convenience
reload_conv_objs="$reload_objs $func_extract_archives_result"
fi
fi
# If we're not building shared, we need to use non_pic_objs
test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
# Create the old-style object.
reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
output=$obj
func_execute_cmds "$reload_cmds" 'exit $?'
# Exit if we aren't doing a library object file.
if test -z "$libobj"; then
if test -n "$gentop"; then
func_show_eval '${RM}r "$gentop"'
fi
exit $EXIT_SUCCESS
fi
test yes = "$build_libtool_libs" || {
if test -n "$gentop"; then
func_show_eval '${RM}r "$gentop"'
fi
# Create an invalid libtool object if no PIC, so that we don't
# accidentally link it into a program.
# $show "echo timestamp > $libobj"
# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
exit $EXIT_SUCCESS
}
if test -n "$pic_flag" || test default != "$pic_mode"; then
# Only do commands if we really have different PIC objects.
reload_objs="$libobjs $reload_conv_objs"
output=$libobj
func_execute_cmds "$reload_cmds" 'exit $?'
fi
if test -n "$gentop"; then
func_show_eval '${RM}r "$gentop"'
fi
exit $EXIT_SUCCESS
;;
prog)
case $host in
*cygwin*) func_stripname '' '.exe' "$output"
output=$func_stripname_result.exe;;
esac
test -n "$vinfo" && \
func_warning "'-version-info' is ignored for programs"
test -n "$release" && \
func_warning "'-release' is ignored for programs"
$preload \
&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
case $host in
*-*-rhapsody* | *-*-darwin1.[012])
# On Rhapsody replace the C library is the System framework
compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
;;
esac
case $host in
*-*-darwin*)
# Don't allow lazy linking, it breaks C++ global constructors
# But is supposedly fixed on 10.4 or later (yay!).
if test CXX = "$tagname"; then
case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10.[0123])
func_append compile_command " $wl-bind_at_load"
func_append finalize_command " $wl-bind_at_load"
;;
esac
fi
# Time to change all our "foo.ltframework" stuff back to "-framework foo"
compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
;;
esac
# move library search paths that coincide with paths to not yet
# installed libraries to the beginning of the library search list
new_libs=
for path in $notinst_path; do
case " $new_libs " in
*" -L$path/$objdir "*) ;;
*)
case " $compile_deplibs " in
*" -L$path/$objdir "*)
func_append new_libs " -L$path/$objdir" ;;
esac
;;
esac
done
for deplib in $compile_deplibs; do
case $deplib in
-L*)
case " $new_libs " in
*" $deplib "*) ;;
*) func_append new_libs " $deplib" ;;
esac
;;
*) func_append new_libs " $deplib" ;;
esac
done
compile_deplibs=$new_libs
func_append compile_command " $compile_deplibs"
func_append finalize_command " $finalize_deplibs"
if test -n "$rpath$xrpath"; then
# If the user specified any rpath flags, then add them.
for libdir in $rpath $xrpath; do
# This is the magic to use -rpath.
case "$finalize_rpath " in
*" $libdir "*) ;;
*) func_append finalize_rpath " $libdir" ;;
esac
done
fi
# Now hardcode the library paths
rpath=
hardcode_libdirs=
for libdir in $compile_rpath $finalize_rpath; do
if test -n "$hardcode_libdir_flag_spec"; then
if test -n "$hardcode_libdir_separator"; then
if test -z "$hardcode_libdirs"; then
hardcode_libdirs=$libdir
else
# Just accumulate the unique libdirs.
case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
;;
esac
fi
else
eval flag=\"$hardcode_libdir_flag_spec\"
func_append rpath " $flag"
fi
elif test -n "$runpath_var"; then
case "$perm_rpath " in
*" $libdir "*) ;;
*) func_append perm_rpath " $libdir" ;;
esac
fi
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
case :$dllsearchpath: in
*":$libdir:"*) ;;
::) dllsearchpath=$libdir;;
*) func_append dllsearchpath ":$libdir";;
esac
case :$dllsearchpath: in
*":$testbindir:"*) ;;
::) dllsearchpath=$testbindir;;
*) func_append dllsearchpath ":$testbindir";;
esac
;;
esac
done
# Substitute the hardcoded libdirs into the rpath.
if test -n "$hardcode_libdir_separator" &&
test -n "$hardcode_libdirs"; then
libdir=$hardcode_libdirs
eval rpath=\" $hardcode_libdir_flag_spec\"
fi
compile_rpath=$rpath
rpath=
hardcode_libdirs=
for libdir in $finalize_rpath; do
if test -n "$hardcode_libdir_flag_spec"; then
if test -n "$hardcode_libdir_separator"; then
if test -z "$hardcode_libdirs"; then
hardcode_libdirs=$libdir
else
# Just accumulate the unique libdirs.
case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
;;
esac
fi
else
eval flag=\"$hardcode_libdir_flag_spec\"
func_append rpath " $flag"
fi
elif test -n "$runpath_var"; then
case "$finalize_perm_rpath " in
*" $libdir "*) ;;
*) func_append finalize_perm_rpath " $libdir" ;;
esac
fi
done
# Substitute the hardcoded libdirs into the rpath.
if test -n "$hardcode_libdir_separator" &&
test -n "$hardcode_libdirs"; then
libdir=$hardcode_libdirs
eval rpath=\" $hardcode_libdir_flag_spec\"
fi
finalize_rpath=$rpath
if test -n "$libobjs" && test yes = "$build_old_libs"; then
# Transform all the library objects into standard objects.
compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
fi
func_generate_dlsyms "$outputname" "@PROGRAM@" false
# template prelinking step
if test -n "$prelink_cmds"; then
func_execute_cmds "$prelink_cmds" 'exit $?'
fi
wrappers_required=:
case $host in
*cegcc* | *mingw32ce*)
# Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
wrappers_required=false
;;
*cygwin* | *mingw* )
test yes = "$build_libtool_libs" || wrappers_required=false
;;
*)
if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
wrappers_required=false
fi
;;
esac
$wrappers_required || {
# Replace the output file specification.
compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
link_command=$compile_command$compile_rpath
# We have no uninstalled library dependencies, so finalize right now.
exit_status=0
func_show_eval "$link_command" 'exit_status=$?'
if test -n "$postlink_cmds"; then
func_to_tool_file "$output"
postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
func_execute_cmds "$postlink_cmds" 'exit $?'
fi
# Delete the generated files.
if test -f "$output_objdir/${outputname}S.$objext"; then
func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
fi
exit $exit_status
}
if test -n "$compile_shlibpath$finalize_shlibpath"; then
compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
fi
if test -n "$finalize_shlibpath"; then
finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
fi
compile_var=
finalize_var=
if test -n "$runpath_var"; then
if test -n "$perm_rpath"; then
# We should set the runpath_var.
rpath=
for dir in $perm_rpath; do
func_append rpath "$dir:"
done
compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
fi
if test -n "$finalize_perm_rpath"; then
# We should set the runpath_var.
rpath=
for dir in $finalize_perm_rpath; do
func_append rpath "$dir:"
done
finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
fi
fi
if test yes = "$no_install"; then
# We don't need to create a wrapper script.
link_command=$compile_var$compile_command$compile_rpath
# Replace the output file specification.
link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
# Delete the old output file.
$opt_dry_run || $RM $output
# Link the executable and exit
func_show_eval "$link_command" 'exit $?'
if test -n "$postlink_cmds"; then
func_to_tool_file "$output"
postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
func_execute_cmds "$postlink_cmds" 'exit $?'
fi
exit $EXIT_SUCCESS
fi
case $hardcode_action,$fast_install in
relink,*)
# Fast installation is not supported
link_command=$compile_var$compile_command$compile_rpath
relink_command=$finalize_var$finalize_command$finalize_rpath
func_warning "this platform does not like uninstalled shared libraries"
func_warning "'$output' will be relinked during installation"
;;
*,yes)
link_command=$finalize_var$compile_command$finalize_rpath
relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
;;
*,no)
link_command=$compile_var$compile_command$compile_rpath
relink_command=$finalize_var$finalize_command$finalize_rpath
;;
*,needless)
link_command=$finalize_var$compile_command$finalize_rpath
relink_command=
;;
esac
# Replace the output file specification.
link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
# Delete the old output files.
$opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
func_show_eval "$link_command" 'exit $?'
if test -n "$postlink_cmds"; then
func_to_tool_file "$output_objdir/$outputname"
postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
func_execute_cmds "$postlink_cmds" 'exit $?'
fi
# Now create the wrapper script.
func_verbose "creating $output"
# Quote the relink command for shipping.
if test -n "$relink_command"; then
# Preserve any variables that may affect compiler behavior
for var in $variables_saved_for_relink; do
if eval test -z \"\${$var+set}\"; then
relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
elif eval var_value=\$$var; test -z "$var_value"; then
relink_command="$var=; export $var; $relink_command"
else
func_quote_arg pretty "$var_value"
relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
fi
done
func_quote eval cd "`pwd`"
func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
relink_command=$func_quote_arg_unquoted_result
fi
# Only actually do things if not in dry run mode.
$opt_dry_run || {
# win32 will think the script is a binary if it has
# a .exe suffix, so we strip it off here.
case $output in
*.exe) func_stripname '' '.exe' "$output"
output=$func_stripname_result ;;
esac
# test for cygwin because mv fails w/o .exe extensions
case $host in
*cygwin*)
exeext=.exe
func_stripname '' '.exe' "$outputname"
outputname=$func_stripname_result ;;
*) exeext= ;;
esac
case $host in
*cygwin* | *mingw* )
func_dirname_and_basename "$output" "" "."
output_name=$func_basename_result
output_path=$func_dirname_result
cwrappersource=$output_path/$objdir/lt-$output_name.c
cwrapper=$output_path/$output_name.exe
$RM $cwrappersource $cwrapper
trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
func_emit_cwrapperexe_src > $cwrappersource
# The wrapper executable is built using the $host compiler,
# because it contains $host paths and files. If cross-
# compiling, it, like the target executable, must be
# executed on the $host or under an emulation environment.
$opt_dry_run || {
$LTCC $LTCFLAGS -o $cwrapper $cwrappersource
$STRIP $cwrapper
}
# Now, create the wrapper script for func_source use:
func_ltwrapper_scriptname $cwrapper
$RM $func_ltwrapper_scriptname_result
trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
$opt_dry_run || {
# note: this script will not be executed, so do not chmod.
if test "x$build" = "x$host"; then
$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
else
func_emit_wrapper no > $func_ltwrapper_scriptname_result
fi
}
;;
* )
$RM $output
trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
func_emit_wrapper no > $output
chmod +x $output
;;
esac
}
exit $EXIT_SUCCESS
;;
esac
# See if we need to build an old-fashioned archive.
for oldlib in $oldlibs; do
case $build_libtool_libs in
convenience)
oldobjs="$libobjs_save $symfileobj"
addlibs=$convenience
build_libtool_libs=no
;;
module)
oldobjs=$libobjs_save
addlibs=$old_convenience
build_libtool_libs=no
;;
*)
oldobjs="$old_deplibs $non_pic_objects"
$preload && test -f "$symfileobj" \
&& func_append oldobjs " $symfileobj"
addlibs=$old_convenience
;;
esac
if test -n "$addlibs"; then
gentop=$output_objdir/${outputname}x
func_append generated " $gentop"
func_extract_archives $gentop $addlibs
func_append oldobjs " $func_extract_archives_result"
fi
# Do each command in the archive commands.
if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
cmds=$old_archive_from_new_cmds
else
# Add any objects from preloaded convenience libraries
if test -n "$dlprefiles"; then
gentop=$output_objdir/${outputname}x
func_append generated " $gentop"
func_extract_archives $gentop $dlprefiles
func_append oldobjs " $func_extract_archives_result"
fi
# POSIX demands no paths to be encoded in archives. We have
# to avoid creating archives with duplicate basenames if we
# might have to extract them afterwards, e.g., when creating a
# static archive out of a convenience library, or when linking
# the entirety of a libtool archive into another (currently
# not supported by libtool).
if (for obj in $oldobjs
do
func_basename "$obj"
$ECHO "$func_basename_result"
done | sort | sort -uc >/dev/null 2>&1); then
:
else
echo "copying selected object files to avoid basename conflicts..."
gentop=$output_objdir/${outputname}x
func_append generated " $gentop"
func_mkdir_p "$gentop"
save_oldobjs=$oldobjs
oldobjs=
counter=1
for obj in $save_oldobjs
do
func_basename "$obj"
objbase=$func_basename_result
case " $oldobjs " in
" ") oldobjs=$obj ;;
*[\ /]"$objbase "*)
while :; do
# Make sure we don't pick an alternate name that also
# overlaps.
newobj=lt$counter-$objbase
func_arith $counter + 1
counter=$func_arith_result
case " $oldobjs " in
*[\ /]"$newobj "*) ;;
*) if test ! -f "$gentop/$newobj"; then break; fi ;;
esac
done
func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
func_append oldobjs " $gentop/$newobj"
;;
*) func_append oldobjs " $obj" ;;
esac
done
fi
func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
tool_oldlib=$func_to_tool_file_result
eval cmds=\"$old_archive_cmds\"
func_len " $cmds"
len=$func_len_result
if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
cmds=$old_archive_cmds
elif test -n "$archiver_list_spec"; then
func_verbose "using command file archive linking..."
for obj in $oldobjs
do
func_to_tool_file "$obj"
$ECHO "$func_to_tool_file_result"
done > $output_objdir/$libname.libcmd
func_to_tool_file "$output_objdir/$libname.libcmd"
oldobjs=" $archiver_list_spec$func_to_tool_file_result"
cmds=$old_archive_cmds
else
# the command line is too long to link in one step, link in parts
func_verbose "using piecewise archive linking..."
save_RANLIB=$RANLIB
RANLIB=:
objlist=
concat_cmds=
save_oldobjs=$oldobjs
oldobjs=
# Is there a better way of finding the last object in the list?
for obj in $save_oldobjs
do
last_oldobj=$obj
done
eval test_cmds=\"$old_archive_cmds\"
func_len " $test_cmds"
len0=$func_len_result
len=$len0
for obj in $save_oldobjs
do
func_len " $obj"
func_arith $len + $func_len_result
len=$func_arith_result
func_append objlist " $obj"
if test "$len" -lt "$max_cmd_len"; then
:
else
# the above command should be used before it gets too long
oldobjs=$objlist
if test "$obj" = "$last_oldobj"; then
RANLIB=$save_RANLIB
fi
test -z "$concat_cmds" || concat_cmds=$concat_cmds~
eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
objlist=
len=$len0
fi
done
RANLIB=$save_RANLIB
oldobjs=$objlist
if test -z "$oldobjs"; then
eval cmds=\"\$concat_cmds\"
else
eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
fi
fi
fi
func_execute_cmds "$cmds" 'exit $?'
done
test -n "$generated" && \
func_show_eval "${RM}r$generated"
# Now create the libtool archive.
case $output in
*.la)
old_library=
test yes = "$build_old_libs" && old_library=$libname.$libext
func_verbose "creating $output"
# Preserve any variables that may affect compiler behavior
for var in $variables_saved_for_relink; do
if eval test -z \"\${$var+set}\"; then
relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
elif eval var_value=\$$var; test -z "$var_value"; then
relink_command="$var=; export $var; $relink_command"
else
func_quote_arg pretty,unquoted "$var_value"
relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
fi
done
# Quote the link command for shipping.
func_quote eval cd "`pwd`"
relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
func_quote_arg pretty,unquoted "$relink_command"
relink_command=$func_quote_arg_unquoted_result
if test yes = "$hardcode_automatic"; then
relink_command=
fi
# Only create the output if not a dry run.
$opt_dry_run || {
for installed in no yes; do
if test yes = "$installed"; then
if test -z "$install_libdir"; then
break
fi
output=$output_objdir/${outputname}i
# Replace all uninstalled libtool libraries with the installed ones
newdependency_libs=
for deplib in $dependency_libs; do
case $deplib in
*.la)
func_basename "$deplib"
name=$func_basename_result
func_resolve_sysroot "$deplib"
eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
test -z "$libdir" && \
func_fatal_error "'$deplib' is not a valid libtool archive"
func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
;;
-L*)
func_stripname -L '' "$deplib"
func_replace_sysroot "$func_stripname_result"
func_append newdependency_libs " -L$func_replace_sysroot_result"
;;
-R*)
func_stripname -R '' "$deplib"
func_replace_sysroot "$func_stripname_result"
func_append newdependency_libs " -R$func_replace_sysroot_result"
;;
*) func_append newdependency_libs " $deplib" ;;
esac
done
dependency_libs=$newdependency_libs
newdlfiles=
for lib in $dlfiles; do
case $lib in
*.la)
func_basename "$lib"
name=$func_basename_result
eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
test -z "$libdir" && \
func_fatal_error "'$lib' is not a valid libtool archive"
func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
;;
*) func_append newdlfiles " $lib" ;;
esac
done
dlfiles=$newdlfiles
newdlprefiles=
for lib in $dlprefiles; do
case $lib in
*.la)
# Only pass preopened files to the pseudo-archive (for
# eventual linking with the app. that links it) if we
# didn't already link the preopened objects directly into
# the library:
func_basename "$lib"
name=$func_basename_result
eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
test -z "$libdir" && \
func_fatal_error "'$lib' is not a valid libtool archive"
func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
;;
esac
done
dlprefiles=$newdlprefiles
else
newdlfiles=
for lib in $dlfiles; do
case $lib in
[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
*) abs=`pwd`"/$lib" ;;
esac
func_append newdlfiles " $abs"
done
dlfiles=$newdlfiles
newdlprefiles=
for lib in $dlprefiles; do
case $lib in
[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
*) abs=`pwd`"/$lib" ;;
esac
func_append newdlprefiles " $abs"
done
dlprefiles=$newdlprefiles
fi
$RM $output
# place dlname in correct position for cygwin
# In fact, it would be nice if we could use this code for all target
# systems that can't hard-code library paths into their executables
# and that have no shared library path variable independent of PATH,
# but it turns out we can't easily determine that from inspecting
# libtool variables, so we have to hard-code the OSs to which it
# applies here; at the moment, that means platforms that use the PE
# object format with DLL files. See the long comment at the top of
# tests/bindir.at for full details.
tdlname=$dlname
case $host,$output,$installed,$module,$dlname in
*cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
# If a -bindir argument was supplied, place the dll there.
if test -n "$bindir"; then
func_relative_path "$install_libdir" "$bindir"
tdlname=$func_relative_path_result/$dlname
else
# Otherwise fall back on heuristic.
tdlname=../bin/$dlname
fi
;;
esac
$ECHO > $output "\
# $outputname - a libtool library file
# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
# The name that we can dlopen(3).
dlname='$tdlname'
# Names of this library.
library_names='$library_names'
# The name of the static archive.
old_library='$old_library'
# Linker flags that cannot go in dependency_libs.
inherited_linker_flags='$new_inherited_linker_flags'
# Libraries that this one depends upon.
dependency_libs='$dependency_libs'
# Names of additional weak libraries provided by this library
weak_library_names='$weak_libs'
# Version information for $libname.
current=$current
age=$age
revision=$revision
# Is this an already installed library?
installed=$installed
# Should we warn about portability when linking against -modules?
shouldnotlink=$module
# Files to dlopen/dlpreopen
dlopen='$dlfiles'
dlpreopen='$dlprefiles'
# Directory that this library needs to be installed in:
libdir='$install_libdir'"
if test no,yes = "$installed,$need_relink"; then
$ECHO >> $output "\
relink_command=\"$relink_command\""
fi
done
}
# Do a symbolic link so that the libtool archive can be found in
# LD_LIBRARY_PATH before the program is installed.
func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
;;
esac
exit $EXIT_SUCCESS
}
if test link = "$opt_mode" || test relink = "$opt_mode"; then
func_mode_link ${1+"$@"}
fi
# func_mode_uninstall arg...
func_mode_uninstall ()
{
$debug_cmd
RM=$nonopt
files=
rmforce=false
exit_status=0
# This variable tells wrapper scripts just to set variables rather
# than running their programs.
libtool_install_magic=$magic
for arg
do
case $arg in
-f) func_append RM " $arg"; rmforce=: ;;
-*) func_append RM " $arg" ;;
*) func_append files " $arg" ;;
esac
done
test -z "$RM" && \
func_fatal_help "you must specify an RM program"
rmdirs=
for file in $files; do
func_dirname "$file" "" "."
dir=$func_dirname_result
if test . = "$dir"; then
odir=$objdir
else
odir=$dir/$objdir
fi
func_basename "$file"
name=$func_basename_result
test uninstall = "$opt_mode" && odir=$dir
# Remember odir for removal later, being careful to avoid duplicates
if test clean = "$opt_mode"; then
case " $rmdirs " in
*" $odir "*) ;;
*) func_append rmdirs " $odir" ;;
esac
fi
# Don't error if the file doesn't exist and rm -f was used.
if { test -L "$file"; } >/dev/null 2>&1 ||
{ test -h "$file"; } >/dev/null 2>&1 ||
test -f "$file"; then
:
elif test -d "$file"; then
exit_status=1
continue
elif $rmforce; then
continue
fi
rmfiles=$file
case $name in
*.la)
# Possibly a libtool archive, so verify it.
if func_lalib_p "$file"; then
func_source $dir/$name
# Delete the libtool libraries and symlinks.
for n in $library_names; do
func_append rmfiles " $odir/$n"
done
test -n "$old_library" && func_append rmfiles " $odir/$old_library"
case $opt_mode in
clean)
case " $library_names " in
*" $dlname "*) ;;
*) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
esac
test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
;;
uninstall)
if test -n "$library_names"; then
# Do each command in the postuninstall commands.
func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
fi
if test -n "$old_library"; then
# Do each command in the old_postuninstall commands.
func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
fi
# FIXME: should reinstall the best remaining shared library.
;;
esac
fi
;;
*.lo)
# Possibly a libtool object, so verify it.
if func_lalib_p "$file"; then
# Read the .lo file
func_source $dir/$name
# Add PIC object to the list of files to remove.
if test -n "$pic_object" && test none != "$pic_object"; then
func_append rmfiles " $dir/$pic_object"
fi
# Add non-PIC object to the list of files to remove.
if test -n "$non_pic_object" && test none != "$non_pic_object"; then
func_append rmfiles " $dir/$non_pic_object"
fi
fi
;;
*)
if test clean = "$opt_mode"; then
noexename=$name
case $file in
*.exe)
func_stripname '' '.exe' "$file"
file=$func_stripname_result
func_stripname '' '.exe' "$name"
noexename=$func_stripname_result
# $file with .exe has already been added to rmfiles,
# add $file without .exe
func_append rmfiles " $file"
;;
esac
# Do a test to see if this is a libtool program.
if func_ltwrapper_p "$file"; then
if func_ltwrapper_executable_p "$file"; then
func_ltwrapper_scriptname "$file"
relink_command=
func_source $func_ltwrapper_scriptname_result
func_append rmfiles " $func_ltwrapper_scriptname_result"
else
relink_command=
func_source $dir/$noexename
fi
# note $name still contains .exe if it was in $file originally
# as does the version of $file that was added into $rmfiles
func_append rmfiles " $odir/$name $odir/${name}S.$objext"
if test yes = "$fast_install" && test -n "$relink_command"; then
func_append rmfiles " $odir/lt-$name"
fi
if test "X$noexename" != "X$name"; then
func_append rmfiles " $odir/lt-$noexename.c"
fi
fi
fi
;;
esac
func_show_eval "$RM $rmfiles" 'exit_status=1'
done
# Try to remove the $objdir's in the directories where we deleted files
for dir in $rmdirs; do
if test -d "$dir"; then
func_show_eval "rmdir $dir >/dev/null 2>&1"
fi
done
exit $exit_status
}
if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
func_mode_uninstall ${1+"$@"}
fi
test -z "$opt_mode" && {
help=$generic_help
func_fatal_help "you must specify a MODE"
}
test -z "$exec_cmd" && \
func_fatal_help "invalid operation mode '$opt_mode'"
if test -n "$exec_cmd"; then
eval exec "$exec_cmd"
exit $EXIT_FAILURE
fi
exit $exit_status
# The TAGs below are defined such that we never get into a situation
# where we disable both kinds of libraries. Given conflicting
# choices, we go for a static library, that is the most portable,
# since we can't tell whether shared libraries were disabled because
# the user asked for that or because the platform doesn't support
# them. This is particularly important on AIX, because we don't
# support having both static and shared libraries enabled at the same
# time on that platform, so we default to a shared-only configuration.
# If a disable-shared tag is given, we'll fallback to a static-only
# configuration. But we'll never go from static-only to shared-only.
# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
build_libtool_libs=no
build_old_libs=yes
# ### END LIBTOOL TAG CONFIG: disable-shared
# ### BEGIN LIBTOOL TAG CONFIG: disable-static
build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
# ### END LIBTOOL TAG CONFIG: disable-static
# Local Variables:
# mode:shell-script
# sh-indentation:2
# End:
aqbanking-6.9.1/tutorials/ 0000755 0001750 0001750 00000000000 15131211176 012507 5 0000000 0000000 aqbanking-6.9.1/tutorials/Makefile.am 0000664 0001750 0001750 00000001443 14043610745 014475 0000000 0000000 EXTRA_DIST = README tutorials.h
AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/..
noinst_PROGRAMS=\
tutorial1 \
tutorial2 \
tutorial3 \
tutorial4 \
tutorial5
tutorial1_SOURCES=tutorial1.c
tutorial1_LDADD=\
$(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs)
tutorial2_SOURCES=tutorial2.c
tutorial2_LDADD=\
$(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs)
tutorial3_SOURCES=tutorial3.c
tutorial3_LDADD=\
$(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs)
tutorial4_SOURCES=tutorial4.c
tutorial4_LDADD=\
$(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs)
tutorial5_SOURCES=tutorial5.c
tutorial5_LDADD=\
$(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs)
typefiles:
typedefs:
aqbanking-6.9.1/tutorials/tutorial1.c 0000644 0001750 0001750 00000006331 15056605641 014534 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* This file is part of the project "AqBanking". *
* Please see toplevel file COPYING of that project for license details. *
***************************************************************************/
/***************************************************************************
* This tutorial simply creates an instance of AqBanking, initializes and *
* deinitializes it. *
* *
* You must either choose a GUI implementation to be used with AqBanking *
* or create one yourself by implementing the user interface callbacks of *
* LibGwenhywfar. *
* *
* However, for simplicity reasons we use the console GUI implementation *
* which implements these callbacks for you. *
* *
* There are other GUI implementations, e.g. for GTK2, QT3, QT4 and FOX16. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
int main(int argc, char **argv)
{
AB_BANKING *ab;
int rv;
GWEN_GUI *gui;
gui=GWEN_Gui_CGui_new();
GWEN_Gui_SetGui(gui);
/* The first argument is the name of the application. This is needed for
* AqBanking to internally store some application-specific settings.
* This name may contain whatever characters you like, it is escaped
* internally before creating file paths or DB groups from it.
*
* The second argument is the folder in which the AqBanking settings are
* stored. You should in most cases provide NULL here which makes AqBanking
* choose the default path ($HOME/.aqbanking).
* If this folder doesn't exist it will be created as soon as AqBanking has
* something to store (in most cases when closing the application).
*/
ab=AB_Banking_new("tutorial1", 0, 0);
/* This function initializes AqBanking. It is only after successful return
* from this function that any other AqBanking function may be used.
*/
rv=AB_Banking_Init(ab);
if (rv) {
fprintf(stderr, "Error on init (%d)\n", rv);
return 2;
}
fprintf(stderr, "AqBanking successfully initialized.\n");
/* You must always call this function before exiting, because only then
* AqBanking's settings are written.
* After this function has been called no other function except
* AB_Banking_free() or AB_Banking_Init() may be called.
*/
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 3;
}
/* The AqBanking instance you created at the beginning must always be
* destroyed using this function to avoid memory leaks.
*/
AB_Banking_free(ab);
return 0;
}
aqbanking-6.9.1/tutorials/Makefile.in 0000644 0001750 0001750 00000062463 15131211121 014475 0000000 0000000 # Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# 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.
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
noinst_PROGRAMS = tutorial1$(EXEEXT) tutorial2$(EXEEXT) \
tutorial3$(EXEEXT) tutorial4$(EXEEXT) tutorial5$(EXEEXT)
subdir = tutorials
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \
$(top_srcdir)/m4/as-scrub-include.m4 \
$(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
am_tutorial1_OBJECTS = tutorial1.$(OBJEXT)
tutorial1_OBJECTS = $(am_tutorial1_OBJECTS)
am__DEPENDENCIES_1 =
tutorial1_DEPENDENCIES = $(top_builddir)/src/libs/libaqbanking.la \
$(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
am_tutorial2_OBJECTS = tutorial2.$(OBJEXT)
tutorial2_OBJECTS = $(am_tutorial2_OBJECTS)
tutorial2_DEPENDENCIES = $(top_builddir)/src/libs/libaqbanking.la \
$(am__DEPENDENCIES_1)
am_tutorial3_OBJECTS = tutorial3.$(OBJEXT)
tutorial3_OBJECTS = $(am_tutorial3_OBJECTS)
tutorial3_DEPENDENCIES = $(top_builddir)/src/libs/libaqbanking.la \
$(am__DEPENDENCIES_1)
am_tutorial4_OBJECTS = tutorial4.$(OBJEXT)
tutorial4_OBJECTS = $(am_tutorial4_OBJECTS)
tutorial4_DEPENDENCIES = $(top_builddir)/src/libs/libaqbanking.la \
$(am__DEPENDENCIES_1)
am_tutorial5_OBJECTS = tutorial5.$(OBJEXT)
tutorial5_OBJECTS = $(am_tutorial5_OBJECTS)
tutorial5_DEPENDENCIES = $(top_builddir)/src/libs/libaqbanking.la \
$(am__DEPENDENCIES_1)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/tutorial1.Po \
./$(DEPDIR)/tutorial2.Po ./$(DEPDIR)/tutorial3.Po \
./$(DEPDIR)/tutorial4.Po ./$(DEPDIR)/tutorial5.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(tutorial1_SOURCES) $(tutorial2_SOURCES) \
$(tutorial3_SOURCES) $(tutorial4_SOURCES) $(tutorial5_SOURCES)
DIST_SOURCES = $(tutorial1_SOURCES) $(tutorial2_SOURCES) \
$(tutorial3_SOURCES) $(tutorial4_SOURCES) $(tutorial5_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@
AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@
AQBANKING_SO_AGE = @AQBANKING_SO_AGE@
AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@
AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@
AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@
AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@
AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@
AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@
AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@
AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@
AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@
AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@
AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@
AQEBICS_CFLAGS = @AQEBICS_CFLAGS@
AQEBICS_LIBS = @AQEBICS_LIBS@
AR = @AR@
AS = @AS@
ASTYLE = @ASTYLE@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATETIME = @DATETIME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN_DEFINE = @DOXYGEN_DEFINE@
DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@
DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@
DOXYGEN_INPUT = @DOXYGEN_INPUT@
DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILECMD = @FILECMD@
GREP = @GREP@
GTK2_CFLAGS = @GTK2_CFLAGS@
GTK2_LIBS = @GTK2_LIBS@
GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@
GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@
GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@
HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@
HAVE_I18N = @HAVE_I18N@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBXML_CFLAGS = @LIBXML_CFLAGS@
LIBXML_LIBS = @LIBXML_LIBS@
LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@
LIBXSLT_LIBS = @LIBXSLT_LIBS@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MAKE_DLL_TARGET = @MAKE_DLL_TARGET@
MAKE_I18N_FILES = @MAKE_I18N_FILES@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OSYSTEM = @OSYSTEM@
OS_TYPE = @OS_TYPE@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
RANLIB = @RANLIB@
RC = @RC@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
STRIPALL = @STRIPALL@
TUTORIALS = @TUTORIALS@
USE_DOT = @USE_DOT@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
XMLMERGE = @XMLMERGE@
XMLSEC_CFLAGS = @XMLSEC_CFLAGS@
XMLSEC_LIBS = @XMLSEC_LIBS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
all_includes = @all_includes@
all_libraries = @all_libraries@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
aq_distrib_name = @aq_distrib_name@
aq_distrib_tag = @aq_distrib_tag@
aq_distrib_version = @aq_distrib_version@
aqbanking_backends = @aqbanking_backends@
aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@
aqbanking_data_searchdir = @aqbanking_data_searchdir@
aqbanking_headerdir = @aqbanking_headerdir@
aqbanking_headerdir_am = @aqbanking_headerdir_am@
aqbanking_includes = @aqbanking_includes@
aqbanking_internal_libs = @aqbanking_internal_libs@
aqbanking_ldflags = @aqbanking_ldflags@
aqbanking_libs = @aqbanking_libs@
aqbanking_locale_searchdir = @aqbanking_locale_searchdir@
aqbanking_modules = @aqbanking_modules@
aqbanking_pkgdatadir = @aqbanking_pkgdatadir@
aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@
aqbanking_plugindir = @aqbanking_plugindir@
aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@
aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@
aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@
aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@
aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@
aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@
aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@
aqbanking_symlinkdir = @aqbanking_symlinkdir@
aqbanking_sys_is_windows = @aqbanking_sys_is_windows@
aqbankingpp_modules = @aqbankingpp_modules@
aqebics_datadir = @aqebics_datadir@
aqebics_includes = @aqebics_includes@
aqebics_internal_libs = @aqebics_internal_libs@
aqebics_ldflags = @aqebics_ldflags@
aqebics_libs = @aqebics_libs@
aqfints_datadir = @aqfints_datadir@
aqhbci_datadir = @aqhbci_datadir@
aqhbci_includes = @aqhbci_includes@
aqhbci_internal_libs = @aqhbci_internal_libs@
aqhbci_ldflags = @aqhbci_ldflags@
aqhbci_libs = @aqhbci_libs@
aqofxconnect_includes = @aqofxconnect_includes@
aqofxconnect_internal_libs = @aqofxconnect_internal_libs@
aqofxconnect_libs = @aqofxconnect_libs@
aqpaypal_includes = @aqpaypal_includes@
aqpaypal_internal_libs = @aqpaypal_internal_libs@
aqpaypal_libs = @aqpaypal_libs@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
docpath = @docpath@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
gmp_libs = @gmp_libs@
gwenhywfar_bindir = @gwenhywfar_bindir@
gwenhywfar_dir = @gwenhywfar_dir@
gwenhywfar_has_crypt = @gwenhywfar_has_crypt@
gwenhywfar_headers = @gwenhywfar_headers@
gwenhywfar_includes = @gwenhywfar_includes@
gwenhywfar_libs = @gwenhywfar_libs@
gwenhywfar_plugins = @gwenhywfar_plugins@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
i18n_libs = @i18n_libs@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
typemaker2_exe = @typemaker2_exe@
visibility_cflags = @visibility_cflags@
with_aqebics = @with_aqebics@
with_aqhbci = @with_aqhbci@
EXTRA_DIST = README tutorials.h
AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/..
tutorial1_SOURCES = tutorial1.c
tutorial1_LDADD = \
$(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs)
tutorial2_SOURCES = tutorial2.c
tutorial2_LDADD = \
$(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs)
tutorial3_SOURCES = tutorial3.c
tutorial3_LDADD = \
$(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs)
tutorial4_SOURCES = tutorial4.c
tutorial4_LDADD = \
$(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs)
tutorial5_SOURCES = tutorial5.c
tutorial5_LDADD = \
$(top_builddir)/src/libs/libaqbanking.la $(gwenhywfar_libs)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tutorials/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu tutorials/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstPROGRAMS:
@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
tutorial1$(EXEEXT): $(tutorial1_OBJECTS) $(tutorial1_DEPENDENCIES) $(EXTRA_tutorial1_DEPENDENCIES)
@rm -f tutorial1$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(tutorial1_OBJECTS) $(tutorial1_LDADD) $(LIBS)
tutorial2$(EXEEXT): $(tutorial2_OBJECTS) $(tutorial2_DEPENDENCIES) $(EXTRA_tutorial2_DEPENDENCIES)
@rm -f tutorial2$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(tutorial2_OBJECTS) $(tutorial2_LDADD) $(LIBS)
tutorial3$(EXEEXT): $(tutorial3_OBJECTS) $(tutorial3_DEPENDENCIES) $(EXTRA_tutorial3_DEPENDENCIES)
@rm -f tutorial3$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(tutorial3_OBJECTS) $(tutorial3_LDADD) $(LIBS)
tutorial4$(EXEEXT): $(tutorial4_OBJECTS) $(tutorial4_DEPENDENCIES) $(EXTRA_tutorial4_DEPENDENCIES)
@rm -f tutorial4$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(tutorial4_OBJECTS) $(tutorial4_LDADD) $(LIBS)
tutorial5$(EXEEXT): $(tutorial5_OBJECTS) $(tutorial5_DEPENDENCIES) $(EXTRA_tutorial5_DEPENDENCIES)
@rm -f tutorial5$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(tutorial5_OBJECTS) $(tutorial5_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutorial1.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutorial2.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutorial3.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutorial4.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tutorial5.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@echo '# dummy' >$@-t && $(am__mv) $@-t $@
am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
-rm -f ./$(DEPDIR)/tutorial1.Po
-rm -f ./$(DEPDIR)/tutorial2.Po
-rm -f ./$(DEPDIR)/tutorial3.Po
-rm -f ./$(DEPDIR)/tutorial4.Po
-rm -f ./$(DEPDIR)/tutorial5.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/tutorial1.Po
-rm -f ./$(DEPDIR)/tutorial2.Po
-rm -f ./$(DEPDIR)/tutorial3.Po
-rm -f ./$(DEPDIR)/tutorial4.Po
-rm -f ./$(DEPDIR)/tutorial5.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am
.PRECIOUS: Makefile
typefiles:
typedefs:
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
aqbanking-6.9.1/tutorials/tutorial3.c 0000664 0001750 0001750 00000007660 14043610745 014542 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* This file is part of the project "AqBanking". *
* Please see toplevel file COPYING of that project for license details. *
***************************************************************************/
/***************************************************************************
* This tutorial shows how to use jobs in AqBanking. *
* In this example we retrieve transaction statements for a given account. *
* *
* You must either choose a GUI implementation to be used with AqBanking *
* or create one yourself by implementing the user interface callbacks of *
* LibGwenhywfar. *
* *
* However, for simplicity reasons we use the console GUI implementation *
* which implements these callbacks for you. *
* *
* There are other GUI implementations, e.g. for GTK2, QT3, QT4 and FOX16. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
#include
int main(int argc, char **argv)
{
GWEN_GUI *gui;
AB_BANKING *ab;
AB_ACCOUNT_SPEC_LIST *accs=NULL;
AB_ACCOUNT_SPEC *as;
AB_IMEXPORTER_ACCOUNTINFO *ai;
gui=GWEN_Gui_CGui_new();
GWEN_Gui_SetGui(gui);
ab=AB_Banking_new("tutorial3", 0, 0);
AB_Banking_Init(ab);
fprintf(stderr, "AqBanking successfully initialized.\n");
/* get the list of known accounts */
AB_Banking_GetAccountSpecList(ab, &accs);
/* find a matching account within the given list */
as=AB_AccountSpec_List_FindFirst(accs,
"aqhbci", /* backendName */
"de", /* country */
"28*", /* bankId bank */
"*", /* accountNumber */
"*", /* subAccountId */
"*", /* iban */
"*", /* currency */
AB_AccountType_Unknown); /* ty */
if (as) {
AB_TRANSACTION_LIST2 *cmdList;
AB_TRANSACTION *t;
AB_IMEXPORTER_CONTEXT *ctx;
cmdList=AB_Transaction_List2_new();
t=AB_Transaction_new();
AB_Transaction_SetCommand(t, AB_Transaction_CommandGetTransactions);
AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as));
AB_Transaction_List2_PushBack(cmdList, t);
ctx=AB_ImExporterContext_new();
AB_Banking_SendCommands(ab, cmdList, ctx);
ai=AB_ImExporterContext_GetFirstAccountInfo(ctx);
while (ai) {
const AB_TRANSACTION *t;
t=AB_ImExporterAccountInfo_GetFirstTransaction(ai, 0, 0);
while (t) {
const AB_VALUE *v;
v=AB_Transaction_GetValue(t);
if (v) {
const char *purpose;
purpose=AB_Transaction_GetPurpose(t);
fprintf(stderr, " %-32s (%.2f %s)\n",
purpose,
AB_Value_GetValueAsDouble(v),
AB_Value_GetCurrency(v));
}
t=AB_Transaction_List_Next(t);
} /* while transactions */
ai=AB_ImExporterAccountInfo_List_Next(ai);
} /* while ai */
AB_ImExporterContext_free(ctx);
} /* if (as) */
AB_Banking_Fini(ab);
AB_Banking_free(ab);
return 0;
}
aqbanking-6.9.1/tutorials/tutorial2.c 0000664 0001750 0001750 00000007234 14043610745 014536 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* This file is part of the project "AqBanking". *
* Please see toplevel file COPYING of that project for license details. *
***************************************************************************/
/***************************************************************************
* This tutorial shows the list of accounts currently known to AqBanking. *
* *
* It also gives an introduction into the usage of XXX_List2's and list2 *
* iterators. *
* *
* You must either choose a GUI implementation to be used with AqBanking *
* or create one yourself by implementing the user interface callbacks of *
* LibGwenhywfar. *
* *
* However, for simplicity reasons we use the console GUI implementation *
* which implements these callbacks for you. *
* *
* There are other GUI implementations, e.g. for GTK2, QT3, QT4 and FOX16. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
int main(int argc, char **argv)
{
AB_BANKING *ab;
AB_ACCOUNT_SPEC_LIST *accs=NULL;
int rv;
GWEN_GUI *gui;
gui=GWEN_Gui_CGui_new();
GWEN_Gui_SetGui(gui);
ab=AB_Banking_new("tutorial2", 0, 0);
/* Initialize AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
fprintf(stderr, "Error on init (%d: %s)\n", rv, GWEN_Error_SimpleToString(rv));;
return 2;
}
fprintf(stderr, "AqBanking successfully initialized.\n");
/* Get a list of accounts which are known to AqBanking.
* We own the list returned, so in order to avoid memory
* leaks we need to free it afterwards.
*
* The rest of this tutorial shows how lists are generally used by
* AqBanking.
*/
rv=AB_Banking_GetAccountSpecList(ab, &accs);
if (rv<0) {
fprintf(stderr, "Unable to get the list of accounts (%d: %s)\n", rv, GWEN_Error_SimpleToString(rv));
return 3;
}
else {
AB_ACCOUNT_SPEC *as;
/* return the first entry of the account spec list */
as=AB_AccountSpec_List_First(accs);
while (as) {
fprintf(stderr,
"Account: %s %s (%s) [%s]\n",
AB_AccountSpec_GetBankCode(as),
AB_AccountSpec_GetAccountNumber(as),
AB_AccountSpec_GetAccountName(as),
/* every account is assigned to a backend (sometimes called provider)
* which actually performs online banking tasks. We get a pointer
* to that provider/backend with this call to show its name in our
* example.*/
AB_AccountSpec_GetBackendName(as));
/* return the next entry of the account spec list */
as=AB_AccountSpec_List_Next(as);
}
/* free the list to avoid memory leaks */
AB_AccountSpec_List_free(accs);
}
/* deinitialize AqBanking */
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 3;
}
/* free AqBanking object */
AB_Banking_free(ab);
return 0;
}
aqbanking-6.9.1/tutorials/README 0000664 0001750 0001750 00000001453 14043610745 013322 0000000 0000000
This folder contains some simple tutorials which introduce possible
developers to AqBanking.
Tutorial1
=========
This just creates an instance of AqBanking, initializes and deinitializes
it.
Nothing fancy.
Tutorial2
=========
This does the same as tutorial1, but in addition it dumps a list of all
accounts AqBanking currently knows of.
It also gives an introduction into the usage of XXX_List2's and list2
iterators.
Tutorial3
=========
This tutorial shows how to use online banking in AqBanking.
In this example we retrieve transaction statements for a given account.
No error checking for a quick overview.
Tutorial4
=========
This tutorial shows how to use online banking in AqBanking.
In this example we retrieve transaction statements for a given account.
Example with full error checking.
aqbanking-6.9.1/tutorials/tutorials.h 0000664 0001750 0001750 00000003741 14043610745 014643 0000000 0000000
/** @defgroup G_TUTORIAL1 Tutorial 1 (Basic Usage of AqBanking)
* @ingroup G_TUTORIALS
* @brief Basic usage of AqBanking
*
* This tutorial simply creates an instance of AqBanking, initializes and
* deinitializes it.
*
* You must either choose a frontend to be used with AqBanking or create
* one yourself by implementing the user interface callbacks of AqBanking.
*
* However, for simplicity reasons we use the console frontend CBanking
* which implements these callbacks for you.
*
* There are other frontends, e.g. G2Banking for GTK2/Gnome, QBanking for
* QT3 or KDE3 or KBanking for KDE3.
*
* @include "tutorial1.c"
*/
/** @defgroup G_TUTORIAL2 Tutorial 2 (Extended Usage of AqBanking)
* @ingroup G_TUTORIALS
* @brief Extended usage of AqBanking
*
* This tutorial shows the list of accounts currently known to AqBanking.
*
* It also gives an introduction into the usage of XXX_List2's and list2
* iterators.
*
* You must either choose a frontend to be used with AqBanking or create
* one yourself by implementing the user interface callbacks of AqBanking.
*
* However, for simplicity reasons we use the console frontend CBanking
* which implements these callbacks for you.
*
* There are other frontends, e.g. G2Banking for GTK2/Gnome, QBanking for
* QT3 or KDE3 or KBanking for KDE3.
*
* @include "tutorial2.c"
*/
/** @defgroup G_TUTORIAL3 Tutorial 3 (Working With Jobs)
* @ingroup G_TUTORIALS
* @brief Working with jobs
*
* This tutorial shows how to use jobs in AqBanking.
* In this example we retrieve transaction statements for a given account.
*
* You must either choose a frontend to be used with AqBanking or create
* one yourself by implementing the user interface callbacks of AqBanking.
*
* However, for simplicity reasons we use the console frontend CBanking
* which implements these callbacks for you.
*
* There are other frontends, e.g. G2Banking for GTK2/Gnome, QBanking for
* QT3 or KDE3 or KBanking for KDE3.
*
* @include "tutorial3.c"
*/
aqbanking-6.9.1/tutorials/tutorial5.c 0000664 0001750 0001750 00000007007 14043610745 014537 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* This file is part of the project "AqBanking". *
* Please see toplevel file COPYING of that project for license details. *
***************************************************************************/
/***************************************************************************
* This tutorial shows the list of accounts currently known to AqBanking. *
* *
* It also gives an introduction into the usage of XXX_List_ForEach *
* *
* You must either choose a GUI implementation to be used with AqBanking *
* or create one yourself by implementing the user interface callbacks of *
* LibGwenhywfar. *
* *
* However, for simplicity reasons we use the console GUI implementation *
* which implements these callbacks for you. *
* *
* There are other GUI implementations, e.g. for GTK2, QT3, QT4 and FOX16. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
static AB_ACCOUNT_SPEC *printAccountList_cb(AB_ACCOUNT_SPEC *as, void *user_data);
int main(int argc, char **argv)
{
AB_BANKING *ab;
AB_ACCOUNT_SPEC_LIST *accs=NULL;
int rv;
GWEN_GUI *gui;
gui=GWEN_Gui_CGui_new();
GWEN_Gui_SetGui(gui);
ab=AB_Banking_new("tutorial5", 0, 0);
/* Initialize AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
fprintf(stderr, "Error on init (%d: %s)\n", rv, GWEN_Error_SimpleToString(rv));;
return 2;
}
fprintf(stderr, "AqBanking successfully initialized.\n");
/* Get a list of accounts which are known to AqBanking.
* We own the list returned, so in order to avoid memory
* leaks we need to free it afterwards.
*
* The rest of this tutorial shows how lists are generally used by
* AqBanking.
*/
rv=AB_Banking_GetAccountSpecList(ab, &accs);
if (rv<0) {
fprintf(stderr, "Unable to get the list of accounts (%d: %s)\n", rv, GWEN_Error_SimpleToString(rv));
return 3;
}
else {
AB_AccountSpec_List_ForEach(accs, printAccountList_cb, NULL);
/* free the list to avoid memory leaks */
AB_AccountSpec_List_free(accs);
}
/* deinitialize AqBanking */
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 3;
}
/* free AqBanking object */
AB_Banking_free(ab);
return 0;
}
AB_ACCOUNT_SPEC *printAccountList_cb(AB_ACCOUNT_SPEC *as, void *user_data)
{
fprintf(stderr,
"Account: %s %s (%s) [%s]\n",
AB_AccountSpec_GetBankCode(as),
AB_AccountSpec_GetAccountNumber(as),
AB_AccountSpec_GetAccountName(as),
/* every account is assigned to a backend (sometimes called provider)
* which actually performs online banking tasks. We get a pointer
* to the name of that provider/backend with this call.*/
AB_AccountSpec_GetBackendName(as));
return NULL;
}
aqbanking-6.9.1/tutorials/tutorial4.c 0000644 0001750 0001750 00000013721 15056605641 014540 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* This file is part of the project "AqBanking". *
* Please see toplevel file COPYING of that project for license details. *
***************************************************************************/
/***************************************************************************
* This tutorial shows how to use jobs in AqBanking. *
* In this example we retrieve transaction statements for a given account. *
* *
* You must either choose a GUI implementation to be used with AqBanking *
* or create one yourself by implementing the user interface callbacks of *
* LibGwenhywfar. *
* *
* However, for simplicity reasons we use the console GUI implementation *
* which implements these callbacks for you. *
* *
* There are other GUI implementations, e.g. for GTK2, QT3, QT4 and FOX16. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
#include
int main(int argc, char **argv)
{
AB_BANKING *ab;
int rv;
AB_ACCOUNT_SPEC_LIST *accs=NULL;
AB_ACCOUNT_SPEC *as;
GWEN_GUI *gui;
gui=GWEN_Gui_CGui_new();
GWEN_Gui_SetGui(gui);
ab=AB_Banking_new("tutorial4", 0, 0);
/* This is the basic init function. It only initializes the minimum (like
* setting up plugin and data paths). After this function successfully
* returns you may freely use any non-online function. To use online
* banking functions (like getting the list of managed accounts, users
* etc) you will have to call AB_Banking_OnlineInit().
*/
rv=AB_Banking_Init(ab);
if (rv) {
fprintf(stderr, "Error on init (%d)\n", rv);
return 2;
}
fprintf(stderr, "AqBanking successfully initialized.\n");
/* get the list of known accounts */
rv=AB_Banking_GetAccountSpecList(ab, &accs);
if (rv<0) {
fprintf(stderr, "Unable to get the list of accounts (%d: %s)\n", rv, GWEN_Error_SimpleToString(rv));
return 3;
}
/* find a matching account within the given list */
as=AB_AccountSpec_List_FindFirst(accs,
"aqhbci", /* backendName */
"de", /* country */
"28*", /* bankId bank */
"*", /* accountNumber */
"*", /* subAccountId */
"*", /* iban */
"*", /* currency */
AB_AccountType_Unknown); /* ty */
if (as==NULL) {
fprintf(stderr, "No matching account found.\n");
return 3;
} /* if (as==NULL) */
if (as) {
AB_TRANSACTION_LIST2 *cmdList;
AB_TRANSACTION *t;
AB_IMEXPORTER_CONTEXT *ctx;
/* create a list to which banking commands are added */
cmdList=AB_Transaction_List2_new();
/* create an online banking command */
t=AB_Transaction_new();
AB_Transaction_SetCommand(t, AB_Transaction_CommandGetTransactions);
AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as));
/* add command to the list */
AB_Transaction_List2_PushBack(cmdList, t);
/* we could now add any number of commands here */
/* When sending a list of commands (as we will do below) all the
* data returned by the server will be stored within an ImExporter
* context.
*/
ctx=AB_ImExporterContext_new();
/* execute the jobs which are in the given list (well, for this tutorial
* there is only one job in the list, but the number is not limited).
* This effectivly sends all jobs to the respective backends/banks.
* It only returns an error code (!=0) if there has been a problem
* sending the jobs. */
rv=AB_Banking_SendCommands(ab, cmdList, ctx);
if (rv<0) {
fprintf(stderr, "Error on executeQueue (%d)\n", rv);
/* clean up */
AB_ImExporterContext_free(ctx);
AB_Banking_Fini(ab);
AB_Banking_free(ab);
return 2;
}
else {
AB_IMEXPORTER_ACCOUNTINFO *ai;
ai=AB_ImExporterContext_GetFirstAccountInfo(ctx);
while (ai) {
const AB_TRANSACTION *t;
t=AB_ImExporterAccountInfo_GetFirstTransaction(ai, 0, 0);
while (t) {
const AB_VALUE *v;
v=AB_Transaction_GetValue(t);
if (v) {
const char *purpose;
/* The purpose (memo field) might contain multiple lines. */
purpose=AB_Transaction_GetPurpose(t);
fprintf(stderr, " %-32s (%.2f %s)\n",
purpose,
AB_Value_GetValueAsDouble(v),
AB_Value_GetCurrency(v));
}
t=AB_Transaction_List_Next(t);
} /* while transactions */
ai=AB_ImExporterAccountInfo_List_Next(ai);
} /* while ai */
} /* if executeQueue successful */
/* free im-/exporter context */
AB_ImExporterContext_free(ctx);
} /* if (as) */
/* This function deinitializes AqBanking. It undoes the effects of
* AB_Banking_Init() and should be called before destroying an AB_BANKING
* object.
*/
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 3;
}
/* free AqBanking object */
AB_Banking_free(ab);
return 0;
}
aqbanking-6.9.1/aqbanking.iss 0000644 0001750 0001750 00000027650 15131211130 013054 0000000 0000000 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Input configuration for the Inno Setup Compiler
; Copyright (c) 2005 Christian Stimming
;
; Inno Setup Compiler: See http://www.jrsoftware.org/isdl.php
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[Setup]
; Using the name here directly because we want it capitalized
AppName=AqBanking
AppVerName=AqBanking 6.9.1
AppPublisher=AqBanking Development Team
AppPublisherURL=http://sourceforge.net/projects/aqbanking
AppSupportURL=http://sourceforge.net/support/getsupport.php?group_id=115695
AppUpdatesURL=http://sourceforge.net/project/showfiles.php?group_id=115695
Compression=lzma
DefaultDirName={pf}\aqbanking
DirExistsWarning=no
InfoAfterFile=README
LicenseFile=COPYING
OutputBaseFilename=aqbanking-6.9.1-setup
OutputDir=.
UninstallFilesDir={app}\uninstall\aqbanking
[Types]
Name: "full"; Description: "{cm:FullInstall}"
Name: "binary"; Description: "{cm:BinaryInstall}"
Name: "custom"; Description: "{cm:CustomInstall}"; Flags: iscustom
[Components]
Name: "main"; Description: "{cm:MainFiles}"; Types: full binary custom; Flags: fixed
Name: "devel"; Description: "{cm:DevelFiles}"; Types: full
Name: "doc"; Description: "{cm:DocFiles}"; Types: full
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Here we configure the included files and the place of their
; installation
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[Files]
; All main DLLs
Source: "win32-tmp\usr\bin\*.dll"; DestDir: "{app}\bin"; Flags: sharedfile promptifolder replacesameversion; Components: main
; Everything from the lib directory, including all plugins
Source: "win32-tmp\usr\lib\lib*.la"; DestDir: "{app}\lib"; Components: main
Source: "win32-tmp\usr\lib\aqbanking\*"; DestDir: "{app}\lib\aqbanking"; Flags: recursesubdirs; Components: main
; The plugins that belong to gwenhywfar.
Source: "win32-tmp\gwen\dbio\*"; DestDir: "{reg:HKLM\Software\Gwenhywfar\Paths,dbio-plugins|{app}\lib\aqbanking\plugins\44}"; Flags: ignoreversion recursesubdirs; Components: main
Source: "win32-tmp\gwen\crypttoken\*"; DestDir: "{reg:HKLM\Software\Gwenhywfar\Paths,plugindir|{app}\lib\aqbanking\plugins\44}\crypttoken"; Flags: ignoreversion recursesubdirs; Components: main
; The commandline tools
Source: "win32-tmp\usr\bin\*.exe"; DestDir: "{app}\bin"; Components: main
; The config-scripts. They are post-processed by the Pascal script below.
Source: "aqbanking-config.in.in"; DestDir: "{app}\bin"; Components: devel; AfterInstall: MyAfterInstallConfig(ExpandConstant('{app}\bin\aqbanking-config'))
Source: "src\plugins\backends\aqhbci\aqhbci-config.in.in"; DestDir: "{app}\bin"; Components: devel; AfterInstall: MyAfterInstallConfig(ExpandConstant('{app}\bin\aqhbci-config'))
Source: "src\frontends\qbanking\lib\qbanking-config.in.in"; DestDir: "{app}\bin"; Components: devel; AfterInstall: MyAfterInstallConfig(ExpandConstant('{app}\bin\qbanking-config'))
; The headers, and the aclocal macro.
Source: "win32-tmp\usr\include\*"; DestDir: "{app}\include"; Flags: ignoreversion recursesubdirs; Components: devel
Source: "win32-tmp\usr\share\*"; DestDir: "{app}\share"; Flags: ignoreversion recursesubdirs; Components: devel
Source: "win32-tmp\share\*"; DestDir: "{app}\share"; Flags: ignoreversion recursesubdirs; Components: devel
; And all the documentation
Source: "README"; DestDir: "{app}\doc\aqbanking"; Components: doc
Source: "NEWS"; DestDir: "{app}\doc\aqbanking"; Components: doc
Source: "COPYING"; DestDir: "{app}\doc\aqbanking"; Components: doc
Source: "AUTHORS"; DestDir: "{app}\doc\aqbanking"; Components: doc
Source: "ChangeLog"; DestDir: "{app}\doc\aqbanking"; Components: doc
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Delete automatically created files on uninstall
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[UninstallDelete]
Type: files; Name: "{app}\bin\*-config"
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Define the registry keys Setup should create (HKLM = HKEY_LOCAL_MACHINE)
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[Registry]
Root: HKLM; Subkey: "Software\Aqbanking"; ValueType: none; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: none; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "prefix"; ValueData: "{app}"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "libdir"; ValueData: "{app}\lib"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "pkglibdir"; ValueData: "{app}\lib\aqbanking"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "plugindir"; ValueData: "{app}\lib\aqbanking\plugins\44"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "providerdir"; ValueData: "{app}\lib\aqbanking\plugins\44\providers"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "bankinfodir"; ValueData: "{app}\lib\aqbanking\plugins\44\bankinfo"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "imexporterdir"; ValueData: "{app}\lib\aqbanking\plugins\44\imexporters"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "importerdir"; ValueData: "{app}\lib\aqbanking\plugins\44\imexporters"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "pkgdatadir"; ValueData: "{app}\share\aqbanking"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "sysconfdir"; ValueData: "{app}\etc"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "wizarddir"; ValueData: "{app}\lib\aqbanking\plugins\44\wizards"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\Aqbanking\Paths"; ValueType: string; ValueName: "localedir"; ValueData: "{app}\share\locale"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\AqBanking\Paths"; ValueType: string; ValueName: "xmldatadir"; ValueData: "{app}\share\aqhbci\xml"; Flags: uninsdeletevalue
Root: HKLM; Subkey: "Software\AqBanking\Paths"; ValueType: string; ValueName: "cfgmoduledir"; ValueData: "{app}\lib\aqbanking\plugins\44\frontends\qbanking\cfgmodules"; Flags: uninsdeletevalue
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; This large section is a Pascal scripting program that will modify
; the aqbanking-config shell script so that it then includes the
; correct values according to our local installation. See
; http://www.remobjects.com/?ps for a syntax reference.
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[Code]
function MingwBacksl(const S: String): String;
begin
{ Modify the path name S so that it can be used by MinGW }
if Length(ExtractFileDrive(S)) = 0 then
Result := S
else begin
Result := '/'+S;
StringChange(Result, ':\', '\');
end;
StringChange(Result, '\', '/');
end;
procedure MyAfterInstallConfig(FileName: String);
var
FileString, appdir, windir, bindir, includedir, plugindir, datadir, pkgdatadir: String;
Res: Boolean;
begin
{ Load the unchanged original file }
Res := LoadStringFromFile(Format('%s.in.in',[FileName]), FileString);
if Res = False then
MsgBox('Error on loading '+FileName+'.in.in for final adaptation', mbInformation, MB_OK);
{ Insert the custom file header; #10 is the linefeed character }
Insert('#!/bin/sh '#10'dir="@prefix'+'@"'#10, FileString, 0);
{ Get the installation-specific paths }
windir := MingwBacksl(ExpandConstant('{win}'));
appdir := MingwBacksl(ExpandConstant('{app}'));
includedir := appdir + '/include';
bindir := appdir + '/bin';
plugindir := appdir + '/lib/aqbanking/plugins/44';
datadir := appdir + '/share';
pkgdatadir := datadir + '/aqbanking';
{ Now make all the replacements }
{ Explanation: StringChange(S,FromStr,ToStr): Change all occurances in S of FromStr to ToStr. }
StringChange(FileString, '@'+'prefix@', appdir);
StringChange(FileString, '@'+'libdir@', windir);
StringChange(FileString, '@'+'all_includes@', '-I/usr/local/include/gwenhywfar5');
StringChange(FileString, '@'+'aqbanking_includes@', '-I'+includedir);
StringChange(FileString, '@'+'aqbanking_ldflags@', '-L'+bindir);
StringChange(FileString, '@'+'aqbanking_libs@', '-laqbanking');
StringChange(FileString, '@'+'aqbanking_plugindir@', plugindir);
StringChange(FileString, '@'+'aqbanking_pkgdatadir@', pkgdatadir);
StringChange(FileString, '@'+'AQBANKING_VERSION_MAJOR@', '6');
StringChange(FileString, '@'+'AQBANKING_VERSION_MINOR@', '9');
StringChange(FileString, '@'+'AQBANKING_VERSION_PATCHLEVEL@', '1');
StringChange(FileString, '@'+'AQBANKING_VERSION_BUILD@', '0');
StringChange(FileString, '@'+'AQBANKING_VERSION_TAG@', 'stable');
StringChange(FileString, '@'+'cbanking_libs@', '-L' + bindir + ' @cbanking_libs@');
StringChange(FileString, '@'+'cbanking_includes@', '-I'+includedir);
StringChange(FileString, '@'+'qbanking_libs@', '-L' + bindir + ' @qbanking_libs@');
StringChange(FileString, '@'+'qbanking_includes@', '-I'+includedir);
StringChange(FileString, '@'+'qbanking_data@', datadir + '/qbanking');
StringChange(FileString, '@'+'QBANKING_VERSION_MAJOR@', '@QBANKING_VERSION_MAJOR@');
StringChange(FileString, '@'+'QBANKING_VERSION_MINOR@', '@QBANKING_VERSION_MINOR@');
StringChange(FileString, '@'+'QBANKING_VERSION_PATCHLEVEL@', '@QBANKING_VERSION_PATCHLEVEL@');
StringChange(FileString, '@'+'QBANKING_VERSION_BUILD@', '@QBANKING_VERSION_BUILD@');
StringChange(FileString, '@'+'kbanking_libs@', '-L' + bindir + ' @kbanking_libs@');
StringChange(FileString, '@'+'kbanking_includes@', '-I'+includedir);
{ Save the final file }
Res := SaveStringToFile(FileName, FileString, False);
if Res = False then
MsgBox('Error on saving '+FileName+' for final adaptation', mbInformation, MB_OK);
end;
function InitializeSetup(): Boolean;
begin
Result := Length(ExpandConstant('{reg:HKLM\Software\Gwenhywfar\Paths,prefix|a}')) > 1;
if Result = False then
MsgBox(ExpandConstant('{cm:PrereqNotFound}'), mbInformation, MB_OK);
end;
[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "de"; MessagesFile: "compiler:Languages\German.isl"
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; These are only for improved text messages
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;[Messages]
;; *** "Select Destination" wizard page
;SelectDirLabel3=Setup will install [name] into the following folder. If you have MinGW installed on your system, you can safely choose MinGW's root folder here as well (e.g. c:\msys\1.0).
;
;de.SelectDirLabel3=Das Setup wird [name] in den folgenden Ordner installieren. Wenn Sie MinGW auf Ihrem Computer installiert haben, können Sie hier problemlos das Root-Verzeichnis von MinGW angeben (z.B. c:\msys\1.0).
; The customized messages with their translations here.
[CustomMessages]
; *** Prerequisite message
PrereqNotFound=The setup program did not find the DLL of the Gwenhywfar package and/or the registry keys of the Gwenhywfar installation. You need to install Gwenhywfar from the setup executable, and then start this setup again.
de.PrereqNotFound=Das Setup-Programm hat die DLL des Gwenhywfar-Pakets und/oder dessen Registry-Keys nicht gefunden. Sie müssen zuerst Gwenhywfar über dessen Setup-Programm installieren und dann dieses Setup-Programm erneut starten.
; *** "Select Components" wizard page
FullInstall=Full installation
BinaryInstall=Install only libraries
CustomInstall=Custom installation
MainFiles=Aqbanking DLL Library
DevelFiles=Development files
DocFiles=Documentation files
de.FullInstall=Komplett-Installation
de.BinaryInstall=Nur Bibliotheken installieren
de.CustomInstall=Benutzerdefiniert
de.MainFiles=Aqbanking DLL Bibliothek
de.DevelFiles=Entwickler-Dateien
de.DocFiles=Dokumentations-Dateien
aqbanking-6.9.1/Makefile.am 0000644 0001750 0001750 00000021057 15113036011 012433 0000000 0000000 SUBDIRS=admin doc m4 src po @TUTORIALS@
DIST_SUBDIRS=admin doc m4 src po tutorials
EXTRA_DIST=AUTHORS COPYING ChangeLog INSTALL NEWS README \
aqbanking.spec.in aqbanking.spec \
aqbanking.iss.in aqbanking.iss \
Doxyfile.in \
i18nsources \
Makefile.cvs
idatadir=${datadir}/doc/aqbanking
idata_DATA=AUTHORS COPYING ChangeLog README
bin_SCRIPTS=aqbanking-config
aclocaldir = $(datadir)/aclocal
dist_aclocal_DATA = aqbanking.m4
ACLOCAL_AMFLAGS = $(ADD_ACLOCAL_FLAGS) -I m4
CLEANFILES = aqbanking-config aqbanking-config.in
aqbanking-config: aqbanking-config.in
echo "#! /bin/sh" >aqbanking-config && \
echo 'dir="@prefix@"' >>aqbanking-config && \
cat aqbanking-config.in >>aqbanking-config && \
chmod a+x aqbanking-config
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = aqbanking.pc
cmakeconfigdir = $(libdir)/cmake/aqbanking-$(AQBANKING_VERSION_MAJOR).$(AQBANKING_VERSION_MINOR)
cmakeconfig_DATA = aqbanking-config.cmake aqbanking-config-version.cmake
listdoc.h:
$(gwenhywfar_bindir)/mklistdoc -I $(gwenhywfar_headers) -v `find $(aqbanking_symlinkdir) -name '*.h' | LC_ALL=C sort ` >listdoc.h
srcdoc: Doxyfile listdoc.h
if test -d apidoc; then rm -Rf apidoc; fi
mkdir -p apidoc/html/aqbanking-@AQBANKING_VERSION_RELEASE_STRING@
doxygen
install-srcdoc: srcdoc
test -d "$(DESTDIR)@docpath@/$(PACKAGE)" || \
mkdir -p "$(DESTDIR)@docpath@/$(PACKAGE)"
for f in apidoc/html/aqbanking-@AQBANKING_VERSION_RELEASE_STRING@/*; do \
cp -dR $$f "$(DESTDIR)@docpath@/$(PACKAGE)/"; \
done
cp "apidoc/$(PACKAGE).tag" "$(DESTDIR)@docpath@/"
rpm: $(PACKAGE).spec dist
rpmbuild="rpm" && \
if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \
$$rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz
# Rule for using the Inno Setup compiler. The path to iscc.exe is set
# manually here for now.
ISCC = "C:\Programme\Inno Setup 5\iscc.exe"
wintmpdir = win32-tmp
setup: aqbanking.iss
mkdir -p $(wintmpdir)
for A in `find src/plugins -name *.la`; do \
grep -v relink_command $${A} > $${A}.tmp && \
mv $${A}.tmp $${A}; \
done
$(MAKE) DESTDIR="`pwd`/$(wintmpdir)" \
aqbanking_pkgdatadir="/share/$(PACKAGE)" \
gwenhywfar_plugins="/gwen" \
WIN_PATH_WINDOWS_MINGW="/windows" \
install \
&& for A in `find $(wintmpdir) -name '*.exe'`; do \
strip $${A}; \
done \
&& $(ISCC) aqbanking.iss \
&& rm -rf $(wintmpdir)
if IF_MAKE_I18N_FILES
# We directly read that file list. For old make programs, you would
# set this to an empty variable, because they are only needed by the
# developers and release technicians.
I18NFILES=$(shell cat $(srcdir)/i18nsources)
DLGFILES=$(shell cat $(srcdir)/dlgsources)
PDFILES=$(shell cat $(srcdir)/pdsources)
# Current build rule:
sources:
rm -f $(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources
$(MAKE) -C $(top_builddir)/src sources
$(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources:
$(MAKE) sources
# Could also be solved this way: Read the I18NFILES variable from file
#include $(srcdir)/i18nsources
# (Needs the following build rule:)
#sources:
# rm -f $(srcdir)/i18nsources
# $(MAKE) -C $(top_srcdir)/src sources
# mv $(srcdir)/i18nsources $(srcdir)/i18nsources.tmp
# echo "I18NFILES = \\" > $(srcdir)/i18nsources
# $(SED) 's!\(^.*$$\)!$$(top_srcdir)/\1 \\!' \
# $(srcdir)/i18nsources.tmp >> $(srcdir)/i18nsources
# echo '$$(top_srcdir)/config.h' >> $(srcdir)/i18nsources
# rm -f $(srcdir)/i18nsources.tmp
# $(MAKE) Makefile
# The list of available languages (makes file name transformations much easier)
ALL_LINGUAS = $(basename $(notdir $(shell ls $(srcdir)/po/*.po)))
# For old make programs, the locales would directly be written here:
#ALL_LINGUAS = de
# List of po files. Only necessary in the dependency of the catalogs
# rule. For old make programs, you would simply set this to an empty
# variable.
I18NLINGUAS = $(foreach lang,$(ALL_LINGUAS),$(srcdir)/po/$(lang).po)
# List of mo files. Only necessary for cleanup. For old make programs,
# you would simply set this to an empty variable.
I18NCATALOGS = $(foreach lang,$(ALL_LINGUAS),$(top_builddir)/po/$(lang).mo)
I18NCATALOGS += $(foreach lang,$(ALL_LINGUAS),$(top_builddir)/po/$(lang).qm)
po/$(PACKAGE).pot: i18nsources dlgsources pdsources $(I18NFILES)
rm -f po/tmp*
if test -n "$(I18NFILES)"; then \
$(XGETTEXT) -C -c -ki18n -ktr2i18n -kI18N -kI18S\
-kI18N_NOOP -ktranslate -kaliasLocale \
-ktr -ktrUtf8 \
'--msgid-bugs-address=aqbanking-user@lists.aqbanking.de' \
-o po/tmppot \
$(I18NFILES) ; \
fi
for i in $(DLGFILES); do \
po4a-updatepo -f xml -m $$i -p po/tmppot1 -o attributes=text && \
msghack -o po/tmppot2 --append po/tmppot po/tmppot1 && \
mv po/tmppot2 po/tmppot; \
done
for i in $(PDFILES); do \
po4a-updatepo -f xml -m $$i -p po/tmppot1 -o wrap \
-o translated=" " \
-o untranslated=" " \
&& \
msghack -o po/tmppot2 --append po/tmppot po/tmppot1 && \
mv po/tmppot2 po/tmppot; \
done
mv po/tmppot po/$(PACKAGE).pot
rm -f po/tmppot1
# This rule is not called automatically. It is necessary only for
# the translators, so translators only call this manually.
merge: po/$(PACKAGE).pot
@catalogs=$(I18NLINGUAS); \
for cat in $$catalogs; do \
echo msgmerge -o $$cat.new $$cat ./po/$(PACKAGE).pot ; \
msgmerge -o $$cat.new $$cat ./po/$(PACKAGE).pot ; \
if test -s $$cat.new; then \
grep -v "\"POT-Creation" $$cat.new | grep -v '^#' > $$cat.new.2 ; \
grep -v "\"POT-Creation" $$cat | grep -v '^#' >> $$cat.new.1; \
if diff $$cat.new.1 $$cat.new.2; then \
echo " $$cat unchanged; leaving existing po file untouched."; \
rm $$cat.new; \
else \
mv $$cat.new $$cat ; \
fi; \
rm -f $$cat.new.1 $$cat.new.2 ;\
fi ;\
done
catalogs: $(I18NLINGUAS)
@for i in $(ALL_LINGUAS); do \
filelingua=$(srcdir)/po/$$i.po; \
filecat=$(top_builddir)/po/$$i.mo; \
fileqm=$(top_builddir)/po/$$i.qm; \
echo "Creating translation catalogs for language \"$$i\""; \
$(MSGFMT) -c -o $${filecat} $${filelingua} || touch $${filelingua}; \
if test $(MSGFMT_SUPPORTS_QT) = "yes"; then \
$(MSGFMT) -o $${fileqm} --qt $${filelingua} || touch $${filelingua}; \
else \
echo "$(MSGFMT) does not have the option --qt; ignoring qt translations"; \
fi; \
done
ilocaledir = $(datadir)/locale
install-mo-catalogs: catalogs
@for i in $(ALL_LINGUAS); do \
filecat=$(top_builddir)/po/$$i.mo; \
fileqm=$(top_builddir)/po/$$i.qm; \
echo "Installing translation catalog for language \"$$i\""; \
$(mkinstalldirs) "$(DESTDIR)$(ilocaledir)/$$i/LC_MESSAGES"; \
$(INSTALL_DATA) $${filecat} $(DESTDIR)$(ilocaledir)/$$i/LC_MESSAGES/$(PACKAGE).mo; \
done
uninstall-mo-catalogs:
@$(NORMAL_UNINSTALL)
@for i in $(ALL_LINGUAS); do \
echo " rm -f '$(DESTDIR)$(ilocaledir)/$$i/LC_MESSAGES/$(PACKAGE).mo'"; \
rm -f "$(DESTDIR)$(ilocaledir)/$$i/LC_MESSAGES/$(PACKAGE).mo"; \
done
install-data-local: install-mo-catalogs
uninstall-local: uninstall-mo-catalogs
CLEANFILES += $(I18NCATALOGS)
endif # if USE_I18N
# Rule for only building the source rpm
srpm: $(PACKAGE).spec dist
rpmbuild="rpm" && \
if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \
$$rpmbuild --nodeps -ts $(PACKAGE)-$(VERSION).tar.gz
BUILT_SOURCES = $(iheader_HEADERS)
CLEANFILES += $(BUILT_SOURCES)
# Call this to have Qt's uic files and glade files cleaned up from
# bad elements
code-cleanup:
-admin/fixuifiles
-admin/glade-fixup
#cppcheck:
# $(MAKE) -C src cppcheck
cppcheck:
for f in `find . -name \*.c -o -name \*.cpp`; do cppcheck --force $$f; done
clang-check:
scan-build $(MAKE)
format:
find . -name '*.[c,h,cpp]' -exec $(ASTYLE) \
--style=stroustrup \
-s2 \
--min-conditional-indent=0 \
--indent-labels \
--max-continuation-indent=100 \
--pad-comma \
--pad-header \
--unpad-paren \
--align-pointer=name \
--break-closing-braces \
--break-one-line-headers \
--attach-return-type \
--convert-tabs \
--max-code-length=120 \
--break-after-logical \
--preserve-date \
--suffix=none \{\} \;
ChangeLog:
if test -d .git; then \
git log --pretty="format:------------------------------------------------------------------%n%ai %an%n%s%n%b" -n 100 >ChangeLog ;\
else \
touch ChangeLog; \
fi
dist-hook:
rm -f ChangeLog 2>/dev/null
$(MAKE) ChangeLog
types:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d typefiles; \
done
typefiles:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d typefiles; \
done
typedefs:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d typedefs; \
done
aqbanking-6.9.1/config.sub 0000755 0001750 0001750 00000105116 14175772605 012410 0000000 0000000 #! /bin/sh
# Configuration validation subroutine script.
# Copyright 1992-2022 Free Software Foundation, Inc.
# shellcheck disable=SC2006,SC2268 # see below for rationale
timestamp='2022-01-03'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see .
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that
# program. This Exception is an additional permission under section 7
# of the GNU General Public License, version 3 ("GPLv3").
# Please send patches to .
#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1.
# Otherwise, we print the canonical config type on stdout and succeed.
# You can get the latest version of this script from:
# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
# that are meaningful with *any* GNU software.
# Each package is responsible for reporting which valid configurations
# it does not support. The user should be able to distinguish
# a failure to support a valid configuration from a meaningless
# configuration.
# The goal of this file is to map all the various variations of a given
# machine specification into a single specification in the form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or in some cases, the newer four-part form:
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
# The "shellcheck disable" line above the timestamp inhibits complaints
# about features and limitations of the classic Bourne shell that were
# superseded or lifted in POSIX. However, this script identifies a wide
# variety of pre-POSIX systems that do not have POSIX shells at all, and
# even some reasonably current systems (Solaris 10 as case-in-point) still
# have a pre-POSIX /bin/sh.
me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
Canonicalize a configuration name.
Options:
-h, --help print this help, then exit
-t, --time-stamp print date of last modification, then exit
-v, --version print version number, then exit
Report bugs and patches to ."
version="\
GNU config.sub ($timestamp)
Copyright 1992-2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
help="
Try \`$me --help' for more information."
# Parse command line
while test $# -gt 0 ; do
case $1 in
--time-stamp | --time* | -t )
echo "$timestamp" ; exit ;;
--version | -v )
echo "$version" ; exit ;;
--help | --h* | -h )
echo "$usage"; exit ;;
-- ) # Stop option processing
shift; break ;;
- ) # Use stdin as input.
break ;;
-* )
echo "$me: invalid option $1$help" >&2
exit 1 ;;
*local*)
# First pass through any local machine types.
echo "$1"
exit ;;
* )
break ;;
esac
done
case $# in
0) echo "$me: missing argument$help" >&2
exit 1;;
1) ;;
*) echo "$me: too many arguments$help" >&2
exit 1;;
esac
# Split fields of configuration type
# shellcheck disable=SC2162
saved_IFS=$IFS
IFS="-" read field1 field2 field3 field4 <&2
exit 1
;;
*-*-*-*)
basic_machine=$field1-$field2
basic_os=$field3-$field4
;;
*-*-*)
# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
# parts
maybe_os=$field2-$field3
case $maybe_os in
nto-qnx* | linux-* | uclinux-uclibc* \
| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
| storm-chaos* | os2-emx* | rtmk-nova*)
basic_machine=$field1
basic_os=$maybe_os
;;
android-linux)
basic_machine=$field1-unknown
basic_os=linux-android
;;
*)
basic_machine=$field1-$field2
basic_os=$field3
;;
esac
;;
*-*)
# A lone config we happen to match not fitting any pattern
case $field1-$field2 in
decstation-3100)
basic_machine=mips-dec
basic_os=
;;
*-*)
# Second component is usually, but not always the OS
case $field2 in
# Prevent following clause from handling this valid os
sun*os*)
basic_machine=$field1
basic_os=$field2
;;
zephyr*)
basic_machine=$field1-unknown
basic_os=$field2
;;
# Manufacturers
dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
| unicom* | ibm* | next | hp | isi* | apollo | altos* \
| convergent* | ncr* | news | 32* | 3600* | 3100* \
| hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
| ultra | tti* | harris | dolphin | highlevel | gould \
| cbm | ns | masscomp | apple | axis | knuth | cray \
| microblaze* | sim | cisco \
| oki | wec | wrs | winbond)
basic_machine=$field1-$field2
basic_os=
;;
*)
basic_machine=$field1
basic_os=$field2
;;
esac
;;
esac
;;
*)
# Convert single-component short-hands not valid as part of
# multi-component configurations.
case $field1 in
386bsd)
basic_machine=i386-pc
basic_os=bsd
;;
a29khif)
basic_machine=a29k-amd
basic_os=udi
;;
adobe68k)
basic_machine=m68010-adobe
basic_os=scout
;;
alliant)
basic_machine=fx80-alliant
basic_os=
;;
altos | altos3068)
basic_machine=m68k-altos
basic_os=
;;
am29k)
basic_machine=a29k-none
basic_os=bsd
;;
amdahl)
basic_machine=580-amdahl
basic_os=sysv
;;
amiga)
basic_machine=m68k-unknown
basic_os=
;;
amigaos | amigados)
basic_machine=m68k-unknown
basic_os=amigaos
;;
amigaunix | amix)
basic_machine=m68k-unknown
basic_os=sysv4
;;
apollo68)
basic_machine=m68k-apollo
basic_os=sysv
;;
apollo68bsd)
basic_machine=m68k-apollo
basic_os=bsd
;;
aros)
basic_machine=i386-pc
basic_os=aros
;;
aux)
basic_machine=m68k-apple
basic_os=aux
;;
balance)
basic_machine=ns32k-sequent
basic_os=dynix
;;
blackfin)
basic_machine=bfin-unknown
basic_os=linux
;;
cegcc)
basic_machine=arm-unknown
basic_os=cegcc
;;
convex-c1)
basic_machine=c1-convex
basic_os=bsd
;;
convex-c2)
basic_machine=c2-convex
basic_os=bsd
;;
convex-c32)
basic_machine=c32-convex
basic_os=bsd
;;
convex-c34)
basic_machine=c34-convex
basic_os=bsd
;;
convex-c38)
basic_machine=c38-convex
basic_os=bsd
;;
cray)
basic_machine=j90-cray
basic_os=unicos
;;
crds | unos)
basic_machine=m68k-crds
basic_os=
;;
da30)
basic_machine=m68k-da30
basic_os=
;;
decstation | pmax | pmin | dec3100 | decstatn)
basic_machine=mips-dec
basic_os=
;;
delta88)
basic_machine=m88k-motorola
basic_os=sysv3
;;
dicos)
basic_machine=i686-pc
basic_os=dicos
;;
djgpp)
basic_machine=i586-pc
basic_os=msdosdjgpp
;;
ebmon29k)
basic_machine=a29k-amd
basic_os=ebmon
;;
es1800 | OSE68k | ose68k | ose | OSE)
basic_machine=m68k-ericsson
basic_os=ose
;;
gmicro)
basic_machine=tron-gmicro
basic_os=sysv
;;
go32)
basic_machine=i386-pc
basic_os=go32
;;
h8300hms)
basic_machine=h8300-hitachi
basic_os=hms
;;
h8300xray)
basic_machine=h8300-hitachi
basic_os=xray
;;
h8500hms)
basic_machine=h8500-hitachi
basic_os=hms
;;
harris)
basic_machine=m88k-harris
basic_os=sysv3
;;
hp300 | hp300hpux)
basic_machine=m68k-hp
basic_os=hpux
;;
hp300bsd)
basic_machine=m68k-hp
basic_os=bsd
;;
hppaosf)
basic_machine=hppa1.1-hp
basic_os=osf
;;
hppro)
basic_machine=hppa1.1-hp
basic_os=proelf
;;
i386mach)
basic_machine=i386-mach
basic_os=mach
;;
isi68 | isi)
basic_machine=m68k-isi
basic_os=sysv
;;
m68knommu)
basic_machine=m68k-unknown
basic_os=linux
;;
magnum | m3230)
basic_machine=mips-mips
basic_os=sysv
;;
merlin)
basic_machine=ns32k-utek
basic_os=sysv
;;
mingw64)
basic_machine=x86_64-pc
basic_os=mingw64
;;
mingw32)
basic_machine=i686-pc
basic_os=mingw32
;;
mingw32ce)
basic_machine=arm-unknown
basic_os=mingw32ce
;;
monitor)
basic_machine=m68k-rom68k
basic_os=coff
;;
morphos)
basic_machine=powerpc-unknown
basic_os=morphos
;;
moxiebox)
basic_machine=moxie-unknown
basic_os=moxiebox
;;
msdos)
basic_machine=i386-pc
basic_os=msdos
;;
msys)
basic_machine=i686-pc
basic_os=msys
;;
mvs)
basic_machine=i370-ibm
basic_os=mvs
;;
nacl)
basic_machine=le32-unknown
basic_os=nacl
;;
ncr3000)
basic_machine=i486-ncr
basic_os=sysv4
;;
netbsd386)
basic_machine=i386-pc
basic_os=netbsd
;;
netwinder)
basic_machine=armv4l-rebel
basic_os=linux
;;
news | news700 | news800 | news900)
basic_machine=m68k-sony
basic_os=newsos
;;
news1000)
basic_machine=m68030-sony
basic_os=newsos
;;
necv70)
basic_machine=v70-nec
basic_os=sysv
;;
nh3000)
basic_machine=m68k-harris
basic_os=cxux
;;
nh[45]000)
basic_machine=m88k-harris
basic_os=cxux
;;
nindy960)
basic_machine=i960-intel
basic_os=nindy
;;
mon960)
basic_machine=i960-intel
basic_os=mon960
;;
nonstopux)
basic_machine=mips-compaq
basic_os=nonstopux
;;
os400)
basic_machine=powerpc-ibm
basic_os=os400
;;
OSE68000 | ose68000)
basic_machine=m68000-ericsson
basic_os=ose
;;
os68k)
basic_machine=m68k-none
basic_os=os68k
;;
paragon)
basic_machine=i860-intel
basic_os=osf
;;
parisc)
basic_machine=hppa-unknown
basic_os=linux
;;
psp)
basic_machine=mipsallegrexel-sony
basic_os=psp
;;
pw32)
basic_machine=i586-unknown
basic_os=pw32
;;
rdos | rdos64)
basic_machine=x86_64-pc
basic_os=rdos
;;
rdos32)
basic_machine=i386-pc
basic_os=rdos
;;
rom68k)
basic_machine=m68k-rom68k
basic_os=coff
;;
sa29200)
basic_machine=a29k-amd
basic_os=udi
;;
sei)
basic_machine=mips-sei
basic_os=seiux
;;
sequent)
basic_machine=i386-sequent
basic_os=
;;
sps7)
basic_machine=m68k-bull
basic_os=sysv2
;;
st2000)
basic_machine=m68k-tandem
basic_os=
;;
stratus)
basic_machine=i860-stratus
basic_os=sysv4
;;
sun2)
basic_machine=m68000-sun
basic_os=
;;
sun2os3)
basic_machine=m68000-sun
basic_os=sunos3
;;
sun2os4)
basic_machine=m68000-sun
basic_os=sunos4
;;
sun3)
basic_machine=m68k-sun
basic_os=
;;
sun3os3)
basic_machine=m68k-sun
basic_os=sunos3
;;
sun3os4)
basic_machine=m68k-sun
basic_os=sunos4
;;
sun4)
basic_machine=sparc-sun
basic_os=
;;
sun4os3)
basic_machine=sparc-sun
basic_os=sunos3
;;
sun4os4)
basic_machine=sparc-sun
basic_os=sunos4
;;
sun4sol2)
basic_machine=sparc-sun
basic_os=solaris2
;;
sun386 | sun386i | roadrunner)
basic_machine=i386-sun
basic_os=
;;
sv1)
basic_machine=sv1-cray
basic_os=unicos
;;
symmetry)
basic_machine=i386-sequent
basic_os=dynix
;;
t3e)
basic_machine=alphaev5-cray
basic_os=unicos
;;
t90)
basic_machine=t90-cray
basic_os=unicos
;;
toad1)
basic_machine=pdp10-xkl
basic_os=tops20
;;
tpf)
basic_machine=s390x-ibm
basic_os=tpf
;;
udi29k)
basic_machine=a29k-amd
basic_os=udi
;;
ultra3)
basic_machine=a29k-nyu
basic_os=sym1
;;
v810 | necv810)
basic_machine=v810-nec
basic_os=none
;;
vaxv)
basic_machine=vax-dec
basic_os=sysv
;;
vms)
basic_machine=vax-dec
basic_os=vms
;;
vsta)
basic_machine=i386-pc
basic_os=vsta
;;
vxworks960)
basic_machine=i960-wrs
basic_os=vxworks
;;
vxworks68)
basic_machine=m68k-wrs
basic_os=vxworks
;;
vxworks29k)
basic_machine=a29k-wrs
basic_os=vxworks
;;
xbox)
basic_machine=i686-pc
basic_os=mingw32
;;
ymp)
basic_machine=ymp-cray
basic_os=unicos
;;
*)
basic_machine=$1
basic_os=
;;
esac
;;
esac
# Decode 1-component or ad-hoc basic machines
case $basic_machine in
# Here we handle the default manufacturer of certain CPU types. It is in
# some cases the only manufacturer, in others, it is the most popular.
w89k)
cpu=hppa1.1
vendor=winbond
;;
op50n)
cpu=hppa1.1
vendor=oki
;;
op60c)
cpu=hppa1.1
vendor=oki
;;
ibm*)
cpu=i370
vendor=ibm
;;
orion105)
cpu=clipper
vendor=highlevel
;;
mac | mpw | mac-mpw)
cpu=m68k
vendor=apple
;;
pmac | pmac-mpw)
cpu=powerpc
vendor=apple
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
cpu=m68000
vendor=att
;;
3b*)
cpu=we32k
vendor=att
;;
bluegene*)
cpu=powerpc
vendor=ibm
basic_os=cnk
;;
decsystem10* | dec10*)
cpu=pdp10
vendor=dec
basic_os=tops10
;;
decsystem20* | dec20*)
cpu=pdp10
vendor=dec
basic_os=tops20
;;
delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola)
cpu=m68k
vendor=motorola
;;
dpx2*)
cpu=m68k
vendor=bull
basic_os=sysv3
;;
encore | umax | mmax)
cpu=ns32k
vendor=encore
;;
elxsi)
cpu=elxsi
vendor=elxsi
basic_os=${basic_os:-bsd}
;;
fx2800)
cpu=i860
vendor=alliant
;;
genix)
cpu=ns32k
vendor=ns
;;
h3050r* | hiux*)
cpu=hppa1.1
vendor=hitachi
basic_os=hiuxwe2
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
cpu=hppa1.0
vendor=hp
;;
hp9k2[0-9][0-9] | hp9k31[0-9])
cpu=m68000
vendor=hp
;;
hp9k3[2-9][0-9])
cpu=m68k
vendor=hp
;;
hp9k6[0-9][0-9] | hp6[0-9][0-9])
cpu=hppa1.0
vendor=hp
;;
hp9k7[0-79][0-9] | hp7[0-79][0-9])
cpu=hppa1.1
vendor=hp
;;
hp9k78[0-9] | hp78[0-9])
# FIXME: really hppa2.0-hp
cpu=hppa1.1
vendor=hp
;;
hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
# FIXME: really hppa2.0-hp
cpu=hppa1.1
vendor=hp
;;
hp9k8[0-9][13679] | hp8[0-9][13679])
cpu=hppa1.1
vendor=hp
;;
hp9k8[0-9][0-9] | hp8[0-9][0-9])
cpu=hppa1.0
vendor=hp
;;
i*86v32)
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=sysv32
;;
i*86v4*)
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=sysv4
;;
i*86v)
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=sysv
;;
i*86sol2)
cpu=`echo "$1" | sed -e 's/86.*/86/'`
vendor=pc
basic_os=solaris2
;;
j90 | j90-cray)
cpu=j90
vendor=cray
basic_os=${basic_os:-unicos}
;;
iris | iris4d)
cpu=mips
vendor=sgi
case $basic_os in
irix*)
;;
*)
basic_os=irix4
;;
esac
;;
miniframe)
cpu=m68000
vendor=convergent
;;
*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
cpu=m68k
vendor=atari
basic_os=mint
;;
news-3600 | risc-news)
cpu=mips
vendor=sony
basic_os=newsos
;;
next | m*-next)
cpu=m68k
vendor=next
case $basic_os in
openstep*)
;;
nextstep*)
;;
ns2*)
basic_os=nextstep2
;;
*)
basic_os=nextstep3
;;
esac
;;
np1)
cpu=np1
vendor=gould
;;
op50n-* | op60c-*)
cpu=hppa1.1
vendor=oki
basic_os=proelf
;;
pa-hitachi)
cpu=hppa1.1
vendor=hitachi
basic_os=hiuxwe2
;;
pbd)
cpu=sparc
vendor=tti
;;
pbb)
cpu=m68k
vendor=tti
;;
pc532)
cpu=ns32k
vendor=pc532
;;
pn)
cpu=pn
vendor=gould
;;
power)
cpu=power
vendor=ibm
;;
ps2)
cpu=i386
vendor=ibm
;;
rm[46]00)
cpu=mips
vendor=siemens
;;
rtpc | rtpc-*)
cpu=romp
vendor=ibm
;;
sde)
cpu=mipsisa32
vendor=sde
basic_os=${basic_os:-elf}
;;
simso-wrs)
cpu=sparclite
vendor=wrs
basic_os=vxworks
;;
tower | tower-32)
cpu=m68k
vendor=ncr
;;
vpp*|vx|vx-*)
cpu=f301
vendor=fujitsu
;;
w65)
cpu=w65
vendor=wdc
;;
w89k-*)
cpu=hppa1.1
vendor=winbond
basic_os=proelf
;;
none)
cpu=none
vendor=none
;;
leon|leon[3-9])
cpu=sparc
vendor=$basic_machine
;;
leon-*|leon[3-9]-*)
cpu=sparc
vendor=`echo "$basic_machine" | sed 's/-.*//'`
;;
*-*)
# shellcheck disable=SC2162
saved_IFS=$IFS
IFS="-" read cpu vendor <&2
exit 1
;;
esac
;;
esac
# Here we canonicalize certain aliases for manufacturers.
case $vendor in
digital*)
vendor=dec
;;
commodore*)
vendor=cbm
;;
*)
;;
esac
# Decode manufacturer-specific aliases for certain operating systems.
if test x$basic_os != x
then
# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
# set os.
case $basic_os in
gnu/linux*)
kernel=linux
os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
;;
os2-emx)
kernel=os2
os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
;;
nto-qnx*)
kernel=nto
os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
;;
*-*)
# shellcheck disable=SC2162
saved_IFS=$IFS
IFS="-" read kernel os <&2
exit 1
;;
esac
# As a final step for OS-related things, validate the OS-kernel combination
# (given a valid OS), if there is a kernel.
case $kernel-$os in
linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
| linux-musl* | linux-relibc* | linux-uclibc* )
;;
uclinux-uclibc* )
;;
-dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
# These are just libc implementations, not actual OSes, and thus
# require a kernel.
echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
exit 1
;;
kfreebsd*-gnu* | kopensolaris*-gnu*)
;;
vxworks-simlinux | vxworks-simwindows | vxworks-spe)
;;
nto-qnx*)
;;
os2-emx)
;;
*-eabi* | *-gnueabi*)
;;
-*)
# Blank kernel with real OS is always fine.
;;
*-*)
echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
exit 1
;;
esac
# Here we handle the case where we know the os, and the CPU type, but not the
# manufacturer. We pick the logical manufacturer.
case $vendor in
unknown)
case $cpu-$os in
*-riscix*)
vendor=acorn
;;
*-sunos*)
vendor=sun
;;
*-cnk* | *-aix*)
vendor=ibm
;;
*-beos*)
vendor=be
;;
*-hpux*)
vendor=hp
;;
*-mpeix*)
vendor=hp
;;
*-hiux*)
vendor=hitachi
;;
*-unos*)
vendor=crds
;;
*-dgux*)
vendor=dg
;;
*-luna*)
vendor=omron
;;
*-genix*)
vendor=ns
;;
*-clix*)
vendor=intergraph
;;
*-mvs* | *-opened*)
vendor=ibm
;;
*-os400*)
vendor=ibm
;;
s390-* | s390x-*)
vendor=ibm
;;
*-ptx*)
vendor=sequent
;;
*-tpf*)
vendor=ibm
;;
*-vxsim* | *-vxworks* | *-windiss*)
vendor=wrs
;;
*-aux*)
vendor=apple
;;
*-hms*)
vendor=hitachi
;;
*-mpw* | *-macos*)
vendor=apple
;;
*-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
vendor=atari
;;
*-vos*)
vendor=stratus
;;
esac
;;
esac
echo "$cpu-$vendor-${kernel:+$kernel-}$os"
exit
# Local variables:
# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
# End:
aqbanking-6.9.1/INSTALL 0000664 0001750 0001750 00000022030 14043610744 011436 0000000 0000000 Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. (Caching is
disabled by default to prevent problems with accidental use of stale
cache files.)
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You only need
`configure.ac' if you want to change it or regenerate `configure' using
a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. Run `./configure --help'
for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a
time in the source code directory. After you have installed the
package for one architecture, use `make distclean' before reconfiguring
for another architecture.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=PATH' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the `--target=TYPE' option to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
will cause the specified gcc to be used as the C compiler (unless it is
overridden in the site shell script).
`configure' Invocation
======================
`configure' recognizes the following options to control how it
operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.
aqbanking-6.9.1/configure.ac 0000644 0001750 0001750 00000123150 15131211107 012663 0000000 0000000 # Process this file with autoconf to produce a configure script.
AC_PREREQ(2.56)
AC_INIT
AC_CANONICAL_BUILD
AC_CANONICAL_HOST
AC_CONFIG_SRCDIR([README])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIRS([m4])
###-------------------------------------------------------------------------
#
# AqBanking versions
#
AQBANKING_VERSION_MAJOR=6
AQBANKING_VERSION_MINOR=9
AQBANKING_VERSION_PATCHLEVEL=1
AQBANKING_VERSION_BUILD=0
dnl "stable", "rcX", "betaX", "svn"
AQBANKING_VERSION_TAG="stable"
###-------------------------------------------------------------------------
#
# SO versions
#
#
# AqBanking
#
AQBANKING_SO_CURRENT=53
AQBANKING_SO_AGE=9
AQBANKING_SO_REVISION=1
AQBANKING_SO_EFFECTIVE="`echo \$(($AQBANKING_SO_CURRENT-$AQBANKING_SO_AGE))`"
###-------------------------------------------------------------------------
#
# Generate version strings and BUILD
#
SVN="svn"
AQBANKING_VERSION_FULL_STRING="${AQBANKING_VERSION_MAJOR}.${AQBANKING_VERSION_MINOR}.${AQBANKING_VERSION_PATCHLEVEL}.${AQBANKING_VERSION_BUILD}${AQBANKING_VERSION_TAG}"
AQBANKING_VERSION_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL"
AQBANKING_FINTS_VERSION_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR"
case "$AQBANKING_VERSION_TAG" in
svn|cvs)
rev=`LC_ALL="C" $SVN info|grep 'Last Changed Rev'|cut -d' ' -f4`
if test "x$rev" != "x" ; then
AQBANKING_VERSION_FULL_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.${AQBANKING_VERSION_PATCHLEVEL}${AQBANKING_VERSION_TAG}-r${rev}"
fi
;;
git)
AQBANKING_VERSION_FULL_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.${AQBANKING_VERSION_PATCHLEVEL}.${AQBANKING_VERSION_BUILD}"
;;
esac
###-------------------------------------------------------------------------
#
# datetime
#
AC_ARG_WITH([build-datetime],
[AS_HELP_STRING([--with-build-datetime=DATETIME],
[use fixed datetime for build (default: current date and time)])],
[AS_IF([test "x$withval" = "xyes"],
[DATETIME="`date +\"%Y%m%d%H%M%S\"`"],
[DATETIME="`date +\"%Y%m%d%H%M%S\" --date=\"$withval\"`"])],
[DATETIME="`date +\"%Y%m%d%H%M%S\"`"])
AC_SUBST(DATETIME)
###-------------------------------------------------------------------------
#
# Create release strings
#
case "$AQBANKING_VERSION_TAG" in
cvs|svn)
AQBANKING_VERSION_RELEASE_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL.r${AQBANKING_VERSION_BUILD}"
;;
git)
AQBANKING_VERSION_RELEASE_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL.${AQBANKING_VERSION_BUILD}${AQBANKING_VERSION_TAG}"
;;
stable)
AQBANKING_VERSION_RELEASE_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL"
;;
*)
AQBANKING_VERSION_RELEASE_STRING="$AQBANKING_VERSION_MAJOR.$AQBANKING_VERSION_MINOR.$AQBANKING_VERSION_PATCHLEVEL"
# add TAG
AQBANKING_VERSION_RELEASE_STRING="${AQBANKING_VERSION_RELEASE_STRING}${AQBANKING_VERSION_TAG}"
;;
esac
###-------------------------------------------------------------------------
#
# SUBST and DEFINE versions
#
AC_SUBST(AQBANKING_VERSION_MAJOR)
AC_SUBST(AQBANKING_VERSION_MINOR)
AC_SUBST(AQBANKING_VERSION_PATCHLEVEL)
AC_SUBST(AQBANKING_VERSION_BUILD)
AC_SUBST(AQBANKING_VERSION_TAG)
AC_SUBST(AQBANKING_VERSION_FULL_STRING)
AC_SUBST(AQBANKING_VERSION_STRING)
AC_SUBST(AQBANKING_VERSION_RELEASE_STRING)
AC_SUBST(AQBANKING_FINTS_VERSION_STRING)
AC_DEFINE_UNQUOTED(AQBANKING_FINTS_VERSION_STRING, "$AQBANKING_FINTS_VERSION_STRING", [Version string for FINTS])
AC_SUBST(AQBANKING_SO_CURRENT)
AC_SUBST(AQBANKING_SO_REVISION)
AC_SUBST(AQBANKING_SO_AGE)
AC_SUBST(AQBANKING_SO_EFFECTIVE)
AC_DEFINE_UNQUOTED(AQBANKING_SO_EFFECTIVE_STR, "$AQBANKING_SO_EFFECTIVE",
[effective SO version])
AM_INIT_AUTOMAKE(aqbanking, $AQBANKING_VERSION_RELEASE_STRING)
###-------------------------------------------------------------------------
#
# determine operating system
#
AQ_CHECK_OS
###-------------------------------------------------------------------------
#
# prefix handling
#
AC_PREFIX_DEFAULT(/usr/local)
if test "x$prefix" = "xNONE"; then
prefix=$ac_default_prefix
ac_configure_args="$ac_configure_args --prefix $prefix"
fi
AC_SUBST(prefix)
###-------------------------------------------------------------------------
#
# static/shared handling
#
AC_ENABLE_STATIC(no)
AC_ENABLE_SHARED(yes)
###-------------------------------------------------------------------------
#
# define some needed variables
#
abs_top_builddir="`pwd`"
AC_SUBST(abs_top_builddir)
###-------------------------------------------------------------------------
#
# Enable some GNU extensions if using the GNU C library
#
AC_GNU_SOURCE
###-------------------------------------------------------------------------
#
# Checks for programs.
#
AC_PROG_CC
AC_PROG_CXX
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LIBTOOL
AC_LIBTOOL_WIN32_DLL
AC_LIBTOOL_RC
# Newer libtool doesn't have AC_LIBTOOL_RC anymore. Need to check for
# $(RC) by ourselves.
AC_CHECK_TOOL([RC], [windres], [no])
AC_CHECK_PROG(USE_DOT,dot,YES,NO)
AC_CHECK_PROG(SED,sed,sed)
PKG_PROG_PKG_CONFIG
# Check for the tool "astyle", but if not found, replace its program call by the no-op "echo" instead
AC_CHECK_PROG(ASTYLE, astyle, astyle, echo)
# Checks for libraries.
###-------------------------------------------------------------------------
#
# Checks for header files.
#
AC_HEADER_STDC
AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h locale.h])
AC_CHECK_HEADERS([iconv.h libintl.h locale.h])
AC_CHECK_HEADERS([assert.h ctype.h errno.h fcntl.h stdio.h stdlib.h string.h strings.h locale.h])
###-------------------------------------------------------------------------
#
# Checks for typedefs, structures, and compiler characteristics.
#
AC_C_CONST
AC_STRUCT_TM
###-------------------------------------------------------------------------
#
# Checks for library functions.
#
AC_FUNC_STRFTIME
AC_CHECK_FUNCS([memmove memset strcasecmp strdup strerror snprintf])
AC_CHECK_FUNCS([setlocale])
###-------------------------------------------------------------------------
#
# Backends. Those do not have a required ordering.
#
AC_ARG_WITH(backends,
[ --with-backends=list space separated list of backends (default:all)],
[aqbanking_backends="$withval"],
[aqbanking_backends="all"]
)
if test "$aqbanking_backends" = "all"; then
aqbanking_backends="aqhbci aqofxconnect aqebics aqpaypal aqnone aqgivve"
fi
for f in ${aqbanking_backends}; do
case "$f" in
aqhbci)
aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqhbci"
aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqhbci/libaqhbci.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQHBCI, 1, [plugin availability])
;;
aqfints)
aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqfints"
aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqfints/libaqfintsplugin.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQFINTS, 1, [plugin availability])
;;
aqebics)
aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqebics"
aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqebics/libaqebics.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQEBICS, 1, [plugin availability])
;;
aqofxconnect)
aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqofxconnect"
aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqofxconnect/libaqofxconnect.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQOFXCONNECT, 1, [plugin availability])
;;
aqpaypal)
aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqpaypal"
aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqpaypal/libaqpaypal.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQPAYPAL, 1, [plugin availability])
;;
aqnone)
aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqnone"
aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqnone/libaqnone.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQNONE, 1, [plugin availability])
;;
aqgivve)
aqbanking_plugins_backends_dirs="$aqbanking_plugins_backends_dirs aqgivve"
aqbanking_plugins_backends_libs="$aqbanking_plugins_backends_libs aqgivve/libaqgivve.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQGIVVE, 1, [plugin availability])
;;
*)
AC_MSG_ERROR("ERROR: Unknown plugin '$f'")
;;
esac
done
# always define this
AC_DEFINE(AQBANKING_WITH_PLUGIN_BACKEND_AQNONE, 1, [plugin availability])
AC_SUBST(aqbanking_plugins_backends_dirs)
AC_SUBST(aqbanking_plugins_backends_libs)
###-------------------------------------------------------------------------
#
# ImExporters. Those do not have a required ordering.
#
AC_ARG_WITH(imexporters,
[ --with-imexporters=list space separated list of im-/exporters (default:all)],
[aqbanking_imexporters="$withval"],
[aqbanking_imexporters="all"]
)
if test "$aqbanking_imexporters" = "all"; then
aqbanking_imexporters="csv eri2 ofx openhbci1 swift xmldb yellownet sepa ctxfile q43 camt xml"
fi
for f in ${aqbanking_imexporters}; do
case "$f" in
csv)
aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs csv"
aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs csv/libabimexporters_csv.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_CSV, 1, [plugin availability])
;;
eri2)
aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs eri2"
aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs eri2/libabimexporters_eri2.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_ERI2, 1, [plugin availability])
;;
ofx)
aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs ofx"
aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs ofx/libabimexporters_ofx.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_OFX, 1, [plugin availability])
;;
openhbci1)
aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs openhbci1"
aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs openhbci1/libabimexporters_openhbci1.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_OPENHBCI1, 1, [plugin availability])
;;
swift)
aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs swift"
aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs swift/libabimexporters_swift.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_SWIFT, 1, [plugin availability])
;;
xmldb)
aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs xmldb"
aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs xmldb/libabimexporters_xmldb.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_XMLDB, 1, [plugin availability])
;;
yellownet)
aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs yellownet"
aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs yellownet/libabimexporters_yellownet.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_YELLOWNET, 1, [plugin availability])
;;
sepa)
aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs sepa"
aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs sepa/libabimexporters_sepa.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_SEPA, 1, [plugin availability])
;;
ctxfile)
aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs ctxfile"
aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs ctxfile/libabimexporters_ctxfile.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_CTXFILE, 1, [plugin availability])
;;
q43)
aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs q43"
aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs q43/libabimexporters_q43.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_Q43, 1, [plugin availability])
;;
camt)
aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs camt"
aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs camt/libabimexporters_camt.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_CAMT, 1, [plugin availability])
;;
xml)
aqbanking_plugins_imexporters_dirs="$aqbanking_plugins_imexporters_dirs xml"
aqbanking_plugins_imexporters_libs="$aqbanking_plugins_imexporters_libs xml/libabimexporters_xml.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_IMEXPORTER_XML, 1, [plugin availability])
;;
*)
AC_MSG_ERROR("ERROR: Unknown plugin '$f'")
;;
esac
done
AC_SUBST(aqbanking_plugins_imexporters_dirs)
AC_SUBST(aqbanking_plugins_imexporters_libs)
###-------------------------------------------------------------------------
#
# Parsers. Those do not have a required ordering.
#
AC_ARG_WITH(parsers,
[ --with-parsers=list space separated list of parsers (default:all)],
[aqbanking_parsers="$withval"],
[aqbanking_parsers="all"]
)
if test "$aqbanking_parsers" = "all"; then
aqbanking_parsers="swift"
fi
for f in ${aqbanking_parsers}; do
case "$f" in
swift)
aqbanking_plugins_parsers_dirs="$aqbanking_plugins_parsers_dirs swift"
;;
*)
AC_MSG_ERROR("ERROR: Unknown plugin '$f'")
;;
esac
done
AC_SUBST(aqbanking_plugins_parsers_dirs)
###-------------------------------------------------------------------------
#
# Bankinfo plugins. Those do not have a required ordering.
#
AC_ARG_WITH(bankinfos,
[ --with-bankinfos=list space separated list of bankinfo (default:all)],
[aqbanking_bankinfos="$withval"],
[aqbanking_bankinfos="all"]
)
if test "$aqbanking_bankinfos" = "all"; then
aqbanking_bankinfos="de"
fi
for f in ${aqbanking_bankinfos}; do
case "$f" in
de)
aqbanking_plugins_bankinfo_dirs="$aqbanking_plugins_bankinfo_dirs de"
aqbanking_plugins_bankinfo_libs="$aqbanking_plugins_bankinfo_libs de/libbankinfo_de.la"
AC_DEFINE(AQBANKING_WITH_PLUGIN_BANKINFO_DE, 1, [plugin availability])
;;
*)
AC_MSG_ERROR("ERROR: Unknown plugin '$f'")
;;
esac
done
AC_SUBST(aqbanking_plugins_bankinfo_dirs)
AC_SUBST(aqbanking_plugins_bankinfo_libs)
###-------------------------------------------------------------------------
#
# Check for Gwen
#
# Variable used in aqbanking-config.cmake
AC_SUBST(GWENHYWFAR_MINIMUM_VERSION, "5.14.0.0")
AC_GWENHYWFAR(5,14,0,0)
all_includes="$all_includes $gwenhywfar_includes"
AC_MSG_CHECKING(if gui-tests desired)
AC_ARG_ENABLE(gui-tests,
[ --enable-gui-tests allow GUI tests (default=no)],
enable_gui_tests="$enableval",
enable_gui_tests="no")
AC_MSG_RESULT($enable_gui_tests)
if test "$enable_gui_tests" != "no"; then
# For libgwenhywfar > 3.99.20, look for its library gwengui-gtk2.
PKG_CHECK_MODULES([GWENGUI_GTK2], [gwengui-gtk2 gwenhywfar], [
HAVE_GWENGUI_GTK2=1
PKG_CHECK_MODULES([GTK2], [gtk+-2.0])
], [
HAVE_GWENGUI_GTK2=0
])
AC_SUBST(HAVE_GWENGUI_GTK2)
if test "$HAVE_GWENGUI_GTK2" = "1"; then
AC_DEFINE(USE_GWENGUI_GTK2, 1, [GTK2Gui availability])
fi
else
HAVE_GWENGUI_GTK2=0
fi
AM_CONDITIONAL(WITH_GWENGUI_GTK2, [test "$HAVE_GWENGUI_GTK2" = "1"])
###-------------------------------------------------------------------------
#
# check typemaker2
#
AC_MSG_CHECKING(typemaker2 binary)
AC_ARG_WITH(typemaker2-exe,
[ --with-typemaker2-exe=EXE path and name of the executable typemaker2],
[typemaker2_exe="$withval"],
[typemaker2_exe="\$(gwenhywfar_bindir)/typemaker2"]
)
AC_MSG_RESULT($typemaker2_exe)
AC_SUBST(typemaker2_exe)
###-------------------------------------------------------------------------
#
# check xmlmerge
#
AC_MSG_CHECKING(xmlmerge)
AC_ARG_WITH(xmlmerge, [ --with-xmlmerge=PATH path and name of tool xmlmerge],
[XMLMERGE="$withval"],
[XMLMERGE="$gwenhywfar_dir/bin/xmlmerge"])
AC_SUBST(XMLMERGE)
AC_MSG_RESULT($XMLMERGE)
###-------------------------------------------------------------------------
#
# Check for GMP
#
# Allow the user to override the gmp_libs detection here
if test "x$gmp_libs" = "x"; then
AC_CHECK_LIB(gmp, __gmpz_init, [have_gmp="yes"], [have_gmp="no"])
AC_CHECK_HEADERS(gmp.h, [], [have_gmp="no"])
if test "$have_gmp" != "yes"; then
AC_MSG_ERROR([GMP is required, see http://swox.com/gmp])
else
gmp_libs="-lgmp"
fi
fi
AC_SUBST(gmp_libs)
###-------------------------------------------------------------------------
#
# OS dependent settings
#
# Common settings; can be overridden per-OS below.
aqbanking_internal_libs="${abs_top_builddir}/src/libs/libaqbanking.la"
aqbanking_ldflags="-L\${libdir}"
aqbanking_libs="-laqbanking"
aqbanking_includes="-I\${includedir}/aqbanking6"
aqbanking_headerdir_am="\$(includedir)/aqbanking6"
aqbanking_headerdir="\${includedir}/aqbanking6"
aqbanking_plugindir="\${libdir}/aqbanking/plugins/${AQBANKING_SO_EFFECTIVE}"
aqbanking_pkgdatadir="\${datadir}/aqbanking"
aqbanking_symlinkdir="\$(top_builddir)/aqbanking6"
case "$OS_TYPE" in
posix)
aqbanking_sys_is_windows=0
;;
windows)
aqbanking_sys_is_windows=1
AC_DEFINE_UNQUOTED(BUILDING_AQBANKING_DLL,1, [Define if DLL is built])
;;
esac
AM_CONDITIONAL(IS_WINDOWS, [test "$OS_TYPE" = "windows"])
###-------------------------------------------------------------------------
#
# check whether local installation mode is enabled
#
AC_MSG_CHECKING(whether local installation mode is wanted)
AC_ARG_ENABLE(local-install,
[ --enable-local-install allow local installation mode (default=no)],
enable_local_install="$enableval",
enable_local_install="no")
AC_MSG_RESULT($enable_local_install)
if test "$enable_local_install" != "no"; then
AC_DEFINE(ENABLE_LOCAL_INSTALL, 1, [whether local install is wanted])
fi
###-------------------------------------------------------------------------
#
# check plugin search path
#
AC_MSG_CHECKING(plugin search dir)
AC_ARG_WITH(plugin-searchdir, [ --with-plugin-searchdir=DIR where to search for plugins],
[aqbanking_plugin_searchdir="$withval"],
[aqbanking_plugin_searchdir=""])
if test -z "${aqbanking_plugin_searchdir}"; then
if test "$OSYSTEM" = "windows"; then
aqbanking_plugin_searchdir="lib/aqbanking/plugins/${AQBANKING_SO_EFFECTIVE}"
else
if test "$enable_local_install" != "no"; then
aqbanking_plugin_searchdir="lib/aqbanking/plugins/${AQBANKING_SO_EFFECTIVE}"
else
aqbanking_plugin_searchdir="$aqbanking_plugindir"
fi
fi
fi
AC_SUBST(aqbanking_plugin_searchdir)
AC_MSG_RESULT($aqbanking_plugin_searchdir)
###-------------------------------------------------------------------------
#
# check cfg search dir
#
AC_MSG_CHECKING(cfg search dir)
AC_ARG_WITH(cfg-searchdir, [ --with-cfg-searchdir=DIR where to search for cfg files],
[aqbanking_cfg_searchdir="$withval"],
[aqbanking_cfg_searchdir=""])
if test -z "$aqbanking_cfg_searchdir"; then
if test "$OSYSTEM" = "windows"; then
aqbanking_cfg_searchdir="etc"
else
if test "$enable_local_install" != "no"; then
aqbanking_cfg_searchdir="etc"
else
aqbanking_cfg_searchdir="\$(sysconfdir)"
fi
fi
fi
AC_SUBST(aqbanking_cfg_searchdir)
AC_MSG_RESULT($aqbanking_cfg_searchdir)
###-------------------------------------------------------------------------
#
# check locale search dir
#
AC_MSG_CHECKING(locale search dir)
AC_ARG_WITH(locale-searchdir, [ --with-locale-searchdir=DIR where to search for locale files],
[aqbanking_locale_searchdir="$withval"],
[aqbanking_locale_searchdir=""])
if test -z "${aqbanking_locale_searchdir}"; then
if test "$OSYSTEM" = "windows"; then
aqbanking_locale_searchdir="share/locale"
else
if test "$enable_local_install" != "no"; then
aqbanking_locale_searchdir="share/locale"
else
aqbanking_locale_searchdir="\$(localedir)"
fi
fi
fi
AC_SUBST(aqbanking_locale_searchdir)
AC_MSG_RESULT($aqbanking_locale_searchdir)
###-------------------------------------------------------------------------
#
# check data search dir
#
AC_MSG_CHECKING(data search dir)
AC_ARG_WITH(data-searchdir, [ --with-data-searchdir=DIR where to search for data files],
[aqbanking_data_searchdir="$withval"],
[aqbanking_data_searchdir=""])
if test -z "${aqbanking_data_searchdir}"; then
if test "$OSYSTEM" = "windows"; then
aqbanking_data_searchdir="share"
else
if test "$enable_local_install" != "no"; then
aqbanking_data_searchdir="share"
else
aqbanking_data_searchdir="\$(datadir)"
fi
fi
fi
AC_SUBST(aqbanking_data_searchdir)
AC_MSG_RESULT($aqbanking_data_searchdir)
# special variables for AqFinTS
aqfints_datadir="\$(pkgdatadir)/backends/aqfints"
AC_SUBST(aqfints_datadir)
###-------------------------------------------------------------------------
# check for Distribution
AQ_DISTRIBUTION
###-------------------------------------------------------------------------
#
# check for I18N
#
# check whether i18n files are to be created
AC_CHECK_PROG(XGETTEXT,xgettext,xgettext, missing)
MAKE_I18N_FILES="yes"
if test "$XGETTEXT" = "missing"; then
MAKE_I18N_FILES="no"
AC_MSG_WARN([xgettext is missing. Locale support is disabled.])
fi
AC_PATH_PROG([MSGFMT], [msgfmt], [missing])
if test "$MSGFMT" = "missing"; then
MAKE_I18N_FILES="no"
AC_MSG_WARN([msgfmt is missing. Locale support is disabled.])
else
# check for --qt argument of msgfmt
AC_MSG_CHECKING(whether msgfmt understands --qt)
if test "x${MSGFMT}" != "x"; then
if ${MSGFMT} --qt --help >/dev/null 2>&1; then
MSGFMT_SUPPORTS_QT=yes
else
MSGFMT_SUPPORTS_QT=no
fi
else
MSGFMT_SUPPORTS_QT=no
fi
AC_MSG_RESULT($MSGFMT_SUPPORTS_QT)
fi
AC_SUBST(MAKE_I18N_FILES)
AC_SUBST(MSGFMT_SUPPORTS_QT)
AM_CONDITIONAL(IF_MAKE_I18N_FILES, [test "$MAKE_I18N_FILES" = "yes"])
# then check whether i18n support is to be compiled in
i18n_libs=""
HAVE_I18N="yes"
AC_CHECK_HEADERS([locale.h libintl.h], [], [HAVE_I18N="no"])
AC_CHECK_FUNCS([setlocale])
if test "$OS_TYPE" != "windows"; then
oldlibs="$LIBS"
LIBS=""
AC_SEARCH_LIBS(gettext, intl, [], [HAVE_I18N="no"])
i18n_libs="$LIBS"
LIBS="$oldlibs"
else
i18n_libs="-lintl"
fi
if test "$HAVE_I18N" != "NO"; then
AC_DEFINE_UNQUOTED(HAVE_I18N, 1, [whether I18N is available])
fi
AC_SUBST(HAVE_I18N)
AC_SUBST(i18n_libs)
###-------------------------------------------------------------------------
#
# check for release
#
AC_MSG_CHECKING(whether this is an official release)
AC_ARG_ENABLE(release,
[ --enable-release make this an official release (default=no)],
[ case "${enableval}" in
yes) enable_release="yes";;
no) enable_release="no";;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-release);;
esac
],
enable_release="no")
if test "$enable_release" = "yes"; then
STRIPALL="-s"
else
STRIPALL=""
fi
AC_SUBST(STRIPALL)
AC_MSG_RESULT($enable_release)
###-------------------------------------------------------------------------
# Debug arguments for compilation
ACX_COMPILE_WARN()
###-------------------------------------------------------------------------
#
# Compiler check for symbol visibility
#
AC_CACHE_CHECK([whether compiler supports symbol visibility],
ac_cv_hidden_visibility_attribute, [
echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
ac_cv_hidden_visibility_attribute=no
if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD);
then
if grep '\.hidden.*foo' conftest.s >/dev/null;
then
ac_cv_hidden_visibility_attribute=yes
fi
fi
rm -f conftest.*
])
if test $ac_cv_hidden_visibility_attribute = yes;
then
AC_DEFINE(GCC_WITH_VISIBILITY_ATTRIBUTE, 1, [visibility])
visibility_cflags="-fvisibility=hidden"
fi
AC_SUBST(visibility_cflags)
###-------------------------------------------------------------------------
#
# Subst
#
AS_SCRUB_INCLUDE(aqbanking_includes)
AC_SUBST(aqbanking_sys_is_windows)
AC_SUBST(aqbanking_includes)
AC_SUBST(aqbanking_internal_libs)
AC_SUBST(aqbanking_ldflags)
AC_SUBST(aqbanking_libs)
AC_SUBST(aqbanking_plugindir)
AC_SUBST(aqbanking_pkgdatadir)
AC_SUBST(aqbanking_symlinkdir)
AC_SUBST(aqbanking_headerdir_am)
AC_SUBST(aqbanking_headerdir)
###-------------------------------------------------------------------------
#
# Check for additional aclocal flags
#
ADD_ACLOCAL_FLAGS=""
for A in "${GWEN_PREFIX}/share/aclocal" \
"${prefix}/share/aclocal"; do
if test -d "${A}"; then
ADD_ACLOCAL_FLAGS="${ADD_ACLOCAL_FLAGS} -I ${A}"
fi
done
AC_SUBST(ADD_ACLOCAL_FLAGS)
###-------------------------------------------------------------------------
#
# AqBanking modules
#
aqbanking_modules=". types"
aqbankingpp_modules="."
AC_SUBST(aqbanking_modules)
AC_SUBST(aqbankingpp_modules)
###-------------------------------------------------------------------------
#
# docpath
#
AC_MSG_CHECKING(docpath)
AC_ARG_WITH(docpath, [ --with-docpath=DIR where to store the apidoc],
[docpath="$withval"],
[docpath="${HOME}/apidoc"])
AC_SUBST(docpath)
AC_MSG_RESULT($docpath)
###-------------------------------------------------------------------------
#
# check for doc type
#
AC_MSG_CHECKING(if full docu should be created)
AC_ARG_ENABLE(full-doc,
[ --enable-full-doc enable creating full apidoc (default=no)],
[ case "${enableval}" in
yes) enable_fulldoc="yes";;
no) enable_fulldoc="no";;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-full-doc);;
esac
],
enable_fulldoc="no")
if test "$enable_fulldoc" = "yes"; then
DOXYGEN_INPUT="listdoc.h src"
DOXYGEN_DEFINE=""
DOXYGEN_FILE_PATTERNS="*.h *.hpp *.c *.cpp"
DOXYGEN_EXCLUDE_PATTERNS=""
else
DOXYGEN_DEFINE="DOXYGEN_HIDE"
DOXYGEN_INPUT="listdoc.h \
aqbanking6/banking.h \
aqbanking6/banking_bankinfo.h \
aqbanking6/banking_dialogs.h \
aqbanking6/banking_online.h \
aqbanking6/banking_transaction.h \
aqbanking6/error.h \
aqbanking6/account_type.h \
aqbanking6/value.h \
aqbanking6/account_spec.h \
aqbanking6/balance.h \
aqbanking6/bankinfo.h \
aqbanking6/bankinfoservice.h \
aqbanking6/document.h \
aqbanking6/imexporter_accountinfo.h \
aqbanking6/imexporter_context.h \
aqbanking6/message.h \
aqbanking6/security.h \
aqbanking6/transaction.h \
aqbanking6/transactionlimits.h\
"
DOXYGEN_FILE_PATTERNS="*.h *.hpp"
DOXYGEN_EXCLUDE_PATTERNS="*_p.h"
fi
AC_SUBST(DOXYGEN_INPUT)
AC_SUBST(DOXYGEN_DEFINE)
AC_SUBST(DOXYGEN_FILE_PATTERNS)
AC_SUBST(DOXYGEN_EXCLUDE_PATTERNS)
AC_MSG_RESULT($enable_fulldoc)
###-------------------------------------------------------------------------
#
# search for tag files
#
AC_MSG_CHECKING(doxygen tag files)
DOXYGEN_TAGFILES=""
DOXYGEN_TAGFILEPATHS=""
if test -d "${docpath}"; then
tagfiles="`cd ${docpath} && ls *.tag`"
if test -n "${tagfiles}"; then
# remove own package from list
tagfiles="`echo ${tagfiles} | ${SED} -e s/${PACKAGE}.tag//`"
# add every remaining tag file
for ff in ${tagfiles}; do
DOXYGEN_TAGFILES="${DOXYGEN_TAGFILES} ${docpath}/${ff}=${docpath}/`basename -s .tag ${ff}`"
done
fi
fi
if test -z "${DOXYGEN_TAGFILES}"; then
AC_MSG_RESULT(none)
else
AC_MSG_RESULT(found)
fi
AC_SUBST(DOXYGEN_TAGFILES)
###-------------------------------------------------------------------------
#
# check for dependencies of backends
# (nothing to check for right now)
dependencies_ok="yes"
###-------------------------------------------------------------------------
#
# Configure stuff for backend AqHBCI
#
# Common settings; can be overridden per-OS below.
aqhbci_internal_libs="${abs_top_builddir}/src/libs/plugins/backends/aqhbci/libaqhbci.la"
aqhbci_ldflags="-L\${libdir}"
aqhbci_includes="${aqbanking_includes}"
aqhbci_libs="-laqhbci"
with_aqhbci="no"
case "$aqbanking_backends" in *aqhbci*)
with_aqhbci="yes"
case "$OS_TYPE" in
posix)
;;
windows)
AC_DEFINE_UNQUOTED(BUILDING_AQHBCI_DLL,1, [Define if DLL is built])
;;
esac
;;
esac
AS_SCRUB_INCLUDE(aqhbci_includes)
AC_SUBST(aqhbci_includes)
AC_SUBST(aqhbci_internal_libs)
AC_SUBST(aqhbci_libs)
AC_SUBST(aqhbci_ldflags)
AC_SUBST(with_aqhbci)
###-------------------------------------------------------------------------
#
# check AqHBCI data dir
#
AC_MSG_CHECKING(aqhbci data dir)
AC_ARG_WITH(aqhbci-datadir, [ --with-aqhbci-datadir=DIR where to search for data files],
[aqhbci_datadir="$withval"],
[aqhbci_datadir="$aqhbci_data"])
AC_SUBST(aqhbci_datadir)
AC_MSG_RESULT($aqhbci_datadir)
###-------------------------------------------------------------------------
#
# Configure stuff for backend AqOfxConnect
#
# Common settings
aqofxconnect_internal_libs="${abs_top_builddir}/src/libs/plugins/backends/aqofxconnect/libaqofxconnect.la"
aqofxconnect_includes="${aqbanking_includes}"
aqofxconnect_libs="-L\${libdir} -laqofxconnect"
case "$aqbanking_backends" in *aqofxconnect*)
case "$OS_TYPE" in
posix)
;;
windows)
AC_DEFINE_UNQUOTED(BUILDING_AQOFXCONNECT_DLL,1, [Define if DLL is built])
;;
esac
;;
esac
AS_SCRUB_INCLUDE(aqofxconnect_includes)
AC_SUBST(aqofxconnect_includes)
AC_SUBST(aqofxconnect_internal_libs)
AC_SUBST(aqofxconnect_libs)
#AC_DEFINE_UNQUOTED(AQOFXCONNECT_DATA, "${aqofxconnect_data}", [data dir])
###-------------------------------------------------------------------------
#
# Configure stuff for backend AqPaypal
#
# Common settings
aqpaypal_internal_libs="${abs_top_builddir}/src/libs/plugins/backends/aqpaypal/libaqpaypal.la"
aqpaypal_includes="${aqbanking_includes}"
aqpaypal_libs="-L\${libdir} -laqpaypal"
case "$aqbanking_backends" in *aqpaypal*)
case "$OS_TYPE" in
posix)
;;
windows)
AC_DEFINE_UNQUOTED(BUILDING_AQPAYPAL_DLL,1, [Define if DLL is built])
;;
esac
;;
esac
AS_SCRUB_INCLUDE(aqpaypal_includes)
AC_SUBST(aqpaypal_includes)
AC_SUBST(aqpaypal_internal_libs)
AC_SUBST(aqpaypal_libs)
#AC_DEFINE_UNQUOTED(AQPAYPAL_DATA, "${aqpaypal_data}", [data dir])
###-------------------------------------------------------------------------
#
# Configure stuff for backend AqEBICS
#
# Common settings; can be overridden per-OS below.
aqebics_internal_libs="${abs_top_builddir}/src/libs/plugins/backends/aqebics/plugin/libaqebics.la"
aqebics_ldflags="-L\${libdir}"
aqebics_includes="${aqbanking_includes}"
aqebics_libs="-laqebics"
with_aqebics="no"
case "$aqbanking_backends" in *aqebics*)
with_aqebics="yes"
case "$OS_TYPE" in
posix)
;;
windows)
AC_DEFINE_UNQUOTED(BUILDING_AQEBICS_DLL,1, [Define if DLL is built])
;;
esac
;;
esac
AS_SCRUB_INCLUDE(aqebics_includes)
AC_SUBST(aqebics_includes)
AC_SUBST(aqebics_internal_libs)
AC_SUBST(aqebics_libs)
AC_SUBST(aqebics_ldflags)
AC_SUBST(with_aqebics)
###-------------------------------------------------------------------------
#
# check AqEBICS data dir
#
AC_MSG_CHECKING(aqebics data dir)
AC_ARG_WITH(aqebics-datadir, [ --with-aqebics-datadir=DIR where to search for data files],
[aqebics_datadir="$withval"],
[aqebics_datadir="$aqebics_data"])
AC_SUBST(aqebics_datadir)
AC_MSG_RESULT($aqebics_datadir)
###-------------------------------------------------------------------------
#
# Check for xmlsec
#
if test "$with_aqebics" = "yes"; then
AC_MSG_CHECKING(for build requirements needed by EBICS backend)
AC_MSG_RESULT()
PKG_CHECK_MODULES(XMLSEC, [xmlsec1 >= 1.0.0])
PKG_CHECK_MODULES(LIBXML, [libxml-2.0])
PKG_CHECK_MODULES(LIBXSLT, [libxslt])
AQEBICS_CFLAGS="$XMLSEC_CFLAGS $LIBXML_CFLAGS $LIBXSLT_CFLAGS"
AQEBICS_LIBS="$XMLSEC_LIBS $LIBXML_LIBS $LIBXSLT_LIBS"
AC_SUBST(AQEBICS_CFLAGS)
AC_SUBST(AQEBICS_LIBS)
fi
###-------------------------------------------------------------------------
#
# check for plugin init
#
AC_MSG_CHECKING(if plugin init is wanted)
AC_ARG_ENABLE(init-plugins,
[ --enable-init-plugins enable plugin init (default=yes)],
enable_init_plugins="$enableval",
enable_init_plugins="yes")
AC_MSG_RESULT($enable_init_plugins)
if test "$enable_init_plugins" != "no"; then
AC_DEFINE(AQBANKING_ENABLE_INIT_PLUGINS, 1, [if plugin init is wanted])
fi
###-------------------------------------------------------------------------
#
# check whether aqbanking is a subproject to another one
#
AC_MSG_CHECKING(if AqBanking is a subproject)
AC_ARG_ENABLE(aqb-subproject,
[ --enable-aqb-subproject make gwen only a subproject (default=no)],
enable_aqb_subproject="$enableval",
enable_aqb_subproject="no")
AC_MSG_RESULT($enable_aqb_subproject)
if test "$enable_aqb_subproject" != "no"; then
AC_DEFINE(AQBANKING_IS_SUBPROJECT, 1, [whether aqb is a subproject])
fi
###-------------------------------------------------------------------------
#
# check whether aqbanking-cli is enabled
#
AC_MSG_CHECKING(whether aqbanking-cli is wanted)
AC_ARG_ENABLE(cli,
[ --enable-cli build aqbanking-cli (default=yes)],
enable_cli="$enableval",
enable_cli="yes")
AC_MSG_RESULT($enable_cli)
AM_CONDITIONAL(ENABLE_CLI, [test "$enable_cli" = "yes"])
AC_ARG_WITH(cli-version-string,
[ --with-cli-version-string list of additional libraries],
[AQBANKING_CLI_VERSION_STRING="$withval"],
[AQBANKING_CLI_VERSION_STRING="$AQBANKING_VERSION_STRING"]
)
AC_SUBST(AQBANKING_CLI_VERSION_STRING)
###-------------------------------------------------------------------------
#
# check whether tutorials are to be built
#
AC_MSG_CHECKING(whether tutorials are to be built)
AC_ARG_ENABLE(tutorials,
[ --enable-tutorials build tutorials (default=yes)],
[ case "${enableval}" in
yes) TUTORIALS="tutorials";;
no) TUTORIALS="";;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-tutorials);;
esac
],
[
TUTORIALS="tutorials"
enableval="yes"
])
AC_MSG_RESULT($enableval)
AC_SUBST(TUTORIALS)
###-------------------------------------------------------------------------
#
# Cleanup includes, define all_XXX
#
AS_SCRUB_INCLUDE(all_includes)
AC_SUBST(all_includes)
AC_SUBST(all_libraries)
AC_SUBST(aqbanking_backends)
# Adjust CFLAGS and LDFLAGS on Windows
case "$OS_TYPE" in
windows)
# GnuCash compiles with this; maybe we need this, too?
#CFLAGS="${CFLAGS} -mms-bitfields"
LDFLAGS="${LDFLAGS} -no-undefined -mwindows"
;;
esac
###-------------------------------------------------------------------------
#
# Output files
#
AC_CONFIG_FILES([
admin/Makefile
doc/Makefile
m4/Makefile
src/Makefile
src/libs/Makefile
src/libs/aqbanking/Makefile
src/libs/aqbanking/version.h
src/libs/aqbanking/system.h
src/libs/aqbanking/dialogs/Makefile
src/libs/aqbanking/types/Makefile
src/libs/aqbanking/gui/Makefile
src/libs/aqbanking/typemaker2/Makefile
src/libs/aqbanking/typemaker2/c/Makefile
src/libs/aqbanking/backendsupport/Makefile
src/libs/aqbankingpp/Makefile
src/libs/cli/Makefile
src/libs/plugins/Makefile
src/libs/plugins/bankinfo/Makefile
src/libs/plugins/bankinfo/de/Makefile
src/libs/plugins/bankinfo/de/de.xml
src/libs/plugins/bankinfo/generic/Makefile
src/libs/plugins/imexporters/Makefile
src/libs/plugins/imexporters/eri2/Makefile
src/libs/plugins/imexporters/eri2/eri2.xml
src/libs/plugins/imexporters/eri2/profiles/Makefile
src/libs/plugins/imexporters/ofx/Makefile
src/libs/plugins/imexporters/ofx/ofx.xml
src/libs/plugins/imexporters/ofx/parser/Makefile
src/libs/plugins/imexporters/ofx/profiles/Makefile
src/libs/plugins/imexporters/swift/Makefile
src/libs/plugins/imexporters/swift/swift.xml
src/libs/plugins/imexporters/swift/profiles/Makefile
src/libs/plugins/imexporters/csv/Makefile
src/libs/plugins/imexporters/csv/csv.xml
src/libs/plugins/imexporters/csv/profiles/Makefile
src/libs/plugins/imexporters/openhbci1/Makefile
src/libs/plugins/imexporters/openhbci1/openhbci1.xml
src/libs/plugins/imexporters/openhbci1/profiles/Makefile
src/libs/plugins/imexporters/qif/Makefile
src/libs/plugins/imexporters/qif/qif.xml
src/libs/plugins/imexporters/qif/profiles/Makefile
src/libs/plugins/imexporters/yellownet/Makefile
src/libs/plugins/imexporters/yellownet/yellownet.xml
src/libs/plugins/imexporters/yellownet/profiles/Makefile
src/libs/plugins/imexporters/xmldb/Makefile
src/libs/plugins/imexporters/xmldb/xmldb.xml
src/libs/plugins/imexporters/xmldb/profiles/Makefile
src/libs/plugins/imexporters/sepa/Makefile
src/libs/plugins/imexporters/sepa/sepa.xml
src/libs/plugins/imexporters/sepa/profiles/Makefile
src/libs/plugins/imexporters/ctxfile/Makefile
src/libs/plugins/imexporters/ctxfile/ctxfile.xml
src/libs/plugins/imexporters/ctxfile/profiles/Makefile
src/libs/plugins/imexporters/q43/Makefile
src/libs/plugins/imexporters/q43/q43.xml
src/libs/plugins/imexporters/q43/profiles/Makefile
src/libs/plugins/imexporters/camt/Makefile
src/libs/plugins/imexporters/camt/camt.xml
src/libs/plugins/imexporters/camt/profiles/Makefile
src/libs/plugins/imexporters/xml/Makefile
src/libs/plugins/imexporters/xml/xml.xml
src/libs/plugins/imexporters/xml/data/Makefile
src/libs/plugins/imexporters/xml/profiles/Makefile
src/libs/plugins/parsers/Makefile
src/libs/plugins/parsers/swift/Makefile
src/libs/plugins/parsers/swift/swift.xml
src/libs/plugins/backends/Makefile
src/libs/plugins/backends/aqhbci/Makefile
src/libs/plugins/backends/aqhbci/aqhbci.xml
src/libs/plugins/backends/aqhbci/dialogs/Makefile
src/libs/plugins/backends/aqhbci/header.xml
src/libs/plugins/backends/aqhbci/banking/Makefile
src/libs/plugins/backends/aqhbci/msglayer/Makefile
src/libs/plugins/backends/aqhbci/tan/Makefile
src/libs/plugins/backends/aqhbci/joblayer/Makefile
src/libs/plugins/backends/aqhbci/applayer/Makefile
src/libs/plugins/backends/aqhbci/ajobs/Makefile
src/libs/plugins/backends/aqhbci/admjobs/Makefile
src/libs/plugins/backends/aqhbci/applayer/xml/Makefile
src/libs/plugins/backends/aqhbci/control/Makefile
src/libs/plugins/backends/aqhbci/version.h
src/libs/plugins/backends/aqofxconnect/Makefile
src/libs/plugins/backends/aqofxconnect/aqofxconnect.xml
src/libs/plugins/backends/aqofxconnect/v1/Makefile
src/libs/plugins/backends/aqofxconnect/v2/Makefile
src/libs/plugins/backends/aqofxconnect/control/Makefile
src/libs/plugins/backends/aqofxconnect/common/Makefile
src/libs/plugins/backends/aqofxconnect/dialogs/Makefile
src/libs/plugins/backends/aqpaypal/Makefile
src/libs/plugins/backends/aqpaypal/aqpaypal.xml
src/libs/plugins/backends/aqpaypal/control/Makefile
src/libs/plugins/backends/aqnone/Makefile
src/libs/plugins/backends/aqnone/aqnone.xml
src/libs/plugins/backends/aqgivve/Makefile
src/libs/plugins/backends/aqgivve/aqgivve.xml
src/libs/plugins/backends/aqebics/Makefile
src/libs/plugins/backends/aqebics/aqebics.xml
src/libs/plugins/backends/aqebics/client/Makefile
src/libs/plugins/backends/aqebics/dialogs/Makefile
src/libs/plugins/backends/aqebics/msg/Makefile
src/libs/plugins/backends/aqebics/control/Makefile
src/libs/plugins/backends/aqebics/requests/Makefile
src/libs/plugins/backends/aqfints/Makefile
src/libs/plugins/backends/aqfints/aqfints.xml
src/libs/plugins/backends/aqfints/banking/Makefile
src/libs/plugins/backends/aqfints/banking/control/Makefile
src/libs/plugins/backends/aqfints/libaqfints/Makefile
src/libs/plugins/backends/aqfints/libaqfints/msg/Makefile
src/libs/plugins/backends/aqfints/libaqfints/parser/Makefile
src/libs/plugins/backends/aqfints/libaqfints/service/Makefile
src/libs/plugins/backends/aqfints/libaqfints/service/xml/Makefile
src/libs/plugins/backends/aqfints/libaqfints/service/bpd/Makefile
src/libs/plugins/backends/aqfints/libaqfints/service/upd/Makefile
src/libs/plugins/backends/aqfints/libaqfints/service/jobs/Makefile
src/libs/plugins/backends/aqfints/libaqfints/transport/Makefile
src/libs/plugins/backends/aqfints/libaqfints/session/Makefile
src/libs/plugins/backends/aqfints/libaqfints/session/pintan/Makefile
src/libs/plugins/backends/aqfints/libaqfints/session/hbci/Makefile
src/test/Makefile
src/tools/Makefile
src/tools/aqbanking-cli/Makefile
src/tools/mkdeinfo/Makefile
tutorials/Makefile
po/Makefile
Doxyfile
Makefile
aqbanking-config.in
aqbanking.pc
aqbanking.spec
aqbanking.iss
aqbanking-config.cmake
aqbanking-config-version.cmake
])
AC_OUTPUT
###-------------------------------------------------------------------------
#
# Summary
#
echo
echo
echo "Summary"
echo "----------------------------------------------------"
echo "AqBanking version : $AQBANKING_VERSION_FULL_STRING"
echo "Local Installation Mode : $enable_local_install"
echo "Prefix : $prefix"
echo "Exec-Prefix : $exec_prefix"
echo "Libdir : $libdir"
echo "Cfg Search Folder : $aqbanking_cfg_searchdir"
echo "Data Search Folder : $aqbanking_data_searchdir"
echo "Locale Search Folder : $aqbanking_locale_searchdir"
echo "Plugin Search Folder : $aqbanking_plugin_searchdir"
echo "Symbol Visibility : $visibility_supported"
echo "Build AqBanking-CLI : $enable_cli"
echo "CLI Version String : $AQBANKING_CLI_VERSION_STRING"
echo
echo
echo "Plugins"
echo "----------------------------------------------------"
echo " Backends : $aqbanking_backends"
echo " Im-/Exporters : $aqbanking_imexporters"
echo " Parsers : $aqbanking_parsers"
echo " Bank Infos : $aqbanking_bankinfos"
echo
echo "----------------------------------------------------"
echo "You can now run \"make\" (or gmake on FreeBSD) to compile."
aqbanking-6.9.1/Makefile.cvs 0000664 0001750 0001750 00000015740 14546575647 012675 0000000 0000000
MY_CFLAGS=-ggdb -Wall -O
#MP_CONF_FLAGS=--enable-maintainer-mode --disable-static
MP_CONF_FLAGS=INSTALL="/usr/bin/install -p" --enable-maintainer-mode --disable-static --enable-local
WIN32_OPTIONS=\
--host=i586-mingw32msvc \
--target=i586-mingw32msvc \
--enable-version-specific-runtime-libs \
--with-gcc \
--with-gnu-ld \
--without-x \
--enable-threads=win32 \
--disable-win32-registry
MINGW32_PREFIX=/usr/i586-mingw32msvc
WIN32_INSTALL_DIR=/home/martin/install/win32
default: all
dist:
@echo "This file is to make it easier for you to create all you need"
aclocal -I ./m4
autoheader
# use --include-deps, if you want to release the stuff. Don't use it for
# yourself
if test ! -f i18nsources; then echo > i18nsources; fi
automake --include-deps
autoconf
touch stamp-h.in
rm -f `find . -name \*~`
rm -Rf `find . -type d -name CVS`
rm -f `find . -type f -name .cvsignore`
rm -Rf apidoc
rm -Rf gwenipc
rm -f Makefile.cvs
rm -Rf autom4te.cache
cvsclean::
if test ! -f i18nsources; then echo > i18nsources; fi
automake --include-deps
autoconf
touch stamp-h.in
rm -Rf gwenipc
rm -f `find . -name \*~`
rm -Rf apidoc
rm -Rf autom4te.cache
all:
libtoolize -f --automake
@if test -r config.status; then \
prefix=`grep '@prefix@' config.status |cut -d , -f 3`; \
gwen_prefix=`grep '@GWEN_PREFIX@' config.status |cut -d , -f 3`; \
fi; \
if test -z "$${gwen_prefix}" -a -z "$${ACLOCAL_FLAGS}"; then \
gwen_bin_dir=`gwenhywfar-config --bindir`; \
gwen_prefix=`dirname $${gwen_bin_dir}`; \
fi; \
for A in "$${gwen_prefix}/share/aclocal" "$${prefix}/share/aclocal" m4; do \
if test -d "$${A}"; then \
ACLOCAL_FLAGS="$${ACLOCAL_FLAGS} -I $${A}"; \
fi; \
done; \
echo "aclocal $${ACLOCAL_FLAGS}"; \
aclocal $${ACLOCAL_FLAGS} || (echo -e '***\n*** If the line above shows the error message "macro AC_GWENHYWFAR not \n*** found", you need to specify the environment variable ACLOCAL_FLAGS \n*** to be "-I GWENHYWFAR_PREFIX/share/aclocal". For example, do the following:\n***\n*** export ACLOCAL_FLAGS="-I ${HOME}/usr/share/aclocal"\n*** make -f Makefile.cvs\n***'; exit 1)
@if ! grep -q AC_GWENHYWFAR aclocal.m4 ; then echo -e "***\n*** Error: The configure macro of the gwenhywfar package could not be found. \n*** Please specify the environment variable ACLOCAL_FLAGS \n*** to be \"-I GWENHYWFAR_PREFIX/share/aclocal\". \n"; exit 1 ; fi
@if ! grep -q PKG_CHECK_MODULES aclocal.m4 ; then echo -e "***\n*** Error: The configure macro of the pkg-config package \n*** (usually included in gnome) could not be found. \n*** Please specify the environment variable ACLOCAL_FLAGS \n*** to be \"-I GNOME_PREFIX/share/aclocal\". \n"; exit 1 ; fi
autoheader
if test ! -f i18nsources; then echo > i18nsources; fi
if test ! -f qtsources; then echo > qtsources; fi
automake --add-missing
@echo "autoconf"; \
autoconf || (echo -e '***\n*** If the line above shows the error message "possibly undefined macro: \n*** AC_GWENHYWFAR", you need to specify the environment variable ACLOCAL_FLAGS \n*** to be "-I GWENHYWFAR_PREFIX/share/aclocal". For example, do the following:\n***\n*** export ACLOCAL_FLAGS="-I ${HOME}/usr/share/aclocal"\n*** make -f Makefile.cvs\n***'; exit 1)
@echo "Now you can run ./configure"
mp:
libtoolize -f --automake
aclocal -I ./m4
autoheader
if test ! -f i18nsources; then echo > i18nsources; fi
automake --add-missing
autoconf
PKG_CONFIG_PATH="$(PKG_CONFIG_PATH):./m4" \
CXXFLAGS="-ggdb -Wall" \
CFLAGS="-ggdb -Wall" \
./configure $(MP_CONF_FLAGS) \
--with-backends="aqfints aqhbci aqofxconnect aqnone aqpaypal aqebics aqgivve" \
--prefix=/usr/local --enable-full-doc=yes
make sources
clang:
libtoolize -f --automake
aclocal -I ./m4
autoheader
if test ! -f i18nsources; then echo > i18nsources; fi
automake --add-missing
autoconf
PKG_CONFIG_PATH="$(PKG_CONFIG_PATH):./m4" \
CC=clang \
CXX=clang \
CXXFLAGS="-ggdb -Wall" \
CFLAGS="-ggdb -Wall" \
./configure $(MP_CONF_FLAGS) \
--with-backends="aqhbci aqofxconnect aqebics"
make sources
mp-priv:
libtoolize -f --automake
aclocal -I ./m4
autoheader
if test ! -f i18nsources; then echo > i18nsources; fi
automake --add-missing
autoconf
PKG_CONFIG_PATH="$PKG_CONFIG_PATH:./m4" \
CXXFLAGS="-ggdb -Wall" \
CFLAGS="-ggdb -Wall" \
LIBOFX_CFLAGS="-I/opt/devel/4/include" \
LIBOFX_LIBS="-L/opt/devel/4/lib -lofx" \
./configure $(MP_CONF_FLAGS) \
--with-backends="aqhbci aqofxconnect" \
--with-frontends="" \
--with-gwen-dir=/opt/devel/4 \
--with-chipcard-client-dir=/opt/devel/4 \
--prefix=/opt/devel/4
make sources
mp-orig:
libtoolize -f --automake
aclocal -I ./m4
autoheader
if test ! -f i18nsources; then echo > i18nsources; fi
automake --add-missing
autoconf
PKG_CONFIG_PATH="$PKG_CONFIG_PATH:./m4" CXXFLAGS="-ggdb -Wall" CFLAGS="$(MP_CFLAGS)" ./configure $(MP_CONF_FLAGS) --with-backends="aqhbci aqofxconnect aqdtaus aqyellownet aqgeldkarte" --with-frontends="" --with-gwen-dir=/opt/devel --with-chipcard-client-dir=/opt/devel
make sources
mp2:
libtoolize -f --automake
aclocal -I ./m4
autoheader
if test ! -f i18nsources; then echo > i18nsources; fi
automake --add-missing
autoconf
PKG_CONFIG_PATH="$PKG_CONFIG_PATH:./m4" CXXFLAGS="-ggdb -Wall" CFLAGS="$(MP_CFLAGS)" ./configure $(MP_CONF_FLAGS) --with-backends="aqhbci aqofxconnect aqdtaus" --with-frontends=""
make sources
mp-win:
PKG_CONFIG_PATH="$PKG_CONFIG_PATH:./m4" CXXFLAGS="-Wall" CFLAGS="-Wall" ./configure --prefix=/c/posix --with-gwen-dir=/c/posix --enable-local
mp-w32:
libtoolize -f --automake
aclocal -I ./m4
autoheader
automake --add-missing
autoconf
PATH="$(MINGW32_PREFIX)/bin:$(PATH)" \
PKG_CONFIG_PATH=$(WIN32_INSTALL_DIR)/lib/pkgconfig \
CFLAGS="$(MY_CFLAGS) -I$(WIN32_INSTALL_DIR)/include -L$(WIN32_INSTALL_DIR)/lib" CXXFLAGS="-ggdb -Wall -I$(WIN32_INSTALL_DIR)/include -L$(WIN32_INSTALL_DIR)/lib" \
DLLTOOL=i586-mingw32msvc-dlltool \
OBJDUMP=i586-mingw32msvc-objdump \
LD=i586-mingw32msvc-ld \
AR=i586-mingw32msvc-ar \
NM=i586-mingw32msvc-nm \
RANLIB=i586-mingw32msvc-ranlib \
STRIP=i586-mingw32msvc-strip \
STRIPPROG=i586-mingw32msvc-strip \
AS=i586-mingw32msvc-as \
RC=i586-mingw32msvc-windres \
./configure \
--prefix=$(WIN32_INSTALL_DIR) $(WIN32_OPTIONS) \
--enable-release \
--with-gwen-dir=$(WIN32_INSTALL_DIR) \
--with-frontends="" \
--with-backends="aqhbci aqofxconnect" \
--disable-tutorials \
--with-xmlmerge=/usr/bin/xmlmerge
git-log:
git-log --pretty="format:%ad %an%n%s%n%b" --since="2008-08-26" >git.log
sanitize:
libtoolize -f --automake
aclocal -I ./m4
autoheader
if test ! -f i18nsources; then echo > i18nsources; fi
automake --add-missing
autoconf
PKG_CONFIG_PATH="$(PKG_CONFIG_PATH):./m4" \
CC=clang \
CXX=clang \
CXXFLAGS="-ggdb -Wall" \
CFLAGS="-ggdb -Wall -fsanitize=undefined -fsanitize=address" \
./configure $(MP_CONF_FLAGS) \
--with-backends="aqfints aqhbci aqofxconnect aqnone aqpaypal aqebics" \
--prefix=/usr/local --enable-full-doc=yes
make sources
aqbanking-6.9.1/src/ 0000755 0001750 0001750 00000000000 15131211176 011250 5 0000000 0000000 aqbanking-6.9.1/src/tools/ 0000755 0001750 0001750 00000000000 15131211176 012410 5 0000000 0000000 aqbanking-6.9.1/src/tools/Makefile.in 0000644 0001750 0001750 00000056262 15131211121 014376 0000000 0000000 # Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# 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.
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = src/tools
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \
$(top_srcdir)/m4/as-scrub-include.m4 \
$(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
install-exec-recursive install-html-recursive \
install-info-recursive install-pdf-recursive \
install-ps-recursive install-recursive installcheck-recursive \
installdirs-recursive pdf-recursive ps-recursive \
tags-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
am__recursive_targets = \
$(RECURSIVE_TARGETS) \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
distdir distdir-am
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
DIST_SUBDIRS = $(SUBDIRS)
am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
sed_rest='s,^[^/]*/*,,'; \
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
sed_butlast='s,/*[^/]*$$,,'; \
while test -n "$$dir1"; do \
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
if test "$$first" != "."; then \
if test "$$first" = ".."; then \
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
else \
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
if test "$$first2" = "$$first"; then \
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
else \
dir2="../$$dir2"; \
fi; \
dir0="$$dir0"/"$$first"; \
fi; \
fi; \
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
done; \
reldir="$$dir2"
ACLOCAL = @ACLOCAL@
ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@
AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@
AQBANKING_SO_AGE = @AQBANKING_SO_AGE@
AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@
AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@
AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@
AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@
AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@
AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@
AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@
AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@
AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@
AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@
AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@
AQEBICS_CFLAGS = @AQEBICS_CFLAGS@
AQEBICS_LIBS = @AQEBICS_LIBS@
AR = @AR@
AS = @AS@
ASTYLE = @ASTYLE@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATETIME = @DATETIME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN_DEFINE = @DOXYGEN_DEFINE@
DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@
DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@
DOXYGEN_INPUT = @DOXYGEN_INPUT@
DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILECMD = @FILECMD@
GREP = @GREP@
GTK2_CFLAGS = @GTK2_CFLAGS@
GTK2_LIBS = @GTK2_LIBS@
GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@
GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@
GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@
HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@
HAVE_I18N = @HAVE_I18N@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBXML_CFLAGS = @LIBXML_CFLAGS@
LIBXML_LIBS = @LIBXML_LIBS@
LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@
LIBXSLT_LIBS = @LIBXSLT_LIBS@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MAKE_DLL_TARGET = @MAKE_DLL_TARGET@
MAKE_I18N_FILES = @MAKE_I18N_FILES@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OSYSTEM = @OSYSTEM@
OS_TYPE = @OS_TYPE@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
RANLIB = @RANLIB@
RC = @RC@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
STRIPALL = @STRIPALL@
TUTORIALS = @TUTORIALS@
USE_DOT = @USE_DOT@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
XMLMERGE = @XMLMERGE@
XMLSEC_CFLAGS = @XMLSEC_CFLAGS@
XMLSEC_LIBS = @XMLSEC_LIBS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
all_includes = @all_includes@
all_libraries = @all_libraries@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
aq_distrib_name = @aq_distrib_name@
aq_distrib_tag = @aq_distrib_tag@
aq_distrib_version = @aq_distrib_version@
aqbanking_backends = @aqbanking_backends@
aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@
aqbanking_data_searchdir = @aqbanking_data_searchdir@
aqbanking_headerdir = @aqbanking_headerdir@
aqbanking_headerdir_am = @aqbanking_headerdir_am@
aqbanking_includes = @aqbanking_includes@
aqbanking_internal_libs = @aqbanking_internal_libs@
aqbanking_ldflags = @aqbanking_ldflags@
aqbanking_libs = @aqbanking_libs@
aqbanking_locale_searchdir = @aqbanking_locale_searchdir@
aqbanking_modules = @aqbanking_modules@
aqbanking_pkgdatadir = @aqbanking_pkgdatadir@
aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@
aqbanking_plugindir = @aqbanking_plugindir@
aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@
aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@
aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@
aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@
aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@
aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@
aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@
aqbanking_symlinkdir = @aqbanking_symlinkdir@
aqbanking_sys_is_windows = @aqbanking_sys_is_windows@
aqbankingpp_modules = @aqbankingpp_modules@
aqebics_datadir = @aqebics_datadir@
aqebics_includes = @aqebics_includes@
aqebics_internal_libs = @aqebics_internal_libs@
aqebics_ldflags = @aqebics_ldflags@
aqebics_libs = @aqebics_libs@
aqfints_datadir = @aqfints_datadir@
aqhbci_datadir = @aqhbci_datadir@
aqhbci_includes = @aqhbci_includes@
aqhbci_internal_libs = @aqhbci_internal_libs@
aqhbci_ldflags = @aqhbci_ldflags@
aqhbci_libs = @aqhbci_libs@
aqofxconnect_includes = @aqofxconnect_includes@
aqofxconnect_internal_libs = @aqofxconnect_internal_libs@
aqofxconnect_libs = @aqofxconnect_libs@
aqpaypal_includes = @aqpaypal_includes@
aqpaypal_internal_libs = @aqpaypal_internal_libs@
aqpaypal_libs = @aqpaypal_libs@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
docpath = @docpath@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
gmp_libs = @gmp_libs@
gwenhywfar_bindir = @gwenhywfar_bindir@
gwenhywfar_dir = @gwenhywfar_dir@
gwenhywfar_has_crypt = @gwenhywfar_has_crypt@
gwenhywfar_headers = @gwenhywfar_headers@
gwenhywfar_includes = @gwenhywfar_includes@
gwenhywfar_libs = @gwenhywfar_libs@
gwenhywfar_plugins = @gwenhywfar_plugins@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
i18n_libs = @i18n_libs@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
typemaker2_exe = @typemaker2_exe@
visibility_cflags = @visibility_cflags@
with_aqebics = @with_aqebics@
with_aqhbci = @with_aqhbci@
SUBDIRS = aqbanking-cli mkdeinfo
all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tools/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu src/tools/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
# This directory's subdirectories are mostly independent; you can cd
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,
# (1) if the variable is set in 'config.status', edit 'config.status'
# (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets):
@fail=; \
if $(am__make_keepgoing); then \
failcom='fail=yes'; \
else \
failcom='exit 1'; \
fi; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-recursive
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: ctags-recursive
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-recursive
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
$(am__make_dryrun) \
|| test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
dir1=$$subdir; dir2="$(top_distdir)"; \
$(am__relativize); \
new_top_distdir=$$reldir; \
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
($(am__cd) $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$new_top_distdir" \
distdir="$$new_distdir" \
am__remove_distdir=: \
am__skip_length_check=: \
am__skip_mode_fix=: \
distdir) \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
html-am:
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
install-html: install-html-recursive
install-html-am:
install-info: install-info-recursive
install-info-am:
install-man:
install-pdf: install-pdf-recursive
install-pdf-am:
install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(am__recursive_targets) install-am install-strip
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
check-am clean clean-generic clean-libtool cscopelist-am ctags \
ctags-am distclean distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-am uninstall uninstall-am
.PRECIOUS: Makefile
sources:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d sources; \
done
built_sources:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d built_sources; \
done ;
cppcheck:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d cppcheck; \
done
typefiles:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d typefiles; \
done
typedefs:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d typedefs; \
done
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
aqbanking-6.9.1/src/tools/Makefile.am 0000644 0001750 0001750 00000000637 15115300025 014364 0000000 0000000 SUBDIRS=aqbanking-cli mkdeinfo
sources:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d sources; \
done
built_sources:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d built_sources; \
done ;
cppcheck:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d cppcheck; \
done
typefiles:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d typefiles; \
done
typedefs:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d typedefs; \
done
aqbanking-6.9.1/src/tools/aqbanking-cli/ 0000755 0001750 0001750 00000000000 15131211176 015110 5 0000000 0000000 aqbanking-6.9.1/src/tools/aqbanking-cli/sepadebitnote.c 0000644 0001750 0001750 00000035621 15113653730 020037 0000000 0000000 /***************************************************************************
begin : Sat Dec 28 2013
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
/* tool includes */
#include "globals.h"
/* aqbanking includes */
#include
/* gwenhywfar includes */
#include
/* forward declarations */
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
int sepaDebitNote(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv, int use_flash_debitnote)
{
GWEN_DB_NODE *db;
AB_ACCOUNT_SPEC *as;
int rv;
int rvExec=0;
const char *ctxFile;
AB_TRANSACTION *t;
int noCheck;
/* parse command line arguments */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
/* error in command line */
return 1;
}
/* read arguments */
noCheck=GWEN_DB_GetIntValue(db, "noCheck", 0, 0);
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
/* init AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* get account to work with */
as=getSingleSelectedAccount(ab, db);
if (as==NULL) {
AB_Banking_Fini(ab);
return 2;
}
/* create transaction from arguments */
t=mkSepaDebitNote(db, use_flash_debitnote?AB_Transaction_CommandSepaFlashDebitNote:AB_Transaction_CommandSepaDebitNote);
if (t==NULL) {
DBG_ERROR(0, "Could not create SEPA transaction from arguments");
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return 2;
}
AB_Transaction_SetType(t, AB_Transaction_TypeDebitNote);
AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as));
/* set local account info from selected AB_ACCOUNT_SPEC */
AB_Banking_FillTransactionFromAccountSpec(t, as);
/* some checks */
rv=checkTransactionIbans(t);
if (rv!=0) {
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return rv;
}
/* probably check against transaction limits */
if (!noCheck) {
rv=checkTransactionLimits(t,
AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_GetCommand(t)),
AQBANKING_TOOL_LIMITFLAGS_PURPOSE |
AQBANKING_TOOL_LIMITFLAGS_NAMES |
AQBANKING_TOOL_LIMITFLAGS_SEQUENCE |
AQBANKING_TOOL_LIMITFLAGS_DATE |
AQBANKING_TOOL_LIMITFLAGS_SEPA);
if (rv!=0) {
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return rv;
}
}
AB_AccountSpec_free(as);
/* execute job */
rv=execSingleBankingJob(ab, t, ctxFile);
if (rv) {
fprintf(stderr, "Error on executeQueue (%d)\n", rv);
rvExec=rv;
}
/* cleanup */
AB_Transaction_free(t);
/* that's it */
rv=AB_Banking_Fini(ab);
if (rv<0) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
if (rvExec==0)
rvExec=5;
}
return rvExec;
}
/* parse command line */
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"backendName", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"backend", /* long option */
"Specify the name of the backend for your account", /* short description */
"Specify the name of the backend for your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"country", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"country", /* long option */
"Specify the country for your account (e.g. \"de\")", /* short description */
"Specify the country for your account (e.g. \"de\")" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"overwrite the bank code", /* short description */
"overwrite the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"overwrite the account number", /* short description */
"overwrite the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountType", /* name */
0, /* minnum */
1, /* maxnum */
"at", /* short option */
"accounttype", /* long option */
"Specify the account type", /* short description */
"Specify the account type" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteBIC", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"rbic", /* long option */
"Specify the remote SWIFT BIC",/* short description */
"Specify the remote SWIFT BIC" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteIBAN", /* name */
1, /* minnum */
1, /* maxnum */
0, /* short option */
"riban", /* long option */
"Specify the remote IBAN", /* short description */
"Specify the remote IBAN" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"value", /* name */
1, /* minnum */
1, /* maxnum */
"v", /* short option */
"value", /* long option */
"Specify the transfer amount", /* short description */
"Specify the transfer amount" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"name", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"name", /* long option */
"Specify your name", /* short description */
"Specify your name" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteName", /* name */
1, /* minnum */
2, /* maxnum */
0, /* short option */
"rname", /* long option */
"Specify the remote name", /* short description */
"Specify the remote name" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"purpose", /* name */
1, /* minnum */
6, /* maxnum */
"p", /* short option */
"purpose", /* long option */
"Specify the purpose", /* short description */
"Specify the purpose" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"endToEndReference", /* name */
0, /* minnum */
1, /* maxnum */
"E", /* short option */
"endtoendid", /* long option */
"Specify the SEPA End-to-end-reference", /* short description */
"Specify the SEPA End-to-end-reference" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"executionDate", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"execdate", /* long option */
"Specify the execution date (YYYYMMDD)", /* short */
"Specify the execution date (YYYYMMDD)" /* long */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"creditorSchemeId", /* name */
1, /* minnum */
1, /* maxnum */
0, /* short option */
"creditorSchemeId", /* long option */
"Specify the creditor scheme id (\"Glaeubiger-ID\")", /* short description */
"Specify the creditor scheme id (\"Glaeubiger-ID\")" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"mandateId", /* name */
1, /* minnum */
1, /* maxnum */
0, /* short option */
"mandateId", /* long option */
"Specify the mandate id", /* short description */
"Specify the mandate id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"mandateDate", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"mandateDate", /* long option */
"Specify the date when the mandate was issued", /* short description */
"Specify the date when the mandate was issued" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"sequenceType", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"sequenceType", /* long option */
"Specify the sequence type (once, first, following)", /* short description */
"Specify the sequence type (once, first, following)" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"noCheck", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"noCheck", /* long option */
"Dont check transaction limits", /* short description */
"Dont check transaction limits"
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return NULL;
}
return db;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/request.c 0000644 0001750 0001750 00000037125 15113653730 016702 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
/* tool includes */
#include "globals.h"
/* aqbanking includes */
#include
/* gwenhywfar includes */
#include
/* forward declarations */
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
static int _createAndAndSendRequests(AB_BANKING *ab,
AB_ACCOUNT_SPEC_LIST *asl,
const GWEN_DATE *fromDate,
const GWEN_DATE *toDate,
uint32_t requestFlags,
const char *ctxFile,
uint32_t number);
int request(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
AB_ACCOUNT_SPEC_LIST *al=NULL;
uint32_t requestFlags=0;
uint32_t number;
const char *s;
int rv;
const char *ctxFile;
GWEN_DATE *fromDate=0;
GWEN_DATE *toDate=0;
/* parse command line */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
fprintf(stderr, "ERROR: Could not parse arguments\n");
return 1;
}
/* read arguments */
if (GWEN_DB_GetIntValue(db, "reqTrans", 0, 0))
requestFlags|=AQBANKING_TOOL_REQUEST_STATEMENTS;
if (GWEN_DB_GetIntValue(db, "reqBalance", 0, 0))
requestFlags|=AQBANKING_TOOL_REQUEST_BALANCE;
if (GWEN_DB_GetIntValue(db, "reqSepaSto", 0, 0))
requestFlags|=AQBANKING_TOOL_REQUEST_SEPASTO;
if (GWEN_DB_GetIntValue(db, "reqEStatements", 0, 0))
requestFlags|=AQBANKING_TOOL_REQUEST_ESTATEMENTS;
if (GWEN_DB_GetIntValue(db, "reqDepot", 0, 0))
requestFlags|=AQBANKING_TOOL_REQUEST_DEPOT;
if (GWEN_DB_GetIntValue(db, "ignoreUnsupported", 0, 0))
requestFlags|=AQBANKING_TOOL_REQUEST_IGNORE_UNSUP;
if (GWEN_DB_GetIntValue(db, "acknowledge", 0, 0))
requestFlags|=AQBANKING_TOOL_REQUEST_ACKNOWLEDGE;
/* read command line arguments */
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
s=GWEN_DB_GetCharValue(db, "fromDate", 0, 0);
if (s && *s) {
fromDate=GWEN_Date_fromStringWithTemplate(s, "YYYYMMDD");
if (fromDate==NULL) {
DBG_ERROR(0, "Invalid fromdate value \"%s\"", s);
return 1;
}
}
s=GWEN_DB_GetCharValue(db, "toDate", 0, 0);
if (s && *s) {
toDate=GWEN_Date_fromStringWithTemplate(s, "YYYYMMDD");
if (toDate==NULL) {
DBG_ERROR(0, "Invalid todate value \"%s\"", s);
GWEN_Date_free(fromDate);
return 1;
}
}
number = GWEN_DB_GetIntValue(db, "number", 0, 0);
/* init AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
GWEN_Date_free(toDate);
GWEN_Date_free(fromDate);
return 2;
}
/* get accounts */
al=getSelectedAccounts(ab, db);
if (al==NULL) {
DBG_ERROR(0, "No matching accounts");
GWEN_Date_free(toDate);
GWEN_Date_free(fromDate);
AB_Banking_Fini(ab);
return 2;
}
/* create requests for every account spec and send them */
rv=_createAndAndSendRequests(ab, al, fromDate, toDate, requestFlags, ctxFile, number);
if (rv) {
AB_AccountSpec_List_free(al);
GWEN_Date_free(toDate);
GWEN_Date_free(fromDate);
AB_Banking_Fini(ab);
return 3;
}
/* cleanup */
AB_AccountSpec_List_free(al);
GWEN_Date_free(toDate);
GWEN_Date_free(fromDate);
/* deinit */
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
int _createAndAndSendRequests(AB_BANKING *ab,
AB_ACCOUNT_SPEC_LIST *asl,
const GWEN_DATE *fromDate,
const GWEN_DATE *toDate,
uint32_t requestFlags,
const char *ctxFile,
uint32_t number)
{
AB_ACCOUNT_SPEC *as;
AB_TRANSACTION_LIST2 *jobList;
/* sample jobs */
jobList=AB_Transaction_List2_new();
as=AB_AccountSpec_List_First(asl);
while (as) {
int rv;
rv=createAndAddRequests(ab, jobList, as, fromDate, toDate, requestFlags, number);
if (rv) {
AB_Transaction_List2_free(jobList);
return 3;
}
/* next */
as=AB_AccountSpec_List_Next(as);
} /* while (as) */
/* send jobs */
if (AB_Transaction_List2_GetSize(jobList)) {
int rv;
rv=execBankingJobs(ab, jobList, ctxFile);
if (rv) {
fprintf(stderr, "Error on sendCommands (%d)\n", rv);
AB_Transaction_List2_free(jobList);
return 3;
}
}
else {
DBG_ERROR(0, "No requests created");
AB_Transaction_List2_free(jobList);
return 4;
}
AB_Transaction_List2_free(jobList);
return 0;
}
/* parse command line */
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"backendName", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"backend", /* long option */
"Specify the name of the backend for your account", /* short description */
"Specify the name of the backend for your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"country", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"country", /* long option */
"Specify the country for your account (e.g. \"de\")", /* short description */
"Specify the country for your account (e.g. \"de\")" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"Specify the bank code", /* short description */
"Specify the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"Specify the account number", /* short description */
"Specify the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountType", /* name */
0, /* minnum */
1, /* maxnum */
"at", /* short option */
"accounttype", /* long option */
"Specify the type of your account", /* short description */
"Specify the type of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"reqTrans", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"transactions", /* long option */
"Request transactions", /* short description */
"Request transactions" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"reqBalance", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"balance", /* long option */
"Request balance", /* short description */
"Request balance" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"reqSto", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"sto", /* long option */
"Request standing orders", /* short description */
"Request standing orders" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"reqSepaSto", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"sepaSto", /* long option */
"Request SEPA standing orders", /* short description */
"Request SEPA standing orders" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"reqEStatements", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"estatements", /* long option */
"Request electronic statements", /* short description */
"Request electronic statements" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"reqDepot", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"depot", /* long option */
"Request depot (security list)", /* short description */
"Request depot (security list)" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"acknowledge", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"acknowledge", /* long option */
"Acknowledge jobs", /* short description */
"Acknowledge each job where the bank supports." /* long description */
},
{
0,
GWEN_ArgsType_Int,
"ignoreUnsupported",
0,
1,
0,
"ignoreUnsupported",
"let AqBanking ignore unsupported requests for accounts",
"let AqBanking ignore unsupported requests for accounts",
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"fromDate", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"fromdate", /* long option */
"Specify the first date for which transactions are wanted (YYYYMMDD)", /* short */
"Specify the first date for which transactions are wanted (YYYYMMDD)" /* long */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"toDate", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"todate", /* long option */
"Specify the last date for which transactions are wanted (YYYYMMDD)", /* short */
"Specify the last date for which transactions are wanted (YYYYMMDD)" /* long */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"number", /* name */
0, /* minnum */
0, /* maxnum */
0, /* short option */
"docnumber", /* long option */
"Document number", /* short description */
"Fetch a specific document number" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return NULL;
}
return db;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/listtrans.c 0000644 0001750 0001750 00000036634 15113653730 017241 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
int listTrans(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const char *ctxFile;
AB_IMEXPORTER_CONTEXT *ctx=0;
AB_IMEXPORTER_ACCOUNTINFO *iea=0;
uint32_t aid;
const char *bankId;
const char *accountId;
const char *subAccountId;
const char *iban;
int transactionType=0;
int transactionCommand=0;
const char *tmplString;
const char *s;
/* parse command line arguments */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
/* error in command line */
return 1;
}
/* read command line arguments */
aid=(uint32_t)GWEN_DB_GetIntValue(db, "uniqueAccountId", 0, 0);
bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0);
accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0);
subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, 0);
iban=GWEN_DB_GetCharValue(db, "iban", 0, 0);
tmplString=GWEN_DB_GetCharValue(db, "template", 0,
"$(dateOrValutaDateAsString)\t"
"$(valueAsString)\t"
"$(localBankcode)\t"
"$(localAccountNumber)\t"
"$(localIban)\t"
"$(remoteName)\t"
"$(remoteIban)\t"
"$(purposeInOneLine)");
s=GWEN_DB_GetCharValue(db, "transactionType", 0, NULL);
if (s && *s) {
transactionType=AB_Transaction_Type_fromString(s);
if (transactionType==AB_Transaction_TypeUnknown) {
fprintf(stderr, "ERROR: Invalid transaction type \"%s\"\n", s);
return 1;
}
}
s=GWEN_DB_GetCharValue(db, "transactionCommand", 0, NULL);
if (s && *s) {
transactionCommand=AB_Transaction_Command_fromString(s);
if (transactionCommand==AB_Transaction_CommandUnknown) {
fprintf(stderr, "ERROR: Invalid transaction command \"%s\"\n", s);
return 1;
}
}
/* init AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* load ctx file */
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
rv=readContext(ctxFile, &ctx, 1);
if (rv<0) {
DBG_ERROR(0, "Error reading context (%d)", rv);
AB_ImExporterContext_free(ctx);
return 4;
}
/* copy context, but only keep wanted accounts and transactions */
iea=AB_ImExporterContext_GetFirstAccountInfo(ctx);
while (iea) {
if (AB_ImExporterAccountInfo_Matches(iea,
aid, /* unique account id */
"*",
bankId,
accountId,
subAccountId,
iban,
"*", /* currency */
AB_AccountType_Unknown)) {
AB_TRANSACTION_LIST *tl;
tl=AB_ImExporterAccountInfo_GetTransactionList(iea);
if (tl) {
const AB_TRANSACTION *t;
GWEN_BUFFER *dbuf;
dbuf=GWEN_Buffer_new(0, 256, 0, 1);
t=AB_Transaction_List_FindFirstByType(tl, transactionType, transactionCommand);
while (t) {
rv=addTransactionToBufferByTemplate(t, tmplString, dbuf);
if (rv<0) {
}
fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(dbuf));
GWEN_Buffer_Reset(dbuf);
t=AB_Transaction_List_FindNextByType(t, transactionType, transactionCommand);
}
GWEN_Buffer_free(dbuf);
}
}
iea=AB_ImExporterAccountInfo_List_Next(iea);
} /* while */
AB_ImExporterContext_free(ctx);
/* deinit */
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
/* parse command line */
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"Specify the bank code", /* short description */
"Specify the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"Specify the account number", /* short description */
"Specify the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"transactionType", /* name */
0, /* minnum */
1, /* maxnum */
"tt", /* short option */
"transactiontype", /* long option */
"Specify the transaction type to filter", /* short description */
"Specify the transaction type to filter" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"transactionCommand", /* name */
0, /* minnum */
1, /* maxnum */
"tc", /* short option */
"transactioncommand", /* long option */
"Specify the transaction command to filter", /* short description */
"Specify the transaction command to filter" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"template", /* name */
0, /* minnum */
1, /* maxnum */
"T", /* short option */
"template", /* long option */
"Specify the template for the transaction list output", /* short description */
"Specify the template for the transaction list output" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
GWEN_BUFFER *ubuf;
ubuf=GWEN_Buffer_new(0, 1024, 0, 1);
GWEN_Buffer_AppendString(ubuf, "The template string given to \"-T\" may contain variables to specify the output.\n");
GWEN_Buffer_AppendString(ubuf, "Default is (all in one line): \n");
GWEN_Buffer_AppendString(ubuf, " $(dateOrValutaDateAsString)\\t$(valueAsString)\\t$(localBankcode)\\t\n");
GWEN_Buffer_AppendString(ubuf,
" $(localAccountNumber)\\t$(localIban)\\t$(remoteName)\\t$(remoteIban)\\t$(purposeInOneLine)\n");
GWEN_Buffer_AppendString(ubuf, "\n");
GWEN_Buffer_AppendString(ubuf, "Often used variables are:\n");
GWEN_Buffer_AppendString(ubuf, " $(status) : Transaction status\n");
GWEN_Buffer_AppendString(ubuf, " $(idForApplication) : Transaction id assigned by the application\n");
GWEN_Buffer_AppendString(ubuf, " $(fiId) : Transaction id assigned by the bank\n");
GWEN_Buffer_AppendString(ubuf, " $(localIban) : Local IBAN\n");
GWEN_Buffer_AppendString(ubuf, " $(localBic) : Local BIC\n");
GWEN_Buffer_AppendString(ubuf, " $(localBankcode) : Local bank code (Bankleitzahl)\n");
GWEN_Buffer_AppendString(ubuf, " $(localAccountnumber) : Local account number\n");
GWEN_Buffer_AppendString(ubuf, " $(remoteIban) : Remote IBAN\n");
GWEN_Buffer_AppendString(ubuf, " $(remoteBic) : Remote account number\n");
GWEN_Buffer_AppendString(ubuf, " $(remoteBankcode) : Remote bank code (Bankleitzahl)\n");
GWEN_Buffer_AppendString(ubuf, " $(remoteAccountnumber) : Remote account number\n");
GWEN_Buffer_AppendString(ubuf, " $(dateAsString) : Date of the transaction in format ");
GWEN_Buffer_AppendString(ubuf, I18N("DD.MM.YYYY"));
GWEN_Buffer_AppendString(ubuf, " \n");
GWEN_Buffer_AppendString(ubuf, " $(valutaDateAsString) : Valuta Date of the transaction in format ");
GWEN_Buffer_AppendString(ubuf, I18N("DD.MM.YYYY"));
GWEN_Buffer_AppendString(ubuf, " \n");
GWEN_Buffer_AppendString(ubuf,
" $(dateOrValutaDateAsString) : Date (or if missing: valuta date) of the transaction in format ");
GWEN_Buffer_AppendString(ubuf, I18N("DD.MM.YYYY"));
GWEN_Buffer_AppendString(ubuf, " \n");
GWEN_Buffer_AppendString(ubuf, " $(valueAsString) : Amount of the transaction\n");
GWEN_Buffer_AppendString(ubuf, " $(purpose) : Memo/purpose (\"Verwendungszweck\")\n");
GWEN_Buffer_AppendString(ubuf, " $(purposeLine[n]) : Memo/purpose line n (\"Verwendungszweckzeile\")\n");
GWEN_Buffer_AppendString(ubuf, " $(purposeInOneLine) : Full purpose in one line (\"Verwendungszweckzeile\")\n");
GWEN_Buffer_AppendString(ubuf, " $(customerReference) : Customer reference\n");
GWEN_Buffer_AppendString(ubuf, " $(bankReference) : Bank reference\n");
GWEN_Buffer_AppendString(ubuf, " $(endToEndReference) : SEPA end to end reference\n");
GWEN_Buffer_AppendString(ubuf,
" $(ultimateCreditor) : Ultimate creditor e.g. when payment handled by a service provider\n");
GWEN_Buffer_AppendString(ubuf,
" $(ultimateDebtor) : Ultimate debitor e.g. when payment handled by a service provider\n");
GWEN_Buffer_AppendString(ubuf, "\n");
GWEN_Buffer_AppendString(ubuf, "Variables used with debit notes:\n");
GWEN_Buffer_AppendString(ubuf, " $(creditorSchemeId) : Creditor Schema Id\n");
GWEN_Buffer_AppendString(ubuf, " $(originatorId) : Originator Id\n");
GWEN_Buffer_AppendString(ubuf, " $(mandateId) : Mandate Id\n");
GWEN_Buffer_AppendString(ubuf, " $(sequence) : (once, first, following, final)\n");
GWEN_Buffer_AppendString(ubuf, "\n");
GWEN_Buffer_AppendString(ubuf, "Variables seldomly used:\n");
GWEN_Buffer_AppendString(ubuf, " $(type) : Transaction type\n");
GWEN_Buffer_AppendString(ubuf, " $(subType) : Transaction subtype\n");
GWEN_Buffer_AppendString(ubuf, " $(command) : Command (for banking jobs, normally \"none\"\n");
GWEN_Buffer_AppendString(ubuf,
" $(uniqueAccountId) : Unique id of the account to which this Transaction belongs\n");
GWEN_Buffer_AppendString(ubuf, " $(uniqueId) : Unique id of the transaction (mostly unused)\n");
GWEN_Buffer_AppendString(ubuf,
" $(refUniqueId) : Unique id of another transaction this one refers to (mostly unused)\n");
GWEN_Buffer_AppendString(ubuf, " $(transactionText) : Transaction text (e.g. \"Gehalt\")\n");
GWEN_Buffer_AppendString(ubuf, " $(transactionKey) : Some other value assigned by the bank\n");
GWEN_Buffer_AppendString(ubuf, "\n");
GWEN_Buffer_AppendString(ubuf, "\n");
GWEN_Buffer_AppendString(ubuf, "The following transaction types can be used with \"-tt\":\n");
GWEN_Buffer_AppendString(ubuf, " statement : standard bank statements\n");
GWEN_Buffer_AppendString(ubuf,
" notedStatement : statements not yet booked but planned to be booked by the bank\n");
GWEN_Buffer_AppendString(ubuf, " transfer : transfer (pay to someone else)\n");
GWEN_Buffer_AppendString(ubuf, " debitNote : debit note (request someone to pay to you)\n");
GWEN_Buffer_AppendString(ubuf, " standingOrder : standing order (periodical payment to someone else)\n");
GWEN_Buffer_AppendString(ubuf, " internalTransfer : transfer between two of your accounts at one bank\n");
fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf));
GWEN_Buffer_free(ubuf);
return NULL;
}
return db;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/globals.h 0000644 0001750 0001750 00000015102 15113653730 016631 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifndef AQB_TOOL_GLOBALS_H
#define AQB_TOOL_GLOBALS_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg)
#define I18S(msg) msg
typedef enum {
AQBANKING_TOOL_SEPA_TRANSFERS,
AQBANKING_TOOL_SEPA_DEBITNOTES
} AQBANKING_TOOL_MULTISEPA_TYPE;
#define AQBANKING_TOOL_LIMITFLAGS_PURPOSE 0x0001
#define AQBANKING_TOOL_LIMITFLAGS_NAMES 0x0002
#define AQBANKING_TOOL_LIMITFLAGS_SEQUENCE 0x0004
#define AQBANKING_TOOL_LIMITFLAGS_DATE 0x0008
#define AQBANKING_TOOL_LIMITFLAGS_SEPA 0x0010
#define AQBANKING_TOOL_REQUEST_BALANCE 0x0001
#define AQBANKING_TOOL_REQUEST_STATEMENTS 0x0002
#define AQBANKING_TOOL_REQUEST_SEPASTO 0x0004
#define AQBANKING_TOOL_REQUEST_ESTATEMENTS 0x0008
#define AQBANKING_TOOL_REQUEST_DEPOT 0x0010
#define AQBANKING_TOOL_REQUEST_ACKNOWLEDGE 0x4000
#define AQBANKING_TOOL_REQUEST_IGNORE_UNSUP 0x8000
/* ========================================================================================================================
* util.c
* ========================================================================================================================
*/
int readContext(const char *ctxFile, AB_IMEXPORTER_CONTEXT **pCtx, int mustExist);
int writeContext(const char *ctxFile, const AB_IMEXPORTER_CONTEXT *ctx);
AB_TRANSACTION *mkSepaTransfer(GWEN_DB_NODE *db, int cmd);
AB_TRANSACTION *mkSepaDebitNote(GWEN_DB_NODE *db, int cmd);
/**
* Get selected AqBanking account sepcs matching the user given parameters in command line db.
*/
AB_ACCOUNT_SPEC_LIST *getSelectedAccounts(AB_BANKING *ab, GWEN_DB_NODE *db);
/**
* Return a single account spec matching the user given parameters in command line db.
* If multiple candidates match NULL will be returned
*/
AB_ACCOUNT_SPEC *getSingleSelectedAccount(AB_BANKING *ab, GWEN_DB_NODE *db);
AB_ACCOUNT_SPEC *pickAccountSpecForArgs(const AB_ACCOUNT_SPEC_LIST *accountSpecList, GWEN_DB_NODE *db);
AB_ACCOUNT_SPEC *pickAccountSpecForTransaction(const AB_ACCOUNT_SPEC_LIST *as, const AB_TRANSACTION *t);
int checkTransactionIbans(const AB_TRANSACTION *t);
int checkTransactionLimits(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim, uint32_t flags);
int addTransactionToContextFile(const AB_TRANSACTION *t, const char *ctxFile);
int writeJobsAsContextFile(AB_TRANSACTION_LIST2 *tList, const char *ctxFile);
int execBankingJobs(AB_BANKING *ab, AB_TRANSACTION_LIST2 *tList, const char *ctxFile);
int execSingleBankingJob(AB_BANKING *ab, AB_TRANSACTION *t, const char *ctxFile);
AB_TRANSACTION *createAndCheckRequest(AB_BANKING *ab, AB_ACCOUNT_SPEC *as, AB_TRANSACTION_COMMAND cmd);
int createAndAddRequest(AB_BANKING *ab,
AB_TRANSACTION_LIST2 *tList,
AB_ACCOUNT_SPEC *as,
AB_TRANSACTION_COMMAND cmd,
const GWEN_DATE *fromDate,
const GWEN_DATE *toDate,
int ignoreUnsupported,
AB_TRANSACTION_ACK ackMethod,
uint32_t number);
/**
* Create requests (getBalance, getStatements etc.) according to the given flags.
*
* @return 0 if ok, !=0 on error
*/
int createAndAddRequests(AB_BANKING *ab,
AB_TRANSACTION_LIST2 *tList,
AB_ACCOUNT_SPEC *as,
const GWEN_DATE *fromDate,
const GWEN_DATE *toDate,
uint32_t requestFlags,
uint32_t number);
int addTransactionToBufferByTemplate(const AB_TRANSACTION *t, const char *tmplString, GWEN_BUFFER *dbuf);
/* ========================================================================================================================
* Commands
* ========================================================================================================================
*/
int addSepaDebitNote(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv, int use_flash_debitnote);
int addTransaction(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int chkAcc(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int chkIban(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int control(AB_BANKING *ab, const char *ctrlBackend, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int fillGaps(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int import(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int exportCtx(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int listAccs(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int listBal(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int listConfDir(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int listTrans(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int listDoc(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int getDoc(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int listProfiles(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int request(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int sepaDebitNote(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv, int use_flash_debitnote);
int sepaMultiJobs(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv,
AQBANKING_TOOL_MULTISEPA_TYPE multisepa_type);
int sepaRecurTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int sepaTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int sepaInternalTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int updateConf(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int versions(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int showAccountCommands(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
#endif
aqbanking-6.9.1/src/tools/aqbanking-cli/Makefile.am 0000644 0001750 0001750 00000004441 15115300025 017061 0000000 0000000 #EXTRA_DIST=
AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/..
AM_CFLAGS=@visibility_cflags@
aqcli_libs=${abs_top_builddir}/src/libs/cli/libaqcli.la
bin_PROGRAMS=\
aqbanking-cli\
aqhbci-tool4 \
aqpaypal-tool \
aqebics-tool \
aqofxconnect-tool
aqbanking_cli_LDADD= \
$(aqbanking_internal_libs) \
$(gwenhywfar_libs) \
$(aqcli_libs) \
-lstdc++
aqbanking_cli_SOURCES= \
main.c \
addsepadebitnote.c \
addtransaction.c \
chkiban.c \
fillgaps.c \
import.c \
export.c \
listaccs.c \
listbal.c \
listconfdir.c \
listprofiles.c \
listtrans.c \
listdoc.c \
getdoc.c \
request.c \
util.c \
versions.c \
sepatransfer.c \
sepainternaltransfer.c \
sepadebitnote.c \
sepamultijobs.c \
separecurtransfer.c \
updateconf.c \
control.c \
accountcmds.c
aqbanking_cli_LDFLAGS=
aqhbci_tool4_LDFLAGS=
aqpaypal_tool_LDFLAGS=
aqebics_tool_LDFLAGS=
aqofxconnect_tool_LDFLAGS=
#-Wl,-static
DEFS += -DLOCALEDIR=\"$(localedir)\" -DAQBANKING_CLI_VERSION_STRING=\"@AQBANKING_CLI_VERSION_STRING@\"
noinst_HEADERS=globals.h
#EXTRA_DIST=
aqhbci_tool4_SOURCES=aqhbci-tool.c
aqhbci_tool4_LDADD= \
$(aqbanking_internal_libs) \
$(aqcli_libs) \
$(gwenhywfar_libs)
aqpaypal_tool_SOURCES=aqpaypal-tool.c
aqpaypal_tool_LDADD= \
$(aqbanking_internal_libs) \
$(aqcli_libs) \
$(gwenhywfar_libs)
aqebics_tool_SOURCES=aqebics-tool.c
aqebics_tool_LDADD= \
$(aqbanking_internal_libs) \
$(aqcli_libs) \
$(gwenhywfar_libs)
aqofxconnect_tool_SOURCES=aqofxconnect-tool.c
aqofxconnect_tool_LDADD= \
$(aqbanking_internal_libs) \
$(aqcli_libs) \
$(gwenhywfar_libs)
if IS_WINDOWS
aqbanking_cli_LDFLAGS+=-mconsole
aqhbci_tool4_LDFLAGS+=-mconsole
aqpaypal_tool_LDFLAGS+=-mconsole
aqebics_tool_LDFLAGS+=-mconsole
aqofxconnect_tool_LDFLAGS+=-mconsole
endif
sources:
for f in $(aqbanking_cli_SOURCES) $(aqhbci_tool4_SOURCES) $(aqpaypal_tool_SOURCES) $(aqebics_tool_SOURCES); $(aqofxconnect_tool_SOURCES); do \
echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \
done
built_sources:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d built_sources; \
done ;
typefiles:
typedefs:
cppcheck:
for f in $(aqbanking_cli_SOURCES); do \
cppcheck --force $$f ; \
done
for d in $(SUBDIRS); do \
$(MAKE) -C $$d cppcheck; \
done
aqbanking-6.9.1/src/tools/aqbanking-cli/updateconf.c 0000664 0001750 0001750 00000001146 14043610745 017336 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
int updateConf(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
/* nothing for now */
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/sepainternaltransfer.c 0000644 0001750 0001750 00000035527 15113653730 021450 0000000 0000000 /***************************************************************************
begin : Tue Oct 12 2021
copyright : (C) 2021 by Stefan Bayer, Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
/* tool includes */
#include "globals.h"
/* aqbanking includes */
#include
/* gwenhywfar includes */
#include
/* forward declarations */
#define ACC_CHOOSER_INPUT_SIZE 10
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
/* static AB_REFERENCE_ACCOUNT *_chooseReferenceAccount(AB_REFERENCE_ACCOUNT_LIST *ral); */
static int _ensureRemoteAccountInfo(GWEN_DB_NODE *db, AB_ACCOUNT_SPEC *as);
int sepaInternalTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
AB_ACCOUNT_SPEC *as;
int rv;
int rvExec = 0;
const char *ctxFile;
AB_TRANSACTION *t;
int noCheck;
/* parse command line arguments */
db = _readCommandLine(dbArgs, argc, argv);
if (db == NULL) {
/* error in command line */
return 1;
}
/* read arguments */
noCheck = GWEN_DB_GetIntValue(db, "noCheck", 0, 0);
ctxFile = GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
/* init AqBanking */
rv = AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* get account to work with */
as = getSingleSelectedAccount(ab, db);
if (as == NULL) {
AB_Banking_Fini(ab);
return 2;
}
rv=_ensureRemoteAccountInfo(db, as);
if (rv!=0) {
DBG_ERROR(NULL, "Incomplete data for remote account, maybe you need to run 'aqhbci-tool4 gettargetacc'");
AB_Banking_Fini(ab);
return 2;
}
/* create transaction from arguments */
t = mkSepaTransfer(db, AB_Transaction_CommandSepaInternalTransfer);
if (t == NULL) {
DBG_ERROR(0, "Could not create SEPA internal transaction from arguments");
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return 2;
}
AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as));
/* check for date; if given create a dated transfer */
/*if (AB_Transaction_GetDate(t))
AB_Transaction_SetCommand(t, AB_Transaction_CommandCreateDatedTransfer);*/
/* set local account info from selected AB_ACCOUNT_SPEC */
AB_Banking_FillTransactionFromAccountSpec(t, as);
/* some checks */
rv = checkTransactionIbans(t);
if (rv != 0) {
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return rv;
}
/* probably check against transaction limits */
if (!noCheck) {
rv = checkTransactionLimits(t,
AB_AccountSpec_GetTransactionLimitsForCommand(as,
AB_Transaction_GetCommand(t)),
AQBANKING_TOOL_LIMITFLAGS_PURPOSE |
AQBANKING_TOOL_LIMITFLAGS_NAMES |
AQBANKING_TOOL_LIMITFLAGS_DATE |
AQBANKING_TOOL_LIMITFLAGS_SEPA);
if (rv != 0) {
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return rv;
}
}
AB_AccountSpec_free(as);
/* execute job */
rv = execSingleBankingJob(ab, t, ctxFile);
if (rv) {
fprintf(stderr, "Error on executeQueue (%d)\n", rv);
rvExec = rv;
}
/* cleanup */
AB_Transaction_free(t);
/* that's it */
rv = AB_Banking_Fini(ab);
if (rv < 0) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
if (rvExec == 0)
rvExec = 5;
}
return rvExec;
}
int _ensureRemoteAccountInfo(GWEN_DB_NODE *db, AB_ACCOUNT_SPEC *as)
{
const char *remoteIban;
const char *remoteBic;
const char *remoteName;
const char *refAccountName;
remoteIban=GWEN_DB_GetCharValue(db, "remoteIban", 0, NULL);
remoteBic=GWEN_DB_GetCharValue(db, "remoteBic", 0, NULL);
remoteName=GWEN_DB_GetCharValue(db, "remoteName", 0, NULL);
refAccountName=GWEN_DB_GetCharValue(db, "remoteAccountName", 0, NULL);
if (!(remoteIban && *remoteIban && remoteBic && *remoteBic && remoteName && *remoteName)) {
AB_REFERENCE_ACCOUNT_LIST *ral;
AB_REFERENCE_ACCOUNT *ra=NULL;
ral=AB_AccountSpec_GetRefAccountList(as);
if (!(ral && AB_ReferenceAccount_List_GetCount(ral))) {
DBG_ERROR(NULL, "No reference accounts defined, maybe you need to run 'aqhbci-tool4 gettargetacc'");
return 2;
}
if ((remoteIban && *remoteIban) || (refAccountName && *refAccountName)) {
ra=AB_ReferenceAccount_List_FindFirst(ral, remoteIban, NULL, NULL, NULL, NULL, NULL, NULL, refAccountName);
if (ra) {
if (!(remoteIban && *remoteIban)) {
remoteIban=AB_ReferenceAccount_GetIban(ra);
if (!(remoteIban && *remoteIban)) {
DBG_ERROR(NULL, "No IBAN in reference account and none given.");
return 2;
}
GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteIban", remoteIban);
}
if (!(remoteBic && *remoteBic)) {
remoteBic=AB_ReferenceAccount_GetBic(ra);
if (!(remoteBic && *remoteBic)) {
DBG_ERROR(NULL, "No BIC in reference account and none given.");
return 2;
}
GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteBic", remoteBic);
}
if (!(remoteName && *remoteName)) {
remoteName=AB_ReferenceAccount_GetOwnerName(ra);
if (!(remoteName && *remoteName))
remoteName=AB_AccountSpec_GetOwnerName(as);
if (!(remoteName && *remoteName)) {
DBG_ERROR(NULL, "No remote name in reference account and none given.");
return 2;
}
GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "remoteName", remoteName);
}
}
else {
DBG_ERROR(NULL, "No matching reference account found");
return 2;
}
}
}
return 0;
}
/* parse command line */
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[] = { {
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
}, {
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
}, {
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"backendName", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"backend", /* long option */
"Specify the name of the backend for your account", /* short description */
"Specify the name of the backend for your account" /* long description */
}, {
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"country", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"country", /* long option */
"Specify the country for your account (e.g. \"de\")", /* short description */
"Specify the country for your account (e.g. \"de\")" /* long description */
}, {
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"overwrite the account number", /* short description */
"overwrite the account number" /* long description */
}, {
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteAccountName", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"raccname", /* long option */
"specify the reference account name", /* short description */
"specify the reference account number" /* long description */
}, {
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
}, {
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountType", /* name */
0, /* minnum */
1, /* maxnum */
"at", /* short option */
"accounttype", /* long option */
"Specify the account type", /* short description */
"Specify the account type" /* long description */
}, {
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteBIC", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"rbic", /* long option */
"Specify the remote SWIFT BIC",/* short description */
"Specify the remote SWIFT BIC" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteIBAN", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"riban", /* long option */
"Specify the remote IBAN", /* short description */
"Specify the remote IBAN" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"value", /* name */
1, /* minnum */
1, /* maxnum */
"v", /* short option */
"value", /* long option */
"Specify the transfer amount", /* short description */
"Specify the transfer amount" /* long description */
}, {
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"name", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"name", /* long option */
"Specify your name", /* short description */
"Specify your name" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteName", /* name */
1, /* minnum */
2, /* maxnum */
0, /* short option */
"rname", /* long option */
"Specify the remote name", /* short description */
"Specify the remote name" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"purpose", /* name */
1, /* minnum */
6, /* maxnum */
"p", /* short option */
"purpose", /* long option */
"Specify the purpose", /* short description */
"Specify the purpose" /* long description */
}, {
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"endToEndReference", /* name */
0, /* minnum */
1, /* maxnum */
"E", /* short option */
"endtoendid", /* long option */
"Specify the SEPA End-to-end-reference", /* short description */
"Specify the SEPA End-to-end-reference" /* long description */
}, {
0, /* flags */
GWEN_ArgsType_Int, /* type */
"noCheck", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"noCheck", /* long option */
"Dont check transaction limits", /* short description */
"Dont check transaction limits"
}, {
GWEN_ARGS_FLAGS_HELP
| GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db = GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return NULL;
}
return db;
}
#if 0
AB_REFERENCE_ACCOUNT *_chooseReferenceAccount(AB_REFERENCE_ACCOUNT_LIST *ral)
{
AB_REFERENCE_ACCOUNT *ra = NULL;
GWEN_BUFFER *ubuf;
int16_t numAccounts;
char inputBuffer[ACC_CHOOSER_INPUT_SIZE];
int chosenAccount;
uint32_t flags;
int16_t counter = 1;
int16_t scan_result = EOF;
const char *accName;
const char *iban;
ubuf = GWEN_Buffer_new(0, 8096, 0, 1);
numAccounts = AB_ReferenceAccount_List_GetCount(ral);
ra = AB_ReferenceAccount_List_First(ral);
GWEN_Buffer_AppendString(ubuf, "0) abort\n");
while (ra) {
iban = AB_ReferenceAccount_GetIban(ra);
accName = AB_ReferenceAccount_GetAccountName(ra);
snprintf(inputBuffer, ACC_CHOOSER_INPUT_SIZE, "%d) ", counter++);
GWEN_Buffer_AppendString(ubuf, inputBuffer);
if (accName) {
GWEN_Buffer_AppendString(ubuf, accName);
GWEN_Buffer_AppendString(ubuf, ": ");
}
GWEN_Buffer_AppendString(ubuf, iban);
GWEN_Buffer_AppendString(ubuf, "\n");
ra = AB_ReferenceAccount_List_Next(ra);
}
flags = 0;
ra = NULL;
while (scan_result == EOF) {
/*rv =*/ GWEN_Gui_InputBox(flags, I18N("Choose a reference account"),
GWEN_Buffer_GetStart(ubuf), inputBuffer, 0,
ACC_CHOOSER_INPUT_SIZE - 1, 0);
scan_result = sscanf(inputBuffer, "%d", &chosenAccount);
if (scan_result != EOF) {
if (chosenAccount == 0) {
break;
}
else if (chosenAccount > numAccounts) {
scan_result=EOF;
}
else {
ra = AB_ReferenceAccount_List_First(ral);
for (counter = 1 ; counter < chosenAccount ; counter++) {
ra = AB_ReferenceAccount_List_Next(ra);
}
break;
}
}
}
GWEN_Buffer_free(ubuf);
return ra;
}
#endif
aqbanking-6.9.1/src/tools/aqbanking-cli/aqofxconnect-tool.c 0000644 0001750 0001750 00000015201 15113653730 020644 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "globals.h"
static int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int main(int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
AB_BANKING *ab;
GWEN_GUI *gui;
int nonInteractive=0;
int acceptValidCerts=0;
const char *pinFile;
const char *cfgDir;
const char *s;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"cfgdir", /* name */
0, /* minnum */
1, /* maxnum */
"D", /* short option */
"cfgdir", /* long option */
I18S("Specify the configuration folder"),
I18S("Specify the configuration folder")
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"nonInteractive", /* name */
0, /* minnum */
1, /* maxnum */
"n", /* short option */
"noninteractive", /* long option */
"Select non-interactive mode",/* short description */
"Select non-interactive mode.\n" /* long description */
"This automatically returns a confirmative answer to any non-critical\n"
"message."
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"acceptValidCerts", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"acceptvalidcerts", /* long option */
"Automatically accept all valid TLS certificate",
"Automatically accept all valid TLS certificate"
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"charset", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"charset", /* long option */
"Specify the output character set", /* short description */
"Specify the output character set" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"pinfile", /* name */
0, /* minnum */
1, /* maxnum */
"P", /* short option */
"pinfile", /* long option */
"Specify the PIN file", /* short description */
"Specify the PIN file" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help",
I18S("Show this help screen. For help on commands, "
"run aqbanking-cli --help."),
I18S("Show this help screen. For help on commands, run aqbanking-cli --help.")
}
};
rv=GWEN_Init();
if (rv) {
fprintf(stderr, "ERROR: Unable to init Gwen.\n");
exit(2);
}
GWEN_Logger_Open(0, "aqofxconnect-tool", 0,
GWEN_LoggerType_Console,
GWEN_LoggerFacility_User);
GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning);
rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, LOCALEDIR);
if (rv) {
DBG_ERROR(0, "Could not bind textdomain (%d)", rv);
}
else {
rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8");
if (rv) {
DBG_ERROR(0, "Could not set codeset (%d)", rv);
}
}
db=GWEN_DB_Group_new("arguments");
rv = AB_App_Handle_Args(argc, argv, args, db);
if (rv == GWEN_ARGS_RESULT_ERROR) {
return 1;
}
else if (rv>1) {
argc-=rv-1;
argv+=rv-1;
}
else {
/* no command */
argc=0;
}
nonInteractive=GWEN_DB_GetIntValue(db, "nonInteractive", 0, 0);
acceptValidCerts=GWEN_DB_GetIntValue(db, "acceptValidCerts", 0, 0);
cfgDir=GWEN_DB_GetCharValue(db, "cfgdir", 0, 0);
gui=GWEN_Gui_CGui_new();
s=GWEN_DB_GetCharValue(db, "charset", 0, NULL);
if (s && *s)
GWEN_Gui_SetCharSet(gui, s);
if (nonInteractive)
GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE);
else
GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE);
if (acceptValidCerts)
GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS);
else
GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS);
pinFile=GWEN_DB_GetCharValue(db, "pinFile", 0, NULL);
if (pinFile) {
GWEN_DB_NODE *dbPins;
dbPins=GWEN_DB_Group_new("pins");
if (GWEN_DB_ReadFile(dbPins, pinFile,
GWEN_DB_FLAGS_DEFAULT |
GWEN_PATH_FLAGS_CREATE_GROUP)) {
fprintf(stderr, "Error reading pinfile \"%s\"\n", pinFile);
GWEN_DB_Group_free(dbPins);
GWEN_DB_Group_free(db);
return 2;
}
GWEN_Gui_SetPasswordDb(gui, dbPins, 1);
}
GWEN_Gui_SetGui(gui);
ab=AB_Banking_new("aqbanking-cli", cfgDir, 0);
AB_Gui_Extend(gui, ab);
rv=doControl(ab, db, argc, argv);
GWEN_DB_Group_free(db);
return rv;
}
int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
int rv;
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
rv=AB_Banking_ProviderControl(ab, "aqofxconnect", argc, argv);
if (rv!=0) {
DBG_ERROR(0, "Error calling control function (%d)", rv);
AB_Banking_Fini(ab);
return 4;
}
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/listprofiles.c 0000644 0001750 0001750 00000006110 15113653730 017717 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
int listProfiles(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
GWEN_DB_NODE *dbProfiles;
int rv;
const char *importerName;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"importerName", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"importer", /* long option */
"Specify the importer to use", /* short description */
"Specify the importer to use" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return 1;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return 0;
}
importerName=GWEN_DB_GetCharValue(db, "importerName", 0, "csv");
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
dbProfiles=AB_Banking_GetImExporterProfiles(ab, importerName);
if (dbProfiles) {
GWEN_DB_NODE *dbT;
dbT=GWEN_DB_GetFirstGroup(dbProfiles);
while (dbT) {
const char *sName;
const char *sVersion;
const char *sShortDescr;
int isGlobal;
sName=GWEN_DB_GetCharValue(dbT, "name", 0, "(none)");
sVersion=GWEN_DB_GetCharValue(dbT, "version", 0, "(none)");
sShortDescr=GWEN_DB_GetCharValue(dbT, "shortDescr", 0, "");
isGlobal=GWEN_DB_GetIntValue(dbT, "isGlobal", 0, 0);
fprintf(stdout, "%s\t%s\t%s\t%s\n",
sName?sName:"(none)",
sVersion?sVersion:"(none)",
sShortDescr?sShortDescr:"",
isGlobal?"global":"local");
dbT=GWEN_DB_GetNextGroup(dbT);
}
GWEN_DB_Group_free(dbProfiles);
}
else {
fprintf(stderr, "No profiles for this im-/exporter");
}
/* that's is */
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/export.c 0000644 0001750 0001750 00000025460 15113653730 016532 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
#include
#include
#include
#include
#include
#include
int exportCtx(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const char *ctxFile;
const char *outFile;
const char *exporterName;
const char *profileName;
const char *profileFile;
AB_IMEXPORTER_CONTEXT *ctx=0;
AB_IMEXPORTER_CONTEXT *nctx=0;
AB_IMEXPORTER_ACCOUNTINFO *iea=0;
uint32_t aid;
const char *bankId;
const char *accountId;
const char *subAccountId;
const char *iban;
int transactionType=0;
int transactionCommand=0;
const char *s;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"Specify the bank code", /* short description */
"Specify the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"Specify the account number", /* short description */
"Specify the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"transactionType", /* name */
0, /* minnum */
1, /* maxnum */
"tt", /* short option */
"transactiontype", /* long option */
"Specify the transaction type to filter", /* short description */
"Specify the transaction type to filter" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"transactionCommand", /* name */
0, /* minnum */
1, /* maxnum */
"tc", /* short option */
"transactioncommand", /* long option */
"Specify the transaction command to filter", /* short description */
"Specify the transaction command to filter" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"outFile", /* name */
0, /* minnum */
1, /* maxnum */
"o", /* short option */
"outfile", /* long option */
"Specify the file to store the data in", /* short description */
"Specify the file to store the data in" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"exporterName", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"exporter", /* long option */
"Specify the exporter to use", /* short description */
"Specify the exporter to use" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"profileName", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"profile", /* long option */
"Specify the export profile to use", /* short description */
"Specify the export profile to use" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"profileFile", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"profile-file", /* long option */
"Specify the file to load the export profile from",/* short description */
"Specify the file to load the export profile from" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return 1;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return 0;
}
/* read command line arguments */
exporterName=GWEN_DB_GetCharValue(db, "exporterName", 0, "csv");
profileName=GWEN_DB_GetCharValue(db, "profileName", 0, "default");
profileFile=GWEN_DB_GetCharValue(db, "profileFile", 0, NULL);
aid=(uint32_t)GWEN_DB_GetIntValue(db, "uniqueAccountId", 0, 0);
bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0);
accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0);
subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, 0);
iban=GWEN_DB_GetCharValue(db, "iban", 0, 0);
outFile=GWEN_DB_GetCharValue(db, "outFile", 0, 0);
s=GWEN_DB_GetCharValue(db, "transactionType", 0, NULL);
if (s && *s) {
transactionType=AB_Transaction_Type_fromString(s);
if (transactionType==AB_Transaction_TypeUnknown) {
fprintf(stderr, "ERROR: Invalid transaction type \"%s\"\n", s);
return 1;
}
}
s=GWEN_DB_GetCharValue(db, "transactionCommand", 0, NULL);
if (s && *s) {
transactionCommand=AB_Transaction_Command_fromString(s);
if (transactionCommand==AB_Transaction_CommandUnknown) {
fprintf(stderr, "ERROR: Invalid transaction command \"%s\"\n", s);
return 1;
}
}
/* init AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* load ctx file */
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
rv=readContext(ctxFile, &ctx, 1);
if (rv!=0) {
DBG_ERROR(0, "Error reading context (%d)", rv);
AB_ImExporterContext_free(ctx);
return 4;
}
/* copy context, but only keep wanted accounts and transactions */
nctx=AB_ImExporterContext_new();
iea=AB_ImExporterContext_GetFirstAccountInfo(ctx);
while (iea) {
if (AB_ImExporterAccountInfo_Matches(iea,
aid, /* unique account id */
"*",
bankId,
accountId,
subAccountId,
iban,
"*", /* currency */
AB_AccountType_Unknown)) {
AB_IMEXPORTER_ACCOUNTINFO *nai;
AB_TRANSACTION_LIST *tl;
nai=AB_ImExporterAccountInfo_dup(iea);
tl=AB_ImExporterAccountInfo_GetTransactionList(nai);
if (tl)
AB_Transaction_List_KeepByType(tl, transactionType, transactionCommand);
AB_ImExporterContext_AddAccountInfo(nctx, nai);
}
iea=AB_ImExporterAccountInfo_List_Next(iea);
} /* while */
AB_ImExporterContext_free(ctx); /* old context */
/* export new context */
rv=AB_Banking_ExportToFileLoadProfile(ab, exporterName, nctx, outFile, profileName, profileFile);
if (rv<0) {
DBG_ERROR(0, "Error exporting (%d).", rv);
AB_ImExporterContext_free(nctx);
return 4;
}
AB_ImExporterContext_free(nctx);
/* deinit */
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/Makefile.in 0000644 0001750 0001750 00000106073 15131211121 017072 0000000 0000000 # Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# 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.
@SET_MAKE@
#EXTRA_DIST=
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = aqbanking-cli$(EXEEXT) aqhbci-tool4$(EXEEXT) \
aqpaypal-tool$(EXEEXT) aqebics-tool$(EXEEXT) \
aqofxconnect-tool$(EXEEXT)
@IS_WINDOWS_TRUE@am__append_1 = -mconsole
@IS_WINDOWS_TRUE@am__append_2 = -mconsole
@IS_WINDOWS_TRUE@am__append_3 = -mconsole
@IS_WINDOWS_TRUE@am__append_4 = -mconsole
@IS_WINDOWS_TRUE@am__append_5 = -mconsole
subdir = src/tools/aqbanking-cli
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \
$(top_srcdir)/m4/as-scrub-include.m4 \
$(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
$(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
am_aqbanking_cli_OBJECTS = main.$(OBJEXT) addsepadebitnote.$(OBJEXT) \
addtransaction.$(OBJEXT) chkiban.$(OBJEXT) fillgaps.$(OBJEXT) \
import.$(OBJEXT) export.$(OBJEXT) listaccs.$(OBJEXT) \
listbal.$(OBJEXT) listconfdir.$(OBJEXT) listprofiles.$(OBJEXT) \
listtrans.$(OBJEXT) listdoc.$(OBJEXT) getdoc.$(OBJEXT) \
request.$(OBJEXT) util.$(OBJEXT) versions.$(OBJEXT) \
sepatransfer.$(OBJEXT) sepainternaltransfer.$(OBJEXT) \
sepadebitnote.$(OBJEXT) sepamultijobs.$(OBJEXT) \
separecurtransfer.$(OBJEXT) updateconf.$(OBJEXT) \
control.$(OBJEXT) accountcmds.$(OBJEXT)
aqbanking_cli_OBJECTS = $(am_aqbanking_cli_OBJECTS)
am__DEPENDENCIES_1 =
aqbanking_cli_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(aqcli_libs)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
aqbanking_cli_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(aqbanking_cli_LDFLAGS) $(LDFLAGS) -o $@
am_aqebics_tool_OBJECTS = aqebics-tool.$(OBJEXT)
aqebics_tool_OBJECTS = $(am_aqebics_tool_OBJECTS)
aqebics_tool_DEPENDENCIES = $(am__DEPENDENCIES_1) $(aqcli_libs) \
$(am__DEPENDENCIES_1)
aqebics_tool_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(aqebics_tool_LDFLAGS) $(LDFLAGS) -o $@
am_aqhbci_tool4_OBJECTS = aqhbci-tool.$(OBJEXT)
aqhbci_tool4_OBJECTS = $(am_aqhbci_tool4_OBJECTS)
aqhbci_tool4_DEPENDENCIES = $(am__DEPENDENCIES_1) $(aqcli_libs) \
$(am__DEPENDENCIES_1)
aqhbci_tool4_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(aqhbci_tool4_LDFLAGS) $(LDFLAGS) -o $@
am_aqofxconnect_tool_OBJECTS = aqofxconnect-tool.$(OBJEXT)
aqofxconnect_tool_OBJECTS = $(am_aqofxconnect_tool_OBJECTS)
aqofxconnect_tool_DEPENDENCIES = $(am__DEPENDENCIES_1) $(aqcli_libs) \
$(am__DEPENDENCIES_1)
aqofxconnect_tool_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(AM_CFLAGS) $(CFLAGS) $(aqofxconnect_tool_LDFLAGS) $(LDFLAGS) \
-o $@
am_aqpaypal_tool_OBJECTS = aqpaypal-tool.$(OBJEXT)
aqpaypal_tool_OBJECTS = $(am_aqpaypal_tool_OBJECTS)
aqpaypal_tool_DEPENDENCIES = $(am__DEPENDENCIES_1) $(aqcli_libs) \
$(am__DEPENDENCIES_1)
aqpaypal_tool_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(aqpaypal_tool_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/accountcmds.Po \
./$(DEPDIR)/addsepadebitnote.Po ./$(DEPDIR)/addtransaction.Po \
./$(DEPDIR)/aqebics-tool.Po ./$(DEPDIR)/aqhbci-tool.Po \
./$(DEPDIR)/aqofxconnect-tool.Po ./$(DEPDIR)/aqpaypal-tool.Po \
./$(DEPDIR)/chkiban.Po ./$(DEPDIR)/control.Po \
./$(DEPDIR)/export.Po ./$(DEPDIR)/fillgaps.Po \
./$(DEPDIR)/getdoc.Po ./$(DEPDIR)/import.Po \
./$(DEPDIR)/listaccs.Po ./$(DEPDIR)/listbal.Po \
./$(DEPDIR)/listconfdir.Po ./$(DEPDIR)/listdoc.Po \
./$(DEPDIR)/listprofiles.Po ./$(DEPDIR)/listtrans.Po \
./$(DEPDIR)/main.Po ./$(DEPDIR)/request.Po \
./$(DEPDIR)/sepadebitnote.Po \
./$(DEPDIR)/sepainternaltransfer.Po \
./$(DEPDIR)/sepamultijobs.Po ./$(DEPDIR)/separecurtransfer.Po \
./$(DEPDIR)/sepatransfer.Po ./$(DEPDIR)/updateconf.Po \
./$(DEPDIR)/util.Po ./$(DEPDIR)/versions.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(aqbanking_cli_SOURCES) $(aqebics_tool_SOURCES) \
$(aqhbci_tool4_SOURCES) $(aqofxconnect_tool_SOURCES) \
$(aqpaypal_tool_SOURCES)
DIST_SOURCES = $(aqbanking_cli_SOURCES) $(aqebics_tool_SOURCES) \
$(aqhbci_tool4_SOURCES) $(aqofxconnect_tool_SOURCES) \
$(aqpaypal_tool_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
HEADERS = $(noinst_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@
AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@
AQBANKING_SO_AGE = @AQBANKING_SO_AGE@
AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@
AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@
AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@
AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@
AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@
AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@
AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@
AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@
AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@
AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@
AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@
AQEBICS_CFLAGS = @AQEBICS_CFLAGS@
AQEBICS_LIBS = @AQEBICS_LIBS@
AR = @AR@
AS = @AS@
ASTYLE = @ASTYLE@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATETIME = @DATETIME@
#-Wl,-static
DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" \
-DAQBANKING_CLI_VERSION_STRING=\"@AQBANKING_CLI_VERSION_STRING@\"
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN_DEFINE = @DOXYGEN_DEFINE@
DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@
DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@
DOXYGEN_INPUT = @DOXYGEN_INPUT@
DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILECMD = @FILECMD@
GREP = @GREP@
GTK2_CFLAGS = @GTK2_CFLAGS@
GTK2_LIBS = @GTK2_LIBS@
GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@
GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@
GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@
HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@
HAVE_I18N = @HAVE_I18N@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBXML_CFLAGS = @LIBXML_CFLAGS@
LIBXML_LIBS = @LIBXML_LIBS@
LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@
LIBXSLT_LIBS = @LIBXSLT_LIBS@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MAKE_DLL_TARGET = @MAKE_DLL_TARGET@
MAKE_I18N_FILES = @MAKE_I18N_FILES@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OSYSTEM = @OSYSTEM@
OS_TYPE = @OS_TYPE@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
RANLIB = @RANLIB@
RC = @RC@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
STRIPALL = @STRIPALL@
TUTORIALS = @TUTORIALS@
USE_DOT = @USE_DOT@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
XMLMERGE = @XMLMERGE@
XMLSEC_CFLAGS = @XMLSEC_CFLAGS@
XMLSEC_LIBS = @XMLSEC_LIBS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
all_includes = @all_includes@
all_libraries = @all_libraries@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
aq_distrib_name = @aq_distrib_name@
aq_distrib_tag = @aq_distrib_tag@
aq_distrib_version = @aq_distrib_version@
aqbanking_backends = @aqbanking_backends@
aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@
aqbanking_data_searchdir = @aqbanking_data_searchdir@
aqbanking_headerdir = @aqbanking_headerdir@
aqbanking_headerdir_am = @aqbanking_headerdir_am@
aqbanking_includes = @aqbanking_includes@
aqbanking_internal_libs = @aqbanking_internal_libs@
aqbanking_ldflags = @aqbanking_ldflags@
aqbanking_libs = @aqbanking_libs@
aqbanking_locale_searchdir = @aqbanking_locale_searchdir@
aqbanking_modules = @aqbanking_modules@
aqbanking_pkgdatadir = @aqbanking_pkgdatadir@
aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@
aqbanking_plugindir = @aqbanking_plugindir@
aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@
aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@
aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@
aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@
aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@
aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@
aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@
aqbanking_symlinkdir = @aqbanking_symlinkdir@
aqbanking_sys_is_windows = @aqbanking_sys_is_windows@
aqbankingpp_modules = @aqbankingpp_modules@
aqebics_datadir = @aqebics_datadir@
aqebics_includes = @aqebics_includes@
aqebics_internal_libs = @aqebics_internal_libs@
aqebics_ldflags = @aqebics_ldflags@
aqebics_libs = @aqebics_libs@
aqfints_datadir = @aqfints_datadir@
aqhbci_datadir = @aqhbci_datadir@
aqhbci_includes = @aqhbci_includes@
aqhbci_internal_libs = @aqhbci_internal_libs@
aqhbci_ldflags = @aqhbci_ldflags@
aqhbci_libs = @aqhbci_libs@
aqofxconnect_includes = @aqofxconnect_includes@
aqofxconnect_internal_libs = @aqofxconnect_internal_libs@
aqofxconnect_libs = @aqofxconnect_libs@
aqpaypal_includes = @aqpaypal_includes@
aqpaypal_internal_libs = @aqpaypal_internal_libs@
aqpaypal_libs = @aqpaypal_libs@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
docpath = @docpath@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
gmp_libs = @gmp_libs@
gwenhywfar_bindir = @gwenhywfar_bindir@
gwenhywfar_dir = @gwenhywfar_dir@
gwenhywfar_has_crypt = @gwenhywfar_has_crypt@
gwenhywfar_headers = @gwenhywfar_headers@
gwenhywfar_includes = @gwenhywfar_includes@
gwenhywfar_libs = @gwenhywfar_libs@
gwenhywfar_plugins = @gwenhywfar_plugins@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
i18n_libs = @i18n_libs@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
typemaker2_exe = @typemaker2_exe@
visibility_cflags = @visibility_cflags@
with_aqebics = @with_aqebics@
with_aqhbci = @with_aqhbci@
AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/..
AM_CFLAGS = @visibility_cflags@
aqcli_libs = ${abs_top_builddir}/src/libs/cli/libaqcli.la
aqbanking_cli_LDADD = \
$(aqbanking_internal_libs) \
$(gwenhywfar_libs) \
$(aqcli_libs) \
-lstdc++
aqbanking_cli_SOURCES = \
main.c \
addsepadebitnote.c \
addtransaction.c \
chkiban.c \
fillgaps.c \
import.c \
export.c \
listaccs.c \
listbal.c \
listconfdir.c \
listprofiles.c \
listtrans.c \
listdoc.c \
getdoc.c \
request.c \
util.c \
versions.c \
sepatransfer.c \
sepainternaltransfer.c \
sepadebitnote.c \
sepamultijobs.c \
separecurtransfer.c \
updateconf.c \
control.c \
accountcmds.c
aqbanking_cli_LDFLAGS = $(am__append_1)
aqhbci_tool4_LDFLAGS = $(am__append_2)
aqpaypal_tool_LDFLAGS = $(am__append_3)
aqebics_tool_LDFLAGS = $(am__append_4)
aqofxconnect_tool_LDFLAGS = $(am__append_5)
noinst_HEADERS = globals.h
#EXTRA_DIST=
aqhbci_tool4_SOURCES = aqhbci-tool.c
aqhbci_tool4_LDADD = \
$(aqbanking_internal_libs) \
$(aqcli_libs) \
$(gwenhywfar_libs)
aqpaypal_tool_SOURCES = aqpaypal-tool.c
aqpaypal_tool_LDADD = \
$(aqbanking_internal_libs) \
$(aqcli_libs) \
$(gwenhywfar_libs)
aqebics_tool_SOURCES = aqebics-tool.c
aqebics_tool_LDADD = \
$(aqbanking_internal_libs) \
$(aqcli_libs) \
$(gwenhywfar_libs)
aqofxconnect_tool_SOURCES = aqofxconnect-tool.c
aqofxconnect_tool_LDADD = \
$(aqbanking_internal_libs) \
$(aqcli_libs) \
$(gwenhywfar_libs)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tools/aqbanking-cli/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu src/tools/aqbanking-cli/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
if ($$2 == $$4) files[d] = files[d] " " $$1; \
else { print "f", $$3 "/" $$4, $$1; } } \
END { for (d in files) print "f", d, files[d] }' | \
while read type dir files; do \
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
test -z "$$files" || { \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
} \
; done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
clean-binPROGRAMS:
@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
aqbanking-cli$(EXEEXT): $(aqbanking_cli_OBJECTS) $(aqbanking_cli_DEPENDENCIES) $(EXTRA_aqbanking_cli_DEPENDENCIES)
@rm -f aqbanking-cli$(EXEEXT)
$(AM_V_CCLD)$(aqbanking_cli_LINK) $(aqbanking_cli_OBJECTS) $(aqbanking_cli_LDADD) $(LIBS)
aqebics-tool$(EXEEXT): $(aqebics_tool_OBJECTS) $(aqebics_tool_DEPENDENCIES) $(EXTRA_aqebics_tool_DEPENDENCIES)
@rm -f aqebics-tool$(EXEEXT)
$(AM_V_CCLD)$(aqebics_tool_LINK) $(aqebics_tool_OBJECTS) $(aqebics_tool_LDADD) $(LIBS)
aqhbci-tool4$(EXEEXT): $(aqhbci_tool4_OBJECTS) $(aqhbci_tool4_DEPENDENCIES) $(EXTRA_aqhbci_tool4_DEPENDENCIES)
@rm -f aqhbci-tool4$(EXEEXT)
$(AM_V_CCLD)$(aqhbci_tool4_LINK) $(aqhbci_tool4_OBJECTS) $(aqhbci_tool4_LDADD) $(LIBS)
aqofxconnect-tool$(EXEEXT): $(aqofxconnect_tool_OBJECTS) $(aqofxconnect_tool_DEPENDENCIES) $(EXTRA_aqofxconnect_tool_DEPENDENCIES)
@rm -f aqofxconnect-tool$(EXEEXT)
$(AM_V_CCLD)$(aqofxconnect_tool_LINK) $(aqofxconnect_tool_OBJECTS) $(aqofxconnect_tool_LDADD) $(LIBS)
aqpaypal-tool$(EXEEXT): $(aqpaypal_tool_OBJECTS) $(aqpaypal_tool_DEPENDENCIES) $(EXTRA_aqpaypal_tool_DEPENDENCIES)
@rm -f aqpaypal-tool$(EXEEXT)
$(AM_V_CCLD)$(aqpaypal_tool_LINK) $(aqpaypal_tool_OBJECTS) $(aqpaypal_tool_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accountcmds.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addsepadebitnote.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addtransaction.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aqebics-tool.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aqhbci-tool.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aqofxconnect-tool.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aqpaypal-tool.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkiban.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/control.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/export.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fillgaps.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdoc.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/import.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listaccs.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listbal.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listconfdir.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listdoc.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listprofiles.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listtrans.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/request.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepadebitnote.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepainternaltransfer.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepamultijobs.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/separecurtransfer.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepatransfer.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/updateconf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/versions.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@echo '# dummy' >$@-t && $(am__mv) $@-t $@
am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS) $(HEADERS)
installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f ./$(DEPDIR)/accountcmds.Po
-rm -f ./$(DEPDIR)/addsepadebitnote.Po
-rm -f ./$(DEPDIR)/addtransaction.Po
-rm -f ./$(DEPDIR)/aqebics-tool.Po
-rm -f ./$(DEPDIR)/aqhbci-tool.Po
-rm -f ./$(DEPDIR)/aqofxconnect-tool.Po
-rm -f ./$(DEPDIR)/aqpaypal-tool.Po
-rm -f ./$(DEPDIR)/chkiban.Po
-rm -f ./$(DEPDIR)/control.Po
-rm -f ./$(DEPDIR)/export.Po
-rm -f ./$(DEPDIR)/fillgaps.Po
-rm -f ./$(DEPDIR)/getdoc.Po
-rm -f ./$(DEPDIR)/import.Po
-rm -f ./$(DEPDIR)/listaccs.Po
-rm -f ./$(DEPDIR)/listbal.Po
-rm -f ./$(DEPDIR)/listconfdir.Po
-rm -f ./$(DEPDIR)/listdoc.Po
-rm -f ./$(DEPDIR)/listprofiles.Po
-rm -f ./$(DEPDIR)/listtrans.Po
-rm -f ./$(DEPDIR)/main.Po
-rm -f ./$(DEPDIR)/request.Po
-rm -f ./$(DEPDIR)/sepadebitnote.Po
-rm -f ./$(DEPDIR)/sepainternaltransfer.Po
-rm -f ./$(DEPDIR)/sepamultijobs.Po
-rm -f ./$(DEPDIR)/separecurtransfer.Po
-rm -f ./$(DEPDIR)/sepatransfer.Po
-rm -f ./$(DEPDIR)/updateconf.Po
-rm -f ./$(DEPDIR)/util.Po
-rm -f ./$(DEPDIR)/versions.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-binPROGRAMS
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/accountcmds.Po
-rm -f ./$(DEPDIR)/addsepadebitnote.Po
-rm -f ./$(DEPDIR)/addtransaction.Po
-rm -f ./$(DEPDIR)/aqebics-tool.Po
-rm -f ./$(DEPDIR)/aqhbci-tool.Po
-rm -f ./$(DEPDIR)/aqofxconnect-tool.Po
-rm -f ./$(DEPDIR)/aqpaypal-tool.Po
-rm -f ./$(DEPDIR)/chkiban.Po
-rm -f ./$(DEPDIR)/control.Po
-rm -f ./$(DEPDIR)/export.Po
-rm -f ./$(DEPDIR)/fillgaps.Po
-rm -f ./$(DEPDIR)/getdoc.Po
-rm -f ./$(DEPDIR)/import.Po
-rm -f ./$(DEPDIR)/listaccs.Po
-rm -f ./$(DEPDIR)/listbal.Po
-rm -f ./$(DEPDIR)/listconfdir.Po
-rm -f ./$(DEPDIR)/listdoc.Po
-rm -f ./$(DEPDIR)/listprofiles.Po
-rm -f ./$(DEPDIR)/listtrans.Po
-rm -f ./$(DEPDIR)/main.Po
-rm -f ./$(DEPDIR)/request.Po
-rm -f ./$(DEPDIR)/sepadebitnote.Po
-rm -f ./$(DEPDIR)/sepainternaltransfer.Po
-rm -f ./$(DEPDIR)/sepamultijobs.Po
-rm -f ./$(DEPDIR)/separecurtransfer.Po
-rm -f ./$(DEPDIR)/sepatransfer.Po
-rm -f ./$(DEPDIR)/updateconf.Po
-rm -f ./$(DEPDIR)/util.Po
-rm -f ./$(DEPDIR)/versions.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-binPROGRAMS
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
.PRECIOUS: Makefile
sources:
for f in $(aqbanking_cli_SOURCES) $(aqhbci_tool4_SOURCES) $(aqpaypal_tool_SOURCES) $(aqebics_tool_SOURCES); $(aqofxconnect_tool_SOURCES); do \
echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \
done
built_sources:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d built_sources; \
done ;
typefiles:
typedefs:
cppcheck:
for f in $(aqbanking_cli_SOURCES); do \
cppcheck --force $$f ; \
done
for d in $(SUBDIRS); do \
$(MAKE) -C $$d cppcheck; \
done
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
aqbanking-6.9.1/src/tools/aqbanking-cli/listaccs.c 0000644 0001750 0001750 00000016531 15113653730 017015 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
int listAccs(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
AB_ACCOUNT_SPEC_LIST *al=NULL;
AB_ACCOUNT_SPEC *as;
int rv;
const char *tmplString;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"backendName", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"backend", /* long option */
"Specify the name of the backend for your account", /* short description */
"Specify the name of the backend for your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"country", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"country", /* long option */
"Specify the country for your account (e.g. \"de\")", /* short description */
"Specify the country for your account (e.g. \"de\")" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"Specify the bank code", /* short description */
"Specify the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"Specify the account number", /* short description */
"Specify the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountType", /* name */
0, /* minnum */
1, /* maxnum */
"t", /* short option */
"accounttype", /* long option */
"Specify the type of your account", /* short description */
"Specify the type of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"template", /* name */
0, /* minnum */
1, /* maxnum */
"T", /* short option */
"template", /* long option */
"Specify the template for the account list output", /* short description */
"Specify the template for the account list output" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return 1;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return 0;
}
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
al=getSelectedAccounts(ab, db);
if (al==NULL) {
DBG_INFO(0, "No matching accounts");
AB_Banking_Fini(ab);
return 2;
}
tmplString=GWEN_DB_GetCharValue(db, "template", 0,
"Account\t$(bankcode)\t$(accountnumber)\t$(bic)\t$(iban)\t$(uniqueId)\t$(typeAsString)");
as=AB_AccountSpec_List_First(al);
if (as) {
GWEN_BUFFER *dbuf;
fprintf(stdout, " \tBankcode\tAccountnumber\tBic\tIban\tUniqueId\tType\n");
dbuf=GWEN_Buffer_new(0, 256, 0, 1);
while (as) {
GWEN_DB_NODE *dbAccountSpec;
dbAccountSpec=GWEN_DB_Group_new("accountSpec");
AB_AccountSpec_toDb(as, dbAccountSpec);
GWEN_DB_SetCharValue(dbAccountSpec, GWEN_DB_FLAGS_OVERWRITE_VARS, "typeAsString",
AB_AccountType_toChar(AB_AccountSpec_GetType(as)));
GWEN_DB_ReplaceVars(dbAccountSpec, tmplString, dbuf);
fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(dbuf));
GWEN_Buffer_Reset(dbuf);
GWEN_DB_Group_free(dbAccountSpec);
as=AB_AccountSpec_List_Next(as);
} /* while (as) */
GWEN_Buffer_free(dbuf);
}
AB_AccountSpec_List_free(al);
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/separecurtransfer.c 0000644 0001750 0001750 00000044126 15113653730 020747 0000000 0000000 /***************************************************************************
begin : Sat Dec 28 2013
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
/* tool includes */
#include "globals.h"
/* aqbanking includes */
#include
/* gwenhywfar includes */
#include
/* forward declarations */
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
int sepaRecurTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
AB_ACCOUNT_SPEC *as;
int rv;
int rvExec=0;
const char *ctxFile;
AB_TRANSACTION *t;
int stoCommand=AB_Transaction_CommandUnknown;
int noCheck;
/* parse command line arguments */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
/* error in command line */
return 1;
}
/* read arguments */
if (GWEN_DB_GetIntValue(db, "createSto", 0, 0))
stoCommand=AB_Transaction_CommandSepaCreateStandingOrder;
if (GWEN_DB_GetIntValue(db, "modifySto", 0, 0)) {
if (stoCommand!=AB_Transaction_CommandUnknown) {
DBG_ERROR(0, "Contradicting command line arguments");
return 1;
}
stoCommand=AB_Transaction_CommandSepaModifyStandingOrder;
}
if (GWEN_DB_GetIntValue(db, "deleteSto", 0, 0)) {
if (stoCommand!=AB_Transaction_CommandUnknown) {
DBG_ERROR(0, "Contradicting command line arguments");
return 1;
}
stoCommand=AB_Transaction_CommandSepaDeleteStandingOrder;
}
if (stoCommand==AB_Transaction_CommandUnknown) {
DBG_ERROR(0, "Missing Option: '--create', '--delete' or '--modify'");
return 1;
}
noCheck=GWEN_DB_GetIntValue(db, "noCheck", 0, 0);
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
/* init AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* get account to work with */
as=getSingleSelectedAccount(ab, db);
if (as==NULL) {
AB_Banking_Fini(ab);
return 2;
}
/* create transaction from arguments */
t=mkSepaTransfer(db, stoCommand);
if (t==NULL) {
DBG_ERROR(0, "Could not create SEPA standing order from arguments");
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return 2;
}
AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as));
/* set local account info from selected AB_ACCOUNT_SPEC */
AB_Banking_FillTransactionFromAccountSpec(t, as);
/* some checks */
rv=checkTransactionIbans(t);
if (rv!=0) {
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return rv;
}
/* probably check against transaction limits */
if (!noCheck) {
rv=checkTransactionLimits(t,
AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_GetCommand(t)),
AQBANKING_TOOL_LIMITFLAGS_PURPOSE |
AQBANKING_TOOL_LIMITFLAGS_NAMES |
AQBANKING_TOOL_LIMITFLAGS_DATE |
AQBANKING_TOOL_LIMITFLAGS_SEPA);
if (rv!=0) {
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return rv;
}
}
AB_AccountSpec_free(as);
/* execute job */
rv=execSingleBankingJob(ab, t, ctxFile);
if (rv) {
fprintf(stderr, "Error on executeQueue (%d)\n", rv);
rvExec=rv;
}
/* cleanup */
AB_Transaction_free(t);
/* that's it */
rv=AB_Banking_Fini(ab);
if (rv<0) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
if (rvExec==0)
rvExec=5;
}
return rvExec;
}
/* parse command line */
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"createSto", /* name */
0, /* minnum */
1, /* maxnum */
NULL,
"create",
"Create standing orders",
"Create standing orders"
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"modifySto", /* name */
0, /* minnum */
1, /* maxnum */
NULL,
"modify",
"Modify standing orders",
"Modify standing orders"
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"deleteSto", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"delete", /* long option */
"Delete standing orders", /* short */
"Delete standing orders" /* long */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"backendName", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"backend", /* long option */
"Specify the name of the backend for your account", /* short description */
"Specify the name of the backend for your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"country", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"country", /* long option */
"Specify the country for your account (e.g. \"de\")", /* short description */
"Specify the country for your account (e.g. \"de\")" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"overwrite the bank code", /* short description */
"overwrite the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"overwrite the account number", /* short description */
"overwrite the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountType", /* name */
0, /* minnum */
1, /* maxnum */
"at", /* short option */
"accounttype", /* long option */
"Specify the account type", /* short description */
"Specify the account type" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteBIC", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"rbic", /* long option */
"Specify the remote SWIFT BIC",/* short description */
"Specify the remote SWIFT BIC" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteIBAN", /* name */
1, /* minnum */
1, /* maxnum */
NULL, /* short option */
"riban", /* long option */
"Specify the remote IBAN", /* short description */
"Specify the remote IBAN" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"value", /* name */
1, /* minnum */
1, /* maxnum */
"v", /* short option */
"value", /* long option */
"Specify the transfer amount", /* short description */
"Specify the transfer amount" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"name", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"name", /* long option */
"Specify your name", /* short description */
"Specify your name" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteName", /* name */
1, /* minnum */
2, /* maxnum */
NULL, /* short option */
"rname", /* long option */
"Specify the remote name", /* short description */
"Specify the remote name" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"purpose", /* name */
1, /* minnum */
6, /* maxnum */
"p", /* short option */
"purpose", /* long option */
"Specify the purpose", /* short description */
"Specify the purpose" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"endToEndReference", /* name */
0, /* minnum */
1, /* maxnum */
"E", /* short option */
"endtoendid", /* long option */
"Specify the SEPA End-to-end-reference", /* short description */
"Specify the SEPA End-to-end-reference" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"firstExecutionDate", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"firstExecutionDate", /* long option */
"Set date of first execution (YYYYMMDD)", /* short description */
"Set date of first execution (YYYYMMDD)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"nextExecutionDate", /* HKCDL and HKCDN only */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"nextExecutionDate", /* long option */
"Set date of next execution (YYYYMMDD)", /* short description */
"Set this date given from the command request --sepaSto (delete and modify sto only)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"lastExecutionDate", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"lastExecutionDate", /* long option */
"Set date of last execution (YYYYMMDD)", /* short description */
"Set date of last execution (YYYYMMDD)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"executionDay", /* name */
1, /* minnum */
1, /* maxnum */
NULL, /* short option */
"executionDay", /* long option */
"Set day of execution", /* short description */
"Set day of execution" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"executionCycle", /* name */
1, /* minnum */
1, /* maxnum */
NULL, /* short option */
"executionCycle", /* long option */
"Set execution cycle", /* short description */
"Set execution cycle" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"executionPeriod", /* name */
1, /* minnum */
1, /* maxnum */
NULL, /* short option */
"executionPeriod", /* long option */
"Set execution period (monthly / weekly)", /* short description */
"Set execution period (monthly / weekly)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"fiId", /* HKCDL */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"fiId", /* long option */
"Set the fiId (standing orders)", /* short description */
"Set the fiId (standing orders) - Auftragsidentifikation for HKCDL or HKCDN" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"executionDate", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"execdate", /* long option */
"Specify the execution date (YYYYMMDD)", /* short */
"Specify the execution date (YYYYMMDD)" /* long */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"noCheck", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"noCheck", /* long option */
"Dont check transaction limits", /* short description */
"Dont check transaction limits" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return NULL;
}
return db;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/fillgaps.c 0000644 0001750 0001750 00000013526 15113653730 017012 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2019 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
/* local includes */
#include "globals.h"
/* Gwenhywfar includes */
#include
/* forward declarations */
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
static int _copyTransactionsAndFillGaps(AB_IMEXPORTER_CONTEXT *inCtx,
AB_ACCOUNT_SPEC_LIST *accountSpecList,
AB_IMEXPORTER_CONTEXT *outCtx);
int fillGaps(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const char *ctxFile;
int noWriteOnError=0;
AB_IMEXPORTER_CONTEXT *inCtx=NULL;
AB_IMEXPORTER_CONTEXT *outCtx=NULL;
AB_ACCOUNT_SPEC_LIST *accountSpecList=NULL;
/* parse command line arguments */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
/* error in command line */
return 1;
}
/* read arguments */
noWriteOnError=GWEN_DB_GetIntValue(db, "noWriteOnError", 0, 0);
/* go */
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* read in-context */
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
rv=readContext(ctxFile, &inCtx, 0);
if (rv<0) {
DBG_ERROR(0, "Error reading context (%d)", rv);
AB_Banking_Fini(ab);
return 4;
}
/* read account list */
rv=AB_Banking_GetAccountSpecList(ab, &accountSpecList);
if (rv<0) {
DBG_INFO(0, "here (%d)", rv);
AB_Banking_Fini(ab);
return 4;
}
/* fill gaps */
outCtx=AB_ImExporterContext_new();
rv=_copyTransactionsAndFillGaps(inCtx, accountSpecList, outCtx);
if (rv<0) {
if (noWriteOnError) {
DBG_ERROR(0, "Some transactions could not be assigned to configured accounts, nothing written.");
AB_ImExporterContext_free(outCtx);
AB_Banking_Fini(ab);
return 4;
}
DBG_ERROR(0, "Some transactions could not be assigned to configured accounts, those have status=error");
}
AB_ImExporterContext_free(inCtx);
rv=writeContext(ctxFile, outCtx);
if (rv<0) {
DBG_ERROR(0, "Error writing context (%d)", rv);
AB_ImExporterContext_free(outCtx);
AB_Banking_Fini(ab);
return 4;
}
AB_ImExporterContext_free(outCtx);
/* that's it */
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"noWriteOnError", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"noWriteOnError", /* long option */
"Only write file if all transactions are okay", /* short description */
"Only write file if all transactions are okay" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return NULL;
}
return db;
}
int _copyTransactionsAndFillGaps(AB_IMEXPORTER_CONTEXT *inCtx,
AB_ACCOUNT_SPEC_LIST *accountSpecList,
AB_IMEXPORTER_CONTEXT *outCtx)
{
AB_IMEXPORTER_ACCOUNTINFO *iea;
int allOk=1;
int transactionCount=0;
iea=AB_ImExporterContext_GetFirstAccountInfo(inCtx);
while (iea) {
const AB_TRANSACTION *t;
t=AB_ImExporterAccountInfo_GetFirstTransaction(iea, 0, 0);
while (t) {
AB_ACCOUNT_SPEC *as;
AB_TRANSACTION *tCopy=NULL;
tCopy=AB_Transaction_dup(t);
as=pickAccountSpecForTransaction(accountSpecList, tCopy);
if (as==NULL) {
DBG_ERROR(0, "Could not determine account for transaction %d", transactionCount);
allOk=0;
AB_Transaction_SetStatus(tCopy, AB_Transaction_StatusError);
}
/* fill missing fields in transaction from account spec */
AB_Banking_FillTransactionFromAccountSpec(tCopy, as);
/* add to new context */
AB_ImExporterContext_AddTransaction(outCtx, tCopy);
transactionCount++;
t=AB_Transaction_List_Next(t);
} /* while t */
iea=AB_ImExporterAccountInfo_List_Next(iea);
} /* while */
if (allOk==0)
return GWEN_ERROR_GENERIC;
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/addtransaction.c 0000644 0001750 0001750 00000031322 15113653730 020201 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
/* tool includes */
#include "globals.h"
/* aqbanking includes */
#include
/* gwenhywfar includes */
#include
/* forward declarations */
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
int addTransaction(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
AB_ACCOUNT_SPEC *as;
int rv;
const char *ctxFile;
AB_TRANSACTION *t;
int noCheck;
/* parse command line arguments */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
/* error in command line */
return 1;
}
/* read arguments */
noCheck=GWEN_DB_GetIntValue(db, "noCheck", 0, 0);
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
/* init AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* get account to work with */
as=getSingleSelectedAccount(ab, db);
if (as==NULL) {
AB_Banking_Fini(ab);
return 2;
}
/* create transaction from arguments */
t=mkSepaTransfer(db, AB_Transaction_CommandSepaTransfer);
if (t==NULL) {
DBG_ERROR(0, "Could not create SEPA transaction from arguments");
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return 2;
}
AB_Transaction_SetType(t, AB_Transaction_TypeTransfer);
AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as));
/* set local account info from selected AB_ACCOUNT_SPEC */
AB_Banking_FillTransactionFromAccountSpec(t, as);
/* some checks */
rv=checkTransactionIbans(t);
if (rv!=0) {
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return rv;
}
/* probably check against transaction limits */
if (!noCheck) {
rv=checkTransactionLimits(t,
AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_GetCommand(t)),
AQBANKING_TOOL_LIMITFLAGS_PURPOSE |
AQBANKING_TOOL_LIMITFLAGS_NAMES |
AQBANKING_TOOL_LIMITFLAGS_DATE |
AQBANKING_TOOL_LIMITFLAGS_SEPA);
if (rv!=0) {
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return rv;
}
}
AB_AccountSpec_free(as);
/* add to context file */
rv=addTransactionToContextFile(t, ctxFile);
if (rv!=0) {
DBG_ERROR(0, "Error adding to context (%d)", rv);
AB_Transaction_free(t);
AB_Banking_Fini(ab);
return 4;
}
AB_Transaction_free(t);
/* that's it */
rv=AB_Banking_Fini(ab);
if (rv<0) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
/* parse command line */
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"backendName", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"backend", /* long option */
"Specify the name of the backend for your account", /* short description */
"Specify the name of the backend for your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"country", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"country", /* long option */
"Specify the country for your account (e.g. \"de\")", /* short description */
"Specify the country for your account (e.g. \"de\")" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"overwrite the bank code", /* short description */
"overwrite the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"overwrite the account number", /* short description */
"overwrite the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountType", /* name */
0, /* minnum */
1, /* maxnum */
"at", /* short option */
"accounttype", /* long option */
"Specify the account type", /* short description */
"Specify the account type" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteBIC", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"rbic", /* long option */
"Specify the remote SWIFT BIC",/* short description */
"Specify the remote SWIFT BIC" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteIBAN", /* name */
1, /* minnum */
1, /* maxnum */
0, /* short option */
"riban", /* long option */
"Specify the remote IBAN", /* short description */
"Specify the remote IBAN" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"value", /* name */
1, /* minnum */
1, /* maxnum */
"v", /* short option */
"value", /* long option */
"Specify the transfer amount", /* short description */
"Specify the transfer amount" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"name", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"name", /* long option */
"Specify your name", /* short description */
"Specify your name" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteName", /* name */
1, /* minnum */
2, /* maxnum */
0, /* short option */
"rname", /* long option */
"Specify the remote name", /* short description */
"Specify the remote name" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"purpose", /* name */
1, /* minnum */
6, /* maxnum */
"p", /* short option */
"purpose", /* long option */
"Specify the purpose", /* short description */
"Specify the purpose" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"endToEndReference", /* name */
0, /* minnum */
1, /* maxnum */
"E", /* short option */
"endtoendid", /* long option */
"Specify the SEPA End-to-end-reference", /* short description */
"Specify the SEPA End-to-end-reference" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"executionDate", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"execdate", /* long option */
"Specify the execution date (YYYYMMDD)", /* short */
"Specify the execution date (YYYYMMDD)" /* long */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"noCheck", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"noCheck", /* long option */
"Dont check transaction limits", /* short description */
"Dont check transaction limits"
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return NULL;
}
return db;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/aqhbci-tool.c 0000644 0001750 0001750 00000017246 15113653730 017416 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "globals.h"
static int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int main(int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
AB_BANKING *ab;
GWEN_GUI *gui;
int nonInteractive=0;
int acceptValidCerts=0;
const char *pinFile;
const char *cfgDir;
const char *s;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"cfgdir", /* name */
0, /* minnum */
1, /* maxnum */
"D", /* short option */
"cfgdir", /* long option */
I18S("Specify the configuration folder"),
I18S("Specify the configuration folder")
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"nonInteractive", /* name */
0, /* minnum */
1, /* maxnum */
"n", /* short option */
"noninteractive", /* long option */
"Select non-interactive mode",/* short description */
"Select non-interactive mode.\n" /* long description */
"This automatically returns a confirmative answer to any non-critical\n"
"message."
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"acceptValidCerts", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"acceptvalidcerts", /* long option */
"Automatically accept all valid TLS certificate",
"Automatically accept all valid TLS certificate"
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"charset", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"charset", /* long option */
"Specify the output character set", /* short description */
"Specify the output character set" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"pinfile", /* name */
0, /* minnum */
1, /* maxnum */
"P", /* short option */
"pinfile", /* long option */
"Specify the PIN file", /* short description */
"Specify the PIN file" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"opticalTan", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"opticaltan", /* long option */
"Tool for optical TAN challenges", /* short description */
"Specify an external tool to display optical TAN challenges" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help",
I18S("Show this help screen. For help on commands, "
"run aqbanking-cli --help."),
I18S("Show this help screen. For help on commands, run aqbanking-cli --help.")
}
};
rv=GWEN_Init();
if (rv) {
fprintf(stderr, "ERROR: Unable to init Gwen.\n");
exit(2);
}
GWEN_Logger_Open(0, "aqhbci-tool", 0,
GWEN_LoggerType_Console,
GWEN_LoggerFacility_User);
GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning);
rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, LOCALEDIR);
if (rv) {
DBG_ERROR(0, "Could not bind textdomain (%d)", rv);
}
else {
rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8");
if (rv) {
DBG_ERROR(0, "Could not set codeset (%d)", rv);
}
}
db=GWEN_DB_Group_new("arguments");
rv = AB_App_Handle_Args(argc, argv, args, db);
if (rv == GWEN_ARGS_RESULT_ERROR) {
return 1;
}
else if (rv>1) {
argc-=rv-1;
argv+=rv-1;
}
else {
/* no command */
argc=0;
}
nonInteractive=GWEN_DB_GetIntValue(db, "nonInteractive", 0, 0);
acceptValidCerts=GWEN_DB_GetIntValue(db, "acceptValidCerts", 0, 0);
cfgDir=GWEN_DB_GetCharValue(db, "cfgdir", 0, 0);
gui=GWEN_Gui_CGui_new();
s=GWEN_DB_GetCharValue(db, "charset", 0, NULL);
if (s && *s)
GWEN_Gui_SetCharSet(gui, s);
if (nonInteractive)
GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE);
else
GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE);
if (acceptValidCerts)
GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS);
else
GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS);
pinFile=GWEN_DB_GetCharValue(db, "pinFile", 0, NULL);
if (pinFile) {
GWEN_DB_NODE *dbPins;
dbPins=GWEN_DB_Group_new("pins");
if (GWEN_DB_ReadFile(dbPins, pinFile,
GWEN_DB_FLAGS_DEFAULT |
GWEN_PATH_FLAGS_CREATE_GROUP)) {
fprintf(stderr, "Error reading pinfile \"%s\"\n", pinFile);
GWEN_DB_Group_free(dbPins);
GWEN_DB_Group_free(db);
return 2;
}
GWEN_Gui_SetPasswordDb(gui, dbPins, 1);
}
GWEN_Gui_SetGui(gui);
ab=AB_Banking_new("aqbanking-cli", cfgDir, 0);
AB_Banking_RuntimeConfig_SetCharValue(ab, "fintsRegistrationKey", "32F8A67FE34B57AB8D7E4FE70");
AB_Banking_RuntimeConfig_SetCharValue(ab, "fintsApplicationVersionString", AQBANKING_FINTS_VERSION_STRING);
AB_Gui_Extend(gui, ab);
s = GWEN_DB_GetCharValue(db, "opticalTan", 0, NULL);
if ((NULL != s) && ('\0' != s [0]) && (0 != AB_Gui_SetCliCallbackForOpticalTan(gui, s))) {
fprintf(stderr, "Error registering \"%s\".\n", s);
GWEN_DB_Group_free(db);
return 2;
}
rv=doControl(ab, db, argc, argv);
AB_Gui_Unextend(gui);
AB_Banking_free(ab);
GWEN_Gui_SetGui(NULL);
GWEN_Gui_free(gui);
GWEN_DB_Group_free(db);
return rv;
}
int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
int rv;
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
rv=AB_Banking_ProviderControl(ab, "aqhbci", argc, argv);
if (rv!=0) {
DBG_ERROR(0, "Error calling control function (%d)", rv);
AB_Banking_Fini(ab);
return 4;
}
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/versions.c 0000664 0001750 0001750 00000002352 14043610745 017056 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
#include
int versions(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
int vmajor, vminor, vpatchLevel, vbuild;
fprintf(stdout, "Versions:\n");
fprintf(stdout, " AqBanking-CLI: %s\n",
AQBANKING_CLI_VERSION_STRING);
GWEN_Version(&vmajor,
&vminor,
&vpatchLevel,
&vbuild);
fprintf(stdout, " Gwenhywfar : %d.%d.%d.%d\n",
vmajor, vminor, vpatchLevel, vbuild);
AB_Banking_GetVersion(&vmajor,
&vminor,
&vpatchLevel,
&vbuild);
fprintf(stdout, " AqBanking : %d.%d.%d.%d\n",
vmajor, vminor, vpatchLevel, vbuild);
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/sepamultijobs.c 0000644 0001750 0001750 00000037561 15113653730 020077 0000000 0000000 /***************************************************************************
begin : Tue Mar 25 2014
copyright : (C) 2019 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
#include
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
static int _createJobsFromContext(AB_IMEXPORTER_CONTEXT *ctx,
const AB_ACCOUNT_SPEC_LIST *accountSpecList,
AB_ACCOUNT_SPEC *forcedAccount,
AB_TRANSACTION_COMMAND cmd,
AB_TRANSACTION_LIST2 *jobList);
int sepaMultiJobs(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv,
AQBANKING_TOOL_MULTISEPA_TYPE multisepa_type)
{
GWEN_DB_NODE *db;
int rv;
const char *ctxFile;
const char *inFile;
const char *importerName;
const char *profileName;
const char *profileFile;
int use_flash_debitnote;
AB_IMEXPORTER_CONTEXT *ctx=0;
AB_ACCOUNT_SPEC *forcedAccount=NULL;
AB_TRANSACTION_LIST2 *jobList;
AB_ACCOUNT_SPEC_LIST *accountSpecList=NULL;
AB_TRANSACTION_COMMAND cmd;
int dryRun=0;
int rvExec;
/* parse command line arguments */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
/* error in command line */
return 1;
}
importerName=GWEN_DB_GetCharValue(db, "importerName", 0, "csv");
profileName=GWEN_DB_GetCharValue(db, "profileName", 0,
(multisepa_type == AQBANKING_TOOL_SEPA_TRANSFERS)
? "default"
: "sepadebitnotes");
profileFile=GWEN_DB_GetCharValue(db, "profileFile", 0, NULL);
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
inFile=GWEN_DB_GetCharValue(db, "inFile", 0, 0);
use_flash_debitnote=GWEN_DB_GetIntValue(db, "useCOR1", 0, 0);
dryRun=GWEN_DB_GetIntValue(db, "dryRun", 0, 0);
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
rv=AB_Banking_GetAccountSpecList(ab, &accountSpecList);
if (rv<0) {
DBG_INFO(0, "here (%d)", rv);
AB_Banking_Fini(ab);
return 4;
}
/* find local account to set later if requested */
if (GWEN_DB_VariableExists(db, "uniqueAccountId") ||
GWEN_DB_VariableExists(db, "bankId") ||
GWEN_DB_VariableExists(db, "accountId") ||
GWEN_DB_VariableExists(db, "subAccountId") ||
GWEN_DB_VariableExists(db, "iban")) {
forcedAccount=pickAccountSpecForArgs(accountSpecList, db);
if (forcedAccount==NULL) {
DBG_ERROR(0, "Invalid account specification.");
AB_Banking_Fini(ab);
return 4;
}
}
/* import new context */
ctx=AB_ImExporterContext_new();
rv=AB_Banking_ImportFromFileLoadProfile(ab, importerName, ctx,
profileName, profileFile,
inFile);
if (rv<0) {
DBG_ERROR(0, "Error reading file: %d", rv);
AB_ImExporterContext_free(ctx);
AB_Banking_Fini(ab);
return 4;
}
/* create jobs from imported transactions */
cmd=(multisepa_type == AQBANKING_TOOL_SEPA_TRANSFERS)
// The command was sepatransfers, so we create JobSepaTransfer
? AB_Transaction_CommandSepaTransfer
// The command was sepadebitnotes, so we create some debit note
: (use_flash_debitnote
// Did we have --use-COR1? Use this extra job type
? AB_Transaction_CommandSepaFlashDebitNote
// No COR1, just standard CORE debit note
: AB_Transaction_CommandSepaDebitNote);
/* populate job list */
jobList=AB_Transaction_List2_new();
rv=_createJobsFromContext(ctx, accountSpecList, forcedAccount, cmd, jobList);
AB_ImExporterContext_free(ctx);
if (rv<0) {
DBG_INFO(0, "Error (%d)", rv);
writeJobsAsContextFile(jobList, ctxFile);
AB_Transaction_List2_freeAll(jobList);
AB_Banking_Fini(ab);
return 3;
}
/* execute jobs */
rvExec=0;
if (dryRun) {
DBG_NOTICE(0, "Dry-run requested, not sending jobs");
writeJobsAsContextFile(jobList, ctxFile);
}
else {
rv=execBankingJobs(ab, jobList, ctxFile);
if (rv) {
DBG_ERROR(0, "Error on executeQueue (%d)", rv);
rvExec=3;
}
}
AB_Transaction_List2_freeAll(jobList);
/* that's it */
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
if (rvExec)
return rvExec;
else
return 5;
}
if (rvExec)
return rvExec;
else
return 0;
}
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"inFile", /* name */
0, /* minnum */
1, /* maxnum */
"f", /* short option */
"infile", /* long option */
"Specify the file to read the data from", /* short description */
"Specify the file to read the data from" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"importerName", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"importer", /* long option */
"Specify the importer to use", /* short description */
"Specify the importer to use" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"profileName", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"profile", /* long option */
"Specify the import profile to use", /* short description */
"Specify the import profile to use" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"profileFile", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"profile-file", /* long option */
"Specify the file to load the import profile from (WATCH OUT: Feature might be broken)",/* short description */
"Specify the file to load the import profile from" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"overwrite the bank code", /* short description */
"overwrite the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"overwrite the account number", /* short description */
"overwrite the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountType", /* name */
0, /* minnum */
1, /* maxnum */
"t", /* short option */
"accounttype", /* long option */
"Specify the type of your account", /* short description */
"Specify the type of your account" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"useCOR1", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"use-COR1", /* long option */
"If given, use COR1 variant of debit notes (faster), otherwise CORE (slower)", /* short description */
"If given, use COR1 variant of debit notes (faster), otherwise CORE (slower)" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"dryRun", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"dryRun", /* long option */
"If given jobs will not be really executed, just written to the context file", /* short description */
"If given jobs will not be really executed, just written to the context file" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return NULL;
}
return db;
}
int _createJobsFromContext(AB_IMEXPORTER_CONTEXT *ctx,
const AB_ACCOUNT_SPEC_LIST *accountSpecList,
AB_ACCOUNT_SPEC *forcedAccount,
AB_TRANSACTION_COMMAND cmd,
AB_TRANSACTION_LIST2 *jobList)
{
AB_IMEXPORTER_ACCOUNTINFO *iea;
int reallyExecute=1;
int transactionLine=0;
iea=AB_ImExporterContext_GetFirstAccountInfo(ctx);
while (iea) {
const AB_TRANSACTION *t;
t=AB_ImExporterAccountInfo_GetFirstTransaction(iea, 0, 0);
while (t) {
AB_ACCOUNT_SPEC *as;
AB_TRANSACTION *job=NULL;
const char *rIBAN;
const char *lIBAN;
const char *lBIC;
const AB_TRANSACTION_LIMITS *lim;
int rv;
job=AB_Transaction_dup(t);
if (forcedAccount)
as=forcedAccount;
else
as=pickAccountSpecForTransaction(accountSpecList, t);
if (as==NULL) {
DBG_ERROR(0, "Could not determine account for job in line %d", transactionLine);
reallyExecute=0;
AB_Transaction_SetStatus(job, AB_Transaction_StatusError);
}
/* fill missing fields in transaction from account spec */
AB_Banking_FillTransactionFromAccountSpec(job, as);
rIBAN=AB_Transaction_GetRemoteIban(job);
lIBAN=AB_Transaction_GetLocalIban(job);
lBIC=AB_Transaction_GetLocalBic(job);
/* check remote account */
if (!rIBAN || !(*rIBAN)) {
DBG_ERROR(0, "Missing remote IBAN, in line %d", transactionLine);
reallyExecute=0;
}
rv=AB_Banking_CheckIban(rIBAN);
if (rv != 0) {
DBG_ERROR(0, "Invalid remote IBAN (%s), in line %d", rIBAN, transactionLine);
reallyExecute=0;
AB_Transaction_SetStatus(job, AB_Transaction_StatusError);
}
/* check local account */
if (!lBIC || !(*lBIC)) {
DBG_WARN(0, "Missing local BIC, in line %d (ignoring, not needed anymore anyway)", transactionLine);
}
if (!lIBAN || !(*lIBAN)) {
DBG_ERROR(0, "Missing local IBAN, in line %d", transactionLine);
reallyExecute=0;
}
rv=AB_Banking_CheckIban(lIBAN);
if (rv != 0) {
DBG_ERROR(0, "Invalid local IBAN (%s), in line %d", lIBAN, transactionLine);
reallyExecute=0;
AB_Transaction_SetStatus(job, AB_Transaction_StatusError);
}
AB_Transaction_SetType(job,
(cmd==AB_Transaction_CommandSepaTransfer)
? AB_Transaction_TypeTransfer
: AB_Transaction_TypeDebitNote
);
lim=AB_AccountSpec_GetTransactionLimitsForCommand(as, cmd);
if (lim==NULL) {
DBG_ERROR(0, "Job %s not supported, in line %d.", AB_Transaction_Command_toString(cmd), transactionLine);
reallyExecute=0;
AB_Transaction_SetStatus(job, AB_Transaction_StatusError);
}
else {
rv=checkTransactionLimits(job, lim,
AQBANKING_TOOL_LIMITFLAGS_PURPOSE |
AQBANKING_TOOL_LIMITFLAGS_NAMES |
AQBANKING_TOOL_LIMITFLAGS_SEPA);
if (rv<0) {
DBG_ERROR(0, "Job %s violates limits, in line %d.", AB_Transaction_Command_toString(cmd), transactionLine);
reallyExecute=0;
AB_Transaction_SetStatus(job, AB_Transaction_StatusError);
}
}
AB_Transaction_SetCommand(job, cmd);
AB_Transaction_List2_PushBack(jobList, job);
transactionLine++;
t=AB_Transaction_List_Next(t);
} /* while t */
iea=AB_ImExporterAccountInfo_List_Next(iea);
} /* while */
if (reallyExecute==0)
return GWEN_ERROR_GENERIC;
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/listconfdir.c 0000644 0001750 0001750 00000003214 15115300025 017506 0000000 0000000 /***************************************************************************
begin : Fri Nov 14 2025
copyright : (C) 2025 by Ralf Habacker
email : ralf.habacker@freenet.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
int listConfDir(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
GWEN_BUFFER *buf;
int rv;
rv=AB_Cmd_Handle_Args(argc, argv, args, dbArgs);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return 1;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return 0;
}
buf=GWEN_Buffer_new(0, 1024, 0, 1);
rv=AB_Banking_GetUserDataDir(ab, buf);
if (rv<0) {
fprintf(stderr,
"Error: Could not determine AqBanking user data dir (rc=%d)\n",
rv);
GWEN_Buffer_free(buf);
return 2;
}
printf("%s\n", GWEN_Buffer_GetStart(buf));
GWEN_Buffer_free(buf);
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/aqpaypal-tool.c 0000644 0001750 0001750 00000015171 15113653730 017772 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "globals.h"
static int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int main(int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
AB_BANKING *ab;
GWEN_GUI *gui;
int nonInteractive=0;
int acceptValidCerts=0;
const char *pinFile;
const char *cfgDir;
const char *s;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"cfgdir", /* name */
0, /* minnum */
1, /* maxnum */
"D", /* short option */
"cfgdir", /* long option */
I18S("Specify the configuration folder"),
I18S("Specify the configuration folder")
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"nonInteractive", /* name */
0, /* minnum */
1, /* maxnum */
"n", /* short option */
"noninteractive", /* long option */
"Select non-interactive mode",/* short description */
"Select non-interactive mode.\n" /* long description */
"This automatically returns a confirmative answer to any non-critical\n"
"message."
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"acceptValidCerts", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"acceptvalidcerts", /* long option */
"Automatically accept all valid TLS certificate",
"Automatically accept all valid TLS certificate"
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"charset", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"charset", /* long option */
"Specify the output character set", /* short description */
"Specify the output character set" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"pinfile", /* name */
0, /* minnum */
1, /* maxnum */
"P", /* short option */
"pinfile", /* long option */
"Specify the PIN file", /* short description */
"Specify the PIN file" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help",
I18S("Show this help screen. For help on commands, "
"run aqbanking-cli --help."),
I18S("Show this help screen. For help on commands, run aqbanking-cli --help.")
}
};
rv=GWEN_Init();
if (rv) {
fprintf(stderr, "ERROR: Unable to init Gwen.\n");
exit(2);
}
GWEN_Logger_Open(0, "aqpaypal-tool", 0,
GWEN_LoggerType_Console,
GWEN_LoggerFacility_User);
GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning);
rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, LOCALEDIR);
if (rv) {
DBG_ERROR(0, "Could not bind textdomain (%d)", rv);
}
else {
rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8");
if (rv) {
DBG_ERROR(0, "Could not set codeset (%d)", rv);
}
}
db=GWEN_DB_Group_new("arguments");
rv = AB_App_Handle_Args(argc, argv, args, db);
if (rv == GWEN_ARGS_RESULT_ERROR) {
return 1;
}
else if (rv>1) {
argc-=rv-1;
argv+=rv-1;
}
else {
/* no command */
argc=0;
}
nonInteractive=GWEN_DB_GetIntValue(db, "nonInteractive", 0, 0);
acceptValidCerts=GWEN_DB_GetIntValue(db, "acceptValidCerts", 0, 0);
cfgDir=GWEN_DB_GetCharValue(db, "cfgdir", 0, 0);
gui=GWEN_Gui_CGui_new();
s=GWEN_DB_GetCharValue(db, "charset", 0, NULL);
if (s && *s)
GWEN_Gui_SetCharSet(gui, s);
if (nonInteractive)
GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE);
else
GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE);
if (acceptValidCerts)
GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS);
else
GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS);
pinFile=GWEN_DB_GetCharValue(db, "pinFile", 0, NULL);
if (pinFile) {
GWEN_DB_NODE *dbPins;
dbPins=GWEN_DB_Group_new("pins");
if (GWEN_DB_ReadFile(dbPins, pinFile,
GWEN_DB_FLAGS_DEFAULT |
GWEN_PATH_FLAGS_CREATE_GROUP)) {
fprintf(stderr, "Error reading pinfile \"%s\"\n", pinFile);
GWEN_DB_Group_free(dbPins);
GWEN_DB_Group_free(db);
return 2;
}
GWEN_Gui_SetPasswordDb(gui, dbPins, 1);
}
GWEN_Gui_SetGui(gui);
ab=AB_Banking_new("aqbanking-cli", cfgDir, 0);
AB_Gui_Extend(gui, ab);
rv=doControl(ab, db, argc, argv);
GWEN_DB_Group_free(db);
return rv;
}
int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
int rv;
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
rv=AB_Banking_ProviderControl(ab, "aqpaypal", argc, argv);
if (rv!=0) {
DBG_ERROR(0, "Error calling control function (%d)", rv);
AB_Banking_Fini(ab);
return 4;
}
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/main.c 0000644 0001750 0001750 00000034117 15115300025 016120 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "globals.h"
static void cmdAddHelpStr(GWEN_BUFFER *ubuf,
const char *cmdname,
const char *cmdhelp)
{
// Indentation of the command: one space
GWEN_Buffer_AppendString(ubuf, " ");
GWEN_Buffer_AppendString(ubuf, cmdname);
GWEN_Buffer_AppendString(ubuf, ":\n");
// Indentation of the help: three spaces
GWEN_Buffer_AppendString(ubuf, " ");
GWEN_Buffer_AppendString(ubuf, cmdhelp);
GWEN_Buffer_AppendString(ubuf, "\n");
}
int main(int argc, char **argv)
{
GWEN_DB_NODE *db;
const char *cmd;
int rv;
AB_BANKING *ab;
GWEN_GUI *gui;
const char *ctrlBackend=NULL;
int nonInteractive=0;
int acceptValidCerts=0;
const char *pinFile;
const char *cfgDir;
const char *s;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"cfgdir", /* name */
0, /* minnum */
1, /* maxnum */
"D", /* short option */
"cfgdir", /* long option */
I18S("Specify the configuration folder"),
I18S("Specify the configuration folder")
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"nonInteractive", /* name */
0, /* minnum */
1, /* maxnum */
"n", /* short option */
"noninteractive", /* long option */
"Select non-interactive mode",/* short description */
"Select non-interactive mode.\n" /* long description */
"This automatically returns a confirmative answer to any non-critical\n"
"message."
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"acceptValidCerts", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"acceptvalidcerts", /* long option */
"Automatically accept all valid TLS certificate",
"Automatically accept all valid TLS certificate"
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"charset", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"charset", /* long option */
"Specify the output character set", /* short description */
"Specify the output character set" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"pinfile", /* name */
0, /* minnum */
1, /* maxnum */
"P", /* short option */
"pinfile", /* long option */
"Specify the PIN file", /* short description */
"Specify the PIN file" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"opticalTan", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"opticaltan", /* long option */
"Tool for optical TAN challenges", /* short description */
"Specify an external tool to display optical TAN challenges" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"control", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"control", /* long option */
"backend for control function", /* short description */
"Call the CONTROL function of the given backend" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help",
I18S("Show this help screen. For help on commands, "
"run aqbanking-cli --help."),
I18S("Show this help screen. For help on commands, run aqbanking-cli --help.")
}
};
rv=GWEN_Init();
if (rv) {
fprintf(stderr, "ERROR: Unable to init Gwen.\n");
exit(2);
}
GWEN_Logger_Open(0, "aqbanking-cli", 0,
GWEN_LoggerType_Console,
GWEN_LoggerFacility_User);
GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning);
rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, LOCALEDIR);
if (rv) {
DBG_ERROR(0, "Could not bind textdomain (%d)", rv);
}
else {
rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8");
if (rv) {
DBG_ERROR(0, "Could not set codeset (%d)", rv);
}
}
db=GWEN_DB_Group_new("arguments");
rv = AB_App_Handle_Args(argc, argv, args, db);
if (rv == GWEN_ARGS_RESULT_ERROR) {
return 1;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
GWEN_BUFFER *ubuf;
ubuf=GWEN_Buffer_new(0, 1024, 0, 1);
GWEN_Buffer_AppendString(ubuf,
I18N("\nCommands:\n"));
cmdAddHelpStr(ubuf, "listaccs",
I18N("Prints the list of accounts"));
cmdAddHelpStr(ubuf, "listbal",
I18N("Export balances from a context file."));
cmdAddHelpStr(ubuf, "listconfdir",
I18N("Print the configuration directory path"));
cmdAddHelpStr(ubuf, "listtrans",
I18N("List transactions or transfers from a context file."));
cmdAddHelpStr(ubuf, "listtransfers",
I18N("Export transactions from a context file which match certain status."));
cmdAddHelpStr(ubuf, "request",
I18N("Requests transactions, balances, standing orders etc."));
cmdAddHelpStr(ubuf, "chkiban",
I18N("Check an IBAN"));
cmdAddHelpStr(ubuf, "import",
I18N("Import a file into an import context file"));
cmdAddHelpStr(ubuf, "export",
I18N("Export an import context file into a file (previously \"listtrans\")"));
cmdAddHelpStr(ubuf, "sepatransfer",
I18N("Issue a single SEPA transfer (data from command line)"));
cmdAddHelpStr(ubuf, "sepainternaltransfer",
I18N("Issue a single SEPA transfer (data from command line)"));
cmdAddHelpStr(ubuf, "sepatransfers",
I18N("Issue a number of SEPA transfers (data from a file)"));
cmdAddHelpStr(ubuf, "sepadebitnote",
I18N("Issue a single SEPA debit note (data from command line)"));
cmdAddHelpStr(ubuf, "sepaflashdebitnote",
I18N("Issue a single flash SEPA debit note COR1 (data from command line)"));
cmdAddHelpStr(ubuf, "sepadebitnotes",
I18N("Issue a number of SEPA debit notes (data from a file)"));
cmdAddHelpStr(ubuf, "addtrans",
I18N("Add a transfer to an existing import context file"));
cmdAddHelpStr(ubuf, "addsepadebitnote",
I18N("Add a SEPA debit note to an existing import context file"));
cmdAddHelpStr(ubuf, "addflashsepadebitnote",
I18N("Add a flash SEPA debit note to an existing import context file"));
cmdAddHelpStr(ubuf, "sepasto",
I18N("Manage SEPA standing orders"));
cmdAddHelpStr(ubuf, "fillgaps",
I18N("Fill gaps in an import context file from configuration settings"));
cmdAddHelpStr(ubuf, "listprofiles",
I18N("Print existing profiles"));
cmdAddHelpStr(ubuf, "accountcmds",
I18N("Print available jobs for given (or all) accounts"));
cmdAddHelpStr(ubuf, "versions",
I18N("Print the program and library versions"));
GWEN_Buffer_AppendString(ubuf, "\n");
fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf));
GWEN_Buffer_free(ubuf);
GWEN_DB_Group_free(db);
return 0;
}
else if (rv) {
argc-=rv-1;
argv+=rv-1;
}
nonInteractive=GWEN_DB_GetIntValue(db, "nonInteractive", 0, 0);
acceptValidCerts=GWEN_DB_GetIntValue(db, "acceptValidCerts", 0, 0);
cfgDir=GWEN_DB_GetCharValue(db, "cfgdir", 0, 0);
ctrlBackend=GWEN_DB_GetCharValue(db, "control", 0, 0);
gui=GWEN_Gui_CGui_new();
s=GWEN_DB_GetCharValue(db, "charset", 0, NULL);
if (s && *s)
GWEN_Gui_SetCharSet(gui, s);
if (nonInteractive)
GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE);
else
GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE);
if (acceptValidCerts)
GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS);
else
GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS);
pinFile=GWEN_DB_GetCharValue(db, "pinFile", 0, NULL);
if (pinFile) {
GWEN_DB_NODE *dbPins;
dbPins=GWEN_DB_Group_new("pins");
if (GWEN_DB_ReadFile(dbPins, pinFile,
GWEN_DB_FLAGS_DEFAULT |
GWEN_PATH_FLAGS_CREATE_GROUP)) {
fprintf(stderr, "Error reading pinfile \"%s\"\n", pinFile);
GWEN_DB_Group_free(dbPins);
GWEN_DB_Group_free(db);
return 2;
}
GWEN_Gui_SetPasswordDb(gui, dbPins, 1);
}
GWEN_Gui_SetGui(gui);
ab=AB_Banking_new("aqbanking-cli", cfgDir, 0);
AB_Banking_RuntimeConfig_SetCharValue(ab, "fintsRegistrationKey", "32F8A67FE34B57AB8D7E4FE70");
AB_Banking_RuntimeConfig_SetCharValue(ab, "fintsApplicationVersionString", AQBANKING_FINTS_VERSION_STRING);
AB_Gui_Extend(gui, ab);
s = GWEN_DB_GetCharValue(db, "opticalTan", 0, NULL);
if ((NULL != s) && ('\0' != s [0]) && (0 != AB_Gui_SetCliCallbackForOpticalTan(gui, s))) {
fprintf(stderr, "Error registering \"%s\".\n", s);
GWEN_DB_Group_free(db);
return 2;
}
if (ctrlBackend && *ctrlBackend) {
rv=control(ab, ctrlBackend, db, argc, argv);
}
else {
cmd=GWEN_DB_GetCharValue(db, "params", 0, 0);
if (!cmd) {
fprintf(stderr, "ERROR: Command needed.\n");
GWEN_DB_Group_free(db);
return 1;
}
if (strcasecmp(cmd, "listaccs")==0 ||
strcasecmp(cmd, "listaccounts")==0) {
rv=listAccs(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "listbal")==0) {
rv=listBal(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "listconfdir")==0) {
rv=listConfDir(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "listtrans")==0) {
rv=listTrans(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "listtransfers")==0) {
fprintf(stderr,
"ERROR: Please use the commands \"listtrans\" or \"export\" and specify the transaction type via \"-tt TYPE\"\n");
GWEN_DB_Group_free(db);
return 1;
}
else if (strcasecmp(cmd, "listdoc")==0) {
rv=listDoc(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "getdoc")==0) {
rv=getDoc(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "request")==0) {
rv=request(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "chkiban")==0) {
rv=chkIban(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "import")==0) {
rv=import(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "export")==0) {
rv=exportCtx(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "sepatransfer")==0) {
rv=sepaTransfer(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "sepainternaltransfer")==0) {
rv=sepaInternalTransfer(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "sepatransfers")==0) {
rv=sepaMultiJobs(ab, db, argc, argv, AQBANKING_TOOL_SEPA_TRANSFERS);
}
else if (strcasecmp(cmd, "sepadebitnote")==0) {
rv=sepaDebitNote(ab, db, argc, argv, 0);
}
else if (strcasecmp(cmd, "sepaFlashDebitNote")==0) {
rv=sepaDebitNote(ab, db, argc, argv, 1);
}
else if (strcasecmp(cmd, "sepadebitnotes")==0) {
rv=sepaMultiJobs(ab, db, argc, argv, AQBANKING_TOOL_SEPA_DEBITNOTES);
}
else if (strcasecmp(cmd, "addtrans")==0) {
rv=addTransaction(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "addsepadebitnote")==0) {
rv=addSepaDebitNote(ab, db, argc, argv, 0);
}
else if (strcasecmp(cmd, "addFlashSepadebitnote")==0) {
rv=addSepaDebitNote(ab, db, argc, argv, 1);
}
else if (strcasecmp(cmd, "sepasto")==0) {
rv=sepaRecurTransfer(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "fillgaps")==0) {
rv=fillGaps(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "listprofiles")==0) {
rv=listProfiles(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "accountcmds")==0) {
rv=showAccountCommands(ab, db, argc, argv);
}
else if (strcasecmp(cmd, "versions")==0) {
rv=versions(ab, db, argc, argv);
}
else {
fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd);
rv=1;
}
}
AB_Banking_free(ab);
GWEN_Gui_SetGui(NULL);
GWEN_Gui_free(gui);
GWEN_Fini();
GWEN_DB_Group_free(db);
return rv;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/control.c 0000664 0001750 0001750 00000002177 14043610745 016673 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
#include
#include
#include
#include
#include
int control(AB_BANKING *ab, const char *ctrlBackend, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
int rv;
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
rv=AB_Banking_ProviderControl(ab, ctrlBackend, argc, argv);
if (rv!=0) {
DBG_ERROR(0, "Error calling control function (%d)", rv);
AB_Banking_Fini(ab);
return 4;
}
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/addsepadebitnote.c 0000644 0001750 0001750 00000035574 15113653730 020517 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
/* tool includes */
#include "globals.h"
/* aqbanking includes */
#include
/* gwenhywfar includes */
#include
/* forward declarations */
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
int addSepaDebitNote(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv, int use_flash_debitnote)
{
GWEN_DB_NODE *db;
AB_ACCOUNT_SPEC *as;
int rv;
const char *ctxFile;
AB_TRANSACTION *t;
int noCheck;
/* parse command line arguments */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
/* error in command line */
return 1;
}
/* read arguments */
noCheck=GWEN_DB_GetIntValue(db, "noCheck", 0, 0);
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
/* init AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* get account to work with */
as=getSingleSelectedAccount(ab, db);
if (as==NULL) {
AB_Banking_Fini(ab);
return 2;
}
/* create transaction from arguments */
t=mkSepaDebitNote(db, use_flash_debitnote?AB_Transaction_CommandSepaFlashDebitNote:AB_Transaction_CommandSepaDebitNote);
if (t==NULL) {
DBG_ERROR(0, "Could not create SEPA transaction from arguments");
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return 2;
}
AB_Transaction_SetType(t, AB_Transaction_TypeDebitNote);
AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as));
/* set local account info from selected AB_ACCOUNT_SPEC */
AB_Banking_FillTransactionFromAccountSpec(t, as);
/* some checks */
rv=checkTransactionIbans(t);
if (rv!=0) {
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return rv;
}
/* probably check against transaction limits */
if (!noCheck) {
rv=checkTransactionLimits(t,
AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_GetCommand(t)),
AQBANKING_TOOL_LIMITFLAGS_PURPOSE |
AQBANKING_TOOL_LIMITFLAGS_NAMES |
AQBANKING_TOOL_LIMITFLAGS_SEQUENCE |
AQBANKING_TOOL_LIMITFLAGS_DATE |
AQBANKING_TOOL_LIMITFLAGS_SEPA);
if (rv!=0) {
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return rv;
}
}
AB_AccountSpec_free(as);
/* add to context file */
rv=addTransactionToContextFile(t, ctxFile);
if (rv!=0) {
DBG_ERROR(0, "Error adding to context (%d)", rv);
AB_Transaction_free(t);
AB_Banking_Fini(ab);
return 4;
}
/* that's it */
rv=AB_Banking_Fini(ab);
if (rv<0) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
/* parse command line */
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"backendName", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"backend", /* long option */
"Specify the name of the backend for your account", /* short description */
"Specify the name of the backend for your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"country", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"country", /* long option */
"Specify the country for your account (e.g. \"de\")", /* short description */
"Specify the country for your account (e.g. \"de\")" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"overwrite the bank code", /* short description */
"overwrite the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"overwrite the account number", /* short description */
"overwrite the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountType", /* name */
0, /* minnum */
1, /* maxnum */
"at", /* short option */
"accounttype", /* long option */
"Specify the account type", /* short description */
"Specify the account type" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteBIC", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"rbic", /* long option */
"Specify the remote SWIFT BIC",/* short description */
"Specify the remote SWIFT BIC" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteIBAN", /* name */
1, /* minnum */
1, /* maxnum */
0, /* short option */
"riban", /* long option */
"Specify the remote IBAN", /* short description */
"Specify the remote IBAN" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"value", /* name */
1, /* minnum */
1, /* maxnum */
"v", /* short option */
"value", /* long option */
"Specify the transfer amount", /* short description */
"Specify the transfer amount" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"name", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"name", /* long option */
"Specify your name", /* short description */
"Specify your name" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteName", /* name */
1, /* minnum */
2, /* maxnum */
0, /* short option */
"rname", /* long option */
"Specify the remote name", /* short description */
"Specify the remote name" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"purpose", /* name */
1, /* minnum */
6, /* maxnum */
"p", /* short option */
"purpose", /* long option */
"Specify the purpose", /* short description */
"Specify the purpose" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"endToEndReference", /* name */
0, /* minnum */
1, /* maxnum */
"E", /* short option */
"endtoendid", /* long option */
"Specify the SEPA End-to-end-reference", /* short description */
"Specify the SEPA End-to-end-reference" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"executionDate", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"execdate", /* long option */
"Specify the execution date (YYYYMMDD)", /* short */
"Specify the execution date (YYYYMMDD)" /* long */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"creditorSchemeId", /* name */
1, /* minnum */
1, /* maxnum */
0, /* short option */
"creditorSchemeId", /* long option */
"Specify the creditor scheme id (\"Glaeubiger-ID\")", /* short description */
"Specify the creditor scheme id (\"Glaeubiger-ID\")" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"mandateId", /* name */
1, /* minnum */
1, /* maxnum */
0, /* short option */
"mandateId", /* long option */
"Specify the mandate id", /* short description */
"Specify the mandate id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"mandateDate", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"mandateDate", /* long option */
"Specify the date when the mandate was issued", /* short description */
"Specify the date when the mandate was issued" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"sequenceType", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"sequenceType", /* long option */
"Specify the sequence type (once, first, following)", /* short description */
"Specify the sequence type (once, first, following)" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"noCheck", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"noCheck", /* long option */
"Dont check transaction limits", /* short description */
"Dont check transaction limits"
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return NULL;
}
return db;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/import.c 0000644 0001750 0001750 00000015066 15113653730 016524 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
int import(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const char *ctxFile;
const char *inFile;
const char *importerName;
const char *profileName;
const char *profileFile;
const char *bankId;
const char *accountId;
AB_IMEXPORTER_CONTEXT *ctx=0;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"inFile", /* name */
0, /* minnum */
1, /* maxnum */
"f", /* short option */
"infile", /* long option */
"Specify the file to read the data from", /* short description */
"Specify the file to read the data from" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"importerName", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"importer", /* long option */
"Specify the importer to use", /* short description */
"Specify the importer to use" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"profileName", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"profile", /* long option */
"Specify the export profile to use", /* short description */
"Specify the export profile to use" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"profileFile", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"profile-file", /* long option */
"Specify the file to load the export profile from",/* short description */
"Specify the file to load the export profile from" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"overwrite the bank code", /* short description */
"overwrite the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"overwrite the account number", /* short description */
"overwrite the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return 1;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return 0;
}
bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0);
accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0);
importerName=GWEN_DB_GetCharValue(db, "importerName", 0, "csv");
profileName=GWEN_DB_GetCharValue(db, "profileName", 0, "default");
profileFile=GWEN_DB_GetCharValue(db, "profileFile", 0, NULL);
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
inFile=GWEN_DB_GetCharValue(db, "inFile", 0, 0);
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* import new context */
ctx=AB_ImExporterContext_new();
rv=AB_Banking_ImportFromFileLoadProfile(ab, importerName, ctx,
profileName, profileFile,
inFile);
if (rv<0) {
DBG_ERROR(0, "Error reading file: %d", rv);
AB_ImExporterContext_free(ctx);
return 4;
}
/* adjust local account id if requested */
if (bankId || accountId) {
AB_IMEXPORTER_ACCOUNTINFO *iea;
iea=AB_ImExporterContext_GetFirstAccountInfo(ctx);
while (iea) {
if (bankId)
AB_ImExporterAccountInfo_SetBankCode(iea, bankId);
if (accountId)
AB_ImExporterAccountInfo_SetAccountNumber(iea, accountId);
iea=AB_ImExporterAccountInfo_List_Next(iea);
} /* while */
}
/* write context */
rv=writeContext(ctxFile, ctx);
if (rv<0) {
AB_Banking_Fini(ab);
return 4;
}
AB_ImExporterContext_free(ctx);
/* that's is */
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/util.c 0000664 0001750 0001750 00000107714 14546575650 016210 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
#include
#include
#include
static int GWENHYWFAR_CB _replaceVarsCb(void *cbPtr, const char *name, int index, int maxLen, GWEN_BUFFER *dstBuf);
/* ========================================================================================================================
* readContext
* ========================================================================================================================
*/
int readContext(const char *ctxFile,
AB_IMEXPORTER_CONTEXT **pCtx,
int mustExist)
{
AB_IMEXPORTER_CONTEXT *ctx;
GWEN_SYNCIO *sio;
GWEN_DB_NODE *dbCtx;
int rv;
if (ctxFile==NULL) {
sio=GWEN_SyncIo_File_fromStdin();
GWEN_SyncIo_AddFlags(sio,
GWEN_SYNCIO_FLAGS_DONTCLOSE |
GWEN_SYNCIO_FILE_FLAGS_READ);
}
else {
sio=GWEN_SyncIo_File_new(ctxFile, GWEN_SyncIo_File_CreationMode_OpenExisting);
GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ);
rv=GWEN_SyncIo_Connect(sio);
if (rv<0) {
if (!mustExist) {
ctx=AB_ImExporterContext_new();
*pCtx=ctx;
GWEN_SyncIo_free(sio);
return 0;
}
GWEN_SyncIo_free(sio);
return 4;
}
}
/* actually read */
dbCtx=GWEN_DB_Group_new("context");
rv=GWEN_DB_ReadFromIo(dbCtx, sio,
GWEN_DB_FLAGS_DEFAULT |
GWEN_PATH_FLAGS_CREATE_GROUP);
if (rv<0) {
DBG_ERROR(0, "Error reading context file (%d)", rv);
GWEN_DB_Group_free(dbCtx);
GWEN_SyncIo_Disconnect(sio);
GWEN_SyncIo_free(sio);
return rv;
}
GWEN_SyncIo_Disconnect(sio);
GWEN_SyncIo_free(sio);
ctx=AB_ImExporterContext_fromDb(dbCtx);
if (!ctx) {
DBG_ERROR(0, "No context in input data");
GWEN_DB_Group_free(dbCtx);
return GWEN_ERROR_BAD_DATA;
}
GWEN_DB_Group_free(dbCtx);
*pCtx=ctx;
return 0;
}
/* ========================================================================================================================
* writeContext
* ========================================================================================================================
*/
int writeContext(const char *ctxFile, const AB_IMEXPORTER_CONTEXT *ctx)
{
GWEN_DB_NODE *dbCtx;
GWEN_SYNCIO *sio;
int rv;
if (ctxFile==NULL) {
sio=GWEN_SyncIo_File_fromStdout();
GWEN_SyncIo_AddFlags(sio,
GWEN_SYNCIO_FLAGS_DONTCLOSE |
GWEN_SYNCIO_FILE_FLAGS_WRITE);
}
else {
sio=GWEN_SyncIo_File_new(ctxFile, GWEN_SyncIo_File_CreationMode_CreateAlways);
GWEN_SyncIo_AddFlags(sio,
GWEN_SYNCIO_FILE_FLAGS_READ |
GWEN_SYNCIO_FILE_FLAGS_WRITE |
GWEN_SYNCIO_FILE_FLAGS_UREAD |
GWEN_SYNCIO_FILE_FLAGS_UWRITE |
GWEN_SYNCIO_FILE_FLAGS_GREAD |
GWEN_SYNCIO_FILE_FLAGS_GWRITE);
rv=GWEN_SyncIo_Connect(sio);
if (rv<0) {
DBG_ERROR(0, "Error selecting output file: %s",
strerror(errno));
GWEN_SyncIo_free(sio);
return 4;
}
}
dbCtx=GWEN_DB_Group_new("context");
rv=AB_ImExporterContext_toDb(ctx, dbCtx);
if (rv<0) {
DBG_ERROR(0, "Error writing context to db (%d)", rv);
GWEN_DB_Group_free(dbCtx);
GWEN_SyncIo_Disconnect(sio);
GWEN_SyncIo_free(sio);
return rv;
}
rv=GWEN_DB_WriteToIo(dbCtx, sio, GWEN_DB_FLAGS_DEFAULT);
if (rv<0) {
DBG_ERROR(0, "Error writing context (%d)", rv);
}
else
rv=0;
GWEN_DB_Group_free(dbCtx);
GWEN_SyncIo_Disconnect(sio);
GWEN_SyncIo_free(sio);
return rv;
}
/* ========================================================================================================================
* mkSepaTransfer
* ========================================================================================================================
*/
AB_TRANSACTION *mkSepaTransfer(GWEN_DB_NODE *db, int cmd)
{
AB_TRANSACTION *t;
const char *s;
int i;
GWEN_DATE *d;
assert(db);
t=AB_Transaction_new();
AB_Transaction_SetCommand(t, cmd);
AB_Transaction_SetType(t, AB_Transaction_TypeTransfer);
s=GWEN_DB_GetCharValue(db, "name", 0, 0);
if (s && *s)
AB_Transaction_SetLocalName(t, s);
/* remote account */
s=GWEN_DB_GetCharValue(db, "remoteBankId", 0, 0);
if (s && *s)
AB_Transaction_SetRemoteBankCode(t, s);
s=GWEN_DB_GetCharValue(db, "remoteAccountId", 0, 0);
if (s && *s)
AB_Transaction_SetRemoteAccountNumber(t, s);
s=GWEN_DB_GetCharValue(db, "remoteIban", 0, 0);
if (s && *s)
AB_Transaction_SetRemoteIban(t, s);
else {
DBG_ERROR(0, "No remote IBAN given");
AB_Transaction_free(t);
return NULL;
}
s=GWEN_DB_GetCharValue(db, "remoteBic", 0, 0);
if (s && *s)
AB_Transaction_SetRemoteBic(t, s);
s=GWEN_DB_GetCharValue(db, "remoteName", 0, 0);
if (s && *s)
AB_Transaction_SetRemoteName(t, s);
else {
DBG_ERROR(0, "No remote name given");
AB_Transaction_free(t);
return NULL;
}
/* transfer data */
for (i=0; i<20; i++) {
s=GWEN_DB_GetCharValue(db, "purpose", i, 0);
if (!s)
break;
if (*s)
AB_Transaction_AddPurposeLine(t, s);
}
if (i<1) {
DBG_ERROR(0, "No purpose given");
AB_Transaction_free(t);
return NULL;
}
s=GWEN_DB_GetCharValue(db, "value", 0, 0);
if (s && *s) {
AB_VALUE *v;
v=AB_Value_fromString(s);
assert(v);
if (AB_Value_IsNegative(v) || AB_Value_IsZero(v)) {
DBG_ERROR(0, "Only positive non-zero amount allowed");
AB_Transaction_free(t);
return NULL;
}
AB_Transaction_SetValue(t, v);
AB_Value_free(v);
}
else {
DBG_ERROR(0, "No value given");
AB_Transaction_free(t);
return NULL;
}
s=GWEN_DB_GetCharValue(db, "endToEndReference", 0, 0);
if (s && *s)
AB_Transaction_SetEndToEndReference(t, s);
/* dated transfer, SEPA debit notes */
s=GWEN_DB_GetCharValue(db, "executionDate", 0, 0);
if (s && *s) {
GWEN_BUFFER *dbuf;
dbuf=GWEN_Buffer_new(0, 32, 0, 1);
GWEN_Buffer_AppendString(dbuf, s);
GWEN_Buffer_AppendString(dbuf, "-00:00");
d=GWEN_Date_fromStringWithTemplate(GWEN_Buffer_GetStart(dbuf), "YYYYMMDD");
GWEN_Buffer_free(dbuf);
if (d==0) {
DBG_ERROR(0, "Invalid execution date value \"%s\"", s);
AB_Transaction_free(t);
return NULL;
}
AB_Transaction_SetDate(t, d);
GWEN_Date_free(d);
}
/* standing orders */
if (cmd==AB_Transaction_CommandSepaCreateStandingOrder) {
s=GWEN_DB_GetCharValue(db, "firstExecutionDate", 0, 0);
if (!(s && *s)) {
DBG_ERROR(0, "Missing first execution date");
return NULL;
}
}
if (cmd==AB_Transaction_CommandSepaModifyStandingOrder ||
cmd==AB_Transaction_CommandSepaDeleteStandingOrder) {
/* not in the Specs, but the banks ask for it) */
s=GWEN_DB_GetCharValue(db, "nextExecutionDate", 0, 0);
if (!(s && *s)) {
DBG_ERROR(0, "Missing next execution date");
return NULL;
}
}
if (s && *s) {
GWEN_BUFFER *dbuf;
dbuf=GWEN_Buffer_new(0, 32, 0, 1);
GWEN_Buffer_AppendString(dbuf, s);
GWEN_Buffer_AppendString(dbuf, "-00:00");
d=GWEN_Date_fromStringWithTemplate(GWEN_Buffer_GetStart(dbuf), "YYYYMMDD");
GWEN_Buffer_free(dbuf);
if (d==0) {
DBG_ERROR(0, "Invalid first or next execution date value \"%s\"", s);
AB_Transaction_free(t);
return NULL;
}
AB_Transaction_SetFirstDate(t, d); /*next execution date, too */
GWEN_Date_free(d);
}
s=GWEN_DB_GetCharValue(db, "lastExecutionDate", 0, 0);
if (s && *s) {
GWEN_BUFFER *dbuf;
dbuf=GWEN_Buffer_new(0, 32, 0, 1);
GWEN_Buffer_AppendString(dbuf, s);
GWEN_Buffer_AppendString(dbuf, "-00:00");
d=GWEN_Date_fromStringWithTemplate(GWEN_Buffer_GetStart(dbuf), "YYYYMMDD");
GWEN_Buffer_free(dbuf);
if (d==0) {
DBG_ERROR(0, "Invalid last execution date value \"%s\"", s);
AB_Transaction_free(t);
return NULL;
}
AB_Transaction_SetLastDate(t, d);
GWEN_Date_free(d);
}
if (cmd==AB_Transaction_CommandSepaCreateStandingOrder ||
cmd==AB_Transaction_CommandSepaModifyStandingOrder ||
cmd==AB_Transaction_CommandSepaDeleteStandingOrder) {
const char *s;
AB_TRANSACTION_PERIOD period=AB_Transaction_PeriodUnknown;
/* only needed for standing orders */
AB_Transaction_SetSubType(t, AB_Transaction_SubTypeStandingOrder);
s=GWEN_DB_GetCharValue(db, "executionPeriod", 0, 0);
if (s && *s) {
period=AB_Transaction_Period_fromString(s);
if (period==AB_Transaction_PeriodUnknown) {
DBG_ERROR(0, "Invalid execution period value \"%s\"", s);
AB_Transaction_free(t);
return NULL;
}
}
else {
DBG_ERROR(0, "Missing execution period value");
return NULL;
}
AB_Transaction_SetPeriod(t, period);
i=GWEN_DB_GetIntValue(db, "executionCycle", 0, -1);
if (i <= 0) {
DBG_ERROR(0, "Invalid execution cycle value \"%d\"", i);
AB_Transaction_free(t);
return NULL;
}
AB_Transaction_SetCycle(t, i);
i=GWEN_DB_GetIntValue(db, "executionDay", 0, -1);
if (i <= 0 || (period == AB_Transaction_PeriodWeekly && i > 7) ||
(period == AB_Transaction_PeriodMonthly && i > 30 &&
(i < 97 || i > 99))) {
DBG_ERROR(0, "Invalid execution day value \"%d\"", i);
AB_Transaction_free(t);
return NULL;
}
AB_Transaction_SetExecutionDay(t, i);
/* SetFiId */
s=GWEN_DB_GetCharValue(db, "fiId", 0, 0);
if (s && *s)
AB_Transaction_SetFiId(t, s);
}
return t;
}
/* ========================================================================================================================
* mkSepaDebitNote
* ========================================================================================================================
*/
AB_TRANSACTION *mkSepaDebitNote(GWEN_DB_NODE *db, int cmd)
{
AB_TRANSACTION *t;
const char *s;
t=mkSepaTransfer(db, cmd);
if (t==NULL) {
DBG_INFO(0, "here");
return NULL;
}
AB_Transaction_SetType(t, AB_Transaction_TypeDebitNote);
/* read some additional fields */
s=GWEN_DB_GetCharValue(db, "creditorSchemeId", 0, 0);
if (!(s && *s)) {
DBG_ERROR(0, "Missing creditor scheme id");
AB_Transaction_free(t);
return NULL;
}
AB_Transaction_SetCreditorSchemeId(t, s);
s=GWEN_DB_GetCharValue(db, "mandateId", 0, 0);
if (!(s && *s)) {
DBG_ERROR(0, "Missing mandate id");
AB_Transaction_free(t);
return NULL;
}
AB_Transaction_SetMandateId(t, s);
s=GWEN_DB_GetCharValue(db, "mandateDate", 0, 0);
if (!(s && *s)) {
DBG_ERROR(0, "Missing mandate date");
AB_Transaction_free(t);
return NULL;
}
else {
GWEN_DATE *dt;
dt=GWEN_Date_fromString(s);
if (dt==NULL) {
DBG_ERROR(0, "Bad date format for mandate date");
AB_Transaction_free(t);
return NULL;
}
AB_Transaction_SetMandateDate(t, dt);
GWEN_Date_free(dt);
}
s=GWEN_DB_GetCharValue(db, "sequenceType", 0, "once");
if (s && *s) {
AB_TRANSACTION_SEQUENCE st;
st=AB_Transaction_Sequence_fromString(s);
if (st!=AB_Transaction_SequenceUnknown)
AB_Transaction_SetSequence(t, st);
else {
DBG_ERROR(0, "Unknown sequence type [%s]", s);
AB_Transaction_free(t);
return NULL;
}
}
else
AB_Transaction_SetSequence(t, AB_Transaction_SequenceOnce);
return t;
}
/* ========================================================================================================================
* getSelectedAccounts
* ========================================================================================================================
*/
AB_ACCOUNT_SPEC_LIST *getSelectedAccounts(AB_BANKING *ab, GWEN_DB_NODE *db)
{
AB_ACCOUNT_SPEC_LIST *asl=NULL;
uint32_t uniqueAccountId;
int rv;
asl=AB_AccountSpec_List_new();
uniqueAccountId=(uint32_t) GWEN_DB_GetIntValue(db, "uniqueAccountId", 0, 0);
if (uniqueAccountId) {
AB_ACCOUNT_SPEC *as=NULL;
/* specific unique id given, use that exclusively */
rv=AB_Banking_GetAccountSpecByUniqueId(ab, uniqueAccountId, &as);
if (rv<0) {
DBG_ERROR(0, "Could not load account spec %lu (%d)", (unsigned long int) uniqueAccountId, rv);
AB_AccountSpec_List_free(asl);
return NULL;
}
AB_AccountSpec_List_Add(as, asl);
}
else {
/* no unique account id given, try match parameters */
rv=AB_Banking_GetAccountSpecList(ab, &asl);
if (rv<0) {
if (rv==GWEN_ERROR_NOT_FOUND) {
DBG_INFO(0, "No account specs (%d)", rv);
}
else {
DBG_ERROR(0, "Could not load account specs (%d)", rv);
}
AB_AccountSpec_List_free(asl);
return NULL;
}
else {
const char *backendName;
const char *country;
const char *bankId;
const char *accountId;
const char *subAccountId;
const char *iban;
const char *s;
AB_ACCOUNT_TYPE aType=AB_AccountType_Unknown;
AB_ACCOUNT_SPEC *as;
backendName=GWEN_DB_GetCharValue(db, "backendName", 0, "*");
country=GWEN_DB_GetCharValue(db, "country", 0, "*");
bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*");
accountId=GWEN_DB_GetCharValue(db, "accountId", 0, "*");
subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, "*");
iban=GWEN_DB_GetCharValue(db, "iban", 0, "*");
s=GWEN_DB_GetCharValue(db, "accountType", 0, NULL);
if (s && *s)
aType=AB_AccountType_fromChar(s);
if (aType==AB_AccountType_Invalid) {
DBG_ERROR(0, "Invalid Could not load account specs (%d)", rv);
AB_AccountSpec_List_free(asl);
return NULL;
}
as=AB_AccountSpec_List_First(asl);
while (as) {
AB_ACCOUNT_SPEC *asNext;
asNext=AB_AccountSpec_List_Next(as);
if (AB_AccountSpec_Matches(as, backendName,
country, bankId, accountId, subAccountId,
iban,
"*", /* currency */
aType)<1) {
/* doesn't match, remove from list */
AB_AccountSpec_List_Del(as);
AB_AccountSpec_free(as);
}
as=asNext;
}
}
}
if (AB_AccountSpec_List_GetCount(asl)<1) {
AB_AccountSpec_List_free(asl);
return NULL;
}
return asl;
}
/* ========================================================================================================================
* getSingleSelectedAccount
* ========================================================================================================================
*/
AB_ACCOUNT_SPEC *getSingleSelectedAccount(AB_BANKING *ab, GWEN_DB_NODE *db)
{
AB_ACCOUNT_SPEC_LIST *al=NULL;
AB_ACCOUNT_SPEC *as;
al=getSelectedAccounts(ab, db);
if (al==NULL) {
DBG_INFO(0, "No matching accounts");
return NULL;
}
if (AB_AccountSpec_List_GetCount(al)>1) {
DBG_ERROR(0, "Ambiguous account specification (%d accounts matching)", AB_AccountSpec_List_GetCount(al));
AB_AccountSpec_List_free(al);
return NULL;
}
as=AB_AccountSpec_List_First(al);
assert(as);
AB_AccountSpec_List_Del(as);
AB_AccountSpec_List_free(al);
return as;
}
/* ========================================================================================================================
* pickAccountSpecForArgs
* ========================================================================================================================
*/
AB_ACCOUNT_SPEC *pickAccountSpecForArgs(const AB_ACCOUNT_SPEC_LIST *accountSpecList, GWEN_DB_NODE *db)
{
uint32_t uaid;
AB_ACCOUNT_SPEC *accountSpec=NULL;
assert(accountSpecList);
assert(db);
uaid=(uint32_t) GWEN_DB_GetIntValue(db, "uniqueAccountId", 0, 0);
if (uaid>0) {
accountSpec=AB_AccountSpec_List_GetByUniqueId(accountSpecList, uaid);
if (accountSpec==NULL) {
DBG_ERROR(0, "ERROR: No account spec with unique id %" PRIu32, uaid);
return NULL;
}
}
else {
const char *backendName;
const char *country;
const char *bankId;
const char *accountId;
const char *subAccountId;
const char *iban;
const char *s;
AB_ACCOUNT_TYPE aType=AB_AccountType_Unknown;
backendName=GWEN_DB_GetCharValue(db, "backendName", 0, "*");
country=GWEN_DB_GetCharValue(db, "country", 0, "*");
bankId=GWEN_DB_GetCharValue(db, "bankId", 0, "*");
accountId=GWEN_DB_GetCharValue(db, "accountId", 0, "*");
subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, "*");
iban=GWEN_DB_GetCharValue(db, "iban", 0, "*");
s=GWEN_DB_GetCharValue(db, "accountType", 0, NULL);
if (s && *s)
aType=AB_AccountType_fromChar(s);
if (aType==AB_AccountType_Invalid) {
DBG_ERROR(0, "Invalid account type (%s)", s);
return NULL;
}
accountSpec=AB_AccountSpec_List_FindFirst(accountSpecList,
backendName,
country,
bankId,
accountId,
subAccountId,
iban,
"*", /* currency */
aType);
if (accountSpec==NULL) {
DBG_ERROR(0, "ERROR: No matching account spec found");
return NULL;
}
if (AB_AccountSpec_List_FindNext(accountSpec,
backendName,
country,
bankId,
accountId,
subAccountId,
iban,
"*", /* currency */
aType)) {
DBG_ERROR(0, "ERROR: Ambiguous account specification");
return NULL;
}
}
return accountSpec;
}
/* ========================================================================================================================
* pickAccountSpecForTransaction
* ========================================================================================================================
*/
AB_ACCOUNT_SPEC *pickAccountSpecForTransaction(const AB_ACCOUNT_SPEC_LIST *accountSpecList, const AB_TRANSACTION *t)
{
uint32_t uaid;
AB_ACCOUNT_SPEC *accountSpec=NULL;
assert(accountSpecList);
assert(t);
uaid=AB_Transaction_GetUniqueAccountId(t);
if (uaid>0) {
accountSpec=AB_AccountSpec_List_GetByUniqueId(accountSpecList, uaid);
if (accountSpec==NULL) {
DBG_ERROR(0, "ERROR: No account spec with unique id %" PRIu32, uaid);
return NULL;
}
}
else {
const char *country;
const char *bankCode;
const char *accountNumber;
const char *accountSuffix;
const char *iban;
country=AB_Transaction_GetLocalCountry(t);
bankCode=AB_Transaction_GetLocalBankCode(t);
accountNumber=AB_Transaction_GetLocalAccountNumber(t);
accountSuffix=AB_Transaction_GetLocalSuffix(t);
iban=AB_Transaction_GetLocalIban(t);
accountSpec=AB_AccountSpec_List_FindFirst(accountSpecList,
"*", /* backend */
(country && *country)?country:"*",
(bankCode && *bankCode)?bankCode:"*",
(accountNumber && *accountNumber)?accountNumber:"*",
(accountSuffix && *accountSuffix)?accountSuffix:"*",
(iban && *iban)?iban:"*",
"*", /* currency */
AB_AccountType_Unknown);
if (accountSpec==NULL) {
DBG_ERROR(0, "ERROR: No matching account spec found");
return NULL;
}
if (AB_AccountSpec_List_FindNext(accountSpec,
"*", /* backend */
(country && *country)?country:"*",
(bankCode && *bankCode)?bankCode:"*",
(accountNumber && *accountNumber)?accountNumber:"*",
(accountSuffix && *accountSuffix)?accountSuffix:"*",
(iban && *iban)?iban:"*",
"*", /* currency */
AB_AccountType_Unknown)) {
DBG_ERROR(0, "ERROR: Ambiguous account specification");
return NULL;
}
}
return accountSpec;
}
/* ========================================================================================================================
* checkTransactionIbans
* ========================================================================================================================
*/
int checkTransactionIbans(const AB_TRANSACTION *t)
{
const char *rIBAN;
const char *lIBAN;
#if 0
const char *lBIC;
const char *rBIC;
#endif
int rv;
assert(t);
/* some checks */
rIBAN=AB_Transaction_GetRemoteIban(t);
lIBAN=AB_Transaction_GetLocalIban(t);
#if 0
rBIC=AB_Transaction_GetRemoteBic(t);
if (!rIBAN || !(*rIBAN)) {
fprintf(stderr, "Missing remote IBAN\n");
return 1;
}
#endif
rv=AB_Banking_CheckIban(rIBAN);
if (rv != 0) {
fprintf(stderr, "Invalid remote IBAN (%s)\n", rIBAN);
return 3;
}
#if 0
lBIC=AB_Transaction_GetLocalBic(t);
if (!lBIC || !(*lBIC)) {
fprintf(stderr, "Missing local BIC\n");
return 1;
}
#endif
if (!lIBAN || !(*lIBAN)) {
fprintf(stderr, "Missing local IBAN\n");
return 1;
}
rv=AB_Banking_CheckIban(lIBAN);
if (rv != 0) {
fprintf(stderr, "Invalid local IBAN (%s)\n", lIBAN);
return 3;
}
#if 0
if (strncmp(lIBAN, rIBAN, 2) && (!rBIC || !*rBIC)) {
DBG_ERROR(0, "Remote BIC id required for international transaction");
return 1;
}
#endif
return 0;
}
/* ========================================================================================================================
* checkTransactionLimits
* ========================================================================================================================
*/
int checkTransactionLimits(const AB_TRANSACTION *t, const AB_TRANSACTION_LIMITS *lim, uint32_t flags)
{
if (lim==NULL) {
fprintf(stderr, "ERROR: Job not supported with this account.\n");
return 3;
}
if (flags & AQBANKING_TOOL_LIMITFLAGS_PURPOSE)
if (AB_Banking_CheckTransactionAgainstLimits_Purpose(t, lim)) {
fprintf(stderr, "ERROR: Purpose violates job limits.\n");
return 3;
}
if (flags & AQBANKING_TOOL_LIMITFLAGS_NAMES)
if (AB_Banking_CheckTransactionAgainstLimits_Names(t, lim)) {
fprintf(stderr, "ERROR: Names violate job limits.\n");
return 3;
}
if (flags & AQBANKING_TOOL_LIMITFLAGS_SEQUENCE)
if (AB_Banking_CheckTransactionAgainstLimits_Sequence(t, lim)) {
fprintf(stderr, "ERROR: Sequence violate job limits.\n");
return 3;
}
if (flags & AQBANKING_TOOL_LIMITFLAGS_DATE)
if (AB_Banking_CheckTransactionAgainstLimits_Date(t, lim)) {
fprintf(stderr, "ERROR: Date violate job limits.\n");
return 3;
}
if (flags & AQBANKING_TOOL_LIMITFLAGS_SEPA)
if (AB_Banking_CheckTransactionForSepaConformity(t, 0)) {
fprintf(stderr, "ERROR: Transaction fails SEPA conformity check.\n");
return 3;
}
return 0;
}
/* ========================================================================================================================
* addTransactionToContextFile
* ========================================================================================================================
*/
int addTransactionToContextFile(const AB_TRANSACTION *t, const char *ctxFile)
{
int rv;
AB_IMEXPORTER_CONTEXT *ctx=NULL;
/* load ctx file */
rv=readContext(ctxFile, &ctx, 0);
if (rv<0) {
DBG_ERROR(0, "Error reading context (%d)", rv);
return 4;
}
/* add transaction to */
AB_ImExporterContext_AddTransaction(ctx, AB_Transaction_dup(t));
/* write result back */
rv=writeContext(ctxFile, ctx);
AB_ImExporterContext_free(ctx);
if (rv<0) {
DBG_ERROR(0, "Error writing context file (%d)", rv);
return 4;
}
return 0;
}
/* ========================================================================================================================
* execBankingJobs
* ========================================================================================================================
*/
int execBankingJobs(AB_BANKING *ab, AB_TRANSACTION_LIST2 *tList, const char *ctxFile)
{
int rv;
int rvExec=0;
AB_IMEXPORTER_CONTEXT *ctx=NULL;
/* execute job */
ctx=AB_ImExporterContext_new();
rv=AB_Banking_SendCommands(ab, tList, ctx);
if (rv) {
fprintf(stderr, "Error on executeQueue (%d)\n", rv);
rvExec=3;
}
/* write result */
rv=writeContext(ctxFile, ctx);
AB_ImExporterContext_free(ctx);
if (rv<0) {
DBG_ERROR(0, "Error writing context file (%d)", rv);
if (rvExec==0)
return 4;
}
return rvExec;
}
/* ========================================================================================================================
* execSingleBankingJob
* ========================================================================================================================
*/
int execSingleBankingJob(AB_BANKING *ab, AB_TRANSACTION *t, const char *ctxFile)
{
AB_TRANSACTION_LIST2 *jobList;
int rv;
jobList=AB_Transaction_List2_new();
AB_Transaction_List2_PushBack(jobList, t);
rv=execBankingJobs(ab, jobList, ctxFile);
AB_Transaction_List2_free(jobList);
return rv;
}
/* ========================================================================================================================
* writeJobsAsContextFile
* ========================================================================================================================
*/
int writeJobsAsContextFile(AB_TRANSACTION_LIST2 *tList, const char *ctxFile)
{
int rv;
AB_TRANSACTION_LIST2_ITERATOR *it;
AB_IMEXPORTER_CONTEXT *ctx=NULL;
ctx=AB_ImExporterContext_new();
it=AB_Transaction_List2_First(tList);
if (it) {
AB_TRANSACTION *t;
t=AB_Transaction_List2Iterator_Data(it);
while (t) {
AB_ImExporterContext_AddTransaction(ctx, AB_Transaction_dup(t));
t=AB_Transaction_List2Iterator_Next(it);
}
AB_Transaction_List2Iterator_free(it);
}
/* write result */
rv=writeContext(ctxFile, ctx);
AB_ImExporterContext_free(ctx);
if (rv<0) {
DBG_ERROR(0, "Error writing context file (%d)", rv);
return 4;
}
return 0;
}
/* ========================================================================================================================
* createAndCheckRequest
* ========================================================================================================================
*/
AB_TRANSACTION *createAndCheckRequest(AB_BANKING *ab, AB_ACCOUNT_SPEC *as, AB_TRANSACTION_COMMAND cmd)
{
if (AB_AccountSpec_GetTransactionLimitsForCommand(as, cmd)) {
AB_TRANSACTION *j;
j=AB_Transaction_new();
AB_Transaction_SetUniqueAccountId(j, AB_AccountSpec_GetUniqueId(as));
AB_Transaction_SetCommand(j, cmd);
return j;
}
else {
return NULL;
}
}
/* ========================================================================================================================
* createAndAddRequest
* ========================================================================================================================
*/
int createAndAddRequest(AB_BANKING *ab,
AB_TRANSACTION_LIST2 *tList,
AB_ACCOUNT_SPEC *as,
AB_TRANSACTION_COMMAND cmd,
const GWEN_DATE *fromDate,
const GWEN_DATE *toDate,
int ignoreUnsupported,
AB_TRANSACTION_ACK ackMethod,
uint32_t number)
{
uint32_t aid;
AB_TRANSACTION *j;
assert(as);
aid=AB_AccountSpec_GetUniqueId(as);
j=createAndCheckRequest(ab, as, cmd);
if (j) {
if (cmd==AB_Transaction_CommandGetTransactions) {
if (fromDate)
AB_Transaction_SetFirstDate(j, fromDate);
if (toDate)
AB_Transaction_SetLastDate(j, toDate);
}
else if (cmd==AB_Transaction_CommandGetEStatements) {
if (fromDate)
AB_Transaction_SetFirstDate(j, fromDate);
if (number>0)
AB_Transaction_SetEstatementNumber(j, number);
}
AB_Transaction_SetAcknowledge(j, ackMethod);
AB_Transaction_List2_PushBack(tList, j);
return 0;
}
else {
if (ignoreUnsupported) {
fprintf(stderr, "Warning: Ignoring request \"%s\" for %lu, not supported.\n",
AB_Transaction_Command_toString(cmd),
(unsigned long int) aid);
return 0;
}
else {
fprintf(stderr, "Error: Request \"%s\" for %lu not supported.\n",
AB_Transaction_Command_toString(cmd),
(unsigned long int) aid);
return GWEN_ERROR_GENERIC;
}
}
}
/* ========================================================================================================================
* createAndAddRequests
* ========================================================================================================================
*/
int createAndAddRequests(AB_BANKING *ab,
AB_TRANSACTION_LIST2 *tList,
AB_ACCOUNT_SPEC *as,
const GWEN_DATE *fromDate,
const GWEN_DATE *toDate,
uint32_t requestFlags,
uint32_t number)
{
int ignoreUnsupported=requestFlags & AQBANKING_TOOL_REQUEST_IGNORE_UNSUP;
int ackMethod=AB_Transaction_AckNever;
int rv;
assert(ab);
assert(tList);
assert(as);
if (requestFlags & AQBANKING_TOOL_REQUEST_ACKNOWLEDGE) {
ackMethod=AB_Transaction_AckJobsWithAckCode;
}
/* create and add requests */
if (requestFlags & AQBANKING_TOOL_REQUEST_BALANCE) {
rv=createAndAddRequest(ab, tList, as, AB_Transaction_CommandGetBalance, fromDate, toDate, ignoreUnsupported, ackMethod,
number);
if (rv)
return rv;
}
if (requestFlags & AQBANKING_TOOL_REQUEST_STATEMENTS) {
rv=createAndAddRequest(ab, tList, as, AB_Transaction_CommandGetTransactions, fromDate, toDate, ignoreUnsupported,
ackMethod, number);
if (rv)
return rv;
}
if (requestFlags & AQBANKING_TOOL_REQUEST_SEPASTO) {
rv=createAndAddRequest(ab, tList, as, AB_Transaction_CommandSepaGetStandingOrders, fromDate, toDate, ignoreUnsupported,
ackMethod, number);
if (rv)
return rv;
}
if (requestFlags & AQBANKING_TOOL_REQUEST_ESTATEMENTS) {
rv=createAndAddRequest(ab, tList, as, AB_Transaction_CommandGetEStatements, fromDate, toDate, ignoreUnsupported,
ackMethod, number);
if (rv)
return rv;
}
if (requestFlags & AQBANKING_TOOL_REQUEST_DEPOT) {
rv=createAndAddRequest(ab, tList, as, AB_Transaction_CommandGetDepot, fromDate, toDate, ignoreUnsupported, ackMethod,
number);
if (rv)
return rv;
}
return 0;
}
/* ========================================================================================================================
* addTransactionToBufferByTemplate
* ========================================================================================================================
*/
int addTransactionToBufferByTemplate(const AB_TRANSACTION *t, const char *tmplString, GWEN_BUFFER *dbuf)
{
GWEN_DB_NODE *dbTransaction;
const AB_VALUE *v;
const GWEN_DATE *dt;
const char *s;
int rv;
dbTransaction=GWEN_DB_Group_new("transaction");
AB_Transaction_toDb(t, dbTransaction);
/* translate value */
v=AB_Transaction_GetValue(t);
if (v) {
AB_Value_toHumanReadableString(v, dbuf, 2, 0);
GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "valueAsString", GWEN_Buffer_GetStart(dbuf));
GWEN_Buffer_Reset(dbuf);
}
/* translate date */
dt=AB_Transaction_GetDate(t);
if (dt) {
rv=GWEN_Date_toStringWithTemplate(dt, I18N("DD.MM.YYYY"), dbuf);
if (rv>=0) {
GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "dateAsString", GWEN_Buffer_GetStart(dbuf));
}
GWEN_Buffer_Reset(dbuf);
}
/* translate valuta date */
dt=AB_Transaction_GetValutaDate(t);
if (dt) {
rv=GWEN_Date_toStringWithTemplate(dt, I18N("DD.MM.YYYY"), dbuf);
if (rv>=0) {
GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "valutaDateAsString", GWEN_Buffer_GetStart(dbuf));
}
GWEN_Buffer_Reset(dbuf);
}
/* translate date or valuta date */
dt=AB_Transaction_GetDate(t);
if (dt==NULL)
dt=AB_Transaction_GetValutaDate(t);
if (dt) {
rv=GWEN_Date_toStringWithTemplate(dt, I18N("DD.MM.YYYY"), dbuf);
if (rv>=0) {
GWEN_DB_SetCharValue(dbTransaction, GWEN_DB_FLAGS_OVERWRITE_VARS, "dateOrValutaDateAsString",
GWEN_Buffer_GetStart(dbuf));
}
GWEN_Buffer_Reset(dbuf);
}
/* translate purpose into "purposeLine" entries */
s=AB_Transaction_GetPurpose(t);
if (s && *s) {
GWEN_STRINGLIST *stringList;
GWEN_DB_DeleteVar(dbTransaction, "purposeLine");
stringList=GWEN_StringList_fromString(s, "\n", 0);
if (stringList) {
GWEN_STRINGLISTENTRY *sEntry;
sEntry=GWEN_StringList_FirstEntry(stringList);
while (sEntry) {
const char *entryString;
entryString=GWEN_StringListEntry_Data(sEntry);
if (entryString && *entryString) {
GWEN_DB_SetCharValue(dbTransaction, 0, "purposeLine", entryString);
}
sEntry=GWEN_StringListEntry_Next(sEntry);
}
}
}
rv=GWEN_Text_ReplaceVars(tmplString, dbuf, _replaceVarsCb, dbTransaction);
if (rv<0) {
DBG_ERROR(0, "Error on GWEN_DB_ReplaceVars(): %d", rv);
GWEN_DB_Group_free(dbTransaction);
return rv;
}
GWEN_DB_Group_free(dbTransaction);
return 0;
}
int GWENHYWFAR_CB _replaceVarsCb(void *cbPtr, const char *name, int index, int maxLen, GWEN_BUFFER *dstBuf)
{
GWEN_DB_NODE *db;
db=(GWEN_DB_NODE *) cbPtr;
if (strcasecmp(name, "purposeInOneLine")==0) {
const char *s;
s=GWEN_DB_GetCharValue(db, "purpose", 0, NULL);
if (!(s && *s))
return GWEN_ERROR_NO_DATA;
else {
char *sCopy;
sCopy=strdup(s);
assert(sCopy);
if (sCopy==NULL)
return GWEN_ERROR_MEMORY_FULL;
else {
char *p;
/* replace control characters */
p=sCopy;
while (*p) {
if (iscntrl(*p))
*p=' ';
p++;
} /* while */
GWEN_Buffer_AppendString(dstBuf, sCopy);
free(sCopy);
return 0;
}
}
}
return GWEN_DB_WriteVarValueToBuffer(db, name, index, dstBuf);
}
aqbanking-6.9.1/src/tools/aqbanking-cli/listbal.c 0000644 0001750 0001750 00000027004 15113653730 016637 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
#include
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
int listBal(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const char *ctxFile;
AB_IMEXPORTER_CONTEXT *ctx=0;
AB_IMEXPORTER_ACCOUNTINFO *iea=0;
uint32_t aid;
const char *bankId;
const char *accountId;
const char *subAccountId;
const char *iban;
const char *tmplString;
const char *s;
AB_BALANCE_TYPE bt=AB_Balance_TypeBooked;
/* parse command line arguments */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
/* error in command line */
return 1;
}
/* read command line arguments */
aid=(uint32_t)GWEN_DB_GetIntValue(db, "uniqueAccountId", 0, 0);
bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0);
accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0);
subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, 0);
iban=GWEN_DB_GetCharValue(db, "iban", 0, 0);
tmplString=GWEN_DB_GetCharValue(db, "template", 0,
"$(dateAsString)\t"
"$(valueAsString)\t"
"$(ibanOrAccountNumber)");
/* determine balance type */
s=GWEN_DB_GetCharValue(db, "balanceType", 0, "booked");
if (s && *s) {
AB_BALANCE_TYPE tempBalanceType;
tempBalanceType=AB_Balance_Type_fromString(s);
if (tempBalanceType==AB_Balance_TypeUnknown) {
DBG_ERROR(0, "Invalid balance type given (%s)", s);
return 1;
}
bt=tempBalanceType;
}
/* init AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* load ctx file */
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
rv=readContext(ctxFile, &ctx, 1);
if (rv<0) {
DBG_ERROR(0, "Error reading context (%d)", rv);
AB_ImExporterContext_free(ctx);
return 4;
}
/* copy context, but only keep wanted accounts and transactions */
iea=AB_ImExporterContext_GetFirstAccountInfo(ctx);
while (iea) {
if (AB_ImExporterAccountInfo_Matches(iea,
aid, /* unique account id */
"*",
bankId,
accountId,
subAccountId,
iban,
"*", /* currency */
AB_AccountType_Unknown)) {
AB_BALANCE *bal;
GWEN_DB_NODE *dbAccount;
const char *s;
dbAccount=GWEN_DB_Group_new("dbAccount");
s=AB_ImExporterAccountInfo_GetBankCode(iea);
if (s && *s)
GWEN_DB_SetCharValue(dbAccount, GWEN_DB_FLAGS_OVERWRITE_VARS, "bankCode", s);
s=AB_ImExporterAccountInfo_GetAccountNumber(iea);
if (s && *s)
GWEN_DB_SetCharValue(dbAccount, GWEN_DB_FLAGS_OVERWRITE_VARS, "accountNumber", s);
s=AB_ImExporterAccountInfo_GetBic(iea);
if (s && *s)
GWEN_DB_SetCharValue(dbAccount, GWEN_DB_FLAGS_OVERWRITE_VARS, "bic", s);
s=AB_ImExporterAccountInfo_GetIban(iea);
if (s && *s)
GWEN_DB_SetCharValue(dbAccount, GWEN_DB_FLAGS_OVERWRITE_VARS, "iban", s);
s=AB_ImExporterAccountInfo_GetIban(iea);
if (!(s && *s))
s=AB_ImExporterAccountInfo_GetAccountNumber(iea);
if (s && *s)
GWEN_DB_SetCharValue(dbAccount, GWEN_DB_FLAGS_OVERWRITE_VARS, "ibanOrAccountNumber", s);
bal=AB_Balance_List_GetLatestByType(AB_ImExporterAccountInfo_GetBalanceList(iea), bt);
if (bal) {
GWEN_DB_NODE *dbElement;
const AB_VALUE *v;
const GWEN_DATE *dt;
GWEN_BUFFER *dbuf;
dbElement=GWEN_DB_Group_dup(dbAccount);
AB_Balance_toDb(bal, dbElement);
/* translate value */
dbuf=GWEN_Buffer_new(0, 256, 0, 1);
v=AB_Balance_GetValue(bal);
if (v) {
AB_Value_toHumanReadableString(v, dbuf, 2, 0);
GWEN_DB_SetCharValue(dbElement, GWEN_DB_FLAGS_OVERWRITE_VARS, "valueAsString", GWEN_Buffer_GetStart(dbuf));
GWEN_Buffer_Reset(dbuf);
}
/* translate date */
dt=AB_Balance_GetDate(bal);
if (dt) {
rv=GWEN_Date_toStringWithTemplate(dt, I18N("DD.MM.YYYY"), dbuf);
if (rv>=0) {
GWEN_DB_SetCharValue(dbElement, GWEN_DB_FLAGS_OVERWRITE_VARS, "dateAsString", GWEN_Buffer_GetStart(dbuf));
}
GWEN_Buffer_Reset(dbuf);
}
GWEN_DB_ReplaceVars(dbElement, tmplString, dbuf);
fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(dbuf));
GWEN_Buffer_free(dbuf);
GWEN_DB_Group_free(dbElement);
} /* if bal */
GWEN_DB_Group_free(dbAccount);
} /* if account matches */
iea=AB_ImExporterAccountInfo_List_Next(iea);
} /* while */
AB_ImExporterContext_free(ctx);
/* deinit */
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
/* parse command line */
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"Specify the bank code", /* short description */
"Specify the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"Specify the account number", /* short description */
"Specify the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"balanceType", /* name */
0, /* minnum */
1, /* maxnum */
"bt", /* short option */
"balanceType", /* long option */
"Specify the balance type", /* short description */
"Specify the balance type (e.g. noted, booked, temporary)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"template", /* name */
0, /* minnum */
1, /* maxnum */
"T", /* short option */
"template", /* long option */
"Specify the template for the balance list output", /* short description */
"Specify the template for the balance list output" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
GWEN_BUFFER *ubuf;
ubuf=GWEN_Buffer_new(0, 1024, 0, 1);
GWEN_Buffer_AppendString(ubuf, "The template string given to \"-T\" may contain variables to specify the output.\n");
GWEN_Buffer_AppendString(ubuf, "Default is: \"$(dateAsString)\\t$(valueAsString)\\t$(iban)");
GWEN_Buffer_AppendString(ubuf, "Possible variables are:\n");
GWEN_Buffer_AppendString(ubuf, " $(dateAsString) : Date of the balance in format ");
GWEN_Buffer_AppendString(ubuf, I18N("DD.MM.YYYY"));
GWEN_Buffer_AppendString(ubuf, " \n");
GWEN_Buffer_AppendString(ubuf, " $(valueAsString) : Amount of the balance\n");
GWEN_Buffer_AppendString(ubuf, " $(iban) : IBAN of the account this balance comes from\n");
GWEN_Buffer_AppendString(ubuf, " $(bic) : Account number of the account this balance comes from\n");
GWEN_Buffer_AppendString(ubuf, " $(bankcode) : Bank code (Bankleitzahl) of the account this balance comes from\n");
GWEN_Buffer_AppendString(ubuf, " $(accountnumber) : Account number of the account this balance comes from\n");
fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf));
GWEN_Buffer_free(ubuf);
return NULL;
}
return db;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/getdoc.c 0000644 0001750 0001750 00000025151 15113653730 016453 0000000 0000000 /***************************************************************************
begin : Fri Mar 20 2021
copyright : (C) 2021 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
#include
#include
#define GETDOC_FLAGS_MULTI 0x0001
static AB_DOCUMENT_LIST2 *_getMatchingDocuments(AB_IMEXPORTER_CONTEXT *ctx, const char *wantedDocId);
static int _ensureDocData(AB_DOCUMENT *doc);
static int _exportDocuments(const AB_DOCUMENT_LIST2 *docList, const char *dest, uint32_t flags);
static int _writeDoc(const AB_DOCUMENT *doc, const char *dest, uint32_t flags);
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
int getDoc(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const char *ctxFile;
uint32_t flags=0;
AB_IMEXPORTER_CONTEXT *ctx=NULL;
AB_DOCUMENT_LIST2 *docList2;
const char *docId;
const char *dest;
/* parse command line arguments */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
/* error in command line */
return 1;
}
/* read command line arguments */
docId=GWEN_DB_GetCharValue(db, "docId", 0, 0);
dest=GWEN_DB_GetCharValue(db, "destination", 0, 0);
flags|=(GWEN_DB_GetIntValue(db, "multi", 0, 0)>0)?GETDOC_FLAGS_MULTI:0;
/* init AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* load ctx file */
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
rv=readContext(ctxFile, &ctx, 1);
if (rv<0) {
DBG_ERROR(0, "Error reading context (%d)", rv);
AB_ImExporterContext_free(ctx);
return 3;
}
docList2=_getMatchingDocuments(ctx, docId);
if (docList2==NULL) {
DBG_ERROR(NULL, "No documents to export");
AB_Document_List2_free(docList2);
AB_ImExporterContext_free(ctx);
return 4;
}
if (AB_Document_List2_GetSize(docList2)>1 && !(flags & GETDOC_FLAGS_MULTI)) {
DBG_ERROR(NULL, "Ambigous arguments: Multiple matching documents but no -m flag given");
AB_Document_List2_free(docList2);
return 4;
}
rv=_exportDocuments(docList2, dest, flags);
if (rv<0) {
DBG_INFO(NULL, "Error exporting documents");
AB_Document_List2_free(docList2);
AB_ImExporterContext_free(ctx);
return 4;
}
AB_Document_List2_free(docList2);
AB_ImExporterContext_free(ctx);
/* deinit */
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
AB_DOCUMENT_LIST2 *_getMatchingDocuments(AB_IMEXPORTER_CONTEXT *ctx, const char *wantedDocId)
{
AB_DOCUMENT_LIST2 *docList2;
AB_IMEXPORTER_ACCOUNTINFO *iea;
docList2=AB_Document_List2_new();
/* copy context, but only keep wanted accounts and transactions */
iea=AB_ImExporterContext_GetFirstAccountInfo(ctx);
while (iea) {
AB_DOCUMENT_LIST *docList;
docList=AB_ImExporterAccountInfo_GetEStatementList(iea);
if (docList) {
AB_DOCUMENT *doc;
doc=AB_Document_List_First(docList);
while (doc) {
if (wantedDocId) {
const char *docId;
docId=AB_Document_GetId(doc);
if (docId && *docId) {
if (GWEN_Text_ComparePattern(docId, wantedDocId, 0)!=-1)
AB_Document_List2_PushBack(docList2, doc);
}
}
else
AB_Document_List2_PushBack(docList2, doc);
doc=AB_Document_List_Next(doc);
}
}
iea=AB_ImExporterAccountInfo_List_Next(iea);
} /* while */
if (AB_Document_List2_GetSize(docList2)==0) {
AB_Document_List2_free(docList2);
return NULL;
}
return docList2;
}
int _exportDocuments(const AB_DOCUMENT_LIST2 *docList, const char *dest, uint32_t flags)
{
AB_DOCUMENT_LIST2_ITERATOR *it;
it=AB_Document_List2_First(docList);
if (it) {
AB_DOCUMENT *doc;
doc=AB_Document_List2Iterator_Data(it);
while (doc) {
const char *docId;
int rv;
docId=AB_Document_GetId(doc);
rv=_ensureDocData(doc);
if (rv<0) {
DBG_INFO(NULL, "Error ensuring data for document \"%s\"", docId?docId:"");
return rv;
}
rv=_writeDoc(doc, dest, flags);
if (rv<0) {
DBG_INFO(NULL, "here (%d)", rv);
return rv;
}
doc=AB_Document_List2Iterator_Next(it);
} /* while */
AB_Document_List2Iterator_free(it);
}
return 0;
}
int _writeDoc(const AB_DOCUMENT *doc, const char *dest, uint32_t flags)
{
const char *docId;
int rv;
docId=AB_Document_GetId(doc);
if (flags & GETDOC_FLAGS_MULTI) {
GWEN_BUFFER *pathBuffer;
/* dest is a folder */
if (!(docId && *docId)) {
DBG_ERROR(NULL, "No id in document, SNH!");
return GWEN_ERROR_BAD_DATA;
}
pathBuffer=GWEN_Buffer_new(0, 256, 0, 1);
GWEN_Buffer_AppendString(pathBuffer, dest);
GWEN_Buffer_AppendString(pathBuffer, GWEN_DIR_SEPARATOR_S);
GWEN_Buffer_AppendString(pathBuffer, docId);
GWEN_Buffer_AppendString(pathBuffer, ".pdf");
rv=GWEN_SyncIo_Helper_WriteFile(GWEN_Buffer_GetStart(pathBuffer),
AB_Document_GetDataPtr(doc),
AB_Document_GetDataLen(doc));
if (rv<0) {
DBG_INFO(NULL, "Error writing data for document \"%s\" to \"%s\"",
docId?docId:"",
GWEN_Buffer_GetStart(pathBuffer));
GWEN_Buffer_free(pathBuffer);
return rv;
}
return 0;
}
else {
rv=GWEN_SyncIo_Helper_WriteFile(dest,
AB_Document_GetDataPtr(doc),
AB_Document_GetDataLen(doc));
if (rv<0) {
DBG_INFO(NULL, "Error writing data for document \"%s\" to \"%s\"",
docId?docId:"",
dest);
return rv;
}
return 0;
}
}
int _ensureDocData(AB_DOCUMENT *doc)
{
const uint8_t *ptrData;
uint32_t lenData;
ptrData=AB_Document_GetDataPtr(doc);
lenData=AB_Document_GetDataLen(doc);
if (!(ptrData && lenData)) {
const char *filePath;
filePath=AB_Document_GetFilePath(doc);
if (filePath && *filePath) {
GWEN_BUFFER *dbuf;
int rv;
dbuf=GWEN_Buffer_new(0, 256, 0, 1);
rv=GWEN_SyncIo_Helper_ReadFile(filePath, dbuf);
if (rv<0) {
DBG_ERROR(NULL, "Could not read source file \"%s\" (%d)", filePath, rv);
GWEN_Buffer_free(dbuf);
return rv;
}
AB_Document_SetData(doc,
(const uint8_t *) GWEN_Buffer_GetStart(dbuf),
GWEN_Buffer_GetUsedBytes(dbuf));
GWEN_Buffer_free(dbuf);
return 0;
}
}
return 0;
}
/* parse command line */
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"docId", /* name */
0, /* minnum */
1, /* maxnum */
"d", /* short option */
"docid", /* long option */
"Specify the document id", /* short description */
"Specify the document id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"destination", /* name */
1, /* minnum */
1, /* maxnum */
"o", /* short option */
"destination", /* long option */
"Specify destination", /* short description */
"Specify destination (folder if -m flag given, specific filename otherwise)" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"multi", /* name */
0, /* minnum */
1, /* maxnum */
"m", /* short option */
"multi", /* long option */
"Export multiple documents", /* short description */
"Export multiple documents" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
GWEN_BUFFER *ubuf;
ubuf=GWEN_Buffer_new(0, 1024, 0, 1);
GWEN_Buffer_AppendString(ubuf, "\n");
GWEN_Buffer_AppendString(ubuf, "\n");
GWEN_Buffer_AppendString(ubuf, "There are two ways to use this tool:\n");
GWEN_Buffer_AppendString(ubuf, "1) Export a specific document\n");
GWEN_Buffer_AppendString(ubuf, " aqbanking-cli getdoc -d DOCID -o OUTFILE.PDF\n");
GWEN_Buffer_AppendString(ubuf, "2) Export multiple documents:\n");
GWEN_Buffer_AppendString(ubuf, " aqbanking-cli getdoc -m -o OUTFOLDER\n");
GWEN_Buffer_AppendString(ubuf, "In this case for every document in the context file a new\n");
GWEN_Buffer_AppendString(ubuf, "is created in the OUTFOLDER folder, each file has the name of the document\n");
GWEN_Buffer_AppendString(ubuf, "with '.pdf' appended.\n");
fprintf(stdout, "%s\n", GWEN_Buffer_GetStart(ubuf));
GWEN_Buffer_free(ubuf);
return NULL;
}
return db;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/chkiban.c 0000644 0001750 0001750 00000005653 15113653730 016612 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
int chkIban(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
AB_BANKINFO_CHECKRESULT res;
const char *iban;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
1, /* minnum */
1, /* maxnum */
0, /* short option */
"iban", /* long option */
"Specify the IBAN to check", /* short description */
"Specify the IBAN to check" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return 1;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
GWEN_BUFFER *ubuf;
ubuf=GWEN_Buffer_new(0, 1024, 0, 1);
fprintf(stdout,
I18N("This command checks the given combination of account id\n"
"and bank code for validity.\n"
"\n"
"Return codes:\n"
" 1: missing/bad arguments\n"
" 2: error while initializing AqBanking\n"
" 3: given combination is definately invalid\n"
" 5: error while deinitializing AqBanking\n"
"\n"
"Arguments:\n"
"%s\n"),
GWEN_Buffer_GetStart(ubuf));
GWEN_Buffer_free(ubuf);
return 0;
}
iban=GWEN_DB_GetCharValue(db, "iban", 0, 0);
assert(iban);
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
res=AB_Banking_CheckIban(iban);
if (res != 0) {
DBG_ERROR(0,
"IBAN is invalid");
return 3;
}
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/accountcmds.c 0000644 0001750 0001750 00000020722 15113653730 017510 0000000 0000000 /***************************************************************************
begin : Wed Aug 10 2022
copyright : (C) 2022 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
#include
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
static void _dumpAccountSpecList(const AB_ACCOUNT_SPEC_LIST *al);
static void _dumpAccountSpec(const AB_ACCOUNT_SPEC *as);
static void _dumpLimitList(const AB_TRANSACTION_LIMITS_LIST *limitList);
int showAccountCommands(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
AB_ACCOUNT_SPEC_LIST *al=NULL;
int rv;
/* parse command line arguments */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
/* error in command line */
return 1;
}
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
al=getSelectedAccounts(ab, db);
if (al==NULL) {
DBG_ERROR(0, "No matching accounts");
AB_Banking_Fini(ab);
return 2;
}
_dumpAccountSpecList(al);
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
/* parse command line */
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"backendName", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"backend", /* long option */
"Specify the name of the backend for your account", /* short description */
"Specify the name of the backend for your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"country", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"country", /* long option */
"Specify the country for your account (e.g. \"de\")", /* short description */
"Specify the country for your account (e.g. \"de\")" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"Specify the bank code", /* short description */
"Specify the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"Specify the account number", /* short description */
"Specify the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountType", /* name */
0, /* minnum */
1, /* maxnum */
"t", /* short option */
"accounttype", /* long option */
"Specify the type of your account", /* short description */
"Specify the type of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return NULL;
}
return db;
}
void _dumpAccountSpecList(const AB_ACCOUNT_SPEC_LIST *al)
{
AB_ACCOUNT_SPEC *as;
as=AB_AccountSpec_List_First(al);
if (as) {
GWEN_BUFFER *dbuf;
dbuf=GWEN_Buffer_new(0, 256, 0, 1);
while (as) {
_dumpAccountSpec(as);
_dumpLimitList(AB_AccountSpec_GetTransactionLimitsList(as));
fprintf(stdout, "\n");
as=AB_AccountSpec_List_Next(as);
} /* while (as) */
GWEN_Buffer_free(dbuf);
}
}
void _dumpAccountSpec(const AB_ACCOUNT_SPEC *as)
{
const char *sIban;
const char *sBic;
const char *sAccountName;
const char *sAccountNumber;
const char *sBankCode;
const char *sOwnerName;
const char *sBackendName;
sIban=AB_AccountSpec_GetIban(as);
sAccountName=AB_AccountSpec_GetAccountName(as);
sAccountNumber=AB_AccountSpec_GetAccountNumber(as);
sBic=AB_AccountSpec_GetBic(as);
sBankCode=AB_AccountSpec_GetBankCode(as);
sOwnerName=AB_AccountSpec_GetOwnerName(as);
sBackendName=AB_AccountSpec_GetBackendName(as);
fprintf(stdout, "Account %lu: ", (unsigned long int) AB_AccountSpec_GetUniqueId(as));
if (sIban && *sIban)
fprintf(stdout,
"IBAN: %s, BIC: %s, Account Name: %s, Owner Name: %s (%s)\n",
sIban, sBic?sBic:"", sAccountName?sAccountName:"", sOwnerName?sOwnerName:"", sBackendName);
else
fprintf(stdout,
"Account Number: %s, Bank Code: %s, Account Name: %s, Owner Name: %s (%s)\n",
sAccountNumber?sAccountNumber:"",
sBankCode?sBankCode:"",
sAccountName?sAccountName:"",
sOwnerName?sOwnerName:"",
sBackendName);
}
void _dumpLimitList(const AB_TRANSACTION_LIMITS_LIST *limitList)
{
if (limitList) {
const AB_TRANSACTION_LIMITS *lim;
lim=AB_TransactionLimits_List_First(limitList);
if (lim) {
while (lim) {
fprintf(stdout, " %s\n", AB_Transaction_Command_toString(AB_TransactionLimits_GetCommand(lim)));
lim=AB_TransactionLimits_List_Next(lim);
}
return;
}
}
fprintf(stdout, " \n");
}
aqbanking-6.9.1/src/tools/aqbanking-cli/aqebics-tool.c 0000644 0001750 0001750 00000015200 15113653730 017562 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "globals.h"
static int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv);
int main(int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
AB_BANKING *ab;
GWEN_GUI *gui;
int nonInteractive=0;
int acceptValidCerts=0;
const char *pinFile;
const char *cfgDir;
const char *s;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"cfgdir", /* name */
0, /* minnum */
1, /* maxnum */
"D", /* short option */
"cfgdir", /* long option */
I18S("Specify the configuration folder"),
I18S("Specify the configuration folder")
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"nonInteractive", /* name */
0, /* minnum */
1, /* maxnum */
"n", /* short option */
"noninteractive", /* long option */
"Select non-interactive mode",/* short description */
"Select non-interactive mode.\n" /* long description */
"This automatically returns a confirmative answer to any non-critical\n"
"message."
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"acceptValidCerts", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"acceptvalidcerts", /* long option */
"Automatically accept all valid TLS certificate",
"Automatically accept all valid TLS certificate"
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"charset", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"charset", /* long option */
"Specify the output character set", /* short description */
"Specify the output character set" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"pinfile", /* name */
0, /* minnum */
1, /* maxnum */
"P", /* short option */
"pinfile", /* long option */
"Specify the PIN file", /* short description */
"Specify the PIN file" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help",
I18S("Show this help screen. For help on commands, "
"run aqbanking-cli --help."),
I18S("Show this help screen. For help on commands, run aqbanking-cli --help.")
}
};
rv=GWEN_Init();
if (rv) {
fprintf(stderr, "ERROR: Unable to init Gwen.\n");
exit(2);
}
GWEN_Logger_Open(0, "aqebics-tool", 0,
GWEN_LoggerType_Console,
GWEN_LoggerFacility_User);
GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning);
#if 0
rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, LOCALEDIR);
if (rv) {
DBG_ERROR(0, "Could not bind textdomain (%d)", rv);
}
else {
rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8");
if (rv) {
DBG_ERROR(0, "Could not set codeset (%d)", rv);
}
}
#endif
db=GWEN_DB_Group_new("arguments");
rv=AB_App_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return 1;
}
else if (rv>1) {
argc-=rv-1;
argv+=rv-1;
}
else {
/* no command */
argc=0;
}
nonInteractive=GWEN_DB_GetIntValue(db, "nonInteractive", 0, 0);
acceptValidCerts=GWEN_DB_GetIntValue(db, "acceptValidCerts", 0, 0);
cfgDir=GWEN_DB_GetCharValue(db, "cfgdir", 0, 0);
gui=GWEN_Gui_CGui_new();
s=GWEN_DB_GetCharValue(db, "charset", 0, NULL);
if (s && *s)
GWEN_Gui_SetCharSet(gui, s);
if (nonInteractive)
GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE);
else
GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_NONINTERACTIVE);
if (acceptValidCerts)
GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS);
else
GWEN_Gui_SubFlags(gui, GWEN_GUI_FLAGS_ACCEPTVALIDCERTS);
pinFile=GWEN_DB_GetCharValue(db, "pinFile", 0, NULL);
if (pinFile) {
GWEN_DB_NODE *dbPins;
dbPins=GWEN_DB_Group_new("pins");
if (GWEN_DB_ReadFile(dbPins, pinFile,
GWEN_DB_FLAGS_DEFAULT |
GWEN_PATH_FLAGS_CREATE_GROUP)) {
fprintf(stderr, "Error reading pinfile \"%s\"\n", pinFile);
GWEN_DB_Group_free(dbPins);
GWEN_DB_Group_free(db);
return 2;
}
GWEN_Gui_SetPasswordDb(gui, dbPins, 1);
}
GWEN_Gui_SetGui(gui);
ab=AB_Banking_new("aqbanking-cli", cfgDir, 0);
AB_Gui_Extend(gui, ab);
rv=doControl(ab, db, argc, argv);
GWEN_DB_Group_free(db);
return rv;
}
int doControl(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
int rv;
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
rv=AB_Banking_ProviderControl(ab, "aqebics", argc, argv);
if (rv!=0) {
DBG_ERROR(0, "Error calling control function (%d)", rv);
AB_Banking_Fini(ab);
return 4;
}
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/sepatransfer.c 0000644 0001750 0001750 00000031473 15113653730 017707 0000000 0000000 /***************************************************************************
begin : Tue May 03 2005
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
/* tool includes */
#include "globals.h"
/* aqbanking includes */
#include
/* gwenhywfar includes */
#include
/* forward declarations */
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
int sepaTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
AB_ACCOUNT_SPEC *as;
int rv;
int rvExec=0;
const char *ctxFile;
AB_TRANSACTION *t;
int noCheck;
/* parse command line arguments */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
/* error in command line */
return 1;
}
/* read arguments */
noCheck=GWEN_DB_GetIntValue(db, "noCheck", 0, 0);
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
/* init AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* get account to work with */
as=getSingleSelectedAccount(ab, db);
if (as==NULL) {
AB_Banking_Fini(ab);
return 2;
}
/* create transaction from arguments */
t=mkSepaTransfer(db, AB_Transaction_CommandSepaTransfer);
if (t==NULL) {
DBG_ERROR(0, "Could not create SEPA transaction from arguments");
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return 2;
}
AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as));
/* check for date; if given create a dated transfer */
if (AB_Transaction_GetDate(t))
AB_Transaction_SetCommand(t, AB_Transaction_CommandCreateDatedTransfer);
/* set local account info from selected AB_ACCOUNT_SPEC */
AB_Banking_FillTransactionFromAccountSpec(t, as);
/* some checks */
rv=checkTransactionIbans(t);
if (rv!=0) {
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return rv;
}
/* probably check against transaction limits */
if (!noCheck) {
rv=checkTransactionLimits(t,
AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_GetCommand(t)),
AQBANKING_TOOL_LIMITFLAGS_PURPOSE |
AQBANKING_TOOL_LIMITFLAGS_NAMES |
AQBANKING_TOOL_LIMITFLAGS_DATE |
AQBANKING_TOOL_LIMITFLAGS_SEPA);
if (rv!=0) {
AB_Transaction_free(t);
AB_AccountSpec_free(as);
AB_Banking_Fini(ab);
return rv;
}
}
AB_AccountSpec_free(as);
/* execute job */
rv=execSingleBankingJob(ab, t, ctxFile);
if (rv) {
fprintf(stderr, "Error on executeQueue (%d)\n", rv);
rvExec=rv;
}
/* cleanup */
AB_Transaction_free(t);
/* that's it */
rv=AB_Banking_Fini(ab);
if (rv<0) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
if (rvExec==0)
rvExec=5;
}
return rvExec;
}
/* parse command line */
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"backendName", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"backend", /* long option */
"Specify the name of the backend for your account", /* short description */
"Specify the name of the backend for your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"country", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"country", /* long option */
"Specify the country for your account (e.g. \"de\")", /* short description */
"Specify the country for your account (e.g. \"de\")" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"overwrite the bank code", /* short description */
"overwrite the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"overwrite the account number", /* short description */
"overwrite the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountType", /* name */
0, /* minnum */
1, /* maxnum */
"at", /* short option */
"accounttype", /* long option */
"Specify the account type", /* short description */
"Specify the account type" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteBIC", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"rbic", /* long option */
"Specify the remote SWIFT BIC",/* short description */
"Specify the remote SWIFT BIC" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteIBAN", /* name */
1, /* minnum */
1, /* maxnum */
0, /* short option */
"riban", /* long option */
"Specify the remote IBAN", /* short description */
"Specify the remote IBAN" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"value", /* name */
1, /* minnum */
1, /* maxnum */
"v", /* short option */
"value", /* long option */
"Specify the transfer amount", /* short description */
"Specify the transfer amount" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"name", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"name", /* long option */
"Specify your name", /* short description */
"Specify your name" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"remoteName", /* name */
1, /* minnum */
2, /* maxnum */
0, /* short option */
"rname", /* long option */
"Specify the remote name", /* short description */
"Specify the remote name" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"purpose", /* name */
1, /* minnum */
6, /* maxnum */
"p", /* short option */
"purpose", /* long option */
"Specify the purpose", /* short description */
"Specify the purpose" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"endToEndReference", /* name */
0, /* minnum */
1, /* maxnum */
"E", /* short option */
"endtoendid", /* long option */
"Specify the SEPA End-to-end-reference", /* short description */
"Specify the SEPA End-to-end-reference" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"executionDate", /* name */
0, /* minnum */
1, /* maxnum */
0, /* short option */
"execdate", /* long option */
"Specify the execution date (YYYYMMDD)", /* short */
"Specify the execution date (YYYYMMDD)" /* long */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"noCheck", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"noCheck", /* long option */
"Dont check transaction limits", /* short description */
"Dont check transaction limits"
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return NULL;
}
return db;
}
aqbanking-6.9.1/src/tools/aqbanking-cli/listdoc.c 0000644 0001750 0001750 00000023415 15113653730 016650 0000000 0000000 /***************************************************************************
begin : Fri Mar 20 2021
copyright : (C) 2021 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include "globals.h"
#include
#include
#include
#define LISTDOC_FLAGS_SHOW_ACCOUNT 0x0001
#define LISTDOC_FLAGS_SHOW_MIMETYPE 0x0002
#define LISTDOC_FLAGS_SHOW_PATH 0x0004
static void _printAccount(const AB_IMEXPORTER_ACCOUNTINFO *iea);
static void _printDoc(const AB_DOCUMENT *doc, uint32_t flags);
static GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv);
int listDoc(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const char *ctxFile;
AB_IMEXPORTER_CONTEXT *ctx=0;
AB_IMEXPORTER_ACCOUNTINFO *iea=0;
uint32_t aid;
const char *bankId;
const char *accountId;
const char *subAccountId;
const char *iban;
uint32_t flags=0;
/* parse command line arguments */
db=_readCommandLine(dbArgs, argc, argv);
if (db==NULL) {
/* error in command line */
return 1;
}
/* read command line arguments */
aid=(uint32_t)GWEN_DB_GetIntValue(db, "uniqueAccountId", 0, 0);
bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0);
accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0);
subAccountId=GWEN_DB_GetCharValue(db, "subAccountId", 0, 0);
iban=GWEN_DB_GetCharValue(db, "iban", 0, 0);
flags|=(GWEN_DB_GetIntValue(db, "showAccount", 0, 0)>0)?LISTDOC_FLAGS_SHOW_ACCOUNT:0;
flags|=(GWEN_DB_GetIntValue(db, "showMimeType", 0, 0)>0)?LISTDOC_FLAGS_SHOW_MIMETYPE:0;
flags|=(GWEN_DB_GetIntValue(db, "showPath", 0, 0)>0)?LISTDOC_FLAGS_SHOW_PATH:0;
/* init AqBanking */
rv=AB_Banking_Init(ab);
if (rv) {
DBG_ERROR(0, "Error on init (%d)", rv);
return 2;
}
/* load ctx file */
ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);
rv=readContext(ctxFile, &ctx, 1);
if (rv<0) {
DBG_ERROR(0, "Error reading context (%d)", rv);
AB_ImExporterContext_free(ctx);
return 4;
}
/* copy context, but only keep wanted accounts and transactions */
iea=AB_ImExporterContext_GetFirstAccountInfo(ctx);
while (iea) {
if (AB_ImExporterAccountInfo_Matches(iea,
aid, /* unique account id */
"*",
bankId,
accountId,
subAccountId,
iban,
"*", /* currency */
AB_AccountType_Unknown)) {
AB_DOCUMENT_LIST *docList;
docList=AB_ImExporterAccountInfo_GetEStatementList(iea);
if (docList) {
AB_DOCUMENT *doc;
doc=AB_Document_List_First(docList);
if (doc && (flags & LISTDOC_FLAGS_SHOW_ACCOUNT))
_printAccount(iea);
while (doc) {
_printDoc(doc, flags);
doc=AB_Document_List_Next(doc);
}
}
} /* if account matches */
iea=AB_ImExporterAccountInfo_List_Next(iea);
} /* while */
AB_ImExporterContext_free(ctx);
/* deinit */
rv=AB_Banking_Fini(ab);
if (rv) {
fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
return 5;
}
return 0;
}
void _printAccount(const AB_IMEXPORTER_ACCOUNTINFO *iea)
{
const char *sBank;
const char *sAccount;
sAccount=AB_ImExporterAccountInfo_GetIban(iea);
sBank=AB_ImExporterAccountInfo_GetIban(iea);
if (!(sAccount && *sAccount)) {
sAccount=AB_ImExporterAccountInfo_GetAccountNumber(iea);
sBank=AB_ImExporterAccountInfo_GetBankCode(iea);
}
fprintf(stdout, "Account %s/%s\n",
sBank?sBank:"",
sAccount?sAccount:"");
}
void _printDoc(const AB_DOCUMENT *doc, uint32_t flags)
{
const char *sId;
const char *sMimeType;
const char *sPath;
sId=AB_Document_GetId(doc);
sMimeType=AB_Document_GetMimeType(doc);
sPath=AB_Document_GetFilePath(doc);
fprintf(stdout, "%s", sId?sId:"");
if (flags & LISTDOC_FLAGS_SHOW_MIMETYPE)
fprintf(stdout, "\t%s", sMimeType?sMimeType:"");
if (flags & LISTDOC_FLAGS_SHOW_PATH)
fprintf(stdout, "\t%s", sPath?sPath:"");
fprintf(stdout, "\n");
}
/* parse command line */
GWEN_DB_NODE *_readCommandLine(GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
GWEN_DB_NODE *db;
int rv;
const GWEN_ARGS args[]= {
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Int, /* type */
"uniqueAccountId", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"aid", /* long option */
"Specify the unique account id", /* short description */
"Specify the unique account id" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"bankId", /* name */
0, /* minnum */
1, /* maxnum */
"b", /* short option */
"bank", /* long option */
"Specify the bank code", /* short description */
"Specify the bank code" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"accountId", /* name */
0, /* minnum */
1, /* maxnum */
"a", /* short option */
"account", /* long option */
"Specify the account number", /* short description */
"Specify the account number" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"subAccountId", /* name */
0, /* minnum */
1, /* maxnum */
"aa", /* short option */
"subaccount", /* long option */
"Specify the sub account id (Unterkontomerkmal)", /* short description */
"Specify the sub account id (Unterkontomerkmal)" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"iban", /* name */
0, /* minnum */
1, /* maxnum */
"A", /* short option */
"iban", /* long option */
"Specify the iban of your account", /* short description */
"Specify the iban of your account" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"showAccount", /* name */
0, /* minnum */
1, /* maxnum */
"", /* short option */
"showAccount", /* long option */
"Show account", /* short description */
"Show account" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"showMimeType", /* name */
0, /* minnum */
1, /* maxnum */
NULL, /* short option */
"showMimeType", /* long option */
"Show mimetype", /* short description */
"Show mimetype" /* long description */
},
{
0, /* flags */
GWEN_ArgsType_Int, /* type */
"showPath", /* name */
0, /* minnum */
1, /* maxnum */
"", /* short option */
"showPath", /* long option */
"Show path of the file containing document's data", /* short description */
"Show path of the file containing document's data" /* long description */
},
{
GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */
GWEN_ArgsType_Char, /* type */
"ctxFile", /* name */
0, /* minnum */
1, /* maxnum */
"c", /* short option */
"ctxfile", /* long option */
"Specify the file to store the context in", /* short description */
"Specify the file to store the context in" /* long description */
},
{
GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */
GWEN_ArgsType_Int, /* type */
"help", /* name */
0, /* minnum */
0, /* maxnum */
"h", /* short option */
"help", /* long option */
"Show this help screen", /* short description */
"Show this help screen" /* long description */
}
};
db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local");
rv=AB_Cmd_Handle_Args(argc, argv, args, db);
if (rv==GWEN_ARGS_RESULT_ERROR) {
return NULL;
}
else if (rv==GWEN_ARGS_RESULT_HELP) {
return NULL;
}
return db;
}
aqbanking-6.9.1/src/tools/mkdeinfo/ 0000755 0001750 0001750 00000000000 15131211176 014204 5 0000000 0000000 aqbanking-6.9.1/src/tools/mkdeinfo/Makefile.in 0000644 0001750 0001750 00000055257 15131211121 016175 0000000 0000000 # Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# 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.
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@IS_WINDOWS_FALSE@noinst_PROGRAMS = mkdeinfo$(EXEEXT)
subdir = src/tools/mkdeinfo
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \
$(top_srcdir)/m4/as-scrub-include.m4 \
$(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
am__mkdeinfo_SOURCES_DIST = mkdeinfo.c
@IS_WINDOWS_FALSE@am_mkdeinfo_OBJECTS = mkdeinfo.$(OBJEXT)
mkdeinfo_OBJECTS = $(am_mkdeinfo_OBJECTS)
am__DEPENDENCIES_1 =
@IS_WINDOWS_FALSE@mkdeinfo_DEPENDENCIES = $(am__DEPENDENCIES_1) \
@IS_WINDOWS_FALSE@ $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/mkdeinfo.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(mkdeinfo_SOURCES)
DIST_SOURCES = $(am__mkdeinfo_SOURCES_DIST)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@
AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@
AQBANKING_SO_AGE = @AQBANKING_SO_AGE@
AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@
AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@
AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@
AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@
AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@
AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@
AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@
AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@
AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@
AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@
AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@
AQEBICS_CFLAGS = @AQEBICS_CFLAGS@
AQEBICS_LIBS = @AQEBICS_LIBS@
AR = @AR@
AS = @AS@
ASTYLE = @ASTYLE@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATETIME = @DATETIME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN_DEFINE = @DOXYGEN_DEFINE@
DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@
DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@
DOXYGEN_INPUT = @DOXYGEN_INPUT@
DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILECMD = @FILECMD@
GREP = @GREP@
GTK2_CFLAGS = @GTK2_CFLAGS@
GTK2_LIBS = @GTK2_LIBS@
GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@
GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@
GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@
HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@
HAVE_I18N = @HAVE_I18N@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBXML_CFLAGS = @LIBXML_CFLAGS@
LIBXML_LIBS = @LIBXML_LIBS@
LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@
LIBXSLT_LIBS = @LIBXSLT_LIBS@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MAKE_DLL_TARGET = @MAKE_DLL_TARGET@
MAKE_I18N_FILES = @MAKE_I18N_FILES@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OSYSTEM = @OSYSTEM@
OS_TYPE = @OS_TYPE@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
RANLIB = @RANLIB@
RC = @RC@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
STRIPALL = @STRIPALL@
TUTORIALS = @TUTORIALS@
USE_DOT = @USE_DOT@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
XMLMERGE = @XMLMERGE@
XMLSEC_CFLAGS = @XMLSEC_CFLAGS@
XMLSEC_LIBS = @XMLSEC_LIBS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
all_includes = @all_includes@
all_libraries = @all_libraries@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
aq_distrib_name = @aq_distrib_name@
aq_distrib_tag = @aq_distrib_tag@
aq_distrib_version = @aq_distrib_version@
aqbanking_backends = @aqbanking_backends@
aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@
aqbanking_data_searchdir = @aqbanking_data_searchdir@
aqbanking_headerdir = @aqbanking_headerdir@
aqbanking_headerdir_am = @aqbanking_headerdir_am@
aqbanking_includes = @aqbanking_includes@
aqbanking_internal_libs = @aqbanking_internal_libs@
aqbanking_ldflags = @aqbanking_ldflags@
aqbanking_libs = @aqbanking_libs@
aqbanking_locale_searchdir = @aqbanking_locale_searchdir@
aqbanking_modules = @aqbanking_modules@
aqbanking_pkgdatadir = @aqbanking_pkgdatadir@
aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@
aqbanking_plugindir = @aqbanking_plugindir@
aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@
aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@
aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@
aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@
aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@
aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@
aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@
aqbanking_symlinkdir = @aqbanking_symlinkdir@
aqbanking_sys_is_windows = @aqbanking_sys_is_windows@
aqbankingpp_modules = @aqbankingpp_modules@
aqebics_datadir = @aqebics_datadir@
aqebics_includes = @aqebics_includes@
aqebics_internal_libs = @aqebics_internal_libs@
aqebics_ldflags = @aqebics_ldflags@
aqebics_libs = @aqebics_libs@
aqfints_datadir = @aqfints_datadir@
aqhbci_datadir = @aqhbci_datadir@
aqhbci_includes = @aqhbci_includes@
aqhbci_internal_libs = @aqhbci_internal_libs@
aqhbci_ldflags = @aqhbci_ldflags@
aqhbci_libs = @aqhbci_libs@
aqofxconnect_includes = @aqofxconnect_includes@
aqofxconnect_internal_libs = @aqofxconnect_internal_libs@
aqofxconnect_libs = @aqofxconnect_libs@
aqpaypal_includes = @aqpaypal_includes@
aqpaypal_internal_libs = @aqpaypal_internal_libs@
aqpaypal_libs = @aqpaypal_libs@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
docpath = @docpath@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
gmp_libs = @gmp_libs@
gwenhywfar_bindir = @gwenhywfar_bindir@
gwenhywfar_dir = @gwenhywfar_dir@
gwenhywfar_has_crypt = @gwenhywfar_has_crypt@
gwenhywfar_headers = @gwenhywfar_headers@
gwenhywfar_includes = @gwenhywfar_includes@
gwenhywfar_libs = @gwenhywfar_libs@
gwenhywfar_plugins = @gwenhywfar_plugins@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
i18n_libs = @i18n_libs@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
typemaker2_exe = @typemaker2_exe@
visibility_cflags = @visibility_cflags@
with_aqebics = @with_aqebics@
with_aqhbci = @with_aqhbci@
AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/..
@IS_WINDOWS_FALSE@mkdeinfo_SOURCES = mkdeinfo.c
@IS_WINDOWS_FALSE@mkdeinfo_LDADD = $(aqbanking_internal_libs) $(gwenhywfar_libs)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tools/mkdeinfo/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu src/tools/mkdeinfo/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstPROGRAMS:
@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
mkdeinfo$(EXEEXT): $(mkdeinfo_OBJECTS) $(mkdeinfo_DEPENDENCIES) $(EXTRA_mkdeinfo_DEPENDENCIES)
@rm -f mkdeinfo$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(mkdeinfo_OBJECTS) $(mkdeinfo_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdeinfo.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@echo '# dummy' >$@-t && $(am__mv) $@-t $@
am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
-rm -f ./$(DEPDIR)/mkdeinfo.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/mkdeinfo.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am
.PRECIOUS: Makefile
# IS_WINDOWS
built_sources:
typefiles:
typedefs:
sources:
cppcheck:
for f in $(mkdeinfo_SOURCES); do \
cppcheck --force $$f ; \
done
for d in $(SUBDIRS); do \
$(MAKE) -C $$d cppcheck; \
done
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
aqbanking-6.9.1/src/tools/mkdeinfo/Makefile.am 0000664 0001750 0001750 00000001025 14043610745 016166 0000000 0000000 AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/..
if IS_WINDOWS
# Doesn't link on windows; too lazy to fix this for now.
noinst_PROGRAMS=
else
noinst_PROGRAMS=mkdeinfo
mkdeinfo_SOURCES=mkdeinfo.c
mkdeinfo_LDADD = $(aqbanking_internal_libs) $(gwenhywfar_libs)
endif
# IS_WINDOWS
built_sources:
typefiles:
typedefs:
sources:
cppcheck:
for f in $(mkdeinfo_SOURCES); do \
cppcheck --force $$f ; \
done
for d in $(SUBDIRS); do \
$(MAKE) -C $$d cppcheck; \
done
aqbanking-6.9.1/src/tools/mkdeinfo/mkdeinfo.c 0000664 0001750 0001750 00000157365 14043610745 016115 0000000 0000000 /***************************************************************************
begin : Mon Mar 01 2004
copyright : (C) 2018 by Martin Preuss
email : martin@libchipcard.de
***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#ifndef GWEN_DIR_SEPARATOR_S
/* for gwenyhwfar < 2.5.4 */
# define GWEN_DIR_SEPARATOR '/'
# define GWEN_DIR_SEPARATOR_S "/"
#endif
#define FUZZY_SHIFT 10
#define FUZZY_THRESHOLD 850
static AB_BANKINFO_LIST *bis=0;
static GWEN_DB_NODE *dbIdx=0;
int readCSVFile(const char *fname, const char *pname, GWEN_DB_NODE *db)
{
GWEN_DB_NODE *dbParams;
dbParams=GWEN_DB_Group_new("params");
if (GWEN_DB_ReadFile(dbParams, pname, GWEN_DB_FLAGS_DEFAULT)) {
DBG_ERROR(0, "Error reading profile file \"%s\"", pname);
GWEN_DB_Group_free(dbParams);
return -1;
}
if (GWEN_DB_ReadFileAs(db, fname, "csv", dbParams, GWEN_PATH_FLAGS_CREATE_GROUP)) {
DBG_ERROR(0, "Error reading data file \"%s\"", fname);
GWEN_DB_Group_free(dbParams);
return -1;
}
GWEN_DB_Group_free(dbParams);
return 0;
}
AB_BANKINFO *findBankInfo(AB_BANKINFO *bi,
const char *blz,
const char *location)
{
while (bi) {
const char *lblz;
const char *lloc;
lblz=AB_BankInfo_GetBankId(bi);
lloc=AB_BankInfo_GetLocation(bi);
if (lblz && blz) {
if (GWEN_Text_ComparePattern(lblz, blz, 0)!=-1) {
if (!location ||
(location && lloc &&
GWEN_Text_ComparePattern(lloc, location, 0)!=-1))
break;
}
}
bi=AB_BankInfo_List_Next(bi);
}
return bi;
}
AB_BANKINFO *findFirstBankInfo(const char *blz, const char *location)
{
AB_BANKINFO *bi;
bi=AB_BankInfo_List_First(bis);
return findBankInfo(bi, blz, location);
}
AB_BANKINFO *findNextBankInfo(AB_BANKINFO *bi,
const char *blz,
const char *location)
{
bi=AB_BankInfo_List_Next(bi);
return findBankInfo(bi, blz, location);
}
void isoToUtf8(const char *p,
int size,
GWEN_BUFFER *buf)
{
while (*p) {
unsigned int c;
if (!size)
break;
c=(unsigned char)(*(p++));
switch (c) {
case 0xc4: /* AE */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0x84);
break;
case 0xe4: /* ae */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xa4);
break;
case 0xd6: /* OE */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0x96);
break;
case 0xf6: /* oe */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xb6);
break;
case 0xdc: /* UE */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0x9c);
break;
case 0xfc: /* ue */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xbc);
break;
case 0xdf: /* sz */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0x9f);
break;
case 0xa7: /* section sign */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0x67);
break;
/* english chars */
case 0xa3: /* pound swign */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0x63);
break;
/* french chars */
case 0xc7: /* C cedille */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0x87);
break;
case 0xe0: /* a accent grave */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xa0);
break;
case 0xe1: /* a accent aigu */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xa1);
break;
case 0xe2: /* a accent circumflex */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xa2);
break;
case 0xe7: /* c cedille */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xa7);
break;
case 0xe8: /* e accent grave */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xa8);
break;
case 0xe9: /* e accent aigu */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xa9);
break;
case 0xea: /* e accent circumflex */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xaa);
break;
case 0xec: /* i accent grave (never heard of this) */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xac);
break;
case 0xed: /* i accent aigu (never heard of this, either) */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xad);
break;
case 0xee: /* i accent circumflex (never heard of this, either) */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xae);
break;
case 0xf2: /* o accent grave */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xb2);
break;
case 0xf3: /* o accent aigu */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xb3);
break;
case 0xf4: /* o accent circumflex */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xb4);
break;
case 0xf9: /* u accent grave */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xb9);
break;
case 0xfa: /* u accent aigu */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xba);
break;
case 0xfb: /* u accent circumflex */
GWEN_Buffer_AppendByte(buf, 0xc3);
GWEN_Buffer_AppendByte(buf, 0xbb);
break;
default:
GWEN_Buffer_AppendByte(buf, c);
}
if (size!=-1)
size--;
} /* while */
}
uint32_t _word_similarity(const char *a, const char *b)
{
uint32_t score = 0;
size_t l = 0;
while (*a && *b) {
if (*a == *b)
score += 1 << FUZZY_SHIFT;
else if (*a == b[1]) {
score += 1 << (FUZZY_SHIFT-2);
b++;
}
else if (a[1] == *b) {
score += 1 << (FUZZY_SHIFT-2);
a++;
l++;
}
a++;
b++;
l++;
}
if ('\0' != *a)
l += strlen(a);
return score / l;
}
int _is_ascii_alnum(unsigned char c)
{
return ((c>='A' || c<='Z') ||
(c>='a' || c<='z') ||
(c>='0' || c<='9') ||
c>=128);
}
GWEN_STRINGLIST *_make_word_list(const char *str)
{
GWEN_STRINGLIST *sl;
sl=GWEN_StringList_new();
while (*str) {
const char *p;
size_t size;
while (*str && !_is_ascii_alnum(*str))
str++;
p=str;
while (*str && _is_ascii_alnum(*str)) {
str++;
}
size=(str-p);
if (*p) {
char *wptr;
char *t;
size_t i;
wptr=(char *)malloc(size+1);
t=wptr;
for (i=0; i0)?(score/n):0;
}
uint32_t _find_score(GWEN_STRINGLIST *a,
GWEN_STRINGLIST *b)
{
uint32_t score = 0;
uint32_t n = 0;
GWEN_STRINGLISTENTRY *se;
se=GWEN_StringList_FirstEntry(a);
while (se) {
const char *p;
n++;
p=GWEN_StringListEntry_Data(se);
assert(p);
score+=_cmp_word_list(p, b);
se=GWEN_StringListEntry_Next(se);
}
return (n>0)?(score/n):0;
}
uint32_t FuzzyCompare(const char *str1, const char *str2)
{
GWEN_STRINGLIST *a;
GWEN_STRINGLIST *b;
uint32_t score;
a=_make_word_list(str1);
b=_make_word_list(str2);
score=(_find_score(a, b) + _find_score(b, a))/2;
GWEN_StringList_free(b);
GWEN_StringList_free(a);
return score;
}
int readDBBFile(const char *fname)
{
GWEN_DB_NODE *dbData;
GWEN_DB_NODE *dbT;
int count=0;
dbData=GWEN_DB_Group_new("data");
fprintf(stdout, "Reading Deutsche Bundesbank file...\n");
if (readCSVFile(fname, "dbb.conf", dbData)) {
DBG_ERROR(0, "Error reading DBB file \"%s\"", fname);
GWEN_DB_Group_free(dbData);
return -1;
}
fprintf(stdout, "Building database...\n");
dbT=GWEN_DB_FindFirstGroup(dbData, "bank");
while (dbT) {
const char *lblz;
const char *lloc;
lblz=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0);
lloc=GWEN_DB_GetCharValue(dbT, "location", 0, 0);
if (lloc && lblz && isdigit(*lblz)) {
if (strcasecmp(lblz, "0")!=0) {
AB_BANKINFO *bi;
bi=AB_BankInfo_fromDb(dbT);
assert(bi);
AB_BankInfo_SetCity(bi, lloc);
AB_BankInfo_List_Add(bi, bis);
count++;
}
}
dbT=GWEN_DB_FindNextGroup(dbT, "bank");
}
GWEN_DB_Group_free(dbData);
fprintf(stdout, "Found %d banks\n", count);
return 0;
}
int readHBCIFile(const char *fname)
{
GWEN_DB_NODE *dbData;
GWEN_DB_NODE *dbT;
int count=0;
dbData=GWEN_DB_Group_new("data");
fprintf(stdout, "Reading HBCI file...\n");
if (readCSVFile(fname, "hbci.conf", dbData)) {
DBG_ERROR(0, "Error reading HBCI file \"%s\"", fname);
GWEN_DB_Group_free(dbData);
return -1;
}
if (GWEN_DB_WriteFile(dbData,
"out.conf",
GWEN_DB_FLAGS_QUOTE_VALUES | \
GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
GWEN_DB_FLAGS_INDEND | \
GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \
GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
GWEN_DB_FLAGS_OMIT_TYPES)) {
DBG_ERROR(0, "Error writing bank file");
return -1;
}
fprintf(stdout, "Updating database...\n");
dbT=GWEN_DB_FindFirstGroup(dbData, "bank");
while (dbT) {
const char *lblz;
const char *lloc;
lblz=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0);
lloc=GWEN_DB_GetCharValue(dbT, "location", 0, 0);
if (lblz && lloc) {
AB_BANKINFO *bi;
bi=findFirstBankInfo(lblz, lloc);
while (bi) {
const char *addr;
const char *ver;
count++;
addr=GWEN_DB_GetCharValue(dbT, "hostName", 0, 0);
if (addr==0)
addr=GWEN_DB_GetCharValue(dbT, "hostIp", 0, 0);
ver=GWEN_DB_GetCharValue(dbT, "hbciVersion", 0, 0);
if (ver) {
/* normalize version */
if (strcmp(ver, "2")==0 ||
strcmp(ver, "2.01")==0 ||
strcmp(ver, "2.0.1")==0)
ver="2.01";
else if (strcmp(ver, "2.1")==0 ||
strcmp(ver, "2.10")==0 ||
strcmp(ver, "2.1.0")==0)
ver="2.10";
else if (strcmp(ver, "2.2")==0 ||
strcmp(ver, "2.20")==0 ||
strcmp(ver, "2.2.0")==0)
ver="2.20";
else if (strcmp(ver, "3")==0 ||
strcmp(ver, "3.0")==0 ||
strcmp(ver, "3.0.0")==0)
ver="3.0";
else if (strcmp(ver, "4")==0 ||
strcmp(ver, "4.0")==0 ||
strcmp(ver, "4.0.0")==0)
ver="3.0";
}
if (addr) {
const char *s;
s=GWEN_DB_GetCharValue(dbT, "ddv", 0, "nein");
if (strcasecmp(s, "ja")==0) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "HBCI");
AB_BankInfoService_SetAddress(sv, addr);
AB_BankInfoService_SetPversion(sv, ver);
AB_BankInfoService_SetMode(sv, "DDV");
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
} /* if DDV */
s=GWEN_DB_GetCharValue(dbT, "rdh1", 0, "nein");
if (strcasecmp(s, "ja")==0) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "HBCI");
AB_BankInfoService_SetAddress(sv, addr);
AB_BankInfoService_SetPversion(sv, ver);
AB_BankInfoService_SetMode(sv, "RDH1");
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
} /* if RDH1 */
s=GWEN_DB_GetCharValue(dbT, "rdh2", 0, "nein");
if (strcasecmp(s, "ja")==0) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "HBCI");
AB_BankInfoService_SetAddress(sv, addr);
AB_BankInfoService_SetPversion(sv, ver);
AB_BankInfoService_SetMode(sv, "RDH2");
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
} /* if RDH2 */
s=GWEN_DB_GetCharValue(dbT, "rdh3", 0, "nein");
if (strcasecmp(s, "ja")==0) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "HBCI");
AB_BankInfoService_SetAddress(sv, addr);
AB_BankInfoService_SetPversion(sv, ver);
AB_BankInfoService_SetMode(sv, "RDH3");
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
} /* if RDH3 */
s=GWEN_DB_GetCharValue(dbT, "rdh4", 0, "nein");
if (strcasecmp(s, "ja")==0) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "HBCI");
AB_BankInfoService_SetAddress(sv, addr);
AB_BankInfoService_SetPversion(sv, ver);
AB_BankInfoService_SetMode(sv, "RDH4");
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
} /* if RDH4 */
s=GWEN_DB_GetCharValue(dbT, "rdh5", 0, "nein");
if (strcasecmp(s, "ja")==0) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "HBCI");
AB_BankInfoService_SetAddress(sv, addr);
AB_BankInfoService_SetPversion(sv, ver);
AB_BankInfoService_SetMode(sv, "RDH5");
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
} /* if RDH5 */
s=GWEN_DB_GetCharValue(dbT, "rdh6", 0, "nein");
if (strcasecmp(s, "ja")==0) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "HBCI");
AB_BankInfoService_SetAddress(sv, addr);
AB_BankInfoService_SetPversion(sv, ver);
AB_BankInfoService_SetMode(sv, "RDH6");
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
} /* if RDH6 */
s=GWEN_DB_GetCharValue(dbT, "rdh7", 0, "nein");
if (strcasecmp(s, "ja")==0) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "HBCI");
AB_BankInfoService_SetAddress(sv, addr);
AB_BankInfoService_SetPversion(sv, ver);
AB_BankInfoService_SetMode(sv, "RDH7");
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
} /* if RDH7 */
s=GWEN_DB_GetCharValue(dbT, "rdh8", 0, "nein");
if (strcasecmp(s, "ja")==0) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "HBCI");
AB_BankInfoService_SetAddress(sv, addr);
AB_BankInfoService_SetPversion(sv, ver);
AB_BankInfoService_SetMode(sv, "RDH8");
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
} /* if RDH8 */
s=GWEN_DB_GetCharValue(dbT, "rdh9", 0, "nein");
if (strcasecmp(s, "ja")==0) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "HBCI");
AB_BankInfoService_SetAddress(sv, addr);
AB_BankInfoService_SetPversion(sv, ver);
AB_BankInfoService_SetMode(sv, "RDH9");
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
} /* if RDH9 */
s=GWEN_DB_GetCharValue(dbT, "rdh10", 0, "nein");
if (strcasecmp(s, "ja")==0) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "HBCI");
AB_BankInfoService_SetAddress(sv, addr);
AB_BankInfoService_SetPversion(sv, ver);
AB_BankInfoService_SetMode(sv, "RDH10");
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
} /* if RDH10 */
s=GWEN_DB_GetCharValue(dbT, "pinTanUrl", 0, 0);
if (s && *s) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "HBCI");
AB_BankInfoService_SetAddress(sv, s);
AB_BankInfoService_SetPversion(sv, ver);
AB_BankInfoService_SetMode(sv, "PINTAN");
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
} /* id PINTAN */
} /* if addr */
bi=findNextBankInfo(bi, lblz, lloc);
}
}
dbT=GWEN_DB_FindNextGroup(dbT, "bank");
}
GWEN_DB_Group_free(dbData);
fprintf(stdout, "Updated %d banks\n", count);
return 0;
}
int readATBLZFile(const char *fname)
{
GWEN_DB_NODE *dbData;
GWEN_DB_NODE *dbT;
int count=0;
dbData=GWEN_DB_Group_new("data");
fprintf(stdout, "Reading Austrian Bank file...\n");
if (readCSVFile(fname, "atblz.conf", dbData)) {
DBG_ERROR(0, "Error reading ATBLZ file \"%s\"", fname);
GWEN_DB_Group_free(dbData);
return -1;
}
fprintf(stdout, "Building database...\n");
dbT=GWEN_DB_FindFirstGroup(dbData, "bank");
while (dbT) {
const char *lblz;
lblz=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0);
if (lblz && isdigit(*lblz)) {
if (strcasecmp(lblz, "0")!=0) {
AB_BANKINFO *bi;
bi=AB_BankInfo_fromDb(dbT);
assert(bi);
AB_BankInfo_List_Add(bi, bis);
count++;
}
}
dbT=GWEN_DB_FindNextGroup(dbT, "bank");
}
GWEN_DB_Group_free(dbData);
fprintf(stdout, "Found %d banks\n", count);
return 0;
}
int readATBLZFile2(const char *fname)
{
GWEN_DB_NODE *dbData;
GWEN_DB_NODE *dbT;
int count=0;
dbData=GWEN_DB_Group_new("data");
fprintf(stdout, "Reading KIDATEN file...\n");
if (readCSVFile(fname, "kidaten.conf", dbData)) {
DBG_ERROR(0, "Error reading KIDATEN file \"%s\"", fname);
GWEN_DB_Group_free(dbData);
return -1;
}
if (GWEN_DB_WriteFile(dbData,
"out.conf",
GWEN_DB_FLAGS_QUOTE_VALUES | \
GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
GWEN_DB_FLAGS_INDEND | \
GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \
GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
GWEN_DB_FLAGS_OMIT_TYPES)) {
DBG_ERROR(0, "Error writing bank file");
return -1;
}
fprintf(stdout, "Updating database...\n");
dbT=GWEN_DB_FindFirstGroup(dbData, "bank");
while (dbT) {
const char *lblz;
const char *lloc;
lblz=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0);
lloc=GWEN_DB_GetCharValue(dbT, "location", 0, 0);
if (lblz && lloc) {
AB_BANKINFO *bi;
bi=findFirstBankInfo(lblz, 0);
if (!bi) {
/* new bank, add it */
bi=AB_BankInfo_fromDb(dbT);
if (bi) {
AB_BankInfo_List_Add(bi, bis);
count++;
}
} /* if bank is new */
else {
while (bi) {
const char *s;
s=GWEN_DB_GetCharValue(dbT, "bankName", 0, 0);
if (s && *s)
AB_BankInfo_SetBankName(bi, s);
s=GWEN_DB_GetCharValue(dbT, "street", 0, 0);
if (s && *s)
AB_BankInfo_SetStreet(bi, s);
s=GWEN_DB_GetCharValue(dbT, "zipCode", 0, 0);
if (s && *s)
AB_BankInfo_SetZipcode(bi, s);
s=GWEN_DB_GetCharValue(dbT, "location", 0, 0);
if (s && *s) {
AB_BankInfo_SetLocation(bi, s);
AB_BankInfo_SetCity(bi, s);
}
count++;
bi=findNextBankInfo(bi, lblz, 0);
} /* while bi */
} /* if bank already exists */
}
dbT=GWEN_DB_FindNextGroup(dbT, "bank");
}
GWEN_DB_Group_free(dbData);
fprintf(stdout, "Updated %d banks\n", count);
return 0;
}
int readFedAchDirFile(const char *fname)
{
GWEN_DB_NODE *dbData;
GWEN_DB_NODE *dbT;
int count=0;
dbData=GWEN_DB_Group_new("data");
fprintf(stdout, "Reading Federal Reserve Bank file...\n");
if (readCSVFile(fname, "fedachdir.conf", dbData)) {
DBG_ERROR(0, "Error reading FedAchDir file \"%s\"", fname);
GWEN_DB_Group_free(dbData);
return -1;
}
fprintf(stdout, "Building database...\n");
dbT=GWEN_DB_FindFirstGroup(dbData, "bank");
while (dbT) {
const char *lblz;
const char *lloc;
int recType;
recType=GWEN_DB_GetIntValue(dbT, "xRecordType", 0, 1);
if (recType==2)
lblz=GWEN_DB_GetCharValue(dbT, "xNewBankId", 0, 0);
else
lblz=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0);
lloc=GWEN_DB_GetCharValue(dbT, "location", 0, 0);
if (lloc && lblz && isdigit(*lblz)) {
AB_BANKINFO *bi;
GWEN_BUFFER *tbuf;
const char *s;
/* compose phone number */
tbuf=GWEN_Buffer_new(0, 32, 0, 1);
s=GWEN_DB_GetCharValue(dbT, "xPhoneAreaCode", 0, 0);
if (s) {
GWEN_Buffer_AppendString(tbuf, s);
GWEN_Buffer_AppendByte(tbuf, '-');
}
s=GWEN_DB_GetCharValue(dbT, "xPhonePrefix", 0, 0);
if (s)
GWEN_Buffer_AppendString(tbuf, s);
s=GWEN_DB_GetCharValue(dbT, "xPhoneSuffix", 0, 0);
if (s)
GWEN_Buffer_AppendString(tbuf, s);
GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS,
"phone", GWEN_Buffer_GetStart(tbuf));
GWEN_Buffer_Reset(tbuf);
/* compose zipcode */
s=GWEN_DB_GetCharValue(dbT, "xZipCode", 0, 0);
if (s) {
GWEN_Buffer_AppendString(tbuf, s);
s=GWEN_DB_GetCharValue(dbT, "xZipExt", 0, 0);
if (s) {
GWEN_Buffer_AppendByte(tbuf, '-');
GWEN_Buffer_AppendString(tbuf, s);
}
GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS,
"zipCode", GWEN_Buffer_GetStart(tbuf));
GWEN_Buffer_Reset(tbuf);
}
bi=AB_BankInfo_fromDb(dbT);
assert(bi);
AB_BankInfo_SetBankId(bi, lblz);
AB_BankInfo_SetCity(bi, lloc);
AB_BankInfo_List_Add(bi, bis);
GWEN_Buffer_free(tbuf);
count++;
}
dbT=GWEN_DB_FindNextGroup(dbT, "bank");
}
GWEN_DB_Group_free(dbData);
fprintf(stdout, "Found %d banks\n", count);
return 0;
}
const char *readCharValueXml(GWEN_XMLNODE *n, const char *name,
GWEN_BUFFER *dbuf)
{
GWEN_XMLNODE *nn;
GWEN_Buffer_Reset(dbuf);
nn=GWEN_XMLNode_FindFirstTag(n, name, 0, 0);
if (nn) {
int err;
GWEN_BUFFER *tbuf;
uint32_t len;
tbuf=GWEN_Buffer_new(0, 256, 0, 1);
err=GWEN_XMLNode_toBuffer(nn, tbuf, GWEN_XML_FLAGS_SIMPLE);
if (err<0) {
DBG_INFO(0, "here (%d)", err);
GWEN_Buffer_free(tbuf);
return NULL;
}
len=GWEN_Buffer_GetUsedBytes(tbuf);
if (len) {
len--;
GWEN_Buffer_Crop(tbuf, 0, len);
}
if (GWEN_Text_UnescapeXmlToBuffer(GWEN_Buffer_GetStart(tbuf), dbuf)) {
DBG_ERROR(0, "Error decoding XML buffer");
GWEN_Buffer_free(tbuf);
return 0;
}
GWEN_Buffer_free(tbuf);
return GWEN_Buffer_GetStart(dbuf);
}
return 0;
}
int readMSMFiles(const char *path,
const char *ifname,
const char *country)
{
GWEN_BUFFER *pbuf;
GWEN_BUFFER *dbuf;
uint32_t pos;
GWEN_XMLNODE *nBanks;
GWEN_XMLNODE *n;
int updateCount=0;
fprintf(stdout, "Reading GnuCash bank files...\n");
dbuf=GWEN_Buffer_new(0, 256, 0, 1);
pbuf=GWEN_Buffer_new(0, 256, 0, 1);
GWEN_Buffer_AppendString(pbuf, path);
GWEN_Buffer_AppendByte(pbuf, GWEN_DIR_SEPARATOR);
pos=GWEN_Buffer_GetPos(pbuf);
GWEN_Buffer_AppendString(pbuf, ifname);
nBanks=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "banks");
if (GWEN_XML_ReadFile(nBanks,
GWEN_Buffer_GetStart(pbuf),
GWEN_XML_FLAGS_DEFAULT)) {
DBG_ERROR(0, "Error reading file \"%s\"",
GWEN_Buffer_GetStart(pbuf));
GWEN_XMLNode_free(nBanks);
return -1;
}
GWEN_Buffer_Crop(pbuf, 0, pos);
n=GWEN_XMLNode_FindFirstTag(nBanks, "fil", 0, 0);
if (n)
n=GWEN_XMLNode_FindFirstTag(n, "fi", 0, 0);
while (n) {
GWEN_XMLNODE *nProvider;
nProvider=GWEN_XMLNode_FindFirstTag(n, "prov", 0, 0);
if (nProvider) {
const char *guid;
//int isCross=0;
guid=GWEN_XMLNode_GetCharValue(nProvider, "CrossRefGuid", 0);
if (!guid || !*guid)
guid=GWEN_XMLNode_GetCharValue(nProvider, "guid", 0);
else {
//isCross=1;
}
if (guid) {
FILE *f;
GWEN_Buffer_AppendString(pbuf, "/fi/");
GWEN_Buffer_AppendString(pbuf, guid);
GWEN_Buffer_AppendString(pbuf, ".xml");
/*fprintf(stderr, "Reading file \"%s\"\n", GWEN_Buffer_GetStart(pbuf));*/
f=fopen(GWEN_Buffer_GetStart(pbuf), "r");
if (f) {
GWEN_XMLNODE *nBank;
GWEN_XMLNODE *b;
fclose(f);
nBank=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "bank");
if (GWEN_XML_ReadFile(nBank,
GWEN_Buffer_GetStart(pbuf),
GWEN_XML_FLAGS_DEFAULT)) {
DBG_ERROR(0, "Error reading bank file \"%s\"",
GWEN_Buffer_GetStart(pbuf));
GWEN_XMLNode_free(nBank);
GWEN_XMLNode_free(nBanks);
return -1;
}
b=GWEN_XMLNode_FindFirstTag(nBank, "MSNOnlSvcInfo", 0, 0);
if (b)
b=GWEN_XMLNode_FindFirstTag(b, "ProviderSettings", 0, 0);
if (b) {
const char *s;
s=readCharValueXml(b, "country", dbuf);
if (s && *s) {
if (strcasecmp(s, "USA")==0 ||
strcasecmp(s, "US")==0 ||
strcasecmp(s, "Uni")==0 ||
strcasecmp(s, "United States")==0)
s="us";
else if (strcasecmp(s, "CAN")==0 ||
strcasecmp(s, "CA")==0 ||
strcasecmp(s, "Canada")==0)
s="ca";
else {
DBG_ERROR(0, "Unknown country \"%s\" in bank \"%s\"", s, guid);
GWEN_XMLNode_free(nBank);
GWEN_XMLNode_free(nBanks);
return -1;
}
}
else {
/*fprintf(stderr, "No country in bank \"%s\", ignoring\n", guid);*/
/* assume us */
s="us";
}
if (strcasecmp(s, country)==0) {
AB_BANKINFO *bi;
const char *zipCode;
const char *name;
int addIt=1;
bi=AB_BankInfo_new();
AB_BankInfo_SetCountry(bi, s);
s=readCharValueXml(nProvider, "name", dbuf);
if (s && *s)
AB_BankInfo_SetBankName(bi, s);
else {
DBG_ERROR(0, "No name in bank \"%s\"", guid);
GWEN_XMLNode_free(nBank);
GWEN_XMLNode_free(nBanks);
return -1;
}
s=readCharValueXml(b, "city", dbuf);
if (s && *s) {
AB_BankInfo_SetLocation(bi, s);
AB_BankInfo_SetCity(bi, s);
}
s=readCharValueXml(b, "address1", dbuf);
if (s && *s)
AB_BankInfo_SetStreet(bi, s);
s=readCharValueXml(b, "zip", dbuf);
if (s && *s)
AB_BankInfo_SetZipcode(bi, s);
s=readCharValueXml(b, "phone", dbuf);
if (s && *s)
AB_BankInfo_SetPhone(bi, s);
s=readCharValueXml(b, "InternetMail", dbuf);
if (s && *s)
AB_BankInfo_SetEmail(bi, s);
s=readCharValueXml(b, "website1", dbuf);
if (s && *s)
AB_BankInfo_SetWebsite(bi, s);
s=readCharValueXml(b, "driverType", dbuf);
if (s && strcasecmp(s, "O")==0) {
const char *pver;
const char *server;
pver=GWEN_XMLNode_GetCharValue(b, "OFXHeaderVer", 0);
server=readCharValueXml(b, "ProviderUrl",
dbuf);
if (pver && *pver && server && *server &&
strcasecmp(server, "http://moneycentral.msn.com/cust404.htm")!=0) {
AB_BANKINFO_SERVICE *sv;
sv=AB_BankInfoService_new();
AB_BankInfoService_SetType(sv, "OFX");
AB_BankInfoService_SetAddress(sv, server);
AB_BankInfoService_SetPversion(sv, pver);
s=readCharValueXml(b, "fid", dbuf);
if (s && *s)
AB_BankInfoService_SetAux1(sv, s);
s=readCharValueXml(b, "org", dbuf);
if (s && *s)
AB_BankInfoService_SetAux2(sv, s);
AB_BankInfoService_List_Add(sv, AB_BankInfo_GetServices(bi));
}
}
name=AB_BankInfo_GetBankName(bi);
zipCode=AB_BankInfo_GetZipcode(bi);
if (name && *name && zipCode && *zipCode) {
AB_BANKINFO *tbi;
char zbuf[32];
const char *x;
char *y;
/* make compact zip code */
assert(strlen(zipCode)FUZZY_THRESHOLD) {
fprintf(stderr,
"Updating existing entry for \"%s\" "
"(%u)\n",
lname, v);
break;
}
}
}
}
tbi=AB_BankInfo_List_Next(tbi);
} /* while existing entries */
if (tbi) {
const char *s1, *s2;
/* merge in new info */
s1=AB_BankInfo_GetEmail(bi);
s2=AB_BankInfo_GetEmail(tbi);
if ((s1 && *s1) && (!s2 || !*s2))
AB_BankInfo_SetEmail(tbi, s1);
s1=AB_BankInfo_GetWebsite(bi);
s2=AB_BankInfo_GetWebsite(tbi);
if ((s1 && *s1) && (!s2 || !*s2))
AB_BankInfo_SetWebsite(tbi, s1);
/* move new service entries to end of existing ones */
AB_BankInfoService_List_AddList(AB_BankInfo_GetServices(tbi),
AB_BankInfo_GetServices(bi));
addIt=0;
}
}
if (addIt)
AB_BankInfo_List_Add(bi, bis);
else {
AB_BankInfo_free(bi);
updateCount++;
}
} /* if matching country */
} /* if provider */
else {
fprintf(stderr,
"File \"%s\" does not contain bank descriptions\n",
GWEN_Buffer_GetStart(pbuf));
}
GWEN_XMLNode_free(nBank);
} /* if provider file exists */
else {
fprintf(stderr, "Provider file for bank \"%s\" not found\n", guid);
}
GWEN_Buffer_Crop(pbuf, 0, pos);
} /* if guid */
else {
fprintf(stderr, "File does not contain a GUID\n");
}
}
else {
fprintf(stderr, "File does not contain bank info.\n");
}
n=GWEN_XMLNode_FindNextTag(n, "fi", 0, 0);
}
fprintf(stdout, "%d banks updated.\n", updateCount);
return 0;
}
int readBcFile(const char *fname)
{
GWEN_DB_NODE *dbData;
GWEN_DB_NODE *dbT;
int count=0;
dbData=GWEN_DB_Group_new("data");
fprintf(stdout, "Reading BC Bankenstamm file...\n");
if (readCSVFile(fname, "bcbankenstamm.conf", dbData)) {
DBG_ERROR(0, "Error reading BC Bankenstamm file \"%s\"", fname);
GWEN_DB_Group_free(dbData);
return -1;
}
if (GWEN_DB_WriteFile(dbData,
"out.conf",
GWEN_DB_FLAGS_QUOTE_VALUES | \
GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
GWEN_DB_FLAGS_INDEND | \
GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \
GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
GWEN_DB_FLAGS_OMIT_TYPES)) {
DBG_ERROR(0, "Error writing bank file");
return -1;
}
fprintf(stdout, "Building database...\n");
dbT=GWEN_DB_FindFirstGroup(dbData, "bank");
while (dbT) {
const char *lblz;
const char *lloc;
lblz=GWEN_DB_GetCharValue(dbT, "xNewBankId", 0, 0);
if (!lblz || !*lblz)
lblz=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0);
lloc=GWEN_DB_GetCharValue(dbT, "location", 0, 0);
if (lloc && *lloc && lblz && isdigit(*lblz)) {
AB_BANKINFO *bi;
GWEN_BUFFER *tbuf;
const char *s;
/* compose phone number */
tbuf=GWEN_Buffer_new(0, 32, 0, 1);
s=GWEN_DB_GetCharValue(dbT, "xCountryPrefix", 0, 0);
if (s && *s) {
GWEN_Buffer_AppendString(tbuf, s);
GWEN_Buffer_AppendByte(tbuf, '-');
}
s=GWEN_DB_GetCharValue(dbT, "xPhone", 0, 0);
if (s && *s)
GWEN_Buffer_AppendString(tbuf, s);
GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS,
"phone", GWEN_Buffer_GetStart(tbuf));
GWEN_Buffer_Reset(tbuf);
/* compose fax number */
s=GWEN_DB_GetCharValue(dbT, "xCountryPrefix", 0, 0);
if (s && *s) {
GWEN_Buffer_AppendString(tbuf, s);
GWEN_Buffer_AppendByte(tbuf, '-');
}
s=GWEN_DB_GetCharValue(dbT, "xFax", 0, 0);
if (s && *s)
GWEN_Buffer_AppendString(tbuf, s);
GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS,
"fax", GWEN_Buffer_GetStart(tbuf));
GWEN_Buffer_Reset(tbuf);
/* compose bank code */
s=GWEN_DB_GetCharValue(dbT, "xNewBankId", 0, 0);
if (s && *s) {
GWEN_Buffer_AppendString(tbuf, s);
/*
GWEN_Buffer_AppendString(tbuf, "0000");
*/
GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS,
"bankId", GWEN_Buffer_GetStart(tbuf));
GWEN_Buffer_Reset(tbuf);
}
else {
s=GWEN_DB_GetCharValue(dbT, "bankId", 0, 0);
assert(s);
GWEN_Buffer_AppendString(tbuf, s);
/*
s=GWEN_DB_GetCharValue(dbT, "xFilialId", 0, 0);
if (s)
GWEN_Buffer_AppendString(tbuf, s);
*/
GWEN_DB_SetCharValue(dbT, GWEN_DB_FLAGS_OVERWRITE_VARS,
"bankId", GWEN_Buffer_GetStart(tbuf));
GWEN_Buffer_Reset(tbuf);
}
bi=AB_BankInfo_fromDb(dbT);
assert(bi);
AB_BankInfo_SetCity(bi, lloc);
AB_BankInfo_List_Add(bi, bis);
GWEN_Buffer_free(tbuf);
count++;
}
dbT=GWEN_DB_FindNextGroup(dbT, "bank");
}
GWEN_DB_Group_free(dbData);
fprintf(stdout, "Found %d banks\n", count);
return 0;
}
int makeIndexBlz(const char *fname)
{
AB_BANKINFO *bi;
FILE *f;
uint32_t count=0;
f=fopen(fname, "w+");
if (!f) {
DBG_ERROR(0, "Error creating file \"%s\"", fname);
return -1;
}
bi=AB_BankInfo_List_First(bis);
while (bi) {
uint32_t pos;
const char *s;
char numbuf[32];
count++;
s=AB_BankInfo_GetBankId(bi);
if (s) {
snprintf(numbuf, sizeof(numbuf), "%08x", count);
pos=(uint32_t)GWEN_DB_GetIntValue(dbIdx, numbuf, 0, 0);
if (pos==0 && count!=1) {
DBG_ERROR(0, "No index given for \"%s\" (%d)", numbuf, count);
fclose(f);
return -1;
}
fprintf(f, "%s\t%08x\n", s, pos);
}
bi=AB_BankInfo_List_Next(bi);
}
if (fclose(f)) {
DBG_ERROR(0, "Error closing file \"%s\"", fname);
return -1;
}
return 0;
}
int makeIndexBic(const char *fname)
{
AB_BANKINFO *bi;
FILE *f;
uint32_t count=0;
f=fopen(fname, "w+");
if (!f) {
DBG_ERROR(0, "Error creating file \"%s\"", fname);
return -1;
}
bi=AB_BankInfo_List_First(bis);
while (bi) {
const char *s;
count++;
s=AB_BankInfo_GetBic(bi);
if (s && *s) {
uint32_t pos;
char numbuf[32];
snprintf(numbuf, sizeof(numbuf), "%08x", count);
pos=(uint32_t)GWEN_DB_GetIntValue(dbIdx, numbuf, 0, 0);
if (pos==0 && count!=1) {
DBG_ERROR(0, "No index given for \"%s\" (%d)", numbuf, count);
fclose(f);
return -1;
}
fprintf(f, "%s\t%08x\n", s, pos);
}
bi=AB_BankInfo_List_Next(bi);
}
if (fclose(f)) {
DBG_ERROR(0, "Error closing file \"%s\"", fname);
return -1;
}
return 0;
}
int makeIndexNameAndLoc(const char *fname)
{
AB_BANKINFO *bi;
FILE *f;
uint32_t count=0;
f=fopen(fname, "w+");
if (!f) {
DBG_ERROR(0, "Error creating file \"%s\"", fname);
return -1;
}
bi=AB_BankInfo_List_First(bis);
while (bi) {
const char *name;
const char *loc;
count++;
name=AB_BankInfo_GetBankName(bi);
loc=AB_BankInfo_GetLocation(bi);
if (name && *name && loc && *loc) {
uint32_t pos;
char numbuf[32];
snprintf(numbuf, sizeof(numbuf), "%08x", count);
pos=(uint32_t)GWEN_DB_GetIntValue(dbIdx, numbuf, 0, 0);
if (pos==0 && count!=1) {
DBG_ERROR(0, "No index given for \"%s\" (%d)", numbuf, count);
fclose(f);
return -1;
}
fprintf(f, "%s\t%s\t%08x\n", name, loc, pos);
}
bi=AB_BankInfo_List_Next(bi);
}
if (fclose(f)) {
DBG_ERROR(0, "Error closing file \"%s\"", fname);
return -1;
}
return 0;
}
int saveBankInfos(const char *path)
{
AB_BANKINFO *bi;
uint32_t count=0;
GWEN_BUFFER *xbuf;
GWEN_SYNCIO *sio;
int rv;
GWEN_FAST_BUFFER *fb;
fprintf(stdout, "Saving database...\n");
sio=GWEN_SyncIo_File_new(path, GWEN_SyncIo_File_CreationMode_CreateAlways);
GWEN_SyncIo_AddFlags(sio,
GWEN_SYNCIO_FILE_FLAGS_READ |
GWEN_SYNCIO_FILE_FLAGS_WRITE |
GWEN_SYNCIO_FILE_FLAGS_UREAD |
GWEN_SYNCIO_FILE_FLAGS_UWRITE);
rv=GWEN_SyncIo_Connect(sio);
if (rv<0) {
DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
GWEN_SyncIo_free(sio);
return rv;
}
fb=GWEN_FastBuffer_new(512, sio);
GWEN_FASTBUFFER_WRITELINE(fb, rv, "# This is an automatically created file");
if (rv>=0) {
GWEN_FASTBUFFER_WRITELINE(fb, rv, "# All banks are separated by newlines");
}
if (rv>=0) {
GWEN_FASTBUFFER_WRITELINE(fb, rv,
"# Please do not modify this file, "
"the index files rely on exact positions.");
}
if (rv<0) {
DBG_INFO(0, "here (%d)", rv);
DBG_ERROR(0, "Error writing bank file \"%s\"", path);
GWEN_FastBuffer_free(fb);
GWEN_SyncIo_Disconnect(sio);
GWEN_SyncIo_free(sio);
return -1;
}
xbuf=GWEN_Buffer_new(0, 256, 0, 1);
bi=AB_BankInfo_List_First(bis);
while (bi) {
const char *s;
GWEN_DB_NODE *dbT;
uint32_t pos;
char numbuf[32];
count++;
/* some conversions to UTF8 */
s=AB_BankInfo_GetBankName(bi);
assert(s);
isoToUtf8(s, strlen(s), xbuf);
AB_BankInfo_SetBankName(bi, GWEN_Buffer_GetStart(xbuf));
GWEN_Buffer_Reset(xbuf);
s=AB_BankInfo_GetLocation(bi);
if (s) {
isoToUtf8(s, strlen(s), xbuf);
AB_BankInfo_SetLocation(bi, GWEN_Buffer_GetStart(xbuf));
AB_BankInfo_SetCity(bi, GWEN_Buffer_GetStart(xbuf));
GWEN_Buffer_Reset(xbuf);
}
/* create DB */
dbT=GWEN_DB_Group_new("bank");
AB_BankInfo_toDb(bi, dbT);
pos=GWEN_FastBuffer_GetBytesWritten(fb);
snprintf(numbuf, sizeof(numbuf), "%08x", count);
GWEN_DB_SetIntValue(dbIdx,
GWEN_PATH_FLAGS_CREATE_VAR,
numbuf, pos);
if (GWEN_DB_WriteToFastBuffer(dbT,
fb,
GWEN_DB_FLAGS_QUOTE_VALUES | \
GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
GWEN_DB_FLAGS_INDEND | \
GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
GWEN_DB_FLAGS_OMIT_TYPES)) {
DBG_ERROR(0, "Error writing bank file \"%s\"", path);
GWEN_DB_Group_free(dbT);
GWEN_FastBuffer_free(fb);
GWEN_SyncIo_Disconnect(sio);
GWEN_SyncIo_free(sio);
return -1;
}
GWEN_FASTBUFFER_WRITELINE(fb, rv, "");
if (rv<0) {
DBG_ERROR_ERR(0, rv);
DBG_ERROR(0, "Error writing bank file \"%s\"", path);
GWEN_DB_Group_free(dbT);
GWEN_FastBuffer_free(fb);
GWEN_SyncIo_Disconnect(sio);
GWEN_SyncIo_free(sio);
return rv;
}
GWEN_DB_Group_free(dbT);
if (count & ~31) {
fprintf(stdout, "%u\r", count);
}
bi=AB_BankInfo_List_Next(bi);
} /* while bi */
/* flush fast buffer */
GWEN_FASTBUFFER_FLUSH(fb, rv);
if (rv<0) {
DBG_ERROR(0, "Error closing bank file \"%s\" (%d)", path, rv);
GWEN_FastBuffer_free(fb);
GWEN_SyncIo_Disconnect(sio);
GWEN_SyncIo_free(sio);
return rv;
}
GWEN_FastBuffer_free(fb);
/* flush and close io */
rv=GWEN_SyncIo_Disconnect(sio);
if (rv<0) {
DBG_ERROR(0, "Error closing bank file \"%s\" (%d)", path, rv);
GWEN_FastBuffer_free(fb);
GWEN_SyncIo_free(sio);
return rv;
}
GWEN_SyncIo_free(sio);
fprintf(stdout, " Written %d banks.\n", count);
return 0;
}
int makeBankInfos(const char *path)
{
AB_BANKINFO *bi;
uint32_t count=0;
char numbuf[32];
GWEN_BUFFER *dbuf;
dbuf=GWEN_Buffer_new(0, 256, 0, 1);
bi=AB_BankInfo_List_First(bis);
while (bi) {
GWEN_DB_NODE *dbT;
count++;
/* create path */
GWEN_Buffer_AppendString(dbuf, path);
GWEN_Buffer_AppendString(dbuf, GWEN_DIR_SEPARATOR_S "banks" GWEN_DIR_SEPARATOR_S);
snprintf(numbuf, sizeof(numbuf), "%04x", count);
GWEN_Buffer_AppendBytes(dbuf, numbuf, 2);
if (GWEN_Directory_GetPath(GWEN_Buffer_GetStart(dbuf),
GWEN_PATH_FLAGS_CHECKROOT |
GWEN_DIR_FLAGS_PUBLIC_PATH |
GWEN_DIR_FLAGS_PUBLIC_NAME)) {
DBG_ERROR(0, "Error creating path \"%s\"",
GWEN_Buffer_GetStart(dbuf));
/* GWEN_DB_Group_free(dbT); -- not yet initialized */
GWEN_Buffer_free(dbuf);
return -1;
}
GWEN_Buffer_AppendByte(dbuf, GWEN_DIR_SEPARATOR);
GWEN_Buffer_AppendBytes(dbuf, numbuf+2, 2);
GWEN_Buffer_AppendString(dbuf, ".bank");
/* create DB */
dbT=GWEN_DB_Group_new("bank");
AB_BankInfo_toDb(bi, dbT);
/* write file */
if (GWEN_DB_WriteFile(dbT,
GWEN_Buffer_GetStart(dbuf),
GWEN_DB_FLAGS_QUOTE_VALUES | \
GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
GWEN_DB_FLAGS_INDEND | \
GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \
GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
GWEN_DB_FLAGS_OMIT_TYPES)) {
DBG_ERROR(0, "Error writing bank file \"%s\"",
GWEN_Buffer_GetStart(dbuf));
GWEN_DB_Group_free(dbT);
GWEN_Buffer_free(dbuf);
return -1;
}
#ifndef OS_WIN32
if (chmod(GWEN_Buffer_GetStart(dbuf),
S_IRUSR | S_IWUSR
# ifdef S_IRGRP
| S_IRGRP
# endif
# ifdef S_IROTH
| S_IROTH
# endif
)) {
DBG_ERROR(0, "chmod(%s): %s",
GWEN_Buffer_GetStart(dbuf),
strerror(errno));
GWEN_DB_Group_free(dbT);
GWEN_Buffer_free(dbuf);
return -1;
}
#endif
GWEN_Buffer_Reset(dbuf);
GWEN_DB_Group_free(dbT);
bi=AB_BankInfo_List_Next(bi);
}
fprintf(stdout, " Written %d banks\n", count);
return 0;
}
int loadBanks(const char *fname, AB_BANKINFO_LIST *biList)
{
uint32_t count=0;
GWEN_SYNCIO *sio;
GWEN_FAST_BUFFER *fb;
int rv;
fprintf(stdout, "Loading database, this will take a few minutes ...\n");
sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting);
GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ);
rv=GWEN_SyncIo_Connect(sio);
if (rv<0) {
DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
GWEN_SyncIo_free(sio);
return rv;
}
fb=GWEN_FastBuffer_new(512, sio);
for (;;) {
GWEN_DB_NODE *dbT;
AB_BANKINFO *bi;
int pos;
char numbuf[32];
int rv;
dbT=GWEN_DB_Group_new("bank");
pos=GWEN_FastBuffer_GetBytesRead(fb);
rv=GWEN_DB_ReadFromFastBuffer(dbT, fb,
GWEN_DB_FLAGS_DEFAULT |
GWEN_PATH_FLAGS_CREATE_GROUP|
GWEN_DB_FLAGS_UNTIL_EMPTY_LINE);
if (rv<0) {
if (rv==GWEN_ERROR_EOF)
break;
DBG_ERROR(0, "Could not load file \"%s\" (%d)", fname, rv);
GWEN_DB_Group_free(dbT);
GWEN_FastBuffer_free(fb);
GWEN_SyncIo_Disconnect(sio);
GWEN_SyncIo_free(sio);
return -1;
}
bi=AB_BankInfo_fromDb(dbT);
assert(bi);
AB_BankInfo_List_Add(bi, biList);
GWEN_DB_Group_free(dbT);
count++;
snprintf(numbuf, sizeof(numbuf), "%08x", count);
GWEN_DB_SetIntValue(dbIdx, GWEN_DB_FLAGS_OVERWRITE_VARS, numbuf, pos);
if (count & ~31) {
fprintf(stdout, "%u\r", count);
}
} /* while */
fprintf(stdout, "\n");
fprintf(stdout, " Read %d banks.\n", count);
GWEN_FastBuffer_free(fb);
GWEN_SyncIo_Disconnect(sio);
GWEN_SyncIo_free(sio);
return 0;
}
int main(int argc, char **argv)
{
if (argc<2) {
fprintf(stderr,
"Usage:\n"
"%s COMMAND\n",
argv[0]);
return 1;
}
if (strcasecmp(argv[1], "build")==0) {
const char *dbbFile, *hbciFile, *dstFile;
if (argc<5) {
fprintf(stderr,
"Usage:\n"
"%s build DBB-file HBCI-file DESTFILE\n",
argv[0]);
return 1;
}
dbbFile=argv[2];
hbciFile=argv[3];
dstFile=argv[4];
bis=AB_BankInfo_List_new();
dbIdx=GWEN_DB_Group_new("indexList");
if (readDBBFile(dbbFile)) {
DBG_ERROR(0, "Error.");
return 2;
}
if (readHBCIFile(hbciFile)) {
DBG_ERROR(0, "Error.");
return 2;
}
if (saveBankInfos(dstFile)) {
return 3;
}
}
else if (strcasecmp(argv[1], "build-at")==0) {
const char *blzFile;
const char *dstFile;
if (argc<4) {
fprintf(stderr,
"Usage:\n"
"%s build-at BLZ-file DESTFILE\n",
argv[0]);
return 1;
}
blzFile=argv[2];
dstFile=argv[3];
bis=AB_BankInfo_List_new();
dbIdx=GWEN_DB_Group_new("indexList");
if (readATBLZFile(blzFile)) {
DBG_ERROR(0, "Error.");
return 2;
}
if (saveBankInfos(dstFile)) {
return 3;
}
}
else if (strcasecmp(argv[1], "build-ch")==0) {
const char *blzFile, *dstFile;
if (argc<4) {
fprintf(stderr,
"Usage:\n"
"%s build-ch BLZ-file DESTFILE\n",
argv[0]);
return 1;
}
blzFile=argv[2];
dstFile=argv[3];
bis=AB_BankInfo_List_new();
dbIdx=GWEN_DB_Group_new("indexList");
if (readBcFile(blzFile)) {
DBG_ERROR(0, "Error.");
return 2;
}
if (saveBankInfos(dstFile)) {
return 3;
}
}
else if (strcasecmp(argv[1], "build-am")==0) {
const char *path, *country, *src2File, *dstFile;
if (argc<6) {
fprintf(stderr,
"Usage:\n"
"%s build-am SRCPATH COUNTRY FEDACHDIRFILE DESTFILE\n",
argv[0]);
return 1;
}
path=argv[2];
country=argv[3];
src2File=argv[4];
dstFile=argv[5];
bis=AB_BankInfo_List_new();
dbIdx=GWEN_DB_Group_new("indexList");
if (strcasecmp(country, "us")==0) {
if (readFedAchDirFile(src2File)) {
return 3;
}
}
if (readMSMFiles(path, "bank.xml", country)) {
DBG_ERROR(0, "Error.");
return 2;
}
if (readMSMFiles(path, "creditcard.xml", country)) {
DBG_ERROR(0, "Error.");
return 2;
}
if (readMSMFiles(path, "brokerage.xml", country)) {
DBG_ERROR(0, "Error.");
return 2;
}
if (saveBankInfos(dstFile)) {
return 3;
}
}
else if (strcasecmp(argv[1], "install")==0) {
const char *path;
const char *srcFile;
GWEN_BUFFER *dbuf;
uint32_t pos;
if (argc<4) {
fprintf(stderr,
"Usage:\n"
"%s install SRCFILE DESTDIR\n",
argv[0]);
return 1;
}
srcFile=argv[2];
path=argv[3];
bis=AB_BankInfo_List_new();
dbIdx=GWEN_DB_Group_new("indexList");
if (loadBanks(srcFile, bis)) {
fprintf(stderr, "Error loading data file.\n");
return 2;
}
fprintf(stdout,
"Writing database and index files to %s, "
"this will take a few minutes ...\n", path);
dbuf=GWEN_Buffer_new(0, 256, 0, 1);
GWEN_Buffer_AppendString(dbuf, path);
GWEN_Buffer_AppendByte(dbuf, GWEN_DIR_SEPARATOR);
pos=GWEN_Buffer_GetPos(dbuf);
GWEN_Buffer_AppendString(dbuf, "banks.data");
if (saveBankInfos(GWEN_Buffer_GetStart(dbuf))) {
fprintf(stderr, "Error saving data files.\n");
return 3;
}
GWEN_Buffer_Crop(dbuf, 0, pos);
fprintf(stdout, "- writing BLZ index...\n");
GWEN_Buffer_AppendString(dbuf, "blz.idx");
if (makeIndexBlz(GWEN_Buffer_GetStart(dbuf))) {
fprintf(stderr, "Error saving index file.\n");
GWEN_Buffer_free(dbuf);
return 3;
}
GWEN_Buffer_Crop(dbuf, 0, pos);
fprintf(stdout, "- writing BIC index...\n");
GWEN_Buffer_AppendString(dbuf, "bic.idx");
if (makeIndexBic(GWEN_Buffer_GetStart(dbuf))) {
fprintf(stderr, "Error saving index file.\n");
GWEN_Buffer_free(dbuf);
return 3;
}
GWEN_Buffer_Crop(dbuf, 0, pos);
fprintf(stdout, "- writing NAMLOC index...\n");
GWEN_Buffer_AppendString(dbuf, "namloc.idx");
if (makeIndexNameAndLoc(GWEN_Buffer_GetStart(dbuf))) {
fprintf(stderr, "Error saving index file.\n");
GWEN_Buffer_free(dbuf);
return 3;
}
GWEN_Buffer_free(dbuf);
}
else if (strcasecmp(argv[1], "update")==0) {
const char *srcFile1;
const char *srcFile2;
const char *destFile;
AB_BANKINFO_LIST *updBis;
AB_BANKINFO *curBi;
if (argc<5) {
fprintf(stderr,
"Usage:\n"
"%s update SRCFILE UPDATEFILE DESTFILE\n",
argv[0]);
return 1;
}
srcFile1=argv[2];
srcFile2=argv[3];
destFile=argv[4];
dbIdx=GWEN_DB_Group_new("indexList");
bis=AB_BankInfo_List_new();
updBis=AB_BankInfo_List_new();
if (loadBanks(srcFile1, bis)) {
fprintf(stderr, "Error loading data file.\n");
return 2;
}
if (loadBanks(srcFile2, updBis)) {
fprintf(stderr, "Error loading update data file.\n");
return 2;
}
curBi=AB_BankInfo_List_First(updBis);
while (curBi) {
const char *bankId;
bankId=AB_BankInfo_GetBankId(curBi);
if (bankId) {
AB_BANKINFO *origBi;
origBi=AB_BankInfo_List_First(bis);
while (origBi) {
const char *s;
s=AB_BankInfo_GetBankId(origBi);
if (s && strcasecmp(s, bankId)==0)
break;
origBi=AB_BankInfo_List_Next(origBi);
}
if (origBi) {
/* replace original */
AB_BankInfo_List_Del(origBi);
AB_BankInfo_free(origBi);
origBi=AB_BankInfo_dup(curBi);
AB_BankInfo_List_Add(origBi, bis);
}
}
curBi=AB_BankInfo_List_Next(curBi);
}
if (saveBankInfos(destFile)) {
return 3;
}
}
else if (strcasecmp(argv[1], "debug")==0) {
const char *bankFile;
if (argc<3) {
fprintf(stderr,
"Usage:\n"
"%s debug BLZ-file\n",
argv[0]);
return 1;
}
bankFile=argv[2];
bis=AB_BankInfo_List_new();
dbIdx=GWEN_DB_Group_new("indexList");
if (loadBanks(bankFile, bis)) {
DBG_ERROR(0, "Error.");
return 2;
}
if (GWEN_DB_WriteFile(dbIdx, "index.conf.out", GWEN_DB_FLAGS_DEFAULT)) {
DBG_ERROR(0, "Error writing index file");
return -1;
}
}
else if (strcasecmp(argv[1], "debug2")==0) {
const char *bankFile;
if (argc<3) {
fprintf(stderr,
"Usage:\n"
"%s debug BLZ-file\n",
argv[0]);
return 1;
}
bankFile=argv[2];
bis=AB_BankInfo_List_new();
dbIdx=GWEN_DB_Group_new("indexList");
if (readFedAchDirFile(bankFile)) {
return 3;
}
if (saveBankInfos("us.out")) {
return 3;
}
}
return 0;
}
aqbanking-6.9.1/src/Makefile.am 0000664 0001750 0001750 00000000630 14043610744 013232 0000000 0000000 SUBDIRS=libs tools test
sources:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d sources; \
done
built_sources:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d built_sources; \
done ;
cppcheck:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d cppcheck; \
done
typefiles:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d typefiles; \
done
typedefs:
for d in $(SUBDIRS); do \
$(MAKE) -C $$d typedefs; \
done
aqbanking-6.9.1/src/test/ 0000755 0001750 0001750 00000000000 15131211176 012227 5 0000000 0000000 aqbanking-6.9.1/src/test/Makefile.in 0000644 0001750 0001750 00000061310 15131211121 014203 0000000 0000000 # Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# 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.
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@WITH_GWENGUI_GTK2_FALSE@noinst_PROGRAMS = abtest$(EXEEXT) \
@WITH_GWENGUI_GTK2_FALSE@ imptest$(EXEEXT)
@WITH_GWENGUI_GTK2_TRUE@noinst_PROGRAMS = abtest$(EXEEXT) \
@WITH_GWENGUI_GTK2_TRUE@ imptest$(EXEEXT) \
@WITH_GWENGUI_GTK2_TRUE@ test-dlg-setup$(EXEEXT)
subdir = src/test
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \
$(top_srcdir)/m4/as-scrub-include.m4 \
$(top_srcdir)/m4/distri.m4 $(top_srcdir)/m4/gwenhywfar.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/os.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
am_abtest_OBJECTS = abtest.$(OBJEXT)
abtest_OBJECTS = $(am_abtest_OBJECTS)
am__DEPENDENCIES_1 =
abtest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
am_imptest_OBJECTS = imptest.$(OBJEXT)
imptest_OBJECTS = $(am_imptest_OBJECTS)
imptest_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am__test_dlg_setup_SOURCES_DIST = test-dlg-setup.c
@WITH_GWENGUI_GTK2_TRUE@am_test_dlg_setup_OBJECTS = \
@WITH_GWENGUI_GTK2_TRUE@ test-dlg-setup.$(OBJEXT)
test_dlg_setup_OBJECTS = $(am_test_dlg_setup_OBJECTS)
@WITH_GWENGUI_GTK2_TRUE@test_dlg_setup_DEPENDENCIES = \
@WITH_GWENGUI_GTK2_TRUE@ $(am__DEPENDENCIES_1) \
@WITH_GWENGUI_GTK2_TRUE@ $(am__DEPENDENCIES_1) \
@WITH_GWENGUI_GTK2_TRUE@ $(am__DEPENDENCIES_1) \
@WITH_GWENGUI_GTK2_TRUE@ $(am__DEPENDENCIES_1)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/abtest.Po ./$(DEPDIR)/imptest.Po \
./$(DEPDIR)/test-dlg-setup.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(abtest_SOURCES) $(imptest_SOURCES) \
$(test_dlg_setup_SOURCES)
DIST_SOURCES = $(abtest_SOURCES) $(imptest_SOURCES) \
$(am__test_dlg_setup_SOURCES_DIST)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADD_ACLOCAL_FLAGS = @ADD_ACLOCAL_FLAGS@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AQBANKING_CLI_VERSION_STRING = @AQBANKING_CLI_VERSION_STRING@
AQBANKING_FINTS_VERSION_STRING = @AQBANKING_FINTS_VERSION_STRING@
AQBANKING_SO_AGE = @AQBANKING_SO_AGE@
AQBANKING_SO_CURRENT = @AQBANKING_SO_CURRENT@
AQBANKING_SO_EFFECTIVE = @AQBANKING_SO_EFFECTIVE@
AQBANKING_SO_REVISION = @AQBANKING_SO_REVISION@
AQBANKING_VERSION_BUILD = @AQBANKING_VERSION_BUILD@
AQBANKING_VERSION_FULL_STRING = @AQBANKING_VERSION_FULL_STRING@
AQBANKING_VERSION_MAJOR = @AQBANKING_VERSION_MAJOR@
AQBANKING_VERSION_MINOR = @AQBANKING_VERSION_MINOR@
AQBANKING_VERSION_PATCHLEVEL = @AQBANKING_VERSION_PATCHLEVEL@
AQBANKING_VERSION_RELEASE_STRING = @AQBANKING_VERSION_RELEASE_STRING@
AQBANKING_VERSION_STRING = @AQBANKING_VERSION_STRING@
AQBANKING_VERSION_TAG = @AQBANKING_VERSION_TAG@
AQEBICS_CFLAGS = @AQEBICS_CFLAGS@
AQEBICS_LIBS = @AQEBICS_LIBS@
AR = @AR@
AS = @AS@
ASTYLE = @ASTYLE@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATETIME = @DATETIME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DOXYGEN_DEFINE = @DOXYGEN_DEFINE@
DOXYGEN_EXCLUDE_PATTERNS = @DOXYGEN_EXCLUDE_PATTERNS@
DOXYGEN_FILE_PATTERNS = @DOXYGEN_FILE_PATTERNS@
DOXYGEN_INPUT = @DOXYGEN_INPUT@
DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILECMD = @FILECMD@
GREP = @GREP@
GTK2_CFLAGS = @GTK2_CFLAGS@
GTK2_LIBS = @GTK2_LIBS@
GWENGUI_GTK2_CFLAGS = @GWENGUI_GTK2_CFLAGS@
GWENGUI_GTK2_LIBS = @GWENGUI_GTK2_LIBS@
GWENHYWFAR_MINIMUM_VERSION = @GWENHYWFAR_MINIMUM_VERSION@
HAVE_GWENGUI_GTK2 = @HAVE_GWENGUI_GTK2@
HAVE_I18N = @HAVE_I18N@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBXML_CFLAGS = @LIBXML_CFLAGS@
LIBXML_LIBS = @LIBXML_LIBS@
LIBXSLT_CFLAGS = @LIBXSLT_CFLAGS@
LIBXSLT_LIBS = @LIBXSLT_LIBS@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MAKE_DLL_TARGET = @MAKE_DLL_TARGET@
MAKE_I18N_FILES = @MAKE_I18N_FILES@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_SUPPORTS_QT = @MSGFMT_SUPPORTS_QT@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OSYSTEM = @OSYSTEM@
OS_TYPE = @OS_TYPE@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
RANLIB = @RANLIB@
RC = @RC@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
STRIPALL = @STRIPALL@
TUTORIALS = @TUTORIALS@
USE_DOT = @USE_DOT@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
XMLMERGE = @XMLMERGE@
XMLSEC_CFLAGS = @XMLSEC_CFLAGS@
XMLSEC_LIBS = @XMLSEC_LIBS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
all_includes = @all_includes@
all_libraries = @all_libraries@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
aq_distrib_name = @aq_distrib_name@
aq_distrib_tag = @aq_distrib_tag@
aq_distrib_version = @aq_distrib_version@
aqbanking_backends = @aqbanking_backends@
aqbanking_cfg_searchdir = @aqbanking_cfg_searchdir@
aqbanking_data_searchdir = @aqbanking_data_searchdir@
aqbanking_headerdir = @aqbanking_headerdir@
aqbanking_headerdir_am = @aqbanking_headerdir_am@
aqbanking_includes = @aqbanking_includes@
aqbanking_internal_libs = @aqbanking_internal_libs@
aqbanking_ldflags = @aqbanking_ldflags@
aqbanking_libs = @aqbanking_libs@
aqbanking_locale_searchdir = @aqbanking_locale_searchdir@
aqbanking_modules = @aqbanking_modules@
aqbanking_pkgdatadir = @aqbanking_pkgdatadir@
aqbanking_plugin_searchdir = @aqbanking_plugin_searchdir@
aqbanking_plugindir = @aqbanking_plugindir@
aqbanking_plugins_backends_dirs = @aqbanking_plugins_backends_dirs@
aqbanking_plugins_backends_libs = @aqbanking_plugins_backends_libs@
aqbanking_plugins_bankinfo_dirs = @aqbanking_plugins_bankinfo_dirs@
aqbanking_plugins_bankinfo_libs = @aqbanking_plugins_bankinfo_libs@
aqbanking_plugins_imexporters_dirs = @aqbanking_plugins_imexporters_dirs@
aqbanking_plugins_imexporters_libs = @aqbanking_plugins_imexporters_libs@
aqbanking_plugins_parsers_dirs = @aqbanking_plugins_parsers_dirs@
aqbanking_symlinkdir = @aqbanking_symlinkdir@
aqbanking_sys_is_windows = @aqbanking_sys_is_windows@
aqbankingpp_modules = @aqbankingpp_modules@
aqebics_datadir = @aqebics_datadir@
aqebics_includes = @aqebics_includes@
aqebics_internal_libs = @aqebics_internal_libs@
aqebics_ldflags = @aqebics_ldflags@
aqebics_libs = @aqebics_libs@
aqfints_datadir = @aqfints_datadir@
aqhbci_datadir = @aqhbci_datadir@
aqhbci_includes = @aqhbci_includes@
aqhbci_internal_libs = @aqhbci_internal_libs@
aqhbci_ldflags = @aqhbci_ldflags@
aqhbci_libs = @aqhbci_libs@
aqofxconnect_includes = @aqofxconnect_includes@
aqofxconnect_internal_libs = @aqofxconnect_internal_libs@
aqofxconnect_libs = @aqofxconnect_libs@
aqpaypal_includes = @aqpaypal_includes@
aqpaypal_internal_libs = @aqpaypal_internal_libs@
aqpaypal_libs = @aqpaypal_libs@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
docpath = @docpath@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
gmp_libs = @gmp_libs@
gwenhywfar_bindir = @gwenhywfar_bindir@
gwenhywfar_dir = @gwenhywfar_dir@
gwenhywfar_has_crypt = @gwenhywfar_has_crypt@
gwenhywfar_headers = @gwenhywfar_headers@
gwenhywfar_includes = @gwenhywfar_includes@
gwenhywfar_libs = @gwenhywfar_libs@
gwenhywfar_plugins = @gwenhywfar_plugins@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
i18n_libs = @i18n_libs@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
typemaker2_exe = @typemaker2_exe@
visibility_cflags = @visibility_cflags@
with_aqebics = @with_aqebics@
with_aqhbci = @with_aqhbci@
AM_CPPFLAGS = -I$(top_srcdir)/src/libs -I$(top_builddir)/src/libs $(gwenhywfar_includes) -I$(srcdir)/.. $(GWENGUI_GTK2_CFLAGS) $(GTK2_CFLAGS)
abtest_SOURCES = abtest.c
abtest_LDADD = $(aqbanking_internal_libs) $(gwenhywfar_libs)
imptest_SOURCES = imptest.c
imptest_LDADD = $(aqbanking_internal_libs) $(gwenhywfar_libs)
@WITH_GWENGUI_GTK2_TRUE@test_dlg_setup_SOURCES = test-dlg-setup.c
@WITH_GWENGUI_GTK2_TRUE@test_dlg_setup_LDADD = \
@WITH_GWENGUI_GTK2_TRUE@ $(aqbanking_internal_libs) \
@WITH_GWENGUI_GTK2_TRUE@ $(gwenhywfar_libs) \
@WITH_GWENGUI_GTK2_TRUE@ $(GWENGUI_GTK2_LIBS) \
@WITH_GWENGUI_GTK2_TRUE@ $(GTK2_LIBS)
EXTRA_DIST = test-dlg-setup.c
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/test/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu src/test/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstPROGRAMS:
@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
abtest$(EXEEXT): $(abtest_OBJECTS) $(abtest_DEPENDENCIES) $(EXTRA_abtest_DEPENDENCIES)
@rm -f abtest$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(abtest_OBJECTS) $(abtest_LDADD) $(LIBS)
imptest$(EXEEXT): $(imptest_OBJECTS) $(imptest_DEPENDENCIES) $(EXTRA_imptest_DEPENDENCIES)
@rm -f imptest$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(imptest_OBJECTS) $(imptest_LDADD) $(LIBS)
test-dlg-setup$(EXEEXT): $(test_dlg_setup_OBJECTS) $(test_dlg_setup_DEPENDENCIES) $(EXTRA_test_dlg_setup_DEPENDENCIES)
@rm -f test-dlg-setup$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_dlg_setup_OBJECTS) $(test_dlg_setup_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abtest.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imptest.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dlg-setup.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@echo '# dummy' >$@-t && $(am__mv) $@-t $@
am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
-rm -f ./$(DEPDIR)/abtest.Po
-rm -f ./$(DEPDIR)/imptest.Po
-rm -f ./$(DEPDIR)/test-dlg-setup.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/abtest.Po
-rm -f ./$(DEPDIR)/imptest.Po
-rm -f ./$(DEPDIR)/test-dlg-setup.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am
.PRECIOUS: Makefile
#cpptest_SOURCES=cpptest.cpp
#cpptest_LDADD = $(aqbanking_internal_libs) $(top_builddir)/src/libs/aqbanking++/libaqbankingpp.la $(gwenhywfar_libs) -lstdc++
sources:
for f in $(abtest_la_SOURCES); do \
echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \
done
built_sources:
cppcheck:
typefiles:
typedefs:
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
aqbanking-6.9.1/src/test/abtest.c 0000664 0001750 0001750 00000073151 14043610745 013614 0000000 0000000
#include
#include
#include
#include
#include
#include
#include
#include