Skip to content

Commit 10be97c

Browse files
committed
another approach
1 parent 79b8775 commit 10be97c

File tree

8 files changed

+133
-72
lines changed

8 files changed

+133
-72
lines changed

include/Make/Install.make

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ real-install: | $(DESTDIR) $(DESTDIR)$(INST_DIR) $(DESTDIR)$(UNIX_BIN)
102102
-rm $(DESTDIR)$(INST_DIR)/$(GRASS_NAME).tmp
103103
-rm $(DESTDIR)$(INST_DIR)/$(RESOURCE_PATHS)
104104
$(MAKE) $(STARTUP)
105+
106+
-rm $(DESTDIR)$(INST_DIR)/resource_paths.py
107+
-rm $(DESTDIR)$(INST_DIR)/$(RESOURCE_PATHS)
105108
$(MAKE) $(DESTDIR)$(INST_DIR)/$(RESOURCE_PATHS)
106109

107110
-rm $(DESTDIR)$(INST_DIR)/$(FONTCAP)
@@ -125,16 +128,22 @@ $(DESTDIR)$(INST_DIR) $(DESTDIR)$(UNIX_BIN):
125128
$(MAKE_DIR_CMD) $@
126129

127130
$(STARTUP): $(ARCH_DISTDIR)/$(GRASS_NAME).tmp
128-
sed -e 's#'@GRASS_PREFIX@'#'$(INST_DIR)'#g' \
129-
-e 's#'@LD_LIBRARY_PATH_VAR@'#'$(LD_LIBRARY_PATH_VAR)'#g' \
130-
-e 's#'@CONFIG_PROJSHARE@'#'$(PROJSHARE)'#g' \
131+
sed -e 's#'@GRASS_PYDIR@'#'$(INST_DIR)/etc/python'#g' \
131132
$< > $@
132133
-$(CHMOD) a+x $@
133134

134135
$(DESTDIR)$(INST_DIR)/$(RESOURCE_PATHS): $(ARCH_DISTDIR)/resource_paths.py
135-
sed -e 's#'@GRASS_PREFIX@'#'$(INST_DIR)'#g' \
136-
-e 's#'@GISBASE_INSTALL_PATH@'##g' \
137-
$< > $@
136+
sed \
137+
-e 's#'@CONFIG_PROJSHARE@'#$(PROJSHARE)#' \
138+
-e 's#'@GISBASE_INSTALL_PATH@'##' \
139+
-e 's#'@GRASS_PREFIX@'#$(INST_DIR)#' \
140+
-e 's#'@GRASS_VERSION_GIT@'#$(GRASS_VERSION_GIT)#' \
141+
-e 's#'@GRASS_VERSION_MAJOR@'#$(GRASS_VERSION_MAJOR)#' \
142+
-e 's#'@GRASS_VERSION_MINOR@'#$(GRASS_VERSION_MINOR)#' \
143+
-e 's#'@GRASS_VERSION_NUMBER@'#$(GRASS_VERSION_NUMBER)#' \
144+
-e 's#'@LD_LIBRARY_PATH_VAR@'#$(LD_LIBRARY_PATH_VAR)#' \
145+
-e 's#'@START_UP@'#$(GRASS_NAME)#' \
146+
$< > $@
138147

139148
define fix_gisbase
140149
sed -e 's#$(GISBASE)#$(INST_DIR)#g' $< > $@

lib/init/CMakeLists.txt

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ if(WITH_DOCS)
1111
endif()
1212

1313
# START_UP is the variable used in grass.py, grass.sh.in and grass.bat.in
14-
set(START_UP "grass")
14+
set(START_UP ${PROJECT_NAME_LOWER})
1515
if(WIN32)
1616
set(START_UP "${START_UP}.py")
1717
set(script_file_name "grass.bat")
@@ -21,21 +21,6 @@ else()
2121
set(script_input_file_name ${script_file_name}.sh.in)
2222
endif()
2323

24-
file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/bin BINARY_DIR)
25-
set(CONFIG_PROJSHARE)
26-
get_filename_component(PROJ_INSTALL_PREFIX ${PROJ_INCLUDE_DIRS} PATH)
27-
if(DEFINED ENV{PROJSHARE})
28-
message(WARNING "External PROJ directory not specified; default will be used")
29-
set(CONFIG_PROJSHARE "$ENV{PROJSHARE}")
30-
else()
31-
set(CONFIG_PROJSHARE "${PROJ_INSTALL_PREFIX}/share/proj")
32-
if(EXISTS ${CONFIG_PROJSHARE}/epsg)
33-
message(STATUS "PROJ directory ${CONFIG_PROJSHARE}")
34-
endif()
35-
endif()
36-
file(TO_NATIVE_PATH "${PROJ_INSTALL_PREFIX}/share/proj" PROJ_LIB)
37-
file(TO_NATIVE_PATH ${CONFIG_PROJSHARE} GRASS_PROJSHARE)
38-
3924
find_path(gdal_share_dir "gdal" PATH_SUFFIXES share)
4025
if(NOT gdal_share_dir)
4126
message(FATAL_ERROR "Cannot find share/gdal")
@@ -59,14 +44,11 @@ elseif(WIN32)
5944
endif()
6045

6146
# configure and install grass.py
62-
set(GRASS_PREFIX ${OUTDIR})
6347
set(GRASS_PYDIR ${GRASS_INSTALL_PYDIR})
6448
configure_file(grass.py ${OUTDIR}/${CMAKE_INSTALL_BINDIR}/${START_UP} @ONLY)
6549

66-
set(GRASS_PREFIX ${CMAKE_INSTALL_PREFIX})
6750
configure_file(grass.py ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} @ONLY)
6851
unset(GRASS_PYDIR)
69-
unset(GRASS_PREFIX)
7052

7153
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${START_UP}
7254
DESTINATION ${CMAKE_INSTALL_BINDIR})

lib/init/Makefile

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ include $(MODULE_TOPDIR)/include/Make/Compile.make
66
#for i18N support
77
PACKAGE ="grasslibs"
88

9-
START_UP=grass
9+
START_UP=$(GRASS_NAME)
1010

1111
EXTRA_CFLAGS = \
1212
-DD_LOCATION_NAME=\"$(DEFAULT_LOCATION)\" \
@@ -69,16 +69,7 @@ $(ARCH_BINDIR)/$(START_UP): grass.py
6969
endif
7070
rm -f $@
7171
sed \
72-
-e 's#@GISBASE_INSTALL_PATH@#$(RUN_GISBASE)#' \
73-
-e 's#@GRASS_VERSION_NUMBER@#$(GRASS_VERSION_NUMBER)#' \
74-
-e 's#@GRASS_VERSION_MAJOR@#$(GRASS_VERSION_MAJOR)#' \
75-
-e 's#@GRASS_VERSION_MINOR@#$(GRASS_VERSION_MINOR)#' \
76-
-e 's#@GRASS_VERSION_GIT@#$(GRASS_VERSION_GIT)#' \
77-
-e 's#@LD_LIBRARY_PATH_VAR@#$(LD_LIBRARY_PATH_VAR)#' \
78-
-e 's#@START_UP@#$(START_UP)#' \
79-
-e 's#@CONFIG_PROJSHARE@#$(PROJSHARE)#' \
80-
-e 's#@GRASS_PREFIX@#$(RUN_GISBASE)#' \
81-
-e 's#@GRASS_PYDIR@#etc/python#' \
72+
-e 's#@GRASS_PYDIR@#$(RUN_GISBASE)/etc/python#' \
8273
$< > $@
8374
chmod +x $@
8475

@@ -93,7 +84,6 @@ $(ARCH_DISTDIR)/$(START_UP).tmp: grass.py
9384
-e 's#@GRASS_CONFIG_DIR@#$(GRASS_CONFIG_DIR)#' \
9485
-e 's#@LD_LIBRARY_PATH_VAR@#$(LD_LIBRARY_PATH_VAR)#' \
9586
-e 's#@CONFIG_PROJSHARE@#$(PROJSHARE)#' \
96-
-e 's#@GRASS_PYDIR@#etc/python#' \
9787
$< > $@
9888

9989
$(ETC)/echo$(EXE) $(ETC)/run$(EXE): $(ETC)/%$(EXE): $(OBJDIR)/%.o

lib/init/grass.py

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,13 @@
8282
ENCODING = "UTF-8"
8383
print("Default locale not found, using UTF-8") # intentionally not translatable
8484

85-
# The "@...@" variables are being substituted during build process
86-
87-
CMD_NAME = "@START_UP@"
88-
GRASS_VERSION = "@GRASS_VERSION_NUMBER@"
89-
GRASS_VERSION_MAJOR = "@GRASS_VERSION_MAJOR@"
90-
GRASS_VERSION_MINOR = "@GRASS_VERSION_MINOR@"
91-
LD_LIBRARY_PATH_VAR = "@LD_LIBRARY_PATH_VAR@"
92-
CONFIG_PROJSHARE = os.environ.get("GRASS_PROJSHARE", "@CONFIG_PROJSHARE@")
85+
CMD_NAME = None
86+
GRASS_VERSION = None
87+
GRASS_VERSION_MAJOR = None
88+
GRASS_VERSION_MINOR = None
89+
LD_LIBRARY_PATH_VAR = None
90+
CONFIG_PROJSHARE = None
91+
GRASS_VERSION_GIT = None
9392

9493
# Get the system name
9594
WINDOWS = sys.platform.startswith("win")
@@ -1826,7 +1825,7 @@ def print_params(params) -> None:
18261825
val = grep("CC", linesplat)
18271826
sys.stdout.write("%s\n" % val[0].split("=")[1].strip())
18281827
elif arg == "revision":
1829-
sys.stdout.write("@GRASS_VERSION_GIT@\n")
1828+
sys.stdout.write(f"{GRASS_VERSION_GIT}\n")
18301829
elif arg == "svn_revision":
18311830
with open(gpath("etc", "VERSIONNUMBER")) as filerev:
18321831
linerev = filerev.readline().rstrip("\n")
@@ -2087,13 +2086,13 @@ def validate_cmdline(params: Parameters) -> None:
20872086

20882087
def find_grass_python_package() -> None:
20892088
"""Find path to grass package and add it to path"""
2090-
GRASS_PREFIX = "@GRASS_PREFIX@"
2089+
2090+
# The "@...@" variables are being substituted during build process
20912091

20922092
if "GRASS_PYDIR" in os.environ and len(os.getenv("GRASS_PYDIR")) > 0:
20932093
GRASS_PYDIR = os.path.normpath(os.environ["GRASS_PYDIR"])
20942094
else:
2095-
GRASS_PYDIR = os.path.normpath(os.path.join(GRASS_PREFIX, "@GRASS_PYDIR@"))
2096-
os.environ["GRASS_PYDIR"] = GRASS_PYDIR
2095+
GRASS_PYDIR = os.path.normpath("@GRASS_PYDIR@")
20972096

20982097
if os.path.exists(GRASS_PYDIR):
20992098
sys.path.append(GRASS_PYDIR)
@@ -2106,12 +2105,6 @@ def find_grass_python_package() -> None:
21062105
)
21072106
raise RuntimeError(msg)
21082107

2109-
from grass.app import resource_paths
2110-
2111-
resource_paths.set_resource_paths()
2112-
global GISBASE
2113-
GISBASE = resource_paths.GISBASE
2114-
21152108

21162109
def main() -> None:
21172110
"""The main function which does the whole setup and run procedure
@@ -2123,6 +2116,38 @@ def main() -> None:
21232116
# Subsequent functions are using _() calls and
21242117
# thus must be called only after Language has been set.
21252118
find_grass_python_package()
2119+
2120+
from grass.app.runtime import (
2121+
grass_exe_name,
2122+
grass_version_git,
2123+
ld_library_path_var,
2124+
RuntimePaths,
2125+
version,
2126+
version_major,
2127+
version_minor,
2128+
)
2129+
2130+
global \
2131+
CMD_NAME, \
2132+
GRASS_VERSION, \
2133+
GRASS_VERSION_MAJOR, \
2134+
GRASS_VERSION_MINOR, \
2135+
LD_LIBRARY_PATH_VAR, \
2136+
GRASS_VERSION_GIT, \
2137+
GISBASE, \
2138+
CONFIG_PROJSHARE
2139+
2140+
CMD_NAME = grass_exe_name
2141+
GRASS_VERSION = version
2142+
GRASS_VERSION_MAJOR = version_major
2143+
GRASS_VERSION_MINOR = version_minor
2144+
LD_LIBRARY_PATH_VAR = ld_library_path_var
2145+
GRASS_VERSION_GIT = grass_version_git
2146+
2147+
runtime_paths = RuntimePaths()
2148+
GISBASE = runtime_paths.gisbase
2149+
CONFIG_PROJSHARE = runtime_paths.config_projshare
2150+
21262151
grass_config_dir = create_grass_config_dir()
21272152
set_language(grass_config_dir)
21282153

python/grass/CMakeLists.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,33 @@ configure_file(__init__.py ${OUTDIR}/${PYDIR_GRASS}/ COPYONLY)
3333
configure_file(script/setup.py ${OUTDIR}/${PYDIR_GRASS}/script/setup.py
3434
COPYONLY)
3535

36+
37+
file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/bin BINARY_DIR)
38+
set(CONFIG_PROJSHARE)
39+
get_filename_component(PROJ_INSTALL_PREFIX ${PROJ_INCLUDE_DIRS} PATH)
40+
if(DEFINED ENV{PROJSHARE})
41+
message(WARNING "External PROJ directory not specified; default will be used")
42+
set(CONFIG_PROJSHARE "$ENV{PROJSHARE}")
43+
else()
44+
set(CONFIG_PROJSHARE "${PROJ_INSTALL_PREFIX}/share/proj")
45+
if(EXISTS ${CONFIG_PROJSHARE}/epsg)
46+
message(STATUS "PROJ directory ${CONFIG_PROJSHARE}")
47+
endif()
48+
endif()
49+
file(TO_NATIVE_PATH "${PROJ_INSTALL_PREFIX}/share/proj" PROJ_LIB)
50+
file(TO_NATIVE_PATH ${CONFIG_PROJSHARE} GRASS_PROJSHARE)
51+
3652
# configure and install resource_paths.py
3753
set(GRASS_PREFIX ${OUTDIR})
3854
set(GISBASE_INSTALL_PATH ${GISBASE_DIR})
55+
set(START_UP ${PROJECT_NAME_LOWER})
3956
configure_file(app/resource_paths.py ${OUTDIR}/${PYDIR_GRASS}/app/resource_paths.py @ONLY)
4057

4158
set(GRASS_PREFIX ${CMAKE_INSTALL_PREFIX})
4259
configure_file(app/resource_paths.py ${CMAKE_CURRENT_BINARY_DIR}/resource_paths.py @ONLY)
4360
unset(GISBASE_INSTALL_PATH)
4461
unset(GRASS_PREFIX)
62+
unset(START_UP)
4563

4664
set(pydir_targets ${PYDIRS} app)
4765
list(TRANSFORM pydir_targets REPLACE "/" "_")

python/grass/app/Makefile

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,15 @@ default: $(PYFILES) $(PYCFILES) $(DSTDIR)/resource_paths.py $(ARCH_DISTDIR)/reso
2222
$(DSTDIR)/resource_paths.py: resource_paths.py
2323
rm -f $@
2424
sed \
25-
-e 's#@GRASS_PREFIX@#$(RUN_GISBASE)#' \
25+
-e 's#@CONFIG_PROJSHARE@#$(PROJSHARE)#' \
2626
-e 's#@GISBASE_INSTALL_PATH@##' \
27+
-e 's#@GRASS_PREFIX@#$(RUN_GISBASE)#' \
28+
-e 's#@GRASS_VERSION_GIT@#$(GRASS_VERSION_GIT)#' \
29+
-e 's#@GRASS_VERSION_MAJOR@#$(GRASS_VERSION_MAJOR)#' \
30+
-e 's#@GRASS_VERSION_MINOR@#$(GRASS_VERSION_MINOR)#' \
31+
-e 's#@GRASS_VERSION_NUMBER@#$(GRASS_VERSION_NUMBER)#' \
32+
-e 's#@LD_LIBRARY_PATH_VAR@#$(LD_LIBRARY_PATH_VAR)#' \
33+
-e 's#@START_UP@#$(GRASS_NAME)#' \
2734
$< > $@
2835

2936
$(ARCH_DISTDIR)/resource_paths.py:

python/grass/app/resource_paths.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,13 @@
1313
1414
"""
1515

16-
import os
17-
18-
GRASS_PREFIX = None
19-
GISBASE = None
20-
21-
22-
def set_resource_paths():
23-
global GRASS_PREFIX, GISBASE
24-
25-
GRASS_PREFIX = "@GRASS_PREFIX@"
26-
27-
if "GISBASE" in os.environ and len(os.getenv("GISBASE")) > 0:
28-
GISBASE = os.path.normpath(os.environ["GISBASE"])
29-
else:
30-
GISBASE = os.path.normpath(os.path.join(GRASS_PREFIX, "@GISBASE_INSTALL_PATH@"))
31-
os.environ["GISBASE"] = GISBASE
16+
GRASS_VERSION = "@GRASS_VERSION_NUMBER@"
17+
GRASS_VERSION_MAJOR = "@GRASS_VERSION_MAJOR@"
18+
GRASS_VERSION_MINOR = "@GRASS_VERSION_MINOR@"
19+
LD_LIBRARY_PATH_VAR = "@LD_LIBRARY_PATH_VAR@"
20+
CONFIG_PROJSHARE = "@CONFIG_PROJSHARE@"
21+
GRASS_EXE_NAME = "@START_UP@"
22+
GRASS_VERSION_GIT = "@GRASS_VERSION_GIT@"
23+
24+
GRASS_PREFIX = "@GRASS_PREFIX@"
25+
GISBASE = "@GISBASE_INSTALL_PATH@"

python/grass/app/runtime.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,48 @@
1717
import subprocess
1818
import sys
1919

20+
import grass.app.resource_paths
21+
2022
# Get the system name
2123
WINDOWS = sys.platform.startswith("win")
2224
CYGWIN = sys.platform.startswith("cygwin")
2325
MACOS = sys.platform.startswith("darwin")
2426

2527

28+
version = grass.app.resource_paths.GRASS_VERSION
29+
version_major = grass.app.resource_paths.GRASS_VERSION_MAJOR
30+
version_minor = grass.app.resource_paths.GRASS_VERSION_MINOR
31+
ld_library_path_var = grass.app.resource_paths.LD_LIBRARY_PATH_VAR
32+
grass_exe_name = grass.app.resource_paths.GRASS_EXE_NAME
33+
grass_version_git = grass.app.resource_paths.GRASS_VERSION_GIT
34+
35+
36+
class RuntimePaths:
37+
def __init__(self, env=os.environ):
38+
self.env = env
39+
40+
def __getattr__(self, name):
41+
if name == "gisbase":
42+
return self.__get_dir("GISBASE")
43+
if name == "prefix":
44+
return self.__get_dir("GRASS_PREFIX")
45+
if name == "config_projshare":
46+
return self.env.get(
47+
"GRASS_PROJSHARE", grass.app.resource_paths.CONFIG_PROJSHARE
48+
)
49+
50+
def __get_dir(self, env_var):
51+
if env_var in self.env and len(self.env[env_var]) > 0:
52+
res = os.path.normpath(self.env[env_var])
53+
else:
54+
path = getattr(__import__("grass").app.resource_paths, env_var)
55+
res = os.path.normpath(
56+
os.path.join(grass.app.resource_paths.GRASS_PREFIX, path)
57+
)
58+
self.env[env_var] = res
59+
return res
60+
61+
2662
def get_grass_config_dir(major_version, minor_version, env):
2763
"""Get configuration directory
2864

0 commit comments

Comments
 (0)