aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/config
diff options
context:
space:
mode:
authorMihai Moldovan <ionic@ionic.de>2018-01-05 23:21:52 +0100
committerMihai Moldovan <ionic@ionic.de>2018-01-05 23:21:52 +0100
commit3c81899718e3429e45381beaaba58d4886a5537c (patch)
tree509b9d44cc872ba45df0b3c2afc74e90ca0cc6e4 /nx-X11/config
parente13e31f752c0b204f964ee1df272a6b31ce51189 (diff)
parent1c1431c0ff41afa8221ea8a1e0d4514746ebbaa3 (diff)
downloadnx-libs-3c81899718e3429e45381beaaba58d4886a5537c.tar.gz
nx-libs-3c81899718e3429e45381beaaba58d4886a5537c.tar.bz2
nx-libs-3c81899718e3429e45381beaaba58d4886a5537c.zip
Merge branch 'Ionic-bugfix/rpath' into 3.6.x
Attributes GH PR #614: https://github.com/ArcticaProject/nx-libs/pull/614 Fixes: ArcticaProject/nx-libs#610
Diffstat (limited to 'nx-X11/config')
-rw-r--r--nx-X11/config/cf/Imake.rules64
-rw-r--r--nx-X11/config/cf/Imake.tmpl2
-rw-r--r--nx-X11/config/cf/README1
-rw-r--r--nx-X11/config/cf/cross.def2
-rw-r--r--nx-X11/config/cf/gnuLib.rules21
-rw-r--r--nx-X11/config/cf/lnxLib.rules26
6 files changed, 104 insertions, 12 deletions
diff --git a/nx-X11/config/cf/Imake.rules b/nx-X11/config/cf/Imake.rules
index 06b78993b..8fc344ac5 100644
--- a/nx-X11/config/cf/Imake.rules
+++ b/nx-X11/config/cf/Imake.rules
@@ -21,6 +21,7 @@ XCOMM ---------------------------------------------------------------------
* _MUseCat (a,b,c)
* ProgramTargetName (target)
* HostProgramTargetName (target)
+ * ProgramRelinkName (target)
* RunProgram (progvar,options)
* RunProgramWithSetup (setup,progvar,options)
* RemoveFile (file)
@@ -44,6 +45,7 @@ XCOMM ---------------------------------------------------------------------
* BuildIncludes (srclist,dstsubdir,dstupdir)
* LinkRule (program,options,objects,libraries)
* HostLinkRule (program,options,objects,libraries)
+ * LinkInstallRule (program,options,objects,libraries)
* NoCmpScript (target)
* NoConfigRec (target)
* NormalProgramTarget (program,objects,deplibs,locallibs,syslibs)
@@ -56,6 +58,7 @@ XCOMM ---------------------------------------------------------------------
* ComplexProgramTarget_3 (program,locallib,syslib)
* ServerTargetWithFlags (server,subdirs,objects,libs,syslibs,flags)
* ServerTarget (server,subdirs,objects,libs,syslibs)
+ * LibX11Links ()
* MoveToBakFile (file)
* RMoveToBakFile (file)
* RanLibrary (args)
@@ -76,6 +79,7 @@ XCOMM ---------------------------------------------------------------------
* InstallNonExecFileNoClobber (file,dest)
* InstallNonExec (file,dest)
* InstallProgramWithFlags (program,dest,flags)
+ * RelinkProgram (program,objects,libs,syslibs)
* InstallProgram (program,dest)
* InstallScript (program,dest)
* InstallNamedProg (srcname,dstname,dest)
@@ -316,6 +320,10 @@ XCOMM special target for clearmake @@\
#define HostProgramTargetName(target)target
#endif
+#ifndef ProgramRelinkName
+#define ProgramRelinkName(target)Concat(target,-relink)
+#endif
+
#ifndef RunProgram
#define RunProgram(progvar,options) $(progvar) options
#endif
@@ -610,6 +618,14 @@ $(CCLINK) -o program options objects libraries $(EXTRA_LOAD_FLAGS)
#endif /* LinkRule */
/*
+ * LinkRule - link a program, suitable for later installation
+ */
+#ifndef LinkInstallRule
+#define LinkInstallRule(program,options,objects,libraries) \
+$(CCLINK) -o program options objects libraries $(EXTRA_INSTALL_LOAD_FLAGS)
+#endif /* LinkInstallRule */
+
+/*
* HostLinkRule - link a utility to be used on the build host
* (differs from LinkRule if cross compiling)
*/
@@ -1101,13 +1117,14 @@ CplusplusProgramTargetHelper(program,SRCS10,OBJS10,DEPLIBS10,locallib,syslib)
#ifndef ServerTargetWithFlags
#define ServerTargetWithFlags(server,subdirs,objects,libs,syslibs,flags) @@\
AllTarget(ProgramTargetName(server)) @@\
+AllTarget(ProgramRelinkName(server)) @@\
ProgramTargetName(server): subdirs objects libs @@\
MoveToBakFile($@) @@\
- LinkRule($@,$(LDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\
+ LinkRule($@,$(SERVERLDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\
@@\
Concat(load,server): @@\
MoveToBakFile(ProgramTargetName(server)) @@\
- LinkRule(ProgramTargetName(server),$(LDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\
+ LinkRule(ProgramTargetName(server),$(SERVERLDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\
@@\
loadX:: Concat(load,server) @@\
@@\
@@ -1118,10 +1135,12 @@ PurifyLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
ProofProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
ProofLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
@@\
+RelinkProgram(ProgramTargetName(server),objects,libs,syslibs) @@\
InstallProgramWithFlags(server,$(BINDIR),flags) @@\
@@\
clean:: @@\
- RemoveFile(ProgramTargetName(server))
+ RemoveFile(ProgramTargetName(server)) @@\
+ RemoveFile(ProgramRelinkName(server))
#endif /* ServerTargetWithFlags */
/*
@@ -1132,6 +1151,28 @@ clean:: @@\
ServerTargetWithFlags(server,subdirs,objects,libs,syslibs,$(_NOOP_))
#endif /* ServerTarget */
+
+/*
+ * Creates libX11 compat symlinks to enable execution of rpath-dependent
+ * programs.
+ */
+#ifndef LibX11Links
+#define LibX11Links() @@\
+AllTarget(libX11links) @@\
+libX11links: @@\
+ $(LN) libNX_X11.so $(BUILDLIBDIR)/libX11.so @@\
+ $(LN) libNX_X11.so.6 $(BUILDLIBDIR)/libX11.so.6 @@\
+ $(LN) libNX_X11.so.6.3.0 $(BUILDLIBDIR)/libX11.so.6.3.0 @@\
+ touch libX11links @@\
+ @@\
+clean:: @@\
+ RemoveFile($(BUILDLIBDIR)/libX11.so) @@\
+ RemoveFile($(BUILDLIBDIR)/libX11.so.6) @@\
+ RemoveFile($(BUILDLIBDIR)/libX11.so.6.3.0) @@\
+ RemoveFile(libX11links)
+#endif /* LibX11Links */
+
+
#if DoRanlibCmd
#define RanLibrary(args) $(RANLIB) args
#else
@@ -1586,17 +1627,28 @@ install:: file @@\
/*
+ * RelinkProgram - relinks an executable program in preparation of installation
+ */
+#ifndef RelinkProgram
+#define RelinkProgram(program,objects,libs,syslibs) @@\
+ProgramRelinkName(program): program @@\
+ MoveToBakFile($@) @@\
+ LinkInstallRule($@,$(SERVERLDOPTIONS),objects,libs $(LDLIBS) syslibs)
+#endif /* RelinkProgram */
+
+
+/*
* InstallProgramWithFlags - generate rules to install an executable program
* using given install flags.
*/
#ifndef InstallProgramWithFlags
#if StripInstalledPrograms && CrossCompiling
-#define InstallProgramWithFlags(program,dest,flags) @@\
-InstallTarget(install,ProgramTargetName(program),$(INSTPGMFLAGS) flags,dest) @@\
+#define InstallProgramWithFlags(program,dest,flags) @@\
+InstallTarget(install,ProgramRelinkName(program),$(INSTPGMFLAGS) flags,dest) @@\
CrossStripCmd $(DESTDIR)dest/ProgramTargetName(program)
#else
#define InstallProgramWithFlags(program,dest,flags) @@\
-InstallTarget(install,ProgramTargetName(program),$(INSTPGMFLAGS) flags,dest)
+InstallTarget(install,ProgramRelinkName(program),$(INSTPGMFLAGS) flags,dest)
#endif /* StripInstalledPrograms && CrossCompiling */
#endif /* InstallProgramWithFlags */
diff --git a/nx-X11/config/cf/Imake.tmpl b/nx-X11/config/cf/Imake.tmpl
index 5d989d1e0..285b53480 100644
--- a/nx-X11/config/cf/Imake.tmpl
+++ b/nx-X11/config/cf/Imake.tmpl
@@ -1846,6 +1846,7 @@ MODLDCOMBINEFLAGS = ModuleLdCombineFlags
STD_DEFINES = StandardDefines $(PROJECT_DEFINES)
SETITIMER_DEFINES = HasSetitimerDefines
EXTRA_LOAD_FLAGS = ExtraLoadFlags
+EXTRA_INSTALL_LOAD_FLAGS = ExtraInstallLoadFlags
EXTRA_LDOPTIONS = ExtraLoadOptions
EXTRA_LIBRARIES = MallocLibraries ExtraLibraries
TAGS = TagsCmd
@@ -1995,6 +1996,7 @@ XEXT_EXTRA_DEFINES =
LDPRELIB = LdPreLib $(INSTALLED_LIBS)
LDPOSTLIB = LdPostLib
LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) $(EXTRA_LDOPTIONS) $(THREADS_LDFLAGS) $(LOCAL_LDFLAGS) $(LDPRELIBS)
+ SERVERLDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) $(EXTRA_LDOPTIONS) $(THREADS_LDFLAGS) $(LOCAL_LDFLAGS)
CXXLDOPTIONS = $(CXXDEBUGFLAGS) $(CXXOPTIONS) $(EXTRA_LDOPTIONS) $(THREADS_CXXLDFLAGS) $(LOCAL_LDFLAGS) $(LDPRELIBS)
LDLIBS = $(LDPOSTLIBS) $(THREADS_LIBS) $(SYS_LIBRARIES) $(EXTRA_LIBRARIES)
diff --git a/nx-X11/config/cf/README b/nx-X11/config/cf/README
index aca6b3933..59a08f45c 100644
--- a/nx-X11/config/cf/README
+++ b/nx-X11/config/cf/README
@@ -37,6 +37,7 @@ Imake.tmpl provides defaults for the following variables:
ExtraFilesToClean extra files to remove on make clean
ExtraLibraries system-specific libraries need to link
ExtraLoadFlags system-specific loader flags
+ ExtraInstallLoadFlags system-specific loader flags for later installation
FileManSuffix man suffix for file format pages
FilesToClean files to delete in make clean
FortranCmd command to run Fortran compiler
diff --git a/nx-X11/config/cf/cross.def b/nx-X11/config/cf/cross.def
index ee3767c4f..d1b737fcc 100644
--- a/nx-X11/config/cf/cross.def
+++ b/nx-X11/config/cf/cross.def
@@ -27,6 +27,8 @@
#define RanlibCmd /opt/Embedix/tools/bin/arm-linux-ranlib
#undef ExtraLoadFlags
#define ExtraLoadFlags
+#undef ExtraInstallLoadFlags
+#define ExtraInstallLoadFlags
#define FbNoPixelAddrCode
#undef TermcapLibrary
#define TermcapLibrary -ltermcap
diff --git a/nx-X11/config/cf/gnuLib.rules b/nx-X11/config/cf/gnuLib.rules
index 7b057c1d0..5dee4280b 100644
--- a/nx-X11/config/cf/gnuLib.rules
+++ b/nx-X11/config/cf/gnuLib.rules
@@ -40,11 +40,18 @@ XCOMM XXX To rpath or not to rpath...
#endif
#ifndef RpathLoadFlags
#if UseRpath
-#define RpathLoadFlags -Wl,-rpath=$(USRLIBDIRPATH)
+#define RpathLoadFlags -Wl,--enable-new-dtags -Wl,-rpath=\$$ORIGIN/$(BUILDLIBDIR)
#else
#define RpathLoadFlags /**/
#endif
#endif
+#ifndef RpathInstallLoadFlags
+#if UseRpath
+#define RpathInstallLoadFlags -Wl,--enable-new-dtags -Wl,-rpath=$(USRLIBDIRPATH)
+#else
+#define RpathInstallLoadFlags /**/
+#endif
+#endif
#ifndef LibraryRpathLoadFlags
#define LibraryRpathLoadFlags RpathLoadFlags
#endif
@@ -60,9 +67,17 @@ XCOMM XXX To rpath or not to rpath...
#ifndef ExtraLoadFlags
#ifdef UseInstalled
XCOMM XXX Maybe superfluous.
-#define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link=$(USRLIBDIRPATH)
+#define ExtraLoadFlags RpathLoadFlags -Wl,--enable-new-dtags -Wl,-rpath-link=$(USRLIBDIRPATH)
+#else
+#define ExtraLoadFlags RpathLoadFlags -Wl,--enable-new-dtags -Wl,-rpath-link=\$$ORIGIN/$(BUILDLIBDIR)
+#endif
+#endif
+#ifndef ExtraInstallLoadFlags
+#ifdef UseInstalled
+XCOMM XXX Maybe superfluous.
+#define ExtraInstallLoadFlags RpathInstallLoadFlags -Wl,--enable-new-dtags -Wl,-rpath-link=$(USRLIBDIRPATH)
#else
-#define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link=$(BUILDLIBDIR)
+#define ExtraInstallLoadFlags RpathInstallLoadFlags -Wl,--enable-new-dtags -Wl,-rpath-link=\$$ORIGIN/$(BUILDLIBDIR)
#endif
#endif
diff --git a/nx-X11/config/cf/lnxLib.rules b/nx-X11/config/cf/lnxLib.rules
index e415db8f1..5b89cdd96 100644
--- a/nx-X11/config/cf/lnxLib.rules
+++ b/nx-X11/config/cf/lnxLib.rules
@@ -51,11 +51,18 @@
# endif
#ifndef RpathLoadFlags
#if UseRpath
-#define RpathLoadFlags -Wl,-rpath,$(USRLIBDIRPATH)
+#define RpathLoadFlags -Wl,--enable-new-dtags -Wl,-rpath,\$$ORIGIN/$(BUILDLIBDIR)
#else
#define RpathLoadFlags /**/
#endif
#endif
+#ifndef RpathInstallLoadFlags
+#if UseRpath
+#define RpathInstallLoadFlags -Wl,--enable-new-dtags -Wl,-rpath,$(USRLIBDIRPATH)
+#else
+#define RpathInstallLoadFlags /**/
+#endif
+#endif
#ifndef LibraryRpathLoadFlags
#define LibraryRpathLoadFlags RpathLoadFlags
#endif
@@ -72,15 +79,28 @@
# if LinuxBinUtilsMajorVersion >= 26
# ifdef UseInstalled
# if LinuxBinUtilsMajorVersion < 27
-# define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link,$(USRLIBDIRPATH)
+# define ExtraLoadFlags RpathLoadFlags -Wl,--enable-new-dtags -Wl,-rpath-link,$(USRLIBDIRPATH)
# endif
# else
-# define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link,$(BUILDLIBDIR)
+# define ExtraLoadFlags RpathLoadFlags -Wl,--enable-new-dtags -Wl,-rpath-link,\$$ORIGIN/$(BUILDLIBDIR)
# endif
# else
# define ExtraLoadFlags RpathLoadFlags
# endif
# endif
+# ifndef ExtraInstallLoadFlags
+# if LinuxBinUtilsMajorVersion >= 26
+# ifdef UseInstalled
+# if LinuxBinUtilsMajorVersion < 27
+# define ExtraInstallLoadFlags RpathInstallLoadFlags -Wl,--enable-new-dtags -Wl,-rpath-link,$(USRLIBDIRPATH)
+# endif
+# else
+# define ExtraInstallLoadFlags RpathInstallLoadFlags -Wl,--enable-new-dtags -Wl,-rpath-link,\$$ORIGIN/$(BUILDLIBDIR)
+# endif
+# else
+# define ExtraInstallLoadFlags RpathInstallLoadFlags
+# endif
+# endif
# ifndef HardCodeLibdirFlag
# define HardCodeLibdirFlag RpathLoadFlags
# endif