diff options
author | makc <makc@FreeBSD.org> | 2015-06-10 17:25:32 +0800 |
---|---|---|
committer | makc <makc@FreeBSD.org> | 2015-06-10 17:25:32 +0800 |
commit | 8d1e3003707e7901ff040e3d831b1d5c9c046810 (patch) | |
tree | 53902f94024d27f3b8504f91122e3718c2c36d8b /games/golly | |
parent | 799eb133457af1ee3e8bc950f1029888ea14b31b (diff) | |
download | freebsd-ports-gnome-8d1e3003707e7901ff040e3d831b1d5c9c046810.tar.gz freebsd-ports-gnome-8d1e3003707e7901ff040e3d831b1d5c9c046810.tar.zst freebsd-ports-gnome-8d1e3003707e7901ff040e3d831b1d5c9c046810.zip |
games/golly:
- Update to 2.7
- Install everything to DATADIR and provide wrapper script to start golly
Diffstat (limited to 'games/golly')
-rw-r--r-- | games/golly/Makefile | 10 | ||||
-rw-r--r-- | games/golly/distinfo | 4 | ||||
-rw-r--r-- | games/golly/files/golly.in | 2 | ||||
-rw-r--r-- | games/golly/files/patch-CMakeLists.txt | 29 | ||||
-rw-r--r-- | games/golly/files/patch-wxhelp.cpp | 11 | ||||
-rw-r--r-- | games/golly/files/patch-wxmain.cpp | 11 | ||||
-rw-r--r-- | games/golly/files/patch-wxprefs.cpp | 30 | ||||
-rw-r--r-- | games/golly/files/patch-wxpython.cpp | 11 | ||||
-rw-r--r-- | games/golly/pkg-plist | 165 |
9 files changed, 90 insertions, 183 deletions
diff --git a/games/golly/Makefile b/games/golly/Makefile index 48355772cbd9..573d41a054af 100644 --- a/games/golly/Makefile +++ b/games/golly/Makefile @@ -1,9 +1,8 @@ # $FreeBSD$ PORTNAME= golly -PORTVERSION= 2.4 +PORTVERSION= 2.7 DISTVERSIONSUFFIX= -src -PORTREVISION= 3 CATEGORIES= games MASTER_SITES= SF/${PORTNAME}/${PORTNAME}/${PORTNAME}-${PORTVERSION} @@ -15,7 +14,14 @@ USE_CXXSTD= c++11 USE_WX= 3.0 WX_UNICODE= yes +CMAKE_SOURCE_PATH= ${WRKSRC}/gui-wx + DESKTOP_ENTRIES= "Golly" "${COMMENT}" "${PREFIX}/share/pixmaps/golly.xpm" \ "${PREFIX}/bin/golly" "Education;" "true" +SUB_FILES= golly + +post-install: + ${INSTALL_SCRIPT} ${WRKDIR}/golly ${STAGEDIR}/${PREFIX}/bin + .include <bsd.port.mk> diff --git a/games/golly/distinfo b/games/golly/distinfo index c5b5a95c17b3..bbdc50b7ed48 100644 --- a/games/golly/distinfo +++ b/games/golly/distinfo @@ -1,2 +1,2 @@ -SHA256 (golly-2.4-src.tar.gz) = 3c51ab00f1f36f30570a84b1ae24590dcbe59231815de31d2798e01440956a1b -SIZE (golly-2.4-src.tar.gz) = 2613548 +SHA256 (golly-2.7-src.tar.gz) = 9af30afd7b03b3eebcfaec088d67c495609aef72516d9ca8f076b62f32b5e17b +SIZE (golly-2.7-src.tar.gz) = 3881882 diff --git a/games/golly/files/golly.in b/games/golly/files/golly.in new file mode 100644 index 000000000000..b74fe75546cb --- /dev/null +++ b/games/golly/files/golly.in @@ -0,0 +1,2 @@ +#!/bin/sh +cd %%PREFIX%%/share/golly && ./golly $@ diff --git a/games/golly/files/patch-CMakeLists.txt b/games/golly/files/patch-CMakeLists.txt index ea5eaf01aa30..5afa3fd04026 100644 --- a/games/golly/files/patch-CMakeLists.txt +++ b/games/golly/files/patch-CMakeLists.txt @@ -1,23 +1,26 @@ ---- ./CMakeLists.txt.orig 2012-06-29 21:54:59.000000000 +0000 -+++ ./CMakeLists.txt 2012-12-31 11:43:49.541995237 +0000 -@@ -92,7 +92,9 @@ +--- gui-wx/CMakeLists.txt.orig 2015-05-11 19:32:36 UTC ++++ gui-wx/CMakeLists.txt +@@ -116,7 +116,8 @@ if(APPLE) endif() if(APPLE OR UNIX) # use same settings as in makefiles - add_definitions(-D_LARGE_FILES -O5) + add_definitions(-D_LARGE_FILES -DPYTHON_SHLIB=${PYTHON_LIBRARY} -+ -DPERL_SHLIB=${PERL_LIBRARY} -+ -DDATADIR="${CMAKE_INSTALL_PREFIX}/share/golly/" ) ++ -DPERL_SHLIB=${PERL_LIBRARY} ) endif() # workaround for wx2.9.3 wxAssert link errors, see http://trac.wxwidgets.org/ticket/12626 SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DwxDEBUG_LEVEL=0") -@@ -176,3 +178,9 @@ - target_link_libraries( bgolly ${VLD_LIBRARIES} ) - target_link_libraries( RuleTableToTree ${VLD_LIBRARIES} ) - endif() -+ +@@ -153,6 +154,13 @@ add_executable( bgolly + target_link_libraries( ${APP_NAME} gollybase ${wxWidgets_LIBRARIES} ${ZLIB_LIBRARIES} ) + target_link_libraries( bgolly gollybase ${ZLIB_LIBRARIES} ) + +if (UNIX) -+ install(TARGETS ${APP_NAME} bgolly RuleTableToTree RUNTIME DESTINATION bin) -+ install(DIRECTORY Help Patterns Rules Scripts DESTINATION share/golly) -+ install(FILES appicon.xpm DESTINATION share/pixmaps RENAME golly.xpm) ++ install(TARGETS bgolly RUNTIME DESTINATION bin) ++ install(TARGETS ${APP_NAME} RUNTIME DESTINATION share/golly) ++ install(DIRECTORY ../Help ../Patterns ../Rules ../Scripts DESTINATION share/golly) ++ install(FILES icons/appicon.xpm DESTINATION share/pixmaps RENAME golly.xpm) +endif() ++ + if(APPLE) + # create Info.plist (using Info.plist.in) and PkgInfo files inside .app bundle + add_custom_target( app_bundle diff --git a/games/golly/files/patch-wxhelp.cpp b/games/golly/files/patch-wxhelp.cpp deleted file mode 100644 index 52a88f65e03d..000000000000 --- a/games/golly/files/patch-wxhelp.cpp +++ /dev/null @@ -1,11 +0,0 @@ ---- ./wxhelp.cpp.orig 2012-06-12 18:04:43.000000000 +0000 -+++ ./wxhelp.cpp 2012-12-31 11:51:52.148991743 +0000 -@@ -1026,7 +1026,7 @@ - - } else if ( filepath.StartsWith(_("Help/")) ) { - // prepend location of Golly so user can open help while running a script -- wxString fullpath = gollydir + filepath; -+ wxString fullpath = wxString(DATADIR) + filepath; - LoadPage(fullpath); - - } else { diff --git a/games/golly/files/patch-wxmain.cpp b/games/golly/files/patch-wxmain.cpp deleted file mode 100644 index 70caafd0b477..000000000000 --- a/games/golly/files/patch-wxmain.cpp +++ /dev/null @@ -1,11 +0,0 @@ ---- ./wxmain.cpp.orig 2012-06-29 21:55:00.000000000 +0000 -+++ ./wxmain.cpp 2012-12-31 11:54:05.974993147 +0000 -@@ -933,7 +933,7 @@ - treectrl->Expand(id); - - // nicer to expand Perl & Python subdirs inside Scripts -- if ( dir == gollydir + _("Scripts") ) { -+ if ( dir == wxString(DATADIR) + _("Scripts") ) { - wxTreeItemId child; - wxTreeItemIdValue cookie; - child = treectrl->GetFirstChild(id, cookie); diff --git a/games/golly/files/patch-wxprefs.cpp b/games/golly/files/patch-wxprefs.cpp deleted file mode 100644 index 18e9321897da..000000000000 --- a/games/golly/files/patch-wxprefs.cpp +++ /dev/null @@ -1,30 +0,0 @@ ---- ./wxprefs.cpp.orig 2012-06-29 21:55:00.000000000 +0000 -+++ ./wxprefs.cpp 2012-12-31 11:36:29.488992923 +0000 -@@ -1761,7 +1761,7 @@ - InitPaths(); // init datadir, tempdir and prefspath - InitAlgorithms(); // init algoinfo data - -- rulesdir = gollydir + wxT("Rules"); -+ rulesdir = wxString(DATADIR) + wxT("Rules"); - rulesdir += wxFILE_SEP_PATH; - - userrules = datadir + wxT("Rules"); -@@ -1770,12 +1770,12 @@ - downloaddir = datadir + wxT("Downloads"); - downloaddir += wxFILE_SEP_PATH; - -- opensavedir = gollydir + PATT_DIR; -- rundir = gollydir + SCRIPT_DIR; -- icondir = gollydir; -- choosedir = gollydir; -- patterndir = gollydir + PATT_DIR; -- scriptdir = gollydir + SCRIPT_DIR; -+ opensavedir = wxString(DATADIR) + PATT_DIR; -+ rundir = wxString(DATADIR) + SCRIPT_DIR; -+ icondir = wxString(DATADIR); -+ choosedir = wxString(DATADIR); -+ patterndir = wxString(DATADIR) + PATT_DIR; -+ scriptdir = wxString(DATADIR) + SCRIPT_DIR; - - // init the text editor to something reasonable - #ifdef __WXMSW__ diff --git a/games/golly/files/patch-wxpython.cpp b/games/golly/files/patch-wxpython.cpp deleted file mode 100644 index 810fa31ffec9..000000000000 --- a/games/golly/files/patch-wxpython.cpp +++ /dev/null @@ -1,11 +0,0 @@ ---- ./wxpython.cpp.orig 2012-06-12 18:04:44.000000000 +0000 -+++ ./wxpython.cpp 2012-12-31 11:36:29.542997130 +0000 -@@ -3026,7 +3026,7 @@ - - // build absolute path to Scripts/Python folder and add to Python's - // import search list so scripts can import glife from anywhere -- wxString scriptsdir = gollydir + _("Scripts"); -+ wxString scriptsdir = wxString(DATADIR) + _("Scripts"); - scriptsdir += wxFILE_SEP_PATH; - scriptsdir += _("Python"); - // convert any \ to \\ and then convert any ' to \' diff --git a/games/golly/pkg-plist b/games/golly/pkg-plist index de224d9fedb6..74e618e21e75 100644 --- a/games/golly/pkg-plist +++ b/games/golly/pkg-plist @@ -1,12 +1,10 @@ -bin/RuleTableToTree bin/bgolly bin/golly share/golly/Help/Algorithms/Generations.html share/golly/Help/Algorithms/HashLife.html share/golly/Help/Algorithms/JvN.html share/golly/Help/Algorithms/QuickLife.html -share/golly/Help/Algorithms/RuleTable.html -share/golly/Help/Algorithms/RuleTree.html +share/golly/Help/Algorithms/RuleLoader.html share/golly/Help/Lexicon/lex.htm share/golly/Help/Lexicon/lex_1.htm share/golly/Help/Lexicon/lex_a.htm @@ -49,12 +47,10 @@ share/golly/Help/edit.html share/golly/Help/file.html share/golly/Help/formats.html share/golly/Help/help.html -share/golly/Help/icon_format.bmp share/golly/Help/index.html share/golly/Help/intro.html share/golly/Help/layer.html share/golly/Help/mouse.html -share/golly/Help/multicolor.bmp share/golly/Help/perl.html share/golly/Help/problems.html share/golly/Help/python.html @@ -104,6 +100,7 @@ share/golly/Patterns/Generations/SediMental.mcl share/golly/Patterns/Generations/Steeplechase.mcl share/golly/Patterns/Generations/Transers.mcl share/golly/Patterns/Generations/What-a-mess.mcl +share/golly/Patterns/HashLife/Replicator-p237228340.mc.gz share/golly/Patterns/HashLife/broken-lines.mc share/golly/Patterns/HashLife/catacryst.mc share/golly/Patterns/HashLife/gotts-dots.mc @@ -112,6 +109,7 @@ share/golly/Patterns/HashLife/hashlife-oddity2.mc share/golly/Patterns/HashLife/hexadecimal.mc.gz share/golly/Patterns/HashLife/jagged.mc share/golly/Patterns/HashLife/jagged2.mc +share/golly/Patterns/HashLife/loafer-gun-p8388608-linear.mc.gz share/golly/Patterns/HashLife/logarithmic-width.mc share/golly/Patterns/HashLife/metacatacryst.mc share/golly/Patterns/HashLife/metapixel-galaxy.mc.gz @@ -138,6 +136,7 @@ share/golly/Patterns/JvN/codon5-auto-retract.rle share/golly/Patterns/JvN/construction-arm-demo.rle share/golly/Patterns/JvN/counter-demo.rle share/golly/Patterns/JvN/golly-constructor.rle +share/golly/Patterns/JvN/partial-constructor.mc.gz share/golly/Patterns/JvN/read-arm-demo.rle share/golly/Patterns/JvN/sphinx-midpoint.mc.gz share/golly/Patterns/JvN/sphinx-spark.mc.gz @@ -181,6 +180,8 @@ share/golly/Patterns/Life/Guns/7-in-a-row-Cordership-V-gun.rle share/golly/Patterns/Life/Guns/Cordership-gun-p784.rle share/golly/Patterns/Life/Guns/golly-ticker.rle share/golly/Patterns/Life/Guns/gun-p165mwss.rle +share/golly/Patterns/Life/Guns/loafer-gun-p210.rle +share/golly/Patterns/Life/Guns/p59-gun-with-Snark-reflectors.rle share/golly/Patterns/Life/Guns/p690-PT-Cordership-gun.rle share/golly/Patterns/Life/Guns/pseudo-p34-gun.rle share/golly/Patterns/Life/Guns/vacuum-cleaner.rle @@ -354,111 +355,64 @@ share/golly/Patterns/WireWorld/gate-XOR.mcl share/golly/Patterns/WireWorld/memory-cell.mcl share/golly/Patterns/WireWorld/primes.mc share/golly/Patterns/WireWorld/unary-multiplier.mcl -share/golly/Rules/AbsoluteTurmite_0N21S10E00S01W11N2.icons -share/golly/Rules/AbsoluteTurmite_0N21S10E00S01W11N2.tree -share/golly/Rules/AbsoluteTurmite_0S11W11E21S21W00N0.icons -share/golly/Rules/AbsoluteTurmite_0S11W11E21S21W00N0.tree -share/golly/Rules/AbsoluteTurmite_1N10S11S30N21W01N11S20E1.icons -share/golly/Rules/AbsoluteTurmite_1N10S11S30N21W01N11S20E1.tree -share/golly/Rules/BBM-Margolus-emulated.colors -share/golly/Rules/BBM-Margolus-emulated.tree -share/golly/Rules/Banks-I.table -share/golly/Rules/Banks-II.colors -share/golly/Rules/Banks-II.table -share/golly/Rules/Banks-III.table -share/golly/Rules/Banks-IV.table -share/golly/Rules/BriansBrain.tree -share/golly/Rules/Byl-Loop.colors -share/golly/Rules/Byl-Loop.table -share/golly/Rules/Byl-Loop.tree -share/golly/Rules/Caterpillars.tree -share/golly/Rules/Chou-Reggia-1.table -share/golly/Rules/Chou-Reggia-1.tree -share/golly/Rules/Chou-Reggia-2.table -share/golly/Rules/Chou-Reggia-2.tree -share/golly/Rules/Chou-Reggia.colors -share/golly/Rules/Codd.colors -share/golly/Rules/Codd.table -share/golly/Rules/Codd2.colors -share/golly/Rules/Codd2.table -share/golly/Rules/CrittersMargolus_emulated.colors -share/golly/Rules/CrittersMargolus_emulated.tree -share/golly/Rules/DLA-Margolus-emulated.colors -share/golly/Rules/DLA-Margolus-emulated.tree -share/golly/Rules/Devore.colors -share/golly/Rules/Devore.table -share/golly/Rules/Ed-rep.colors -share/golly/Rules/Ed-rep.tree -share/golly/Rules/Evoloop-finite.table -share/golly/Rules/Evoloop.colors -share/golly/Rules/Evoloop.table -share/golly/Rules/Evoloop.tree -share/golly/Rules/HPP.colors -share/golly/Rules/HPP.icons -share/golly/Rules/HPP.table -share/golly/Rules/HPPMargolus_emulated.colors -share/golly/Rules/HPPMargolus_emulated.tree -share/golly/Rules/Langtons-Ant.colors -share/golly/Rules/Langtons-Ant.icons -share/golly/Rules/Langtons-Ant.tree -share/golly/Rules/Langtons-Loops.colors -share/golly/Rules/Langtons-Loops.table -share/golly/Rules/Langtons-Loops.tree -share/golly/Rules/LangtonsAnt_LLRR.icons -share/golly/Rules/LangtonsAnt_LLRR.tree -share/golly/Rules/Life.tree -share/golly/Rules/LifeHistory.colors -share/golly/Rules/LifeHistory.icons -share/golly/Rules/LifeHistory.table -share/golly/Rules/LifeOnTheEdge.icons -share/golly/Rules/LifeOnTheEdge.tree -share/golly/Rules/LifeOnTheSlope.colors -share/golly/Rules/LifeOnTheSlope.icons -share/golly/Rules/LifeOnTheSlope.tree -share/golly/Rules/Perrier.colors -share/golly/Rules/Perrier.table -share/golly/Rules/SDSR-Loop.colors -share/golly/Rules/SDSR-Loop.table -share/golly/Rules/SDSR-Loop.tree -share/golly/Rules/Sand-Margolus-emulated.colors -share/golly/Rules/Sand-Margolus-emulated.tree -share/golly/Rules/Sand-square4cyclic_emulated.colors -share/golly/Rules/Sand-square4cyclic_emulated.tree -share/golly/Rules/StarWars.tree -share/golly/Rules/TMGasMargolus_emulated.colors -share/golly/Rules/TMGasMargolus_emulated.tree +share/golly/Rules/AbsoluteTurmite_0N21S10E00S01W11N2.rule +share/golly/Rules/AbsoluteTurmite_0S11W11E21S21W00N0.rule +share/golly/Rules/AbsoluteTurmite_1N10S11S30N21W01N11S20E1.rule +share/golly/Rules/BBM-Margolus-emulated.rule +share/golly/Rules/Banks-I.rule +share/golly/Rules/Banks-II.rule +share/golly/Rules/Banks-III.rule +share/golly/Rules/Banks-IV.rule +share/golly/Rules/BriansBrain.rule +share/golly/Rules/Byl-Loop.rule +share/golly/Rules/Caterpillars.rule +share/golly/Rules/Chou-Reggia-1.rule +share/golly/Rules/Chou-Reggia-2.rule +share/golly/Rules/Codd.rule +share/golly/Rules/Codd2.rule +share/golly/Rules/CrittersMargolus_emulated.rule +share/golly/Rules/DLA-Margolus-emulated.rule +share/golly/Rules/Devore.rule +share/golly/Rules/Ed-rep.rule +share/golly/Rules/Evoloop-finite.rule +share/golly/Rules/Evoloop.rule +share/golly/Rules/HPP.rule +share/golly/Rules/HPPMargolus_emulated.rule +share/golly/Rules/Langtons-Ant.rule +share/golly/Rules/Langtons-Loops.rule +share/golly/Rules/LangtonsAnt_LLRR.rule +share/golly/Rules/Life.rule +share/golly/Rules/LifeHistory.rule +share/golly/Rules/LifeOnTheEdge.rule +share/golly/Rules/LifeOnTheSlope.rule +share/golly/Rules/Perrier.rule +share/golly/Rules/SDSR-Loop.rule +share/golly/Rules/Sand-Margolus-emulated.rule +share/golly/Rules/Sand-square4cyclic_emulated.rule +share/golly/Rules/StarWars.rule +share/golly/Rules/TMGasMargolus_emulated.rule share/golly/Rules/TableGenerators/make-ruletable.cpp -share/golly/Rules/Tempesti.colors -share/golly/Rules/Tempesti.table +share/golly/Rules/Tempesti.rule share/golly/Rules/TreeGenerators/LifeOnTheEdge.cpp share/golly/Rules/TreeGenerators/LifeOnTheSlope.cpp share/golly/Rules/TreeGenerators/RuleTreeGen.cpp share/golly/Rules/TreeGenerators/RuleTreeGen.java share/golly/Rules/TreeGenerators/RuleTreeGen.pl share/golly/Rules/TreeGenerators/RuleTreeGen.py -share/golly/Rules/TriTurmite_120010.icons -share/golly/Rules/TriTurmite_120010.tree -share/golly/Rules/TripATronMargolus_emulated.colors -share/golly/Rules/TripATronMargolus_emulated.tree -share/golly/Rules/Turmite_1202822111121111812a0281282.icons -share/golly/Rules/Turmite_1202822111121111812a0281282.tree -share/golly/Rules/Turmite_121181121020.icons -share/golly/Rules/Turmite_121181121020.tree -share/golly/Rules/Turmite_180121020081.icons -share/golly/Rules/Turmite_180121020081.tree -share/golly/Rules/Turmite_181181121010.icons -share/golly/Rules/Turmite_181181121010.tree -share/golly/Rules/WireWorld.colors -share/golly/Rules/WireWorld.icons -share/golly/Rules/WireWorld.table -share/golly/Rules/WireWorld.tree -share/golly/Rules/Worm-1040512.table -share/golly/Rules/Worm-1042015.table -share/golly/Rules/Worm-1042020.table -share/golly/Rules/Worm-1252121.table -share/golly/Rules/Worm-1525115.table -share/golly/Rules/Worm-complement.table -share/golly/Rules/Worm.icons +share/golly/Rules/TriTurmite_120010.rule +share/golly/Rules/TripATronMargolus_emulated.rule +share/golly/Rules/Turmite_1202822111121111812a0281282.rule +share/golly/Rules/Turmite_121181121020.rule +share/golly/Rules/Turmite_180121020081.rule +share/golly/Rules/Turmite_181181121010.rule +share/golly/Rules/WireWorld.rule +share/golly/Rules/Worm-1040512.rule +share/golly/Rules/Worm-1042015.rule +share/golly/Rules/Worm-1042020.rule +share/golly/Rules/Worm-1252121.rule +share/golly/Rules/Worm-1525115.rule +share/golly/Rules/Worm-complement.rule +share/golly/Rules/Worm-shared.rule share/golly/Scripts/Perl/density.pl share/golly/Scripts/Perl/envelope.pl share/golly/Scripts/Perl/giffer.pl @@ -482,12 +436,15 @@ share/golly/Scripts/Python/Rule-Generators/Langtons-Ant-gen.py share/golly/Scripts/Python/Rule-Generators/RuleTableToTree.py share/golly/Scripts/Python/Rule-Generators/TriTurmite-gen.py share/golly/Scripts/Python/Rule-Generators/Turmite-gen.py +share/golly/Scripts/Python/Rule-Generators/icon-exporter.py +share/golly/Scripts/Python/Rule-Generators/icon-importer.py share/golly/Scripts/Python/Rule-Generators/make-ruletree.py share/golly/Scripts/Python/bricklayer.py share/golly/Scripts/Python/density.py share/golly/Scripts/Python/draw-lines.py share/golly/Scripts/Python/envelope.py share/golly/Scripts/Python/flood-fill.py +share/golly/Scripts/Python/glife/BuiltinIcons.py share/golly/Scripts/Python/glife/EmulateHexagonal.py share/golly/Scripts/Python/glife/EmulateMargolus.py share/golly/Scripts/Python/glife/EmulateOneDimensional.py @@ -505,6 +462,7 @@ share/golly/Scripts/Python/glife/gun46.py share/golly/Scripts/Python/glife/herschel.py share/golly/Scripts/Python/glife/text.py share/golly/Scripts/Python/goto.py +share/golly/Scripts/Python/goto_expression.py share/golly/Scripts/Python/gun-demo.py share/golly/Scripts/Python/heisenburp.py share/golly/Scripts/Python/invert.py @@ -524,4 +482,5 @@ share/golly/Scripts/Python/shift.py share/golly/Scripts/Python/slide-show.py share/golly/Scripts/Python/tile-with-clip.py share/golly/Scripts/Python/tile.py +share/golly/golly share/pixmaps/golly.xpm |