Libreoffice update: not succesful yet

wip/yesman
Michael Raskin 10 years ago
parent a25938e85e
commit 7788afd571
  1. 62
      pkgs/applications/office/libreoffice/default.nix
  2. 38
      pkgs/applications/office/libreoffice/generate-libreoffice-srcs.sh
  3. 445
      pkgs/applications/office/libreoffice/libreoffice-srcs.nix
  4. 6
      pkgs/top-level/all-packages.nix

@ -14,34 +14,20 @@
, autoconf, automake, openldap, bash, hunspell, librdf_redland, nss, nspr
, libwpg, dbus_glib, glibc, qt4, kde4, clucene_core, libcdr, lcms, vigra
, unixODBC, mdds, saneBackends, mythes, libexttextcat, libvisio
, fontsConf, pkgconfig, libzip, bluez5, libtool, maven
, fontsConf, pkgconfig, libzip, bluez5, libtool, maven, libe-book_00
, libmwaw_02, libatomic_ops, graphite2, harfbuzz
, langs ? [ "en-US" "en-GB" "ca" "ru" "eo" "fr" "nl" "de" "sl" ]
}:
let
langsSpaces = stdenv.lib.concatStringsSep " " langs;
major = "4";
minor = "0";
minor = "2";
patch = "5";
tweak = "2";
subdir = "${major}.${minor}.${patch}";
version = "${subdir}${if tweak == "" then "" else "."}${tweak}";
# configure phase dependency
liborcus = stdenv.mkDerivation rec {
version = "0.3.0";
name = "liborcus-${version}";
src = fetchurl {
url = "http://dev-www.libreoffice.org/src/8755aac23317494a9028569374dc87b2-liborcus_0.3.0.tar.bz2";
sha256 = "0xrw13s390mcpm50apclydl38sw2sdq27csrr1k0d39jna2990ih";
};
configureFlags = "--disable-werror";
buildInputs = [ zlib boost mdds pkgconfig libixion libzip ];
};
# configure phase dependency
liblangtag = stdenv.mkDerivation rec {
version = "0.4.0";
@ -85,9 +71,12 @@ let
buildInputs = [ boost mdds pkgconfig ];
};
fetchThirdParty = {name, md5}: fetchurl {
fetchThirdParty = {name, md5, brief}: fetchurl {
inherit name md5;
url = "http://dev-www.libreoffice.org/src/${md5}-${name}";
url = if brief then
"http://dev-www.libreoffice.org/src/${name}"
else
"http://dev-www.libreoffice.org/src/${md5}-${name}";
};
fetchSrc = {name, sha256}: fetchurl {
@ -104,14 +93,14 @@ let
translations = fetchSrc {
name = "translations";
sha256 = "0x96wlwr5m7w4k3ygydzak3ycq35hjq60vfi6nfxczlr8pfjyjxv";
sha256 = "0nv47r043w151687ks06w786h8azi8gylxma9c7qyjbdj6cdb2ly";
};
# TODO: dictionaries
help = fetchSrc {
name = "help";
sha256 = "0nab5jcgrrgn0v1yrm18nl9avp4vifbas48l1absz3jmzf9wka7b";
sha256 = "1kbkdngq39gfq2804v6vnllax4gqs25zlfk6y561iiipld1ncc5v";
};
};
@ -121,7 +110,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "http://download.documentfoundation.org/libreoffice/src/${subdir}/libreoffice-${version}.tar.xz";
sha256 = "195g1iab7j2x7sl326xbq7vya412ns57xrwpv9hqdrb7iiz2n8la";
sha256 = "4bf7898d7d0ba918a8f6668eff0904a549e5a2de837854716e6d996f121817d5";
};
# Openoffice will open libcups dynamically, so we link it directly
@ -135,7 +124,7 @@ stdenv.mkDerivation rec {
postUnpack = ''
mkdir -v $sourceRoot/src
'' + (stdenv.lib.concatMapStrings (f: "ln -sv ${f} $sourceRoot/src/${f.outputHash}-${f.name}\n") srcs.third_party)
'' + (stdenv.lib.concatMapStrings (f: "ln -sv ${f} $sourceRoot/src/${f.outputHash}-${f.name}\nln -sv ${f} $sourceRoot/src/${f.name}\n") srcs.third_party)
+ ''
ln -sv ${srcs.help} $sourceRoot/src/${srcs.help.name}
tar xf $sourceRoot/src/${srcs.help.name} -C $sourceRoot/../
@ -162,6 +151,10 @@ stdenv.mkDerivation rec {
"--with-parallelism=$NIX_BUILD_CORES"
"--with-lang=${langsSpaces}"
);
chmod a+x ./bin/unpack-sources
# It is used only as an indicator of the proper current directory
touch solenv/inc/target.mk
'';
makeFlags = "SHELL=${bash}/bin/bash";
@ -172,9 +165,6 @@ stdenv.mkDerivation rec {
# This is required as some cppunittests require fontconfig configured
export FONTCONFIG_FILE=${fontsConf}
# Fix sysui: wants to create a tar for root
sed -i -e 's,--own.*root,,' sysui/desktop/slackware/makefile.mk
# This to aovid using /lib:/usr/lib at linking
sed -i '/gb_LinkTarget_LDFLAGS/{ n; /rpath-link/d;}' solenv/gbuild/platform/unxgcc.mk
@ -199,7 +189,7 @@ stdenv.mkDerivation rec {
'';
configureFlags = [
"--with-vender=NixOS"
"--with-vendor=NixOS"
# Without these, configure does not finish
"--without-junit"
@ -219,11 +209,11 @@ stdenv.mkDerivation rec {
"--without-doxygen"
# I imagine this helps. Copied from go-oo.
"--disable-epm"
"--disable-mathmldtd"
# Modified on every upgrade, though
"--disable-kde"
"--disable-postgresql-sdbc"
"--with-package-format=native"
"--enable-epm"
"--with-jdk-home=${jdk}/lib/openjdk"
"--with-ant-home=${ant}/lib/ant"
"--without-afms"
@ -235,10 +225,14 @@ stdenv.mkDerivation rec {
"--without-system-jars"
"--without-system-altlinuxhyph"
"--without-system-lpsolve"
"--without-system-graphite"
"--without-system-npapi-headers"
"--without-system-libcmis"
"--without-system-mozilla"
"--without-system-libetonyek"
"--without-system-libfreehand"
"--without-system-libodfgen"
"--without-system-libabw"
"--without-system-firebird"
"--without-system-orcus"
];
checkPhase = ''
@ -253,11 +247,11 @@ stdenv.mkDerivation rec {
hunspell icu jdk kde4.kdelibs lcms libcdr libexttextcat unixODBC libjpeg
libmspack librdf_redland librsvg libsndfile libvisio libwpd libwpg libX11
libXaw libXext libXi libXinerama libxml2 libxslt libXtst
libXdmcp libpthreadstubs mdds mesa mythes
libXdmcp libpthreadstubs mesa mythes
neon nspr nss openldap openssl ORBit2 pam perl pkgconfigUpstream poppler
python3 sablotron saneBackends tcsh unzip vigra which zip zlib
mdds bluez5 glibc libmspub libixion liborcus liblangtag
libxshmfence
mdds bluez5 glibc libmspub libixion liblangtag
libxshmfence libe-book_00 libmwaw_02 libatomic_ops graphite2 harfbuzz
];
meta = with stdenv.lib; {

@ -6,15 +6,39 @@ cat <<EOF
[
EOF
read file
while read file; do
if [[ "$file" == @* ]]; then
break
fi
write_entry(){
echo '{'
echo " name = \"${file:33}\";"
echo " md5 = \"${file:0:32}\";"
echo " name = \"${name}\";"
echo " md5 = \"${md5}\";"
echo " brief = ${brief};"
echo '}'
}
while read line; do
case "$line" in
\#*)
echo Skipping comment: "$line" >&2;
;;
*_MD5SUM\ :=*)
read tbline;
line=${line##* };
tbline=${tbline##* };
md5=$line
name=$tbline;
brief=true;
write_entry;
;;
*_TARBALL\ :=*)
line=${line##* };
md5=${line:0:32};
name=${line:33};
brief=false;
write_entry;
;;
*)
echo Skipping: "$line" >&2;
;;
esac
done
echo ']'

@ -1,114 +1,467 @@
[
{
name = "glibc-2.1.3-stub.tar.gz";
md5 = "4a660ce8466c9df01f19036435425c3a";
name = "libabw-0.0.2.tar.bz2";
md5 = "40fa48e03b1e28ae0325cc34b35bc46d";
brief = true;
}
{
name = "ucpp-1.3.2.tar.gz";
md5 = "0168229624cfac409e766913506961a8";
name = "libcdr-0.0.15.tar.bz2";
md5 = "fbcd8619fc6646f41d527c1329102998";
brief = true;
}
{
name = "libe-book-0.0.3.tar.bz2";
md5 = "2f1ceaf2ac8752ed278e175447d9b978";
brief = true;
}
{
name = "libetonyek-0.0.4.tar.bz2";
md5 = "3c50bc60394d1f2675fbf9bd22581363";
brief = true;
}
{
name = "libfreehand-0.0.0.tar.bz2";
md5 = "496dd00028afcc19f896b01394769043";
brief = true;
}
{
name = "libmspub-0.0.6.tar.bz2";
md5 = "1120705cd0f0d9bd5506360bf57b6c2e";
brief = true;
}
{
name = "libmwaw-0.2.0.tar.bz2";
md5 = "d794625f156a9fb1c53b3f8a8aa13b5e";
brief = true;
}
{
name = "libodfgen-0.0.4.tar.bz2";
md5 = "e5483d1f0b71e64c367c1194b54b0f53";
brief = true;
}
{
name = "libvisio-0.0.31.tar.bz2";
md5 = "82628333418f101a20cd21f980cf9f40";
brief = true;
}
{
name = "Firebird-2.5.2.26540-0.tar.bz2";
md5 = "21154d2004e025c8a3666625b0357bb5";
brief = true;
}
{
name = "harfbuzz-0.9.23.tar.bz2";
md5 = "a4a9b548577e2ee22f0887937da5fd6c";
brief = true;
}
{
name = "libatomic_ops-7_2d.zip";
md5 = "c0b86562d5aa40761a87134f83e6adcf";
brief = true;
}
{
name = "libeot-0.01.tar.bz2";
md5 = "aa24f5dd2a2992f4a116aa72af817548";
brief = true;
}
{
name = "language-subtag-registry-2014-03-27.tar.bz2";
md5 = "504af523f5d1a5590bbeb6a4b55e8a97";
brief = true;
}
{
name = "Adobe-Core35_AFMs-314.tar.gz";
md5 = "1756c4fa6c616ae15973c104cd8cb256";
brief = false;
}
{
name = "commons-codec-1.6-src.tar.gz";
md5 = "2e482c7567908d334785ce7d69ddfff7";
brief = false;
}
{
name = "commons-httpclient-3.1-src.tar.gz";
md5 = "2c9b0f83ed5890af02c0df1c1776f39b";
brief = false;
}
{
name = "commons-lang-2.4-src.tar.gz";
md5 = "625ff5f2f968dd908bca43c9469d6e6b";
brief = false;
}
{
name = "commons-logging-1.1.1-src.tar.gz";
md5 = "3c219630e4302863a9a83d0efde889db";
brief = false;
}
{
name = "liblayout-0.2.10.zip";
md5 = "db60e4fde8dd6d6807523deb71ee34dc";
name = "boost_1_54_0.tar.bz2";
md5 = "15cb8c0803064faef0c4ddf5bc5ca279";
brief = false;
}
{
name = "bsh-2.0b1-src.tar.gz";
md5 = "ea570af93c284aa9e5621cd563f54f4d";
brief = false;
}
{
name = "cairo-1.10.2.tar.gz";
md5 = "f101a9e88b783337b20b2e26dfd26d5f";
brief = false;
}
{
name = "clucene-core-2.3.3.4.tar.gz";
md5 = "48d647fbd8ef8889e5a7f422c1bfda94";
brief = false;
}
{
name = "libcmis-0.4.1.tar.gz";
md5 = "22f8a85daf4a012180322e1f52a7563b";
brief = false;
}
{
name = "cppunit-1.13.1.tar.gz";
md5 = "ac4781e01619be13461bb2d562b94a7b";
brief = false;
}
{
name = "ConvertTextToNumber-1.3.2.oxt";
md5 = "451ccf439a36a568653b024534669971";
brief = false;
}
{
name = "curl-7.33.0.tar.bz2";
md5 = "57409d6bf0bd97053b8378dbe0cadcef";
brief = false;
}
{
name = "epm-3.7.tar.gz";
md5 = "3ade8cfe7e59ca8e65052644fed9fca4";
brief = false;
}
{
name = "expat-2.1.0.tar.gz";
md5 = "dd7dab7a5fea97d2a6a43f511449b7cd";
brief = false;
}
{
name = "fontconfig-2.8.0.tar.gz";
md5 = "77e15a92006ddc2adbb06f840d591c0e";
brief = false;
}
{
name = "crosextrafonts-20130214.tar.gz";
md5 = "368f114c078f94214a308a74c7e991bc";
brief = false;
}
{
name = "crosextrafonts-carlito-20130920.tar.gz";
md5 = "c74b7223abe75949b4af367942d96c7a";
brief = false;
}
{
name = "dejavu-fonts-ttf-2.33.zip";
md5 = "f872f4ac066433d8ff92f5e316b36ff9";
brief = false;
}
{
name = "gentiumbasic-fonts-1.10.zip";
md5 = "35efabc239af896dfb79be7ebdd6e6b9";
brief = false;
}
{
name = "liberation-fonts-ttf-1.07.3.tar.gz";
md5 = "b3174b11c2b6a341f5c99b31088bd67b";
brief = false;
}
{
name = "liberation-fonts-ttf-2.00.1.tar.gz";
md5 = "5c781723a0d9ed6188960defba8e91cf";
brief = false;
}
{
name = "LinLibertineG-20120116.zip";
md5 = "e7a384790b13c29113e22e596ade9687";
brief = false;
}
{
name = "open-sans-font-ttf-1.10.tar.gz";
md5 = "7a15edea7d415ac5150ea403e27401fd";
brief = false;
}
{
name = "pt-serif-font-1.0000W.tar.gz";
md5 = "c3c1a8ba7452950636e871d25020ce0d";
brief = false;
}
{
name = "source-code-font-1.009.tar.gz";
md5 = "0279a21fab6f245e85a6f85fea54f511";
brief = false;
}
{
name = "source-sans-font-1.036.tar.gz";
md5 = "1e9ddfe25ac9577da709d7b2ea36f939";
brief = false;
}
{
name = "freetype-2.4.8.tar.bz2";
md5 = "dbf2caca1d3afd410a29217a9809d397";
brief = false;
}
{
name = "graphite2-1.2.3.tgz";
md5 = "7042305e4208af4c2d5249d814ccce58";
brief = false;
}
{
name = "hsqldb_1_8_0.zip";
md5 = "17410483b5b5f267aa18b7e00b65e6e0";
brief = false;
}
{
name = "rhino1_5R5.zip";
md5 = "798b2ffdc8bcfe7bca2cf92b62caf685";
name = "hunspell-1.3.2.tar.gz";
md5 = "3121aaf3e13e5d88dfff13fb4a5f1ab8";
brief = false;
}
{
name = "bsh-2.0b1-src.tar.gz";
md5 = "ea570af93c284aa9e5621cd563f54f4d";
name = "hyphen-2.8.4.tar.gz";
md5 = "a2f6010987e1c601274ab5d63b72c944";
brief = false;
}
{
name = "xmlsec1-1.2.14.tar.gz";
md5 = "1f24ab1d39f4a51faf22244c94a6203f";
name = "icu4c-52_1-src.tgz";
md5 = "9e96ed4c1d99c0d14ac03c140f9f346c";
brief = false;
}
{
name = "librepository-1.1.6.zip";
md5 = "8ce2fcd72becf06c41f7201d15373ed9";
name = "flow-engine-0.9.4.zip";
md5 = "ba2930200c9f019c2d93a8c88c651a0f";
brief = false;
}
{
name = "flute-1.1.6.zip";
md5 = "d8bd5eed178db6e2b18eeed243f85aa8";
brief = false;
}
{
name = "libbase-1.1.6.zip";
md5 = "eeb2c7ddf0d302fba4bfc6e97eac9624";
brief = false;
}
{
name = "lp_solve_5.5.tar.gz";
md5 = "26b3e95ddf3d9c077c480ea45874b3b8";
name = "libfonts-1.1.6.zip";
md5 = "3bdf40c0d199af31923e900d082ca2dd";
brief = false;
}
{
name = "libloader-1.1.6.zip";
md5 = "97b2d4dba862397f446b217e2b623e71";
name = "libformula-1.1.7.zip";
md5 = "3404ab6b1792ae5f16bbd603bd1e1d03";
brief = false;
}
{
name = "graphite2-1.2.0.tgz";
md5 = "f5ef3f7f10fa8c3542c6a085a233080b";
name = "liblayout-0.2.10.zip";
md5 = "db60e4fde8dd6d6807523deb71ee34dc";
brief = false;
}
{
name = "jakarta-tomcat-5.0.30-src.tar.gz";
md5 = "2a177023f9ea8ec8bd00837605c5df1b";
name = "libloader-1.1.6.zip";
md5 = "97b2d4dba862397f446b217e2b623e71";
brief = false;
}
{
name = "hyphen-2.8.4.tar.gz";
md5 = "a2f6010987e1c601274ab5d63b72c944";
name = "librepository-1.1.6.zip";
md5 = "8ce2fcd72becf06c41f7201d15373ed9";
brief = false;
}
{
name = "libserializer-1.1.6.zip";
md5 = "f94d9870737518e3b597f9265f4e9803";
}
{
name = "commons-lang-2.3-src.tar.gz";
md5 = "2ae988b339daec234019a7066f96733e";
brief = false;
}
{
name = "libxml-1.1.7.zip";
md5 = "ace6ab49184e329db254e454a010f56d";
brief = false;
}
{
name = "commons-httpclient-3.1-src.tar.gz";
md5 = "2c9b0f83ed5890af02c0df1c1776f39b";
name = "sacjava-1.3.zip";
md5 = "39bb3fcea1514f1369fcfc87542390fd";
brief = false;
}
{
name = "commons-codec-1.3-src.tar.gz";
md5 = "af3c3acf618de6108d65fcdc92b492e1";
name = "jpegsrc.v8d.tar.gz";
md5 = "52654eb3b2e60c35731ea8fc87f1bd29";
brief = false;
}
{
name = "libformula-1.1.7.zip";
md5 = "3404ab6b1792ae5f16bbd603bd1e1d03";
name = "JLanguageTool-1.7.0.tar.bz2";
md5 = "b63e6340a02ff1cacfeadb2c42286161";
brief = false;
}
{
name = "lcms2-2.4.tar.gz";
md5 = "861ef15fa0bc018f9ddc932c4ad8b6dd";
brief = false;
}
{
name = "libexttextcat-3.4.3.tar.bz2";
md5 = "ae330b9493bd4503ac390106ff6060d7";
brief = false;
}
{
name = "liblangtag-0.5.1.tar.bz2";
md5 = "36271d3fa0d9dec1632029b6d7aac925";
brief = false;
}
{
name = "xmlsec1-1.2.14.tar.gz";
md5 = "1f24ab1d39f4a51faf22244c94a6203f";
brief = false;
}
{
name = "libxml2-2.9.1.tar.gz";
md5 = "9c0cfef285d5c4a5c80d00904ddab380";
brief = false;
}
{
name = "libxslt-1.1.28.tar.gz";
md5 = "9667bf6f9310b957254fdcf6596600b7";
brief = false;
}
{
name = "lp_solve_5.5.tar.gz";
md5 = "26b3e95ddf3d9c077c480ea45874b3b8";
brief = false;
}
{
name = "mariadb-native-client-1.0.0.tar.bz2";
md5 = "05f84c95b610c21c5fd510d10debcabf";
brief = false;
}
{
name = "libcmis-0.3.0.tar.gz";
md5 = "b2371dc7cf4811c9d32146eec913d296";
name = "mdds_0.10.3.tar.bz2";
md5 = "aa5ca9d1ed1082890835afab26400a39";
brief = false;
}
{
name = "mysql-connector-c++-1.1.0.tar.gz";
md5 = "0981bda6548a8c8233ffce2b6e4b2a23";
brief = false;
}
{
name = "mythes-1.2.3.tar.gz";
md5 = "46e92b68e31e858512b680b3b61dc4c1";
brief = false;
}
{
name = "neon-0.29.5.tar.gz";
md5 = "ff369e69ef0f0143beb5626164e87ae2";
brief = false;
}
{
name = "nss-3.15.3-with-nspr-4.10.2.tar.gz";
md5 = "06beb053e257d9e22641339c905c6eba";
brief = false;
}
{
name = "openldap-2.4.31.tgz";
md5 = "804c6cb5698db30b75ad0ff1c25baefd";
brief = false;
}
{
name = "openssl-1.0.1e.tar.gz";
md5 = "66bf6f10f060d561929de96f9dfe5b8c";
brief = false;
}
{
name = "liborcus-0.5.1.tar.bz2";
md5 = "ea2acaf140ae40a87a952caa75184f4d";
brief = false;
}
{
name = "pixman-0.24.4.tar.bz2";
md5 = "c63f411b3ad147db2bcce1bf262a0e02";
brief = false;
}
{
name = "libpng-1.5.10.tar.gz";
md5 = "9e5d864bce8f06751bbd99962ecf4aad";
brief = false;
}
{
name = "poppler-0.22.5.tar.gz";
md5 = "1cd27460f7e3379d1eb109cfd7bcdb39";
brief = false;
}
{
name = "postgresql-9.2.1.tar.bz2";
md5 = "c0b4799ea9850eae3ead14f0a60e9418";
brief = false;
}
{
name = "Python-3.3.3.tar.bz2";
md5 = "f3ebe34d4d8695bf889279b54673e10c";
brief = false;
}
{
name = "raptor2-2.0.9.tar.gz";
md5 = "4ceb9316488b0ea01acf011023cf7fff";
brief = false;
}
{
name = "rasqal-0.9.30.tar.gz";
md5 = "b12c5f9cfdb6b04efce5a4a186b8416b";
brief = false;
}
{
name = "redland-1.0.16.tar.gz";
md5 = "32f8e1417a64d3c6f2c727f9053f55ea";
brief = false;
}
{
name = "rhino1_5R5.zip";
md5 = "798b2ffdc8bcfe7bca2cf92b62caf685";
brief = false;
}
{
name = "swingExSrc.zip";
md5 = "35c94d2df8893241173de1d16b6034c0";
brief = false;
}
{
name = "flow-engine-0.9.4.zip";
md5 = "ba2930200c9f019c2d93a8c88c651a0f";
name = "ucpp-1.3.2.tar.gz";
md5 = "0168229624cfac409e766913506961a8";
brief = false;
}
{
name = "sacjava-1.3.zip";
md5 = "39bb3fcea1514f1369fcfc87542390fd";
name = "vigra1.6.0.tar.gz";
md5 = "d62650a6f908e85643e557a236ea989c";
brief = false;
}
{
name = "libwps-0.2.7.tar.bz2";
md5 = "d197bd6211669a2fa4ca648faf04bcb1";
name = "libwpd-0.9.9.tar.bz2";
md5 = "a3dcac551fae5ebbec16e844810828c4";
brief = false;
}
{
name = "libfonts-1.1.6.zip";
md5 = "3bdf40c0d199af31923e900d082ca2dd";
name = "libwpg-0.2.2.tar.bz2";
md5 = "b85436266b2ac91d351ab5684b181151";
brief = false;
}
{
name = "flute-1.1.6.zip";
md5 = "d8bd5eed178db6e2b18eeed243f85aa8";
name = "libwps-0.2.9.tar.bz2";
md5 = "46eb0e7f213ad61bd5dee0c494132cb0";
brief = false;
}
{
name = "xsltml_2.1.2.zip";
md5 = "a7983f859eafb2677d7ff386a023bc40";
brief = false;
}
{
name = "zlib-1.2.7.tar.bz2";
md5 = "2ab442d169156f34c379c968f3f482dd";
brief = false;
}
]

@ -8958,7 +8958,7 @@ let
inherit (perlPackages) ArchiveZip CompressZlib;
inherit (gnome) GConf ORBit2 gnome_vfs;
zip = zip.override { enableNLS = false; };
boost = boost149;
boost = boost155;
jdk = openjdk;
fontsConf = makeFontsConf {
fontDirectories = [
@ -8967,7 +8967,9 @@ let
};
clucene_core = clucene_core_2;
lcms = lcms2;
mdds = mdds_0_7_1;
harfbuzz = harfbuzz.override {
withIcu = true; withGraphite2 = true;
};
};
liferea = callPackage ../applications/networking/newsreaders/liferea { };

Loading…
Cancel
Save