From bfdc8247005b5286d9360abfe0193b9642b430f0 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Thu, 21 Sep 2023 17:18:30 +0200 Subject: [PATCH] Add object creator to releases (#68173) * Optional code needs to be commented out now * Add object creator to releases * Add object creator sources to astyle * Change object creator source dir Co-authored-by: andrei <68240139+andrei8l@users.noreply.github.com> * Add the help->about option * Object creator now built in devcontainer Both the windows and linux versions are now built in the devcontainer. The windows version was already built in the devcontainer. I changed the linux version to be built inside the devcontainer too because an error shows up when opening the binary when it was compiled using github actions directly. * Add qt5 libs install to dockerfile * Add QT license file --------- Co-authored-by: andrei <68240139+andrei8l@users.noreply.github.com> --- .devcontainer/Dockerfile | 55 +++--- .github/workflows/release.yml | 57 +++++- Makefile | 4 + doc/COMPILING/COMPILING-DEVCONTAINER.md | 29 ++- ...container-Commented-Out-Qt5-Linux-Libs.png | Bin 0 -> 14601 bytes ...tainer-Find-Uncommented-Linux-QT5-Libs.png | Bin 0 -> 15048 bytes object_creator/creator_main_window.cpp | 23 +++ object_creator/qt-license.txt | 165 ++++++++++++++++++ 8 files changed, 298 insertions(+), 35 deletions(-) create mode 100644 doc/img/Devcontainer-Commented-Out-Qt5-Linux-Libs.png create mode 100644 doc/img/Devcontainer-Find-Uncommented-Linux-QT5-Libs.png create mode 100644 object_creator/qt-license.txt diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 4052a7013a08c..587de717484bf 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -26,35 +26,36 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ && apt-get -y install --no-install-recommends libsdl2-dev libsdl2-ttf-dev \ libsdl2-image-dev libsdl2-mixer-dev libfreetype6-dev build-essential astyle ccache +# [Optional] comment out this section unless you want to compile the Object Creator. Install some QT libraries +RUN apt-get -y install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools - -# [Optional] uncomment this section to include dependencies for Windows cross-compilation from Linux +# [Optional] comment out this section unless you want to cross-compile from Linux to Windows # This section should align with doc/COMPILING/COMPILING.md#cross-compile-to-windows-from-linux # With the exception of the installation of packages that are already installed earlier in the Dockerfile # Like: astyle, cmake -# RUN apt-get -y install autoconf automake autopoint bash bison bzip2 flex gettext git g++ \ -# gperf intltool libffi-dev libgdk-pixbuf2.0-dev libtool libltdl-dev libssl-dev \ -# libxml-parser-perl lzip make mingw-w64 openssl p7zip-full patch perl pkg-config \ -# python3 ruby scons sed unzip wget xz-utils g++-multilib libc6-dev-i386 libtool-bin python3-mako +RUN apt-get -y install autoconf automake autopoint bash bison bzip2 flex gettext git g++ \ + gperf intltool libffi-dev libgdk-pixbuf2.0-dev libtool libltdl-dev libssl-dev \ + libxml-parser-perl lzip make mingw-w64 openssl p7zip-full patch perl pkg-config \ + python3 ruby scons sed unzip wget xz-utils g++-multilib libc6-dev-i386 libtool-bin python3-mako -# WORKDIR /opt -# RUN mkdir -p mxe -# RUN mkdir -p libbacktrace -# RUN git clone https://github.com/mxe/mxe.git ./mxe -# WORKDIR /opt/mxe - -# # because of https://github.com/mxe/mxe/issues/2659, we have to link python 3 to python -# RUN ln /usr/bin/python3 /usr/bin/python -# # Builds windows version of SDL2 which is required to later cross-compile CDDA. -# RUN make -j4 MXE_TARGETS='x86_64-w64-mingw32.static i686-w64-mingw32.static' \ -# MXE_PLUGIN_DIRS=plugins/gcc12 sdl2 sdl2_ttf sdl2_image sdl2_mixer gettext -# WORKDIR /opt/libbacktrace -# RUN wget https://github.com/Qrox/libbacktrace/releases/download/2020-01-03/libbacktrace-x86_64-w64-mingw32.tar.gz -# RUN wget https://github.com/Qrox/libbacktrace/releases/download/2020-01-03/libbacktrace-i686-w64-mingw32.tar.gz -# RUN tar -xzf libbacktrace-x86_64-w64-mingw32.tar.gz --exclude=LICENSE -C /opt/mxe/usr/x86_64-w64-mingw32.static -# RUN tar -xzf libbacktrace-i686-w64-mingw32.tar.gz --exclude=LICENSE -C /opt/mxe/usr/i686-w64-mingw32.static - -# #Additional steps to cross compile object_creator. Uncomment this if you want to cross-compile the object cretor -# WORKDIR /opt/mxe -# RUN make MXE_TARGETS='x86_64-w64-mingw32.static i686-w64-mingw32.static' qtbase -# RUN export PATH=/opt/mxe/usr/bin:$PATH +WORKDIR /opt +RUN mkdir -p mxe +RUN mkdir -p libbacktrace +RUN git clone https://github.com/mxe/mxe.git ./mxe +WORKDIR /opt/mxe + +# because of https://github.com/mxe/mxe/issues/2659, we have to link python 3 to python +RUN ln /usr/bin/python3 /usr/bin/python +# Builds windows version of SDL2 which is required to later cross-compile CDDA. +RUN make -j4 MXE_TARGETS='x86_64-w64-mingw32.static i686-w64-mingw32.static' \ + MXE_PLUGIN_DIRS=plugins/gcc12 sdl2 sdl2_ttf sdl2_image sdl2_mixer gettext +WORKDIR /opt/libbacktrace +RUN wget https://github.com/Qrox/libbacktrace/releases/download/2020-01-03/libbacktrace-x86_64-w64-mingw32.tar.gz +RUN wget https://github.com/Qrox/libbacktrace/releases/download/2020-01-03/libbacktrace-i686-w64-mingw32.tar.gz +RUN tar -xzf libbacktrace-x86_64-w64-mingw32.tar.gz --exclude=LICENSE -C /opt/mxe/usr/x86_64-w64-mingw32.static +RUN tar -xzf libbacktrace-i686-w64-mingw32.tar.gz --exclude=LICENSE -C /opt/mxe/usr/i686-w64-mingw32.static + +#Additional steps to cross compile object_creator. comment this out if you don't want to cross-compile the object cretor +WORKDIR /opt/mxe +RUN make MXE_TARGETS='x86_64-w64-mingw32.static i686-w64-mingw32.static' qtbase +RUN export PATH=/opt/mxe/usr/bin:$PATH diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 304240da8b85e..7f31a328aed0e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -78,6 +78,13 @@ jobs: ext: zip content: application/zip sound: 1 + - name: Windows Object Creator x64 + mxe: x86_64 + artifact: windows-objectcreator-x64 + android: none + os: ubuntu-latest + ext: zip + content: application/zip - name: Linux Tiles x64 os: ubuntu-20.04 mxe: none @@ -105,6 +112,13 @@ jobs: artifact: linux-curses-x64 ext: tar.gz content: application/gzip + - name: Linux object creator x64 + os: ubuntu-20.04 + mxe: none + android: none + artifact: linux-objectcreator-x64 + ext: tar.gz + content: application/gzip - name: macOS Curses Universal Binary (x64 and arm64) os: macos-12 mxe: none @@ -172,11 +186,11 @@ jobs: run: | vcpkg integrate install --vcpkg-root '${{ runner.workspace }}\b\vcpkg' - name: Install dependencies (windows mxe) - if: matrix.mxe != 'none' + if: matrix.mxe != 'none' && matrix.artifact != 'windows-objectcreator-x64' run: | sudo apt install gettext - name: Install MXE - if: matrix.mxe != 'none' + if: matrix.mxe != 'none' && matrix.artifact != 'windows-objectcreator-x64' run: | curl -L -o mxe-${{ matrix.mxe }}.tar.xz https://github.com/BrettDong/MXE-GCC/releases/download/mxe-sdl-2-0-20/mxe-${{ matrix.mxe }}.tar.xz curl -L -o mxe-${{ matrix.mxe }}.tar.xz.sha256 https://github.com/BrettDong/MXE-GCC/releases/download/mxe-sdl-2-0-20/mxe-${{ matrix.mxe }}.tar.xz.sha256 @@ -222,12 +236,47 @@ jobs: run: | lang/compile_mo.sh all - name: Build CDDA (linux) - if: runner.os == 'Linux' && matrix.mxe == 'none' && matrix.android == 'none' + if: runner.os == 'Linux' && matrix.mxe == 'none' && matrix.android == 'none' && matrix.artifact != 'linux-objectcreator-x64' run: | make -j$((`nproc`+0)) TILES=${{ matrix.tiles }} SOUND=${{ matrix.tiles }} RELEASE=1 LOCALIZE=1 LANGUAGES=all BACKTRACE=0 PCH=0 bindist mv cataclysmdda-0.F.tar.gz cdda-${{ matrix.artifact }}-${{ needs.release.outputs.timestamp }}.tar.gz + - name: Login to GitHub Container Registry + if: matrix.artifact == 'windows-objectcreator-x64' || matrix.artifact == 'linux-objectcreator-x64' + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build object creator (windows) + if: matrix.artifact == 'windows-objectcreator-x64' + uses: devcontainers/ci@v0.3 + with: + imageName: ghcr.io/cleverRaven/cataclysm-dda/cataclysm-dda-devcontainer + cacheFrom: ghcr.io/cleverRaven/cataclysm-dda/cataclysm-dda-devcontainer + push: always + runCmd: | + git config --global --add safe.directory /workspaces/Cataclysm-DDA + make object_creator.exe CROSS="/opt/mxe/usr/bin/x86_64-w64-mingw32.static-" TILES=1 SOUND=1 RELEASE=1 LOCALIZE=1 PREFIX=output PCH=0 MXE_TARGETS='x86_64-w64-mingw32.static' -j4 + - name: Build object creator (linux) + if: matrix.artifact == 'linux-objectcreator-x64' + uses: devcontainers/ci@v0.3 + with: + imageName: ghcr.io/cleverRaven/cataclysm-dda/cataclysm-dda-devcontainer + cacheFrom: ghcr.io/cleverRaven/cataclysm-dda/cataclysm-dda-devcontainer + push: never + runCmd: | + git config --global --add safe.directory /workspaces/Cataclysm-DDA + make -j$((`nproc`+0)) TILES=1 LINTJSON=0 RELEASE=1 object_creator + - name: zip Object Creator (windows) + if: matrix.artifact == 'windows-objectcreator-x64' + run: | + zip cdda-${{ matrix.artifact }}-${{ needs.release.outputs.timestamp }}.${{ matrix.ext }} ./object_creator/object_creator.exe ./object_creator/qt-license.txt + - name: tar Object Creator (linux) + if: matrix.artifact == 'linux-objectcreator-x64' + run: | + tar -czf cdda-${{ matrix.artifact }}-${{ needs.release.outputs.timestamp }}.${{ matrix.ext }} ./object_creator/object_creator ./object_creator/qt-license.txt - name: Build CDDA (windows mxe) - if: matrix.mxe != 'none' + if: matrix.mxe != 'none' && matrix.artifact != 'windows-objectcreator-x64' env: PLATFORM: /opt/mxe/usr/bin/${{ matrix.mxe }}-w64-mingw32.static.gcc12- run: | diff --git a/Makefile b/Makefile index d524aefa6c9e2..b8685078515f7 100644 --- a/Makefile +++ b/Makefile @@ -857,6 +857,8 @@ else endif THIRD_PARTY_SOURCES := $(wildcard $(SRC_DIR)/third-party/flatbuffers/*.cpp) HEADERS := $(wildcard $(SRC_DIR)/*.h) +OBJECT_CREATOR_SOURCES := $(wildcard $object_creator/*.cpp) +OBJECT_CREATOR_HEADERS := $(wildcard $object_creator/*.h) TESTSRC := $(wildcard tests/*.cpp) TESTHDR := $(wildcard tests/*.h) JSON_FORMATTER_SOURCES := $(wildcard tools/format/*.cpp) src/wcwidth.cpp src/json.cpp @@ -870,6 +872,8 @@ CLANG_TIDY_PLUGIN_HEADERS := \ ASTYLE_SOURCES := $(sort \ $(SOURCES) \ $(HEADERS) \ + $(OBJECT_CREATOR_SOURCES) \ + $(OBJECT_CREATOR_HEADERS) \ $(TESTSRC) \ $(TESTHDR) \ $(JSON_FORMATTER_SOURCES) \ diff --git a/doc/COMPILING/COMPILING-DEVCONTAINER.md b/doc/COMPILING/COMPILING-DEVCONTAINER.md index ef03acf55f2ba..a04e8a69a4ecc 100644 --- a/doc/COMPILING/COMPILING-DEVCONTAINER.md +++ b/doc/COMPILING/COMPILING-DEVCONTAINER.md @@ -17,11 +17,32 @@ The devcontainer was introduced in [#65748](https://github.com/CleverRaven/Catac 3. Add Cleverraven as the remote upstream with git remote add upstream git@github.com:CleverRaven/Cataclysm-DDA.git 4. Open the folder where you cloned your repository in Visual Studio Code via the UI or by navigating to the directory in a terminal and typing Code 5. Visual Studio Code will show a pup-up in the bottom right with recommended extentions. Install those. -6. Now restart visual studio code. When prompted, click "Reopen in container": +6. If you don't plan to compile the object creator, open the Dockerfile in the VSCode file browser and scroll down to find this section: + ![Image showing the uncommented part of the dockerfile](../img/Devcontainer-Find-Uncommented-Linux-QT5-Libs.png) + + comment out that part so it looks like this: + ![Image showing the uncommented part of the dockerfile](../img/Devcontainer-Commented-Out-Qt5-Linux-Libs.png) + +If you don't plan to cross-compile the game, scroll down to find this section: + + ![Image showing the uncommented part of the dockerfile](../img/Devcontainer-Uncomment-Windows-Part-In-Dockerfile.png) + + comment out that part (select it and press ctrl+/ in vscode) so it looks like this: + ![Image showing the commented part of the dockerfile](../img/Devcontainer-Find-Commented-Windows-Commands-In-Dockerfile.png) + +Next, scroll down to find this section: + ![Image showing the uncommented part of the dockerfile](../img/Devcontainer-Uncomment-QT5-Part-In-Dockerfile.png) + + comment that part out (select it and press ctrl+/ in vscode) so it looks like this: + + ![Image showing the commented part of the dockerfile](../img/Devcontainer-Find-Commented-QT5-Commands-In-Dockerfile.png) + + +7. Now restart visual studio code. When prompted, click "Reopen in container": ![Re-open devcontainer in vscode](../img/Devcontainer-Re-Open-In-Container.png) - 6.1 Linux only: You may see this message: + 7.1 Linux only: You may see this message: ![User does not have access to group, add user to docker group first](../img/Devcontainer-User-Does-Not-Have-Access-Add-To-Group-First.png) @@ -32,12 +53,12 @@ The devcontainer was introduced in [#65748](https://github.com/CleverRaven/Catac After that, log out of your account and log back in so the permissions are updated. If that doesn't work, reboot your computer. -7. Allow the container to build and for VSCode to Reopen. If everything goes well, you will see the container running: +8. Allow the container to build and for VSCode to Reopen. If everything goes well, you will see the container running: ![Image showing the container is running in vscode](../img/Devcontainer-Running-Cataclysm-Devcontainer.png) -8. Select the makefile extension on the bottom left and choose your desired configuration. Press the "Play" button to build the project +9. Select the makefile extension on the bottom left and choose your desired configuration. Press the "Play" button to build the project ![Image the buttons to press in the makefile extention](../img/Devcontainer-Make-File-Configs.png) diff --git a/doc/img/Devcontainer-Commented-Out-Qt5-Linux-Libs.png b/doc/img/Devcontainer-Commented-Out-Qt5-Linux-Libs.png new file mode 100644 index 0000000000000000000000000000000000000000..9d23b2cebe451317d6d7b6c0fe790094fd92a356 GIT binary patch literal 14601 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 literal 0 HcmV?d00001 diff --git a/doc/img/Devcontainer-Find-Uncommented-Linux-QT5-Libs.png b/doc/img/Devcontainer-Find-Uncommented-Linux-QT5-Libs.png new file mode 100644 index 0000000000000000000000000000000000000000..f00d3233f41298a043e742bfc40127991957bee5 GIT binary patch literal 15048 zcmajGb9iRK(`Y{@pj^IBssz9^K`3g9TL{6(tR@l@+xRZc z;7RxiX1JL@5o90k_U#I!C*1NLzH`<%>3;2pnFJad8hTFI-k-0Vhc$lhr_UeS_&>gb ze+%IMR|LX}P8QMn|5yFLPoaO?zJmE*?cV~n!iCv8|GVj5(MtFeq2@pOSBw81p!$ys zQpFPlaTIY75D=uB{QTed`4*6i{&}6@0`hi}A}9K$RoDOj8H1$3%xGa}7bD90A9wnZ znQ(i}Rj_j<3SmOYoCzCM~^!hboic7(*X-^AJYn+eX*z9&ION-T9H4pc%1CUM2cyR z`rw>d-!jjc)s`I00T|qeacZIW%w$&FPx-pz_(6Vpj`1~9#@^ke<~baz96A>H-hedS z;iuq3tXwNhoJ}8kSeYEY7994;>6n6!L8f1AApiiA02T@fGG2CXl3%(Ub~~0RgKs@% zQe_b9ghjM%#enrYW{4U6VfN3`m*=7xd6_Y9NW+*T}@;qu-Y z8D{eLu7=|haU+cMum&w>E!WlMvL7|n&3-1N4K?Nyukf+mwDrmL?@`~_;z(^(4IJ7> zLrM7`=#0=U^HcnQ%eGU(`e0pD!Ec>}ZY^DPwJ>a;#X^zTqrr)4|6qS@&dw8ZL-l}l z9BomnFX46+s~j-Sn|B5s$3P8<^u8dO0Y?*v@QhgVbKFv8Nlq#jhTisv|Q)@yO%DhBQnHB|e$Lb|LPPn+${g$iZhk>LRnv9xTB3z*3NF&7L{6sFH@};OA2@a!2JzgakWsZgrkzEg=4ks@Q~6Z;iHlJ zH@1O1A+i#D=X$r9v+Q+`TvX|i7|`o@o@UCfS(W*#2TDr@463DRr``IFh1)Dtd^o{r zQ@C+I$y@h;#2YJFG?Fyznk|Z$hzgWLR~Eo*Z*IjDUF{f>Qepi&S^~COup|PkCB;>W zN^FD4AZ{;*INnK*whYQEG@6Pu%IHEH@72#O^8h3l8`Ba?a_8EREqiCS`Qn4-?G^LS ztYtshexk}f>a08|A9pe^W`cr^G`0;tVe(8^xjc0iCL>L#;|#q{FD_Y(E{%P)PBp#s zjIug7tY=hE_fjmas8`7&P$~Uq

J$eF9NpQU^3&cgT&0H?{?cd#PWA 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 I1@!~}2NtuI)&Kwi literal 0 HcmV?d00001 diff --git a/object_creator/creator_main_window.cpp b/object_creator/creator_main_window.cpp index c298f8bba5f91..57a9cdf15f999 100644 --- a/object_creator/creator_main_window.cpp +++ b/object_creator/creator_main_window.cpp @@ -7,6 +7,9 @@ #include #include #include +#include +#include + namespace io @@ -44,6 +47,26 @@ int creator::main_window::execute( QApplication &app ) std::this_thread::sleep_for( std::chrono::seconds( 2 ) ); app.processEvents(); + //Add a menu bar with the file->exit option and the help->about option + QMenuBar* menuBar = creator_main_window.menuBar(); + QMenu* fileMenu = menuBar->addMenu( "File" ); + QAction* exitAction = fileMenu->addAction( "Exit" ); + QObject::connect( exitAction, &QAction::triggered, &creator_main_window, &QMainWindow::close ); + QMenu* helpMenu = menuBar->addMenu( "Help" ); + QAction* aboutAction = helpMenu->addAction( "About" ); + //When the about option is clicked, show a message box information about the object creator + QObject::connect( aboutAction, &QAction::triggered, &creator_main_window, [&creator_main_window]() { + QMessageBox::about( &creator_main_window, "About", "This is the Cataclysm: DDA object creator.\n" + "It is used to create new spells, itemgroups, etc.\n" + "Find more info and contribute to https://github.com/CleverRaven/Cataclysm-DDA.\n"); + } ); + + //Add an option to the help menu to show the about qt dialog + QAction* aboutQtAction = helpMenu->addAction( "About Qt" ); + QObject::connect( aboutQtAction, &QAction::triggered, &app, &QApplication::aboutQt ); + + + //Create a tab widget and add it to the main window QTabWidget* tabWidget = new QTabWidget(&creator_main_window); creator_main_window.setCentralWidget(tabWidget); diff --git a/object_creator/qt-license.txt b/object_creator/qt-license.txt new file mode 100644 index 0000000000000..479976e50064f --- /dev/null +++ b/object_creator/qt-license.txt @@ -0,0 +1,165 @@ +From: https://doc.qt.io/qt-5/lgpl.html +GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library.