You can subscribe to this list here.
| 2007 |
Jan
(30) |
Feb
(42) |
Mar
(5) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 |
Jan
(7) |
Feb
(23) |
Mar
|
Apr
(41) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2010 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(10) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(14) |
Oct
|
Nov
|
Dec
|
| 2014 |
Jan
|
Feb
|
Mar
|
Apr
(16) |
May
|
Jun
|
Jul
(13) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2019 |
Jan
(18) |
Feb
(7) |
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(3) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(6) |
|
From: <ai...@us...> - 2019-12-27 23:16:09
|
Revision: 239
http://sourceforge.net/p/lasi/code/239
Author: airwin
Date: 2019-12-27 23:16:00 +0000 (Fri, 27 Dec 2019)
Log Message:
-----------
Remove ancient (and unused) macro TRANSFORM_VERSION
Modified Paths:
--------------
trunk/cmake/modules/lasi.cmake
Modified: trunk/cmake/modules/lasi.cmake
===================================================================
--- trunk/cmake/modules/lasi.cmake 2019-12-21 19:06:37 UTC (rev 238)
+++ trunk/cmake/modules/lasi.cmake 2019-12-27 23:16:00 UTC (rev 239)
@@ -18,25 +18,6 @@
set(EXEEXT .exe)
endif(WIN32 OR MINGW)
-# Useful macro for helping to do version tests. May be needed for future
-# development of CMake build system for libLASi.
-
-macro(TRANSFORM_VERSION _numerical_result _version)
-# _version must be a period-delimited triplet string of the form
-# "major.minor.patch".
-# This macro transforms that into a numerical result that can be compared.
-if(${_version} MATCHES "^[0-9]*\\.[0-9]*\\.[0-9]*$")
- string(REGEX REPLACE "^([0-9]*)\\.[0-9]*\\.[0-9]*$" "\\1" _major ${_version})
- string(REGEX REPLACE "^[0-9]*\\.([0-9]*)\\.[0-9]*$" "\\1" _minor ${_version})
- string(REGEX REPLACE "^[0-9]*\\.[0-9]*\\.([0-9]*)$" "\\1" _patch ${_version})
- math(EXPR ${_numerical_result}
- "${_major}*1000000 + ${_minor}*1000 + ${_patch}
- ")
-else(${_version} MATCHES "^[0-9]*\\.[0-9]*\\.[0-9]*$")
- set(${_numerical_result} 0)
-endif(${_version} MATCHES "^[0-9]*\\.[0-9]*\\.[0-9]*$")
-endmacro(TRANSFORM_VERSION)
-
# On windows systems the math library is not separated so do not specify
# it unless you are on a non-windows system.
if(NOT WIN32)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-12-21 19:06:38
|
Revision: 238
http://sourceforge.net/p/lasi/code/238
Author: airwin
Date: 2019-12-21 19:06:37 +0000 (Sat, 21 Dec 2019)
Log Message:
-----------
Bump version to 1.1.4 as a preliminary to the release of 1.1.4
N.B. this release consists exclusively of build-system updates and
fixes. Therefore, since no C++ code has been changed, the library
LASi_SOVERSION and LASi_VERSION remain the same.
Modified Paths:
--------------
trunk/README
trunk/cmake/modules/lasi_version.cmake
Modified: trunk/README
===================================================================
--- trunk/README 2019-12-20 22:44:17 UTC (rev 237)
+++ trunk/README 2019-12-21 19:06:37 UTC (rev 238)
@@ -28,7 +28,7 @@
For example programs that uses libLASi, please see the examples
directory located in the install tree at
$prefix/share/lasi$version/examples where $prefix is the installation
-prefix and $version is the version of lasi (1.1.3 at the time of
+prefix and $version is the version of lasi (1.1.4 at the time of
writing). An example is provided which tests that libLASi is robust
against some common font issues such as a missing glyph or pango
deciding to use a pure bitmapped font such as the popular Noto Color
Modified: trunk/cmake/modules/lasi_version.cmake
===================================================================
--- trunk/cmake/modules/lasi_version.cmake 2019-12-20 22:44:17 UTC (rev 237)
+++ trunk/cmake/modules/lasi_version.cmake 2019-12-21 19:06:37 UTC (rev 238)
@@ -1,12 +1,12 @@
# cmake/modules/lasi_version.cmake
# Version data that need review and possible modification for each release.
-set(VERSION 1.1.3)
+set(VERSION 1.1.4)
# CPack version numbers for release tarball name.
set(CPACK_PACKAGE_VERSION_MAJOR 1)
set(CPACK_PACKAGE_VERSION_MINOR 1)
-set(CPACK_PACKAGE_VERSION_PATCH 3)
+set(CPACK_PACKAGE_VERSION_PATCH 4)
# libLASi version information.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-12-20 22:44:18
|
Revision: 237
http://sourceforge.net/p/lasi/code/237
Author: airwin
Date: 2019-12-20 22:44:17 +0000 (Fri, 20 Dec 2019)
Log Message:
-----------
Update the cumulated release notes for the last several releases to be consistent with the current release notes
After this commit, any further changes to README.release should also
be consistently made in the 1.1.4 section of README.cumulated_release.
Modified Paths:
--------------
trunk/README.cumulated_release
Modified: trunk/README.cumulated_release
===================================================================
--- trunk/README.cumulated_release 2019-12-20 22:40:05 UTC (rev 236)
+++ trunk/README.cumulated_release 2019-12-20 22:44:17 UTC (rev 237)
@@ -1,3 +1,258 @@
+libLASi Release 1.1.4
+~~~~~~~~~~~~~~~~~~~~~
+This is a maintenance release of libLASi that reflect the ongoing
+efforts of the libLASi developers to respond to bug reports for this
+stable and convenient library for creating PostScript documents that
+can contain characters from any of the script and symbol blocks
+supported in Unicode and by the Pango layout engine.
+
+If you encounter a problem with libLASi, then please send a bug report to
+the libLASi developers via the lasi-devel mailing list described at
+http://lists.sourceforge.net/lists/listinfo/lasi-devel.
+
+Please see the license under which this software is distributed (LGPL), and
+the disclaimer of all warranties, given in the COPYING.LIB file.
+
+INDEX
+
+1. OFFICIAL NOTICES FOR USERS
+
+1.1 CMake version compatibility
+1.2 Need help getting rid of deprecation build warnings
+
+2. Changes relative to our previous release
+
+2.1 Improve libLASi's find capability for pkg-config
+2.2 Add PREFER_EXTERNAL_STATIC option
+2.3 Implement LASI_LINK_PUBLIC option
+2.4 Implement the configured test_tarball.sh(.in) bash script
+2.5 Fix libLASi underlinking issues
+
+3. Testing of this release.
+
+END of INDEX
+
+1. OFFICIAL NOTICES FOR USERS
+
+Our build system is implemented using CMake. The minimum version of
+CMake we currently allow is 3.13.4 on all platforms, and currently the
+latest version of CMake that has been officially released is 3.16.2.
+
+Note, that as of the time of this release we have the following
+free distribution packaging support for modern CMake versions:
+
+* Cygwin: 3.14.5 from <https://cygwin.com/cgi-bin2/package-grep.cgi>
+* MinGW-w64/MSYS2: 3.15.5 from <http://repo.msys2.org/mingw/x86_64/>
+* Fink: 3.11.0 from <http://pdb.finkproject.org/pdb/browse.php?name=cmake>
+* MacPorts: 3.16.2 from <https://www.macports.org/ports.php?by=name&substr=cmake>
+* Homebrew: 3.16.1 from <https://formulae.brew.sh/formula/cmake>
+* Debian Stable=Buster: 3.13.4 (from <https://packages.debian.org/buster/cmake>)
+* Other modern Linux distributions: likely 3.13.4 or greater since they typically package later versions of CMake than are available for Debian Stable.
+
+It appears from the above table that binary packages for CMake for our
+minimum allowed version (3.13.4) should be available soon or
+immediately on most modern free software distributions. However,
+libLASi users of distributions that do not package 3.13.4 or later
+(e.g., the current dated status of CMake packaging on Fink)
+will need to build CMake 3.13.4 or later for themselves before they
+build libLASi-1.1.4.
+
+1.2 Need help getting rid of deprecation build warnings
+
+This release has deprecation warning build issues which are
+
+* "warning: dynamic exception specifications are deprecated in C++11 [-Wdeprecated]"
+
+* "warning: ‘PangoContext* pango_ft2_get_context(double, double)’ is deprecated: Use 'pango_font_map_create_context' instead [-Wdeprecated-declarations]"
+
+* "warning: ‘FT_FaceRec_* pango_ft2_font_get_face(PangoFont*)’ is deprecated: Use 'pango_fc_font_lock_face' instead [-Wdeprecated-declarations]"
+
+All of these are beyond my current C++ and pango skill level to fix so
+help with cleaning up any of these deprecation build warnings messages
+would be much appreciated!
+
+2. Changes relative to our previous release
+
+2.1 Improve libLASi's find capability for pkg-config
+
+I have dropped our dated and buggy cmake/modules/FindPkgConfig.cmake
+find capability for pkg-config in favour of the well-maintained CMake
+upstream version of FindPkgConfig.cmake. At least one positive result
+of this change is that the CMake-wrapped pkg-config results match
+those of the equivalent pkg-config command rather than incorrectly
+mixing static and shared library results together (as I observed in
+one particular test case before I dropped
+cmake/modules/FindPkgConfig.cmake).
+
+2.2 Add PREFER_EXTERNAL_STATIC option
+
+This option is only allowed to be ON for the case where static internal libraries
+are being built. The motivation for this option is to reduce external library
+dependencies to just the run time libraries. However, this option is
+set to OFF by default. The reason for this is
+
+readelf -d tarball_build_dir/examples/MissingGlyphExample |grep NEEDED
+
+(and similarly for the other examples) shows that some
+shared libraries from the pango/cairo subset of the GTK+ stack of
+libraries are not eliminated by this option on the Debian Buster platform, namely
+
+ 0x0000000000000001 (NEEDED) Shared library: [libpangoft2-1.0.so.0]
+ 0x0000000000000001 (NEEDED) Shared library: [libgraphite2.so.3]
+ 0x0000000000000001 (NEEDED) Shared library: [libpango-1.0.so.0]
+
+The fundamental reason for this issue is the pangoft2-1.0, graphite2,
+and pango libraries are not available in static form for the Debian Buster
+platform. As a result of this platform deficiency
+
+ldd -r tarball_build_dir/examples/MissingGlyphExample
+
+(and similarly for the other examples) shows that the run-time linker
+links to a very large list of shared libraries which are dependencies
+of the above list which completely subverts the motivation for turning
+this option ON!
+
+Despite this Debian Buster platform issue, we have implemented this
+option since it should still be useful for those platforms that supply
+static versions of *all* the pango/cairo subset of libraries linked
+directly or indirectly by libLASi.
+
+2.3 Implement LASI_LINK_PUBLIC option
+
+This option specifies whether libLASi is linked against external
+libraries in a PUBLIC (ON) or PRIVATE (OFF) way, i.e., whether the
+target_link_libraries command for libLASi uses the PUBLIC (ON) or
+PRIVATE (OFF) signature (this only affects the CMake-configured
+linking of the examples in the build-tree) and whether the configured
+lasi.pc file that controls the linking of the examples in the install
+tree and all external application, libraries, and dll's that link
+against libLASi is configured with the "Requires:" (ON) or
+"Requires.private:" (OFF) signature for the external libraries. So in
+effect, ON means means all applications, libraries, and dll's that
+link to libLASI are also linked against its external libraries for the
+shared case and OFF means the opposite for the shared case. In
+addition, the CMake-based build system for libLASi and its configured
+pkg-config result insures all applications, libraries, and dll's that
+link to libLASI are going to be linked to its external libraries for
+the static case (which, of course, is a requirement for that case).
+
+From a discussion of the target_link_libraries PRIVATE signature on
+the CMake mailing list I infer -DLASI_LINK_PUBLIC=OFF should work for
+essentially all modern Windows and Unix platforms. I have therefore
+adopted a default value of OFF for LASI_LINK_PUBLIC on all platforms.
+However, the only downside to setting -DLASI_LINK_PUBLIC=ON is
+overlinking issues. Such issues are important for free software
+distributions (since overlinking implies unnecessary rebuilding of
+packages and makes package transitions due to an API change much more
+difficult to implement) but should not be an important issue for
+individual use of libLASi. So if the default -DLASI_LINK_PUBLIC=OFF
+does not work try -DLASI_LINK_PUBLIC=ON instead.
+
+2.4 Implement the configured test_tarball.sh(.in) bash script
+
+This script tests a source tarball (created with "make all" and "make package_source")
+for a given configuration of libLASi. See README.Release_Manager_Cookbook
+for directions concerning how to run this script. The tests included in this
+script are the following:
+
+* Configure, build, and install libLASi.
+
+ This build includes building all the examples, running those
+ examples, and converting the resulting *.eps form of results to the
+ *.png results using inkscape.
+
+* Display the example results (in both the *.eps and *.png forms)
+ using pqiv to confirm there are no obvious rendering issues in these
+ results.
+
+* Run ldd -r for all built examples
+
+* Run all built examples in two different ways with valgrind and
+ compare the *.eps results with the equivalent results created by the
+ above original build.
+
+* Run ctest and compare its *.eps results with the equivalent results
+ created by the above original build.
+
+* Build the installed examples.
+
+* Run ldd -r for those examples.
+
+* Run those examples in two different ways with valgrind and compare
+ the *.eps results with the equivalent results created by theabove
+ original build.
+
+* Evaluate all these "internal" test results to make sure they worked properly.
+
+* If environment variables are set up properly to allow a special
+ comprehensive test of PLplot with the psttf and psttfc devices do
+ that comprehensive test and evaluate those results. This is an
+ important external test of libLASi since the psttf and psttf PLplot
+ devices depend strongly on that library, and this comprehensive test
+ evaluates those devices in a very large number of ways.
+
+2.5 Fix libLASi underlinking issues
+
+The issue (discovered by Luigi Baldoni on the "Tumbleweed" openSUSE platform)
+is that libLASi depends directly on symbols in the gobject-2.0 and glib-2.0
+libraries, but libLASi was not directly linked with those libraries before this fix. For
+most platforms (so far the only exception I know is the Baldoni platform) this
+direct underlinking issue was covered up by transitive linking of those
+libraries via the direct library dependencies of the pango library. That is, libLASi has
+always been linked directly to the pango library, and, for example, on
+Debian Buster we have
+
+software@merlin> pkg-config --libs pango
+-lpango-1.0 -lgobject-2.0 -lglib-2.0
+
+That is, on this platform libpango depends directly on the gobject-2.0
+and glib-2.0 libraries and this covers up the libLASi underlinking
+issue that has just been fixed. However, this pkg-config result which
+includes -lgobject-2.0 -lglib-2.0 apparently does not occur on
+Tumbleweed which exposes the libLASi underlinking bug that has just
+been fixed.
+
+The fix for this libLASi underlinking issue was necessarily made in
+two places. One place was to directly link libLASi with gobject-2.0
+and glib-2.0 when using our CMake-based build system to build libLASi.
+The other place was to modify the configured lasi.pc(.in) file (which
+controls builds of executables and shared objects that are linked to
+libLASi such as the traditional build of the installed libLASi
+examples and the CMake-based build of the PLplot psttf device) so the
+previous
+
+Requires: pangoft2,pango,freetype2
+
+line in that pkg-config file was replaced by either
+
+Requires: pangoft2,pango,freetype2,gobject-2.0,glib-2.0
+
+or
+
+Requires.private: pangoft2,pango,freetype2,gobject-2.0,glib-2.0
+
+depending respectively on whether LASI_LINK_PUBLIC was ON or OFF.
+
+3. Testing of this release.
+
+This release has been successfully built and comprehensively
+run-tested (following the prescription in
+README.Release_Manager_Cookbook) on Linux (Debian Buster) using
+CMake-3.13.4 (the minimum allowed version of CMake for libLASi) and
+3.16.2 (the latest released version of CMake at this time). For those
+tests, the Debian Buster packages containing the direct library
+dependencies of libLASi were libpango1.0-dev-1.42.4,
+libfreetype6-dev-2.9.1, and libglib2.0-dev-2.58.3.
+
+This release has not been tested (yet) on Mac OS X or Windows
+platforms because of my lack of access to those platforms. However, I
+anticipate no difficulties on those platforms since previous versions
+of libLASi have worked well on those platforms. In other words, the
+cross-platform nature of libLASi appears to have been well supported
+by CMake in the past, and should likely continue with this release as
+well. But if that view turns out to be too optimistic let me know
+(e.g., with a bug report)!
+
libLASi Release 1.1.3
~~~~~~~~~~~~~~~~~~~~~
This is a maintenance release of libLASi that reflect the ongoing
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-12-20 22:40:07
|
Revision: 236
http://sourceforge.net/p/lasi/code/236
Author: airwin
Date: 2019-12-20 22:40:05 +0000 (Fri, 20 Dec 2019)
Log Message:
-----------
Bump minimum allowed version of CMake from 3.13.2 to 3.13.4
I made this change because Debian Stable=Buster has packaged CMake
3.13.4, most modern Linux distributions of free software should likely
package that version or later, and Cygwin, MSYS2 on Windows and
MacPorts and HomeBrew (but not Fink) on Mac OS X package later
versions of CMake.
Modified Paths:
--------------
trunk/CMakeLists.txt
trunk/README.Release_Manager_Cookbook
trunk/README.release
trunk/www/index.html
Modified: trunk/CMakeLists.txt
===================================================================
--- trunk/CMakeLists.txt 2019-12-20 20:49:54 UTC (rev 235)
+++ trunk/CMakeLists.txt 2019-12-20 22:40:05 UTC (rev 236)
@@ -21,8 +21,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
-# Version 3.13.2 or above of cmake is required!
-CMAKE_MINIMUM_REQUIRED(VERSION 3.13.2)
+cmake_minimum_required(VERSION 3.13.4)
project(libLASi CXX)
Modified: trunk/README.Release_Manager_Cookbook
===================================================================
--- trunk/README.Release_Manager_Cookbook 2019-12-20 20:49:54 UTC (rev 235)
+++ trunk/README.Release_Manager_Cookbook 2019-12-20 22:40:05 UTC (rev 236)
@@ -26,7 +26,7 @@
export OLD_VERSION=1.1.3
export VERSION=1.1.4
-export MINIMUM_CMAKE_VERSION=3.13.2
+export MINIMUM_CMAKE_VERSION=3.13.4
export MAXIMUM_CMAKE_VERSION=3.16.2
(1) Create and test a preliminary tarball from trunk
Modified: trunk/README.release
===================================================================
--- trunk/README.release 2019-12-20 20:49:54 UTC (rev 235)
+++ trunk/README.release 2019-12-20 22:40:05 UTC (rev 236)
@@ -35,26 +35,26 @@
1. OFFICIAL NOTICES FOR USERS
Our build system is implemented using CMake. The minimum version of
-CMake we currently allow is 3.13.2 on all platforms, and currently the
+CMake we currently allow is 3.13.4 on all platforms, and currently the
latest version of CMake that has been officially released is 3.16.2.
Note, that as of the time of this release we have the following
free distribution packaging support for modern CMake versions:
-* Cygwin: 3.13.1 from <https://cygwin.com/cgi-bin2/package-grep.cgi>
-* MinGW-w64/MSYS2: 3.14.5 from <http://repo.msys2.org/mingw/x86_64/>
+* Cygwin: 3.14.5 from <https://cygwin.com/cgi-bin2/package-grep.cgi>
+* MinGW-w64/MSYS2: 3.15.5 from <http://repo.msys2.org/mingw/x86_64/>
* Fink: 3.11.0 from <http://pdb.finkproject.org/pdb/browse.php?name=cmake>
-* MacPorts: 3.14.5 from <https://www.macports.org/ports.php?by=name&substr=cmake>
-* Homebrew: 3.14.5 from <https://formulae.brew.sh/formula/cmake>
-* Debian Testing: 3.13.4 (from <https://packages.debian.org/buster/cmake> where Testing = Buster is scheduled to become the official Debian Stable release of Debian as of 2019-07-06, see <https://en.wikipedia.org/wiki/Debian_version_history>).
+* MacPorts: 3.16.2 from <https://www.macports.org/ports.php?by=name&substr=cmake>
+* Homebrew: 3.16.1 from <https://formulae.brew.sh/formula/cmake>
+* Debian Stable=Buster: 3.13.4 (from <https://packages.debian.org/buster/cmake>)
* Other modern Linux distributions: likely 3.13.4 or greater since they typically package later versions of CMake than are available for Debian Stable.
It appears from the above table that binary packages for CMake for our
-minimum allowed version (3.13.2) or later should be available soon or
+minimum allowed version (3.13.4) should be available soon or
immediately on most modern free software distributions. However,
-libLASi users of distributions that do not package 3.13.2 or later
-(e.g., the current dated status of CMake packaging on Cygwin and Fink)
-will need to build CMake 3.13.2 or later for themselves before they
+libLASi users of distributions that do not package 3.13.4 or later
+(e.g., the current dated status of CMake packaging on Fink)
+will need to build CMake 3.13.4 or later for themselves before they
build libLASi-1.1.4.
1.2 Need help getting rid of deprecation build warnings
@@ -235,12 +235,13 @@
3. Testing of this release.
-This release has been successfully built and run-tested (following the
-prescription in README.Release_Manager_Cookbook) on Linux (Debian
-Buster) using CMake-3.13.2 (the minimum allowed version of CMake for
-libLASi) and 3.16.2 (the latest released version of CMake at this
-time). For those tests, the Debian Buster packages containing the
-direct library dependencies of libLASi were libpango1.0-dev-1.42.4,
+This release has been successfully built and comprehensively
+run-tested (following the prescription in
+README.Release_Manager_Cookbook) on Linux (Debian Buster) using
+CMake-3.13.4 (the minimum allowed version of CMake for libLASi) and
+3.16.2 (the latest released version of CMake at this time). For those
+tests, the Debian Buster packages containing the direct library
+dependencies of libLASi were libpango1.0-dev-1.42.4,
libfreetype6-dev-2.9.1, and libglib2.0-dev-2.58.3.
This release has not been tested (yet) on Mac OS X or Windows
Modified: trunk/www/index.html
===================================================================
--- trunk/www/index.html 2019-12-20 20:49:54 UTC (rev 235)
+++ trunk/www/index.html 2019-12-20 22:40:05 UTC (rev 236)
@@ -134,7 +134,7 @@
distributions for Windows) are the recommended way for users to
gain access to the <b>LASi</b> software dependencies. For such
distributions, users need to install packages
- for <a href="http://www.cmake.org">CMake</a> (version 3.13.2 or
+ for <a href="http://www.cmake.org">CMake</a> (version 3.13.4 or
higher),
<a href="https://www.freedesktop.org/wiki/Software/pkg-config/">pkg-config</a>,
native build tools that depend on the chosen CMake generator, a C++
@@ -305,14 +305,14 @@
<ul>
<li>
- <b>CMake version</b> problems. You need version 3.13.2 or later
+ <b>CMake version</b> problems. You need version 3.13.4 or later
to build <b>LASi</b>. (Otherwise, the <code>cmake</code> step in
the
<a href="#unix_makefiles">"Unix Makefiles"</a>
procedure will error out). The latest versions of most
<a href="#free_software_distributions">free software distributions</a>
- should provide CMake version 3.13.2 or later, but if not or if you are
- using an older distribution, then we recommend you build 3.13.2 or
+ should provide CMake version 3.13.4 or later, but if not or if you are
+ using an older distribution, then we recommend you build 3.13.4 or
later from
<a href="https://cmake.org/download/">CMake source code</a>
using the older version of <code>cmake</code> that your
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-12-20 20:49:55
|
Revision: 235
http://sourceforge.net/p/lasi/code/235
Author: airwin
Date: 2019-12-20 20:49:54 +0000 (Fri, 20 Dec 2019)
Log Message:
-----------
Drop the NON_TRANSITIVE option and implement the LASI_LINK_PUBLIC option which supersedes it
LASI_LINK_PUBLIC specifies whether libLASi is linked against external
libraries in a PUBLIC (ON) or PRIVATE (OFF) way, i.e., whether the
target_link_libraries command for libLASi uses the PUBLIC (ON) or
PRIVATE (OFF) signature (this only affects the CMake-configured
linking of the examples in the build-tree) and whether the configured
lasi.pc file that controls the linking of the examples in the install
tree and all external application, libraries, and dll's that link
against libLASi is configured with the "Requires:" (ON) or
"Requires.private:" (OFF) signature for the external libraries. So in
effect, ON means means all applications, libraries, and dll's that
link to libLASI are also linked against its external libraries for the
shared case and OFF means the opposite for the shared case. In
addition, the CMake-based build system for libLASi and its configured
pkg-config result insures all applications, libraries, and dll's that
link to libLASI are going to be linked to its external libraries for
the static case (which, of course, is a requirement for that case).
Tested by: Alan W. Irwin <ai...@us...> on Linux
(Debian Buster) by following the preliminary testing procedure
as documented in README.Release_Manager_Cookbook.
Modified Paths:
--------------
trunk/CMakeLists.txt
trunk/README.Release_Manager_Cookbook
trunk/README.release
trunk/cmake/modules/lasi.cmake
trunk/examples/CMakeLists.txt
trunk/examples/Makefile.examples.in
trunk/src/CMakeLists.txt
Modified: trunk/CMakeLists.txt
===================================================================
--- trunk/CMakeLists.txt 2019-12-20 19:52:34 UTC (rev 234)
+++ trunk/CMakeLists.txt 2019-12-20 20:49:54 UTC (rev 235)
@@ -63,11 +63,11 @@
${CMAKE_CURRENT_BINARY_DIR}/config.h
)
-if(NON_TRANSITIVE)
+if(LASI_LINK_PUBLIC)
+ set(PC_REQUIRES_LINE "Requires: pangoft2,pango,freetype2,gobject-2.0,glib-2.0")
+else(LASI_LINK_PUBLIC)
set(PC_REQUIRES_LINE "Requires.private: pangoft2,pango,freetype2,gobject-2.0,glib-2.0")
-else(NON_TRANSITIVE)
- set(PC_REQUIRES_LINE "Requires: pangoft2,pango,freetype2,gobject-2.0,glib-2.0")
-endif(NON_TRANSITIVE)
+endif(LASI_LINK_PUBLIC)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/lasi.pc.in
Modified: trunk/README.Release_Manager_Cookbook
===================================================================
--- trunk/README.Release_Manager_Cookbook 2019-12-20 19:52:34 UTC (rev 234)
+++ trunk/README.Release_Manager_Cookbook 2019-12-20 20:49:54 UTC (rev 235)
@@ -2,6 +2,7 @@
SourceForge.
INDEX
+(0) Set some useful version-related environment variables
(1) Create and test a preliminary tarball from trunk
(2) Finish release-related trunk changes so they will be in the release
(3) Create and test the release tarball from trunk
@@ -17,6 +18,17 @@
(A2) Setting the correct date and time on your computer.
End of INDEX
+(0) Set some useful version-related environment variables
+
+Setting these environment variables make the remaining steps in the
+release process less prone to errors and also easier to document (as in this file)
+in a version-invariant way.
+
+export OLD_VERSION=1.1.3
+export VERSION=1.1.4
+export MINIMUM_CMAKE_VERSION=3.13.2
+export MAXIMUM_CMAKE_VERSION=3.16.2
+
(1) Create and test a preliminary tarball from trunk
This (extensive sets of tests) is just to make sure that the trunk version
@@ -26,20 +38,24 @@
Do the tests in (3) below using the old lasi version (since that version
has not been updated yet).
-export LASI_VERSION=1.1.3
+export LASI_VERSION=$OLD_VERSION
-Also to save a factor of two in time just execute 4 tests (with the minimum cmake version choice)
-rather than all 8 versions of the test since this is just a preliminary test to give
+To save a factor of two in time just execute 6 tests (with the minimum cmake version choice)
+rather than all 12 versions of the test since this is just a preliminary test to give
us some confidence that all is well at this stage.
+To save a very large factor in time also drop the PLplot component of this preliminary test
+export -n PLPLOT_CMAKE_PATH
+export -n PLPLOT_SOURCE_PREFIX
+
(2) Finish release-related trunk changes so they will be in the release
* set environment variable for version to make directions below
more generic.
-export LASI_VERSION=1.1.4
-# Should refer to first release in this release cycle, i.e., one after
-# last release for the last release.
+export LASI_VERSION=$VERSION
+# Should refer to the first revision in this release cycle, i.e., one revision
+# after the last revision of the previous release cycle.
export FIRST_REVISION_IN_CYCLE=r223
* Prepare a preliminary version of the ChangeLog file to see what
@@ -91,37 +107,37 @@
and developer configurations of the Doxygen documentation in the
source tree. For example,
-cd /home/software/lasi_svn/HEAD/build_dir
-# In case this not set.
-LASI_VERSION=1.1.4
+pushd /home/software/lasi_svn/HEAD/build_dir
+# Check LASI_VERSION is set properly
+echo $LASI_VERSION
# N.B. using the minimum version of cmake allowed by our build system.
-time (rm -rf /home/software/lasi_svn/HEAD/build_dir/* ~/lasi_svn/install; env PATH="/home/software/cmake/install-3.13.2/bin:$PATH" cmake -DCMAKE_INSTALL_PREFIX=/home/software/lasi_svn/install -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=ON ../lasi_2019 >& cmake.out)
+time (rm -rf /home/software/lasi_svn/HEAD/build_dir/* ~/lasi_svn/install; env PATH="/home/software/cmake/install-${MINIMUM_CMAKE_VERSION}/bin:$PATH" cmake -DCMAKE_INSTALL_PREFIX=/home/software/lasi_svn/install -DBUILD_SHARED_LIBS=ON ../lasi_2019 >& cmake.out)
# BUILD to assure documentation is built with results copied to source tree.
-make -j16 all >& all.out
+make -j18 all >& all.out
- Then build a preliminary version of the release tarball
+# Build a preliminary version of the release tarball
make package_source
-* Check that generated tarball by checking its table of contents as follows:
+# Check that generated tarball by checking its table of contents as follows:
tar ztvf libLASi-$LASI_VERSION.tar.gz |sed "s? *? ?g" |cut --delimiter=" " --fields="6-" |less
-* Test that tarball
+# Test that tarball
# Setup the test by creating the following environment variables:
export LASI_VERSION
-export PARALLEL_OPTION=-j16
+export PARALLEL_OPTION=-j18
-# PLplot-related environment variables:
-# N.B. if any one of these are not set, the script skips the special PLplot comprehensive test
-# that is designed to thoroughly test the PLplot psttf and psttfc devices and therefore libLASi
-# (since those devices depend on that library).
+# Set PLplot-related environment variables.
+# N.B. if either of PLPLOT_CMAKE_PATH or PLPLOT_SOURCE_PREFIX are not set below
+# the script ignores the important PLplot component of
+# libLASI testing.
# Use minimum allowed version of CMake for PLplot during special comprehensive test
# of PLplot that externally tests libLASi.
-export PLPLOT_CMAKE_PATH=/home/software/cmake/install-3.13.2/bin
+export PLPLOT_CMAKE_PATH=/home/software/cmake/install-${MINIMUM_CMAKE_VERSION}/bin
# Choose this prefix to assure that the PLplot source tree has
# a blank in its pathname. This combined with choosing a comprehensive test prefix
@@ -130,15 +146,21 @@
# comprehensive test.
export PLPLOT_SOURCE_PREFIX="/home/software/plplot/HEAD/plplot blank .git"
-./test_tarball.sh /home/software/cmake/install-3.13.2/bin -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=ON
-./test_tarball.sh /home/software/cmake/install-3.13.2/bin -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=OFF
-./test_tarball.sh /home/software/cmake/install-3.13.2/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=OFF
-./test_tarball.sh /home/software/cmake/install-3.13.2/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=ON
-./test_tarball.sh /home/software/cmake/install-3.14.5/bin -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=ON
-./test_tarball.sh /home/software/cmake/install-3.14.5/bin -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=OFF
-./test_tarball.sh /home/software/cmake/install-3.14.5/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=OFF
-./test_tarball.sh /home/software/cmake/install-3.14.5/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=ON
+./test_tarball.sh /home/software/cmake/install-${MINIMUM_CMAKE_VERSION}/bin -DBUILD_SHARED_LIBS=ON -DLASI_LINK_PUBLIC=OFF
+./test_tarball.sh /home/software/cmake/install-${MINIMUM_CMAKE_VERSION}/bin -DBUILD_SHARED_LIBS=ON -DLASI_LINK_PUBLIC=ON
+./test_tarball.sh /home/software/cmake/install-${MINIMUM_CMAKE_VERSION}/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=OFF -DLASI_LINK_PUBLIC=OFF
+./test_tarball.sh /home/software/cmake/install-${MINIMUM_CMAKE_VERSION}/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=OFF -DLASI_LINK_PUBLIC=ON
+./test_tarball.sh /home/software/cmake/install-${MINIMUM_CMAKE_VERSION}/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=ON -DLASI_LINK_PUBLIC=OFF
+./test_tarball.sh /home/software/cmake/install-${MINIMUM_CMAKE_VERSION}/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=ON -DLASI_LINK_PUBLIC=ON
+
+./test_tarball.sh /home/software/cmake/install-${MAXIMUM_CMAKE_VERSION}/bin -DBUILD_SHARED_LIBS=ON -DLASI_LINK_PUBLIC=OFF
+./test_tarball.sh /home/software/cmake/install-${MAXIMUM_CMAKE_VERSION}/bin -DBUILD_SHARED_LIBS=ON -DLASI_LINK_PUBLIC=ON
+./test_tarball.sh /home/software/cmake/install-${MAXIMUM_CMAKE_VERSION}/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=OFF -DLASI_LINK_PUBLIC=OFF
+./test_tarball.sh /home/software/cmake/install-${MAXIMUM_CMAKE_VERSION}/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=OFF -DLASI_LINK_PUBLIC=ON
+./test_tarball.sh /home/software/cmake/install-${MAXIMUM_CMAKE_VERSION}/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=ON -DLASI_LINK_PUBLIC=OFF
+./test_tarball.sh /home/software/cmake/install-${MAXIMUM_CMAKE_VERSION}/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=ON -DLASI_LINK_PUBLIC=ON
+
# If any of these 8 tests reveal that trunk changes are necessary, do
# those, retest, and iterate until perfect results are obtained.
Modified: trunk/README.release
===================================================================
--- trunk/README.release 2019-12-20 19:52:34 UTC (rev 234)
+++ trunk/README.release 2019-12-20 20:49:54 UTC (rev 235)
@@ -24,7 +24,7 @@
2.1 Improve libLASi's find capability for pkg-config
2.2 Add PREFER_EXTERNAL_STATIC option
-2.3 Add NON_TRANSITIVE option
+2.3 Implement LASI_LINK_PUBLIC option
2.4 Implement the configured test_tarball.sh(.in) bash script
2.5 Fix libLASi underlinking issues
@@ -36,7 +36,7 @@
Our build system is implemented using CMake. The minimum version of
CMake we currently allow is 3.13.2 on all platforms, and currently the
-latest version of CMake that has been officially released is 3.14.5.
+latest version of CMake that has been officially released is 3.16.2.
Note, that as of the time of this release we have the following
free distribution packaging support for modern CMake versions:
@@ -117,29 +117,36 @@
static versions of *all* the pango/cairo subset of libraries linked
directly or indirectly by libLASi.
-2.3 Add NON_TRANSITIVE option
+2.3 Implement LASI_LINK_PUBLIC option
-This option is only allowed to be ON for the case where shared
-internal libraries are being built. It specifies whether linking
-should just be to the libraries which are direct dependencies of the
-object being linked (ON) or libraries which are both direct and
-indirect dependencies of the object being linked (OFF). Setting this
-option to ON avoids overlinking, but this is a "would be nice" rather
-than essential. Therefore if ON is not working correctly for any
-platform try specifying OFF.
+This option specifies whether libLASi is linked against external
+libraries in a PUBLIC (ON) or PRIVATE (OFF) way, i.e., whether the
+target_link_libraries command for libLASi uses the PUBLIC (ON) or
+PRIVATE (OFF) signature (this only affects the CMake-configured
+linking of the examples in the build-tree) and whether the configured
+lasi.pc file that controls the linking of the examples in the install
+tree and all external application, libraries, and dll's that link
+against libLASi is configured with the "Requires:" (ON) or
+"Requires.private:" (OFF) signature for the external libraries. So in
+effect, ON means means all applications, libraries, and dll's that
+link to libLASI are also linked against its external libraries for the
+shared case and OFF means the opposite for the shared case. In
+addition, the CMake-based build system for libLASi and its configured
+pkg-config result insures all applications, libraries, and dll's that
+link to libLASI are going to be linked to its external libraries for
+the static case (which, of course, is a requirement for that case).
-The NON_TRANSITIVE option essentially affects just how external
-objects (including the installed libLASi examples and the PLplot psttf
-device driver) link to libLASi using lasi.pc and pkg-config (directly
-or indirectly via CMake). (The option also affects how the link
-interfaces of the test_executables is configured by the CMake-based
-build system, but that is essentially just a matter of style since
-those interfaces are unused, i.e., no object links to those
-executables.) In particular, the NON_TRANSITIVE option does not
-affect how libLASi itself is linked to external libraries using
-pkg-config since it is assumed the *.pc files associated with those
-external libraries are configured properly for whatever transitive or
-non-transitive linking model is appropriate for the platform.
+From a discussion of the target_link_libraries PRIVATE signature on
+the CMake mailing list I infer -DLASI_LINK_PUBLIC=OFF should work for
+essentially all modern Windows and Unix platforms. I have therefore
+adopted a default value of OFF for LASI_LINK_PUBLIC on all platforms.
+However, the only downside to setting -DLASI_LINK_PUBLIC=ON is
+overlinking issues. Such issues are important for free software
+distributions (since overlinking implies unnecessary rebuilding of
+packages and makes package transitions due to an API change much more
+difficult to implement) but should not be an important issue for
+individual use of libLASi. So if the default -DLASI_LINK_PUBLIC=OFF
+does not work try -DLASI_LINK_PUBLIC=ON instead.
2.4 Implement the configured test_tarball.sh(.in) bash script
@@ -218,35 +225,24 @@
line in that pkg-config file was replaced by either
-Requires.private: pangoft2,pango,freetype2,gobject-2.0,glib-2.0
+Requires: pangoft2,pango,freetype2,gobject-2.0,glib-2.0
or
-Requires: pangoft2,pango,freetype2,gobject-2.0,glib-2.0
+Requires.private: pangoft2,pango,freetype2,gobject-2.0,glib-2.0
-depending respectively on whether NON_TRANSITIVE was true or not.
+depending respectively on whether LASI_LINK_PUBLIC was ON or OFF.
3. Testing of this release.
This release has been successfully built and run-tested (following the
-prescription in README.Release_Manager_Cookbook) for the following
-major configurations
+prescription in README.Release_Manager_Cookbook) on Linux (Debian
+Buster) using CMake-3.13.2 (the minimum allowed version of CMake for
+libLASi) and 3.16.2 (the latest released version of CMake at this
+time). For those tests, the Debian Buster packages containing the
+direct library dependencies of libLASi were libpango1.0-dev-1.42.4,
+libfreetype6-dev-2.9.1, and libglib2.0-dev-2.58.3.
-* -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=ON (build shared internal libraries with non-transitive linking)
-
-* -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=OFF (build shared internal libraries with transitive linking)
-
-* -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=OFF (build static internal libraries with shared external libraries preferred)
-
-* -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=ON (build static internal libraries with static external libraries preferred)
-
-on Linux (Debian Buster) using CMake-3.13.2 (the minimum allowed
-version of CMake for libLASi) and 3.14.5 (the latest released
-version of CMake at this time). For these 8 tests, the Debian Buster
-packages containing the direct library dependencies of libLASi were
-libpango1.0-dev-1.42.4, libfreetype6-dev-2.9.1, and
-libglib2.0-dev-2.58.3.
-
This release has not been tested (yet) on Mac OS X or Windows
platforms because of my lack of access to those platforms. However, I
anticipate no difficulties on those platforms since previous versions
Modified: trunk/cmake/modules/lasi.cmake
===================================================================
--- trunk/cmake/modules/lasi.cmake 2019-12-20 19:52:34 UTC (rev 234)
+++ trunk/cmake/modules/lasi.cmake 2019-12-20 20:49:54 UTC (rev 235)
@@ -4,17 +4,7 @@
# libraries are all shared by default
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
-if(BUILD_SHARED_LIBS)
- # OFF means shared libraries (but never static libraries) are
- # transitively linked by default by CMake
- if(WIN32 OR CYGWIN)
- option(NON_TRANSITIVE "Option to use non-transitive linking" OFF)
- else(WIN32 OR CYGWIN)
- option(NON_TRANSITIVE "Option to use non-transitive linking" ON)
- endif(WIN32 OR CYGWIN)
-else(BUILD_SHARED_LIBS)
- set(NON_TRANSITIVE OFF CACHE BOOL "Option to use non-transitive linking" FORCE)
-endif(BUILD_SHARED_LIBS)
+option(LASI_LINK_PUBLIC "Link libLASi with PUBLIC dependencies (so that libLASi consumers also link to those dependencies for the shared libLASi case just as they do in the static libLASi case)" OFF)
# for win32 we set the DLLFLAG (used in lasi.pc)
# to import the functions correctly from the dll
Modified: trunk/examples/CMakeLists.txt
===================================================================
--- trunk/examples/CMakeLists.txt 2019-12-20 19:52:34 UTC (rev 234)
+++ trunk/examples/CMakeLists.txt 2019-12-20 20:49:54 UTC (rev 235)
@@ -52,11 +52,7 @@
set(DEPENDENT_LIBRARIES LASi)
endif(SRC_ROOT_NAME STREQUAL "ComplexTextLayoutExample")
- if(NON_TRANSITIVE)
- target_link_libraries(${SRC_ROOT_NAME} PRIVATE ${DEPENDENT_LIBRARIES})
- else(NON_TRANSITIVE)
- target_link_libraries(${SRC_ROOT_NAME} PUBLIC ${DEPENDENT_LIBRARIES})
- endif(NON_TRANSITIVE)
+ target_link_libraries(${SRC_ROOT_NAME} ${DEPENDENT_LIBRARIES})
add_test(${SRC_ROOT_NAME}
${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME} ${CTEST_EXAMPLES_OUTPUT_DIR}/${SRC_ROOT_NAME}.eps
@@ -120,6 +116,25 @@
set(PKG_CONFIG_PATH "${libdir}/pkgconfig:$ENV{PKG_CONFIG_PATH}")
endif("$ENV{PKG_CONFIG_PATH}" STREQUAL "")
+# Note that the results in the Requires, Requires.private, Libs, and
+# Libs.private lines of the configured lasi.pc file used in our
+# traditional build of the installed examples depend on whether
+# libraries are built shared or static.
+if(BUILD_SHARED_LIBS)
+ # pkg-config will not use the --static pkg-config option for the
+ # traditional installed examples build, i.e., the
+ # Requires.private and Libs.private results will be completely
+ # ignored in the configured lasi.pc file.
+ set(PC_STATIC_OPTION)
+else(BUILD_SHARED_LIBS)
+ # pkg-config will use the --static pkg-config option for the
+ # traditional installed examples build, i.e., the configured
+ # Requires.private results will be appended to the
+ # Requires results and the configured Libs.private results will
+ # be appended to the Libs results.
+ set(PC_STATIC_OPTION "--static")
+endif(BUILD_SHARED_LIBS)
+
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/Makefile.examples.in
${CMAKE_CURRENT_BINARY_DIR}/Makefile.examples
Modified: trunk/examples/Makefile.examples.in
===================================================================
--- trunk/examples/Makefile.examples.in 2019-12-20 19:52:34 UTC (rev 234)
+++ trunk/examples/Makefile.examples.in 2019-12-20 20:49:54 UTC (rev 235)
@@ -7,7 +7,7 @@
MissingGlyphExample$(EXEEXT): MissingGlyphExample.cpp
$(CXX) -o $@ $< \
- $(RPATHCMD) `$(PKG_ENV) pkg-config --cflags --libs lasi`
+ $(RPATHCMD) `$(PKG_ENV) pkg-config @PC_STATIC_OPTION@ --cflags --libs lasi`
MissingGlyphExample.eps: MissingGlyphExample$(EXEEXT)
./$< $@
@@ -14,7 +14,7 @@
SimpleLASiExample$(EXEEXT): SimpleLASiExample.cpp
$(CXX) -o $@ $< \
- $(RPATHCMD) `$(PKG_ENV) pkg-config --cflags --libs lasi`
+ $(RPATHCMD) `$(PKG_ENV) pkg-config @PC_STATIC_OPTION@ --cflags --libs lasi`
SimpleLASiExample.eps: SimpleLASiExample$(EXEEXT)
./$< $@
@@ -21,7 +21,7 @@
ComplexTextLayoutExample$(EXEEXT): ComplexTextLayoutExample.cpp
$(CXX) -o $@ $< \
- $(RPATHCMD) `$(PKG_ENV) pkg-config --cflags --libs lasi`
+ $(RPATHCMD) `$(PKG_ENV) pkg-config @PC_STATIC_OPTION@ --cflags --libs lasi`
ComplexTextLayoutExample.eps: ComplexTextLayoutExample$(EXEEXT)
./$< $@
Modified: trunk/src/CMakeLists.txt
===================================================================
--- trunk/src/CMakeLists.txt 2019-12-20 19:52:34 UTC (rev 234)
+++ trunk/src/CMakeLists.txt 2019-12-20 20:49:54 UTC (rev 235)
@@ -51,7 +51,11 @@
list(APPEND libLASi_LINK_LIBRARIES ${MATH_LIB})
endif(MATH_LIB)
-target_link_libraries(LASi ${libLASi_LINK_LIBRARIES})
+if(LASI_LINK_PUBLIC)
+ target_link_libraries(LASi PUBLIC ${libLASi_LINK_LIBRARIES})
+else(LASI_LINK_PUBLIC)
+ target_link_libraries(LASi PRIVATE ${libLASi_LINK_LIBRARIES})
+endif(LASI_LINK_PUBLIC)
if(USE_RPATH)
set(LIB_INSTALL_RPATH)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-12-20 19:52:38
|
Revision: 234
http://sourceforge.net/p/lasi/code/234
Author: airwin
Date: 2019-12-20 19:52:34 +0000 (Fri, 20 Dec 2019)
Log Message:
-----------
Improve script that tests a libLASi release tarball
The improvements include
* Using grep to evaluate results rather than simply pipelining them to less. As a result the script
is much less interactive and therefore much easier to run.
* Improved echoed descriptions of each task that is executed by the script.
Tested by: Alan W. Irwin <ai...@us...> on Linux
(Debian Buster) by running the script (following the instructions
in README.Release_Manager_Cookbook) to make preliminary tests
of some uncommitted changes.
Modified Paths:
--------------
trunk/test_tarball.sh.in
Modified: trunk/test_tarball.sh.in
===================================================================
--- trunk/test_tarball.sh.in 2019-07-10 00:28:23 UTC (rev 233)
+++ trunk/test_tarball.sh.in 2019-12-20 19:52:34 UTC (rev 234)
@@ -18,6 +18,7 @@
echo "One or both of PLPLOT_CMAKE_PATH or PLPLOT_SOURCE_PREFIX environment variables not"
echo "set. Therefore, will NOT do special PLplot comprehensive test of the psttf and"
echo "psttfc devices that depend on libLASi."
+ echo ""
do_plplot_test="no"
else
do_plplot_test="yes"
@@ -49,6 +50,10 @@
mkdir -p $BUILD_TREE
cd $BUILD_TREE
+echo "Configure and build LASi library and associated examples, run those examples, convert"
+echo "the example EPS results to PNG with inkscape, and display both EPS and PNG results"
+echo ""
+
env PATH="$CMAKE_PATH:$PATH" cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_TREE $CMAKE_OPTION_1 $CMAKE_OPTION_2 $SOURCE_TREE >& cmake.out
make $PARALLEL_OPTION >& make.out
@@ -64,32 +69,56 @@
pqiv -i examples/$CORE_NAME.png
done
-# ldd and valgrind tests of the examples including comparisons of the
-# results generated with the previous results. Note, that 2>&1
-# redirects stderr to *current" stdout (which defaults to pipe),
-# test.eps afterwards means PostScript output goes directly to that
-# file rather than stdout (so nothing more is emitted to stdout), and
-# >| test.eps afterwards means PostScript output goes to stdout (but
-# not stderr) and stdout then overwrites whatever was in test.eps
-# before.
+echo "Generate and check ldd and valgrind results for the CMake-built examples in the build tree,"
+echo "and compare present results with the previously displayed results. This may take a while...."
+echo ""
for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
- ldd -r examples/$CORE_NAME 2>&1 | less
- valgrind examples/$CORE_NAME 2>&1 test.eps | less
+ ldd -r examples/$CORE_NAME >& ${CORE_NAME}_ldd.out
+ grep -iEqv 'found|symbol|undefined' ${CORE_NAME}_ldd.out
+ grep_rc=$?
+ if [ "$grep_rc" -ne 0 ] ; then
+ echo "ERROR: ldd test failed for ${CORE_NAME} with the following complete output"
+ cat ${CORE_NAME}_ldd.out
+ exit 1
+ fi
+
+ valgrind examples/$CORE_NAME test.eps 2> ${CORE_NAME}_valgrind.out
+ grep -iEqv 'ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)' ${CORE_NAME}_valgrind.out
+ grep_rc=$?
+ if [ "$grep_rc" -ne 0 ] ; then
+ echo "ERROR: valgrind test without stdout failed for ${CORE_NAME} with the following complete output"
+ cat ${CORE_NAME}_valgrind.out
+ exit 1
+ fi
+
cmp test.eps examples/$CORE_NAME.eps
- valgrind examples/$CORE_NAME 2>&1 >| test.eps | less
+ rm test.eps
+
+ valgrind examples/$CORE_NAME >| test.eps 2> ${CORE_NAME}_stdout_valgrind.out
+ grep -iEqv 'ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)' ${CORE_NAME}_stdout_valgrind.out
+ grep_rc=$?
+ if [ "$grep_rc" -ne 0 ] ; then
+ echo "ERROR: valgrind test with stdout failed for ${CORE_NAME} with the following complete output"
+ cat ${CORE_NAME}_stdout_valgrind.out
+ exit 1
+ fi
+
cmp test.eps examples/$CORE_NAME.eps
+ rm test.eps
done
-# Run ctest
-env PATH="$CMAKE_PATH:$PATH" ctest $PARALLEL_OPTION --output-log >| ctest.out
+echo "Run ctest in the build tree and compare with the previously displayed results"
+echo ""
+
+env PATH="$CMAKE_PATH:$PATH" ctest $PARALLEL_OPTION --output-log > ctest.out
# Compare ctest results with above make results.
for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
cmp examples/ctest_examples_output_dir/$CORE_NAME.eps examples/$CORE_NAME.eps
done
-# Was ctest a complete success?
-grep -l "100% tests passed" ctest.out
+# Evaluate ctest results.
+grep -q "100% tests passed" ctest.out
ctest_rc=$?
@@ -99,27 +128,77 @@
exit 1
fi
+echo "Install libLASi"
+echo ""
+
make $PARALLEL_OPTION install >& make_install.out
cd $INSTALL_TREE/share/lasi$LASI_VERSION/examples
+
+echo "Build installed examples the traditional (pkg-config + Makefile) way"
+echo ""
make $PARALLEL_OPTION >& $BUILD_TREE/installed_traditional_make.out
+echo "Generate and check ldd and valgrind results for the traditionally built examples in the install tree,"
+echo "and compare present results with the previously displayed results. This may take a while...."
+echo ""
+
for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
- ldd -r $CORE_NAME 2>&1 | less
+ ldd -r $CORE_NAME >& $BUILD_TREE/${CORE_NAME}_ldd_traditional.out
+ grep -iEqv 'found|symbol|undefined' $BUILD_TREE/${CORE_NAME}_ldd_traditional.out
+ grep_rc=$?
+ if [ "$grep_rc" -ne 0 ] ; then
+ echo "ERROR: ldd test failed for traditinally built ${CORE_NAME} with the following complete output"
+ cat $BUILD_TREE/${CORE_NAME}_ldd_traditional.out
+ exit 1
+ fi
+
cmp $CORE_NAME.eps $BUILD_TREE/examples/$CORE_NAME.eps
- valgrind ./$CORE_NAME 2>&1 test.eps | less
+
+ valgrind ./$CORE_NAME test.eps 2> $BUILD_TREE/${CORE_NAME}_valgrind_traditional.out
+ grep -iEqv 'ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)' $BUILD_TREE/${CORE_NAME}_valgrind_traditional.out
+ grep_rc=$?
+ if [ "$grep_rc" -ne 0 ] ; then
+ echo "ERROR: valgrind test without stdout failed for traditionally built ${CORE_NAME} with the following complete output"
+ cat $BUILD_TREE/${CORE_NAME}_valgrind_traditional.out
+ exit 1
+ fi
+
cmp test.eps $CORE_NAME.eps
- valgrind ./$CORE_NAME 2>&1 >| test.eps | less
+ rm test.eps
+
+ valgrind ./$CORE_NAME >| test.eps 2> $BUILD_TREE/${CORE_NAME}_stdout_valgrind_traditional.out
+ grep -iEqv 'ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)' $BUILD_TREE/${CORE_NAME}_stdout_valgrind_traditional.out
+ grep_rc=$?
+ if [ "$grep_rc" -ne 0 ] ; then
+ echo "ERROR: valgrind test with stdout failed for traditionally built ${CORE_NAME} with the following complete output"
+ cat $BUILD_TREE/${CORE_NAME}_stdout_valgrind_traditional.out
+ exit 1
+ fi
+
cmp test.eps $CORE_NAME.eps
+ rm test.eps
done
-echo "Check for warnings/errors in all the *.out files generated prior to the comprehensive test"
+echo "Check for unexpected warnings/errors in all the *.out files generated prior to the PLplot comprehensive test"
+echo ""
cd $BUILD_TREE
-# Fix me once deprecated warnings on gone.
-# Trailing grep stanzas are to drop false alarms due to deprecated warnings.
+# FIXME
+# Once the deprecated warnings are gone I should be able to
+# remove the "grep -v deprecated" stanza that drops the part of those warning messages
+# that includes some case form of "warning".
grep -i warning *.out | grep -v deprecated
-grep -i error *.out | grep -vE 'FT_Error|throw'
+# FIXME
+# Once the deprecated warnings are gone I should be able to
+# remove the "grep -vE 'FT_Error|throw'" stanza that drops the part of those warning messages
+# that includes some case form of "error".
+
+# N.B. The trailing "grep -vE '==[0-9]*=='" stanza is used to drop
+# all valgrind results since those results have been checked above and
+# include lots of instances of some case form of "error".
+grep -i error *.out | grep -vE 'FT_Error|throw' |grep -vE '==[0-9]*=='
+
if [ "$do_plplot_test" = "yes" ] ; then
# Test the above installed version of libLASi with a specific PLplot comprehensive test.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-07-10 00:28:25
|
Revision: 233
http://sourceforge.net/p/lasi/code/233
Author: airwin
Date: 2019-07-10 00:28:23 +0000 (Wed, 10 Jul 2019)
Log Message:
-----------
Omnibus commit concerning linking-related issues
The previous r230 commit entitled "Fix underlinking issue discovered
by Luigi Baldoni" was somewhat bogus because it solved that issue
(missing direct dependencies of libLASI on libgobject-2.0 and
glib-2.0) in an old-fashioned transitive linking way. Furthermore
that was only done for external executables and shared objects that
were linked to libLASi while Luigi's underlinking issue was quite
different (for the CMake-based build of libLASi itself). This commit
is a substantial update of that previous fix which includes the following changes:
* Add PREFER_EXTERNAL_STATIC option (see Section 2.2 in README.release for further details).
* Add NON_TRANSITIVE option (See Section 2.3 in README.release for further details).
* Implement the configured test_tarball.sh(.in) bash script (See Section 2.4 in README.release for further details).
* Really solve ALL cases of the underlinking issue (see README.release section 2.5 for further
details).
* Make the libLASi CMake-based build system pkg-config processing consistent with similar processing done for PLplot.
This change was implemented by making the pkg_check_pkgconfig macro
be consistent with the PLplot version of that macro and by replacing
the pkg_config_link_flags macro with the PLplot function of the same
name.
Modified Paths:
--------------
trunk/CMakeLists.txt
trunk/README.Release_Manager_Cookbook
trunk/README.release
trunk/cmake/modules/lasi.cmake
trunk/cmake/modules/pkg-config.cmake
trunk/examples/CMakeLists.txt
trunk/lasi.pc.in
trunk/src/CMakeLists.txt
Added Paths:
-----------
trunk/test_tarball.sh.in
Modified: trunk/CMakeLists.txt
===================================================================
--- trunk/CMakeLists.txt 2019-07-10 00:03:58 UTC (rev 232)
+++ trunk/CMakeLists.txt 2019-07-10 00:28:23 UTC (rev 233)
@@ -63,11 +63,24 @@
${CMAKE_CURRENT_BINARY_DIR}/config.h
)
+if(NON_TRANSITIVE)
+ set(PC_REQUIRES_LINE "Requires.private: pangoft2,pango,freetype2,gobject-2.0,glib-2.0")
+else(NON_TRANSITIVE)
+ set(PC_REQUIRES_LINE "Requires: pangoft2,pango,freetype2,gobject-2.0,glib-2.0")
+endif(NON_TRANSITIVE)
+
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/lasi.pc.in
${CMAKE_CURRENT_BINARY_DIR}/lasi.pc
+@ONLY
)
+configure_file(
+${CMAKE_CURRENT_SOURCE_DIR}/test_tarball.sh.in
+${CMAKE_CURRENT_BINARY_DIR}/test_tarball.sh
+@ONLY
+)
+
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/lasi.pc
DESTINATION ${PKG_CONFIG_DIR}
Modified: trunk/README.Release_Manager_Cookbook
===================================================================
--- trunk/README.Release_Manager_Cookbook 2019-07-10 00:03:58 UTC (rev 232)
+++ trunk/README.Release_Manager_Cookbook 2019-07-10 00:28:23 UTC (rev 233)
@@ -19,50 +19,28 @@
(1) Create and test a preliminary tarball from trunk
- This (extensive testing) is just to make sure that the trunk version
+ This (extensive sets of tests) is just to make sure that the trunk version
is in good shape before you do the following final stages of the
release process.
- Do the test in (3) below. Also, build and install a shared version of LibLASi
- and a static version of LIBLASi and test each of those
- with the following PLplot comprehensive test:
+ Do the tests in (3) below using the old lasi version (since that version
+ has not been updated yet).
-time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5:/home/software/lasi_svn/install PATH="/home/software/cmake/install-3.12.4/bin:$PATH" LD_LIBRARY_PATH=/home/software/lasi_svn/install/lib "$SOURCE_PREFIX"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON -DDEFAULT_NO_DEVICES=ON -DPLD_psttfc=ON -DPLPLOT_TEST_DEVICE=psttfc" --build_command "make -j16" --ctest_command "ctest -j16" --do_test_interactive no)
+export LASI_VERSION=1.1.3
- where
+Also to save a factor of two in time just execute 4 tests (with the minimum cmake version choice)
+rather than all 8 versions of the test since this is just a preliminary test to give
+us some confidence that all is well at this stage.
-SOURCE_PREFIX="/home/software/plplot/HEAD/plplot blank .git"
-COMPREHENSIVE_TEST_PREFIX="/home/software/plplot/HEAD/comprehensive_test_disposeable blank"
-
- Furthermore, the CMAKE_PREFIX_PATH components are to help cmake
- find a local version of lua and to find the local installed
- version of libLASi (since the Debian versions of lua and libLASi
- have showstopping bugs); the PATH update is to use cmake and
- ctest version 3.12.4 (the minimum version of cmake accepted by
- PLplot); LD_LIBRARY_PATH must be set (for now) because PLplot
- rpath processing is currently not correct for a version of
- libLASi installed in a non-standard location;
- -DUSE_INCRTCL_VERSION_4=ON is to work around Tcl find issues,
- -DDEFAULT_NO_DEVICES=ON -DPLD_psttfc=ON is to limit all device
- testing to just -dev psttfc, and -DPLPLOT_TEST_DEVICE=psttfc is
- to use that device for difference testing.
-
- Evaluation of those comprehensives tests done as per
- doc/wiki_source/Testing_PLplot in the PLplot source tree should
- show perfect results. But if not (i.e., there is a regression in
- this regard), make the appropriate libLASi changes to fix the
- libLASi bugs causing those issues, and commit those bug fixes to
- the trunk version.
-
(2) Finish release-related trunk changes so they will be in the release
* set environment variable for version to make directions below
more generic.
-export LASI_VERSION=1.1.3
+export LASI_VERSION=1.1.4
# Should refer to first release in this release cycle, i.e., one after
# last release for the last release.
-export FIRST_REVISION_IN_CYCLE=r200
+export FIRST_REVISION_IN_CYCLE=r223
* Prepare a preliminary version of the ChangeLog file to see what
has been accomplished since the last release.
@@ -115,8 +93,10 @@
cd /home/software/lasi_svn/HEAD/build_dir
# In case this not set.
-LASI_VERSION= 1.1.3
-time (rm -rf /home/software/lasi_svn/HEAD/build_dir/* ~/lasi_svn/install; env PATH="/usr/bin:$PATH" cmake -DCMAKE_INSTALL_PREFIX=/home/software/lasi_svn/install -DBUILD_SHARED_LIBS=ON ../lasi_2019 >& cmake.out)
+LASI_VERSION=1.1.4
+# N.B. using the minimum version of cmake allowed by our build system.
+time (rm -rf /home/software/lasi_svn/HEAD/build_dir/* ~/lasi_svn/install; env PATH="/home/software/cmake/install-3.13.2/bin:$PATH" cmake -DCMAKE_INSTALL_PREFIX=/home/software/lasi_svn/install -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=ON ../lasi_2019 >& cmake.out)
+# BUILD to assure documentation is built with results copied to source tree.
make -j16 all >& all.out
Then build a preliminary version of the release tarball
@@ -127,82 +107,41 @@
tar ztvf libLASi-$LASI_VERSION.tar.gz |sed "s? *? ?g" |cut --delimiter=" " --fields="6-" |less
-* Unpack that tarball:
+* Test that tarball
-tar zxf libLASi-$LASI_VERSION.tar.gz
+# Setup the test by creating the following environment variables:
-* Test that tarball with shared build, install, and shared examples build
+export LASI_VERSION
+export PARALLEL_OPTION=-j16
-mkdir tarball_build_dir
-cd tarball_build_dir
-build_tree_dir=$(pwd)
-/usr/bin/cmake -DCMAKE_INSTALL_PREFIX=../tarball_install -DBUILD_SHARED_LIBS=ON ../libLASi-$LASI_VERSION >& cmake.out
-make -j16 >& make.out
-# Inspect EPS results. Note a white background has to be imposed because
-# these results have no background. So by default the background would be a checkerboard
-# imposed by pqiv if this --background-pattern option was not used.
+# PLplot-related environment variables:
+# N.B. if any one of these are not set, the script skips the special PLplot comprehensive test
+# that is designed to thoroughly test the PLplot psttf and psttfc devices and therefore libLASi
+# (since those devices depend on that library).
-# Inspect same results converted (with opaque white background added) to PNG format
-# by inkscape.
+# Use minimum allowed version of CMake for PLplot during special comprehensive test
+# of PLplot that externally tests libLASi.
+export PLPLOT_CMAKE_PATH=/home/software/cmake/install-3.13.2/bin
-for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
- pqiv -i --background-pattern=white examples/$CORE_NAME.eps
- pqiv -i examples/$CORE_NAME.png
-done
+# Choose this prefix to assure that the PLplot source tree has
+# a blank in its pathname. This combined with choosing a comprehensive test prefix
+# inside the script with a blank in the pathname assures that the case where there
+# are blanks in the source, build, and install tree prefixes is tested by this
+# comprehensive test.
+export PLPLOT_SOURCE_PREFIX="/home/software/plplot/HEAD/plplot blank .git"
-# ldd and valgrind tests of the examples including comparisons of the
-# results generated with the previous results. Note, that 2>&1
-# redirects stderr to *current" stdout (which defaults to pipe),
-# test.eps afterwards means PostScript output goes directly to that
-# file rather than stdout (so nothing more is emitted to stdout), and
-# >| test.eps afterwards means PostScript output goes to stdout (but
-# not stderr) and stdout then overwrites whatever was in test.eps
-# before.
+./test_tarball.sh /home/software/cmake/install-3.13.2/bin -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=ON
+./test_tarball.sh /home/software/cmake/install-3.13.2/bin -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=OFF
+./test_tarball.sh /home/software/cmake/install-3.13.2/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=OFF
+./test_tarball.sh /home/software/cmake/install-3.13.2/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=ON
+./test_tarball.sh /home/software/cmake/install-3.14.5/bin -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=ON
+./test_tarball.sh /home/software/cmake/install-3.14.5/bin -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=OFF
+./test_tarball.sh /home/software/cmake/install-3.14.5/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=OFF
+./test_tarball.sh /home/software/cmake/install-3.14.5/bin -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=ON
-for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
- ldd -r examples/$CORE_NAME 2>&1 | less
- valgrind examples/$CORE_NAME 2>&1 test.eps | less
- cmp test.eps examples/$CORE_NAME.eps
- valgrind examples/$CORE_NAME 2>&1 >| test.eps | less
- cmp test.eps examples/$CORE_NAME.eps
-done
+# If any of these 8 tests reveal that trunk changes are necessary, do
+# those, retest, and iterate until perfect results are obtained.
-# Run ctest
-/usr/bin/ctest -j16 --output-log >| ctest.out
-# Compare ctest results with above make results.
-for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
- cmp examples/ctest_examples_output_dir/$CORE_NAME.eps examples/$CORE_NAME.eps
-done
-
-make -j16 install >& make_install.out
-cd ../tarball_install/share/lasi$LASI_VERSION/examples
-make -j16 >& make.out
-
-for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
- ldd -r $CORE_NAME 2>&1 | less
- cmp $CORE_NAME.eps $build_tree_dir/examples/$CORE_NAME.eps
- valgrind ./$CORE_NAME 2>&1 test.eps | less
- cmp test.eps $CORE_NAME.eps
- valgrind ./$CORE_NAME 2>&1 >| test.eps | less
- cmp test.eps $CORE_NAME.eps
-done
-
-# Return to core build tree and get rid of test results.
-cd $build_tree_dir/..
-rm -rf tarball_*
-
-* Test that tarball with static build, install, and static examples build
-
-# Repeat all the prior test steps (except for the cmake option
-# -DBUILD_SHARED_LIBS=ON replaced by -DBUILD_SHARED_LIBS=OFF) starting
-# with
-
-mkdir tarball_build_dir
-[...]
-
- If these shared and static tests reveal that trunk changes are
- necessary, do those, commit them, and retest them.
-
(4) Update ChangeLog and README.Release_Manager_Cookbook
* Update this file (README.Release_Manager_Cookbook) as much as
Modified: trunk/README.release
===================================================================
--- trunk/README.release 2019-07-10 00:03:58 UTC (rev 232)
+++ trunk/README.release 2019-07-10 00:28:23 UTC (rev 233)
@@ -1,4 +1,4 @@
-libLASi Release 1.1.3
+libLASi Release 1.1.4
~~~~~~~~~~~~~~~~~~~~~
This is a maintenance release of libLASi that reflect the ongoing
efforts of the libLASi developers to respond to bug reports for this
@@ -18,21 +18,15 @@
1. OFFICIAL NOTICES FOR USERS
1.1 CMake version compatibility
-1.2 Backwards-incompatible libLASi API changes
-1.3 Need help getting rid of deprecation build warnings
+1.2 Need help getting rid of deprecation build warnings
-2. Changes relative to our previous release (version 1.1.2) in decreasing order of importance
+2. Changes relative to our previous release
-2.1 Improve libLASi's response when pango/fontconfig chooses pure bitmapped fonts
-2.2 Make glyph names have a one-to-one relationship with glyphs
-2.3 Set target property POSITION_INDEPENDENT_CODE ON for the libLASi library
-2.4 Make "MissingGlyphExample" a more stringent test of font or glyph issues for libLASi
-2.5 Replace deprecated lower-case variants of Freetype macro constants with preferred upper-case form
-2.6 Add bounding boxes to the "MissingGlyphExample" and "ComplexTextLayoutExample" examples
-2.7 Rename example applications and results using consistent and descriptive core names
-2.8 Fix low-resolution boundary box issue
-2.9 Update doxygen configuration files from doxygen version 1.8.1.2 to 1.8.13
-2.10 Change the minimum version of CMake from 2.8.9 to 3.13.2
+2.1 Improve libLASi's find capability for pkg-config
+2.2 Add PREFER_EXTERNAL_STATIC option
+2.3 Add NON_TRANSITIVE option
+2.4 Implement the configured test_tarball.sh(.in) bash script
+2.5 Fix libLASi underlinking issues
3. Testing of this release.
@@ -40,31 +34,30 @@
1. OFFICIAL NOTICES FOR USERS
-1.1 CMake version compatibility
+Our build system is implemented using CMake. The minimum version of
+CMake we currently allow is 3.13.2 on all platforms, and currently the
+latest version of CMake that has been officially released is 3.14.5.
- Our build system is implemented using CMake. The minimum version
- of CMake we allow is 3.13.2 on all platforms. That version is the
- one we have used to test this release of libLASi (see Section 3
- below). However, if you try later CMake versions as they are
- released during the life of this libLASi release, our build system
- will likely continue to work well because CMake has an excellent
- reputation for preserving backwards compatibility.
+Note, that as of the time of this release we have the following
+free distribution packaging support for modern CMake versions:
-1.2 Backwards-incompatible libLASi API changes
+* Cygwin: 3.13.1 from <https://cygwin.com/cgi-bin2/package-grep.cgi>
+* MinGW-w64/MSYS2: 3.14.5 from <http://repo.msys2.org/mingw/x86_64/>
+* Fink: 3.11.0 from <http://pdb.finkproject.org/pdb/browse.php?name=cmake>
+* MacPorts: 3.14.5 from <https://www.macports.org/ports.php?by=name&substr=cmake>
+* Homebrew: 3.14.5 from <https://formulae.brew.sh/formula/cmake>
+* Debian Testing: 3.13.4 (from <https://packages.debian.org/buster/cmake> where Testing = Buster is scheduled to become the official Debian Stable release of Debian as of 2019-07-06, see <https://en.wikipedia.org/wiki/Debian_version_history>).
+* Other modern Linux distributions: likely 3.13.4 or greater since they typically package later versions of CMake than are available for Debian Stable.
- The bug fixes in this release required backwards-incompatible
- changes to the libLASi API (a change in the argument list of the
- PostscriptDocument::GlyphId::GlyphId protected method that is
- designed for internal use only and the addition of the
- PostscriptDocument::PangoItem_do protected method that is also
- designed for internal use only). Therefore, the SOVERSION for
- libLASi has been bumped from 1 to 2 to force source code that
- depends on this library (e.g., the PLplot psttf device driver) to
- be recompiled. However, such source code will not require changes
- to adjust to this backwards-incompatible change in the libLASi
- API.
+It appears from the above table that binary packages for CMake for our
+minimum allowed version (3.13.2) or later should be available soon or
+immediately on most modern free software distributions. However,
+libLASi users of distributions that do not package 3.13.2 or later
+(e.g., the current dated status of CMake packaging on Cygwin and Fink)
+will need to build CMake 3.13.2 or later for themselves before they
+build libLASi-1.1.4.
-1.3 Need help getting rid of deprecation build warnings
+1.2 Need help getting rid of deprecation build warnings
This release has deprecation warning build issues which are
@@ -78,183 +71,187 @@
help with cleaning up any of these deprecation build warnings messages
would be much appreciated!
-2. Changes relative to our previous release (version 1.1.2) in decreasing order of importance
+2. Changes relative to our previous release
-2.1 Improve libLASi's response when pango/fontconfig chooses pure bitmapped fonts
+2.1 Improve libLASi's find capability for pkg-config
- This change was the primary motivation for this release.
+I have dropped our dated and buggy cmake/modules/FindPkgConfig.cmake
+find capability for pkg-config in favour of the well-maintained CMake
+upstream version of FindPkgConfig.cmake. At least one positive result
+of this change is that the CMake-wrapped pkg-config results match
+those of the equivalent pkg-config command rather than incorrectly
+mixing static and shared library results together (as I observed in
+one particular test case before I dropped
+cmake/modules/FindPkgConfig.cmake).
- Previous to this change when pango chose the popular Noto Color
- Emoji font to help render the Aries glyph, libLASi threw an error
- and aborted since such pure bitmap fonts are not suitable for
- libLASi's outline font needs. Such a response completely stops
- PLplot tests when PLplot standard example 7 attempts to render an
- Aries glyph with either the psttf or psttfc devices. So this
- previous response was completely unacceptable, and the fix for it
- is important.
+2.2 Add PREFER_EXTERNAL_STATIC option
- This change fixes that previous response by replacing all glyphs
- for a PangoItem where pango chooses a non-outline font with the
- default glyph used to represent missing glyphs. Of course, a
- much better procedure would be to request pango to limit its
- choices to outline fonts, but as far as I know there is no method
- for doing that (outside of having one fontconfig configuration
- for libLASi use and another for all other situations), and, in
- any case, the present workaround is "good enough for now" because
- pure bitmap fonts are rare (for example, it is possible that Noto
- Color Emoji in the future may become available in the outline
- form generally preferred for modern fonts), and Pango/fontconfig
- chooses such pure bitmap fonts for relatively few glyphs.
+This option is only allowed to be ON for the case where static internal libraries
+are being built. The motivation for this option is to reduce external library
+dependencies to just the run time libraries. However, this option is
+set to OFF by default. The reason for this is
-2.2 Make glyph names have a one-to-one relationship with glyphs
+readelf -d tarball_build_dir/examples/MissingGlyphExample |grep NEEDED
- This change is an important motivation for this release.
+(and similarly for the other examples) shows that some
+shared libraries from the pango/cairo subset of the GTK+ stack of
+libraries are not eliminated by this option on the Debian Buster platform, namely
- This change is confined to the case when fonts don't follow
- standards so that they cannot be interrogated for the glyph name,
- i.e., FT_HAS_GLYPH_NAMES(face) is false. Before this change,
- libLASi computed its own unique glyph name using the template
+ 0x0000000000000001 (NEEDED) Shared library: [libpangoft2-1.0.so.0]
+ 0x0000000000000001 (NEEDED) Shared library: [libgraphite2.so.3]
+ 0x0000000000000001 (NEEDED) Shared library: [libpango-1.0.so.0]
-LASi_glyph_<unique number>
+The fundamental reason for this issue is the pangoft2-1.0, graphite2,
+and pango libraries are not available in static form for the Debian Buster
+platform. As a result of this platform deficiency
- where <unique number> was incremented whenever the code decided a
- new glyph had been encountered. This scheme had the following
- disadvantages:
+ldd -r tarball_build_dir/examples/MissingGlyphExample
-* The logic for deciding when new glyphs were encountered was
- faulty with the result that the same glyph would have multiple
- glyph names and therefore redundant glyph information stored in
- the PostScript header whenever, for example, both
+(and similarly for the other examples) shows that the run-time linker
+links to a very large list of shared libraries which are dependencies
+of the above list which completely subverts the motivation for turning
+this option ON!
-doc.osBody() << show(string)
-
- and
+Despite this Debian Buster platform issue, we have implemented this
+option since it should still be useful for those platforms that supply
+static versions of *all* the pango/cairo subset of libraries linked
+directly or indirectly by libLASi.
-doc.get_dimensions(string,&lineSpacing,&xAdvance,&yMinimum,&yMaximum);
+2.3 Add NON_TRANSITIVE option
- (a common combination when bounding boxes are being determined)
- were called for the same string.
+This option is only allowed to be ON for the case where shared
+internal libraries are being built. It specifies whether linking
+should just be to the libraries which are direct dependencies of the
+object being linked (ON) or libraries which are both direct and
+indirect dependencies of the object being linked (OFF). Setting this
+option to ON avoids overlinking, but this is a "would be nice" rather
+than essential. Therefore if ON is not working correctly for any
+platform try specifying OFF.
-* The glyph name depended on the order with which strings were
- processed with the result that PLplot octave results (where all
- standard octave examples were run from one instance of octave)
- had different glyph names than PLplot C results (where all
- standard C examples were run using separate executables for each
- example).
+The NON_TRANSITIVE option essentially affects just how external
+objects (including the installed libLASi examples and the PLplot psttf
+device driver) link to libLASi using lasi.pc and pkg-config (directly
+or indirectly via CMake). (The option also affects how the link
+interfaces of the test_executables is configured by the CMake-based
+build system, but that is essentially just a matter of style since
+those interfaces are unused, i.e., no object links to those
+executables.) In particular, the NON_TRANSITIVE option does not
+affect how libLASi itself is linked to external libraries using
+pkg-config since it is assumed the *.pc files associated with those
+external libraries are configured properly for whatever transitive or
+non-transitive linking model is appropriate for the platform.
-* The glyph names were completely meaningless to humans reading
- through the PostScript code in the results.
+2.4 Implement the configured test_tarball.sh(.in) bash script
- All these issues were addressed by borrowing a static function
- from PLplot (whose LGPL'd code allows us to do that) to calculate
- the UCS4 (32-bit unsigned) encoding of unicode for each glyph
- encountered in the UTF-8 encoded input string. With the result
- that the glyph names now have the template
+This script tests a source tarball (created with "make all" and "make package_source")
+for a given configuration of libLASi. See README.Release_Manager_Cookbook
+for directions concerning how to run this script. The tests included in this
+script are the following:
-LASi_glyph_U+<UCS4 hexadecimal code for the glyph>
+* Configure, build, and install libLASi.
- where by definition the UCS4 hexadecimal code completely
- identifies the glyph in a unique way which is easy to look up,
- e.g., with the gucharmap application.
+ This build includes building all the examples, running those
+ examples, and converting the resulting *.eps form of results to the
+ *.png results using inkscape.
- The net result of this change is the PLplot test_diff_device
- target for the case when -DPLPLOT_TEST_DEVICE=psttfc now gives a
- clean report for the first time ever. So this change is an
- important one.
+* Display the example results (in both the *.eps and *.png forms)
+ using pqiv to confirm there are no obvious rendering issues in these
+ results.
-2.3 Set target property POSITION_INDEPENDENT_CODE ON for the libLASi library
+* Run ldd -r for all built examples
- This change is an important motivation for this release.
+* Run all built examples in two different ways with valgrind and
+ compare the *.eps results with the equivalent results created by the
+ above original build.
- This bug fix allows the static version of libLASi to be used with
- shared builds of external software that depend on libLASi such as
- the PLplot psttf device driver.
+* Run ctest and compare its *.eps results with the equivalent results
+ created by the above original build.
-2.4 Make "MissingGlyphExample" a more stringent test of font or glyph issues for libLASi
+* Build the installed examples.
- The most important change here was to add
+* Run ldd -r for those examples.
-"Unicode U+2648 ARIES (twice): ♈♈"
-"Embedded newlines a\\nb\\nc: a\nb\nc"
+* Run those examples in two different ways with valgrind and compare
+ the *.eps results with the equivalent results created by theabove
+ original build.
- to the strings that are rendered to PostScript by this example.
+* Evaluate all these "internal" test results to make sure they worked properly.
- For the first of these, the Debian Buster version of pango
- (likely due to the default fontconfig configuration) decides to
- use the popular Noto Color Emoji font to render the Aries glyphs,
- but the problem for that font is it is a pure bitmap font with no
- outline information that is required by libLASi. So this line
- tests the response of libLASi to this situation.
+* If environment variables are set up properly to allow a special
+ comprehensive test of PLplot with the psttf and psttfc devices do
+ that comprehensive test and evaluate those results. This is an
+ important external test of libLASi since the psttf and psttf PLplot
+ devices depend strongly on that library, and this comprehensive test
+ evaluates those devices in a very large number of ways.
- For the second of these the linefeed "\n" glyph is a non-printing
- glyph. It appears for all such glyphs there is a "missing glyph"
- issue so regardless of future font improvements this line seems
- to be a reliable way to trigger missing-glyph issues to test the
- response of libLASi to this situation.
+2.5 Fix libLASi underlinking issues
-2.5 Replace deprecated lower-case variants of Freetype macro constants with preferred upper-case form
+The issue (discovered by Luigi Baldoni on the "Tumbleweed" openSUSE platform)
+is that libLASi depends directly on symbols in the gobject-2.0 and glib-2.0
+libraries, but libLASi was not directly linked with those libraries before this fix. For
+most platforms (so far the only exception I know is the Baldoni platform) this
+direct underlinking issue was covered up by transitive linking of those
+libraries via the direct library dependencies of the pango library. That is, libLASi has
+always been linked directly to the pango library, and, for example, on
+Debian Buster we have
-2.6 Add bounding boxes to the "MissingGlyphExample" and "ComplexTextLayoutExample" examples
+software@merlin> pkg-config --libs pango
+-lpango-1.0 -lgobject-2.0 -lglib-2.0
- The resulting MissingGlyphExample.eps and
- ComplexTextLayoutExample.eps files join SimpleLASiExample.eps as
- being properly formatted EPS (Encapsulated PostScript) files.
+That is, on this platform libpango depends directly on the gobject-2.0
+and glib-2.0 libraries and this covers up the libLASi underlinking
+issue that has just been fixed. However, this pkg-config result which
+includes -lgobject-2.0 -lglib-2.0 apparently does not occur on
+Tumbleweed which exposes the libLASi underlinking bug that has just
+been fixed.
- Note also that for the "Complex Text Layout" case, I implemented
- some generally useful C++ code macros (called
- LASI_SHOW_AND_UPDATE_BB, LASI_SCALED_SHOW_AND_UPDATE_BB, and
- LASI_ROTATED_SHOW_AND_UPDATE_BB), which made it straightforward
- to handle even complex cases such as determining the bounding box
- of text that has undergone anamorphic scaling or rotation. For
- example, the LASI_ROTATED_SHOW_AND_UPDATE_BB macro includes C++
- code to apply the rotation matrix to determine the x,y
- coordinates of the corners of the rotated text box and use those
- corner coordinates to help determine the overall bounding box.
+The fix for this libLASi underlinking issue was necessarily made in
+two places. One place was to directly link libLASi with gobject-2.0
+and glib-2.0 when using our CMake-based build system to build libLASi.
+The other place was to modify the configured lasi.pc(.in) file (which
+controls builds of executables and shared objects that are linked to
+libLASi such as the traditional build of the installed libLASi
+examples and the CMake-based build of the PLplot psttf device) so the
+previous
-2.7 Rename example applications and results using consistent and descriptive core names
+Requires: pangoft2,pango,freetype2
- Those core names are " MissingGlyphExample", "SimpleLASiExample",
- and "ComplexTextLayoutExample". As a result the example source
- code name is <core name>.cpp, the example application name is
- <core name> (or <core name>.exe on Windows platforms), the EPS
- (Encapsulated PostScript) results are named <core name>.eps, and
- the PNG results (generated from the EPS results using inkscape)
- are named <core name>.png.
+line in that pkg-config file was replaced by either
-2.8 Fix low-resolution boundary box issue
+Requires.private: pangoft2,pango,freetype2,gobject-2.0,glib-2.0
- As a result of this change the low-res (int) BB (bounding box)
- limits are calculated from the high-res (double) BB limits with
- the appropriate combinations of floor and ceil so the low-res
- limits always lie on or outside (by up to but not including 1
- point) the high-res limits. Previously this calculation was done
- incorrectly with floor for all limits.
+or
-2.9 Update doxygen configuration files from doxygen version 1.8.1.2 to 1.8.13
+Requires: pangoft2,pango,freetype2,gobject-2.0,glib-2.0
- These changes were done in the usual way by running the following
- commands:
+depending respectively on whether NON_TRANSITIVE was true or not.
-doxygen -u Doxyfile.developer
-doxygen -u Doxyfile.user
+3. Testing of this release.
-2.10 Change the minimum version of CMake from 2.8.9 to 3.13.2
+This release has been successfully built and run-tested (following the
+prescription in README.Release_Manager_Cookbook) for the following
+major configurations
- This change was motivated by the bug fixes in later CMake
- versions and also the much better checking of the build system
- that occurs for the policies automatically used for 3.13.2.
+* -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=ON (build shared internal libraries with non-transitive linking)
-3. Testing of this release.
+* -DBUILD_SHARED_LIBS=ON -DNON_TRANSITIVE=OFF (build shared internal libraries with transitive linking)
-This release has been successfully built and run-tested (following the
-prescription in README.Release_Manager_Cookbook) for both the shared
-and static library case on Linux (Debian Buster) using CMake-3.13.2
-(the minimum allowed version of CMake for libLASi), libpango-1.42.4,
-libcairo-1.16.0, libfreetype-2.9.1, and libfontconfig-2.13.1.
+* -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=OFF (build static internal libraries with shared external libraries preferred)
+* -DBUILD_SHARED_LIBS=OFF -DPREFER_EXTERNAL_STATIC=ON (build static internal libraries with static external libraries preferred)
+
+on Linux (Debian Buster) using CMake-3.13.2 (the minimum allowed
+version of CMake for libLASi) and 3.14.5 (the latest released
+version of CMake at this time). For these 8 tests, the Debian Buster
+packages containing the direct library dependencies of libLASi were
+libpango1.0-dev-1.42.4, libfreetype6-dev-2.9.1, and
+libglib2.0-dev-2.58.3.
+
This release has not been tested (yet) on Mac OS X or Windows
-platforms, but we anticipate no difficulties on those platforms since
-previous versions of libLASi have worked well on those platforms. In
-other words, the cross-platform nature of libLASi appears to have been
-well supported by CMake in the past, and we feel that happy state will
-continue with this release as well.
+platforms because of my lack of access to those platforms. However, I
+anticipate no difficulties on those platforms since previous versions
+of libLASi have worked well on those platforms. In other words, the
+cross-platform nature of libLASi appears to have been well supported
+by CMake in the past, and should likely continue with this release as
+well. But if that view turns out to be too optimistic let me know
+(e.g., with a bug report)!
Modified: trunk/cmake/modules/lasi.cmake
===================================================================
--- trunk/cmake/modules/lasi.cmake 2019-07-10 00:03:58 UTC (rev 232)
+++ trunk/cmake/modules/lasi.cmake 2019-07-10 00:28:23 UTC (rev 233)
@@ -4,6 +4,18 @@
# libraries are all shared by default
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
+if(BUILD_SHARED_LIBS)
+ # OFF means shared libraries (but never static libraries) are
+ # transitively linked by default by CMake
+ if(WIN32 OR CYGWIN)
+ option(NON_TRANSITIVE "Option to use non-transitive linking" OFF)
+ else(WIN32 OR CYGWIN)
+ option(NON_TRANSITIVE "Option to use non-transitive linking" ON)
+ endif(WIN32 OR CYGWIN)
+else(BUILD_SHARED_LIBS)
+ set(NON_TRANSITIVE OFF CACHE BOOL "Option to use non-transitive linking" FORCE)
+endif(BUILD_SHARED_LIBS)
+
# for win32 we set the DLLFLAG (used in lasi.pc)
# to import the functions correctly from the dll
if(WIN32 AND BUILD_SHARED_LIBS)
@@ -50,7 +62,7 @@
include(pkg-config)
-pkg_check_pkgconfig("pangoft2;pango;freetype2" PANGOFT2_includedir PANGOFT2_libdir PANGOFT2_libraries PANGOFT2_cflags PANGOFT2_version PANGOFT2)
+pkg_check_pkgconfig("pangoft2;pango;freetype2;glib-2.0;gobject-2.0" PANGOFT2_includedir PANGOFT2_libdir PANGOFT2_libraries PANGOFT2_cflags PANGOFT2_version PANGOFT2)
#message(STATUS "DEBUG:PANGOFT2_includedir = ${PANGOFT2_includedir}")
#message(STATUS "DEBUG:PANGOFT2_libdir = ${PANGOFT2_libdir}")
#message(STATUS "DEBUG:PANGOFT2_libraries = ${PANGOFT2_libraries}")
@@ -58,7 +70,7 @@
#message(STATUS "DEBUG:PANGOFT2_version = ${PANGOFT2_version}")
if(NOT PANGOFT2_libraries)
- message(FATAL_ERROR "pangoft2, pango, and freetype2 pkg-config module required to build libLASi.")
+ message(FATAL_ERROR "pangoft2, pango, freetype2, glib-2.0, and gobject-2.0 pkg-config modules are all required to build libLASi.")
endif(NOT PANGOFT2_libraries)
# Only required to determine FT2_VERSION. The rest is ignored.
Modified: trunk/cmake/modules/pkg-config.cmake
===================================================================
--- trunk/cmake/modules/pkg-config.cmake 2019-07-10 00:03:58 UTC (rev 232)
+++ trunk/cmake/modules/pkg-config.cmake 2019-07-10 00:28:23 UTC (rev 233)
@@ -13,11 +13,27 @@
message(FATAL_ERROR "Build of libLASi requires pkg-config.")
endif(PKG_CONFIG_EXECUTABLE)
+# CYGWIN eliminated here because .a suffix is not sufficient to guarantee a
+# static library on that platform.
+if(UNIX AND NOT CYGWIN AND NOT BUILD_SHARED_LIBS)
+ option(PREFER_EXTERNAL_STATIC "Prefer external UNIX libraries to be static" OFF)
+else(UNIX AND NOT CYGWIN AND NOT BUILD_SHARED_LIBS)
+ set(PREFER_EXTERNAL_STATIC OFF CACHE BOOL "Prefer external UNIX libraries to be static" FORCE)
+endif(UNIX AND NOT CYGWIN AND NOT BUILD_SHARED_LIBS)
+
+if(PREFER_EXTERNAL_STATIC)
+ # All find_library commands append these suffixes to the searched name so
+ # this combination on Unix platforms means find_library will preferentially find the
+ # Unix static library if it exists, but otherwise find the shared library.
+ set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so")
+endif(PREFER_EXTERNAL_STATIC)
+
macro(pkg_check_pkgconfig _package _include_DIR _link_DIR _link_FLAGS _cflags _version)
- # Similar to legacy pkgconfig only these results are derived
- # from pkg_check_modules and therefore are returned as lists rather than
+ # Similar to legacy pkgconfig only these results are derived from
+ # pkg_check_modules and therefore are returned as lists rather than
# blank-delimited strings. Also, the _link_FLAGS value is converted
- # to the preferred CMake form via the cmake_link_flags macro.
+ # to the list of full library paths preferred by CMake via the
+ # cmake_link_flags macro.
# N.B. if using this macro in more than one context, cache clashes will
# occur unless optional trailing prefix argument is specified to distinguish
@@ -26,13 +42,30 @@
if(NOT _prefix)
set(_prefix "_PKGCONFIG_TMP")
endif(NOT _prefix)
-
- _pkg_check_modules_internal(0 0 ${_prefix} "${_package}")
- if (${_prefix}_FOUND)
- set(${_include_DIR} ${${_prefix}_INCLUDE_DIRS})
- set(${_link_DIR} ${${_prefix}_LIBRARY_DIRS})
- cmake_link_flags(${_link_FLAGS} "${${_prefix}_LDFLAGS}")
- set(${_cflags} ${${_prefix}_CFLAGS})
+
+ if(PREFER_EXTERNAL_STATIC)
+ set(_xprefix ${_prefix}_STATIC)
+ else(PREFER_EXTERNAL_STATIC)
+ set(_xprefix ${_prefix})
+ endif(PREFER_EXTERNAL_STATIC)
+
+ pkg_check_modules(${_prefix} "${_package}")
+
+ if(${_prefix}_FOUND)
+ cmake_link_flags(${_link_FLAGS} "${${_xprefix}_LDFLAGS}")
+ # If libraries cannot be not found, then that is equivalent to whole
+ # pkg-config module not being found.
+ if(NOT ${_link_FLAGS})
+ set(${_prefix}_FOUND)
+ endif(NOT ${_link_FLAGS})
+ endif(${_prefix}_FOUND)
+
+ if(${_prefix}_FOUND)
+ set(${_include_DIR} ${${_xprefix}_INCLUDE_DIRS})
+ set(${_link_DIR} ${${_xprefix}_LIBRARY_DIRS})
+ set(${_cflags} ${${_xprefix}_CFLAGS})
+ # N.B. must use ${_prefix}_VERSION} rather than ${_xprefix}_VERSION}
+ # because the latter is not defined.
set(${_version} ${${_prefix}_VERSION})
set(_return_VALUE 0)
else(${_prefix}_FOUND)
@@ -43,76 +76,94 @@
set(${_version})
set(_return_VALUE 1)
endif(${_prefix}_FOUND)
- #message("${_prefix}_FOUND = ${${_prefix}_FOUND}")
- #message("${_include_DIR} = ${${_include_DIR}}")
- #message("${_link_DIR} = ${${_link_DIR}}")
- #message("${_link_FLAGS} = ${${_link_FLAGS}}")
- #message("${_cflags} = ${${_cflags}}")
+ #message("DEBUG: ${_prefix}_FOUND = ${${_prefix}_FOUND}")
+ #message("DEBUG: ${_include_DIR} = ${${_include_DIR}}")
+ #message("DEBUG: ${_link_DIR} = ${${_link_DIR}}")
+ #message("DEBUG: ${_link_FLAGS} = ${${_link_FLAGS}}")
+ #message("DEBUG: ${_cflags} = ${${_cflags}}")
+ #message("DEBUG: ${_version} = ${${_version}}")
endmacro(pkg_check_pkgconfig)
-macro(pkg_config_link_flags _link_flags_out _link_flags_in)
+function(pkg_config_link_flags link_flags_out link_flags_in)
# Transform link flags into a form that is suitable to be used for
# output pkg-config (*.pc) files.
- # N.B. ${_link_flags_in} must be a string and not a list.
+ # N.B. ${link_flags_in} must be in quoted "${list_variable}" form
+ # where list_variable is a CMake list.
+ #message("(original link flags) = ${link_flags_in}")
# First strip out optimized / debug options which are not needed
# Currently only FindQt4 seems to need this.
if(CMAKE_BUILD_TYPE MATCHES "Debug")
# Get rid of the optimized keyword and immediately following library as
# well as the debug keyword anywhere such patterns occur in the list.
- string(REGEX REPLACE "(^|;)optimized;[^;]*;" "\\1" ${_link_flags_out} "${_link_flags_in}")
- string(REGEX REPLACE "(^|;)debug;" "\\1" ${_link_flags_out} "${${_link_flags_out}}")
+ string(REGEX REPLACE "(^|;)optimized;[^;]*;" "\\1" link_flags "${link_flags_in}")
+ string(REGEX REPLACE "(^|;)debug;" "\\1" link_flags "${link_flags}")
else(CMAKE_BUILD_TYPE MATCHES "Debug")
# Get rid of the debug keyword and immediately following library as
# well as the optimized keyword anywhere such patterns occur in the list.
- string(REGEX REPLACE "(^|;)debug;[^;]*;" "\\1" ${_link_flags_out} "${_link_flags_in}")
- string(REGEX REPLACE "(^|;)optimized;" "\\1" ${_link_flags_out} "${${_link_flags_out}}")
+ string(REGEX REPLACE "(^|;)debug;[^;]*;" "\\1" link_flags "${link_flags_in}")
+ string(REGEX REPLACE "(^|;)optimized;" "\\1" link_flags "${link_flags}")
endif(CMAKE_BUILD_TYPE MATCHES "Debug")
- #message("(original link flags) = ${_link_flags_in}")
- # Convert link flags to a blank-delimited string.
- string(REGEX REPLACE ";" " " ${_link_flags_out} "${${_link_flags_out}}")
- #message("(blanks) ${_link_flags_out} = ${${_link_flags_out}}")
+ #message("(stripped link flags) = ${link_flags}")
# Replace actual library names with the -LPATHNAME and -lLIBRARYNAME form
# since it appears pkg-config handles that latter form much better (with
# regard to keeping the correct order and eliminating duplicates).
- # These REGEX REPLACE's won't actually replace anything on bare windows since
- # library names are not of this form on that platform. Something to be
- # considered later if we decide to use pkg-config on bare windows.
+ # These suffix patterns for library pathnames appear to work fine on
+ # Linux, Mac OS X, and MinGW/MSYS but it may need some
+ # generalization on other platforms such as Cygwin.
- # This logic will need to be expanded for Unix platforms other than
- # Mac OS X and Linux.
- if(APPLE)
- set(suffix_list ".so" ".a" ".dylib")
- else(APPLE)
- set(suffix_list ".so" ".a")
- endif(APPLE)
+ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(suffix_pattern "(\\.so.*|\\.a)")
+ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ set(suffix_pattern "(\\.so.*|\\.a|\\.dylib)")
+ elseif(WIN32_OR_CYGWIN)
+ # Order is important here.
+ set(suffix_pattern "(\\.dll\\.a|\\.a)")
+ else(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ # Probably a non-Linux, non-Mac OS X, Unix platform
+ # For this case we assume the same as Linux.
+ set(suffix_pattern "(\\.so.*|\\.a)")
+ endif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
- foreach(suffix ${suffix_list})
- string(
- REGEX REPLACE "(/[^ ]*)/lib([^ ]*)\\${suffix}" "-L\\1 -l\\2"
- ${_link_flags_out}
- "${${_link_flags_out}}"
- )
- #message("(${suffix}) ${_link_flags_out} = ${${_link_flags_out}}")
- endforeach(suffix ${suffix_list})
+ set(_link_flags)
+ foreach(link_flag IN LISTS link_flags)
+ #message(STATUS "link_flag = ${link_flag}")
+ if(WIN32_OR_CYGWIN)
+ # Look for colon-delimited drive-letter form on these platforms.
+ string(REGEX REPLACE "^([a-zA-Z]:/.*)/lib(.*)${suffix_pattern}$" "-L\"\\1\" -l\\2" link_flag "${link_flag}")
+ endif(WIN32_OR_CYGWIN)
+ # Look for form starting with "/" on all platforms.
+ string(REGEX REPLACE "^(/.*)/lib(.*)${suffix_pattern}$" "-L\"\\1\" -l\\2" link_flag "${link_flag}")
+ #message(STATUS "(-L form of link_flag = ${link_flag}")
+ list(APPEND _link_flags ${link_flag})
+ endforeach(link_flag IN LISTS link_flags)
+ set(link_flags ${_link_flags})
+ set(_link_flags)
+ #message("(-L form of link_flags) = ${link_flags}")
- if(APPLE)
+ # Convert link flags to a blank-delimited string.
+ string(REGEX REPLACE ";" " " link_flags "${link_flags}")
+ #message("(blank-delimited) link_flags = ${link_flags}")
+
+ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
# For Mac OS X transform frameworks information into correct form.
string(
REGEX REPLACE
"/System/Library/Frameworks/([^ ]*)\\.framework"
"-framework \\1"
- ${_link_flags_out}
- ${${_link_flags_out}}
+ link_flags
+ "${link_flags}"
)
- #message("(frameworks) ${_link_flags_out} = ${${_link_flags_out}}")
- endif(APPLE)
+ #message("(frameworks) link_flags = ${link_flags}")
+ endif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
-endmacro(pkg_config_link_flags)
+ set(${link_flags_out} ${link_flags} PARENT_SCOPE)
+endfunction(pkg_config_link_flags)
+
macro(cmake_link_flags _link_flags_out _link_flags_in)
# Transform link flags delivered by pkg-config into the best form
# for CMake.
@@ -120,6 +171,8 @@
# is pkg-config delivers link flags using the -L and -l options which
# may not be the case for windows.
# N.B. ${_link_flags_in} must be a string and not a list.
+ # N.B. We deliberately do not remove duplicates in case those
+ # are required.
if("${_link_flags_in}" STREQUAL "")
set(${_link_flags_out})
@@ -129,6 +182,16 @@
# (such as "-framework whatever") so preserve those by splitting into
# separate list elements only if the next element starts with a hyphen.
string(REGEX REPLACE " -" ";-" _link_flags_list "${_link_flags_in}")
+ if(NOT MATH_LIB)
+ # On systems (normally Windows) where MATH_LIB is not defined
+ # filter out -lm from link flags. This works around a pkg-config
+ # configuration bug on Windows for the GTK+ stack of libraries where
+ # -lm is supplied as a required library flag when that library does
+ # not exist on Windows platforms.
+ list(REMOVE_ITEM _link_flags_list "-lm")
+ endif(NOT MATH_LIB)
+ #message("_link_flags_list = ${_link_flags_list}")
+
# Extract list of directories from -L options.
list(LENGTH _link_flags_list _link_flags_length)
math(EXPR _link_flags_length "${_link_flags_length} - 1")
@@ -143,26 +206,37 @@
endif(_list_element STREQUAL "-L${_list_element1}")
endforeach(_list_index RANGE ${_link_flags_length})
#message("_index_list = ${_index_list}")
- if("${_index_list}" STREQUAL "")
- else("${_index_list}" STREQUAL "")
+ if(NOT "${_index_list}" STREQUAL "")
# Remove -L options from list.
list(REMOVE_AT _link_flags_list ${_index_list})
- endif("${_index_list}" STREQUAL "")
+ endif(NOT "${_index_list}" STREQUAL "")
#message("_link_directory_list = ${_link_directory_list}")
#message("_link_flags_list (without -L options) = ${_link_flags_list}")
-
- # Derive ${_link_flags_out} from _link_flags_list with -l options
+
+ # Derive ${_link_flags_out} from _link_flags_list with -l options
# replaced by complete pathname of library.
list(LENGTH _link_flags_list _link_flags_length)
math(EXPR _link_flags_length "${_link_flags_length} - 1")
set(${_link_flags_out})
+ set(_success ON)
+ set(_not_found_list)
+ if(PREFER_EXTERNAL_STATIC)
+ # For PREFER_EXTERNAL_STATIC true need to keep certain system
+ # libraries in -l form to avoid an issue with mixing static
+ # versions of those libraries with a runtime with shared components.
+ set(_pass_through_libraries "-lm")
+ else(PREFER_EXTERNAL_STATIC)
+ set(_pass_through_libraries "")
+ endif(PREFER_EXTERNAL_STATIC)
foreach(_list_index RANGE ${_link_flags_length})
list(GET _link_flags_list ${_list_index} _list_element)
+ list(FIND _pass_through_libraries ${_list_element} _index_pass_through)
+ #message(STATUS "DEBUG: _index_pass_through = ${_index_pass_through} for _list_element = ${_list_element}")
string(REGEX REPLACE "^-l" "" _list_element1 "${_list_element}")
- if(_list_element STREQUAL "-l${_list_element1}")
+ if(_list_element STREQUAL "-l${_list_element1}" AND _index_pass_through EQUAL "-1")
set(_library_pathname "_library_pathname-NOTFOUND")
find_library(
- _library_pathname
+ _library_pathname
${_list_element1}
PATHS ${_link_directory_list}
NO_DEFAULT_PATH
@@ -170,26 +244,37 @@
# Try second time (without NO_DEFAULT_PATH) just in case pkg-config
# specified some system libraries without corresponding -L options.
find_library(
- _library_pathname
+ _library_pathname
${_list_element1}
PATHS ${_link_directory_list}
)
if(NOT _library_pathname)
- message(
- "Cannot find library corresponding to linker option ${_list_element}"
- )
- message(
- "original link flags delivered by pkg-config = ${_link_flags_in}"
- )
- message(FATAL_ERROR "FATAL ERROR in cmake_link_flags macro")
+ set(_success OFF)
+ list(APPEND _not_found_list ${_list_element1})
endif(NOT _library_pathname)
list(APPEND ${_link_flags_out} ${_library_pathname})
- else(_list_element STREQUAL "-L${_list_element1}")
- # link options that are not -L or -l passed through in correct order
- # in ${_link_flags_out}.
+ else(_list_element STREQUAL "-l${_list_element1}" AND _index_pass_through EQUAL "-1")
+ # link options that are not -L or -l or which are an -l option
+ # in _passed_through_libraries are _passed through in correct
+ # order in ${_link_flags_out}.
list(APPEND ${_link_flags_out} ${_list_element})
- endif(_list_element STREQUAL "-l${_list_element1}")
+ endif(_list_element STREQUAL "-l${_list_element1}" AND _index_pass_through EQUAL "-1")
endforeach(_list_index RANGE ${_link_flags_length})
- #message("${_link_flags_out} = ${${_link_flags_out}}")
+ #message(STATUS "DEBUG: ${_link_flags_out} = ${${_link_flags_out}}")
+
+ # If one or more of the libraries cannot be found, then return an
+ # empty ${_link_flags_out} as a sign of that failure.
+ if(NOT _success)
+ message(STATUS "WARNING: Library inconsistency detected. Your pkg-config files claim certain libraries are present, but CMake cannot find them.")
+ message(STATUS "The unfound library basenames are as follows:")
+ foreach(_not_found IN LISTS _not_found_list)
+ message(STATUS "${_not_found}")
+ endforeach(_not_found IN LISTS _not_found_list)
+ message(STATUS "Some library installation and/or adjustment of find-related environment variables or corresponding CMake variables will be required before CMake will be able to find these libraries.")
+ message(STATUS "cmake_link_flags WARNING: (original link flags) = ${_link_flags_in}")
+ message(STATUS "cmake_link_flags WARNING: (corresponding link flags with found libraries = ${_link_flags_out}) = ${${_link_flags_out}}")
+ message(STATUS "cmake_link_flags WARNING: ${_link_flags_out} is invalid so it is set to nothing to signal the failure of cmake_link_flags for the original link flags printed out above.")
+ set(${_link_flags_out})
+ endif(NOT _success)
endif("${_link_flags_in}" STREQUAL "")
endmacro(cmake_link_flags)
Modified: trunk/examples/CMakeLists.txt
===================================================================
--- trunk/examples/CMakeLists.txt 2019-07-10 00:03:58 UTC (rev 232)
+++ trunk/examples/CMakeLists.txt 2019-07-10 00:28:23 UTC (rev 233)
@@ -44,8 +44,20 @@
list(APPEND INSTALL_LIST ${SRC_ROOT_NAME}.cpp)
add_executable(${SRC_ROOT_NAME} ${SRC_ROOT_NAME}.cpp)
- target_link_libraries(${SRC_ROOT_NAME} LASi)
+ if(SRC_ROOT_NAME STREQUAL "ComplexTextLayoutExample")
+ # This example depends directly on the math library.
+ set(DEPENDENT_LIBRARIES LASi ${MATH_LIB})
+ else(SRC_ROOT_NAME STREQUAL "ComplexTextLayoutExample")
+ set(DEPENDENT_LIBRARIES LASi)
+ endif(SRC_ROOT_NAME STREQUAL "ComplexTextLayoutExample")
+
+ if(NON_TRANSITIVE)
+ target_link_libraries(${SRC_ROOT_NAME} PRIVATE ${DEPENDENT_LIBRARIES})
+ else(NON_TRANSITIVE)
+ target_link_libraries(${SRC_ROOT_NAME} PUBLIC ${DEPENDENT_LIBRARIES})
+ endif(NON_TRANSITIVE)
+
add_test(${SRC_ROOT_NAME}
${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME} ${CTEST_EXAMPLES_OUTPUT_DIR}/${SRC_ROOT_NAME}.eps
)
Modified: trunk/lasi.pc.in
===================================================================
--- trunk/lasi.pc.in 2019-07-10 00:03:58 UTC (rev 232)
+++ trunk/lasi.pc.in 2019-07-10 00:28:23 UTC (rev 233)
@@ -6,7 +6,7 @@
Name: LASi
Description: Library to write UTF-8 strings to Postscript stream.
Version: @VERSION@
-Requires: pangoft2,pango,freetype2, gobject-2.0, glib-2.0
+@PC_REQUIRES_LINE@
Libs: -L${libdir} -lLASi
Cflags: -I${includedir} @DLLFLAG@
Modified: trunk/src/CMakeLists.txt
===================================================================
--- trunk/src/CMakeLists.txt 2019-07-10 00:03:58 UTC (rev 232)
+++ trunk/src/CMakeLists.txt 2019-07-10 00:28:23 UTC (rev 233)
@@ -47,6 +47,7 @@
set(libLASi_LINK_LIBRARIES ${PANGOFT2_libraries})
if(MATH_LIB)
+ # libLASi depends directly on the math library.
list(APPEND libLASi_LINK_LIBRARIES ${MATH_LIB})
endif(MATH_LIB)
Added: trunk/test_tarball.sh.in
===================================================================
--- trunk/test_tarball.sh.in (rev 0)
+++ trunk/test_tarball.sh.in 2019-07-10 00:28:23 UTC (rev 233)
@@ -0,0 +1,189 @@
+#!/bin/bash
+
+# Bash script to test an existing libLASi tarball.
+
+# List of environment variables that always need to be defined to
+# taylor this script for a particular platform.
+
+for variable in LASI_VERSION PARALLEL_OPTION ; do
+ if [ -z "${!variable}" ] ; then
+ echo "Environment variable $variable should be set to a non-empty string before invoking this script"
+ exit 1
+ fi
+done
+
+# Optional environment variables which affect whether special PLplot comprehensive test
+# is performed as part of this test.
+if [ -z "$PLPLOT_CMAKE_PATH" -o -z "$PLPLOT_SOURCE_PREFIX" ] ; then
+ echo "One or both of PLPLOT_CMAKE_PATH or PLPLOT_SOURCE_PREFIX environment variables not"
+ echo "set. Therefore, will NOT do special PLplot comprehensive test of the psttf and"
+ echo "psttfc devices that depend on libLASi."
+ do_plplot_test="no"
+else
+ do_plplot_test="yes"
+fi
+
+# Command-line options (typically changed much more often than the above set of environment variables).
+CMAKE_PATH=$1
+CMAKE_OPTION_1=$2
+CMAKE_OPTION_2=$3
+
+SOURCE_TREE=@CMAKE_CURRENT_BINARY_DIR@/libLASi-$LASI_VERSION
+BUILD_TREE=@CMAKE_CURRENT_BINARY_DIR@/tarball_build_dir
+INSTALL_TREE=@CMAKE_CURRENT_BINARY_DIR@/tarball_install_dir
+
+TARBALL=@CMAKE_CURRENT_BINARY_DIR@/libLASi-$LASI_VERSION.tar.gz
+if [ ! -f $TARBALL ] ; then
+ echo "Could not find tarball = $TARBALL to be tested by this script"
+ exit 1
+fi
+
+# Unpack the tarball into a fresh source tree.
+rm -rf $SOURCE_TREE
+tar zxf $TARBALL
+
+# Start tarball test fresh with no build or install tree.
+rm -rf $BUILD_TREE
+rm -rf $INSTALL_TREE
+
+mkdir -p $BUILD_TREE
+cd $BUILD_TREE
+
+env PATH="$CMAKE_PATH:$PATH" cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_TREE $CMAKE_OPTION_1 $CMAKE_OPTION_2 $SOURCE_TREE >& cmake.out
+make $PARALLEL_OPTION >& make.out
+
+for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
+ # Inspect EPS results. Note a white background has to be imposed
+ # because these results have no background. So by default the
+ # background would be a checkerboard imposed by pqiv if this
+ # --background-pattern option was not used.
+ pqiv -i --background-pattern=white examples/$CORE_NAME.eps
+
+ # Inspect same results converted (with opaque white background
+ # added) to PNG format by inkscape.
+ pqiv -i examples/$CORE_NAME.png
+done
+
+# ldd and valgrind tests of the examples including comparisons of the
+# results generated with the previous results. Note, that 2>&1
+# redirects stderr to *current" stdout (which defaults to pipe),
+# test.eps afterwards means PostScript output goes directly to that
+# file rather than stdout (so nothing more is emitted to stdout), and
+# >| test.eps afterwards means PostScript output goes to stdout (but
+# not stderr) and stdout then overwrites whatever was in test.eps
+# before.
+
+for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
+ ldd -r examples/$CORE_NAME 2>&1 | less
+ valgrind examples/$CORE_NAME 2>&1 test.eps | less
+ cmp test.eps examples/$CORE_NAME.eps
+ valgrind examples/$CORE_NAME 2>&1 >| test.eps | less
+ cmp test.eps examples/$CORE_NAME.eps
+done
+
+# Run ctest
+env PATH="$CMAKE_PATH:$PATH" ctest $PARALLEL_OPTION --output-log >| ctest.out
+# Compare ctest results with above make results.
+for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
+ cmp examples/ctest_examples_output_dir/$CORE_NAME.eps examples/$CORE_NAME.eps
+done
+
+# Was ctest a complete success?
+grep -l "100% tests passed" ctest.out
+
+ctest_rc=$?
+
+if [ "$ctest_rc" -ne 0 ] ; then
+ echo "ERROR: ctest failed with the following complete output"
+ cat ctest.out
+ exit 1
+fi
+
+make $PARALLEL_OPTION install >& make_install.out
+cd $INSTALL_TREE/share/lasi$LASI_VERSION/examples
+make $PARALLEL_OPTION >& $BUILD_TREE/installed_traditional_make.out
+
+for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
+ ldd -r $CORE_NAME 2>&1 | less
+ cmp $CORE_NAME.eps $BUILD_TREE/examples/$CORE_NAME.eps
+ valgrind ./$CORE_NAME 2>&1 test.eps | less
+ cmp test.eps $CORE_NAME.eps
+ valgrind ./$CORE_NAME 2>&1 >| test.eps | less
+ cmp test.eps $CORE_NAME.eps
+done
+
+echo "Check for warnings/errors in all the *.out files generated prior to the comprehensive test"
+
+cd $BUILD_TREE
+# Fix me once deprecated warnings on gone.
+# Trailing grep stanzas are to drop false alarms due to deprecated warnings.
+grep -i warning *.out | grep -v deprecated
+grep -i error *.out | grep -vE 'FT_Error|throw'
+
+if [ "$do_plplot_test" = "yes" ] ; then
+ # Test the above installed version of libLASi with a specific PLplot comprehensive test.
+
+ # I deliberately place a blank in this pathname. Assuming that $PLPLOT_SOURCE_PREFIX" also has
+ # a blank, then this combination tests the case where the source, build, and install trees for the
+ # PLplot comprehensive test have blanks in their prefixes.
+ COMPREHENSIVE_TEST_PREFIX="@CMAKE_CURRENT_BINARY_DIR@/tarball_comprehensive_test_disposeable blank"
+
+
+ # Set CMAKE_PREFIX_PATH to access local versions of lua and libLASi
+ # to avoid important bugs in the Debian Testing versions of those
+ # packages and also to test the local version of libLASi installed above.
+ # Also access a local version of libqhull to test that additional
+ # rpath possibility.
+
+ # Put $PLPLOT_CMAKE_PATH first on the path to use that version of CMake and CTest for
+ # this PLplot test.
+
+ # Use the -DUSE_INCRTCL_VERSION_4=ON option to help CMake find Tcl/Tk
+ # components. (This step will not be necessary as soon as the PLplot
+ # build system is modified to make Tcl/Tk/Itcl/Itk/Iwidgets finding
+ # more robust.)
+
+ # The psttfc and psttf devices are the only ones that depend on
+ # libLASi. Therefore, use -DDEFAULT_NO_DEVICES=ON -DPLD_psttfc=ON
+ # -DPLD_psttf=ON -DPLPLOT_TEST_DEVICE=psttfc to drop all device
+ # testing other than psttfc and psttf and to use psttfc for the
+ # difference report.
+
+ # Use -DSWIG_EXECUTABLE=/home/software/swig/install/bin/swig to test a pre-release version
+ # o...
[truncated message content] |
|
From: <ai...@us...> - 2019-07-10 00:04:10
|
Revision: 232
http://sourceforge.net/p/lasi/code/232
Author: airwin
Date: 2019-07-10 00:03:58 +0000 (Wed, 10 Jul 2019)
Log Message:
-----------
Improve libLASi's find capability for pkg-config
I have dropped our dated and buggy cmake/modules/FindPkgConfig.cmake
find capability for pkg-config in favour of the well-maintained CMake
upstream version of FindPkgConfig.cmake. At least one positive result
of this change is that the CMake-wrapped pkg-config results match
those of the equivalent pkg-config command rather than incorrectly
mixing static and shared library results together (as I observed in
one particular test case before I dropped
cmake/modules/FindPkgConfig.cmake).
Tested by: Alan W. Irwin <ai...@us...> on Linux
(Debian Buster) by evaluating *PANGOFT2* variable results stored in
CMakeCache.txt before and after this change for the normal system
pango.pc file, and the case where that system file was modified to
exclude the direct dependence of libpango on the glib-2.0 and
gobject-2.0 libraries.
Removed Paths:
-------------
trunk/cmake/modules/FindPkgConfig.cmake
Deleted: trunk/cmake/modules/FindPkgConfig.cmake
===================================================================
--- trunk/cmake/modules/FindPkgConfig.cmake 2019-07-09 18:52:18 UTC (rev 231)
+++ trunk/cmake/modules/FindPkgConfig.cmake 2019-07-10 00:03:58 UTC (rev 232)
@@ -1,359 +0,0 @@
-# - a pkg-config module for CMake
-#
-# Usage:
-# pkg_check_modules(<PREFIX> [REQUIRED] <MODULE> [<MODULE>]*)
-# checks for all the given modules
-#
-# pkg_search_module(<PREFIX> [REQUIRED] <MODULE> [<MODULE>]*)
-# checks for given modules and uses the first working one
-#
-# When the 'REQUIRED' argument was set, macros will fail with an error
-# when module(s) could not be found
-#
-# It sets the following variables:
-# PKG_CONFIG_FOUND ... true iff pkg-config works on the system
-# PKG_CONFIG_EXECUTABLE ... pathname of the pkg-config program
-# <PREFIX>_FOUND ... set to 1 iff module(s) exist
-#
-# For the following variables two sets of values exist; first one is the
-# common one and has the given PREFIX. The second set contains flags
-# which are given out when pkgconfig was called with the '--static'
-# option.
-# <XPREFIX>_LIBRARIES ... only the libraries (w/o the '-l')
-# <XPREFIX>_LIBRARY_DIRS ... the paths of the libraries (w/o the '-L')
-# <XPREFIX>_LDFLAGS ... all required linker flags
-# <XPREFIX>_LDFLAGS_OTHER ... all other linker flags
-# <XPREFIX>_INCLUDE_DIRS ... the '-I' preprocessor flags (w/o the '-I')
-# <XPREFIX>_CFLAGS ... all required cflags
-# <XPREFIX>_CFLAGS_OTHER ... the other compiler flags
-#
-# <XPREFIX> = <PREFIX> for common case
-# <XPREFIX> = <PREFIX>_STATIC for static linking
-#
-# There are some special variables whose prefix depends on the count
-# of given modules. When there is only one module, <PREFIX> stays
-# unchanged. When there are multiple modules, the prefix will be
-# changed to <PREFIX>_<MODNAME>:
-# <XPREFIX>_VERSION ... version of the module
-# <XPREFIX>_PREFIX ... prefix-directory of the module
-# <XPREFIX>_INCLUDEDIR ... include-dir of the module
-# <XPREFIX>_LIBDIR ... lib-dir of the module
-#
-# <XPREFIX> = <PREFIX> when |MODULES| == 1, else
-# <XPREFIX> = <PREFIX>_<MODNAME>
-#
-# A <MODULE> parameter can have the following formats:
-# {MODNAME} ... matches any version
-# {MODNAME}>={VERSION} ... at least version <VERSION> is required
-# {MODNAME}={VERSION} ... exactly version <VERSION> is required
-# {MODNAME}<={VERSION} ... modules must not be newer than <VERSION>
-#
-# Examples
-# pkg_check_modules (GLIB2 glib-2.0)
-#
-# pkg_check_modules (GLIB2 glib-2.0>=2.10)
-# requires at least version 2.10 of glib2 and defines e.g.
-# GLIB2_VERSION=2.10.3
-#
-# pkg_check_modules (FOO glib-2.0>=2.10 gtk+-2.0)
-# requires both glib2 and gtk2, and defines e.g.
-# FOO_glib-2.0_VERSION=2.10.3
-# FOO_gtk+-2.0_VERSION=2.8.20
-#
-# pkg_check_modules (XRENDER REQUIRED xrender)
-# defines e.g.:
-# XRENDER_LIBRARIES=Xrender;X11
-# XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp
-#
-# pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2)
-
-
-# Copyright (C) 2006 Enrico Scholz <enr...@in...>
-#
-# Redistribution and use, with or without modification, are permitted
-# provided that the following conditions are met:
-#
-# 1. Redistributions must retain the above copyright notice, this
-# list of conditions and the following disclaimer.
-# 2. The name of the author may not be used to endorse or promote
-# products derived from this software without specific prior
-# written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-### Common stuff ####
-set(PKG_CONFIG_VERSION 1)
-set(PKG_CONFIG_FOUND 0)
-
-find_program(PKG_CONFIG_EXECUTABLE NAMES pkg-config DOC "pkg-config executable")
-mark_as_advanced(PKG_CONFIG_EXECUTABLE)
-
-if(PKG_CONFIG_EXECUTABLE)
- set(PKG_CONFIG_FOUND 1)
-endif(PKG_CONFIG_EXECUTABLE)
-
-
-# Unsets the given variables
-macro(_pkgconfig_unset var)
- set(${var} "" CACHE INTERNAL "")
-endmacro(_pkgconfig_unset)
-
-macro(_pkgconfig_set var value)
- set(${var} ${value} CACHE INTERNAL "")
-endmacro(_pkgconfig_set)
-
-# Invokes pkgconfig, cleans up the result and sets variables
-macro(_pkgconfig_invoke _pkglist _prefix _varname _regexp)
- set(_pkgconfig_invoke_result)
-
- execute_process(
- COMMAND ${PKG_CONFIG_EXECUTABLE} ${ARGN} ${_pkglist}
- OUTPUT_VARIABLE _pkgconfig_invoke_result
- RESULT_VARIABLE _pkgconfig_failed)
-
- if (_pkgconfig_failed)
- set(_pkgconfig_${_varname} "")
- _pkgconfig_unset(${_prefix}_${_varname})
- else(_pkgconfig_failed)
- string(REGEX REPLACE "[\r\n]" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}")
- string(REGEX REPLACE " +$" "" _pkgconfig_invoke_result "${_pkgconfig_invoke_result}")
-
- if (NOT ${_regexp} STREQUAL "")
- string(REGEX REPLACE "${_regexp}" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}")
- endif(NOT ${_regexp} STREQUAL "")
-
- separate_arguments(_pkgconfig_invoke_result)
-
- #message(STATUS " ${_varname} ... ${_pkgconfig_invoke_result}")
- set(_pkgconfig_${_varname} ${_pkgconfig_invoke_result})
- _pkgconfig_set(${_prefix}_${_varname} "${_pkgconfig_invoke_result}")
- endif(_pkgconfig_failed)
-endmacro(_pkgconfig_invoke)
-
-# Invokes pkgconfig two times; once without '--static' and once with
-# '--static'
-macro(_pkgconfig_invoke_dyn _pkglist _prefix _varname cleanup_regexp)
- _pkgconfig_invoke("${_pkglist}" ${_prefix} ${_varname} "${cleanup_regexp}" ${ARGN})
- _pkgconfig_invoke("${_pkglist}" ${_prefix} STATIC_${_varname} "${cleanup_regexp}" --static ${ARGN})
-endmacro(_pkgconfig_invoke_dyn)
-
-# Splits given arguments into options and a package list
-macro(_pkgconfig_parse_options _result _is_req)
- set(${_is_req} 0)
-
- foreach(_pkg ${ARGN})
- if (_pkg STREQUAL "REQUIRED")
- set(${_is_req} 1)
- endif (_pkg STREQUAL "REQUIRED")
- endforeach(_pkg ${ARGN})
-
- set(${_result} ${ARGN})
- list(REMOVE_ITEM ${_result} "REQUIRED")
-endmacro(_pkgconfig_parse_options)
-
-###
-macro(_pkg_check_modules_internal _is_required _is_silent _prefix)
- _pkgconfig_unset(${_prefix}_FOUND)
- _pkgconfig_unset(${_prefix}_VERSION)
- _pkgconfig_unset(${_prefix}_PREFIX)
- _pkgconfig_unset(${_prefix}_INCLUDEDIR)
- _pkgconfig_unset(${_prefix}_LIBDIR)
- _pkgconfig_unset(${_prefix}_LIBRARIES)
- _pkgconfig_unset(${_prefix}_LIBRARY_DIRS)
- _pkgconfig_unset(${_prefix}_LDFLAGS)
- _pkgconfig_unset(${_prefix}_LDFLAGS_OTHER)
- _pkgconfig_unset(${_prefix}_INCLUDE_DIRS)
- _pkgconfig_unset(${_prefix}_CFLAGS)
- _pkgconfig_unset(${_prefix}_CFLAGS_OTHER)
- _pkgconfig_unset(${_prefix}_STATIC_LIBRARIES)
- _pkgconfig_unset(${_prefix}_STATIC_LIBRARY_DIRS)
- _pkgconfig_unset(${_prefix}_STATIC_LDFLAGS)
- _pkgconfig_unset(${_prefix}_STATIC_LDFLAGS_OTHER)
- _pkgconfig_unset(${_prefix}_STATIC_INCLUDE_DIRS)
- _pkgconfig_unset(${_prefix}_STATIC_CFLAGS)
- _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_OTHER)
-
- # create a better addressable variable of the modules and calculate its size
- set(_pkg_check_modules_list ${ARGN})
- list(LENGTH _pkg_check_modules_list _pkg_check_modules_cnt)
-
- if(PKG_CONFIG_EXECUTABLE)
- # give out status message telling checked module
- if (NOT ${_is_silent})
- if (_pkg_check_modules_cnt EQUAL 1)
- message(STATUS "checking for module '${_pkg_check_modules_list}'")
- else(_pkg_check_modules_cnt EQUAL 1)
- message(STATUS "checking for modules '${_pkg_check_modules_list}'")
- endif(_pkg_check_modules_cnt EQUAL 1)
- endif(NOT ${_is_silent})
-
- set(_pkg_check_modules_packages)
- set(_pkg_check_modules_failed)
-
- # iterate through module list and check whether they exist and match the required version
- foreach (_pkg_check_modules_pkg ${_pkg_check_modules_list})
- set(_pkg_check_modules_exist_query)
-
- # check whether version is given
- if (_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*")
- string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\1" _pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}")
- string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\2" _pkg_check_modules_pkg_op "${_pkg_check_modules_pkg}")
- string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\3" _pkg_check_modules_pkg_ver "${_pkg_check_modules_pkg}")
- else(_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*")
- set(_pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}")
- set(_pkg_check_modules_pkg_op)
- set(_pkg_check_modules_pkg_ver)
- endif(_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*")
-
- # handle the operands
- if (_pkg_check_modules_pkg_op STREQUAL ">=")
- list(APPEND _pkg_check_modules_exist_query --atleast-version)
- endif(_pkg_check_modules_pkg_op STREQUAL ">=")
-
- if (_pkg_check_modules_pkg_op STREQUAL "=")
- list(APPEND _pkg_check_modules_exist_query --exact-version)
- endif(_pkg_check_modules_pkg_op STREQUAL "=")
-
- if (_pkg_check_modules_pkg_op STREQUAL "<=")
- list(APPEND _pkg_check_modules_exist_query --max-version)
- endif(_pkg_check_modules_pkg_op STREQUAL "<=")
-
- # create the final query which is of the format:
- # * --atleast-version <version> <pkg-name>
- # * --exact-version <version> <pkg-name>
- # * --max-version <version> <pkg-name>
- # * --exists <pkg-name>
- if (_pkg_check_modules_pkg_op)
- list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_ver}")
- else(_pkg_check_modules_pkg_op)
- list(APPEND _pkg_check_modules_exist_query --exists)
- endif(_pkg_check_modules_pkg_op)
-
- _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_VERSION)
- _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_PREFIX)
- _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_INCLUDEDIR)
- _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_LIBDIR)
-
- list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_name}")
- list(APPEND _pkg_check_modules_packages "${_pkg_check_modules_pkg_name}")
-
- # execute the query
- execute_process(
- COMMAND ${PKG_CONFIG_EXECUTABLE} ${_pkg_check_modules_exist_query}
- RESULT_VARIABLE _pkgconfig_retval)
-
- # evaluate result and tell failures
- if (_pkgconfig_retval)
- if(NOT ${_is_silent})
- message(STATUS " package '${_pkg_check_modules_pkg}' not found")
- endif(NOT ${_is_silent})
-
- set(_pkg_check_modules_failed 1)
- endif(_pkgconfig_retval)
- endforeach(_pkg_check_modules_pkg)
-
- if(_pkg_check_modules_failed)
- # fail when requested
- if (${_is_required})
- message(SEND_ERROR "A required package was not found")
- endif (${_is_required})
- else(_pkg_check_modules_failed)
- # when we are here, we checked whether requested modules
- # exist. Now, go through them and set variables
-
- _pkgconfig_set(${_prefix}_FOUND 1)
- list(LENGTH _pkg_check_modules_packages pkg_count)
-
- # iterate through all modules again and set individual variables
- foreach (_pkg_check_modules_pkg ${_pkg_check_modules_packages})
- # handle case when there is only one package required
- if (pkg_count EQUAL 1)
- set(_pkg_check_prefix "${_prefix}")
- else(pkg_count EQUAL 1)
- set(_pkg_check_prefix "${_prefix}_${_pkg_check_modules_pkg}")
- endif(pkg_count EQUAL 1)
-
- _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" VERSION "" --modversion )
- _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" PREFIX "" --variable=prefix )
- _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" INCLUDEDIR "" --variable=includedir )
- _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" LIBDIR "" --variable=libdir )
-
- message(STATUS " found ${_pkg_check_modules_pkg}, version ${_pkgconfig_VERSION}")
- endforeach(_pkg_check_modules_pkg)
-
- # set variables which are combined for multiple modules
- _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARIES "(^| )-l" --libs-only-l )
- _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARY_DIRS "(^| )-L" --libs-only-L )
- _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS "" --libs )
- _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS_OTHER "" --libs-only-other )
-
- _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" INCLUDE_DIRS "(^| )-I" --cflags-only-I )
- _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS "" --cflags )
- _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS_OTHER "" --cflags-only-other )
- endif(_pkg_check_modules_failed)
- else(PKG_CONFIG_EXECUTABLE)
- if (${_is_required})
- message(SEND_ERROR "pkg-config tool not found")
- endif (${_is_required})
- endif(PKG_CONFIG_EXECUTABLE)
-endmacro(_pkg_check_modules_internal)
-
-###
-### User visible macros start here
-###
-
-###
-macro(pkg_check_modules _prefix _module0)
- # check cached value
- if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION})
- _pkgconfig_parse_options (_pkg_modules _pkg_is_required "${_module0}" ${ARGN})
- _pkg_check_modules_internal("${_pkg_is_required}" 0 "${_prefix}" ${_pkg_modules})
-
- _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION})
- endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION})
-endmacro(pkg_check_modules)
-
-###
-macro(pkg_search_module _prefix _module0)
- # check cached value
- if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION})
- set(_pkg_modules_found 0)
- _pkgconfig_parse_options(_pkg_modules_alt _pkg_is_required "${_module0}" ${ARGN})
-
- message(STATUS "checking for one of the modules '${_pkg_modules_alt}'")
-
- # iterate through all modules and stop at the first working one.
- foreach(_pkg_alt ${_pkg_modules_alt})
- if(NOT _pkg_modules_found)
- _pkg_check_modules_internal(0 1 "${_prefix}" "${_pkg_alt}")
- endif(NOT _pkg_modules_found)
-
- if (${_prefix}_FOUND)
- set(_pkg_modules_found 1)
- endif(${_prefix}_FOUND)
- endforeach(_pkg_alt)
-
- if (NOT ${_prefix}_FOUND)
- if(${_pkg_is_required})
- message(SEND_ERROR "None of the required '${_pkg_modules_alt}' found")
- endif(${_pkg_is_required})
- endif(NOT ${_prefix}_FOUND)
-
- _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION})
- endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION})
-endmacro(pkg_search_module)
-
-### Local Variables:
-### mode: cmake
-### End:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-07-09 18:52:20
|
Revision: 231
http://sourceforge.net/p/lasi/code/231
Author: airwin
Date: 2019-07-09 18:52:18 +0000 (Tue, 09 Jul 2019)
Log Message:
-----------
Drop the www subdirectory from the source release tarball
After the release of 1.1.3 we put our
[website](http://unifont.org/lasi/) files under svn control (under the
www subdirectory). However, those files include many binary files
including historical source release tarballs of libLASi! So
everything under www should be excluded from future release tarballs
(such as the forthcoming 1.1.4), and this commit makes that so.
Tested by: Alan W. Irwin <ai...@us...> on Linux
(Debian Buster) by configuring libLASi as usual with CMake,
and building the all (to build the documentation) and package_source
targets. The resulting tarball did not include any file from www
(as expected).
Modified Paths:
--------------
trunk/CMakeLists.txt
Modified: trunk/CMakeLists.txt
===================================================================
--- trunk/CMakeLists.txt 2019-06-05 23:59:29 UTC (rev 230)
+++ trunk/CMakeLists.txt 2019-07-09 18:52:18 UTC (rev 231)
@@ -155,6 +155,7 @@
"~$"
"^${PROJECT_SOURCE_DIR}.*\\\\.svn/"
"^${PROJECT_SOURCE_DIR}/debian"
+"^${PROJECT_SOURCE_DIR}/www"
)
#message("CPACK_SOURCE_IGNORE_FILES = ${CPACK_SOURCE_IGNORE_FILES}")
include(CPack)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-06-05 23:59:32
|
Revision: 230
http://sourceforge.net/p/lasi/code/230
Author: airwin
Date: 2019-06-05 23:59:29 +0000 (Wed, 05 Jun 2019)
Log Message:
-----------
Fix underlinking issue discovered by Luigi Baldoni
Luigi discovered [a long-standing underlinking
issue](https://sourceforge.net/p/lasi/bugs/6/). I confirmed the
undefined symbols (`g_object_unref' and `g_list_free') were directly
required by libLASi by running
nm --undefined-only --demangle src/libLASi.so |less
The extremely simple fix (contained in this commit) is to directly
link libLASi to the libraries that define these symbols by appending
"gobject-2.0,glib-2.0" to the Requires: line in lasi.pc(.in).
Without this fix to directly link libLASi with these libraries, this
underlinking is an "accident waiting to happen". But these symbols
have been required by libLASi for at least the last decade so it
actually took a very long time for that accident to occur, and the
reason for that is that pango.pc typically (e.g., Debian Buster)
includes "gobject-2.0,glib-2.0" in its "Requires:" line therefore
effectively covering up for this underlinking bug in the libLASi lasi.pc file
that is fixed in this commit. But
apparently that coverup did not occur for the latest (Tumbleweed)
version of openSUSE, and my thanks to Luigi for reporting this issue
back to me.
Tested by: Alan W. Irwin <ai...@us...> on Linux
(Debian Testing) by configuring the updated libLASi as usual with
cmake and checking that the correct Requires: line (including
"gobject-2.0,glib-2.0") is propagated in that configuration, and "make
all" and "ctest" work without build issues.
Modified Paths:
--------------
trunk/lasi.pc.in
Modified: trunk/lasi.pc.in
===================================================================
--- trunk/lasi.pc.in 2019-02-14 05:33:21 UTC (rev 229)
+++ trunk/lasi.pc.in 2019-06-05 23:59:29 UTC (rev 230)
@@ -6,7 +6,7 @@
Name: LASi
Description: Library to write UTF-8 strings to Postscript stream.
Version: @VERSION@
-Requires: pangoft2,pango,freetype2
+Requires: pangoft2,pango,freetype2, gobject-2.0, glib-2.0
Libs: -L${libdir} -lLASi
Cflags: -I${includedir} @DLLFLAG@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-02-14 05:33:23
|
Revision: 229
http://sourceforge.net/p/lasi/code/229
Author: airwin
Date: 2019-02-14 05:33:21 +0000 (Thu, 14 Feb 2019)
Log Message:
-----------
Add a preview image of the logo that has margins and a drop shadow
I created that preview with inkscape following the instructions
in www/images/README_Preview.
Tested by: Alan W. Irwin <ai...@us...> on Linux
(Debian Testing) by validating the updated page at
<https://validator.w3.org/#validate-by-upload>. That site said that
page was valid XHTML 1.0 Transitional. I also used a browser
(konqueror) to view the results for this changed page that are
delivered by a local apache server, and the updated preview of the
logo as well as the larger logo you get when clicking on that preview
both look good.
Modified Paths:
--------------
trunk/www/index.html
Added Paths:
-----------
trunk/www/images/PreviewDropComplexTextLayoutExample.png
trunk/www/images/README_Preview
Added: trunk/www/images/PreviewDropComplexTextLayoutExample.png
===================================================================
(Binary files differ)
Index: trunk/www/images/PreviewDropComplexTextLayoutExample.png
===================================================================
--- trunk/www/images/PreviewDropComplexTextLayoutExample.png 2019-02-13 09:28:51 UTC (rev 228)
+++ trunk/www/images/PreviewDropComplexTextLayoutExample.png 2019-02-14 05:33:21 UTC (rev 229)
Property changes on: trunk/www/images/PreviewDropComplexTextLayoutExample.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Added: trunk/www/images/README_Preview
===================================================================
--- trunk/www/images/README_Preview (rev 0)
+++ trunk/www/images/README_Preview 2019-02-14 05:33:21 UTC (rev 229)
@@ -0,0 +1,116 @@
+The purpose of this document is to keep notes on how I used inkscape
+(which I have not used that much before) to convert
+ComplexTextLayoutExample.eps (the vector source file that is generated
+in the LASi build tree) to a 200x182 (+ margin + drop shadow border)
+PNG preview of that file with margin and drop shadow applied.
+
+Fire up inkscape in the background
+
+inkscape &
+
+Most of the rest of these commands are done using that inkscape GUI.
+
+* Import ComplexTextLayoutExample.eps
+ Use ctrl-i shortcut to do that import and leave everything as
+ default on the import form. As a result of the import the inkscape
+ plot object corresponding to the plot file import is already
+ selected, but if you ever accidentally unselect the object you can
+ reselect it with the spacebar key and clicking on the object.
+
+* Set document properties for the selected plot object
+ Use shift-ctrl-d for this purpose. Set both display and custom size
+ units to pixels. Then "resize page to content" -> "resize page to
+ drawing or selection".
+
+* Drag selected plot object
+ As a result of the drag the object's top left corner should agree
+ with the x zero point to facilitate measuring the size of the
+ result. Remember to drag text part since if you attempt to drag on
+ the non-existent background, a box appears (which is what I think
+ occurs if you drag on any empty part of the canvas).
+
+* Resize the plot object
+ The size should be 200 x 182 pixels. Use one of the handles that is
+ on the inner side from the scale so you can keep track of the size
+ of the result. Use the ctrl key with the handles to insure the
+ aspect ratio is preserved. So when the x size is set this way to
+ near 200, y will automatically be near 182. For the document
+ properties, hit "resize page to drawing or selection" again to
+ update the document properties to agree with the new object size.
+ You apparently can also use the width and height items at the top of
+ the page to adjust the size to exactly 200x182, but I am not sure whether those crop
+ or resize since the original size was so close to that.
+
+* Save this plot object as an intermediate result
+ Use shift-ctrl-s for this purpose and choose inkscape native svg format
+ for this save to the name PreviewDropComplexTextLayoutExample.svg.
+ And from now on save to that file (with ctrl-s) whenver a step below has
+ completed successfully (since inkscape is pretty damn unstable still).
+
+* Create a white rectangle of the same size
+ Create this object by using the rectangle shortcut (on the left),
+ resize that rectangle to 210x190 (10 larger than the plot object above
+ to approximate margins). Use the width and height items at
+ the top of the page to do this, change its color from black (at first) to
+ white by selecting the object and clicking on the white color swatch
+ below. Of course, this makes the rectangle disappear so you need to
+ keep track of where it is to select that area to select the white
+ rectangle object.
+
+* Apply a drop shadow on the white rectangle
+ The idea is once this object is prepared this way this rectangle
+ with attached drop shadow will be grouped below the text object to
+ provide a white background to that object with a blurred black drop
+ shadow to create the nice overall effect that we want.
+
+ It turned out that inkscape kept crashing when I tried this (UGH, I
+ HATE UNSTABLE SOFTWARE!) so to avoid that as much as possible, I
+ prepared the filters menu -> shadows and glows -> drop shadow
+ properties beforehand without applying them. And apparently
+ inkscape remembers at least some of these values between (crashed)
+ sessions. I used a blur, x offset, and y offset of 2,2,2 and
+ selected a color of dark gray opaque = 404040ff for the shadow to
+ produce a good-looking drop shadow.
+
+* Align the two objects
+ Apparently there are all sorts of sophisticated ways to assure
+ perfect alignment, but I just used drag and drop to do this.
+ I had to set snap properties for the plot object to 1 pixel
+ to keep it from snapping at one corner or another without
+ centring. You set those properties by selecting the
+ (plot) object, then use shift-ctrl-d, then set snap to
+ 1 pixel. N.B. after the two objects are selected but
+ not grouped (see first part of the step below) they are locked
+ together in the same alignment. So selection (the next step) must
+ occur after they are aligned.
+
+* Select the two objects and group them
+ The trick here is to use shift left click to select more than one
+ object at a given time. This command is a toggle that will add to
+ the number of selected objects if the object is currently unselected
+ and remove from the selection from the selected objects if the
+ object is currently selected. There is some text at the bottom of
+ the inkscape canvas which tells you what is going on with
+ selection. I did the shift-click version on the shadow to make sure
+ I was adding that shadowed rectangle to the plot object I had
+ selected before. Or you could probably use PageUp/PageDown. Once
+ you are satisfied with the objects that are selected, use ctrl-g to
+ group them and shift-crtl-g to ungroup them again.
+
+* Reset object properties
+ Before saving the file for the last time you should (very likely)
+ set object properties. Use shift-ctrl-d for this purpose, which
+ should reveal that both display and custom size units are pixels.
+ However, if you "resize page to content" ==> "resize page to drawing
+ or selection", the overall size changes. As a result I think this
+ step is necessary.
+
+* Save that final result using ctrl-s
+
+Finished with inkscape GUI!
+
+N.B. pqiv reveals that the shadow drop region still has transparency (despite
+the opaque setting above). So should insert a white background when transforming
+this SVG result to PNG. I did that as follows:
+
+inkscape --export-background=\#ffffff --file=PreviewDropComplexTextLayoutExample.svg --export-png=PreviewDropComplexTextLayoutExample.png
Modified: trunk/www/index.html
===================================================================
--- trunk/www/index.html 2019-02-13 09:28:51 UTC (rev 228)
+++ trunk/www/index.html 2019-02-14 05:33:21 UTC (rev 229)
@@ -46,7 +46,7 @@
<h1 id="introduction">Introduction</h1>
- <a href="images/ComplexTextLayoutExample.png"><img class="floatLeft" src="images/ComplexTextLayoutExample.png" width="200" height="182" alt="LASi-generated logo featuring Complex Text Layout"/></a>
+ <a href="images/ComplexTextLayoutExample.png"><img class="floatLeft" src="images/PreviewDropComplexTextLayoutExample.png" width="200" height="182" alt="LASi-generated logo featuring Complex Text Layout"/></a>
<p>
<b>libLASi</b> is a library written
by <a href="http://www-personal.umich.edu/~lsiden">Larry
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-02-13 09:28:53
|
Revision: 228
http://sourceforge.net/p/lasi/code/228
Author: airwin
Date: 2019-02-13 09:28:51 +0000 (Wed, 13 Feb 2019)
Log Message:
-----------
Use an updated logo for the website
This logo has been copied from the examples subdirectory of the source
tree. It is a recently (as of the release of 1.1.3) generated result
from the ComplexTextLayoutExample example that has been converted from
EPS to PNG format using inkscape. This logo looks better than
the old logo. I presume that is because the fonts available on
Linux now are of much higher quality.
Tested by: Alan W. Irwin <ai...@us...> on Linux
(Debian Testing) by validating the updated page at
<https://validator.w3.org/#validate-by-upload>. That site said that
page was valid XHTML 1.0 Transitional. I also used a browser
(konqueror) to view the results for this changed page that are
delivered by a local apache server, and the updated logo looks good.
Modified Paths:
--------------
trunk/www/index.html
Added Paths:
-----------
trunk/www/images/ComplexTextLayoutExample.png
Copied: trunk/www/images/ComplexTextLayoutExample.png (from rev 227, trunk/examples/ComplexTextLayoutExample.png)
===================================================================
(Binary files differ)
Modified: trunk/www/index.html
===================================================================
--- trunk/www/index.html 2019-02-13 07:28:39 UTC (rev 227)
+++ trunk/www/index.html 2019-02-13 09:28:51 UTC (rev 228)
@@ -46,12 +46,12 @@
<h1 id="introduction">Introduction</h1>
- <a href="images/LASiSample.png"><img class="floatLeft" src="images/SmallLASiSample.png" alt="Sample LASi-generated document" /></a>
+ <a href="images/ComplexTextLayoutExample.png"><img class="floatLeft" src="images/ComplexTextLayoutExample.png" width="200" height="182" alt="LASi-generated logo featuring Complex Text Layout"/></a>
<p>
<b>libLASi</b> is a library written
by <a href="http://www-personal.umich.edu/~lsiden">Larry
- Siden</a> that provides a <b>C++</b> stream output interface (
- with operator <code><<</code> ) for creating Postscript
+ Siden</a> that provides a <b>C++</b> stream output interface
+ (with operator <code><<</code>) for creating Postscript
documents that can contain characters from any of the scripts and
symbol blocks supported
in <a href="http://www.unicode.org">Unicode</a> and by
@@ -62,8 +62,7 @@
Devanagari, Thai, Lao, and Tibetan are supported to the extent
provided by Pango and by the OpenType fonts installed on your
system. All of this is provided without need for any special
- configuration or layout calculation on the programmer's
- part.
+ configuration or layout calculation on the programmer's part.
</p>
<p>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-02-13 07:28:41
|
Revision: 227
http://sourceforge.net/p/lasi/code/227
Author: airwin
Date: 2019-02-13 07:28:39 +0000 (Wed, 13 Feb 2019)
Log Message:
-----------
Add validation checking and unicode encoded logo icons to index.html
I added validation checking icons for valid XHTML 1.0 Transitional and valid
CSS.
Here is the justification for adding those icons. I used
<https://validator.w3.org/#validate-by-upload> to verify that
index.html was valid XHTML 1.0 Transitional. I have also used
<http://jigsaw.w3.org/css-validator/> to verify that
<unifont.org/lasi> (the, as yet, unchanged version of the LASi site)
was valid CSS. And since for the updated site files I have changed
nothing in the css subdirectory or in the CSS elements of index.html,
I have assumed that when that LASi site is updated to the current
version of the site that is under svn control, then
<http://jigsaw.w3.org/css-validator/> will also verify that (the
updated) <unifont.org/lasi> is valid CSS. (Of course, after that
update, it should be easy to check validity by clicking the validation
checking icons.)
I have also followed what <unifont.org/index.html> does by adding
a unicode-encoded logo icon from <http://unicode.org/consortium/uniencoded.html>
to indicate that the LASi website is encoded using Unicode. This change
required adding UniEncWhite.gif to the images subdirectory.
Tested by: Alan W. Irwin <ai...@us...> on Linux
(Debian Testing) by validating index.html using
<https://validator.w3.org/#validate-by-upload>.
Modified Paths:
--------------
trunk/www/index.html
Added Paths:
-----------
trunk/www/images/UniEncWhite.gif
Added: trunk/www/images/UniEncWhite.gif
===================================================================
(Binary files differ)
Index: trunk/www/images/UniEncWhite.gif
===================================================================
--- trunk/www/images/UniEncWhite.gif 2019-02-13 06:51:12 UTC (rev 226)
+++ trunk/www/images/UniEncWhite.gif 2019-02-13 07:28:39 UTC (rev 227)
Property changes on: trunk/www/images/UniEncWhite.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/gif
\ No newline at end of property
Modified: trunk/www/index.html
===================================================================
--- trunk/www/index.html 2019-02-13 06:51:12 UTC (rev 226)
+++ trunk/www/index.html 2019-02-13 07:28:39 UTC (rev 227)
@@ -27,6 +27,17 @@
<a href="#maintainers">Maintainers</a>
<a href="#credits">Credits</a>
<a href="#colophon">Colophon</a>
+ <p>
+ <a href="http://validator.w3.org/check?uri=referer">
+ <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" />
+ </a>
+ <a href="http://jigsaw.w3.org/css-validator/check/referer">
+ <img style="border:0;width:88px;height:31px" src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!" />
+ </a>
+ <a href="http://www.unicode.org/">
+ <img border="0" src="images/UniEncWhite.gif" alt="Unicode Encoded"/>
+ </a>
+ </p>
</div>
<div id="content">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-02-13 06:51:13
|
Revision: 226
http://sourceforge.net/p/lasi/code/226
Author: airwin
Date: 2019-02-13 06:51:12 +0000 (Wed, 13 Feb 2019)
Log Message:
-----------
Consolidate menu items
The menu was getting too long so I consolidated menu items by moving the
"Motivation" and "Status" sections into the "Introduction" section, and
the "If you have trouble ..." section into the "Platform Notes" section.
The content of this moved text was tweaked a bit to fit it smoothly
into its different section, but no big text changes were made.
Tested by: Alan W. Irwin <ai...@us...> on Linux
(Debian Testing) by validating the updated page at
<https://validator.w3.org/#validate-by-upload> as XHTML 1.0
Transitional and by using a browser (konqueror) to view the results
for this changed page that are delivered by a local apache server.
Modified Paths:
--------------
trunk/www/index.html
Modified: trunk/www/index.html
===================================================================
--- trunk/www/index.html 2019-02-13 02:49:15 UTC (rev 225)
+++ trunk/www/index.html 2019-02-13 06:51:12 UTC (rev 226)
@@ -16,14 +16,11 @@
<div id="menu">
<a href="#introduction">Introduction</a>
- <a href="#motivation">Motivation</a>
- <a href="#status">Status</a>
<a href="#resources">Resources</a>
<a href="#fonts">Fonts</a>
<a href="#free_software_distributions">Distributions</a>
<a href="#cmake">Build</a>
<a href="#platform">Platform Notes</a>
- <a href="#trouble">If you have trouble ...</a>
<a href="#api">API Docs</a>
<a href="#examples">Examples</a>
<a href="#author">Original Author</a>
@@ -40,56 +37,56 @@
<a href="images/LASiSample.png"><img class="floatLeft" src="images/SmallLASiSample.png" alt="Sample LASi-generated document" /></a>
<p>
- <b>libLASi</b> is a library written by <a href="http://www-personal.umich.edu/~lsiden">Larry Siden</a>
- that provides a <b>C++</b> stream output interface
- ( with operator <code><<</code> ) for creating Postscript documents that can
- contain characters from any of the scripts and symbol blocks supported
- in <a href="http://www.unicode.org">Unicode</a>
- and by the <a href="http://www.pango.org">Pango</a> layout engine.
- The library accommodates right-to-left scripts such as Arabic and Hebrew as easily as
- left-to-right scripts. Indic and Indic-derived Complex Text Layout (CTL)
- scripts, such as Devanagari, Thai, Lao, and Tibetan are supported to the extent
- provided by Pango and by the OpenType fonts installed on your system.
- All of this is provided without need for any special configuration or layout calculation
- on the programmer's part.
+ <b>libLASi</b> is a library written
+ by <a href="http://www-personal.umich.edu/~lsiden">Larry
+ Siden</a> that provides a <b>C++</b> stream output interface (
+ with operator <code><<</code> ) for creating Postscript
+ documents that can contain characters from any of the scripts and
+ symbol blocks supported
+ in <a href="http://www.unicode.org">Unicode</a> and by
+ the <a href="http://www.pango.org">Pango</a> layout engine. The
+ library accommodates right-to-left scripts such as Arabic and
+ Hebrew as easily as left-to-right scripts. Indic and
+ Indic-derived Complex Text Layout (CTL) scripts, such as
+ Devanagari, Thai, Lao, and Tibetan are supported to the extent
+ provided by Pango and by the OpenType fonts installed on your
+ system. All of this is provided without need for any special
+ configuration or layout calculation on the programmer's
+ part.
</p>
<p>
- Although the capability to produce Unicode-based multilingual Postscript documents
- exists in large Open Source application framework libraries such as
- <a href="http://www.gtk.org"><b>GTK+</b></a>,
- <a href="https://www.qt.io/"><b>Qt</b></a>, and
- <a href="http://www.kde.org"><b>KDE</b></a>,
- <b>libLASi</b> was designed for projects which require
- the ability to produce Postscript independent of any one application framework.
+ Although the capability to produce Unicode-based multilingual
+ Postscript documents exists in large Open Source application
+ framework libraries such as
+ <a href="http://www.gtk.org"><b>GTK+</b></a>,
+ <a href="https://www.qt.io/"><b>Qt</b></a>, and
+ <a href="http://www.kde.org"><b>KDE</b></a>,
+ <b>libLASi</b> was designed for projects which require the ability
+ to produce Postscript independent of any one application
+ framework.
+ <a href="strategy.html">This document</a> outlines the motivation
+ and strategy employed in the development of <b>LASi</b>.
</p>
+
+ <p>
+ <b>LASi</b> is mature software with no further features planned, but because
+ of sustained user interest over the years we still actively
+ maintain it. For example, we highly recommend the latest release of
+ <b>LASi</b> because of the bug fixes that release contains. For more
+ details about that release (version 1.1.3 released on 2019-02-01)
+ please
+ see <a href="https://sourceforge.net/p/lasi/news/2019/02/liblasi-113-has-been-released/">the
+ news item</a>
+ and <a href="https://sourceforge.net/projects/lasi/files/lasi/1.1.3%20Source/">file
+ release area (including release notes)</a> for that release.
+ </p>
-<h1 id="motivation">Motivation</h1>
-
-<p>
- T<a href="strategy.html">his document</a> outlines the motivation and strategy employed in the development
- of <b>LASi</b>.
-</p>
-
-<h1 id="status">Development Status and Latest Release</h1>
-
- <p>
- We have no plans to add features to <b>LASi</b>, but because
- of sustained user interest over the years we still actively
- maintain it. For example, we highly recommend the latest release of
- <b>LASi</b> because of the bug fixes that release contains. For more
- details about that release (version 1.1.3 released on 2019-02-01)
- please
- see <a href="https://sourceforge.net/p/lasi/news/2019/02/liblasi-113-has-been-released/">the
- news item</a>
- and <a href="https://sourceforge.net/projects/lasi/files/lasi/1.1.3%20Source/">file
- release area (including release notes)</a> for that release.
- </p>
-
<h1 id="resources">SourceForge Resources</h1>
<p>
- The following SourceForge resources should be of interest to <b>LASi</b> users.
+ The following SourceForge resources for <b>LASi</b> should be of
+ interest to users of that software.
</p>
<ul>
<li><a href="http://sourceforge.net/projects/lasi">Project Page</a></li>
@@ -266,7 +263,6 @@
each such step the user should inspect those files for any warning
or error messages before proceeding to the next step.
</p>
-
<h1 id="platform">Platform Specific Notes</h1>
@@ -289,18 +285,12 @@
of <b>LASi</b> using variants of the general <a href="#cmake">
CMake-based procedure above</a>; and good results on Linux
(specifically Debian Testing) for the recommended "Unix Makefiles"
- procedure for the latest release of <b>LASi</b>. That said, if you
- do not get good results for the latest release of <b>LASi</b> using
- the above "Unix Makefiles" procedure for any free software
- distribution, we would like to hear from you (preferably on
- our <a href="https://sourceforge.net/projects/lasi/lists/lasi-devel/">mailing
- list</a>).
+ procedure for the latest release of <b>LASi</b>.
</p>
-<h1 id="trouble">If you have trouble building LASi ...</h1>
- <p>
- If you have trouble building <b>LASi</b>, the usual culprits are:
- </p>
+<p>
+ That said, if you have trouble building <b>LASi</b>, the usual culprits are:
+</p>
<ul>
@@ -323,15 +313,26 @@
</li>
<li>
- <b>pkg-config</b> problems. You must install pkg-config from your
- distribution. (Otherwise, the <code>cmake</code> step in the
+ Dependencies not installed. If you do not install the <b>LASi</b>
+ dependencies from your
+ <a href="#free_software_distributions">free software
+ distribution</a>, the <code>cmake</code> step in the
<a href="#unix_makefiles">"Unix Makefiles"</a> procedure will
- error out). We anticipate no other issues with pkg-config since our
- experience is it "just works" (if installed from a
- <a href="#free_software_distributions">free software distribution</a>).
+ error out in most cases or else produce a warning when the missing
+ dependency is not critical). So it is important to review
+ the <code>cmake.out</code> output from the cmake step to confirm
+ you have the correct packages installed.
</li>
-
</ul>
+<p>
+ Note that if you have solved all cmake version problems and
+ installed all dependencies, and you still do not get good results
+ for the latest release of <b>LASi</b> for using the above "Unix
+ Makefiles" procedure for any free software distribution, we would
+ like to hear from you (preferably on
+ our <a href="https://sourceforge.net/projects/lasi/lists/lasi-devel/">mailing
+ list</a>).
+</p>
<h1 id="api">API Documentation</h1>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-02-13 02:49:17
|
Revision: 225
http://sourceforge.net/p/lasi/code/225
Author: airwin
Date: 2019-02-13 02:49:15 +0000 (Wed, 13 Feb 2019)
Log Message:
-----------
Complete rewrite of the website index.html page
When this webpage was originally written in the first decade of the
21st century, building LASi was an adventure because of problematic
support within free software distributions for its many dependencies.
And the use of CMake to configure the build was a pretty new concept
back then as well. And this web page reflected that era with many
possible workarounds recommended for the problems that were expected.
However, using CMake to build LASi should now be absolutely routine
for essentially all free software distributions. Therefore, in this
rewrite I tried to emphasize the calm certainty that everything would
work properly. And as a result this webpage is much shorter, but I
hope also much less confusing to libLASi users.
Tested by: Alan W. Irwin <ai...@us...> on Linux
(Debian Testing) by the following steps:
* Spell checking the page.
* Validating the rewritten page at <https://validator.w3.org/#validate-by-upload> as XHTML 1.0 Transitional.
* Viewing the LASi website (with updated index.html) using a local apache server to check
the rewrite for good grammar and sticking to the above motivation for the rewrite. I
also checked by manually clicking all links on the index.html page that there currently are
no bad external or internal links.
Modified Paths:
--------------
trunk/www/index.html
Modified: trunk/www/index.html
===================================================================
--- trunk/www/index.html 2019-02-11 18:54:10 UTC (rev 224)
+++ trunk/www/index.html 2019-02-13 02:49:15 UTC (rev 225)
@@ -15,13 +15,13 @@
</div>
<div id="menu">
- <a href="#newrelease">New Release Announcement</a>
<a href="#introduction">Introduction</a>
<a href="#motivation">Motivation</a>
- <a href="#download">Download</a>
+ <a href="#status">Status</a>
+ <a href="#resources">Resources</a>
<a href="#fonts">Fonts</a>
- <a href="#prereqs">Prerequisites</a>
- <a href="#cmake">Build Instructions</a>
+ <a href="#free_software_distributions">Distributions</a>
+ <a href="#cmake">Build</a>
<a href="#platform">Platform Notes</a>
<a href="#trouble">If you have trouble ...</a>
<a href="#api">API Docs</a>
@@ -36,56 +36,6 @@
<a name="top"/>
<p><a href="../index.html">unifont.org</a> >> LASi</p>
- <h1 id="newrelease">2011-10-03 New Release Announcement: libLASi-1.1.1</h1>
-
- <p>
- Our <a href="http://sourceforge.net/project/memberlist.php?group_id=187113">development team</a> is proud to announce the release of libLASi-1.1.1 which incorporates several bug fixes for the previous (1.1.0) release. The most important of these is a correction for the positioning of diacritical marks that has been suggested by Yotam Medini. Most of this change is internal, but it does require a backwards-incompatible change to part of our public API that is rarely used externally. So most users of libLASi will just need to recompile the applications that link to libLASi (as forced by our SOVERSION bump) without actually having to change those applications.
- </p>
- <p>
- The libLASi-1.1.1 file release area (including release notes, a detailed ChangeLog, the source tarball, and a detached gpg signature for that tarball) is located at <a href="http://sourceforge.net/projects/lasi/files/lasi/1.1.1%20Source">http://sourceforge.net/projects/lasi/files/lasi/1.1.1%20Source</a>.
- </p>
- <p>
- Enjoy using libLASi-1.1.1 to make some very nice looking PostScript results. Your feedback on the <a href="http://lists.sourceforge.net/lists/listinfo/lasi-devel">lasi-devel mailing list</a> is welcome.
- </p>
- <p>
- Alan W. Irwin on behalf of the libLASi developers.
- </p>
-
- <h1>2008-02-08 Previous Release Announcement: libLASi-1.1.0</h1>
-
- <p>
- The
- <a href="http://sourceforge.net/project/memberlist.php?group_id=187113">LASi development team</a>
- is proud to
- announce the release of <b>libLASi-1.1.0</b> which has significant
- improvements (a new build system based on CMake and some small code updates to
- make libLASi more robust) compared to prior releases.
- </p>
- <p>
- The new CMake-based build system allows building libLASi on both Unix and
- Windows platforms and automatically detects freetype version so split
- releases to cater to different freetype versions are no longer necessary.
- </p>
- <p>
- The robustness improvements mean that libLASi now renders an empty box
- rather than erroring out in those rare cases where glyph information
- returned by pango/cairo/fontconfig is not available or else is in a glyph
- form that is unusable by libLASi.
- </p>
- <p>
- The file release area (including release notes, a detailed ChangeLog, the
- source tarball for version 1.1.0, and an md5 checksum for that tarball) is
- located at <a href="http://sourceforge.net/project/showfiles.php?group_id=187113">
- http://sourceforge.net/project/showfiles.php?group_id=187113</a>.
- </p>
- <p>
- Enjoy using libLASi to make some very nice looking PostScript results
- and your feedback is welcome.
- </p>
- <p>
- -- <i>Alan W. Irwin on behalf of the libLASi developers, 2008-02-08</i>.
- </p>
-
<h1 id="introduction">Introduction</h1>
<a href="images/LASiSample.png"><img class="floatLeft" src="images/SmallLASiSample.png" alt="Sample LASi-generated document" /></a>
@@ -95,8 +45,8 @@
( with operator <code><<</code> ) for creating Postscript documents that can
contain characters from any of the scripts and symbol blocks supported
in <a href="http://www.unicode.org">Unicode</a>
- and by Owen Taylor's <a href="http://www.pango.org">Pango</a> layout engine.
- The library accomodates right-to-left scripts such as Arabic and Hebrew as easily as
+ and by the <a href="http://www.pango.org">Pango</a> layout engine.
+ The library accommodates right-to-left scripts such as Arabic and Hebrew as easily as
left-to-right scripts. Indic and Indic-derived Complex Text Layout (CTL)
scripts, such as Devanagari, Thai, Lao, and Tibetan are supported to the extent
provided by Pango and by the OpenType fonts installed on your system.
@@ -108,18 +58,12 @@
Although the capability to produce Unicode-based multilingual Postscript documents
exists in large Open Source application framework libraries such as
<a href="http://www.gtk.org"><b>GTK+</b></a>,
- <a href="http://www.trolltech.com/products/qt/index.html"><b>QT</b></a>, and
+ <a href="https://www.qt.io/"><b>Qt</b></a>, and
<a href="http://www.kde.org"><b>KDE</b></a>,
<b>libLASi</b> was designed for projects which require
the ability to produce Postscript independent of any one application framework.
</p>
- <p>
- <b>libLASi</b> is now a Sourceforge project -- Please visit
- <a href="http://sourceforge.net/projects/lasi">http://sourceforge.net/projects/lasi</a>
- to find out the latest development information.
- </p>
-
<h1 id="motivation">Motivation</h1>
<p>
@@ -127,359 +71,232 @@
of <b>LASi</b>.
</p>
-<h1 id="download">Download</h1>
+<h1 id="status">Development Status and Latest Release</h1>
- <h2 class="h15" >libLASi-1.1.0 Latest Stable Release</h2>
+ <p>
+ We have no plans to add features to <b>LASi</b>, but because
+ of sustained user interest over the years we still actively
+ maintain it. For example, we highly recommend the latest release of
+ <b>LASi</b> because of the bug fixes that release contains. For more
+ details about that release (version 1.1.3 released on 2019-02-01)
+ please
+ see <a href="https://sourceforge.net/p/lasi/news/2019/02/liblasi-113-has-been-released/">the
+ news item</a>
+ and <a href="https://sourceforge.net/projects/lasi/files/lasi/1.1.3%20Source/">file
+ release area (including release notes)</a> for that release.
+ </p>
- <p>
- Download the latest stable release, libLASi-1.1.0, from
- <a href="http://sourceforge.net/project/showfiles.php?group_id=187113">
- http://sourceforge.net/project/showfiles.php?group_id=187113</a>.
- </p>
+<h1 id="resources">SourceForge Resources</h1>
- <h2 class="h15" >Sourceforge SVN Repository</h2>
-
<p>
- For the latest development version of the library,
- visit <a href="http://sourceforge.net/projects/lasi">http://sourceforge.net/projects/lasi</a>
- to learn more about accessing <b>libLASi</b>'s
- <a href="http://lasi.svn.sourceforge.net/viewvc/lasi/">SVN repository</a>. To check out the
- latest code from the repository, you can use the following command line:
+ The following SourceForge resources should be of interest to <b>LASi</b> users.
</p>
+<ul>
+ <li><a href="http://sourceforge.net/projects/lasi">Project Page</a></li>
+ <li><a href="http://sourceforge.net/p/lasi/news">News</a></li>
+ <li><a href="https://sourceforge.net/projects/lasi/files/">Releases</a></li>
+ <li><a href="https://sourceforge.net/p/lasi/code/HEAD/tree/">Subversion repository</a></li>
+ <li><a href="http://sourceforge.net/p/lasi/mailman/">Mailing Lists</a></li>
+ <li><a href="http://sourceforge.net/p/lasi/bugs/">Bug Tracker</a></li>
+</ul>
-<p class="code">
- svn co https://lasi.svn.sourceforge.net/svnroot/lasi/trunk lasi
-</p>
-
<h1 id="fonts">Font Resources</h1>
<p>
The example programs included with <b>LASi</b> contain Unicode text in various languages.
To obtain Open Source and otherwise liberally-licensed fonts required for proper
- generation of the example Postscript output, please visit Unifont.org's
- <a href="http://www.unifont.org/fontguide/">Unicode Font Guide For
+ generation of the example Postscript output, you will likely need to
+ install some additional font packages from your
+ <a href="#free_software_distributions">free software distribution</a>.
+ For a guide to what fonts are generally available for such distributions, please visit
+ <a href="http://www.unifont.org/fontguide/">The Unicode Font Guide For
Free/Libre Open Source Operating Systems</a>.
</p>
-<h1 id="prereqs">Prerequisites and Dependencies</h1>
+<h1 id="free_software_distributions">Free Software Distributions Provide the LASi Dependencies</h1>
<p>
- The code base in the Sourceforge SVN repository uses a <a href="http://www.cmake.org">CMake</a>
- build system. You will need at least version <b>2.4.5</b> to build LASi from SVN.
+ Free software distributions that are an integral part of any modern
+ Linux or similar free *nix operating system or which are add ons to
+ proprietary operating systems (e.g.,
+ the <a href="http://www.finkproject.org/">Fink</a>,
+ <a href="https://www.macports.org/">MacPorts</a>,
+ and <a href="https://brew.sh/">Homebrew</a> distributions for Mac
+ OS X and the the <a href="https://www.cygwin.com/">Cygwin</a>
+ and <a href="https://www.msys2.org/">MinGW-w64/MSYS2</a>
+ distributions for Windows) are the recommended way for users to
+ gain access to the <b>LASi</b> software dependencies. For such
+ distributions, users need to install packages
+ for <a href="http://www.cmake.org">CMake</a> (version 3.13.2 or
+ higher),
+ <a href="https://www.freedesktop.org/wiki/Software/pkg-config/">pkg-config</a>,
+ native build tools that depend on the chosen CMake generator, a C++
+ compiler (likely g++, the C++ front end to
+ <a href="https://gcc.gnu.org/">the GNU compiler collection</a>),
+ <a href="#fonts">font</a> packages that allow rendering the
+ particular Unicode glyphs in the examples, and optionally (if the
+ user wants to build the <b>LASi</b> documentation)
+ <a href="http://www.doxygen.nl/index.html">doxygen</a>.
+ Users also need to install development packages for
+ the <a href="http://www.pango.org">Pango</a>
+ and <a href="http://www.freetype.org">FreeType</a> libraries which
+ are direct dependencies of the <b>LASi</b> library. They also need
+ to install all packages that are dependencies of the packages that
+ are named here, but the the package installation software provided
+ by the free software distributions should automatically take care
+ of that issue.
</p>
- <p>
- <b>LASi</b> uses Owen Taylor's <a href="http://www.pango.org">Pango</a> text layout engine.
- <b>Pango</b> itself depends on the <a href="http://www.gtk.org">glib infrastructure library
- of the GTK+ toolkit</a> and on the
- <a href="http://www.freetype.org">FreeType 2</a> font handling library.
- </p>
+<h1 id="cmake">General Build Instructions for LASi</h1>
- <p>
- Almost any modern Linux or similar free *nix operating system will already have the <b>FreeType2</b>
- library installed. If you have the <b>Gnome</b> desktop or <b>GTK+</b>-based software like
- the <b>Gimp</b> installed on your system, then you may be able to use the <b>glib</b> and <b>Pango</b>
- libraries already present on your system.
- </p>
-
- <p>
- If you decide to download <b>glib</b> and <b>Pango</b>, be sure to download "matched" libraries from
- the <a href="http://www.gnome.org">Gnome</a> web site.
- For example, if you go to the download area for
- <a href="http://ftp.gnome.org/pub/GNOME/platform/2.8/2.8.0/sources/">Gnome 2.8</a>, you will find
- <b>glib-2.4.6.tar.gz</b> and <b>pango-1.6.0.tar.gz</b>. <b>Glib-2.4.6</b> and <b>pango-1.6.0</b>
- are "matched" for building a stable version of Gnome and should thus provide you good results when
- used with <b>LASi</b>.
- </p>
-
-<h1 id="cmake">General CMake Build Instructions for libLASi</h1>
-
<p>
- As CMake is a new build system which many developers are not yet familiar with,
-we provide the following general CMake instructions to get you started:
+ The <b>LASi</b> source tree includes a CMake-based build system so
+ you can use a general cross-platform procedure to configure, build,
+ test the build, install, and test the install of this software.
+ This general procedure consists of using the <code>cmake</code>
+ executable to choose a
+ <a href="https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html">generator</a>,
+ installation prefix, and whether the library build will be shared or
+ static; configure build system targets; and for the chosen native
+ build system that is configured by the generator build the "all"
+ target, optionally test that result by running ctest (which is
+ distributed as part of the CMake software), and install the software
+ by building the "install" target. As an additional option that
+ install can be tested by building the installed examples that are
+ linked with the installed library and its dependencies using
+ pkg-config. To facilitate this test we configure and install a
+ special Makefile to implement building the examples this way. That Makefile
+ also implements targets for run-time testing the examples that are built.
</p>
-<p>
- 1) Create an empty build directory and <code>cd</code> to it:
+<p id="unix_makefiles">
+ Depending on the platform and chosen generator, there are many ways
+ that experienced CMake users should be able to implement the above
+ general procedure. However, for those less experienced with CMake,
+ we suggest they install cmake, pkg-config, the bash shell, the distribution
+ make command, and g++ and use the following "Unix Makefiles" specific
+ form of the above general procedure that should work well for all
+ platforms provided that you use the
+ <a href="#free_software_distributions">free software distributions</a>
+ available for those platforms.
</p>
+<ul>
-<p class="code">
- mkdir build_dir
- <br/>cd build_dir
-</p>
+ <li>Create an empty build directory and change your current directory to that directory:
+ <p class="code">
+ mkdir build_dir
+ <br/>cd build_dir
+ </p>
+ </li>
-<p>
- 2) Configure libLASi using <code>cmake</code> or <code>ccmake</code>:
-</p>
+ <li>Configure <b>LASi</b> using <code>cmake</code>:
+ <p class="code">
+ cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=<path to the install prefix> -DBUILD_SHARED=<ON or OFF> \
+ <br/> <path to the top-level directory of the source tree> >& cmake.out
+ </p>
-<p class="code">
- cmake -DCMAKE_INSTALL_PREFIX=/path/to/install/prefix \
- <br/>-DCMAKE_VERBOSE_MAKEFILE=ON /path/to/lasi/source/code >& cmake.out
-</p>
+ <p>
+ The <code>-G</code> option lets the user choose a cmake
+ generator, the <code>-DCMAKE_INSTALL_PREFIX</code> option lets
+ the user choose an install prefix, and
+ the <code>-DBUILD_SHARED</code> option lets the user choose to
+ build <b>LASi</b> as a shared library (<code>ON</code>) or as a
+ static library (<code>OFF</code>).
+ </p>
+ </li>
-<p>
-OR:
-</p>
+ <li> Build <b>LASi</b>:
+ <p class="code">
+ make all >& all.out
+ </p>
+
+ <p>
+ Afterwards, use a good PostScript viewer to look at the
+ generated Encapsulated PostScript results
+ in <code>examples/*.eps</code> to check for missing glyphs
+ (designated by empty boxes) in all but
+ <code>examples/MissingGlyphExample.eps</code> which is the
+ result from an example that is designed to have missing glyphs
+ to test that empty boxes are rendered in that case. If any but
+ that example result have missing glyphs, then you should install
+ additional <a href="#fonts">font</a> packages from your
+ <a href="#free_software_distributions">free software
+ distribution</a> to address that issue.
+ </p>
+ </li>
-<p class="code">
- ccmake -DCMAKE_INSTALL_PREFIX=/path/to/install/prefix \
- <br/>-DCMAKE_VERBOSE_MAKEFILE=ON /path/to/lasi/source/code
-</p>
+ <li> Optionally test that build of <b>LASi</b>:
+ <p class="code">
+ ctest >& ctest.out
+ </p>
-<p>
-The <code>CMAKE_INSTALL_PREFIX</code> option lets the user specify the install prefix
-and <code>CMAKE_VERBOSE_MAKEFILE=ON</code> insures the subsequent make commands give
-verbose results. <code>ccmake</code> is a GUI frontend for <code>cmake</code> that gives you other
-annotated options you can set.
-</p>
+ <p>
+ Afterwards, use the <code>cmp</code> or <code>diff</code>
+ commands to verify that the generated ctest results
+ (in <code>examples/ctest_examples_output_dir/*.eps</code>) are
+ identical to the "make all" results (in <code>examples/*.eps</code>).
+ </p>
+ </li>
-<p>
- 3) Build and install libLASi:
-</p>
+ <li> Install <b>LASi</b>:
+ <p class="code">
+ make install >& install.out
+ </p>
+ </li>
-<p class="code">
- make >& make.out
- <br/>su -c "make install >& /tmp/make_install.out"
-</p>
+ <li> Optionally test that install of <b>LASi</b> using the specially configured installed Makefile:
+ <p class="code">
+ cd <path to the install prefix>/share/lasi<latest LASi version>/examples
+ <br/>make all >& all.out
+ </p>
-<p>
- <span class="NoteBene">Note:</span> '<code>su -c "<root command>"</code>' is the
-conventional way to execute a command requiring root privileges on Linux. On some other systems,
-such as OS X, you might invoke "<code>sudo</code>" instead, while on other systems you might need
-to start a root shell using the "<code>su</code>" command.
-</p>
+ <p>
+ Afterwards, use the <code>cmp</code> or <code>diff</code>
+ commands to verify that these "make all" results
+ (in <code>*.eps</code>) are
+ identical to the "make all" results in the build tree
+ (located in <code>examples/*.eps</code> in that tree).
+ </p>
+ </li>
-<h1 id="platform">Platform Specific Notes</h1>
-
-<p>
-Recent Linux distributions will already have most, if not all, of the
-tools and libraries that you need to build LASi already installed.
-This will likely not be the case on other platforms. Therefore, if
-you plan to build LASi on a non-Linux platform, be prepared to spend
-some time downloading and installing required tools like CMake and
-DOxygen, as well as dependent libraries like GLib and Pango.
-</p>
-
-<h2 class="h15">Linux</h2>
-
-<p>
- Development of LASi takes place primarily on Linux workstations with fairly recent distributions installed. As a result,
-most of the tool and library dependencies described in the preceding section will normally already be present on your machine.
-A possible exception is CMake : be sure to get at least version 2.4.5.
-</p>
-
-<h2 class="h15">OS X</h2>
-
-<p>
- We have achieved the best success with the least frustration by building the required tools and libraries directly from source code. However, if you don't really like this idea, you might want to try
- <a href="http://trac.macosforge.org/projects/macports/wiki">
-http://trac.macosforge.org/projects/macports/wiki</a>
- which provides a Gentoo-like build experience.
-</p>
-
-<p>
- Due to numerous problems encountered with Fink, we cannot recommend Fink at this time.
-</p>
-
-<p>
- Here then are build instructions for Apple OS X:
-</p>
-
-<p>
-1) Get CMake: Download the latest Darwin Universal (Tiger only
-installer) .dmg from <a href="http://www.cmake.org">www.cmake.org</a>. This will install cmake in
-/usr/bin.
-</p>
-<p>
-2) Get SVN: Matthew E. Porter provides SVN .dmg installers for OS X
-that do not require Fink. Importantly, these binaries are compiled
-with SSL support, which is required for checking out LASi from the
-Sourceforge SVN repository. The URL is
-<a href="http://metissian.com/projects/macosx/subversion/">
-http://metissian.com/projects/macosx/subversion/</a>. This binary will be
-installed in /usr/local/bin .
-</p>
-<p>
-3) Get PKG-CONFIG: Build from source.
-<a href="http://pkgconfig.freedesktop.org/releases/pkg-config-0.20.tar.gz">
-http://pkgconfig.freedesktop.org/releases/pkg-config-0.20.tar.gz</a>.
-If you install libraries using different prefixes, don't forget to
-"export PKG_CONFIG_PATH" as necessary so that pkg-config can find the
-installed libraries. For example:
-</p>
-<p class="code">
- export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
-</p>
-<p>
-4) Get DOXYGEN: Build it from source. Available from
-<a href="http://www.stack.nl/~dimitri/doxygen/">
-http://www.stack.nl/~dimitri/doxygen/</a> .
-DOxygen is needed to create the LASi documentation. Installs in
-/usr/local/bin by default.
-</p>
-<p>
-5) Get libxml2 from <a href="http://xmlsoft.org/">http://xmlsoft.org/</a> and build it from
-source. This library is required to compile fontconfig.
-</p>
-<p>
-6) Get fontconfig from <a href="http://www.fontconfig.org/wiki">http://www.fontconfig.org/wiki/</a> and
-build it from source.
-</p>
-<p>
-7) Get FREETYPE: Build Freetype from source. Available from
-<a href="http://freetype.sourceforge.net/">http://freetype.sourceforge.net/</a> .
-Using the defaults, Freetype will be installed in /usr/local/lib and
---importantly-- the freetype.pc file will be found by LASi's CMake
-build system.
-</p>
-<p>
-8) Get CAIRO from <a href="http://xmlsoft.org/">http://xmlsoft.org/</a> and build it from source.
-</p>
-<p>
-9) Get GLIB and PANGO from the Gnome project. At the time of this
-writing, the latest version was 2.16.13:
-<a href="http://ftp.gnome.org/pub/GNOME/platform/2.16/2.16.3/sources/">
-http://ftp.gnome.org/pub/GNOME/platform/2.16/2.16.3/sources/</a> .
-Download the latest versions of glib and pango. Be sure to build and
-install glib first. These will be installed in /usr/local/lib by
-default.
-</p>
-<p>
-10) Finally you should now be able to build LASi without any problems. :-)
-</p>
-
-<h2 class="h15">Other *Nix Systems</h2>
-
-<p>
- On other, non-Linux *Nix systems be prepared to spend some time chasing down
- missing dependencies. The instructions for OS X above will give you a fair idea
- of what may be required.
-</p>
-<p>
- You may find that your life is easier if you install a
- recent version of the <a href="http://gcc.gnu.org/">GCC</a> compiler suite
- along with GNU <a href="http://www.gnu.org/software/make/">gmake</a>.
-</p>
-
-<p>
- You will almost certainly need to use the C++ standard library that comes with
- the GCC compiler suite (Even compilers like Intel's
- <a href="http://www.intel.com/cd/software/products/asmo-na/eng/compilers/284132.htm">icpc</a>
- compiler uses the GNU C++ standard library when linking projects on Linux).
- Other C++ libraries, such as on Sun Solaris, may not be sufficiently up-to-date.
-</p>
-
-<p>
- Make utilities on some platforms, such as OpenBSD, do not have some of the capabilities
- of GNU gmake which are used frequently, so you will probably save yourself some trouble by
- using gmake.
-</p>
-
-<p>
- After carefully satisfying all dependencies by installing packages from the ports
- tree or from source, we encountered no problems building libLASi on
- <a href="http://www.openbsd.org">OpenBSD</a> version 4.0 on i386.
-</p>
-
-
-<h2 class="h15">Windows</h2>
-
-<p>
- These instructions from Werner Smekal should allow anybody to compile
- libLASi on Windows platforms with the MinGW and Visual C++ compiler:
-</p>
-
-<p>
- 1) Download the following from
- <a href="http://www.gimp.org/~tml/gimp/win32/downloads.html">
-http://www.gimp.org/~tml/gimp/win32/downloads.html
-</a>:
-</p>
-
-<ul>
- <li>glib-2.12.7.zip and glib-dev-2.12.7.zip</li>
- <li>pango-1.14.9.zip and pango-dev-1.14.9.zipy</li>
- <li>pkg-config-0.20-zip</li>
- <li>libiconv-1.9.1.bin.woe32.zip</li>
- <li>cairo-1.2.6.zip and cairo-dev-1.2.6.zip</li>
- <li>freetype-2.2.1.zip and freetype-dev-2.2.1.zip</li>
- <li>fontconfig-tml-2.3.2-20060825.zip and fontconfig-dev-2.3.2-tml-20060825.zip</li>
- <li>gettext-0.14.5.zip and gettext-dev-0.14.5.zip</li>
</ul>
-
<p>
- Unzip all packages in a directory, e.g. <code>C:\Dev\gtk</code> .
+ Note, that for most of the above steps, the combined stderr and
+ stdout output is captured in various <code>*.out</code> files. For
+ each such step the user should inspect those files for any warning
+ or error messages before proceeding to the next step.
</p>
+
-<p>
- 2) Download from <a href="ftp://ftp.jclark.com/pub/xml/expat.zip">ftp://ftp.jclark.com/pub/xml/expat.zip</a>:
-</p>
-<ul>
- <li>
- expat.zip
- </li>
-</ul>
+<h1 id="platform">Platform Specific Notes</h1>
<p>
- Unzip expat.zip and copy only the xmlparse.dll in the bin directory to
- <code>C:\Dev\gtk\bin</code>. Rename <code>xmlparse.dll</code> to <code>libexpat.dll</code>.
+ At this stage we have no platform-specific notes. The reason for
+ this is we are reasonably confident that if users follow the
+ <a href="#unix_makefiles">"Unix Makefiles"</a> procedure for most
+ any
+ <a href="#free_software_distributions">free software
+ distribution</a>, that procedure will "just work". This confidence
+ is based on years of experience building and
+ testing <a href="http://plplot.org/">PLplot</a> (whose build is much
+ more complex than that of <b>LASi</b> and whose <code>psttf</code>
+ device driver depends directly on the <b>LASi</b> library and
+ indirectly on its dependencies) on many free software distributions
+ (including the Mac OS X and Windows ones) using a procedure that is
+ quite similar to the
+ <a href="#unix_makefiles">"Unix Makefiles"</a> procedure; good test
+ results on Linux, Mac OS X, and Windows for older releases
+ of <b>LASi</b> using variants of the general <a href="#cmake">
+ CMake-based procedure above</a>; and good results on Linux
+ (specifically Debian Testing) for the recommended "Unix Makefiles"
+ procedure for the latest release of <b>LASi</b>. That said, if you
+ do not get good results for the latest release of <b>LASi</b> using
+ the above "Unix Makefiles" procedure for any free software
+ distribution, we would like to hear from you (preferably on
+ our <a href="https://sourceforge.net/projects/lasi/lists/lasi-devel/">mailing
+ list</a>).
</p>
-
-<p>
- 3) Some additional things need to be ironed out:
-</p>
-
-<ul><li>
-Change last 3 lines of <code>gtk/lib/pkg-config/pangoft2.pc</code> to (add freetype2
-as requirement and delete absolute directories in Cflags):
-</li></ul>
-
-<p class=".code">
-Requires: pango,freetype2
-<br/>Libs: -L${libdir} -lpangoft2-1.0
-<br/>Cflags: -I${includedir}/pango-1.0
-</p>
-
-
-<ul><li>
-The freetype import library for Visual C++ is missing and we need to create it
-(pexports is available here:
-<a href="http://www.emmestech.com/software/cygwin/pexports-0.43/download_pexports.html">http://www.emmestech.com/software/cygwin/pexports-0.43/download_pexports.html</a>)
- -- for MinGW omit this step:
-</li></ul>
-
-<p class="code">
-cd C:\Dev\gtk\lib
-<br/>pexports ..\bin\freetype6.dll > freetype.def
-<br/>lib /machine:i386 /def:freetype.def
-</p>
-
-<p>
-4) Set environment variables for cmake (<code>USER_ROOTDIR</code> is the
-development directory, e.g. <code>C:\Dev\gtk</code>):
-</p>
-
-<p class="code">
-rem setup glib, pango, cairo, freetype, pkg-config
-<br/>set PKG_CONFIG_PATH=%USER_ROOTDIR%\gtk\lib\pkgconfig
-<br/>set PATH=%USER_ROOTDIR%\gtk\bin;%PATH%
-</p>
-
-<p>
-5) Build libLASi in a command line environment:
-</p>
-
-<ul><li>
-Run the following commands (similar for Visual C++):
-</li></ul>
-
-<p class="code">
-mkdir build (we assume the lasi directory is in the same folder as the build)
-<br/>cd build
-<br/>make -G "MinGW Makefiles" -DBUILD_SHARED=ON -DCMAKE_INSTALL_PREFIX=C:\Dev\gtk ../lasi
-<br/>mingw32-make install (compiles and install into gtk directory)
-</p>
-
+
<h1 id="trouble">If you have trouble building LASi ...</h1>
<p>
If you have trouble building <b>LASi</b>, the usual culprits are:
@@ -488,43 +305,39 @@
<ul>
<li>
- <b>CMake or ccmake</b> problems. You need version 2.4-patch 6 or newer. As of this writing (2007.03.07), most
- distributions will only have an older version of CMake, if they have CMake at all. You will most likely have to
- download and build the
- latest version from a source code package.
- It is always best to start with a clean LASi source tree, a separate (initially empty) build directory,
- and be sure to specify "<code>-DCMAKE_INSTALL_PREFIX=<your installation path></code>" on the command line as
- recommended in the directions above.
- If you have trouble with the interactive <code>ccmake</code>, revert to using
- <code>cmake</code> instead. <code>cmake</code> caches results from the first run; Try "<code>rm CMakeCache.txt</code>"
- in order to start off again with a clean slate and no cached results.
+ <b>CMake version</b> problems. You need version 3.13.2 or later
+ to build <b>LASi</b>. (Otherwise, the <code>cmake</code> step in
+ the
+ <a href="#unix_makefiles">"Unix Makefiles"</a>
+ procedure will error out). The latest versions of most
+ <a href="#free_software_distributions">free software distributions</a>
+ should provide CMake version 3.13.2 or later, but if not or if you are
+ using an older distribution, then we recommend you build 3.13.2 or
+ later from
+ <a href="https://cmake.org/download/">CMake source code</a>
+ using the older version of <code>cmake</code> that your
+ distribution provides using the same "Unix Makefiles" procedure
+ that we recommend for <b>LASi</b>. Then follow up by
+ building <b>LASi</b> with your newly built version of CMake using
+ the same "Unix Makefiles" procedure.
</li>
- <li><b>pkg-config</b> problems. Sometimes your system has all of the required libraries installed, but
- the <b>pkg-config</b> utility doesn't have a clue where they are. Make sure you check <code>PKG_CONFIG_PATH</code>.
- For example, if <b>FreeType2</b> is installed in <code>/usr/X11R6/lib</code> and <b>Pango</b> is installed
- in <code>/opt/gnome/lib</code>, then you might have to execute
- "<code>export PKG_CONFIG_PATH=/usr/X11R6/lib/pkgconfig:/opt/gnome/lib/pkgconfig</code>" from your shell in order
- to get <b>pkg-config</b> and, by extension, the <b>LASi</b> <code>cmake</code> build system to find these
- libraries.</li>
-
- <li><b>Multiple installed versions of FreeType, Pango, or glib</b>. This sort of issue is much harder to deal with.
- Theoretically, it should not matter that you have multiple versions of <b>FreeType2</b>,
- <b>Pango</b> or <b>Glib</b> installed. In the past we saw cases where the configure script detected one version of
- a library
- but at link time the linker linked against another version. With the new <code>cmake</code>-based build system,
- most of these kinds of problems should be a thing of the past. Nevertheless,
- the easiest way to avoid problems is to avoid having
- multiple versions of the dependent libraries present on your machine. If that is not an option, and you have a good idea of what you are
- doing, you can play around with <code>/etc/ld.so.conf</code> and <code>ldconfig</code> until you get it to work.
+ <li>
+ <b>pkg-config</b> problems. You must install pkg-config from your
+ distribution. (Otherwise, the <code>cmake</code> step in the
+ <a href="#unix_makefiles">"Unix Makefiles"</a> procedure will
+ error out). We anticipate no other issues with pkg-config since our
+ experience is it "just works" (if installed from a
+ <a href="#free_software_distributions">free software distribution</a>).
</li>
+
</ul>
<h1 id="api">API Documentation</h1>
<p>
- <span class="NoteBene">Note:</span> The DOxygen documentation generated when you build LASi will be more
- up-to-date than the documentation here. However as the API is already quite stable, the differences will
+ <span class="NoteBene">Note:</span> The doxygen documentation generated when you build <b>LASi</b> will be more
+ up-to-date than the documentation here. However the API changes very little so the differences will
be few:
</p>
@@ -535,10 +348,14 @@
<h1 id="examples">Examples</h1>
<p>
- Examples are provided in the <code>examples</code> subdirectory of the software distribution.
- The makefiles included with the examples illustrate how to link a program against <b>LASi</b>.
- <a href="examples/example.html">Here</a> is a simple example of what source code using <b>LASi</b>
- looks like.
+ Examples are provided in the <code>examples</code> subdirectory of
+ the <b>LASi</b> source tree. The
+ file <code>Makefile.examples.in</code> that appears in that
+ subdirectory is a configurable template for a Makefile (installed
+ with our installed examples) that illustrates how to link a program
+ against <b>LASi</b>.
+ <a href="examples/example.html">Here</a> is a simple example of what
+ source code using <b>LASi</b> looks like.
</p>
<h1 id="author">Original Author</h1>
@@ -581,9 +398,9 @@
Since this immediately delighted by own sense of vanity,
I had no trouble indulging Ed.
Out of concern that the name "Lasi" might invite ridicule
-by jeolous programming rivals
+by jealous programming rivals
who would no doubt take every opportunity to mock it's connection
-to the <a href="http://www.lassie.net" target="_blank">beloved TV canine hero</a>,
+to the <a href="https://en.wikipedia.org/wiki/Lassie">beloved TV canine hero</a>,
I changed it's spelling to the post-modern, hi-tech moniker "<b>LASi</b>".
</p>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-02-11 18:54:13
|
Revision: 224
http://sourceforge.net/p/lasi/code/224
Author: airwin
Date: 2019-02-11 18:54:10 +0000 (Mon, 11 Feb 2019)
Log Message:
-----------
Put LASi website files under svn control
The copyright license for these files is identical to the rest of the LASi software. See
the README file in the parent directory for the exact (LGPL version 2 or above) terms.
Alan W. Irwin on behalf of Ed Trager.
Added Paths:
-----------
trunk/www/
trunk/www/css/
trunk/www/css/main.css
trunk/www/css/screen.css
trunk/www/download/
trunk/www/download/lasi-1.0.4.tar.gz
trunk/www/download/lasi-1.0.5.tar.gz
trunk/www/download/lasi-1.0.5p1.patch
trunk/www/download/lasi-1.0.5p1.tar.gz
trunk/www/download/lasi-1.0.6.tar.gz
trunk/www/examples/
trunk/www/examples/css/
trunk/www/examples/css/screen.css
trunk/www/examples/example.html
trunk/www/html/
trunk/www/html/LASi_8h-source.html
trunk/www/html/LASi_8h.html
trunk/www/html/annotated.html
trunk/www/html/classContextMgr-members.html
trunk/www/html/classContextMgr.html
trunk/www/html/classContextMgr.png
trunk/www/html/classFreetypeGlyphMgr-members.html
trunk/www/html/classFreetypeGlyphMgr.html
trunk/www/html/classLASi_1_1PostscriptDocument-members.html
trunk/www/html/classLASi_1_1PostscriptDocument.html
trunk/www/html/classLASi_1_1PostscriptDocument_1_1GlyphId-members.html
trunk/www/html/classLASi_1_1PostscriptDocument_1_1GlyphId.html
trunk/www/html/classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream-members.html
trunk/www/html/classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html
trunk/www/html/classLASi_1_1oPostscriptStream-members.html
trunk/www/html/classLASi_1_1oPostscriptStream.html
trunk/www/html/classLASi_1_1setFont-members.html
trunk/www/html/classLASi_1_1setFont.html
trunk/www/html/classLASi_1_1setFontSize-members.html
trunk/www/html/classLASi_1_1setFontSize.html
trunk/www/html/classLASi_1_1show-members.html
trunk/www/html/classLASi_1_1show.html
trunk/www/html/classManager-members.html
trunk/www/html/classManager.html
trunk/www/html/classStringDimensions-members.html
trunk/www/html/classStringDimensions.html
trunk/www/html/contextMgr_8h-source.html
trunk/www/html/contextMgr_8h.html
trunk/www/html/dir_000000.html
trunk/www/html/dir_000001.html
trunk/www/html/dirs.html
trunk/www/html/doxygen.css
trunk/www/html/doxygen.png
trunk/www/html/drawGlyph_8cpp.html
trunk/www/html/drawGlyph_8h-source.html
trunk/www/html/drawGlyph_8h.html
trunk/www/html/files.html
trunk/www/html/functions.html
trunk/www/html/functions_func.html
trunk/www/html/functions_rela.html
trunk/www/html/functions_type.html
trunk/www/html/functions_vars.html
trunk/www/html/globals.html
trunk/www/html/globals_enum.html
trunk/www/html/globals_eval.html
trunk/www/html/globals_func.html
trunk/www/html/globals_vars.html
trunk/www/html/glyphMgr_8cpp.html
trunk/www/html/glyphMgr_8h-source.html
trunk/www/html/glyphMgr_8h.html
trunk/www/html/hierarchy.html
trunk/www/html/index.html
trunk/www/html/manager_8h-source.html
trunk/www/html/manager_8h.html
trunk/www/html/namespaceLASi.html
trunk/www/html/namespacemembers.html
trunk/www/html/namespacemembers_enum.html
trunk/www/html/namespacemembers_eval.html
trunk/www/html/namespacemembers_func.html
trunk/www/html/namespaces.html
trunk/www/html/namespacestd.html
trunk/www/html/psDoc_8cpp.html
trunk/www/html/stringDimensions_8h-source.html
trunk/www/html/stringDimensions_8h.html
trunk/www/html/structStateOfDrawGlyph-members.html
trunk/www/html/structStateOfDrawGlyph.html
trunk/www/html/util_8cpp.html
trunk/www/html/util_8h-source.html
trunk/www/html/util_8h.html
trunk/www/images/
trunk/www/images/LASiLabel.png
trunk/www/images/LASiSample.png
trunk/www/images/LasiLogo.png
trunk/www/images/SamplePedigreeDrawing-small.png
trunk/www/images/SamplePedigreeDrawing.png
trunk/www/images/SmallLASiSample.png
trunk/www/images/result.png
trunk/www/index.html
trunk/www/strategy.html
Added: trunk/www/css/main.css
===================================================================
--- trunk/www/css/main.css (rev 0)
+++ trunk/www/css/main.css 2019-02-11 18:54:10 UTC (rev 224)
@@ -0,0 +1,182 @@
+body{
+
+ font-family:"Trebuchet MS","Lucida Sans", "Bitstream Vera Sans",sans-serif;
+ font-size:15px;
+ color:#000;
+ background-color:#233568;
+ background-image:url("../images/LasiLogo.png");
+ background-position:0px 0px;
+ background-repeat:no-repeat;
+ background-attachment:fixed;
+}
+
+#title{
+ position:fixed;
+ margin:0;
+ padding:0;
+ top:0;
+ left:0;
+ height:143px;
+ width:100%;
+}
+
+#menu{
+ position:fixed;
+ border:solid 1px #7289ce;
+ left:12px;
+ top:148px;
+ width:122px;
+ overflow:auto;
+ background-color:#fff;
+}
+
+#content{
+ position:absolute;
+ border:solid 1px #7289ce;
+ left:150px;
+ top:148px;
+ right:15px;
+ margin-bottom:15px;
+ background-image:url("../images/gladiatorComponentsHeader_Masked.png");
+ background-position:14px 59px;
+ background-repeat:no-repeat;
+ background-attachment:fixed;
+ background-color:#fff;
+}
+
+#content p{
+ margin:12px;
+}
+
+#content h1+p:first-letter{
+
+ font-size:37px;
+ color:#7289ce;
+ font-weight:normal;
+
+}
+
+#content h1{
+ color:#7289ce;
+ background-color:#fff;
+ border-bottom:2px solid #7289ce;
+ font-size:27px;
+ font-weight:bold;
+ margin:12px;
+ padding:2px;
+ clear:both;
+}
+
+#content .h15{
+ color:#7289ce;
+ background-color:#fff;
+ border-bottom:2px solid #7289ce;
+ border-left:2px solid #7289ce;
+ font-size:23px;
+ font-weight:bold;
+ margin:12px;
+ margin-left:25px;
+ margin-top:35px;
+ padding:2px;
+ padding-left:7px;
+ clear:both;
+}
+
+#content .code{
+ color:#7289ce;
+ font-family:"Bitstream Vera Sans Mono",monospace;
+ font-size:16px;
+}
+
+#content code{
+ color:#7289ce;
+ font-family:"Bitstream Vera Sans Mono",monospace;
+ font-size:16px;
+}
+
+#content .NoteBene{
+ font-weight:bold;
+ color:red;
+}
+
+#content h2{
+
+ font-size: 16px;
+ font-weight: bold;
+ padding-top: 20px;
+ margin: 12px;
+ margin-left:35px;
+ border-bottom: 2px solid #7289ce;
+ color: #7289ce;
+ clear: both;
+
+}
+
+#content a{
+
+ text-decoration:none;
+ color: #7289ce;
+ font-weight:bold;
+
+}
+
+#content a:hover{
+
+ text-decoration:none;
+ color:#fff;
+ background-color: #7289ce;
+
+}
+
+
+#content li{
+ margin:12px;
+ list-style-image:url("../images/shieldBullet-20.png");
+}
+
+#content img{
+ display:block;
+ border:none;
+ margin:12px;
+ padding:0;
+ float:left;
+}
+
+#menu h1{
+ color:#4f421f;
+ border-bottom:1px solid #4f421f;
+ border-top:1px solid #4f421f;
+ font-size:14px;
+ font-weight:bold;
+ margin:0px;
+ padding:2px;
+ clear:both;
+ background-color:#f6f3eb;
+
+}
+
+#menu h1:first-letter{
+ font-family:"Times New Roman",Roman,serif;
+ font-size:22px;
+ font-weight:bold;
+ color:#797941;
+}
+
+#menu a{
+ font-size:15px;
+ display:block;
+ text-decoration:none;
+ color:#7289ce;
+ font-weight:bold;
+ margin:0;
+ padding:3px;
+}
+
+#menu a:hover{
+ text-decoration:none;
+ color:#fff;
+ background-color:#7289ce;
+ font-weight:bold;
+}
+
+
Property changes on: trunk/www/css/main.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/www/css/screen.css
===================================================================
--- trunk/www/css/screen.css (rev 0)
+++ trunk/www/css/screen.css 2019-02-11 18:54:10 UTC (rev 224)
@@ -0,0 +1,57 @@
+body{
+ margin:0;
+ padding:10px;
+ font-family: "Bitstream Vera Sans", Arial,sans-serif;
+}
+
+img{
+ border:none;
+}
+
+code {
+
+ font-family:courier,monospace;
+ color:#123861;
+
+}
+
+pre {
+ font-family:courier,monospace;
+ color:#123861;
+}
+
+h2 {
+
+ font-size:20pt;
+ font-weight:bold;
+ color:#123861;
+ border-left:20pt solid #c2cee6;
+ padding-left:7px;
+
+}
+
+li {
+ padding:7px;
+}
+
+.NoteBene{
+ font-weight:bold;
+ color:red;
+}
+
+.floatRight{
+ display:block;
+ margin:5px;
+ padding:0px;
+ border:none;
+ float:right;
+}
+
+.floatLeft{
+ display:block;
+ margin:5px;
+ padding:0px;
+ border:none;
+ float:left;
+}
+
Property changes on: trunk/www/css/screen.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/www/download/lasi-1.0.4.tar.gz
===================================================================
(Binary files differ)
Index: trunk/www/download/lasi-1.0.4.tar.gz
===================================================================
--- trunk/www/download/lasi-1.0.4.tar.gz 2019-02-03 23:44:27 UTC (rev 223)
+++ trunk/www/download/lasi-1.0.4.tar.gz 2019-02-11 18:54:10 UTC (rev 224)
Property changes on: trunk/www/download/lasi-1.0.4.tar.gz
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/www/download/lasi-1.0.5.tar.gz
===================================================================
(Binary files differ)
Index: trunk/www/download/lasi-1.0.5.tar.gz
===================================================================
--- trunk/www/download/lasi-1.0.5.tar.gz 2019-02-03 23:44:27 UTC (rev 223)
+++ trunk/www/download/lasi-1.0.5.tar.gz 2019-02-11 18:54:10 UTC (rev 224)
Property changes on: trunk/www/download/lasi-1.0.5.tar.gz
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/www/download/lasi-1.0.5p1.patch
===================================================================
--- trunk/www/download/lasi-1.0.5p1.patch (rev 0)
+++ trunk/www/download/lasi-1.0.5p1.patch 2019-02-11 18:54:10 UTC (rev 224)
@@ -0,0 +1,16 @@
+Common subdirectories: lasi-1.0.5/cf and lasi-1.0.5p1/cf
+Common subdirectories: lasi-1.0.5/doc and lasi-1.0.5p1/doc
+Common subdirectories: lasi-1.0.5/examples and lasi-1.0.5p1/examples
+Common subdirectories: lasi-1.0.5/include and lasi-1.0.5p1/include
+diff -u lasi-1.0.5/lasi.pc.in lasi-1.0.5p1/lasi.pc.in
+--- lasi-1.0.5/lasi.pc.in 2006-04-23 17:47:43.000000000 -0400
++++ lasi-1.0.5p1/lasi.pc.in 2006-08-29 09:56:34.000000000 -0400
+@@ -6,6 +6,6 @@
+ Name: LASi
+ Description: Library to write UTF-8 strings to Postscript stream.
+ Version: @VERSION@
+-Libs: -L${libdir}
++Libs: -L${libdir} -lLASi
+ Cflags: -I${includedir}
+
+Common subdirectories: lasi-1.0.5/src and lasi-1.0.5p1/src
Added: trunk/www/download/lasi-1.0.5p1.tar.gz
===================================================================
(Binary files differ)
Index: trunk/www/download/lasi-1.0.5p1.tar.gz
===================================================================
--- trunk/www/download/lasi-1.0.5p1.tar.gz 2019-02-03 23:44:27 UTC (rev 223)
+++ trunk/www/download/lasi-1.0.5p1.tar.gz 2019-02-11 18:54:10 UTC (rev 224)
Property changes on: trunk/www/download/lasi-1.0.5p1.tar.gz
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/www/download/lasi-1.0.6.tar.gz
===================================================================
(Binary files differ)
Index: trunk/www/download/lasi-1.0.6.tar.gz
===================================================================
--- trunk/www/download/lasi-1.0.6.tar.gz 2019-02-03 23:44:27 UTC (rev 223)
+++ trunk/www/download/lasi-1.0.6.tar.gz 2019-02-11 18:54:10 UTC (rev 224)
Property changes on: trunk/www/download/lasi-1.0.6.tar.gz
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/www/examples/css/screen.css
===================================================================
--- trunk/www/examples/css/screen.css (rev 0)
+++ trunk/www/examples/css/screen.css 2019-02-11 18:54:10 UTC (rev 224)
@@ -0,0 +1 @@
+link ../../css/screen.css
\ No newline at end of file
Property changes on: trunk/www/examples/css/screen.css
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/www/examples/example.html
===================================================================
--- trunk/www/examples/example.html (rev 0)
+++ trunk/www/examples/example.html 2019-02-11 18:54:10 UTC (rev 224)
@@ -0,0 +1,102 @@
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta http-equiv="Content-Language" content="en-us">
+ <link rel="stylesheet" title="Default Style" href="css/screen.css" type="text/css" media="screen" />
+ </head>
+ <body>
+ <pre>
+
+//
+// SimpleLASiExample.cpp
+//
+
+#include <iostream>
+#include <stdexcept>
+#include <LASi.h>
+
+using namespace LASi;
+using namespace std;
+
+int main(const int argc, char* const argv[])
+{
+ try {
+ PostscriptDocument doc;
+
+ double xAdvance,yMinimum,yMaximum,lineSpacing,yDelta;
+ //
+ // Set font to generic "serif":
+ //
+ doc.osBody() << setFont("serif") << setFontSize(18) << endl;
+ //
+ // "Hello" in formal Arabic, English, Hebrew, and Hindi.
+ //
+ // See http://eyegene.ophthy.med.umich.edu/unicode/fontguide/
+ // if you need fonts for these scripts:
+ //
+ char testString[]="السلام عليكم Hello שלום नमस्ते";
+ //
+ // Get string dimensions:
+ //
+ doc.get_dimensions(testString,&lineSpacing,&xAdvance,&yMinimum,&yMaximum);
+ //
+ // cerr << endl;
+ // cerr << "X-ADVANCE : " << xAdvance << endl;
+ // cerr << "Y-MINIMUM : " << yMinimum << endl;
+ // cerr << "Y-MAXIMUM : " << yMaximum << endl;
+ // cerr << "LINESPACING: " << lineSpacing << endl;
+ //
+
+ //
+ // Draw a rectangle showing the bounding box of the string:
+ //
+ yDelta=yMaximum-yMinimum;
+ doc.osBody() << "gsave newpath" << endl;
+ doc.osBody() << "1.00 0.00 0.00 setrgbcolor" << endl;
+ doc.osBody() << "100 600 moveto" << endl;
+ doc.osBody() << 0 << " " << yMinimum << " rmoveto " << endl;
+ doc.osBody() << 0 << " " << yDelta << " rlineto " << endl;
+ doc.osBody() << xAdvance << " " << 0 << " rlineto " << endl;
+ doc.osBody() << 0 << " " << -yDelta << " rlineto " << endl;
+ doc.osBody() << "closepath" << endl;
+ doc.osBody() << "stroke grestore" << endl;
+
+ //
+ // Show the string:
+ //
+ doc.osBody() << "100 600 moveto" << endl;
+ doc.osBody() << show(testString);
+
+ //
+ // Advance to the next line:
+ //
+ doc.osBody() << "100 600 moveto" << endl;
+ doc.osBody() << "0 " << -lineSpacing << " rmoveto" << endl;
+ //
+ // Print the test string again:
+ //
+ doc.osBody() << show(testString);
+
+ //
+ // Postscript showpage:
+ //
+ doc.osBody() << "showpage" << endl;
+
+ doc.write(cout);
+
+ } catch (runtime_error& e) {
+
+ cerr << e.what() << endl;
+ return 1;
+
+ }
+
+ return 0;
+
+}
+ </pre>
+ </body>
+</html>
Added: trunk/www/html/LASi_8h-source.html
===================================================================
--- trunk/www/html/LASi_8h-source.html (rev 0)
+++ trunk/www/html/LASi_8h-source.html 2019-02-11 18:54:10 UTC (rev 224)
@@ -0,0 +1,242 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>LASi: LASi.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
+<div class="nav">
+<a class="el" href="dir_000001.html">include</a></div>
+<h1>LASi.h</h1><a href="LASi_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="preprocessor">#ifndef LASI_H</span>
+00002 <span class="preprocessor"></span><span class="preprocessor">#define LASI_H</span>
+00003 <span class="preprocessor"></span>
+00009 <span class="preprocessor">#include <string></span>
+00010 <span class="preprocessor">#include <ostream></span>
+00011 <span class="preprocessor">#include <sstream></span>
+00012 <span class="preprocessor">#include <map></span>
+00013 <span class="preprocessor">#include <pango/pango.h></span>
+00014 <span class="preprocessor">#include <freetype/ftglyph.h></span>
+00015
+00016 <span class="keyword">class </span><a class="code" href="classFreetypeGlyphMgr.html">FreetypeGlyphMgr</a>;
+00017 <span class="keyword">class </span><a class="code" href="classContextMgr.html">ContextMgr</a>;
+00018
+<a name="l00019"></a><a class="code" href="namespaceLASi.html">00019</a> <span class="keyword">namespace </span>LASi {
+00020
+<a name="l00021"></a><a class="code" href="namespaceLASi.html#a21">00021</a> <span class="keyword">enum</span> <a class="code" href="namespaceLASi.html#a21">FontStyle</a>{
+00022 NORMAL_STYLE,
+00023 OBLIQUE,
+00024 <a class="code" href="namespaceLASi.html#a21a2">ITALIC</a>
+00025 };
+00026
+<a name="l00027"></a><a class="code" href="namespaceLASi.html#a22">00027</a> <span class="keyword">enum</span> <a class="code" href="namespaceLASi.html#a22">FontWeight</a>{
+00028 ULTRALIGHT,
+00029 LIGHT,
+00030 NORMAL_WEIGHT,
+00031 BOLD,
+00032 ULTRABOLD,
+00033 <a class="code" href="namespaceLASi.html#a22a8">HEAVY</a>
+00034 };
+00035
+<a name="l00036"></a><a class="code" href="namespaceLASi.html#a23">00036</a> <span class="keyword">enum</span> <a class="code" href="namespaceLASi.html#a23">FontVariant</a>{
+00037 NORMAL_VARIANT,
+00038 <a class="code" href="namespaceLASi.html#a23a10">SMALLCAPS</a>
+00039 };
+00040
+<a name="l00041"></a><a class="code" href="namespaceLASi.html#a24">00041</a> <span class="keyword">enum</span> <a class="code" href="namespaceLASi.html#a24">FontStretch</a>{
+00042 ULTRACONDENSED,
+00043 EXTRACONDENSED,
+00044 CONDENSED,
+00045 SEMICONDENSED,
+00046 NORMAL_STRETCH,
+00047 SEMIEXPANDED,
+00048 EXPANDED,
+00049 EXTRAEXPANDED,
+00050 <a class="code" href="namespaceLASi.html#a24a19">ULTRAEXPANDED</a>
+00051 };
+00052
+00053 <span class="keyword">class </span>PostscriptDocument;
+00054 <span class="keyword">class </span>write_glyph_routine_to_stream;
+00055
+<a name="l00059"></a><a class="code" href="classLASi_1_1oPostscriptStream.html">00059</a> <span class="keyword">class </span><a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a> : <span class="keyword">public</span> std::ostringstream {
+00060 <span class="keyword">public</span>:
+<a name="l00061"></a><a class="code" href="classLASi_1_1oPostscriptStream.html#n0">00061</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classLASi_1_1PostscriptDocument.html">PostscriptDocument</a>;
+<a name="l00062"></a><a class="code" href="classLASi_1_1oPostscriptStream.html#n1">00062</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classLASi_1_1show.html">show</a>;
+<a name="l00063"></a><a class="code" href="classLASi_1_1oPostscriptStream.html#n2">00063</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classLASi_1_1setFont.html">setFont</a>;
+<a name="l00064"></a><a class="code" href="classLASi_1_1oPostscriptStream.html#n3">00064</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classLASi_1_1setFontSize.html">setFontSize</a>;
+00065
+<a name="l00066"></a><a class="code" href="classLASi_1_1oPostscriptStream.html#a0">00066</a> <a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>(<a class="code" href="classLASi_1_1PostscriptDocument.html">PostscriptDocument</a>& psDoc) : _psDoc(psDoc) {}
+00067
+00068 <span class="keyword">protected</span>:
+<a name="l00069"></a><a class="code" href="classLASi_1_1oPostscriptStream.html#b0">00069</a> <a class="code" href="classLASi_1_1PostscriptDocument.html">PostscriptDocument</a>& doc() {<span class="keywordflow">return</span> _psDoc;}
+00070
+00071 <span class="keyword">private</span>:
+<a name="l00072"></a><a class="code" href="classLASi_1_1oPostscriptStream.html#r0">00072</a> <a class="code" href="classLASi_1_1PostscriptDocument.html">PostscriptDocument</a>& _psDoc;
+00073 };
+00074
+00075 <span class="keyword">template</span><<span class="keyword">class</span> T>
+<a name="l00076"></a><a class="code" href="namespaceLASi.html#a20">00076</a> <span class="keyword">inline</span> <a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& <a class="code" href="namespaceLASi.html#a20">operator<<</a>(<a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& os, T t) {
+00077 static_cast<std::ostream&>(os) << t;
+00078 <span class="keywordflow">return</span> os;
+00079 }
+00080
+<a name="l00086"></a><a class="code" href="classLASi_1_1PostscriptDocument.html">00086</a> <span class="keyword">class </span><a class="code" href="classLASi_1_1PostscriptDocument.html">PostscriptDocument</a> {
+00087 <span class="keyword">public</span>:
+<a name="l00088"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#n0">00088</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html">write_glyph_routine_to_stream</a>; <span class="comment">// helper class</span>
+<a name="l00089"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#n1">00089</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classLASi_1_1show.html">show</a>;
+00090
+00091 PostscriptDocument::PostscriptDocument();
+00092 PostscriptDocument::~PostscriptDocument();
+00093
+00097 <span class="keywordtype">void</span> <a class="code" href="classLASi_1_1setFont.html">setFont</a>(
+00098 <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> family = <span class="stringliteral">"sans"</span>,
+00099 LASi::FontStyle = LASi::NORMAL_STYLE,
+00100 LASi::FontWeight = LASi::NORMAL_WEIGHT,
+00101 LASi::FontVariant = LASi::NORMAL_VARIANT,
+00102 LASi::FontStretch = LASi::NORMAL_STRETCH
+00103 );
+00104
+<a name="l00108"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#a3">00108</a> <span class="keywordtype">void</span> <a class="code" href="classLASi_1_1setFontSize.html">setFontSize</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> size) {_fontSize = size;}
+00109
+<a name="l00112"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#a4">00112</a> std::ostringstream& osHeader() {<span class="keywordflow">return</span> _osHeader;}
+00113
+<a name="l00116"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#a5">00116</a> <a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& osBody() {<span class="keywordflow">return</span> _osBody;}
+00117
+<a name="l00120"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#a6">00120</a> <a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& osFooter() {<span class="keywordflow">return</span> _osFooter;}
+00121
+00125 <span class="keywordtype">void</span> write(std::ostream& os);
+00126
+00133 <span class="keywordtype">void</span> get_dimensions(<span class="keyword">const</span> <span class="keywordtype">char</span>* s, <span class="keywordtype">double</span> *lineSpacing, <span class="keywordtype">double</span> *xAdvance=NULL, <span class="keywordtype">double</span> *yMin=NULL, <span class="keywordtype">double</span> *yMax=NULL);
+00134
+00135 <span class="keyword">protected</span>:
+<a name="l00140"></a><a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html">00140</a> <span class="keyword">class </span><a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html">GlyphId</a> {
+00141 <span class="keyword">public</span>:
+<a name="l00142"></a><a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html#n0">00142</a> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html">GlyphId</a> id1, <span class="keyword">const</span> <a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html">GlyphId</a> id2) {
+00143 <span class="keywordflow">return</span> id1.<a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html#r0">_str</a> == id2.<a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html#r0">_str</a>;
+00144 }
+00145
+<a name="l00146"></a><a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html#n1">00146</a> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<(<span class="keyword">const</span> <a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html">GlyphId</a> id1, <span class="keyword">const</span> <a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html">GlyphId</a> id2) {
+00147 <span class="keywordflow">return</span> id1.<a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html#r0">_str</a> < id2.<a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html#r0">_str</a>;
+00148 }
+00149
+<a name="l00150"></a><a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html#a0">00150</a> <a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html">GlyphId</a>() {}
+00151 <a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html">GlyphId</a>(FT_Face, <span class="keyword">const</span> FT_UInt);
+00152
+<a name="l00154"></a><a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html#a2">00154</a> std::string str()<span class="keyword"> const </span>{<span class="keywordflow">return</span> _str;}
+00155
+00156 <span class="keyword">private</span>:
+<a name="l00158"></a><a class="code" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html#r0">00158</a> std::string _str;
+00159 };
+00160
+<a name="l00163"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#x0">00163</a> <span class="keyword">typedef</span> std::map<GlyphId, FreetypeGlyphMgr> GlyphMap;
+00164
+<a name="l00169"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#x1">00169</a> <span class="keyword">typedef</span> void (PostscriptDocument::*GLYPH_FUNC)(
+00170 <span class="keyword">const</span> GlyphMap::value_type&, <span class="keywordtype">void</span>* contextData);
+00171
+00172 <span class="keywordtype">void</span> invoke_glyph_routine(<span class="keyword">const</span> GlyphMap::value_type&, <span class="keywordtype">void</span>* contextData);
+00173
+00174 <span class="keywordtype">void</span> accrue_dimensions( <span class="keyword">const</span> GlyphMap::value_type&, <span class="keywordtype">void</span>* contextData1);
+00175
+00178 <span class="keywordtype">void</span> for_each_glyph_do(<span class="keyword">const</span> std::string&, <span class="keyword">const</span> GLYPH_FUNC, <span class="keywordtype">void</span>* contextData);
+00179
+00180 PangoContext* PostscriptDocument::pangoContext() <span class="keyword">const</span>;
+00181
+00184 std::string glyphProcName() <span class="keyword">const</span>;
+00185
+<a name="l00188"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#b5">00188</a> <span class="keywordtype">double</span> getFontSize() {<span class="keywordflow">return</span> _fontSize;}
+00189
+<a name="l00192"></a><a class="code" href="classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html">00192</a> <span class="keyword">class </span><a class="code" href="classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html">write_glyph_routine_to_stream</a> {
+00193 <span class="keyword">private</span>:
+<a name="l00194"></a><a class="code" href="classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html#r0">00194</a> std::ostream& os;
+<a name="l00195"></a><a class="code" href="classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html#r1">00195</a> PangoContext* pangoCtx;
+00196
+00197 <span class="keyword">public</span>:
+<a name="l00198"></a><a class="code" href="classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html#a0">00198</a> <a class="code" href="classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html">write_glyph_routine_to_stream</a>(std::ostream& os, PangoContext* pangoCtx)
+00199 : os(os), pangoCtx(pangoCtx) {}
+00200 <span class="keywordtype">void</span> operator()(PostscriptDocument::GlyphMap::value_type v);
+00201 };
+00202
+00203 <span class="keyword">private</span>:
+<a name="l00204"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#r0">00204</a> GlyphMap _glyphMap;
+00205
+00206 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> DRAWING_SCALE;
+00207
+00208 <span class="comment">// Use pointers instead of objects in order to minimize namespace pollution of .h file user</span>
+00209 <span class="comment">// Requires fwd declarations above.</span>
+<a name="l00210"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#r1">00210</a> <a class="code" href="classContextMgr.html">ContextMgr</a>* _pContextMgr; <span class="comment">// manage PangoContext*</span>
+<a name="l00211"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#r2">00211</a> <span class="keywordtype">double</span> _fontSize; <span class="comment">// font size to be used when rendering next show()</span>
+<a name="l00212"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#r3">00212</a> std::ostringstream _osHeader; <span class="comment">// Postscript header</span>
+<a name="l00213"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#r4">00213</a> <a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a> _osBody; <span class="comment">// Postscript body</span>
+<a name="l00214"></a><a class="code" href="classLASi_1_1PostscriptDocument.html#r5">00214</a> <a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a> _osFooter; <span class="comment">// Postscript footer</span>
+00215 };
+00216
+<a name="l00219"></a><a class="code" href="classLASi_1_1setFont.html">00219</a> <span class="keyword">class </span><a class="code" href="classLASi_1_1setFont.html">setFont</a> {
+00220 <span class="keyword">public</span>:
+<a name="l00223"></a><a class="code" href="classLASi_1_1setFont.html#n0">00223</a> <span class="keyword">friend</span> <span class="keyword">inline</span> <a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& <a class="code" href="namespaceLASi.html#a20">operator<<</a>(<a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& os, <span class="keyword">const</span> <a class="code" href="classLASi_1_1setFont.html">setFont</a>& x) {
+00224 x.<a class="code" href="classLASi_1_1setFont.html#b0">apply</a>(os);
+00225 <span class="keywordflow">return</span> os;
+00226 }
+00227
+<a name="l00231"></a><a class="code" href="classLASi_1_1setFont.html#a0">00231</a> <a class="code" href="classLASi_1_1setFont.html">setFont</a>(
+00232 <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> family = <span class="stringliteral">"sans"</span>,
+00233 <span class="keyword">const</span> LASi::FontStyle style = LASi::NORMAL_STYLE,
+00234 <span class="keyword">const</span> LASi::FontWeight weight = LASi::NORMAL_WEIGHT,
+00235 <span class="keyword">const</span> LASi::FontVariant variant = LASi::NORMAL_VARIANT,
+00236 <span class="keyword">const</span> LASi::FontStretch stretch = LASi::NORMAL_STRETCH )
+00237 : _family(family), _style(style), _weight(weight), _variant(variant), _stretch(stretch)
+00238 {}
+00239
+00240 <span class="keyword">protected</span>:
+<a name="l00241"></a><a class="code" href="classLASi_1_1setFont.html#b0">00241</a> <span class="keywordtype">void</span> apply(<a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& os)<span class="keyword"> const </span>{
+00242 os.<a class="code" href="classLASi_1_1oPostscriptStream.html#b0">doc</a>().<a class="code" href="classLASi_1_1PostscriptDocument.html#a2">setFont</a>(_family, _style,_weight, _variant, _stretch);
+00243 }
+00244
+00245 <span class="keyword">private</span>:
+<a name="l00246"></a><a class="code" href="classLASi_1_1setFont.html#r0">00246</a> <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> _family;
+<a name="l00247"></a><a class="code" href="classLASi_1_1setFont.html#r1">00247</a> <span class="keyword">const</span> LASi::FontStyle _style;
+<a name="l00248"></a><a class="code" href="classLASi_1_1setFont.html#r2">00248</a> <span class="keyword">const</span> LASi::FontWeight _weight;
+<a name="l00249"></a><a class="code" href="classLASi_1_1setFont.html#r3">00249</a> <span class="keyword">const</span> LASi::FontVariant _variant;
+<a name="l00250"></a><a class="code" href="classLASi_1_1setFont.html#r4">00250</a> <span class="keyword">const</span> LASi::FontStretch _stretch;
+00251
+00252 };
+00253
+<a name="l00256"></a><a class="code" href="classLASi_1_1setFontSize.html">00256</a> <span class="keyword">class </span><a class="code" href="classLASi_1_1setFontSize.html">setFontSize</a> {
+00257 <span class="keyword">public</span>:
+<a name="l00260"></a><a class="code" href="classLASi_1_1setFontSize.html#n0">00260</a> <span class="keyword">friend</span> <span class="keyword">inline</span> <a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& <a class="code" href="namespaceLASi.html#a20">operator<<</a>(<a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& os, <span class="keyword">const</span> <a class="code" href="classLASi_1_1setFontSize.html">setFontSize</a>& x) {
+00261 x.<a class="code" href="classLASi_1_1setFontSize.html#b0">apply</a>(os);
+00262 <span class="keywordflow">return</span> os;
+00263 }
+00264
+<a name="l00269"></a><a class="code" href="classLASi_1_1setFontSize.html#a0">00269</a> <a class="code" href="classLASi_1_1setFontSize.html">setFontSize</a>(<span class="keywordtype">double</span> size) : _size(size) {}
+00270
+00271 <span class="keyword">protected</span>:
+<a name="l00272"></a><a class="code" href="classLASi_1_1setFontSize.html#b0">00272</a> <span class="keywordtype">void</span> apply(<a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& os)<span class="keyword"> const </span>{
+00273 os.<a class="code" href="classLASi_1_1oPostscriptStream.html#b0">doc</a>().<a class="code" href="classLASi_1_1PostscriptDocument.html#a3">setFontSize</a>(_size);
+00274 }
+00275
+00276 <span class="keyword">private</span>:
+<a name="l00277"></a><a class="code" href="classLASi_1_1setFontSize.html#r0">00277</a> <span class="keywordtype">double</span> _size;
+00278 };
+00279
+<a name="l00282"></a><a class="code" href="classLASi_1_1show.html">00282</a> <span class="keyword">class </span><a class="code" href="classLASi_1_1show.html">show</a>{
+00283 <span class="keyword">public</span>:
+<a name="l00286"></a><a class="code" href="classLASi_1_1show.html#n0">00286</a> <span class="keyword">friend</span> <span class="keyword">inline</span> <a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& <a class="code" href="namespaceLASi.html#a20">operator<<</a>(<a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& os, <span class="keyword">const</span> <a class="code" href="classLASi_1_1show.html">show</a>& x) {
+00287 x.<a class="code" href="classLASi_1_1show.html#b0">apply</a>(os);
+00288 <span class="keywordflow">return</span> os;
+00289 }
+00290
+<a name="l00294"></a><a class="code" href="classLASi_1_1show.html#a0">00294</a> <a class="code" href="classLASi_1_1show.html">show</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str) : _str(str) {}
+00295
+00296 <span class="keyword">protected</span>:
+00297 <span class="keywordtype">void</span> apply(<a class="code" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>& os) <span class="keyword">const</span>;
+00298
+00299 <span class="keyword">private</span>:
+<a name="l00300"></a><a class="code" href="classLASi_1_1show.html#r0">00300</a> std::string _str;
+00301 };
+00302 }
+00303 <span class="preprocessor">#endif</span>
+00304 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Dec 23 03:58:33 2004 for LASi by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.3.9.1 </small></address>
+</body>
+</html>
Added: trunk/www/html/LASi_8h.html
===================================================================
--- trunk/www/html/LASi_8h.html (rev 0)
+++ trunk/www/html/LASi_8h.html 2019-02-11 18:54:10 UTC (rev 224)
@@ -0,0 +1,286 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>LASi: LASi.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
+<div class="nav">
+<a class="el" href="dir_000001.html">include</a></div>
+<h1>LASi.h File Reference</h1>Defines oPostscriptStream and PostscriptDocument and various stream manipulators. <a href="#_details">More...</a>
+<p>
+<code>#include <string></code><br>
+<code>#include <ostream></code><br>
+<code>#include <sstream></code><br>
+<code>#include <map></code><br>
+<code>#include <pango/pango.h></code><br>
+<code>#include <freetype/ftglyph.h></code><br>
+
+<p>
+<a href="LASi_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceLASi.html">LASi</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classLASi_1_1oPostscriptStream.html">LASi::oPostscriptStream</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Just like any ordinary ostringstream, but maintains a reference to the <a class="el" href="classLASi_1_1PostscriptDocument.html">PostscriptDocument</a>. <a href="classLASi_1_1oPostscriptStream.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classLASi_1_1PostscriptDocument.html">LASi::PostscriptDocument</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Composes Postscript document as three separate and independant streams for header, body and footer. <a href="classLASi_1_1PostscriptDocument.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html">LASi::PostscriptDocument::GlyphId</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="classLASi_1_1PostscriptDocument_1_1GlyphId.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html">LASi::PostscriptDocument::write_glyph_routine_to_stream</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classLASi_1_1setFont.html">LASi::setFont</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">stream manipulator applied to <a class="el" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>. <a href="classLASi_1_1setFont.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classLASi_1_1setFontSize.html">LASi::setFontSize</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">stream manipulator applied to <a class="el" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>. <a href="classLASi_1_1setFontSize.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classLASi_1_1show.html">LASi::show</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">stream applicator applied to <a class="el" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a>. <a href="classLASi_1_1show.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceLASi.html#a21">FontStyle</a> { <a class="el" href="namespaceLASi.html#a21a0">NORMAL_STYLE</a>,
+<a class="el" href="namespaceLASi.html#a21a1">OBLIQUE</a>,
+<a class="el" href="namespaceLASi.html#a21a2">ITALIC</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceLASi.html#a22">FontWeight</a> { <br>
+ <a class="el" href="namespaceLASi.html#a22a3">ULTRALIGHT</a>,
+<a class="el" href="namespaceLASi.html#a22a4">LIGHT</a>,
+<a class="el" href="namespaceLASi.html#a22a5">NORMAL_WEIGHT</a>,
+<a class="el" href="namespaceLASi.html#a22a6">BOLD</a>,
+<br>
+ <a class="el" href="namespaceLASi.html#a22a7">ULTRABOLD</a>,
+<a class="el" href="namespaceLASi.html#a22a8">HEAVY</a>
+<br>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceLASi.html#a23">FontVariant</a> { <a class="el" href="namespaceLASi.html#a23a9">NORMAL_VARIANT</a>,
+<a class="el" href="namespaceLASi.html#a23a10">SMALLCAPS</a>
+ }</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceLASi.html#a24">FontStretch</a> { <br>
+ <a class="el" href="namespaceLASi.html#a24a11">ULTRACONDENSED</a>,
+<a class="el" href="namespaceLASi.html#a24a12">EXTRACONDENSED</a>,
+<a class="el" href="namespaceLASi.html#a24a13">CONDENSED</a>,
+<a class="el" href="namespaceLASi.html#a24a14">SEMICONDENSED</a>,
+<br>
+ <a class="el" href="namespaceLASi.html#a24a15">NORMAL_STRETCH</a>,
+<a class="el" href="namespaceLASi.html#a24a16">SEMIEXPANDED</a>,
+<a class="el" href="namespaceLASi.html#a24a17">EXPANDED</a>,
+<a class="el" href="namespaceLASi.html#a24a18">EXTRAEXPANDED</a>,
+<br>
+ <a class="el" href="namespaceLASi.html#a24a19">ULTRAEXPANDED</a>
+<br>
+ }</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template<class T> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">oPostscriptStream & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceLASi.html#a20">operator<<</a> (oPostscriptStream &os, T t)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Defines oPostscriptStream and PostscriptDocument and various stream manipulators.
+<p>
+<hr><h2>Enumeration Type Documentation</h2>
+<a class="anchor" name="file_a24" doxytag="LASi.h::FontStretch"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">enum <a class="el" href="namespaceLASi.html#a24">FontStretch</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="a24a11" doxytag="ULTRACONDENSED"></a>ULTRACONDENSED</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a24a12" doxytag="EXTRACONDENSED"></a>EXTRACONDENSED</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a24a13" doxytag="CONDENSED"></a>CONDENSED</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a24a14" doxytag="SEMICONDENSED"></a>SEMICONDENSED</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a24a15" doxytag="NORMAL_STRETCH"></a>NORMAL_STRETCH</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a24a16" doxytag="SEMIEXPANDED"></a>SEMIEXPANDED</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a24a17" doxytag="EXPANDED"></a>EXPANDED</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a24a18" doxytag="EXTRAEXPANDED"></a>EXTRAEXPANDED</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a24a19" doxytag="ULTRAEXPANDED"></a>ULTRAEXPANDED</em> </td><td>
+</td></tr>
+</table>
+</dl>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="file_a21" doxytag="LASi.h::FontStyle"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">enum <a class="el" href="namespaceLASi.html#a21">FontStyle</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="a21a0" doxytag="NORMAL_STYLE"></a>NORMAL_STYLE</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a21a1" doxytag="OBLIQUE"></a>OBLIQUE</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a21a2" doxytag="ITALIC"></a>ITALIC</em> </td><td>
+</td></tr>
+</table>
+</dl>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="file_a23" doxytag="LASi.h::FontVariant"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">enum <a class="el" href="namespaceLASi.html#a23">FontVariant</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="a23a9" doxytag="NORMAL_VARIANT"></a>NORMAL_VARIANT</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a23a10" doxytag="SMALLCAPS"></a>SMALLCAPS</em> </td><td>
+</td></tr>
+</table>
+</dl>
+ </td>
+ </tr>
+</table>
+<a class="anchor" name="file_a22" doxytag="LASi.h::FontWeight"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">enum <a class="el" href="namespaceLASi.html#a22">FontWeight</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="a22a3" doxytag="ULTRALIGHT"></a>ULTRALIGHT</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a22a4" doxytag="LIGHT"></a>LIGHT</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a22a5" doxytag="NORMAL_WEIGHT"></a>NORMAL_WEIGHT</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a22a6" doxytag="BOLD"></a>BOLD</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a22a7" doxytag="ULTRABOLD"></a>ULTRABOLD</em> </td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a22a8" doxytag="HEAVY"></a>HEAVY</em> </td><td>
+</td></tr>
+</table>
+</dl>
+ </td>
+ </tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="file_a20" doxytag="LASi.h::operator<<"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<class T> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">oPostscriptStream& operator<< </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">oPostscriptStream & </td>
+ <td class="mdname" nowrap> <em>os</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>T </td>
+ <td class="mdname" nowrap> <em>t</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+ </td>
+ </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Thu Dec 23 03:58:33 2004 for LASi by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.3.9.1 </small></address>
+</body>
+</html>
Added: trunk/www/html/annotated.html
===================================================================
--- trunk/www/html/annotated.html (rev 0)
+++ trunk/www/html/annotated.html 2019-02-11 18:54:10 UTC (rev 224)
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>LASi: Class List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindexHL" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
+<h1>LASi Class List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>
+ <tr><td class="indexkey"><a class="el" href="classContextMgr.html">ContextMgr</a></td><td class="indexvalue">Manage PangoContext* </td></tr>
+ <tr><td class="indexkey"><a class="el" href="classFreetypeGlyphMgr.html">FreetypeGlyphMgr</a></td><td class="indexvalue">Manage FT_Glyph by insuring that FT_Glyph is handled correctly </td></tr>
+ <tr><td class="indexkey"><a class="el" href="classManager.html">Manager< T ></a></td><td class="indexvalue">Manager template </td></tr>
+ <tr><td class="indexkey"><a class="el" href="classLASi_1_1oPostscriptStream.html">LASi::oPostscriptStream</a></td><td class="indexvalue">Just like any ordinary ostringstream, but maintains a reference to the <a class="el" href="classLASi_1_1PostscriptDocument.html">PostscriptDocument</a> </td></tr>
+ <tr><td class="indexkey"><a class="el" href="classLASi_1_1PostscriptDocument.html">LASi::PostscriptDocument</a></td><td class="indexvalue">Composes Postscript document as three separate and independant streams for header, body and footer </td></tr>
+ <tr><td class="indexkey"><a class="el" href="classLASi_1_1PostscriptDocument_1_1GlyphId.html">LASi::PostscriptDocument::GlyphId</a></td><td class="indexvalue">For internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html">LASi::PostscriptDocument::write_glyph_routine_to_stream</a></td><td class="indexvalue">For internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="classLASi_1_1setFont.html">LASi::setFont</a></td><td class="indexvalue">Stream manipulator applied to <a class="el" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a> </td></tr>
+ <tr><td class="indexkey"><a class="el" href="classLASi_1_1setFontSize.html">LASi::setFontSize</a></td><td class="indexvalue">Stream manipulator applied to <a class="el" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a> </td></tr>
+ <tr><td class="indexkey"><a class="el" href="classLASi_1_1show.html">LASi::show</a></td><td class="indexvalue">Stream applicator applied to <a class="el" href="classLASi_1_1oPostscriptStream.html">oPostscriptStream</a> </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structStateOfDrawGlyph.html">StateOfDrawGlyph</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="classStringDimensions.html">StringDimensions</a></td><td class="indexvalue">Class StringDimensions maintains the relevant dimensions of a text string realized (i.e., drawn) in a given font face and font size </td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Thu Dec 23 03:58:33 2004 for LASi by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.3.9.1 </small></address>
+</body>
+</html>
Added: trunk/www/html/classContextMgr-members.html
===================================================================
--- trunk/www/html/classContextMgr-members.html (rev 0)
+++ trunk/www/html/classContextMgr-members.html 2019-02-11 18:54:10 UTC (rev 224)
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>LASi: Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
+<h1>ContextMgr Member List</h1>This is the complete list of members for <a class="el" href="classContextMgr.html">ContextMgr</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="classManager.html#p0">_t</a></td><td><a class="el" href="classManager.html">Manager< PangoContext * ></a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="classContextMgr.html#a0">ContextMgr</a>(const char *const lang="en_US.UTF-8", const int dpiX=72, const int dpiY=72)</td><td><a class="el" href="classContextMgr.html">ContextMgr</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="classManager.html#b0">isOwner</a>() const </td><td><a class="el" href="classManager.html">Manager< PangoContext * ></a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="classManager.html#a0">Manager</a>()<...
[truncated message content] |
|
From: <ai...@us...> - 2019-02-03 23:44:30
|
Revision: 223
http://sourceforge.net/p/lasi/code/223
Author: airwin
Date: 2019-02-03 23:44:27 +0000 (Sun, 03 Feb 2019)
Log Message:
-----------
Update README.Release_Manager_Cookbook to reflect final changes in release procedure for 1.1.3
Modified Paths:
--------------
trunk/README.Release_Manager_Cookbook
Modified: trunk/README.Release_Manager_Cookbook
===================================================================
--- trunk/README.Release_Manager_Cookbook 2019-01-31 08:22:34 UTC (rev 222)
+++ trunk/README.Release_Manager_Cookbook 2019-02-03 23:44:27 UTC (rev 223)
@@ -19,10 +19,41 @@
(1) Create and test a preliminary tarball from trunk
- Do everything in (3) below just to make sure that the trunk
- version is in good shape before you do the following final stages
- of the release process.
+ This (extensive testing) is just to make sure that the trunk version
+ is in good shape before you do the following final stages of the
+ release process.
+ Do the test in (3) below. Also, build and install a shared version of LibLASi
+ and a static version of LIBLASi and test each of those
+ with the following PLplot comprehensive test:
+
+time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5:/home/software/lasi_svn/install PATH="/home/software/cmake/install-3.12.4/bin:$PATH" LD_LIBRARY_PATH=/home/software/lasi_svn/install/lib "$SOURCE_PREFIX"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON -DDEFAULT_NO_DEVICES=ON -DPLD_psttfc=ON -DPLPLOT_TEST_DEVICE=psttfc" --build_command "make -j16" --ctest_command "ctest -j16" --do_test_interactive no)
+
+ where
+
+SOURCE_PREFIX="/home/software/plplot/HEAD/plplot blank .git"
+COMPREHENSIVE_TEST_PREFIX="/home/software/plplot/HEAD/comprehensive_test_disposeable blank"
+
+ Furthermore, the CMAKE_PREFIX_PATH components are to help cmake
+ find a local version of lua and to find the local installed
+ version of libLASi (since the Debian versions of lua and libLASi
+ have showstopping bugs); the PATH update is to use cmake and
+ ctest version 3.12.4 (the minimum version of cmake accepted by
+ PLplot); LD_LIBRARY_PATH must be set (for now) because PLplot
+ rpath processing is currently not correct for a version of
+ libLASi installed in a non-standard location;
+ -DUSE_INCRTCL_VERSION_4=ON is to work around Tcl find issues,
+ -DDEFAULT_NO_DEVICES=ON -DPLD_psttfc=ON is to limit all device
+ testing to just -dev psttfc, and -DPLPLOT_TEST_DEVICE=psttfc is
+ to use that device for difference testing.
+
+ Evaluation of those comprehensives tests done as per
+ doc/wiki_source/Testing_PLplot in the PLplot source tree should
+ show perfect results. But if not (i.e., there is a regression in
+ this regard), make the appropriate libLASi changes to fix the
+ libLASi bugs causing those issues, and commit those bug fixes to
+ the trunk version.
+
(2) Finish release-related trunk changes so they will be in the release
* set environment variable for version to make directions below
@@ -31,7 +62,7 @@
export LASI_VERSION=1.1.3
# Should refer to first release in this release cycle, i.e., one after
# last release for the last release.
-export FIRST_RELEASE_REVISION=r200
+export FIRST_REVISION_IN_CYCLE=r200
* Prepare a preliminary version of the ChangeLog file to see what
has been accomplished since the last release.
@@ -39,7 +70,7 @@
# This makes the BASE used below correct.
svn update
-svn log --revision ${FIRST_RELEASE_REVISION}:BASE --verbose >| ChangeLog.release_preliminary
+svn log --revision ${FIRST_REVISION_IN_CYCLE}:BASE --verbose >| ChangeLog.release_preliminary
Note the "_preliminary" suffix to distinguish this from the final
result below which will contain (if all goes well in the steps
@@ -156,23 +187,22 @@
cmp test.eps $CORE_NAME.eps
done
-* Test that tarball with static build, install, and static examples build
-
-# Repeat all the prior test steps starting with removing prior test results with
-
+# Return to core build tree and get rid of test results.
cd $build_tree_dir/..
rm -rf tarball_*
-# Then follow with all the above steps starting with
+* Test that tarball with static build, install, and static examples build
+# Repeat all the prior test steps (except for the cmake option
+# -DBUILD_SHARED_LIBS=ON replaced by -DBUILD_SHARED_LIBS=OFF) starting
+# with
+
mkdir tarball_build_dir
[...]
-# but with cmake option -DBUILD_SHARED_LIBS=ON replaced by -DBUILD_SHARED_LIBS=OFF
+ If these shared and static tests reveal that trunk changes are
+ necessary, do those, commit them, and retest them.
- If these tests reveal that trunk changes are necessary, do those, commit
-them, and retest them.
-
(4) Update ChangeLog and README.Release_Manager_Cookbook
* Update this file (README.Release_Manager_Cookbook) as much as
@@ -184,8 +214,8 @@
* Prepare a (hopefully) final version of the ChangeLog file and commit it.
svn update
-svn log --revision BASE:${LAST_RELEASE_REVISION} --verbose >| ChangeLog.preliminary
-mv ChangeLog.preliminary ChangeLog.release
+svn log --revision BASE:${FIRST_REVISION_IN_CYCLE} --verbose >| ChangeLog.release_preliminary
+mv ChangeLog.release_preliminary ChangeLog.release
svn commit ChangeLog.release
(5) Tag the release
@@ -214,7 +244,7 @@
If you already have this directory, you will need to make sure
that all your commits (probably in a different local directory)
- have been done (see above) and that lasi_complete is up to date
+ have been done (see above) and that lasi_allura_complete is up to date
with those commits.
cd lasi_allura_complete
@@ -225,14 +255,16 @@
(6) Create and test the release tarball from the tagged version
- Do exactly the same as (3), but for tagged source code in
- tags/$LASI_VERSION
+ Do exactly the same as (3) in the usual initially empty build
+ directory, but with the top of the source tree
+ lasi_allura_complete/tags/$LASI_VERSION
- In the (unlikely event that problems are found in the tarball
- generated from the tagged version during the release process,
- corrections should be made to trunk/, the ChangeLog.release file
- recreated and committed (see instructions above). Then merge the
- trunk version into the tags as follows:
+ In the (unlikely, since this has never happened for me) event
+ that problems are found in the tarball generated from the tagged
+ version during the release process, corrections should be made to
+ trunk/, the ChangeLog.release file recreated and committed (see
+ instructions above). Then merge the trunk version into the tags
+ as follows:
cd tags/$LASI_VERSION
svn merge -r A:B /path/to/trunk
@@ -239,14 +271,20 @@
Where A and B specify the range of revisions in trunk to be
applied to tags/$LASI_VERSION in the merge process. These can be
- determined by commit messages.
+ determined by commit messages. N.B. I have never had to
+ go through this procedure so the above instructions are what
+ I have gleaned from other sources "just in case".
(7) Generate a file release at Sourceforge
- A list of your GPG keys can be obtained using the command "gpg --list-keys <first name>"
- where <first name> is the first name you used when creating your gpg key. The result of
- that command for the current release manager (AWI) is
+ A list of your GPG keys can be obtained using the command
+gpg --list-keys <first name>
+
+ where <first name> is the first name you used when creating your
+ gpg key. The result of that command for the current release
+ manager (AWI) is
+
pub rsa2048 2011-08-19 [SC] [expires: 2021-12-12]
A7CED6D2D4903103FCDDFC1E418B8FC4BB159E92
uid [ultimate] Alan W. Irwin (Time Ephemerides key) <ai...@us...>
@@ -289,7 +327,7 @@
where the output of that commmand should be similar to
gpg: assuming signed data in 'libLASi-1.1.3.tar.gz'
-gpg: Signature made Wed 30 Jan 2019 10:58:19 PM PST
+gpg: Signature made Thu 31 Jan 2019 12:04:16 AM PST
gpg: using RSA key A7CED6D2D4903103FCDDFC1E418B8FC4BB159E92
gpg: Good signature from "Alan W. Irwin (Time Ephemerides key) <ai...@us...>" [ultimate]
gpg: aka "Alan W. Irwin (libLASi key) <ai...@us...>" [ultimate]
@@ -303,7 +341,7 @@
Prepare a temporary file called README.release that concatenates
README.release and ChangeLog.release.
-cd lasi_allura_complete/tags/$LASI_VERSION
+cd ../lasi_allura_complete/tags/$LASI_VERSION
echo "
@@ -353,26 +391,31 @@
default file to download for all platforms.
(8) Commit the tagged version
-cd lasi_allura_complete
+cd ../lasi_allura_complete
svn commit tags/$LASI_VERSION
-(9) Publicity for the release announcement
+(9) Publicity for the release
- Create a news item for the Release:
- Click on the news menu item and then click on
+ Create a news item for this release largely following previous
+ news items (or even identical to them but with a changed title).
- Click "Submit" for the news feature.
+ Point your browser to http://sourceforge.net/projects/lasi and
+ login. A news item will then be available on the menu bar.
+ Click that, then "new post".
- Experience shows you should edit a temporary file with no line
- feeds except at paragraph breaks, and all URL's should be
- mentioned as-is with no html formatting. Then cat that file, and
- cut and paste the result to the form generated above. SF then
- turns that result into something readable as HTML with the URL's
- turned into clickable links.
+ Enter the title (e.g., libLASI $LASI_VERSION has been released)
+ and the text. The text is in markdown format so copying and
+ pasting from a previous news item (using the ctrl-c command on
+ the editing area of the old release notes to copy and ctrl-v
+ command on the new release notes editing area since normal
+ cutting and pasting no longer works) is a very efficient way to
+ create the new news item. After that copy and paste, remember to
+ change all occurrences of version references appropriately
+ within the text.
Other publicity:
- Barbara: linuxtoday.com, lwn.net, lxer.com
+ None.
(10) Post release tweaking of this file (README.Release_Manager_Cookbook)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-01-31 08:22:37
|
Revision: 222
http://sourceforge.net/p/lasi/code/222
Author: airwin
Date: 2019-01-31 08:22:34 +0000 (Thu, 31 Jan 2019)
Log Message:
-----------
Add and commit of the 1.1.3 release tag
Added Paths:
-----------
tags/1.1.3/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-01-31 07:25:49
|
Revision: 221
http://sourceforge.net/p/lasi/code/221
Author: airwin
Date: 2019-01-31 07:25:47 +0000 (Thu, 31 Jan 2019)
Log Message:
-----------
Update commit messages for 1.1.3 release cycle
Modified Paths:
--------------
trunk/ChangeLog.release
Modified: trunk/ChangeLog.release
===================================================================
--- trunk/ChangeLog.release 2019-01-31 07:10:35 UTC (rev 220)
+++ trunk/ChangeLog.release 2019-01-31 07:25:47 UTC (rev 221)
@@ -1,279 +1,743 @@
------------------------------------------------------------------------
-r199 | airwin | 2014-07-26 13:53:01 -0700 (Sat, 26 Jul 2014) | 2 lines
+r220 | airwin | 2019-01-30 23:10:35 -0800 (Wed, 30 Jan 2019) | 10 lines
Changed paths:
M /trunk/README.Release_Manager_Cookbook
-Another tweak.
+Update to the lastest version of the instructions for the release manager
+This file should reflect the actual commands and actual results of
+those commands for this release. And it is up to date in that regard
+for what has gone on so far in this release. However, in case there
+are a few further tweaks necessary in the description of the commands
+in the rest of the release process, then this file should be updated
+again to reflect those changes just after the release.
+
+
------------------------------------------------------------------------
-r198 | airwin | 2014-07-26 13:51:35 -0700 (Sat, 26 Jul 2014) | 2 lines
+r219 | airwin | 2019-01-30 12:38:40 -0800 (Wed, 30 Jan 2019) | 8 lines
Changed paths:
- M /trunk/README.Release_Manager_Cookbook
+ M /trunk/README.cumulated_release
+ M /trunk/README.release
-Tweak wording.
+Finalize release notes for the forthcoming release of libLASi-1.1.3
+As part of this change, I have prepended README.release into
+README.cumulated_release so if there are any added tweaks after this
+before the libLASi-1.1.3 release both README.release and
+README.cumulated_release should be tweaked in the same way.
+
+
------------------------------------------------------------------------
-r197 | airwin | 2014-07-26 13:49:02 -0700 (Sat, 26 Jul 2014) | 3 lines
+r218 | airwin | 2019-01-29 22:26:05 -0800 (Tue, 29 Jan 2019) | 10 lines
Changed paths:
- M /trunk/README.Release_Manager_Cookbook
+ D /trunk/CONCATENATED_README.release
+ A /trunk/README.cumulated_release (from /trunk/CONCATENATED_README.release:217)
-Update instructions to be consistent with what is planned for the
-1.1.2 release.
+Rename CONCATENATED_README.release => README.cumulated_release
+This new name for this cumulation of release notes follows how
+this file is named in PLplot.
+
+Note, before making this name change I double-checked that
+this file contained all recent release notes up to and
+including the last (1.1.2) release.
+
+
------------------------------------------------------------------------
-r196 | airwin | 2014-07-26 10:48:13 -0700 (Sat, 26 Jul 2014) | 2 lines
+r217 | airwin | 2019-01-29 19:30:55 -0800 (Tue, 29 Jan 2019) | 18 lines
Changed paths:
- M /trunk/README.release
+ M /trunk/README
+ M /trunk/cmake/modules/lasi_version.cmake
-Describe tests of this release.
+Bump package version from 1.1.2 to 1.1.3 and library SOVERSION from 1 to 2 in anticipation of the 1.1.3 release
+The bump in just the patch number of the package version reflects that
+only maintenance and no new development has occurred for this release.
+However, that maintenance did involve necessary but relatively minor
+backwards-incompatible changes to the libLASi API (a change in the
+PostscriptDocument::GlyphId::GlyphId protected method API that is
+designed for internal use only and the addition of the
+PostscriptDocument::PangoItem_do protected method that is also
+designed for internal use only).
+
+As a result of these backwards incompatibilities, the library
+SOVERSION had to be bumped from 1 to 2 to force users of this library
+(e.g., the PLplot psttf device driver) to do the required
+recompilations for this case. However, there is no need for users to
+actually change their source code to adjust to these backwards
+incompatibilities.
+
------------------------------------------------------------------------
-r195 | airwin | 2014-07-26 09:59:04 -0700 (Sat, 26 Jul 2014) | 2 lines
+r216 | airwin | 2019-01-29 18:38:11 -0800 (Tue, 29 Jan 2019) | 36 lines
Changed paths:
- M /trunk/README.release
+ M /trunk/examples/CMakeLists.txt
+ A /trunk/examples/ComplexTextLayoutExample.png
+ D /trunk/examples/Example_1_Result.png
+ D /trunk/examples/Example_2_Result.png
+ M /trunk/examples/Makefile.examples.in
+ A /trunk/examples/MissingGlyphExample.png
+ A /trunk/examples/SimpleLASiExample.png
-Include fix of file-repeatability bug in description of what was fixed.
+Reorganize how examples are built and run and replace old PNG snapshots with new ones
+All references to a numerical "example[0-2]" core name style for
+example applications and results have now been replaced by the more
+descriptive core names MissingGlyphExample, SimpleLASiExample, and
+ComplexTextLayoutExample. This core name change also makes the names
+of example applications and results consistent with the name of the
+source code used for each of the examples.
+
+These examples now do the appropriate bounding-box calculations so the
+results for all three of these examples are now in valid EPS
+(Encapsulated PostScript) format. Accordingly the suffix of the
+results of these applications has been changed from ".ps" to ".eps".
+(This change in suffix is necessary before inkscape will honor the
+bounding boxes.)
+
+The new PNG snapshots generated by inkscape (now automatically
+calculated in the build tree as a result of building the "all" target)
+are much higher quality than the previous decade-old snapshots because
+(i) pango is much more advanced than it was a decade ago, (ii) Linux
+fonts are much better than they were a decade ago, and (iii) inkscape
+does a better job of converting to PNG format than whatever (likely
+commercial) application was used for such conversion a decade ago.
+Accordingly I have removed the old PNG results from the examples
+subdirectory of the source tree and replaced them with the current
+build-tree results (on the Debian Testing platform) for
+MissingGlyphExample.png, SimpleLASiExample.png, and
+ComplexTextLayoutExample.png
+
+Tested by: Alan W. Irwin <ai...@us...> on Linux
+(Debian Testing) by following all the shared library and static
+library build-tree and installed examples tree test steps documented
+in a local variation of README.Release_Manager_Cookbook that will soon
+be committed. All these tests passed without any issues.
+
+
------------------------------------------------------------------------
-r194 | airwin | 2014-07-26 09:55:32 -0700 (Sat, 26 Jul 2014) | 4 lines
+r215 | airwin | 2019-01-29 18:11:58 -0800 (Tue, 29 Jan 2019) | 4 lines
Changed paths:
- M /trunk/src/psDoc.cpp
+ M /trunk/CMakeLists.txt
+ M /trunk/src/CMakeLists.txt
-Changed from glyph_1, glyph2, etc., to using LASi_glyph_1, LASi_glyph2, etc., for libLASi-assigned
-glyph names. This change avoids any potential name clashes with glyph names that
-are available in font files.
+Insert copyright notice in CMakeLists.txt and src/CMakeLists.txt
+In addition I fixed a CMake version number typo in the CMakeLists.txt comments.
+
------------------------------------------------------------------------
-r193 | airwin | 2014-07-26 09:24:34 -0700 (Sat, 26 Jul 2014) | 3 lines
+r214 | airwin | 2019-01-29 18:08:50 -0800 (Tue, 29 Jan 2019) | 2 lines
Changed paths:
- M /trunk/src/psDoc.cpp
+ M /trunk/examples/README
-Improve commentary concerning deriving unique glyph name if
-one does not exist.
+Substantial update of the documentation of the examples
------------------------------------------------------------------------
-r192 | airwin | 2014-07-17 13:54:08 -0700 (Thu, 17 Jul 2014) | 11 lines
+r213 | airwin | 2019-01-25 12:57:27 -0800 (Fri, 25 Jan 2019) | 85 lines
Changed paths:
+ M /trunk/include/LASi.h
M /trunk/src/psDoc.cpp
-Change from using rand_r to generate unique glyph name for glyphs
-without names to using a more human-understandable unique glyph name,
-i.e., glyph_1, glyph_2, etc., where the name is guaranteed to be
-unique until the int overflow limit is reached on the unique int used
-to form that numerical suffix. A side benefit of this new approach is
-the result should be (slightly) more efficient in speed and size since
-rand_r does not have to be called, and the unique names are ordinarily
-shorter than the 16 random upper-case letters that were used
-previously to form the unique name.
+Make glyph names have a one-to-one relationship with glyphs
+This change to the glyph name (for the uncommon but not rare case when
+FT_HAS_GLYPH_NAMES(face) is false for a given font) changes the glyph
+name calculated by the nameof static function from
+LASi_glyph_<unique number>
+
+where unique number was incremented every time nameof was called
+
+to
+
+LASi_glyphU+<UCS4 hexadecimal code for the glyph>.
+
+with a fallback to the unique number name approach if the UCS4 hexadecimal code for the glyph
+could not be determined for some reason.
+
+This change to the UCS4 version means there is now a one-to-one
+relationship between unique glyph name and glyph. This has several
+advantages:
+
+* The unique glyph name is always the same for the same glyph
+ regardless of the order in which glyphs are encountered in strings.
+ This improvement eliminated the PLplot differences due to different
+ glyph names between octave results (calculated for all our standard
+ Octave examples with just one octave session) and C results
+ (calculated with a separate application for each of our standard C
+ examples).
+
+* When bounding-boxes are calculated using the get_dimensions method
+ and text renderered with the show command, nameof is called twice
+ with the same glyph. For that case, the unique number approach
+ calculated two different glyph names for the same glyph resulting in
+ redundant glyph functions (with different unique number names but
+ same contents) being stored in the PostScript header. That libLASi
+ misfeature has been eliminated with the new UCS4 glyph naming
+ approach.
+
+* The new version of the glyph names contains the UCS4 information for
+ the glyph which allows users to understand (with the aid of
+ applications such as gucharmap) exactly which glyph their
+ application was asking to be rendered. This additional glyph
+ information is quite useful when debugging results.
+
+The implementation of this change required copying (with a small
+adaptation) the C-style static function utf8_to_ucs4 from
+PLplot as allowed by the LGPL license for PLplot. This change also required
+the following backwards incompatibility to the libLASi API
+
+- GlyphId(FT_Face, const FT_UInt);
++ GlyphId(FT_Face, const FT_UInt, uint32_t unichar);
+
+Since this is a protected method that is normally only used internally
+it is anticipated that few if any libLASi users will have to actually
+change their code due to this change. (For example, this is the case
+for PLplot which depends completely on libLASi for its psttf device
+driver implementation.) However, all libLASi users will have to
+recompile their code due to this change so to force that I plan to
+bump the SONAME for the libLASi library (as usual for any
+backwards-incompatible change) before the forthcoming release
+of the libLASi software.
+
+Tested by: Alan W. Irwin <airwin@...> on Linux
+(Debian Testing) by configuring libLASi, building it with "make", and
+testing it with "ctest --verbose". The results for all three examples
+continued to look good. And the redundant glyph functions in the
+PostScript headers are now eliminated with the UCS4 codes double-checked
+with gucharmap for example 2 in a couple of cases.
+
+Further PLplot test:
+
+I installed this updated liblasi library and configured a PLplot build to use that
+installed version for its psttf device driver and also specified -DPLPLOT_TEST_DEVICE=psttfc
+to use that device for the test_diff_device target. I built that target
+(which compares psttfc results for all examples written in all our supported languages).
+The test_diff_device report was perfect, i.e., the octave differences that occurred before
+because of different glyph function names in the header are now gone. In addition,
+the triple redundancy (presumably because that device calls bounding box twice) in
+glyph functions is now also gone.
+
+In sum, this change has nicely eliminated a number of minor (because
+FT_HAS_GLYPH_NAMES(face) is false only for relatively few fonts)
+libLASi issues.
+
+
------------------------------------------------------------------------
-r191 | airwin | 2014-07-16 13:46:34 -0700 (Wed, 16 Jul 2014) | 13 lines
+r212 | airwin | 2019-01-24 02:32:58 -0800 (Thu, 24 Jan 2019) | 121 lines
Changed paths:
+ M /trunk/examples/MissingGlyphExample.cpp
+ M /trunk/include/LASi.h
M /trunk/src/psDoc.cpp
-Fix the repeatability of glyph identification strings
-<http://sourceforge.net/p/lasi/bugs/5>.
+Work around libLASi issue that occurs when pango chooses pure bitmapped fonts
-All this fix does is change from using rand to rand_r which makes the
-random number seed used by libLASi completely independent of the rand
-seed used by the dependencies of that library. This fix is consistent
-with the working hypothesis that one of those dependent libraries is
-modifying the rand seed in a non-repeatable way and thus when libLASi
-previously used rand this non-repeatablility was contaminating the glyph
-identification strings as well, but that non-repeatability is avoided
-by using a rand_r seed that is unique to libLASi.
+An example of such a pure bitmapped font is the popular Noto Color
+Emoji. For glyphs such as "Unicode U+2648 ARIES: ♈", pango
+(presumably due to the default configuration of fontconfig on my
+Debian Testing system) chooses this font to render this glyph (and some
+other fairly common glyphs as well). Of course, this font is incompatible with libLASi since
+that library can only use scalable outline fonts rather than bitmapped
+ones.
+The (DEBUG) result for this incompatible pango choice was
-------------------------------------------------------------------------
-r190 | airwin | 2014-04-29 11:20:43 -0700 (Tue, 29 Apr 2014) | 4 lines
-Changed paths:
- M /trunk/ChangeLog.release
+FT_Load_Glyph is returning error = 24 for a glyph index of 52 associated with the substring ♈♈
-Yet another "final" commit of the ChangeLog.release file prior to the
-release of 1.1.2.
+where 24 (see
+<https://www.freetype.org/freetype2/docs/reference/ft2-error_code_values.html>)
+corresponds to "Invalid_Size_Handle" which I assume means simply that
+pure bitmapped fonts cannot be scaled (one of the font attributes that
+libLASi obviously needs). Prior to this commit, the libLASi response
+for any FT_Load_Glyph error was to try again with a glyph index of 0
+(normally used to obtain the default replacement glyph for the type
+face). But, of course, the exact same error as above is obtained for
+this glyph index as well for Noto Color Emoji. Therefore, the result
+of this glyph index 0 error condition was libLASi aborted which is not
+an acceptable result due simply to the overall popularity of Noto
+Color Emoji.
+Of course, this library abort can be avoided if fontconfig is
+reconfigured to avoid bitmapped fonts or (almost equivalently) the
+user uninstalls the Noto Color Emoji font package, but such
+"solutions" are not acceptable in general because of the popularity of
+this font for many other tasks where a bitmapped font is fine.
-------------------------------------------------------------------------
-r189 | airwin | 2014-04-29 11:17:52 -0700 (Tue, 29 Apr 2014) | 2 lines
-Changed paths:
- M /trunk/CMakeLists.txt
+Ideally, the solution to this issue would be to ask pango to only
+choose outline fonts, but I am not aware of any method of making such
+a request of that library. So unless or until such a method is
+discovered (or developed) for the pango library, the only solution to
+this issue is to find a libLASi workaround when the above glyph index
+0 response to a FT_Load_Glyph error also errors out.
-Improved regex for dropping emacs temporary files from release tarball.
+This commit implements such a workaround which is to substitute the
+default replacement glyph for each glyph in the PangoItem
+(corresponding to a run of characters that can all be rendered with a
+font of fixed family, slant, weight, and width (but not size)).
+whenever such an error is discovered for any glyph in a PangoItem.
-------------------------------------------------------------------------
-r188 | airwin | 2014-04-29 10:52:39 -0700 (Tue, 29 Apr 2014) | 3 lines
-Changed paths:
- M /trunk/ChangeLog.release
+The chosen emergency glyph is "\n" which experience shows reliably
+forces the glyph index 0 code path which replaces that linefeed
+with the default replacement glyph (normally an empty box). So the
+net result is the default replacement glyph is rendered now for all
+error cases.
-Final (I hope) commit of the ChangeLog.release prior to the release of
-1.1.2.
+I have updated the explanatory text in MissingGlyphExample.cpp to be
+consistent with this conclusion.
-------------------------------------------------------------------------
-r187 | airwin | 2014-04-29 10:47:16 -0700 (Tue, 29 Apr 2014) | 3 lines
-Changed paths:
- M /trunk/README.Release_Manager_Cookbook
+N.B. as part of this fix I transferred the PangoItem processing part
+of the code in the for_each_glyph_do method (which is a misnomer since
+it should really be called for_each_string_do) to a new
+PostscriptDocument method called PangoItem_do. This code
+reorganization makes the code substantially easier to understand with
+PangoItem_do doing most of the work, and for_each_glyph_do responding
+to any errors reported by that method which it could not handle itself
+with the glyph_index 0 code path.
-Commit preliminary changes to this file for this release. This file
-will be further updated post-release.
+Unfortunately this reorganization means the new routine PangoItem_do
+must be a protected class method (rather than a simple C-style static
+routine) because it uses protected data from the PostscriptDocument
+class. This change is a backward-incompatible change to libLASi.h and
+the libLASi library which will require users of that library to
+recompile their code against the changed libLASi.h. However, this
+backwards-incompatible change will not require them to actually change
+their code.
-------------------------------------------------------------------------
-r186 | airwin | 2014-04-29 10:14:09 -0700 (Tue, 29 Apr 2014) | 4 lines
-Changed paths:
- M /trunk/README.release
+Tested by: Alan W. Irwin <ai...@us...> on Linux
+(Debian Testing) by configuring libLASi, building it with "make", and
+testing it with "ctest --verbose". The results for the "Missing
+Glyphs" showed empty boxes (the expected default replacement glyph)
+for both the missing glyphs and all (two) Aries glyphs associated
+with a PangoItem font face where pango chose the Noto Color Emoji
+font.
-Change these release notes to be consistent with what has happened in
-the release cycle leading up to the release of 1.1.2.
+Further tests:
+* I ran all three examples under valgrind with no memory management
+ issues other than memory leaks reported.
-------------------------------------------------------------------------
-r185 | airwin | 2014-04-29 09:37:39 -0700 (Tue, 29 Apr 2014) | 5 lines
-Changed paths:
- D /trunk/ChangeLog
- A /trunk/ChangeLog.release (from /trunk/ChangeLog:183)
+* I installed this updated liblasi library and configured a PLplot build to use that
+ installed version for its psttf device driver and also specified -DPLPLOT_TEST_DEVICE=psttfc
+ to use that device for the test_diff_device target. I built that target
+ (which compares psttfc results for all examples written in all our supported languages).
+ The test_diff_device report was clean except for
-Rename ChangeLog ==> ChangeLog.release in anticipation that this
-file is going to reflect just the changes made for the current release
-rather than all changes from the start of when the repository was
-created.
+octave
+ Missing examples : 24
+ Differing graphical output :
+ Missing stdout :
+ Differing stdout :
+ which further investigation showed was simply an artifact of the octave calculation
+ being done with one octave session so that the unique lasi_index number associated
+ with broken fonts that fail the !FT_HAS_GLYPH_NAMES(face) test is different for
+ octave compared to the C examples.
+
+* I viewed all 33 C standard example results built as part of the test_diff_device
+ target build using the gv PostScript viewer. In all cases (except for example 7 where
+ the signs of the zodiac came out as empty boxes because of the Noto Color Emoji choice
+ by pango) the rendering of the examples looked good.
+
+In sum the only issue I could find for any of these tests is
+duplicated (due to bounding-box calculations) GlyphId's in those rare
+cases where a font failed the !FT_HAS_GLYPH_NAMES(face) test. That
+duplication lead to redundant glyph information (with different
+LASi_glyph_* titles but duplicate contents) being stored in the
+headers of the PostScript results. The only way to address this issue
+is to not call GlyphId when bounding boxes are being calculated, but I
+don't know how to implement such a test. Furthermore, I judge this to
+be a minor issue because relatively few fonts are sufficient broken to
+fail the !FT_HAS_GLYPH_NAMES(face) test so I am going to live with
+this issue.
+
+
------------------------------------------------------------------------
-r184 | airwin | 2014-04-29 09:32:55 -0700 (Tue, 29 Apr 2014) | 2 lines
+r211 | airwin | 2019-01-23 16:24:48 -0800 (Wed, 23 Jan 2019) | 31 lines
Changed paths:
- M /trunk/README
- M /trunk/cmake/modules/lasi_version.cmake
+ M /trunk/examples/MissingGlyphExample.cpp
-Update version to 1.1.2 in anticipation of the release today.
+Modify the "Missing Glyph" example again
+In this case I replaced
+
+- "Unicode U+1878 MONGOLIAN LETTER CHA WITH TWO DOTS: ᡸ",
++ "Embedded newlines a\\nb\\nc: a\nb\nc",
+
+because I have verified experimentally that inserting a newline
+character (and presumably any other non-printing character) in the
+character string generates a missing glyph condition that results in
+the replacement glyph (normally an empty box) being substituted by the
+libLASi code. So this appears to be a much more reliable way
+(compared to random unicode glyphs that happen not to be available now
+but which will likely become available later) in the long run to test
+the response of libLASi to missing glyphs.
+
+Tested by: Alan W. Irwin <ai...@us...> on Linux
+(Debian Testing) by configuring libLASi, building the all target,
+running ctest, and verifying with gv that the resulting Encapsulated
+PostScript file has substituted the missing glyph empty box for the
+embedded newlines.
+
+N.B. this test was done for a modified version of
+examples/MissingGlyphExample.cpp where the Aries symbols were dropped.
+Of course, with those symbols restored to the example as in this
+commit, ctest errors out as before because of the attempt to use an
+unsuitable pure bitmap font (Noto Color Emoji) to handle the Aries
+glyph. A solution to that remaining libLASi issue has been found but
+it is not commit-ready yet (and it was not used for the present test).
+
+
------------------------------------------------------------------------
-r183 | edtrager | 2014-04-28 14:30:46 -0700 (Mon, 28 Apr 2014) | 1 line
+r210 | airwin | 2019-01-22 17:35:57 -0800 (Tue, 22 Jan 2019) | 87 lines
Changed paths:
- M /trunk/src/glyphMgr.cpp
+ M /trunk/examples/MissingGlyphExample.cpp
-Changed FreeTypeGlyphMgr(FT_Glyph) member initialization for _glyph to _glyph(glyph)
+Update "Missing Glyphs" example to provide more stringent tests of the libLASi library
+
+One on-going testing issue with this example is Debian fonts are
+constantly improving. So in contrast to the Debian Jessie case,
+Debian Testing provides all the glyphs for the previous version of
+this example which therefore no longer tests libLASi's response to missing
+glyphs. So to address that issue (at least temporarily) I have added
+
+"Unicode U+1878 MONGOLIAN LETTER CHA WITH TWO DOTS: ᡸ"
+
+to the strings being rendered by this example. This means this
+example tests missing glyphs again for me since this glyph is missing
+for the (extensive) set of Debian Testing font packages I currently
+have installed.
+
+One important libLASi defining characteristic is this library can only
+use scalable outline fonts. Until recently this has largely been only
+a theoretical concern because fontconfig was typically set up to
+prefer modern outline fonts over old-fashioned bitmapped fonts.
+However, that all changed with the advent of the Noto Color Emoji
+family of fonts which are high-quality pure *bitmapped* fonts suitable
+for rendering the extraordinarily popular emojis. Currently, for
+Debian Testing at least, pango/fontconfig chooses this font over
+suitable outline alternatives (likely because of that emoji
+popularity), and there doesn't seem to be any way to overcome this
+problem other than to remove the Noto Color Emoji font package, wait
+for an outline version of that family of fonts to become available, or
+(to express a really bad alternative) to configure fontconfig in one
+way when using libLASi and another way when desiring emoji's for text
+transmissions.
+
+Also, pango/freetype does not appear to have any programming method to
+force outline fonts to be chosen. So going forward the plan is to
+change libLASi to substitute blank glyphs for all glyphs in a
+PangoItem where an error occurs (e.g., due to missing glyphs or a pure
+bitmap font being chosen by pango for the PangoItem). (Note a pango
+item is associated with a sub-block of text that can be rendered with
+a single font face, i.e., a group of fonts constrained to have the
+same family, weight, slant, stretch and width but possibly varying
+sizes).
+
+To test this situation for the current libLASi, I have inserted in this
+commit the test string
+
+"Unicode U+2648 ARIES (twice): ♈♈"
+
+where it turns out that pango currently selects the completely
+unsuitable (from the libLASi perspective) pure bitmap font "Noto Color
+Emoji" to represent those Aries symbols. (This issue with the Aries
+symbol was first discovered by PLplot comprehensive testing of the
+psttf device driver which depends on libLASi.)
+
+In addition, I have taken this opportunity to move from the "Arial"
+font to the more generic "serif" font which presumably gives
+fontconfig the same or even more freedom to choose the best font to
+render a particular glyph. And I have also changed all test strings
+being rendered in this example to ones that describe themselves in
+more detail, e.g.,
+
+"Unicode U+0802: ࠂ"
+
+was replaced by
+
+"Unicode U+0802 SAMARITAN LETTER GAMAN: ࠂ"
+
+Tested by: Alan W. Irwin <ai...@us...> on Linux
+(Debian Testing) by configuring LASi (using the Debian Testing system
+version (3.13.2) of cmake), building the "all" target, and running
+ctest --verbose. The result for this commit of the "Missing Glyphs"
+example was as follows:
+
+[...]
+test 1
+ Start 1: example0
+
+1: Test command: /home/software/lasi_svn/HEAD/build_dir/examples/example0 "example0.ps"
+1: Test timeout computed to be: 9.99988e+06
+1: Error returned from FT_Load_Glyph
+1/3 Test #1: example0 .........................***Failed 0.08 sec
+[...]
+
+A test with the previous version of this example produces no such
+errors which confirms the new version of this example is a more
+stringent test of libLASi. N.B. this ctest error will continue until
+the libLASi library can be changed as discussed above.
+
+
------------------------------------------------------------------------
-r182 | airwin | 2014-04-27 15:27:37 -0700 (Sun, 27 Apr 2014) | 13 lines
+r209 | airwin | 2019-01-22 15:52:19 -0800 (Tue, 22 Jan 2019) | 27 lines
Changed paths:
- M /trunk/include/LASi.h
M /trunk/src/drawGlyph.cpp
- M /trunk/src/drawGlyph.h
- M /trunk/src/glyphMgr.cpp
- M /trunk/src/glyphMgr.h
- M /trunk/src/util.cpp
- M /trunk/src/util.h
+ M /trunk/src/psDoc.cpp
-Include Freetype headers in recommended way. This change should fix
-<https://sourceforge.net/p/lasi/bugs/2/>. The change goes a bit
-beyond the macports patch for the problem linked in that bug report
-which was incomplete. (I searched for all occurrences of #include and
-freetype in the code base and changed to the standard form.)
+Replace deprecated lower-case variants of Freetype macro constants with preferred upper-case form
-Tested on Linux with Freetype version 2.4.9 which implies this change
-does not disrupt anything for that Freetype version. A further test
-for Freetype version 2.5.1 (which previously could not be used with
-libLASi because of the non-standard #includes in the old version
-of that code) has been requested.
+That is change libLASi references to ft_glyph_bbox_unscaled and
+ft_glyph_format_outline with FT_GLYPH_BBOX_UNSCALED and
+FT_GLYPH_FORMAT_OUTLINE.
+Tested by: Alan W. Irwin <ai...@us...> on Linux
+(Debian Testing) by configuring libLASi with the system version (3.13.2) of
+cmake and building the libLASi library (with "make LASi") without
+build errors.
-------------------------------------------------------------------------
-r181 | airwin | 2014-04-27 14:33:38 -0700 (Sun, 27 Apr 2014) | 2 lines
-Changed paths:
- M /trunk/cmake/modules/instdirs.cmake
+Note the above deprecation of the lower-case form of the macro
+constants was only noted by chance in documentation, and the actual
+libLASi build continues to generate deprecation warnings due to other
+long-standing issues. Those issues (some of which have multiple
+instances) are the following:
-Make all install locations configurable. This fixes <https://sourceforge.net/p/lasi/bugs/3/>.
+* "warning: dynamic exception specifications are deprecated in C++11 [-Wdeprecated]"
+* "warning: ‘PangoContext* pango_ft2_get_context(double, double)’ is deprecated: Use 'pango_font_map_create_context' instead [-Wdeprecated-declarations]"
+
+* "warning: ‘FT_FaceRec_* pango_ft2_font_get_face(PangoFont*)’ is deprecated: Use 'pango_fc_font_lock_face' instead [-Wdeprecated-declarations]"
+
+All of these are beyond my current C++ and pango skill level to fix so
+help with cleaning up these deprecation warnings would be much appreciated!
+
+
------------------------------------------------------------------------
-r180 | airwin | 2014-04-27 14:24:28 -0700 (Sun, 27 Apr 2014) | 2 lines
+r208 | airwin | 2019-01-22 14:34:44 -0800 (Tue, 22 Jan 2019) | 77 lines
Changed paths:
- M /trunk/CMakeLists.txt
+ M /trunk/examples/ComplexTextLayoutExample.cpp
+ M /trunk/examples/MissingGlyphExample.cpp
-Outpu more information (CMake version and system name).
+Add boundary boxes to the "Missing Glyph" and "Complex Text Layout" examples
+This change was straightforward for the "Missing Glyph" case.
+
+For the "Complex Text Layout" case, I implemented some generally
+useful C++ code macros (called LASI_SHOW_AND_UPDATE_BB,
+LASI_SCALED_SHOW_AND_UPDATE_BB, and LASI_ROTATED_SHOW_AND_UPDATE_BB),
+which made it straightforward to handle even complex cases such as
+anamorphic scaling and rotation of text. For example, the
+LASI_ROTATED_SHOW_AND_UPDATE_BB macro includes C++ code to apply the
+rotation matrix to determine the x,y coordinates of the corners of the
+rotated text box and use those corner coordinates to help determine
+the overall bounding box.
+
+In addition, for the "Complex Text Layout" case I reduced the font
+size from 30 to 25 of the "UTHAITHANI IN THAI: อุทัยธานี" section of this
+example to compensate for what appears to be a systematic increase
+over the years (compared to previous screenshots of this example and
+other lines of text in this example) in the font actually determined
+by the Debian testing version of pango when the "Garuda" font is
+specifically requested for this component. A gucharmap experiment
+with requesting this font with the Debian Testing package
+fonts-tlwg-garuda-otf installed for the U+0E2D THAI CHARACTER O ANG
+"อุ" indicates that "Garuda" is the font actually used in this case.
+Which indicates this increase in size we are compensating for in this
+commit is not an artifact of the wrong font being chosen.
+
+Tested by: Alan W. Irwin <ai...@us...> on Linux
+(Debian Testing). In the "Missing Glyph" case the test was a simple
+one (using gv to check the boundary box of the complete eps result).
+But in the "Complex Text Layout" case, I locally reduced the example
+(using #if 0 ... #endif) to individual components and used the simple
+gv test to test the above macros were working correctly for each of
+those individual components and additional significant variations of
+those components.
+
+One such detailed test was for the red-rectangle component. By
+looking at the eps result, I confirmed the resulting high-res boundary
+box was identical with the path of the red rectangle implying that
+applications paying strict attention to that high-res BB would split
+the width of the line. And the low-res BB was slightly (less than one
+point in all cases which is small compared to the width of the line)
+outside the hig-res BB. So a similar conclusion can be drawn for
+those applications paying attention to the low-res BB.
+
+However, note there is a small but significant boundary-box issue with
+the gv PostScript viewing application. The position indicator for the
+app appears to conform to the low-res BB (i.e., it shows no position
+outside that BB), but the white background supplied by that app is not
+aligned properly with that BB. For example, the lower y value for
+that white background is systematically too low (by a significant
+number of points corresponding roughly to the width of the line)
+relative to the BB, and the upper x value is systematically too large
+by a similar amount.
+
+A further detailed test was for the case of anamorphic scaling of text
+for a number of different sequential text segments. In all cases
+(subject to the above minor issues with gv), the bounding box of the
+composite set of all such text segments was calculated properly.
+
+A final detailed test was for the rotated text component where I used
+sequential text rotated by various increments to prove each text
+segment was continuous with the previous one and rotated properly.
+Also, I confirmed for all these different rotation tests (subject to
+the above minor issues with gv), that in all cases (including one that
+had overall rotation angles in all quadrants) the bounding box of the
+composite set of all rotated text segments was calculated properly.
+
+Of course, after all those individual detailed component tests were
+completed, I changed the "Complex Text Layout" example to the present case where each component
+updates if necessary (i.e., if the component BB is larger in any dimension
+than the overall boundary box calculated for previous components) the overall
+bounding box. And a simple gv test shows that entire result looks good
+including an appropriate overall bounding box (subject to the
+above minor issue with gv).
+
+
------------------------------------------------------------------------
-r179 | airwin | 2014-04-27 14:06:49 -0700 (Sun, 27 Apr 2014) | 3 lines
+r207 | airwin | 2019-01-22 11:39:08 -0800 (Tue, 22 Jan 2019) | 9 lines
Changed paths:
- M /trunk/include/LASi.h
+ M /trunk/src/psDoc.cpp
-Rename function prototype argument to be consistent with
-argument name in function definition to quiet doxygen warnings.
+Fix minor boundary box issue
+The low-resolution (integer) boundary box was being calculated by
+taking the floor of all high-resolution (double) boundary box limits.
+This commit changes that to the floor of the high-resolution lower
+limits and the ceil of the high-resolution upper limits so that low
+resolution bounding-box limits are always outside the high-resolution
+limits, but with the difference always less than one point.
+
------------------------------------------------------------------------
-r178 | airwin | 2014-04-27 14:03:14 -0700 (Sun, 27 Apr 2014) | 2 lines
+r206 | airwin | 2019-01-10 18:20:41 -0800 (Thu, 10 Jan 2019) | 26 lines
Changed paths:
M /trunk/Doxyfile.developer
M /trunk/Doxyfile.user
-Use doxygen -u to update these configuration files to doxygen-1.8.1.2.
+Update doxygen configuration files from doxygen version 1.8.1.2 to 1.8.13
-------------------------------------------------------------------------
-r177 | airwin | 2014-04-27 13:57:03 -0700 (Sun, 27 Apr 2014) | 7 lines
-Changed paths:
- M /trunk/examples/MissingGlyphExample.cpp
+These conversions were done using
-Update the missing glyphs example to have better formatted results and
-to include enough variety of glyphs to increase the chances that some
-will be missing. (The whole point of this example, is to make sure
-libLASi does the right thing for missing glyphs, but that purpose
-is denied in case the set of glyphs are all available as proved to be
-the case on Debian for the previous version of this example.)
+doxygen -u Doxyfile.developer
+doxygen -u Doxyfile.user
+Tested by: Alan W. Irwin <ai...@us...> on Linux
+(Debian Testing) by running (from an initially empty build tree and
+with the Debian Testing 3.13.2 version of CMake)
+
+cmake -DCMAKE_INSTALL_PREFIX=/home/software/lasi_svn/install -DBUILD_SHARED_LIBS=ON ../lasi_2019 >& cmake.out
+# To remove previously generated doxygen results in the source tree.
+make clean >& clean.out
+make all >& all.out
+
+with no doxygen build issues other than one @param warning that the
+parameter mapval does not occur in the argument list for
+PostscriptDocument::accrue_dimensions. Since mapval does appear in
+this argument list, this warning can only be explained by some doxygen
+C++ code-parsing failure.
+
+In addition, I skimmed the generated results at doc/developer/html
+and doc/user/html/ with firefox, and all seemed well.
+
+
------------------------------------------------------------------------
-r176 | airwin | 2014-04-27 13:53:47 -0700 (Sun, 27 Apr 2014) | 2 lines
+r205 | airwin | 2019-01-10 17:16:23 -0800 (Thu, 10 Jan 2019) | 24 lines
Changed paths:
M /trunk/CMakeLists.txt
-Update minimum CMake version to 2.8.9.
+Bump (or shove hard in this case) the minimum version of CMake from 2.8.9 to 3.13.2
-------------------------------------------------------------------------
-r175 | airwin | 2014-04-26 12:33:05 -0700 (Sat, 26 Apr 2014) | 3 lines
-Changed paths:
- M /trunk/cmake/modules/pkg-config.cmake
+This change is motivated by the bug fixes in later CMake versions and
+also the much better checking of the build system that occurs for the
+policies automatically used for 3.13.2. That said, it is a tribute to
+the robustness of the current libLASi build system and the backwards
+compatibility of CMake that there were absolutely no build-system
+warnings either before or after this change.
-Drop extranous "}" which seemed to have no effect, but
-CMake-2.8.12.2 warns about it so I am removing it.
+Tested by: Alan W. Irwin <ai...@us...> on Linux
+(Debian Testing) by running (from an initially empty build tree and
+with the Debian Testing 3.13.2 version of CMake)
-------------------------------------------------------------------------
-r174 | andrewross | 2011-09-23 08:11:54 -0700 (Fri, 23 Sep 2011) | 3 lines
-Changed paths:
- M /trunk/debian/changelog
- M /trunk/debian/control
+cmake -DCMAKE_INSTALL_PREFIX=/home/software/lasi_svn/install -DBUILD_SHARED_LIBS=ON ../lasi_2019 >& cmake.out
+make
+ctest
-Update debhelper version dependency to fix lintian warning.
+with no issues other than outdated Doxygen configuration files (which
+will be the subject of the next commit).
+
+
+
------------------------------------------------------------------------
-r173 | andrewross | 2011-09-23 08:06:32 -0700 (Fri, 23 Sep 2011) | 3 lines
+r204 | airwin | 2015-05-20 18:14:08 -0700 (Wed, 20 May 2015) | 45 lines
Changed paths:
- M /trunk/debian/changelog
- M /trunk/debian/control
- D /trunk/debian/liblasi0.install
- A /trunk/debian/liblasi1.install (from /trunk/debian/liblasi0.install:172)
+ M /trunk/src/CMakeLists.txt
-Change library package name to reflect bumped soversion.
+Build system: set target property POSITION_INDEPENDENT_CODE ON for the libLASi library
+This change allows shared libraries from foreign software (e.g.,
+PLplot) to link to the static version of libLASi. The cost of this
+gain is there is a small amount of inefficiency (e.g., the more
+complicated addressing code that apparently occurs on Linux for all
+code compiled with the -fPIC flag) introduced for the static libLASi
+library.
+Tested by Alan W. Irwin <ai...@us...> on Linux
+using the following procedure (which is normally used for testing
+changes to libLASi):
+
+cd /home/software/lasi_svn/HEAD/build_dir
+# Remove build tree and install tree
+rm -rf /home/software/lasi_svn/HEAD/build_dir/* /home/software/lasi_svn/install
+
+# Configure libLASi build, test, and install
+# (Note change from normal procedure where we have specified building
+# a static version of libLASi.)
+cmake -DCMAKE_INSTALL_PREFIX=/home/software/lasi_svn/install \
+-DBUILD_SHARED_LIBS=OFF ../lasi_allura >& cmake.out
+
+# Check results
+less cmake.out
+
+# Build and install
+make -j4 install >& install.out
+
+# Check results
+less install.out
+
+# Test
+ctest
+
+I then followed up with a comprehensive test of PLplot where this
+static libLasi library was fine for the shared library case for that
+build (both with and without dynamic devices). However, under these
+conditions the traditional PLplot static build had some (missing
+stdlib++) difficulties with the mixed Fortran, C++, and C case. This
+is expected and unfortunately there is no easy cure. Therefore some
+static/traditional testing limits are in train to avoid this case for
+future testing.
+
+
------------------------------------------------------------------------
-r172 | airwin | 2011-09-21 21:55:41 -0700 (Wed, 21 Sep 2011) | 2 lines
+r203 | airwin | 2014-07-26 15:31:57 -0700 (Sat, 26 Jul 2014) | 2 lines
Changed paths:
M /trunk/CONCATENATED_README.release
-Prepend release notes for 1.1.1 to keep a historical record of those.
+Prepend the release notes for 1.1.2.
------------------------------------------------------------------------
-r171 | airwin | 2011-09-21 21:53:47 -0700 (Wed, 21 Sep 2011) | 5 lines
+r202 | airwin | 2014-07-26 15:31:31 -0700 (Sat, 26 Jul 2014) | 2 lines
Changed paths:
M /trunk/README.Release_Manager_Cookbook
-Update corresponding to what was done for the release of libLASi-1.1.1
-(which followed what I did for the recent releases of ephcom-2.0.1 and
-ephcom-2.0.2).
+Update instructions to exactly what occurred for the 1.1.2 release.
-
------------------------------------------------------------------------
-r169 | airwin | 2011-09-21 11:44:21 -0700 (Wed, 21 Sep 2011) | 2 lines
+r200 | airwin | 2014-07-26 13:54:34 -0700 (Sat, 26 Jul 2014) | 2 lines
Changed paths:
- M /trunk/ChangeLog
+ M /trunk/ChangeLog.release
-Final (I hope) commit of the ChangeLog prior to the release of 1.1.1.
+Update commit messages for 1.1.2 release cycle.
------------------------------------------------------------------------
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-01-31 07:10:37
|
Revision: 220
http://sourceforge.net/p/lasi/code/220
Author: airwin
Date: 2019-01-31 07:10:35 +0000 (Thu, 31 Jan 2019)
Log Message:
-----------
Update to the lastest version of the instructions for the release manager
This file should reflect the actual commands and actual results of
those commands for this release. And it is up to date in that regard
for what has gone on so far in this release. However, in case there
are a few further tweaks necessary in the description of the commands
in the rest of the release process, then this file should be updated
again to reflect those changes just after the release.
Modified Paths:
--------------
trunk/README.Release_Manager_Cookbook
Modified: trunk/README.Release_Manager_Cookbook
===================================================================
--- trunk/README.Release_Manager_Cookbook 2019-01-30 20:38:40 UTC (rev 219)
+++ trunk/README.Release_Manager_Cookbook 2019-01-31 07:10:35 UTC (rev 220)
@@ -2,124 +2,207 @@
SourceForge.
INDEX
-(1) Finish release-related trunk changes so they will be in the release
-(2) Create and test the release tarball from trunk
-(3) Tag the release
-(4) Create and test the release tarball from the tagged version
-(5) Generate a file release at Sourceforge
-(6) Commit the tagged version
-(7) Publicity for the release announcement
-(8) Immediate preparation for next release cycle
+(1) Create and test a preliminary tarball from trunk
+(2) Finish release-related trunk changes so they will be in the release
+(3) Create and test the release tarball from trunk
+(4) Update ChangeLog and README.Release_Manager_Cookbook
+(5) Tag the release
+(6) Create and test the release tarball from the tagged version
+(7) Generate a file release at Sourceforge
+(8) Commit the tagged version
+(9) Publicity for the release announcement
+(10) Post release tweaking of this file (README.Release_Manager_Cookbook)
(A1) GNU Privacy Guard (gpg).
(A2) Setting the correct date and time on your computer.
+End of INDEX
-(1) Finish release-related trunk changes so they will be in the release
+(1) Create and test a preliminary tarball from trunk
-* set environment variable for version to make directions below more
- generic.
+ Do everything in (3) below just to make sure that the trunk
+ version is in good shape before you do the following final stages
+ of the release process.
-export LASI_VERSION=1.1.2
+(2) Finish release-related trunk changes so they will be in the release
-* Prepare a preliminary version of the ChangeLog file to see what has been
- accomplished since the last release.
+* set environment variable for version to make directions below
+ more generic.
+export LASI_VERSION=1.1.3
+# Should refer to first release in this release cycle, i.e., one after
+# last release for the last release.
+export FIRST_RELEASE_REVISION=r200
+
+* Prepare a preliminary version of the ChangeLog file to see what
+ has been accomplished since the last release.
+
# This makes the BASE used below correct.
svn update
-svn log --revision <FIRST_RELEASE_REVISION>:BASE --verbose >| ChangeLog.release_preliminary
+svn log --revision ${FIRST_RELEASE_REVISION}:BASE --verbose >| ChangeLog.release_preliminary
-where <FIRST_RELEASE_REVISION> stands for the first revision number
-(typically one after the last revision number of the last release) to
-be included in this log. Note the "_preliminary" suffix to
-distinguish this from the final result below which will contain (if
-all goes well in the steps below) a record of all but the last commit
-(of the ChangeLog itself) for this release.
+ Note the "_preliminary" suffix to distinguish this from the final
+ result below which will contain (if all goes well in the steps
+ below) a record of all but the last commit (of the ChangeLog
+ itself) for this release.
-Note the order of the --revision components puts this preliminary version
-in chronological order. But it is traditional for the final version
-to have the result in reverse chronological order (see below).
+ Note the order of the --revision components puts this preliminary
+ version in chronological order. But it is traditional for the
+ final version to have the result in reverse chronological order
+ (see below).
-* Update and commit README and cmake/module/lasi_version.cmake to
- reflect the current version. Also, follow the instructions in this
- file for updating the SOVERSION, the minor number and the patch
- number.
+* Update and commit README and cmake/module/lasi_version.cmake to
+ reflect the current version. Also, follow the instructions in
+ that latter file for updating the SOVERSION, the minor number and
+ the patch number.
-* Check that the version of README.release for the previous release
- has been stored in CONCATENATED_README.release. That step should have been
- done already if you followed the directions below in "Immediate
- preparation for next release cycle" after the previous release.
+* Update and commit the release notes (stored in the README.release
+ file) containing a short overview of the most important changes
+ noted in the ChangeLog.release_preliminary file since the last
+ release.
-* Update and commit the README.release file with a short overview of
- the specific changes noted in the ChangeLog.release_preliminary file
- since the last release.
+* Once completely satisfied with README.release insert it at the
+ start of README.cumulated release to keep a historical record in
+ reverse chronological order of the notes for all releases in that
+ file. From now on, any further tweaks to README.release should
+ be mirrored in README.cumulated release which is why this
+ insertion step should be delayed until the release manager is
+ completely satisfied with README.release.
-* Check that all local changes are in the repository so they will be
- reflected in the ChangeLog, tagged version of the release, and
- release tarball.
+* Check that all local changes (other than this file,
+ README.Release_Manager_Cookbook, and ChangeLog) are in the
+ repository so they will be reflected in the ChangeLog, tagged
+ version of the release, and release tarball.
svn status
-* Prepare a (hopefully) final version of the ChangeLog file and commit it.
+(3) Create and test the release tarball from trunk
-svn update
-svn log --revision BASE:<LAST_RELEASE_REVISION> --verbose >| ChangeLog.preliminary
-mv ChangeLog.preliminary ChangeLog.release
-svn commit
+* Do the usual cmake and make in the build tree to build the user
+ and developer configurations of the Doxygen documentation in the
+ source tree. For example,
-(2) Create and test the release tarball from trunk
+cd /home/software/lasi_svn/HEAD/build_dir
+# In case this not set.
+LASI_VERSION= 1.1.3
+time (rm -rf /home/software/lasi_svn/HEAD/build_dir/* ~/lasi_svn/install; env PATH="/usr/bin:$PATH" cmake -DCMAKE_INSTALL_PREFIX=/home/software/lasi_svn/install -DBUILD_SHARED_LIBS=ON ../lasi_2019 >& cmake.out)
+make -j16 all >& all.out
-* Do the usual cmake and make in the build tree to build the user and
- developer configurations of the Doxygen documentation in the source
- tree. Then run
+ Then build a preliminary version of the release tarball
make package_source
-* Check the generated tarball by checking its table of contents as follows:
+* Check that generated tarball by checking its table of contents as follows:
tar ztvf libLASi-$LASI_VERSION.tar.gz |sed "s? *? ?g" |cut --delimiter=" " --fields="6-" |less
-* Unpack and test that tarball as follows:
+* Unpack that tarball:
tar zxf libLASi-$LASI_VERSION.tar.gz
+
+* Test that tarball with shared build, install, and shared examples build
+
mkdir tarball_build_dir
cd tarball_build_dir
build_tree_dir=$(pwd)
-cmake -DCMAKE_INSTALL_PREFIX=../tarball_install \
-../libLASi-$LASI_VERSION >& cmake.out
-make >& make.out
-ctest --output-log ctest.out
-# Inspect results...
-gv examples/example0.ps
-gv examples/example1.ps
-gv examples/example2.ps
+/usr/bin/cmake -DCMAKE_INSTALL_PREFIX=../tarball_install -DBUILD_SHARED_LIBS=ON ../libLASi-$LASI_VERSION >& cmake.out
+make -j16 >& make.out
+# Inspect EPS results. Note a white background has to be imposed because
+# these results have no background. So by default the background would be a checkerboard
+# imposed by pqiv if this --background-pattern option was not used.
-make install >& make_install.out
+# Inspect same results converted (with opaque white background added) to PNG format
+# by inkscape.
+
+for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
+ pqiv -i --background-pattern=white examples/$CORE_NAME.eps
+ pqiv -i examples/$CORE_NAME.png
+done
+
+# ldd and valgrind tests of the examples including comparisons of the
+# results generated with the previous results. Note, that 2>&1
+# redirects stderr to *current" stdout (which defaults to pipe),
+# test.eps afterwards means PostScript output goes directly to that
+# file rather than stdout (so nothing more is emitted to stdout), and
+# >| test.eps afterwards means PostScript output goes to stdout (but
+# not stderr) and stdout then overwrites whatever was in test.eps
+# before.
+
+for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
+ ldd -r examples/$CORE_NAME 2>&1 | less
+ valgrind examples/$CORE_NAME 2>&1 test.eps | less
+ cmp test.eps examples/$CORE_NAME.eps
+ valgrind examples/$CORE_NAME 2>&1 >| test.eps | less
+ cmp test.eps examples/$CORE_NAME.eps
+done
+
+# Run ctest
+/usr/bin/ctest -j16 --output-log >| ctest.out
+# Compare ctest results with above make results.
+for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
+ cmp examples/ctest_examples_output_dir/$CORE_NAME.eps examples/$CORE_NAME.eps
+done
+
+make -j16 install >& make_install.out
cd ../tarball_install/share/lasi$LASI_VERSION/examples
-make >& make.out
-# Compare to build-tree versions.
-diff example0.ps $build_tree_dir/examples
-diff example1.ps $build_tree_dir/examples
-diff example2.ps $build_tree_dir/examples
+make -j16 >& make.out
-If trunk changes are necessary, do those, commit
- them, then re-create the ChangeLog as above.
+for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
+ ldd -r $CORE_NAME 2>&1 | less
+ cmp $CORE_NAME.eps $build_tree_dir/examples/$CORE_NAME.eps
+ valgrind ./$CORE_NAME 2>&1 test.eps | less
+ cmp test.eps $CORE_NAME.eps
+ valgrind ./$CORE_NAME 2>&1 >| test.eps | less
+ cmp test.eps $CORE_NAME.eps
+done
-(3) Tag the release
+* Test that tarball with static build, install, and static examples build
-Based on suggestions in the svn manual, the libLASi svn archive is configured
-as follows:
+# Repeat all the prior test steps starting with removing prior test results with
+cd $build_tree_dir/..
+rm -rf tarball_*
+
+# Then follow with all the above steps starting with
+
+mkdir tarball_build_dir
+[...]
+
+# but with cmake option -DBUILD_SHARED_LIBS=ON replaced by -DBUILD_SHARED_LIBS=OFF
+
+ If these tests reveal that trunk changes are necessary, do those, commit
+them, and retest them.
+
+(4) Update ChangeLog and README.Release_Manager_Cookbook
+
+* Update this file (README.Release_Manager_Cookbook) as much as
+ possible concerning what has been done to complete this release
+ and commit that result. However, if some subsequent deviations
+ occur from the instructions in this cookbook then this file
+ should also be tweaked after the release (see (10)).
+svn commit README.Release_Manager_Cookbook
+
+* Prepare a (hopefully) final version of the ChangeLog file and commit it.
+svn update
+svn log --revision BASE:${LAST_RELEASE_REVISION} --verbose >| ChangeLog.preliminary
+mv ChangeLog.preliminary ChangeLog.release
+svn commit ChangeLog.release
+
+(5) Tag the release
+
+ Based on suggestions in the svn manual, the libLASi svn archive
+ is configured as follows:
+
branches/
tags/
trunk/
-For the release, you will be creating (and eventually committing) what
-is essentially a branch of libLASi that is a snapshot record of that
-subproject at the time of the release. This branch will be located in
-the /tags directory and should follow the naming convention
-tags/$LASI_VERSION although prior releases used a different naming
-convention based on CVS (!) requirements.
+ For the release, you will be creating (and eventually committing)
+ what is essentially a branch of libLASi that is a snapshot record
+ of that subproject at the time of the release. This branch will
+ be located in the /tags directory and should follow the naming
+ convention tags/$LASI_VERSION although prior releases used a
+ different naming convention based on CVS (!) requirements.
#ONE TIME ONLY
# The easiest way to get started is to check out the _entire_ lasi svn
@@ -129,10 +212,10 @@
#ONE TIME ONLY completed
-If you already have this directory, you will need to make sure that
-all your commits (probably in a different local directory) have
-been done (see above) and that lasi_complete
-is up to date with those commits.
+ If you already have this directory, you will need to make sure
+ that all your commits (probably in a different local directory)
+ have been done (see above) and that lasi_complete is up to date
+ with those commits.
cd lasi_allura_complete
svn update
@@ -140,48 +223,85 @@
# Create and commit release tag of lasi
svn copy trunk tags/$LASI_VERSION
-(4) Create and test the release tarball from the tagged version
+(6) Create and test the release tarball from the tagged version
-Do exactly the same as (2), but for tagged source code in tags/$LASI_VERSION
+ Do exactly the same as (3), but for tagged source code in
+ tags/$LASI_VERSION
-In the event that problems are found in the tarball generated from the
-tagged version during the release process, corrections should be made
-to trunk/, the ChangeLog.release file recreated and committed (see
-instructions above). Then merge the trunk version into the tags as
-follows:
+ In the (unlikely event that problems are found in the tarball
+ generated from the tagged version during the release process,
+ corrections should be made to trunk/, the ChangeLog.release file
+ recreated and committed (see instructions above). Then merge the
+ trunk version into the tags as follows:
cd tags/$LASI_VERSION
svn merge -r A:B /path/to/trunk
-Where A and B specify the range of revisions in trunk to be applied
-to tags/$LASI_VERSION in the merge process. These can be determined by commit
-messages.
+ Where A and B specify the range of revisions in trunk to be
+ applied to tags/$LASI_VERSION in the merge process. These can be
+ determined by commit messages.
-(5) Generate a file release at Sourceforge
+(7) Generate a file release at Sourceforge
-A list of your GPG keys can be obtained using the command "gpg --list-keys".
+ A list of your GPG keys can be obtained using the command "gpg --list-keys <first name>"
+ where <first name> is the first name you used when creating your gpg key. The result of
+ that command for the current release manager (AWI) is
-Sign the release with your libLASi Release Manager gpg key:
+pub rsa2048 2011-08-19 [SC] [expires: 2021-12-12]
+ A7CED6D2D4903103FCDDFC1E418B8FC4BB159E92
+uid [ultimate] Alan W. Irwin (Time Ephemerides key) <ai...@us...>
+uid [ultimate] Alan W. Irwin (libLASi key) <ai...@us...>
+uid [ultimate] Alan W. Irwin (FreeEOS key) <ai...@us...>
+uid [ultimate] Alan W. Irwin (PLplot key) <ai...@us...>
+
+ The A7CED6D2D4903103FCDDFC1E418B8FC4BB159E92 field above can be used for key signings,
+ but more conveniently its last 8 characters can be used for that purpose, e.g.,
+ BB159E92
+
+ Also, a new curveball thrown by the Debian Testing version of gpg
+ is you must identify the tty you are using with, e.g.,
+
+export GPG_TTY=$(tty)
+
+ (see remarks at
+ <https://www.elliotblackburn.com/importing-pgp-keys-from-keybase-into-gpg/>)
+
+ Otherwise, in my experience, gpg will refuse to sign the tag and
+ you will get the error:
+
+error: gpg failed to sign the data
+error: unable to sign the tag
+
+ But with the above trick, the following command just worked.
+
gpg --default-key BB159E92 --detach-sign --armor libLASi-$LASI_VERSION.tar.gz
-where BB159E92 is the RSA key ID of my key. N.B. it appears there is
-no gpg model for signing with a particular user id. So the signature
-verification below will have all UID's.
+ where BB159E92 is the last 8 characters of the full key
+ identification above and is sufficient to identify the public key
+ for Alan W. Irwin as taken from the above key list. N.B. it
+ appears there is no gpg model for signing with a particular user
+ id. So the signature verification below will have all UID's.
-Then verify that result:
+ Then verify that result:
-software@raven> gpg --verify libLASi-$LASI_VERSION.tar.gz.asc
-gpg: Signature made Wed 21 Sep 2011 01:36:14 PM PDT using RSA key ID BB159E92
-gpg: Good signature from "Alan W. Irwin (Time Ephemerides key) <ai...@us...>"
-gpg: aka "Alan W. Irwin (libLASi key) <ai...@us...>"
-gpg: aka "Alan W. Irwin (FreeEOS key) <ai...@us...>"
+gpg --verify libLASi-$LASI_VERSION.tar.gz.asc
-cp the results to a more permanent location:
+ where the output of that commmand should be similar to
+gpg: assuming signed data in 'libLASi-1.1.3.tar.gz'
+gpg: Signature made Wed 30 Jan 2019 10:58:19 PM PST
+gpg: using RSA key A7CED6D2D4903103FCDDFC1E418B8FC4BB159E92
+gpg: Good signature from "Alan W. Irwin (Time Ephemerides key) <ai...@us...>" [ultimate]
+gpg: aka "Alan W. Irwin (libLASi key) <ai...@us...>" [ultimate]
+gpg: aka "Alan W. Irwin (FreeEOS key) <ai...@us...>" [ultimate]
+gpg: aka "Alan W. Irwin (PLplot key) <ai...@us...>" [ultimate]
+
+ Copy the results to a more permanent location:
+
cp libLASi-$LASI_VERSION.tar.gz* /home/software/lasi_svn/HEAD/export
-Prepare a temporary file called README.release that
-concatenates README.release and ChangeLog.release.
+ Prepare a temporary file called README.release that concatenates
+ README.release and ChangeLog.release.
cd lasi_allura_complete/tags/$LASI_VERSION
@@ -192,7 +312,7 @@
" | \
cat README.release - ChangeLog.release >| /tmp/README.release
-Upload the release to SourceForge using sftp
+ Upload the release to SourceForge using sftp
cd /home/software/lasi_svn/HEAD/export
@@ -207,8 +327,8 @@
quit
EOF
-Demonstrate with irwin account that can download these uploaded results
-and verify them:
+ Demonstrate with irwin account that can download these uploaded
+ results and verify them:
SITE=https://sourceforge.net/projects/lasi/files/lasi/"$LASI_VERSION Source"
wget "$SITE/libLASi-$LASI_VERSION.tar.gz.asc"
@@ -221,46 +341,45 @@
diff libLASi-$LASI_VERSION.tar.gz.asc /home/software/lasi_svn/HEAD/export
diff libLASi-$LASI_VERSION.tar.gz /home/software/lasi_svn/HEAD/export
-Login to sf.net
+ Login to sf.net
-Go to the file-release area at
-sf.net/projects/lasi/files/lasi/<LASI_VERSION> Source
+ Go to the file-release area at
+ sf.net/projects/lasi/files/lasi/<LASI_VERSION> Source
-(where <LASI_VERSION> stands for whatever you have set LASI_VERSION to above)
+ (where <LASI_VERSION> stands for whatever you have set
+ LASI_VERSION to above)
-Click on the "i" or "info" button to mark the tar.gz file as the default
-file to download for all platforms.
+ Click on the "i" or "info" button to mark the tar.gz file as the
+ default file to download for all platforms.
-(6) Commit the tagged version
+(8) Commit the tagged version
cd lasi_allura_complete
svn commit tags/$LASI_VERSION
-(7) Publicity for the release announcement
+(9) Publicity for the release announcement
-Create a news item for the Release:
-Click on the news menu item and then click on
+ Create a news item for the Release:
+ Click on the news menu item and then click on
-Click "Submit" for the news feature.
+ Click "Submit" for the news feature.
-Experience shows you should edit a temporary file with no line feeds
-except at paragraph breaks, and all URL's should be mentioned as-is
-with no html formatting. Then cat that file, and cut and paste the
-result to the form generated above. SF then turns that result into
-something readable as HTML with the URL's turned into clickable links.
+ Experience shows you should edit a temporary file with no line
+ feeds except at paragraph breaks, and all URL's should be
+ mentioned as-is with no html formatting. Then cat that file, and
+ cut and paste the result to the form generated above. SF then
+ turns that result into something readable as HTML with the URL's
+ turned into clickable links.
-Other publicity:
+ Other publicity:
-Barbara: linuxtoday.com, lwn.net, lxer.com
+ Barbara: linuxtoday.com, lwn.net, lxer.com
-(8) Immediate preparation for the next release cycle
+(10) Post release tweaking of this file (README.Release_Manager_Cookbook)
- a. Insert README.release for the latest release at the start of
- CONCATENATED_README.release to keep a historical record in
- reverse chronological order of the notes for all releases in that
- file.
+ This only needs to be done if the actual procedure followed for
+ the release differed in any detail from the previously updated
+ instructions in this file.
- b. Leave the README.release file as is until ready to prepare for the next release.
-
DONE! :-)
--- Appendix ---
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-01-30 20:38:43
|
Revision: 219
http://sourceforge.net/p/lasi/code/219
Author: airwin
Date: 2019-01-30 20:38:40 +0000 (Wed, 30 Jan 2019)
Log Message:
-----------
Finalize release notes for the forthcoming release of libLASi-1.1.3
As part of this change, I have prepended README.release into
README.cumulated_release so if there are any added tweaks after this
before the libLASi-1.1.3 release both README.release and
README.cumulated_release should be tweaked in the same way.
Modified Paths:
--------------
trunk/README.cumulated_release
trunk/README.release
Modified: trunk/README.cumulated_release
===================================================================
--- trunk/README.cumulated_release 2019-01-30 06:26:05 UTC (rev 218)
+++ trunk/README.cumulated_release 2019-01-30 20:38:40 UTC (rev 219)
@@ -1,3 +1,264 @@
+libLASi Release 1.1.3
+~~~~~~~~~~~~~~~~~~~~~
+This is a maintenance release of libLASi that reflect the ongoing
+efforts of the libLASi developers to respond to bug reports for this
+stable and convenient library for creating PostScript documents that
+can contain characters from any of the script and symbol blocks
+supported in Unicode and by the Pango layout engine.
+
+If you encounter a problem with libLASi, then please send a bug report to
+the libLASi developers via the lasi-devel mailing list described at
+http://lists.sourceforge.net/lists/listinfo/lasi-devel.
+
+Please see the license under which this software is distributed (LGPL), and
+the disclaimer of all warranties, given in the COPYING.LIB file.
+
+INDEX
+
+1. OFFICIAL NOTICES FOR USERS
+
+1.1 CMake version compatibility
+1.2 Backwards-incompatible libLASi API changes
+1.3 Need help getting rid of deprecation build warnings
+
+2. Changes relative to our previous release (version 1.1.2) in decreasing order of importance
+
+2.1 Improve libLASi's response when pango/fontconfig chooses pure bitmapped fonts
+2.2 Make glyph names have a one-to-one relationship with glyphs
+2.3 Set target property POSITION_INDEPENDENT_CODE ON for the libLASi library
+2.4 Make "MissingGlyphExample" a more stringent test of font or glyph issues for libLASi
+2.5 Replace deprecated lower-case variants of Freetype macro constants with preferred upper-case form
+2.6 Add bounding boxes to the "MissingGlyphExample" and "ComplexTextLayoutExample" examples
+2.7 Rename example applications and results using consistent and descriptive core names
+2.8 Fix low-resolution boundary box issue
+2.9 Update doxygen configuration files from doxygen version 1.8.1.2 to 1.8.13
+2.10 Change the minimum version of CMake from 2.8.9 to 3.13.2
+
+3. Testing of this release.
+
+END of INDEX
+
+1. OFFICIAL NOTICES FOR USERS
+
+1.1 CMake version compatibility
+
+ Our build system is implemented using CMake. The minimum version
+ of CMake we allow is 3.13.2 on all platforms. That version is the
+ one we have used to test this release of libLASi (see Section 3
+ below). However, if you try later CMake versions as they are
+ released during the life of this libLASi release, our build system
+ will likely continue to work well because CMake has an excellent
+ reputation for preserving backwards compatibility.
+
+1.2 Backwards-incompatible libLASi API changes
+
+ The bug fixes in this release required backwards-incompatible
+ changes to the libLASi API (a change in the argument list of the
+ PostscriptDocument::GlyphId::GlyphId protected method that is
+ designed for internal use only and the addition of the
+ PostscriptDocument::PangoItem_do protected method that is also
+ designed for internal use only). Therefore, the SOVERSION for
+ libLASi has been bumped from 1 to 2 to force source code that
+ depends on this library (e.g., the PLplot psttf device driver) to
+ be recompiled. However, such source code will not require changes
+ to adjust to this backwards-incompatible change in the libLASi
+ API.
+
+1.3 Need help getting rid of deprecation build warnings
+
+This release has deprecation warning build issues which are
+
+* "warning: dynamic exception specifications are deprecated in C++11 [-Wdeprecated]"
+
+* "warning: ‘PangoContext* pango_ft2_get_context(double, double)’ is deprecated: Use 'pango_font_map_create_context' instead [-Wdeprecated-declarations]"
+
+* "warning: ‘FT_FaceRec_* pango_ft2_font_get_face(PangoFont*)’ is deprecated: Use 'pango_fc_font_lock_face' instead [-Wdeprecated-declarations]"
+
+All of these are beyond my current C++ and pango skill level to fix so
+help with cleaning up any of these deprecation build warnings messages
+would be much appreciated!
+
+2. Changes relative to our previous release (version 1.1.2) in decreasing order of importance
+
+2.1 Improve libLASi's response when pango/fontconfig chooses pure bitmapped fonts
+
+ This change was the primary motivation for this release.
+
+ Previous to this change when pango chose the popular Noto Color
+ Emoji font to help render the Aries glyph, libLASi threw an error
+ and aborted since such pure bitmap fonts are not suitable for
+ libLASi's outline font needs. Such a response completely stops
+ PLplot tests when PLplot standard example 7 attempts to render an
+ Aries glyph with either the psttf or psttfc devices. So this
+ previous response was completely unacceptable, and the fix for it
+ is important.
+
+ This change fixes that previous response by replacing all glyphs
+ for a PangoItem where pango chooses a non-outline font with the
+ default glyph used to represent missing glyphs. Of course, a
+ much better procedure would be to request pango to limit its
+ choices to outline fonts, but as far as I know there is no method
+ for doing that (outside of having one fontconfig configuration
+ for libLASi use and another for all other situations), and, in
+ any case, the present workaround is "good enough for now" because
+ pure bitmap fonts are rare (for example, it is possible that Noto
+ Color Emoji in the future may become available in the outline
+ form generally preferred for modern fonts), and Pango/fontconfig
+ chooses such pure bitmap fonts for relatively few glyphs.
+
+2.2 Make glyph names have a one-to-one relationship with glyphs
+
+ This change is an important motivation for this release.
+
+ This change is confined to the case when fonts don't follow
+ standards so that they cannot be interrogated for the glyph name,
+ i.e., FT_HAS_GLYPH_NAMES(face) is false. Before this change,
+ libLASi computed its own unique glyph name using the template
+
+LASi_glyph_<unique number>
+
+ where <unique number> was incremented whenever the code decided a
+ new glyph had been encountered. This scheme had the following
+ disadvantages:
+
+* The logic for deciding when new glyphs were encountered was
+ faulty with the result that the same glyph would have multiple
+ glyph names and therefore redundant glyph information stored in
+ the PostScript header whenever, for example, both
+
+doc.osBody() << show(string)
+
+ and
+
+doc.get_dimensions(string,&lineSpacing,&xAdvance,&yMinimum,&yMaximum);
+
+ (a common combination when bounding boxes are being determined)
+ were called for the same string.
+
+* The glyph name depended on the order with which strings were
+ processed with the result that PLplot octave results (where all
+ standard octave examples were run from one instance of octave)
+ had different glyph names than PLplot C results (where all
+ standard C examples were run using separate executables for each
+ example).
+
+* The glyph names were completely meaningless to humans reading
+ through the PostScript code in the results.
+
+ All these issues were addressed by borrowing a static function
+ from PLplot (whose LGPL'd code allows us to do that) to calculate
+ the UCS4 (32-bit unsigned) encoding of unicode for each glyph
+ encountered in the UTF-8 encoded input string. With the result
+ that the glyph names now have the template
+
+LASi_glyph_U+<UCS4 hexadecimal code for the glyph>
+
+ where by definition the UCS4 hexadecimal code completely
+ identifies the glyph in a unique way which is easy to look up,
+ e.g., with the gucharmap application.
+
+ The net result of this change is the PLplot test_diff_device
+ target for the case when -DPLPLOT_TEST_DEVICE=psttfc now gives a
+ clean report for the first time ever. So this change is an
+ important one.
+
+2.3 Set target property POSITION_INDEPENDENT_CODE ON for the libLASi library
+
+ This change is an important motivation for this release.
+
+ This bug fix allows the static version of libLASi to be used with
+ shared builds of external software that depend on libLASi such as
+ the PLplot psttf device driver.
+
+2.4 Make "MissingGlyphExample" a more stringent test of font or glyph issues for libLASi
+
+ The most important change here was to add
+
+"Unicode U+2648 ARIES (twice): ♈♈"
+"Embedded newlines a\\nb\\nc: a\nb\nc"
+
+ to the strings that are rendered to PostScript by this example.
+
+ For the first of these, the Debian Buster version of pango
+ (likely due to the default fontconfig configuration) decides to
+ use the popular Noto Color Emoji font to render the Aries glyphs,
+ but the problem for that font is it is a pure bitmap font with no
+ outline information that is required by libLASi. So this line
+ tests the response of libLASi to this situation.
+
+ For the second of these the linefeed "\n" glyph is a non-printing
+ glyph. It appears for all such glyphs there is a "missing glyph"
+ issue so regardless of future font improvements this line seems
+ to be a reliable way to trigger missing-glyph issues to test the
+ response of libLASi to this situation.
+
+2.5 Replace deprecated lower-case variants of Freetype macro constants with preferred upper-case form
+
+2.6 Add bounding boxes to the "MissingGlyphExample" and "ComplexTextLayoutExample" examples
+
+ The resulting MissingGlyphExample.eps and
+ ComplexTextLayoutExample.eps files join SimpleLASiExample.eps as
+ being properly formatted EPS (Encapsulated PostScript) files.
+
+ Note also that for the "Complex Text Layout" case, I implemented
+ some generally useful C++ code macros (called
+ LASI_SHOW_AND_UPDATE_BB, LASI_SCALED_SHOW_AND_UPDATE_BB, and
+ LASI_ROTATED_SHOW_AND_UPDATE_BB), which made it straightforward
+ to handle even complex cases such as determining the bounding box
+ of text that has undergone anamorphic scaling or rotation. For
+ example, the LASI_ROTATED_SHOW_AND_UPDATE_BB macro includes C++
+ code to apply the rotation matrix to determine the x,y
+ coordinates of the corners of the rotated text box and use those
+ corner coordinates to help determine the overall bounding box.
+
+2.7 Rename example applications and results using consistent and descriptive core names
+
+ Those core names are " MissingGlyphExample", "SimpleLASiExample",
+ and "ComplexTextLayoutExample". As a result the example source
+ code name is <core name>.cpp, the example application name is
+ <core name> (or <core name>.exe on Windows platforms), the EPS
+ (Encapsulated PostScript) results are named <core name>.eps, and
+ the PNG results (generated from the EPS results using inkscape)
+ are named <core name>.png.
+
+2.8 Fix low-resolution boundary box issue
+
+ As a result of this change the low-res (int) BB (bounding box)
+ limits are calculated from the high-res (double) BB limits with
+ the appropriate combinations of floor and ceil so the low-res
+ limits always lie on or outside (by up to but not including 1
+ point) the high-res limits. Previously this calculation was done
+ incorrectly with floor for all limits.
+
+2.9 Update doxygen configuration files from doxygen version 1.8.1.2 to 1.8.13
+
+ These changes were done in the usual way by running the following
+ commands:
+
+doxygen -u Doxyfile.developer
+doxygen -u Doxyfile.user
+
+2.10 Change the minimum version of CMake from 2.8.9 to 3.13.2
+
+ This change was motivated by the bug fixes in later CMake
+ versions and also the much better checking of the build system
+ that occurs for the policies automatically used for 3.13.2.
+
+3. Testing of this release.
+
+This release has been successfully built and run-tested (following the
+prescription in README.Release_Manager_Cookbook) for both the shared
+and static library case on Linux (Debian Buster) using CMake-3.13.2
+(the minimum allowed version of CMake for libLASi), libpango-1.42.4,
+libcairo-1.16.0, libfreetype-2.9.1, and libfontconfig-2.13.1.
+
+This release has not been tested (yet) on Mac OS X or Windows
+platforms, but we anticipate no difficulties on those platforms since
+previous versions of libLASi have worked well on those platforms. In
+other words, the cross-platform nature of libLASi appears to have been
+well supported by CMake in the past, and we feel that happy state will
+continue with this release as well.
+
libLASi Release 1.1.2
~~~~~~~~~~~~~~~~~~~~~
This is a maintenance release of libLASi that reflect the ongoing
Modified: trunk/README.release
===================================================================
--- trunk/README.release 2019-01-30 06:26:05 UTC (rev 218)
+++ trunk/README.release 2019-01-30 20:38:40 UTC (rev 219)
@@ -1,4 +1,4 @@
-libLASi Release 1.1.2
+libLASi Release 1.1.3
~~~~~~~~~~~~~~~~~~~~~
This is a maintenance release of libLASi that reflect the ongoing
efforts of the libLASi developers to respond to bug reports for this
@@ -15,85 +15,246 @@
INDEX
-1. Changes relative to our previous release (version 1.1.1).
+1. OFFICIAL NOTICES FOR USERS
-2. Testing of this release.
+1.1 CMake version compatibility
+1.2 Backwards-incompatible libLASi API changes
+1.3 Need help getting rid of deprecation build warnings
-1.1 Update of examples/MissingGlyphExample.cpp
-1.2 #include FreeType headers in recommended (by FreeType) way.
-1.3 Make all install locations configurable.
-1.4 Fix FreetypeGlyphMgr::FreetypeGlyphMgr(FT_Glyph glyph) initialization bug.
-1.5 Fix long-standing file repeatability issue.
+2. Changes relative to our previous release (version 1.1.2) in decreasing order of importance
-1.1 Update of examples/MissingGlyphExample.cpp
+2.1 Improve libLASi's response when pango/fontconfig chooses pure bitmapped fonts
+2.2 Make glyph names have a one-to-one relationship with glyphs
+2.3 Set target property POSITION_INDEPENDENT_CODE ON for the libLASi library
+2.4 Make "MissingGlyphExample" a more stringent test of font or glyph issues for libLASi
+2.5 Replace deprecated lower-case variants of Freetype macro constants with preferred upper-case form
+2.6 Add bounding boxes to the "MissingGlyphExample" and "ComplexTextLayoutExample" examples
+2.7 Rename example applications and results using consistent and descriptive core names
+2.8 Fix low-resolution boundary box issue
+2.9 Update doxygen configuration files from doxygen version 1.8.1.2 to 1.8.13
+2.10 Change the minimum version of CMake from 2.8.9 to 3.13.2
-The whole point of this example was to make sure that libLASi
-responded well to missing glyphs, but the example had gotten seriously
-outdated because for modern Linux systems with the normal system
-fonts, the chosen unicode characters were no longer missing! That
-issue has now been addressed by using a larger variety of obscure
-unicode glyphs in the examples based on some glyphs that gucharmap
-says are missing for the particular Debian stable platform where this
-release is being created. At the same time, I took the opportunity to
-improve the look of the PostScript results of this example by
-indicating its purpose and keeping results for the various test
-glyphs separate from each other. The results are good (no build or
-run-time errors, the PostScript results are now self-explanatory, and
-the missing glyphs are indicated by empty boxes).
+3. Testing of this release.
-1.2 #include FreeType headers in recommended (by FreeType) way.
+END of INDEX
-This fixes <https://sourceforge.net/p/lasi/bugs/2/>, does not disrupt
-the previous success with building libLASi against FreeType version
-2.4.9, and for the first time allows libLASi to build against FreeType
-version 2.5.1 and later. So this is a high-impact fix for use of
-libLASi with the latest FreeType versions and is also the fundamental
-motivation for this maintenance release.
+1. OFFICIAL NOTICES FOR USERS
-1.3 Make all install locations configurable.
+1.1 CMake version compatibility
-This fixes <https://sourceforge.net/p/lasi/bugs/3/> and makes it more
-convenient to package libLASi.
+ Our build system is implemented using CMake. The minimum version
+ of CMake we allow is 3.13.2 on all platforms. That version is the
+ one we have used to test this release of libLASi (see Section 3
+ below). However, if you try later CMake versions as they are
+ released during the life of this libLASi release, our build system
+ will likely continue to work well because CMake has an excellent
+ reputation for preserving backwards compatibility.
-1.4 Fix FreetypeGlyphMgr::FreetypeGlyphMgr(FT_Glyph glyph) initialization bug.
+1.2 Backwards-incompatible libLASi API changes
-This fixes <https://sourceforge.net/p/lasi/bugs/4/>. The particular
-method being fixed here is not used in any of our examples, and was
-only caught by compiler warning messages rather than a bug report
-about actual use of this method so this is likely a low-impact
-fix.
+ The bug fixes in this release required backwards-incompatible
+ changes to the libLASi API (a change in the argument list of the
+ PostscriptDocument::GlyphId::GlyphId protected method that is
+ designed for internal use only and the addition of the
+ PostscriptDocument::PangoItem_do protected method that is also
+ designed for internal use only). Therefore, the SOVERSION for
+ libLASi has been bumped from 1 to 2 to force source code that
+ depends on this library (e.g., the PLplot psttf device driver) to
+ be recompiled. However, such source code will not require changes
+ to adjust to this backwards-incompatible change in the libLASi
+ API.
-1.5 Fix long-standing file repeatability issue.
+1.3 Need help getting rid of deprecation build warnings
-This bug <https://sourceforge.net/p/lasi/bugs/5/> was discovered while
-testing a pre-release version of 1.1.2, but apparently also appeared
-in all prior releases of libLASi. The issue was glyphs without a name
-available in the font data were assigned a unique name by libLASi
-using rand, but those unique names were not repeatable from one run of
-an application linked to libLASi to the next (presumably because
-libraries that libLASi depends on were fiddling with the rand seed in
-some threaded way that was not repeatable). An initial fix that used
-rand_r and a unique seed for libLASi solved the issue, but ultimately
-it was decided to solve the issue by using the libLASi assigned names
-LASi_glyph_1, LASi_glyph_2, etc., which should be unique until the
-integer overflow limit is encountered, and which should not name clash
-with glyph names that are included with font data.
+This release has deprecation warning build issues which are
-2. Testing of this release.
+* "warning: dynamic exception specifications are deprecated in C++11 [-Wdeprecated]"
-This release has been successfully build and run tested on Linux using
-(1) libpango-1.30.0, libcairo-1.12.2, and libfreetype-2.4.9 and (2)
-libpango-1.35.0, libcairo-1.12.14, and libfreetype-2.5.3.
+* "warning: ‘PangoContext* pango_ft2_get_context(double, double)’ is deprecated: Use 'pango_font_map_create_context' instead [-Wdeprecated-declarations]"
-Thanks to the kind testing help of Arjen Markus, this release has also
-been successfully build and run tested on Windows using the build
-procedure for that platform given at <http://www.unifont.org/lasi/>
-using the gtk+ all-in-one Windows bundle downloaded from
-<http://www.gtk.org/download/win32.php> which includes
-libpango-1.30.1, libcairo-1.10.2, and libfreetype-2.4.11.
+* "warning: ‘FT_FaceRec_* pango_ft2_font_get_face(PangoFont*)’ is deprecated: Use 'pango_fc_font_lock_face' instead [-Wdeprecated-declarations]"
-Although there has been no specific testing of this release on Mac OS
-X, we do not anticipate any difficulties for that platform since
-previous releases of libLASi (patched for the above freetype header
-issue) have worked fine on that platform according to reports at
-https://sourceforge.net/p/lasi/bugs/2/.
+All of these are beyond my current C++ and pango skill level to fix so
+help with cleaning up any of these deprecation build warnings messages
+would be much appreciated!
+
+2. Changes relative to our previous release (version 1.1.2) in decreasing order of importance
+
+2.1 Improve libLASi's response when pango/fontconfig chooses pure bitmapped fonts
+
+ This change was the primary motivation for this release.
+
+ Previous to this change when pango chose the popular Noto Color
+ Emoji font to help render the Aries glyph, libLASi threw an error
+ and aborted since such pure bitmap fonts are not suitable for
+ libLASi's outline font needs. Such a response completely stops
+ PLplot tests when PLplot standard example 7 attempts to render an
+ Aries glyph with either the psttf or psttfc devices. So this
+ previous response was completely unacceptable, and the fix for it
+ is important.
+
+ This change fixes that previous response by replacing all glyphs
+ for a PangoItem where pango chooses a non-outline font with the
+ default glyph used to represent missing glyphs. Of course, a
+ much better procedure would be to request pango to limit its
+ choices to outline fonts, but as far as I know there is no method
+ for doing that (outside of having one fontconfig configuration
+ for libLASi use and another for all other situations), and, in
+ any case, the present workaround is "good enough for now" because
+ pure bitmap fonts are rare (for example, it is possible that Noto
+ Color Emoji in the future may become available in the outline
+ form generally preferred for modern fonts), and Pango/fontconfig
+ chooses such pure bitmap fonts for relatively few glyphs.
+
+2.2 Make glyph names have a one-to-one relationship with glyphs
+
+ This change is an important motivation for this release.
+
+ This change is confined to the case when fonts don't follow
+ standards so that they cannot be interrogated for the glyph name,
+ i.e., FT_HAS_GLYPH_NAMES(face) is false. Before this change,
+ libLASi computed its own unique glyph name using the template
+
+LASi_glyph_<unique number>
+
+ where <unique number> was incremented whenever the code decided a
+ new glyph had been encountered. This scheme had the following
+ disadvantages:
+
+* The logic for deciding when new glyphs were encountered was
+ faulty with the result that the same glyph would have multiple
+ glyph names and therefore redundant glyph information stored in
+ the PostScript header whenever, for example, both
+
+doc.osBody() << show(string)
+
+ and
+
+doc.get_dimensions(string,&lineSpacing,&xAdvance,&yMinimum,&yMaximum);
+
+ (a common combination when bounding boxes are being determined)
+ were called for the same string.
+
+* The glyph name depended on the order with which strings were
+ processed with the result that PLplot octave results (where all
+ standard octave examples were run from one instance of octave)
+ had different glyph names than PLplot C results (where all
+ standard C examples were run using separate executables for each
+ example).
+
+* The glyph names were completely meaningless to humans reading
+ through the PostScript code in the results.
+
+ All these issues were addressed by borrowing a static function
+ from PLplot (whose LGPL'd code allows us to do that) to calculate
+ the UCS4 (32-bit unsigned) encoding of unicode for each glyph
+ encountered in the UTF-8 encoded input string. With the result
+ that the glyph names now have the template
+
+LASi_glyph_U+<UCS4 hexadecimal code for the glyph>
+
+ where by definition the UCS4 hexadecimal code completely
+ identifies the glyph in a unique way which is easy to look up,
+ e.g., with the gucharmap application.
+
+ The net result of this change is the PLplot test_diff_device
+ target for the case when -DPLPLOT_TEST_DEVICE=psttfc now gives a
+ clean report for the first time ever. So this change is an
+ important one.
+
+2.3 Set target property POSITION_INDEPENDENT_CODE ON for the libLASi library
+
+ This change is an important motivation for this release.
+
+ This bug fix allows the static version of libLASi to be used with
+ shared builds of external software that depend on libLASi such as
+ the PLplot psttf device driver.
+
+2.4 Make "MissingGlyphExample" a more stringent test of font or glyph issues for libLASi
+
+ The most important change here was to add
+
+"Unicode U+2648 ARIES (twice): ♈♈"
+"Embedded newlines a\\nb\\nc: a\nb\nc"
+
+ to the strings that are rendered to PostScript by this example.
+
+ For the first of these, the Debian Buster version of pango
+ (likely due to the default fontconfig configuration) decides to
+ use the popular Noto Color Emoji font to render the Aries glyphs,
+ but the problem for that font is it is a pure bitmap font with no
+ outline information that is required by libLASi. So this line
+ tests the response of libLASi to this situation.
+
+ For the second of these the linefeed "\n" glyph is a non-printing
+ glyph. It appears for all such glyphs there is a "missing glyph"
+ issue so regardless of future font improvements this line seems
+ to be a reliable way to trigger missing-glyph issues to test the
+ response of libLASi to this situation.
+
+2.5 Replace deprecated lower-case variants of Freetype macro constants with preferred upper-case form
+
+2.6 Add bounding boxes to the "MissingGlyphExample" and "ComplexTextLayoutExample" examples
+
+ The resulting MissingGlyphExample.eps and
+ ComplexTextLayoutExample.eps files join SimpleLASiExample.eps as
+ being properly formatted EPS (Encapsulated PostScript) files.
+
+ Note also that for the "Complex Text Layout" case, I implemented
+ some generally useful C++ code macros (called
+ LASI_SHOW_AND_UPDATE_BB, LASI_SCALED_SHOW_AND_UPDATE_BB, and
+ LASI_ROTATED_SHOW_AND_UPDATE_BB), which made it straightforward
+ to handle even complex cases such as determining the bounding box
+ of text that has undergone anamorphic scaling or rotation. For
+ example, the LASI_ROTATED_SHOW_AND_UPDATE_BB macro includes C++
+ code to apply the rotation matrix to determine the x,y
+ coordinates of the corners of the rotated text box and use those
+ corner coordinates to help determine the overall bounding box.
+
+2.7 Rename example applications and results using consistent and descriptive core names
+
+ Those core names are " MissingGlyphExample", "SimpleLASiExample",
+ and "ComplexTextLayoutExample". As a result the example source
+ code name is <core name>.cpp, the example application name is
+ <core name> (or <core name>.exe on Windows platforms), the EPS
+ (Encapsulated PostScript) results are named <core name>.eps, and
+ the PNG results (generated from the EPS results using inkscape)
+ are named <core name>.png.
+
+2.8 Fix low-resolution boundary box issue
+
+ As a result of this change the low-res (int) BB (bounding box)
+ limits are calculated from the high-res (double) BB limits with
+ the appropriate combinations of floor and ceil so the low-res
+ limits always lie on or outside (by up to but not including 1
+ point) the high-res limits. Previously this calculation was done
+ incorrectly with floor for all limits.
+
+2.9 Update doxygen configuration files from doxygen version 1.8.1.2 to 1.8.13
+
+ These changes were done in the usual way by running the following
+ commands:
+
+doxygen -u Doxyfile.developer
+doxygen -u Doxyfile.user
+
+2.10 Change the minimum version of CMake from 2.8.9 to 3.13.2
+
+ This change was motivated by the bug fixes in later CMake
+ versions and also the much better checking of the build system
+ that occurs for the policies automatically used for 3.13.2.
+
+3. Testing of this release.
+
+This release has been successfully built and run-tested (following the
+prescription in README.Release_Manager_Cookbook) for both the shared
+and static library case on Linux (Debian Buster) using CMake-3.13.2
+(the minimum allowed version of CMake for libLASi), libpango-1.42.4,
+libcairo-1.16.0, libfreetype-2.9.1, and libfontconfig-2.13.1.
+
+This release has not been tested (yet) on Mac OS X or Windows
+platforms, but we anticipate no difficulties on those platforms since
+previous versions of libLASi have worked well on those platforms. In
+other words, the cross-platform nature of libLASi appears to have been
+well supported by CMake in the past, and we feel that happy state will
+continue with this release as well.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-01-30 06:26:08
|
Revision: 218
http://sourceforge.net/p/lasi/code/218
Author: airwin
Date: 2019-01-30 06:26:05 +0000 (Wed, 30 Jan 2019)
Log Message:
-----------
Rename CONCATENATED_README.release => README.cumulated_release
This new name for this cumulation of release notes follows how
this file is named in PLplot.
Note, before making this name change I double-checked that
this file contained all recent release notes up to and
including the last (1.1.2) release.
Added Paths:
-----------
trunk/README.cumulated_release
Removed Paths:
-------------
trunk/CONCATENATED_README.release
Deleted: trunk/CONCATENATED_README.release
===================================================================
--- trunk/CONCATENATED_README.release 2019-01-30 03:30:55 UTC (rev 217)
+++ trunk/CONCATENATED_README.release 2019-01-30 06:26:05 UTC (rev 218)
@@ -1,249 +0,0 @@
-libLASi Release 1.1.2
-~~~~~~~~~~~~~~~~~~~~~
-This is a maintenance release of libLASi that reflect the ongoing
-efforts of the libLASi developers to respond to bug reports for this
-stable and convenient library for creating PostScript documents that
-can contain characters from any of the script and symbol blocks
-supported in Unicode and by the Pango layout engine.
-
-If you encounter a problem with libLASi, then please send a bug report to
-the libLASi developers via the lasi-devel mailing list described at
-http://lists.sourceforge.net/lists/listinfo/lasi-devel.
-
-Please see the license under which this software is distributed (LGPL), and
-the disclaimer of all warranties, given in the COPYING.LIB file.
-
-INDEX
-
-1. Changes relative to our previous release (version 1.1.1).
-
-2. Testing of this release.
-
-1.1 Update of examples/MissingGlyphExample.cpp
-1.2 #include FreeType headers in recommended (by FreeType) way.
-1.3 Make all install locations configurable.
-1.4 Fix FreetypeGlyphMgr::FreetypeGlyphMgr(FT_Glyph glyph) initialization bug.
-1.5 Fix long-standing file repeatability issue.
-
-1.1 Update of examples/MissingGlyphExample.cpp
-
-The whole point of this example was to make sure that libLASi
-responded well to missing glyphs, but the example had gotten seriously
-outdated because for modern Linux systems with the normal system
-fonts, the chosen unicode characters were no longer missing! That
-issue has now been addressed by using a larger variety of obscure
-unicode glyphs in the examples based on some glyphs that gucharmap
-says are missing for the particular Debian stable platform where this
-release is being created. At the same time, I took the opportunity to
-improve the look of the PostScript results of this example by
-indicating its purpose and keeping results for the various test
-glyphs separate from each other. The results are good (no build or
-run-time errors, the PostScript results are now self-explanatory, and
-the missing glyphs are indicated by empty boxes).
-
-1.2 #include FreeType headers in recommended (by FreeType) way.
-
-This fixes <https://sourceforge.net/p/lasi/bugs/2/>, does not disrupt
-the previous success with building libLASi against FreeType version
-2.4.9, and for the first time allows libLASi to build against FreeType
-version 2.5.1 and later. So this is a high-impact fix for use of
-libLASi with the latest FreeType versions and is also the fundamental
-motivation for this maintenance release.
-
-1.3 Make all install locations configurable.
-
-This fixes <https://sourceforge.net/p/lasi/bugs/3/> and makes it more
-convenient to package libLASi.
-
-1.4 Fix FreetypeGlyphMgr::FreetypeGlyphMgr(FT_Glyph glyph) initialization bug.
-
-This fixes <https://sourceforge.net/p/lasi/bugs/4/>. The particular
-method being fixed here is not used in any of our examples, and was
-only caught by compiler warning messages rather than a bug report
-about actual use of this method so this is likely a low-impact
-fix.
-
-1.5 Fix long-standing file repeatability issue.
-
-This bug <https://sourceforge.net/p/lasi/bugs/5/> was discovered while
-testing a pre-release version of 1.1.2, but apparently also appeared
-in all prior releases of libLASi. The issue was glyphs without a name
-available in the font data were assigned a unique name by libLASi
-using rand, but those unique names were not repeatable from one run of
-an application linked to libLASi to the next (presumably because
-libraries that libLASi depends on were fiddling with the rand seed in
-some threaded way that was not repeatable). An initial fix that used
-rand_r and a unique seed for libLASi solved the issue, but ultimately
-it was decided to solve the issue by using the libLASi assigned names
-LASi_glyph_1, LASi_glyph_2, etc., which should be unique until the
-integer overflow limit is encountered, and which should not name clash
-with glyph names that are included with font data.
-
-2. Testing of this release.
-
-This release has been successfully build and run tested on Linux using
-(1) libpango-1.30.0, libcairo-1.12.2, and libfreetype-2.4.9 and (2)
-libpango-1.35.0, libcairo-1.12.14, and libfreetype-2.5.3.
-
-Thanks to the kind testing help of Arjen Markus, this release has also
-been successfully build and run tested on Windows using the build
-procedure for that platform given at <http://www.unifont.org/lasi/>
-using the gtk+ all-in-one Windows bundle downloaded from
-<http://www.gtk.org/download/win32.php> which includes
-libpango-1.30.1, libcairo-1.10.2, and libfreetype-2.4.11.
-
-Although there has been no specific testing of this release on Mac OS
-X, we do not anticipate any difficulties for that platform since
-previous releases of libLASi (patched for the above freetype header
-issue) have worked fine on that platform according to reports at
-https://sourceforge.net/p/lasi/bugs/2/.
-
-libLASi Release 1.1.1
-~~~~~~~~~~~~~~~~~~~~~
-This is a stable release of libLASi. It represents the ongoing efforts
-of the libLASi developers to improve the libLASi library for creating
-PostScript documents that can contain characters from any of the
-script and symbol blocks supported in Unicode and by the Pango layout engine.
-
-If you encounter a problem with libLASi, then please send a bug report to
-the libLASI developers via the lasi-devel mailing list described at
-http://lists.sourceforge.net/lists/listinfo/lasi-devel.
-
-Please see the license under which this software is distributed (LGPL), and
-the disclaimer of all warrantees, given in the COPYING.LIB file.
-
-INDEX
-
-1. Changes relative to our previous release (version 1.1.0).
-
-1.1 Make declaration and definition of setFont arguments consistent.
-1.2 Fix alignment of diacritical marks.
-1.3 Build system improvements.
-1.4 Reduction of symbol visibility for gcc.
-
-1.1 Make declaration and definition of setFont arguments consistent.
-
-Thanks to John Ellson's bug report (link failure with Sun's CC - ID:
-2797964) we found out that the arguments of setFont had inconsistent
-const attributes between the declaration in LASi.h and the definition
-in psDoc.cpp. We have now fixed that inconsistency by using John's
-patch to drop the const attribute from the appropriate definition
-arguments.
-
-1.2 Fix alignment of diacritical marks.
-
-Thanks to Yotam Medini for supplying a patch which we have applied to
-correct the positioning of diacritical marks. This change means there
-must be an extra bool applyOffset = false argument to the
-PostscriptDocument::for_each_glyph_do method (see Lasi.h). This
-method is called internally by other libLASi routines with applyOffset
-both true and false depending on circumstances/needs to obtain
-correct offsets for diacritical marks.
-
-This method is also available for external use so this added argument
-is a backwards-incompatible API change requiring rebuilding of
-apps/libraries that use this method, and the soversion of the library
-has been bumped from 0 to 1 consistent with this API change. However,
-this external API change issue is not relevant for the libLASi
-examples that are part of this release and also to the psttf device driver
-for PLplot that depends on libLASi because those applications and device
-driver plug-ins do not call the for_each_glyph_do method.
-
-1.3 Build system improvements.
-
-Our CMake-based build system has been updated to determine pkg-config
-results in a way that is much more useful for CMake. (We simply
-adopted PLplot's method of handling this). The result is that modern
-CMake (tested on CMake-2.6.4 and CMake-2.8.1) warnings about
-inconsistent library handling by Policy CMP0003 are no longer present.
-The minimum version of CMake has been updated from 2.4.5 (!) to 2.6.4.
-
-1.4 Reduction of symbol visibility for gcc.
-
-The infrastructure in LASi.h for exporting symbols for the Windows
-version of this library has been generalized for the gcc-4.x case for
-Unix platforms following the well-tested implementation used for
-the PLplot libraries.
-
-The net effect of this change is that Windows visibility of symbols
-should be unchanged and similarly for Unix _except_ for the case of
-gcc on Unix where the user specifies the gcc -fvisibility=hidden
-option. For that case, the exported symbols are reduced to those
-exported in the Windows case. The difference in results between using
-default visibility and -fvisibility=hidden for gcc-4.x on Unix is the
-number of visible symbols in libLASi.so is reduced from 164 to the 128
-actually needed by users of the library which should give a modest but
-still significant reduction in load times.
-
-libLASi Release 1.1.0
-~~~~~~~~~~~~~~~~~~~~~
-This is a stable release of libLASi. It represents the ongoing efforts
-of the libLASi developers to improve the libLASi library for creating
-PostScript documents that can contain characters from any of the
-script and symbol blocks supported in Unicode and by the Pango layout engine.
-
-If you encounter a problem with libLASi, then please send a bug report to
-the libLASI developers via the lasi-devel mailing list described at
-http://lists.sourceforge.net/lists/listinfo/lasi-devel.
-
-Please see the license under which this software is distributed (LGPL), and
-the disclaimer of all warrantees, given in the COPYING.LIB file.
-
-INDEX
-
-1. Changes relative to our previous release (version 1.0.5p1 for FreeType
-versions less than 2.2 and version 1.0.6 for FreeType 2.2+).
-
-1.1 Replace autotools-based build system with a CMake-based build system.
-1.2 libLASi can now be built both on Unix and Windows.
-1.3 The examples have been reorganized and extended.
-1.4 libLASi is now more robust against font/glyph issues.
-
-
-1.1 Replace autotools-based build system with a CMake-based build system.
-
-The build system is now based on CMake. It has been tested on Linux,
-Mac OS-X and Windows platforms. For directions on how to use CMake to
-build libLASi, please consult http://www.unifont.org/lasi/. In particular,
-the new build system has the capability of detecting the FreeType version
-so the previous split release (1.0.5p1 and 1.0.6) is no longer necessary.
-
-1.2 libLASi can now be built both on Unix and Windows
-
-Our new CMake-based build system allows building libLASi on both Unix
-(Linux, Mac OS X, and proprietary Unices) and Windows (Cygwin, MinGW/MSYS,
-and Microsoft proprietary build environments) platforms. Instructions
-for various platforms have been collected at http://www.unifont.org/lasi/.
-
-1.3 The examples have been reorganized and extended and can now be built
-in both the build tree and install tree.
-
-After running "cmake" (which configures libLASi) and "make" (which builds
-the libLASi library and examples which use that library in the build tree,
-see instructions at http://www.unifont.org/lasi/), you can run ctest in the
-build tree to run the examples. If ctest shows no errors, the PostScript
-results of that test of the libLASi library are collected in the
-examples/example[0-2].ps files in the build tree. See examples/README
-in the source tree for descriptions of these test examples.
-
-The examples can also independently be built and run in the install tree
-created by "make install" as well using
-
-cd $version/share/lasi$lasi_version/examples
-make
-
-where $version is the installation prefix specified as a command-line option
-for the cmake command, and $lasi_version is currently 1.1.0. The make
-command uses pkg-config to specify the correct C++ flags and link flags, and
-users with independent applications that link to libLASi are advised to use
-the same method as well.
-
-1.4 libLASi is now more robust against font/glyph issues.
-
-Missing glyphs are now rendered as a blank rather than being the cause of
-showstopping errors seen in previous libLASi releases.
-
-Some font installations were occasionally returning non-outline glyphs that
-were causing segfault errors for older libLASi versions. The libLASi code
-has now been changed to render a blank for such cases and only attempt to
-render results for the outline glyphs it was designed for.
Copied: trunk/README.cumulated_release (from rev 217, trunk/CONCATENATED_README.release)
===================================================================
--- trunk/README.cumulated_release (rev 0)
+++ trunk/README.cumulated_release 2019-01-30 06:26:05 UTC (rev 218)
@@ -0,0 +1,249 @@
+libLASi Release 1.1.2
+~~~~~~~~~~~~~~~~~~~~~
+This is a maintenance release of libLASi that reflect the ongoing
+efforts of the libLASi developers to respond to bug reports for this
+stable and convenient library for creating PostScript documents that
+can contain characters from any of the script and symbol blocks
+supported in Unicode and by the Pango layout engine.
+
+If you encounter a problem with libLASi, then please send a bug report to
+the libLASi developers via the lasi-devel mailing list described at
+http://lists.sourceforge.net/lists/listinfo/lasi-devel.
+
+Please see the license under which this software is distributed (LGPL), and
+the disclaimer of all warranties, given in the COPYING.LIB file.
+
+INDEX
+
+1. Changes relative to our previous release (version 1.1.1).
+
+2. Testing of this release.
+
+1.1 Update of examples/MissingGlyphExample.cpp
+1.2 #include FreeType headers in recommended (by FreeType) way.
+1.3 Make all install locations configurable.
+1.4 Fix FreetypeGlyphMgr::FreetypeGlyphMgr(FT_Glyph glyph) initialization bug.
+1.5 Fix long-standing file repeatability issue.
+
+1.1 Update of examples/MissingGlyphExample.cpp
+
+The whole point of this example was to make sure that libLASi
+responded well to missing glyphs, but the example had gotten seriously
+outdated because for modern Linux systems with the normal system
+fonts, the chosen unicode characters were no longer missing! That
+issue has now been addressed by using a larger variety of obscure
+unicode glyphs in the examples based on some glyphs that gucharmap
+says are missing for the particular Debian stable platform where this
+release is being created. At the same time, I took the opportunity to
+improve the look of the PostScript results of this example by
+indicating its purpose and keeping results for the various test
+glyphs separate from each other. The results are good (no build or
+run-time errors, the PostScript results are now self-explanatory, and
+the missing glyphs are indicated by empty boxes).
+
+1.2 #include FreeType headers in recommended (by FreeType) way.
+
+This fixes <https://sourceforge.net/p/lasi/bugs/2/>, does not disrupt
+the previous success with building libLASi against FreeType version
+2.4.9, and for the first time allows libLASi to build against FreeType
+version 2.5.1 and later. So this is a high-impact fix for use of
+libLASi with the latest FreeType versions and is also the fundamental
+motivation for this maintenance release.
+
+1.3 Make all install locations configurable.
+
+This fixes <https://sourceforge.net/p/lasi/bugs/3/> and makes it more
+convenient to package libLASi.
+
+1.4 Fix FreetypeGlyphMgr::FreetypeGlyphMgr(FT_Glyph glyph) initialization bug.
+
+This fixes <https://sourceforge.net/p/lasi/bugs/4/>. The particular
+method being fixed here is not used in any of our examples, and was
+only caught by compiler warning messages rather than a bug report
+about actual use of this method so this is likely a low-impact
+fix.
+
+1.5 Fix long-standing file repeatability issue.
+
+This bug <https://sourceforge.net/p/lasi/bugs/5/> was discovered while
+testing a pre-release version of 1.1.2, but apparently also appeared
+in all prior releases of libLASi. The issue was glyphs without a name
+available in the font data were assigned a unique name by libLASi
+using rand, but those unique names were not repeatable from one run of
+an application linked to libLASi to the next (presumably because
+libraries that libLASi depends on were fiddling with the rand seed in
+some threaded way that was not repeatable). An initial fix that used
+rand_r and a unique seed for libLASi solved the issue, but ultimately
+it was decided to solve the issue by using the libLASi assigned names
+LASi_glyph_1, LASi_glyph_2, etc., which should be unique until the
+integer overflow limit is encountered, and which should not name clash
+with glyph names that are included with font data.
+
+2. Testing of this release.
+
+This release has been successfully build and run tested on Linux using
+(1) libpango-1.30.0, libcairo-1.12.2, and libfreetype-2.4.9 and (2)
+libpango-1.35.0, libcairo-1.12.14, and libfreetype-2.5.3.
+
+Thanks to the kind testing help of Arjen Markus, this release has also
+been successfully build and run tested on Windows using the build
+procedure for that platform given at <http://www.unifont.org/lasi/>
+using the gtk+ all-in-one Windows bundle downloaded from
+<http://www.gtk.org/download/win32.php> which includes
+libpango-1.30.1, libcairo-1.10.2, and libfreetype-2.4.11.
+
+Although there has been no specific testing of this release on Mac OS
+X, we do not anticipate any difficulties for that platform since
+previous releases of libLASi (patched for the above freetype header
+issue) have worked fine on that platform according to reports at
+https://sourceforge.net/p/lasi/bugs/2/.
+
+libLASi Release 1.1.1
+~~~~~~~~~~~~~~~~~~~~~
+This is a stable release of libLASi. It represents the ongoing efforts
+of the libLASi developers to improve the libLASi library for creating
+PostScript documents that can contain characters from any of the
+script and symbol blocks supported in Unicode and by the Pango layout engine.
+
+If you encounter a problem with libLASi, then please send a bug report to
+the libLASI developers via the lasi-devel mailing list described at
+http://lists.sourceforge.net/lists/listinfo/lasi-devel.
+
+Please see the license under which this software is distributed (LGPL), and
+the disclaimer of all warrantees, given in the COPYING.LIB file.
+
+INDEX
+
+1. Changes relative to our previous release (version 1.1.0).
+
+1.1 Make declaration and definition of setFont arguments consistent.
+1.2 Fix alignment of diacritical marks.
+1.3 Build system improvements.
+1.4 Reduction of symbol visibility for gcc.
+
+1.1 Make declaration and definition of setFont arguments consistent.
+
+Thanks to John Ellson's bug report (link failure with Sun's CC - ID:
+2797964) we found out that the arguments of setFont had inconsistent
+const attributes between the declaration in LASi.h and the definition
+in psDoc.cpp. We have now fixed that inconsistency by using John's
+patch to drop the const attribute from the appropriate definition
+arguments.
+
+1.2 Fix alignment of diacritical marks.
+
+Thanks to Yotam Medini for supplying a patch which we have applied to
+correct the positioning of diacritical marks. This change means there
+must be an extra bool applyOffset = false argument to the
+PostscriptDocument::for_each_glyph_do method (see Lasi.h). This
+method is called internally by other libLASi routines with applyOffset
+both true and false depending on circumstances/needs to obtain
+correct offsets for diacritical marks.
+
+This method is also available for external use so this added argument
+is a backwards-incompatible API change requiring rebuilding of
+apps/libraries that use this method, and the soversion of the library
+has been bumped from 0 to 1 consistent with this API change. However,
+this external API change issue is not relevant for the libLASi
+examples that are part of this release and also to the psttf device driver
+for PLplot that depends on libLASi because those applications and device
+driver plug-ins do not call the for_each_glyph_do method.
+
+1.3 Build system improvements.
+
+Our CMake-based build system has been updated to determine pkg-config
+results in a way that is much more useful for CMake. (We simply
+adopted PLplot's method of handling this). The result is that modern
+CMake (tested on CMake-2.6.4 and CMake-2.8.1) warnings about
+inconsistent library handling by Policy CMP0003 are no longer present.
+The minimum version of CMake has been updated from 2.4.5 (!) to 2.6.4.
+
+1.4 Reduction of symbol visibility for gcc.
+
+The infrastructure in LASi.h for exporting symbols for the Windows
+version of this library has been generalized for the gcc-4.x case for
+Unix platforms following the well-tested implementation used for
+the PLplot libraries.
+
+The net effect of this change is that Windows visibility of symbols
+should be unchanged and similarly for Unix _except_ for the case of
+gcc on Unix where the user specifies the gcc -fvisibility=hidden
+option. For that case, the exported symbols are reduced to those
+exported in the Windows case. The difference in results between using
+default visibility and -fvisibility=hidden for gcc-4.x on Unix is the
+number of visible symbols in libLASi.so is reduced from 164 to the 128
+actually needed by users of the library which should give a modest but
+still significant reduction in load times.
+
+libLASi Release 1.1.0
+~~~~~~~~~~~~~~~~~~~~~
+This is a stable release of libLASi. It represents the ongoing efforts
+of the libLASi developers to improve the libLASi library for creating
+PostScript documents that can contain characters from any of the
+script and symbol blocks supported in Unicode and by the Pango layout engine.
+
+If you encounter a problem with libLASi, then please send a bug report to
+the libLASI developers via the lasi-devel mailing list described at
+http://lists.sourceforge.net/lists/listinfo/lasi-devel.
+
+Please see the license under which this software is distributed (LGPL), and
+the disclaimer of all warrantees, given in the COPYING.LIB file.
+
+INDEX
+
+1. Changes relative to our previous release (version 1.0.5p1 for FreeType
+versions less than 2.2 and version 1.0.6 for FreeType 2.2+).
+
+1.1 Replace autotools-based build system with a CMake-based build system.
+1.2 libLASi can now be built both on Unix and Windows.
+1.3 The examples have been reorganized and extended.
+1.4 libLASi is now more robust against font/glyph issues.
+
+
+1.1 Replace autotools-based build system with a CMake-based build system.
+
+The build system is now based on CMake. It has been tested on Linux,
+Mac OS-X and Windows platforms. For directions on how to use CMake to
+build libLASi, please consult http://www.unifont.org/lasi/. In particular,
+the new build system has the capability of detecting the FreeType version
+so the previous split release (1.0.5p1 and 1.0.6) is no longer necessary.
+
+1.2 libLASi can now be built both on Unix and Windows
+
+Our new CMake-based build system allows building libLASi on both Unix
+(Linux, Mac OS X, and proprietary Unices) and Windows (Cygwin, MinGW/MSYS,
+and Microsoft proprietary build environments) platforms. Instructions
+for various platforms have been collected at http://www.unifont.org/lasi/.
+
+1.3 The examples have been reorganized and extended and can now be built
+in both the build tree and install tree.
+
+After running "cmake" (which configures libLASi) and "make" (which builds
+the libLASi library and examples which use that library in the build tree,
+see instructions at http://www.unifont.org/lasi/), you can run ctest in the
+build tree to run the examples. If ctest shows no errors, the PostScript
+results of that test of the libLASi library are collected in the
+examples/example[0-2].ps files in the build tree. See examples/README
+in the source tree for descriptions of these test examples.
+
+The examples can also independently be built and run in the install tree
+created by "make install" as well using
+
+cd $version/share/lasi$lasi_version/examples
+make
+
+where $version is the installation prefix specified as a command-line option
+for the cmake command, and $lasi_version is currently 1.1.0. The make
+command uses pkg-config to specify the correct C++ flags and link flags, and
+users with independent applications that link to libLASi are advised to use
+the same method as well.
+
+1.4 libLASi is now more robust against font/glyph issues.
+
+Missing glyphs are now rendered as a blank rather than being the cause of
+showstopping errors seen in previous libLASi releases.
+
+Some font installations were occasionally returning non-outline glyphs that
+were causing segfault errors for older libLASi versions. The libLASi code
+has now been changed to render a blank for such cases and only attempt to
+render results for the outline glyphs it was designed for.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-01-30 03:30:57
|
Revision: 217
http://sourceforge.net/p/lasi/code/217
Author: airwin
Date: 2019-01-30 03:30:55 +0000 (Wed, 30 Jan 2019)
Log Message:
-----------
Bump package version from 1.1.2 to 1.1.3 and library SOVERSION from 1 to 2 in anticipation of the 1.1.3 release
The bump in just the patch number of the package version reflects that
only maintenance and no new development has occurred for this release.
However, that maintenance did involve necessary but relatively minor
backwards-incompatible changes to the libLASi API (a change in the
PostscriptDocument::GlyphId::GlyphId protected method API that is
designed for internal use only and the addition of the
PostscriptDocument::PangoItem_do protected method that is also
designed for internal use only).
As a result of these backwards incompatibilities, the library
SOVERSION had to be bumped from 1 to 2 to force users of this library
(e.g., the PLplot psttf device driver) to do the required
recompilations for this case. However, there is no need for users to
actually change their source code to adjust to these backwards
incompatibilities.
Modified Paths:
--------------
trunk/README
trunk/cmake/modules/lasi_version.cmake
Modified: trunk/README
===================================================================
--- trunk/README 2019-01-30 02:38:11 UTC (rev 216)
+++ trunk/README 2019-01-30 03:30:55 UTC (rev 217)
@@ -25,13 +25,17 @@
For installation instructions, see http://www.unifont.org/lasi/
-For example programs that uses libLASi, please see the examples directory
-located in the install tree at $prefix/share/lasi$version/examples where
-$prefix is the installation prefix and $version is the version of lasi
-(1.1.2 at the time of writing). An example is provided with such obscure
-glyphs they are bound to be missing on most systems (which tests that
-libLASi is robust against that situation). Simple and slightly more
-extensive examples are provided as well that have more interesting output.
+For example programs that uses libLASi, please see the examples
+directory located in the install tree at
+$prefix/share/lasi$version/examples where $prefix is the installation
+prefix and $version is the version of lasi (1.1.3 at the time of
+writing). An example is provided which tests that libLASi is robust
+against some common font issues such as a missing glyph or pango
+deciding to use a pure bitmapped font such as the popular Noto Color
+Emoji that does not provide the outline font data that libLASi needs).
+Simple and slightly more extensive examples are provided as well that
+have more interesting output. For more details concerning the examples,
+please consult examples/README.
See the file COPYING for terms of copying and re-distribution.
@@ -38,7 +42,7 @@
Copyright (C) 2003, 2004, 2006 Larry Siden
Copyright (C) 2008 Ed Trager
Copyright (C) 2008 Ritu Khanna
-Copyright (C) 2008 Alan W. Irwin
+Copyright (C) 2008-2019 Alan W. Irwin
Copyright (C) 2008 Andrew Ross
Copyright (C) 2008 Werner Smekal
Modified: trunk/cmake/modules/lasi_version.cmake
===================================================================
--- trunk/cmake/modules/lasi_version.cmake 2019-01-30 02:38:11 UTC (rev 216)
+++ trunk/cmake/modules/lasi_version.cmake 2019-01-30 03:30:55 UTC (rev 217)
@@ -1,12 +1,12 @@
# cmake/modules/lasi_version.cmake
# Version data that need review and possible modification for each release.
-set(VERSION 1.1.2)
+set(VERSION 1.1.3)
# CPack version numbers for release tarball name.
set(CPACK_PACKAGE_VERSION_MAJOR 1)
set(CPACK_PACKAGE_VERSION_MINOR 1)
-set(CPACK_PACKAGE_VERSION_PATCH 2)
+set(CPACK_PACKAGE_VERSION_PATCH 3)
# libLASi version information.
@@ -24,5 +24,5 @@
# (4) If there are no library source code changes at all, then leave all
# library version numbers the same for the release.
-set(LASi_SOVERSION 1)
-set(LASi_VERSION ${LASi_SOVERSION}.0.1)
+set(LASi_SOVERSION 2)
+set(LASi_VERSION ${LASi_SOVERSION}.0.0)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-01-30 02:38:13
|
Revision: 216
http://sourceforge.net/p/lasi/code/216
Author: airwin
Date: 2019-01-30 02:38:11 +0000 (Wed, 30 Jan 2019)
Log Message:
-----------
Reorganize how examples are built and run and replace old PNG snapshots with new ones
All references to a numerical "example[0-2]" core name style for
example applications and results have now been replaced by the more
descriptive core names MissingGlyphExample, SimpleLASiExample, and
ComplexTextLayoutExample. This core name change also makes the names
of example applications and results consistent with the name of the
source code used for each of the examples.
These examples now do the appropriate bounding-box calculations so the
results for all three of these examples are now in valid EPS
(Encapsulated PostScript) format. Accordingly the suffix of the
results of these applications has been changed from ".ps" to ".eps".
(This change in suffix is necessary before inkscape will honor the
bounding boxes.)
The new PNG snapshots generated by inkscape (now automatically
calculated in the build tree as a result of building the "all" target)
are much higher quality than the previous decade-old snapshots because
(i) pango is much more advanced than it was a decade ago, (ii) Linux
fonts are much better than they were a decade ago, and (iii) inkscape
does a better job of converting to PNG format than whatever (likely
commercial) application was used for such conversion a decade ago.
Accordingly I have removed the old PNG results from the examples
subdirectory of the source tree and replaced them with the current
build-tree results (on the Debian Testing platform) for
MissingGlyphExample.png, SimpleLASiExample.png, and
ComplexTextLayoutExample.png
Tested by: Alan W. Irwin <ai...@us...> on Linux
(Debian Testing) by following all the shared library and static
library build-tree and installed examples tree test steps documented
in a local variation of README.Release_Manager_Cookbook that will soon
be committed. All these tests passed without any issues.
Modified Paths:
--------------
trunk/examples/CMakeLists.txt
trunk/examples/Makefile.examples.in
Added Paths:
-----------
trunk/examples/ComplexTextLayoutExample.png
trunk/examples/MissingGlyphExample.png
trunk/examples/SimpleLASiExample.png
Removed Paths:
-------------
trunk/examples/Example_1_Result.png
trunk/examples/Example_2_Result.png
Modified: trunk/examples/CMakeLists.txt
===================================================================
--- trunk/examples/CMakeLists.txt 2019-01-30 02:11:58 UTC (rev 215)
+++ trunk/examples/CMakeLists.txt 2019-01-30 02:38:11 UTC (rev 216)
@@ -1,33 +1,97 @@
# examples/CMakeLists.txt
+
+# Copyright (C) 2007-2019 Alan W. Irwin
# Copyright (C) 2007 Andrew Ross
-# Copyright (C) 2007 Alan W. Irwin
+# This file is part of libLASi.
+#
+# LibLASi is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# LibLASi 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with LibLASi; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA
+
include_directories(${CMAKE_SOURCE_DIR}/include ${PANGOFT2_includedir})
-add_executable(example0 MissingGlyphExample.cpp)
-target_link_libraries(example0 LASi)
+set(CTEST_EXAMPLES_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/ctest_examples_output_dir)
+file(MAKE_DIRECTORY ${CTEST_EXAMPLES_OUTPUT_DIR})
-add_test(example0 ./example0 example0.ps)
+set(SRC_ROOT_NAME_LIST
+ MissingGlyphExample
+ SimpleLASiExample
+ ComplexTextLayoutExample
+ )
+
+find_program(INKSCAPE_EXECUTABLE inkscape)
+message(STATUS "inkscape executable = ${INKSCAPE_EXECUTABLE}")
+if(NOT INKSCAPE_EXECUTABLE)
+ message(STATUS "Platform issue: inkscape command not available.")
+ message(STATUS "Therefore example Encapsulated PostScript results cannot be transformed to PNG format")
+endif(NOT INKSCAPE_EXECUTABLE)
-add_executable(example1 SimpleLASiExample.cpp)
-target_link_libraries(example1 LASi)
+set(INSTALL_LIST)
+foreach(SRC_ROOT_NAME ${SRC_ROOT_NAME_LIST})
-add_test(example1 ./example1 example1.ps)
+ list(APPEND INSTALL_LIST ${SRC_ROOT_NAME}.cpp)
-add_executable(example2 ComplexTextLayoutExample.cpp)
-target_link_libraries(example2 LASi)
+ add_executable(${SRC_ROOT_NAME} ${SRC_ROOT_NAME}.cpp)
+ target_link_libraries(${SRC_ROOT_NAME} LASi)
-add_test(example2 ./example2 example2.ps)
+ add_test(${SRC_ROOT_NAME}
+ ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME} ${CTEST_EXAMPLES_OUTPUT_DIR}/${SRC_ROOT_NAME}.eps
+ )
+ if(INKSCAPE_EXECUTABLE)
+ add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.eps
+ ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.png
+ COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.eps
+ COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.png
+ COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME} > ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.eps
+ COMMAND ${INKSCAPE_EXECUTABLE} --export-background=\#ffffff --file=${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.eps --export-png=${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.png
+ DEPENDS ${SRC_ROOT_NAME}
+ VERBATIM
+ )
+ add_custom_target(test_${SRC_ROOT_NAME} ALL
+ DEPENDS
+ ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.eps
+ ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.png
+ )
+ else(INKSCAPE_EXECUTABLE)
+ add_custom_command(
+ OUTPUT
+ ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.eps
+ COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.eps
+ COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME} > ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.eps
+ DEPENDS ${SRC_ROOT_NAME}
+ VERBATIM
+ )
+ add_custom_target(test_${SRC_ROOT_NAME} ALL
+ DEPENDS
+ ${CMAKE_CURRENT_BINARY_DIR}/${SRC_ROOT_NAME}.eps
+ )
+ endif(INKSCAPE_EXECUTABLE)
+
+endforeach(SRC_ROOT_NAME ${SRC_ROOT_NAME_LIST})
+
install(FILES
-MissingGlyphExample.cpp
-SimpleLASiExample.cpp
-ComplexTextLayoutExample.cpp
-README
-Example_1_Result.png
-Example_2_Result.png
-DESTINATION ${DATA_DIR}/examples
-)
+ ${INSTALL_LIST}
+ README
+ MissingGlyphExample.png
+ SimpleLASiExample.png
+ ComplexTextLayoutExample.png
+ DESTINATION ${DATA_DIR}/examples
+ )
# Sort out RPATH issues for build of installed examples.
if(USE_RPATH)
Added: trunk/examples/ComplexTextLayoutExample.png
===================================================================
(Binary files differ)
Index: trunk/examples/ComplexTextLayoutExample.png
===================================================================
--- trunk/examples/ComplexTextLayoutExample.png 2019-01-30 02:11:58 UTC (rev 215)
+++ trunk/examples/ComplexTextLayoutExample.png 2019-01-30 02:38:11 UTC (rev 216)
Property changes on: trunk/examples/ComplexTextLayoutExample.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Deleted: trunk/examples/Example_1_Result.png
===================================================================
(Binary files differ)
Deleted: trunk/examples/Example_2_Result.png
===================================================================
(Binary files differ)
Modified: trunk/examples/Makefile.examples.in
===================================================================
--- trunk/examples/Makefile.examples.in 2019-01-30 02:11:58 UTC (rev 215)
+++ trunk/examples/Makefile.examples.in 2019-01-30 02:38:11 UTC (rev 216)
@@ -3,32 +3,32 @@
RPATHCMD = @RPATHCMD@
PKG_ENV = PKG_CONFIG_PATH=@PKG_CONFIG_PATH@
-all: example0.ps example1.ps example2.ps
+all: MissingGlyphExample.eps SimpleLASiExample.eps ComplexTextLayoutExample.eps
-example0$(EXEEXT): MissingGlyphExample.cpp
+MissingGlyphExample$(EXEEXT): MissingGlyphExample.cpp
$(CXX) -o $@ $< \
$(RPATHCMD) `$(PKG_ENV) pkg-config --cflags --libs lasi`
-example0.ps: example0$(EXEEXT)
+MissingGlyphExample.eps: MissingGlyphExample$(EXEEXT)
./$< $@
-example1$(EXEEXT): SimpleLASiExample.cpp
+SimpleLASiExample$(EXEEXT): SimpleLASiExample.cpp
$(CXX) -o $@ $< \
$(RPATHCMD) `$(PKG_ENV) pkg-config --cflags --libs lasi`
-example1.ps: example1$(EXEEXT)
+SimpleLASiExample.eps: SimpleLASiExample$(EXEEXT)
./$< $@
-example2$(EXEEXT): ComplexTextLayoutExample.cpp
+ComplexTextLayoutExample$(EXEEXT): ComplexTextLayoutExample.cpp
$(CXX) -o $@ $< \
$(RPATHCMD) `$(PKG_ENV) pkg-config --cflags --libs lasi`
-example2.ps: example2$(EXEEXT)
+ComplexTextLayoutExample.eps: ComplexTextLayoutExample$(EXEEXT)
./$< $@
clean:
- rm example0$(EXEEXT) example0.ps \
- example1$(EXEEXT) example1.ps \
- example2$(EXEEXT) example2.ps
+ rm MissingGlyphExample$(EXEEXT) MissingGlyphExample.eps \
+ SimpleLASiExample$(EXEEXT) SimpleLASiExample.eps \
+ ComplexTextLayoutExample$(EXEEXT) ComplexTextLayoutExample.eps
.PHONY: all clean
Added: trunk/examples/MissingGlyphExample.png
===================================================================
(Binary files differ)
Index: trunk/examples/MissingGlyphExample.png
===================================================================
--- trunk/examples/MissingGlyphExample.png 2019-01-30 02:11:58 UTC (rev 215)
+++ trunk/examples/MissingGlyphExample.png 2019-01-30 02:38:11 UTC (rev 216)
Property changes on: trunk/examples/MissingGlyphExample.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
Added: trunk/examples/SimpleLASiExample.png
===================================================================
(Binary files differ)
Index: trunk/examples/SimpleLASiExample.png
===================================================================
--- trunk/examples/SimpleLASiExample.png 2019-01-30 02:11:58 UTC (rev 215)
+++ trunk/examples/SimpleLASiExample.png 2019-01-30 02:38:11 UTC (rev 216)
Property changes on: trunk/examples/SimpleLASiExample.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ai...@us...> - 2019-01-30 02:12:00
|
Revision: 215
http://sourceforge.net/p/lasi/code/215
Author: airwin
Date: 2019-01-30 02:11:58 +0000 (Wed, 30 Jan 2019)
Log Message:
-----------
Insert copyright notice in CMakeLists.txt and src/CMakeLists.txt
In addition I fixed a CMake version number typo in the CMakeLists.txt comments.
Modified Paths:
--------------
trunk/CMakeLists.txt
trunk/src/CMakeLists.txt
Modified: trunk/CMakeLists.txt
===================================================================
--- trunk/CMakeLists.txt 2019-01-30 02:08:50 UTC (rev 214)
+++ trunk/CMakeLists.txt 2019-01-30 02:11:58 UTC (rev 215)
@@ -1,6 +1,27 @@
# Top-level CMakeLists.txt for libLASi
-# Version 3.12.2 or above of cmake is required!
+# Copyright (C) 2007-2019 Alan W. Irwin
+# Copyright (C) 2007-2011 Andrew Ross
+# Copyright (C) 2007 Werner Smekal
+
+# This file is part of libLASi.
+#
+# LibLASi is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# LibLASi 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with LibLASi; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA
+
+# Version 3.13.2 or above of cmake is required!
CMAKE_MINIMUM_REQUIRED(VERSION 3.13.2)
project(libLASi CXX)
Modified: trunk/src/CMakeLists.txt
===================================================================
--- trunk/src/CMakeLists.txt 2019-01-30 02:08:50 UTC (rev 214)
+++ trunk/src/CMakeLists.txt 2019-01-30 02:11:58 UTC (rev 215)
@@ -1,8 +1,25 @@
# src/CMakeLists.txt for libLASi
-###
-### Process this file with cmake to produce Makefile
-###
+# Copyright (C) 2007-2019 Alan W. Irwin
+# Copyright (C) 2007 Werner Smekal
+
+# This file is part of libLASi.
+#
+# LibLASi is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# LibLASi 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with LibLASi; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA
+
set(LASi_LIB_SRCS
drawGlyph.cpp
glyphMgr.cpp
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|