Files
gcc/libgm2/libm2pim/Makefile.am
T
Gaius Mulley 05652ac4e8 modula-2 module registration process seems to fail with shared libraries [PR108261]
The commit adds pathnames to modula-2 which in turn appears in any
external symbol.  This is necessary to allow different dialects of
libraries to coexist (different implementations of SYSTEM and Storage
for example in libm2pim and libm2iso).  It also makes it easier to
debug as the library name forms part of the external mangled name.
By default pathnames are not user facing.  This commit fixes
PR108261.

gcc/ChangeLog:

	PR modula2/108261
	* doc/gm2.texi (-fm2-pathname): New option documented.
	(-fm2-pathnameI): New option documented.
	(-fm2-prefix=): New option documented.
	(-fruntime-modules=): Update default module list.

gcc/m2/ChangeLog:

	PR modula2/108261
	* Make-lang.in (GM2-COMP-BOOT-DEFS): DynamicStringPath.def
	remove.  DynamicPath.def add.
	(GM2-COMP-BOOT-MODS): DynamicStringPath.mod remove.
	DynamicPath.mod add.
	* Make-maintainer.in (BUILD-BOOT-PPG-H): New dependency.
	(m2/gm2-ppg-boot/$(SRC_PREFIX)%.o): $(BUILD-BOOT-PPG-H) Add
	dependency.
	(PGE-DEF): New definition.
	(BUILD-BOOT-PG-H): New dependency.
	(m2/gm2-pg-boot/$(SRC_PREFIX)%.o): $(BUILD-BOOT-PG-H) Add
	dependency.
	(BUILD-BOOT-PGE-H): New dependency.
	(m2/gm2-pge-boot/$(SRC_PREFIX)%.o): $(BUILD-BOOT-PGE-H) Add
	dependency.
	(GM2PATH): Add pathname entries.
	(m2/boot-bin/mc-devel$(exeext)): Add m2/mc-boot-ch/Gm2rtsdummy.o
	dependency.
	(m2/boot-bin/mc-opt$(exeext)): Fix -I path.
	* gm2-compiler/DynamicStringPath.def: Renamed module to
	DynamicPath.
	(GetUserPath): Remove.
	(GetSystemPath): Remove.
	(SetUserPath): Remove.
	(SetSystemPath): Remove.
	(DumpPath): New procedure definition.
	* gm2-compiler/DynamicStringPath.mod: Renamed module to
	DynamicPath.
	(GetUserPath): Remove.
	(GetSystemPath): Remove.
	(SetUserPath): Remove.
	(SetSystemPath): Remove.
	(DumpPath): Remove Debugging conditional.
	* gm2-compiler/M2AsmUtil.mod: Import EqualArray, NulName and
	GetLibName.
	(Debugging): New declaration.
	(GetFullSymName): Re-implemented to prefix (mange) libname
	to any extern variable/procedure which is IsExportQualified.
	* gm2-compiler/M2Comp.mod (qprintLibName): New procedure.
	* gm2-compiler/M2Graph.mod (resolveImports): Add libname.
	* gm2-compiler/M2Options.def (SetM2Prefix): New procedure.
	(GetM2Prefix): New procedure function.
	(SetM2PathName): New procedure.
	(GetM2PathName): New procedure function.
	* gm2-compiler/M2Options.mod: (SetM2Prefix): New procedure implemented.
	(GetM2Prefix): New procedure function implemented.
	(SetM2PathName): New procedure implemented.
	(GetM2PathName): New procedure function implemented.
	(RuntimeModuleOverride): Set to DefaultRuntimeModuleOverride.
	* gm2-compiler/M2Quads.mod: Import GetLibName.
	(SafeRequestSym) Pass result of GetLibName to RequestDependant.
	(callRequestDependant): Add libname as a parameter.
	(BuildM2InitFunction): Add libname as a parameter.
	(BuildM2FiniFunction): Add libname as a parameter.
	(BuildM2CtorFunction): Add libname as a parameter.
	* gm2-compiler/M2Scaffold.mod (LookupModuleSym): Set LibName
	if a definition source was found.
	* gm2-compiler/M2Search.def (FindSourceFile): Add named library parameter.
	(FindSourceDefFile): Add named library parameter.
	(FindSourceModFile): Add named library parameter.
	* gm2-compiler/M2Search.mod (FindSourceFile): Reimplement.
	(FindSourceDefFile): Add named library parameter.
	(FindSourceModFile): Add named library parameter.
	* gm2-compiler/SymbolTable.def (MakeProcedureCtorExtern): Add
	libname parameter.
	(PutLibName): New procedure.
	(GetLibName): New procedure function.
	* gm2-compiler/SymbolTable.mod (MakeProcedureCtorExtern): Add
	libname parameter.
	(GenName): Add libname parameter.
	(InitCtorFields): Add moduleSym as a parameter.
	(PutCtorExtern): Add libname parameter to GenName.
	* gm2-gcc/init.cc (_M2_DynamicStringPath_init): Rename function...
	(_M2_DynamicPath_init): ...to this.
	(_M2_PathName_init): Added.
	* gm2-gcc/m2decl.cc (m2decl_DeclareM2linkStaticInitialization):
	Add m2pim as the manged component of the exported symbol.
	(m2decl_DeclareM2linkForcedModuleInitOrder): Add m2pim mangle prefix.
	* gm2-gcc/m2options.h (M2Options_SetM2Prefix): New function.
	(M2Options_GetM2Prefix): New function.
	(M2Options_SetM2PathName): New function.
	(M2Options_GetM2PathName): New function.
	* gm2-lang.cc (push_back_Ipath): New function.
	(add_one_import_path): New function.
	(gm2_langhook_handle_option): Record -I component.  Call
	SetM2PathName when -fm2-pathname= is seen.  Record -fm2-pathnameI
	component.  Call SetM2Prefix when -fm2-prefix= is seen.
	(gm2_langhook_post_options): Iterative over pathname entries
	and call SetM2PathName, SetSearchPath as appropriate.
	* gm2-libs-iso/M2RTS.def (ConstructModules): Add libname parameter.
	(DeconstructModules): Add libname parameter.
	(RegisterModule): Add libname parameter.
	(RequestDependant): Add libname parameter.
	* gm2-libs-iso/M2RTS.mod (ConstructModules): Add libname parameter.
	(DeconstructModules): Add libname parameter.
	(RegisterModule): Add libname parameter.
	(RequestDependant): Add libname parameter.
	* gm2-libs-min/M2RTS.def (ConstructModules): Add libname parameter.
	(DeconstructModules): Add libname parameter.
	(RegisterModule): Add libname parameter.
	(RequestDependant): Add libname parameter.
	* gm2-libs-min/M2RTS.mod (ConstructModules): Add libname parameter.
	(DeconstructModules): Add libname parameter.
	(RegisterModule): Add libname parameter.
	(RequestDependant): Add libname parameter.
	* gm2-libs/M2Dependent.def (ConstructModules): Add libname parameter.
	(DeconstructModules): Add libname parameter.
	(RegisterModule): Add libname parameter.
	(RequestDependant): Add libname parameter.
	* gm2-libs/M2Dependent.mod (ConstructModules): Add libname parameter.
	(DeconstructModules): Add libname parameter.
	(RegisterModule): Add libname parameter.
	(RequestDependant): Add libname parameter.
	* gm2-libs/M2RTS.def (ConstructModules): Add libname parameter.
	(DeconstructModules): Add libname parameter.
	(RegisterModule): Add libname parameter.
	(RequestDependant): Add libname parameter.
	* gm2-libs/M2RTS.mod (ConstructModules): Add libname parameter.
	(DeconstructModules): Add libname parameter.
	(RegisterModule): Add libname parameter.
	(RequestDependant): Add libname parameter.
	* gm2-libs/RTint.mod (FindVector): Rename variables.
	(initInputVector): Rename variables.
	(initOutputVector): Rename variables.
	(InitTimeVector): Rename variables.
	(FindVectorNo): Rename variables.
	(FindPendingVector): Rename variables.
	(ReArmTimeVector): Rename variables.
	(GetTimeVector): Rename variables.
	(AttachVector): Rename variables.
	(AttachVector): Rename variables.
	(IncludeVector): Rename variables.
	(ExcludeVector): Rename variables.
	(AddFd): Rename variables.
	(AddFd): Rename variables.
	(DumpPendingQueue): Rename variables.
	(stop): Remove.
	(activatePending): Rename variables.
	(Listen): Rename variables.
	* gm2-libs/libc.def (snprintf): New function.
	* gm2-libs/sckt.def: Change all exported identifiers to be
	export qualified.
	* gm2spec.cc (push_back_Ipath): New function.
	(add_m2_I_path): New function.
	(lang_specific_driver): Skip -fm2-pathname= and remember pathname.
	Skip -I and record the path and current pathname.  Call add_m2_I_path.
	* lang-specs.h: Replace %{I*} with %{fm2-pathname*}.
	* lang.opt (-fm2-pathname=): New entry.
	(-fm2-pathname): New entry.
	(-fm2-prefix=): New entry.
	* mc-boot-ch/GUnixArgs.cc (_M2_UnixArgs_dep): New function.
	(_M2_UnixArgs_ctor::_M2_UnixArgs_ctor): New method.
	* mc-boot-ch/Glibc.c (libc_snprintf): New function.
	* mc-boot-ch/m2rts.h (M2RTS_RequestDependant): Changed prototype.
	(M2RTS_RegisterModule): Changed prototype.
	* mc-boot/GDynamicStrings.c: Rebuild.
	* mc-boot/GFIO.c: Rebuild.
	* mc-boot/GIndexing.c: Rebuild.
	* mc-boot/GM2Dependent.c: Rebuild.
	* mc-boot/GM2Dependent.h: Rebuild.
	* mc-boot/GM2EXCEPTION.c: Rebuild.
	* mc-boot/GM2RTS.c: Rebuild.
	* mc-boot/GM2RTS.h: Rebuild.
	* mc-boot/GPushBackInput.c: Rebuild.
	* mc-boot/GRTExceptions.c: Rebuild.
	* mc-boot/GRTint.c: Rebuild.
	* mc-boot/GStdIO.c: Rebuild.
	* mc-boot/GStringConvert.c: Rebuild.
	* mc-boot/GSysStorage.c: Rebuild.
	* mc-boot/Gdecl.c: Rebuild.
	* mc-boot/Gkeyc.c: Rebuild.
	* mc-boot/Glibc.h: Rebuild.
	* mc-boot/GmcComment.c: Rebuild.
	* mc-boot/GmcComp.c: Rebuild.
	* mc-boot/GmcDebug.c: Rebuild.
	* mc-boot/GmcMetaError.c: Rebuild.
	* mc-boot/GmcStack.c: Rebuild.
	* mc-boot/GnameKey.c: Rebuild.
	* mc-boot/GsymbolKey.c: Rebuild.
	* pge-boot/GASCII.c: Rebuild.
	* pge-boot/GArgs.c: Rebuild.
	* pge-boot/GAssertion.c: Rebuild.
	* pge-boot/GDebug.c: Rebuild.
	* pge-boot/GDynamicStrings.c: Rebuild.
	* pge-boot/GFIO.c: Rebuild.
	* pge-boot/GIO.c: Rebuild.
	* pge-boot/GIndexing.c: Rebuild.
	* pge-boot/GLists.c: Rebuild.
	* pge-boot/GM2Dependent.c: Rebuild.
	* pge-boot/GM2Dependent.h: Rebuild.
	* pge-boot/GM2EXCEPTION.c: Rebuild.
	* pge-boot/GM2RTS.c: Rebuild.
	* pge-boot/GM2RTS.h: Rebuild.
	* pge-boot/GNameKey.c: Rebuild.
	* pge-boot/GNumberIO.c: Rebuild.
	* pge-boot/GOutput.c: Rebuild.
	* pge-boot/GPushBackInput.c: Rebuild.
	* pge-boot/GRTExceptions.c: Rebuild.
	* pge-boot/GSFIO.c: Rebuild.
	* pge-boot/GStdIO.c: Rebuild.
	* pge-boot/GStorage.c: Rebuild.
	* pge-boot/GStrCase.c: Rebuild.
	* pge-boot/GStrIO.c: Rebuild.
	* pge-boot/GStrLib.c: Rebuild.
	* pge-boot/GSymbolKey.c: Rebuild.
	* pge-boot/GSysExceptions.c (_M2_SysExceptions_finish): Rename this...
	(_M2_SysExceptions_fini): ... to this.
	* pge-boot/GSysStorage.c: Rebuild.
	(_M2_SysStorage_finish): Rename this...
	(_M2_SysStorage_fini): ... to this.
	* pge-boot/GUnixArgs.cc: New file.
	* pge-boot/Gbnflex.c (_M2_bnflex_finish): Rename this...
	(_M2_bnflex_fini): ... to this.
	* pge-boot/Gerrno.c (_M2_errno_finish): Rename this...
	(_M2_errno_fini): ... to this.
	* pge-boot/Glibc.c (libc_snprintf): New function.
	* pge-boot/Glibc.h (libc_snprintf): New prototype.
	* pge-boot/Gpge.c (_M2_pge_finish): Rename this...
	(_M2_pge_fini): ... to this.
	* pge-boot/Gtermios.cc (_M2_termios_finish): Rename this...
	(_M2_termios_fini): ... to this.
	* pge-boot/main.c (_M2_RTExceptions_finish): Rename this...
	(_M2_RTExceptions_fini): ... to this.
	(_M2_M2EXCEPTION_finish): Rename this...
	(_M2_M2EXCEPTION_fini): ... to this.
	(_M2_M2RTS_finish): Rename this...
	(_M2_M2RTS_fini): ... to this.
	(_M2_SysExceptions_finish): Rename this...
	(_M2_SysExceptions_fini): ... to this.
	(_M2_StrLib_finish): Rename this...
	(_M2_StrLib_fini): ... to this.
	(_M2_errno_finish): Rename this...
	(_M2_errno_fini): ... to this.
	(_M2_termios_finish): Rename this...
	(_M2_termios_fini): ... to this.
	(_M2_IO_finish): Rename this...
	(_M2_IO_fini): ... to this.
	(_M2_StdIO_finish): Rename this...
	(_M2_StdIO_fini): ... to this.
	(_M2_Debug_finish): Rename this...
	(_M2_Debug_fini): ... to this.
	(_M2_SysStorage_finish): Rename this...
	(_M2_SysStorage_fini): ... to this.
	(_M2_Storage_finish): Rename this...
	(_M2_Storage_fini): ... to this.
	(_M2_StrIO_finish): Rename this...
	(_M2_StrIO_fini): ... to this.
	(_M2_DynamicStrings_finish): Rename this...
	(_M2_DynamicStrings_fini): ... to this.
	(_M2_Assertion_finish): Rename this...
	(_M2_Assertion_fini): ... to this.
	(_M2_Indexing_finish): Rename this...
	(_M2_Indexing_fini): ... to this.
	(_M2_NameKey_finish): Rename this...
	(_M2_NameKey_fini): ... to this.
	(_M2_NumberIO_finish): Rename this...
	(_M2_NumberIO_fini): ... to this.
	(_M2_PushBackInput_finish): Rename this...
	(_M2_PushBackInput_fini): ... to this.
	(_M2_SymbolKey_finish): Rename this...
	(_M2_SymbolKey_fini): ... to this.
	(_M2_UnixArgs_finish): Rename this...
	(_M2_UnixArgs_fini): ... to this.
	(_M2_FIO_finish): Rename this...
	(_M2_FIO_fini): ... to this.
	(_M2_SFIO_finish): Rename this...
	(_M2_SFIO_fini): ... to this.
	(_M2_StrCase_finish): Rename this...
	(_M2_StrCase_fini): ... to this.
	(_M2_bnflex_finish): Rename this...
	(_M2_bnflex_fini): ... to this.
	(_M2_Lists_finish): Rename this...
	(_M2_Lists_fini): ... to this.
	(_M2_Args_finish): Rename this...
	(_M2_Args_fini): ... to this.
	(_M2_Output_finish): Rename this...
	(_M2_Output_fini): ... to this.
	(_M2_pge_finish): Rename this...
	(_M2_pge_fini): ... to this.
	* plugin/m2rte.cc (m2_runtime_error_calls): Change all runtime
	procedure names to their name mangled counterparts.
	* gm2-libs-iso/wrapsock.c: Removed.
	* gm2-libs-iso/wraptime.c: Removed.
	* mc-boot/Gpth.h: Removed.
	* gm2-compiler/PathName.def: New file.
	* gm2-compiler/PathName.mod: New file.

libgm2/ChangeLog:

	PR modula2/108261
	* libm2cor/KeyBoardLEDs.cc (EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(KeyBoardLEDs_SwitchScroll): EXPORT.
	(KeyBoardLEDs_SwitchNum): EXPORT.
	(KeyBoardLEDs_SwitchCaps): EXPORT.
	(KeyBoardLEDs_SwitchLeds): EXPORT.
	(_M2_KeyBoardLEDs_init): M2EXPORT.
	(_M2_KeyBoardLEDs_finish): M2EXPORT.
	(_M2_KeyBoardLEDs_dep): M2EXPORT.
	* libm2cor/Makefile.am (libm2cor_la_M2FLAGS): Define
	path names.
	* libm2cor/Makefile.in: Rebuild.
	* libm2iso/ErrnoCategory.cc (EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(ErrnoCategory_IsErrnoHard): EXPORT.
	(ErrnoCategory_IsErrnoSoft): EXPORT.
	(ErrnoCategory_UnAvailable): EXPORT.
	(ErrnoCategory_GetOpenResults): EXPORT.
	(_M2_ErrnoCategory_init): M2EXPORT.
	(_M2_ErrnoCategory_fini): M2EXPORT.
	(_M2_ErrnoCategory_dep): M2EXPORT.
	(_M2_ErrnoCategory_ctor): M2EXPORT.
	* libm2iso/Makefile.am (libm2iso_la_M2FLAGS): Define
	path names.
	* libm2iso/Makefile.in: Rebuild.
	* libm2iso/RTco.cc (EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(newSem): Add module libname prefix to HaltC.
	(currentThread): Remove variable and replace with a function.
	(never): Add module libname prefix to HaltC.
	(initThread): Add module libname prefix to HaltC.
	* libm2iso/m2rts.h (str): New define.
	(M2RTS_RequestDependant): Change to the mangled name equivalent.
	(M2RTS_RegisterModule): Change to the mangled name equivalent.
	(m2iso_M2RTS_RequestDependant): Add libname parameter.
	(m2iso_M2RTS_RegisterModule): Add libname parameter.
	(m2pim_M2RTS_RegisterModule): Add libname parameter.
	(_M2_M2RTS_init): Rename this...
	(m2iso_M2_M2RTS_init): ...to this.
	(M2RTS_ConstructModules): Change to the mangled name equivalent.
	(M2RTS_Terminate): Change to the mangled name equivalent.
	(M2RTS_DeconstructModules): Change to the mangled name equivalent.
	(m2iso_M2RTS_ConstructModules): Add libname parameter.
	(m2iso_M2RTS_Terminate): Add libname parameter.
	(m2iso_M2RTS_DeconstructModules): Add libname parameter.
	(M2RTS_HaltC): Rename this...
	(m2iso_M2RTS_HaltC): ...to this.
	* libm2iso/wrapsock.c (EXPORT): New define.
	(IMPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(m2iso_M2RTS_RequestDependant): Add prototype.
	(wrapsock_clientOpen): EXPORT.
	(wrapsock_clientOpenIP): EXPORT.
	(wrapsock_getClientPortNo): EXPORT.
	(wrapsock_getClientHostname): EXPORT.
	(wrapsock_getClientSocketFd): EXPORT.
	(wrapsock_getClientIP): EXPORT.
	(wrapsock_getPushBackChar): EXPORT.
	(wrapsock_setPushBackChar): EXPORT.
	(wrapsock_getSizeOfClientInfo): EXPORT.
	(_M2_wrapsock_init): M2EXPORT.
	(_M2_wrapsock_fini): M2EXPORT.
	(ctor): M2EXPORT.  New function.
	* libm2iso/wraptime.c: Rename to...
	* libm2iso/wraptime.cc: ...this.
	(EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(wraptime_InitTimeval): EXPORT.
	(wraptime_KillTimeval): EXPORT.
	(wraptime_InitTimezone): EXPORT.
	(wraptime_KillTimezone): EXPORT.
	(wraptime_InitTM): EXPORT.
	(wraptime_KillTM): EXPORT.
	(wraptime_gettimeofday): EXPORT.
	(wraptime_settimeofday): EXPORT.
	(wraptime_GetFractions): EXPORT.
	(wraptime_localtime_r): EXPORT.
	(wraptime_GetYear): EXPORT.
	(wraptime_GetMonth): EXPORT.
	(wraptime_GetDay): EXPORT.
	(wraptime_GetHour): EXPORT.
	(wraptime_GetMinute): EXPORT.
	(wraptime_GetSecond): EXPORT.
	(wraptime_GetSummerTime): EXPORT.
	(wraptime_GetDST): EXPORT.
	(wraptime_SetTimezone): EXPORT.
	(wraptime_SetTimeval): EXPORT.
	(_M2_wraptime_init): M2EXPORT.
	(_M2_wraptime_fini): M2EXPORT.
	(ctor): M2EXPORT.  New function.
	* libm2log/Makefile.am (libm2log_la_M2FLAGS): Define
	path names.
	* libm2log/Makefile.in:
	* libm2min/Makefile.am (libm2min_la_M2FLAGS): Define
	path names.
	* libm2min/Makefile.in:
	* libm2pim/Makefile.am (libm2pim_la_M2FLAGS): Define
	path names.
	* libm2pim/Makefile.in:
	* libm2pim/Selective.cc (EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(Selective_Select): EXPORT.
	(Selective_InitTime): EXPORT.
	(Selective_GetTime): EXPORT.
	(Selective_SetTime): EXPORT.
	(Selective_KillTime): EXPORT.
	(Selective_InitSet): EXPORT.
	(Selective_KillSet): EXPORT.
	(Selective_FdZero): EXPORT.
	(Selective_FdSet): EXPORT.
	(Selective_FdClr): EXPORT.
	(Selective_FdIsSet): EXPORT.
	(Selective_GetTimeOfDay): EXPORT.
	(Selective_MaxFdsPlusOne): EXPORT.
	(Selective_WriteCharRaw): EXPORT.
	(Selective_ReadCharRaw): EXPORT.
	(_M2_Selective_init): M2EXPORT.
	(_M2_Selective_fini): M2EXPORT.
	(_M2_Selective_dep): M2EXPORT.
	(_M2_Selective_ctor): M2EXPORT.
	* libm2pim/SysExceptions.cc (EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(SysExceptions_InitExceptionHandlers): EXPORT.
	(_M2_SysExceptions_init): M2EXPORT.
	(_M2_SysExceptions_fini): M2EXPORT.
	(_M2_SysExceptions_dep): M2EXPORT.
	(_M2_SysExceptions_ctor): M2EXPORT.
	* libm2pim/UnixArgs.cc (EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(UnixArgs_GetArgC): EXPORT.
	(UnixArgs_GetArgV): EXPORT.
	(UnixArgs_GetEnvV): EXPORT.
	(_M2_UnixArgs_init): M2EXPORT.
	(_M2_UnixArgs_fini): M2EXPORT.
	(_M2_UnixArgs_dep): M2EXPORT.
	(_M2_UnixArgs_ctor): M2EXPORT.
	* libm2pim/cgetopt.cc (EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(cgetopt_getopt): EXPORT.
	(cgetopt_getopt_long): EXPORT.
	(cgetopt_getopt_long_only): EXPORT.
	(cgetopt_InitOptions): EXPORT.
	(cgetopt_KillOptions): EXPORT.
	(cgetopt_SetOption): EXPORT.
	(cgetopt_GetLongOptionArray): EXPORT.
	(_M2_cgetopt_init): M2EXPORT.
	(_M2_cgetopt_fini): M2EXPORT.
	(_M2_cgetopt_dep): M2EXPORT.
	(_M2_cgetopt_ctor): M2EXPORT.
	* libm2pim/dtoa.cc (EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(dtoa_strtod): EXPORT.
	(dtoa_calcmaxsig): EXPORT.
	(dtoa_calcdecimal): EXPORT.
	(dtoa_calcsign): EXPORT.
	(dtoa_dtoa): EXPORT.
	(_M2_dtoa_init): M2EXPORT.
	(_M2_dtoa_fini): M2EXPORT.
	(_M2_dtoa_dep): M2EXPORT.
	(_M2_dtoa_ctor): M2EXPORT.
	* libm2pim/errno.cc (EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(errno_geterrno): EXPORT.
	(_M2_errno_init): M2EXPORT.
	(_M2_errno_fini): M2EXPORT.
	(_M2_errno_dep): M2EXPORT.
	(_M2_errno_ctor): M2EXPORT.
	* libm2pim/ldtoa.cc (EXPORT): New define.
	(IMPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(dtoa_calcmaxsig): EXPORT.
	(dtoa_calcdecimal): EXPORT.
	(dtoa_calcsign): EXPORT.
	(ldtoa_strtold): EXPORT.
	(ldtoa_ldtoa): EXPORT.
	(_M2_ldtoa_init): M2EXPORT.
	(_M2_ldtoa_fini): M2EXPORT.
	(_M2_ldtoa_dep): M2EXPORT.
	(_M2_ldtoa_ctor): M2EXPORT.
	* libm2pim/sckt.cc (EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(tcpServerEstablishPort): EXPORT.
	(tcpServerEstablish): EXPORT.
	(tcpServerAccept): EXPORT.
	(tcpServerPortNo): EXPORT.
	(tcpServerSocketFd): EXPORT.
	(getLocalIP): EXPORT.
	(tcpServerIP): EXPORT.
	(tcpServerClientIP): EXPORT.
	(tcpServerClientPortNo): EXPORT.
	(tcpClientSocket): EXPORT.
	(tcpClientSocketIP): EXPORT.
	(tcpClientConnect): EXPORT.
	(tcpClientPortNo): EXPORT.
	(tcpClientSocketFd): EXPORT.
	(tcpClientIP): EXPORT.
	(_M2_sckt_init): M2EXPORT.
	(_M2_sckt_finish): M2EXPORT.
	(_M2_sckt_dep): M2EXPORT.
	(_M2_sckt_ctor): M2EXPORT.
	* libm2pim/termios.cc (EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(_M2_termios_init): M2EXPORT.
	(_M2_termios_fini): M2EXPORT.
	(_M2_termios_dep): M2EXPORT.
	(_M2_termios_ctor): M2EXPORT.
	* libm2pim/wrapc.c (EXPORT): New define.
	(M2EXPORT): New define.
	(M2LIBNAME): New define.
	(wrapc_strtime): EXPORT.
	(wrapc_filesize): EXPORT.
	(wrapc_filemtime): EXPORT.
	(wrapc_fileinode): EXPORT.
	(wrapc_getrand): EXPORT.
	(wrapc_getusername): EXPORT.
	(wrapc_getnameuidgid): EXPORT.
	(wrapc_signbit): EXPORT.
	(wrapc_signbitl): EXPORT.
	(wrapc_signbitf): EXPORT.
	(wrapc_isfinite): EXPORT.
	(wrapc_isfinitel): EXPORT.
	(wrapc_isfinitef): EXPORT.
	(_M2_wrapc_init): M2EXPORT.
	(_M2_wrapc_fini): M2EXPORT.
	(_M2_wrapc_ctor): M2EXPORT.

gcc/testsuite/ChangeLog:

	PR modula2/108261
	* gm2/examples/callingC/pass/examples-callingC-pass.exp: Tidy up
	variable access.
	* gm2/examples/callingC/run/pass/examples-callingC-run-pass.exp: Tidy up
	variable access.
	* gm2/examples/cpp/pass/examples-cpp-pass.exp: Tidy up
	variable access.
	* gm2/examples/cppDef/pass/examples-cppDef-pass.exp: Tidy up
	variable access.
	* gm2/examples/hello/pass/examples-hello-pass.exp: Tidy up
	variable access.
	* gm2/examples/map/pass/examples-map-pass.exp: Tidy up
	variable access.
	* gm2/iso/check/fail/iso-check-fail.exp: Add pathname.
	* gm2/link/externalscaffold/pass/link-externalscaffold-pass.exp:
	Add pathname.
	* gm2/link/externalscaffold/pass/scaffold.c: Add mangled export name.
	* gm2/pimlib/base/run/pass/FIO.mod: Updated test code.
	* gm2/pimlib/base/run/pass/StrLib.mod: Updated test code.
	* gm2/pimlib/base/run/pass/pimlib-base-run-pass.exp: Remove path.
	* gm2/projects/pim/run/pass/random/projects-pim-run-pass-random.exp:
	Tidy up variable access.
	* gm2/switches/auto-init/fail/switches-auto-init-fail.exp: Add pathname.
	* gm2/switches/check-all/pim2/fail/switches-check-all-pim2-fail.exp:
	Add pathname.
	* gm2/switches/makeall/fail/switches-makeall-fail.exp: Remove -fmakeall.
	* gm2/switches/makeall/pass/switches-makeall-pass.exp: Remove -fmakeall.
	* lib/gm2-simple.exp (gm2_keep_executable): New global variable.
	(gm2_simple_execute): Keep executable if global is true.
	* lib/gm2-torture.exp: Add ; after global variable access.
	* lib/gm2.exp: Set up pathnames.
	* gm2/projects/pim/run/pass/tower/AdvCmd.def: New test.
	* gm2/projects/pim/run/pass/tower/AdvCmd.mod: New test.
	* gm2/projects/pim/run/pass/tower/AdvIntroduction.def: New test.
	* gm2/projects/pim/run/pass/tower/AdvIntroduction.mod: New test.
	* gm2/projects/pim/run/pass/tower/AdvMap.def: New test.
	* gm2/projects/pim/run/pass/tower/AdvMap.mod: New test.
	* gm2/projects/pim/run/pass/tower/AdvMath.def: New test.
	* gm2/projects/pim/run/pass/tower/AdvMath.mod: New test.
	* gm2/projects/pim/run/pass/tower/AdvParse.bnf: New test.
	* gm2/projects/pim/run/pass/tower/AdvParse.def: New test.
	* gm2/projects/pim/run/pass/tower/AdvParse.mod: New test.
	* gm2/projects/pim/run/pass/tower/AdvSound.def: New test.
	* gm2/projects/pim/run/pass/tower/AdvSound.mod: New test.
	* gm2/projects/pim/run/pass/tower/AdvSystem.def: New test.
	* gm2/projects/pim/run/pass/tower/AdvSystem.mod: New test.
	* gm2/projects/pim/run/pass/tower/AdvTreasure.def: New test.
	* gm2/projects/pim/run/pass/tower/AdvTreasure.mod: New test.
	* gm2/projects/pim/run/pass/tower/AdvUtil.def: New test.
	* gm2/projects/pim/run/pass/tower/AdvUtil.mod: New test.
	* gm2/projects/pim/run/pass/tower/DrawG.def: New test.
	* gm2/projects/pim/run/pass/tower/DrawG.mod: New test.
	* gm2/projects/pim/run/pass/tower/DrawL.def: New test.
	* gm2/projects/pim/run/pass/tower/DrawL.mod: New test.
	* gm2/projects/pim/run/pass/tower/Dungeon.mod: New test.
	* gm2/projects/pim/run/pass/tower/Lock.def: New test.
	* gm2/projects/pim/run/pass/tower/Lock.mod: New test.
	* gm2/projects/pim/run/pass/tower/ProcArgs.def: New test.
	* gm2/projects/pim/run/pass/tower/ProcArgs.mod: New test.
	* gm2/projects/pim/run/pass/tower/Screen.def: New test.
	* gm2/projects/pim/run/pass/tower/Screen.mod: New test.
	* gm2/projects/pim/run/pass/tower/SocketControl.c: New test.
	* gm2/projects/pim/run/pass/tower/SocketControl.def: New test.
	* gm2/projects/pim/run/pass/tower/Window.def: New test.
	* gm2/projects/pim/run/pass/tower/Window.mod: New test.
	* gm2/projects/pim/run/pass/tower/adv.flex: New test.
	* gm2/projects/pim/run/pass/tower/advflex.c: New test.
	* gm2/projects/pim/run/pass/tower/advflex.def: New test.
	* gm2/projects/pim/run/pass/tower/projects-pim-run-pass-tower.exp:
	New test.
	* gm2/projects/pim/run/pass/tower/star: New test.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2023-02-25 16:28:19 +00:00

213 lines
7.0 KiB
Makefile

# Makefile for libm2pim.
# Copyright 2013-2022 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
SUFFIXES = .c .mod .def .o .obj .lo .a .la
ACLOCAL_AMFLAGS = -I . -I .. -I ../config
VPATH = . @srcdir@ @srcdir@/../../gcc/m2/gm2-libs
# Multilib support.
MAKEOVERRIDES=
gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER)
# Directory in which the compiler finds libraries etc.
libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)
# Used to install the shared libgcc.
slibdir = @slibdir@
toolexeclibdir=@toolexeclibdir@
toolexecdir=@toolexecdir@
MULTIDIR := $(shell $(CC) $(CFLAGS) -print-multi-directory)
MULTIOSDIR := $(shell $(CC) $(CFLAGS) -print-multi-os-directory)
MULTIOSSUBDIR := $(shell if test x$(MULTIOSDIR) != x.; then echo /$(MULTIOSDIR); fi)
inst_libdir = $(libsubdir)$(MULTISUBDIR)
inst_slibdir = $(slibdir)$(MULTIOSSUBDIR)
# Work around what appears to be a GNU make bug handling MAKEFLAGS
# values defined in terms of make variables, as is the case for CC and
# friends when we are called from the top level Makefile.
AM_MAKEFLAGS = \
"GCC_DIR=$(GCC_DIR)" \
"GM2_SRC=$(GM2_SRC)" \
"AR_FLAGS=$(AR_FLAGS)" \
"CC_FOR_BUILD=$(CC_FOR_BUILD)" \
"CC_FOR_TARGET=$(CC_FOR_TARGET)" \
"GM2_FOR_TARGET=$(GM2_FOR_TARGET)" \
"CFLAGS=$(CFLAGS)" \
"CXXFLAGS=$(CXXFLAGS)" \
"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
"CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \
"INSTALL=$(INSTALL)" \
"INSTALL_DATA=$(INSTALL_DATA)" \
"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
"INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
"LDFLAGS=$(LDFLAGS)" \
"LIBCFLAGS=$(LIBCFLAGS)" \
"LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
"MAKE=$(MAKE)" \
"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
"MULTISUBDIR=$(MULTISUBDIR)" \
"MULTIOSDIR=$(MULTIOSDIR)" \
"MULTIBUILDTOP=$(MULTIBUILDTOP)" \
"MULTIFLAGS=$(MULTIFLAGS)" \
"PICFLAG=$(PICFLAG)" \
"PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
"SHELL=$(SHELL)" \
"RUNTESTFLAGS=$(RUNTESTFLAGS)" \
"exec_prefix=$(exec_prefix)" \
"infodir=$(infodir)" \
"libdir=$(libdir)" \
"includedir=$(includedir)" \
"prefix=$(prefix)" \
"tooldir=$(tooldir)" \
"AR=$(AR)" \
"AS=$(AS)" \
"LD=$(LD)" \
"RANLIB=$(RANLIB)" \
"NM=$(NM)" \
"NM_FOR_BUILD=$(NM_FOR_BUILD)" \
"NM_FOR_TARGET=$(NM_FOR_TARGET)" \
"DESTDIR=$(DESTDIR)" \
"WERROR=$(WERROR)" \
"TARGET_LIB_PATH_libgm2=$(TARGET_LIB_PATH_libgm2)"
# Subdir rules rely on $(FLAGS_TO_PASS)
FLAGS_TO_PASS = $(AM_MAKEFLAGS)
if BUILD_PIMLIB
toolexeclib_LTLIBRARIES = libm2pim.la
M2MODS = ASCII.mod IO.mod \
Args.mod M2RTS.mod \
M2Dependent.mod \
Assertion.mod NumberIO.mod \
Break.mod SYSTEM.mod \
CmdArgs.mod Scan.mod \
StrCase.mod FIO.mod \
StrIO.mod StrLib.mod \
TimeString.mod Environment.mod \
FpuIO.mod Debug.mod \
SysStorage.mod Storage.mod \
StdIO.mod SEnvironment.mod \
DynamicStrings.mod SFIO.mod \
SArgs.mod SCmdArgs.mod \
PushBackInput.mod \
StringConvert.mod FormatStrings.mod \
Builtins.mod MathLib0.mod \
M2EXCEPTION.mod RTExceptions.mod \
SMathLib0.mod RTint.mod \
Indexing.mod \
LMathLib0.mod LegacyReal.mod \
MemUtils.mod gdbif.mod \
GetOpt.mod OptLib.mod
# COROUTINES.mod has been removed as it is implemented in ../libm2iso.
M2DEFS = Args.def ASCII.def \
Assertion.def Break.def \
Builtins.def cbuiltin.def \
CmdArgs.def COROUTINES.def \
cxxabi.def Debug.def \
dtoa.def DynamicStrings.def \
Environment.def errno.def \
FIO.def FormatStrings.def \
FpuIO.def gdbif.def \
Indexing.def \
IO.def ldtoa.def \
LegacyReal.def libc.def \
libm.def LMathLib0.def \
M2Dependent.def \
M2EXCEPTION.def M2LINK.def \
M2RTS.def \
MathLib0.def MemUtils.def \
NumberIO.def PushBackInput.def \
RTExceptions.def RTint.def \
SArgs.def SCmdArgs.def \
Scan.def \
sckt.def Selective.def \
SEnvironment.def SFIO.def \
SMathLib0.def StdIO.def \
Storage.def StrCase.def \
StringConvert.def StrIO.def \
StrLib.def SysExceptions.def \
SysStorage.def SYSTEM.def \
termios.def TimeString.def \
UnixArgs.def wrapc.def \
GetOpt.def OptLib.def \
cgetopt.def
libm2pim_la_SOURCES = $(M2MODS) \
UnixArgs.cc \
Selective.cc sckt.cc \
errno.cc dtoa.cc \
ldtoa.cc termios.cc \
SysExceptions.cc target.c \
wrapc.cc cgetopt.cc
libm2pimdir = libm2pim
libm2pim_la_DEPENDENCIES = SYSTEM.def $(addsuffix .lo, $(basename $(libm2pim_la_SOURCES)))
libm2pim_la_CFLAGS = -I. -I.. -I$(GM2_SRC)/gm2-libs -I$(GM2_SRC)/gm2-libs-iso -DBUILD_GM2_LIBS -I@srcdir@/../ -I@srcdir@/../libm2iso
libm2pim_la_M2FLAGS = \
-fm2-pathname=m2pim -I. -I$(GM2_SRC)/gm2-libs \
-fm2-pathname=m2iso -I$(GM2_SRC)/gm2-libs-iso \
-fm2-g -g -Wreturn-type -fcase -fm2-prefix=m2pim
if TARGET_DARWIN
libm2pim_la_link_flags = -Wl,-undefined,dynamic_lookup
else
libm2pim_la_link_flags =
endif
libm2pim_la_LINK = $(LINK) -version-info $(libtool_VERSION) $(libm2pim_la_link_flags)
BUILT_SOURCES = SYSTEM.def
CLEANFILES = SYSTEM.def
M2LIBDIR = /m2/m2pim/
SYSTEM.def: Makefile
bash $(GM2_SRC)/tools-src/makeSystem -fpim \
$(GM2_SRC)/gm2-libs/SYSTEM.def \
$(GM2_SRC)/gm2-libs/SYSTEM.mod \
-I$(GM2_SRC)/gm2-libs \
"$(GM2_FOR_TARGET)" $@
.mod.lo: SYSTEM.def
$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(GM2_FOR_TARGET) -c $(CFLAGS_FOR_TARGET) $(LIBCFLAGS) $(libm2pim_la_M2FLAGS) $< -o $@
.cc.lo:
$(LIBTOOL) --tag=CXX --mode=compile $(CXX) -c -I$(srcdir) $(CXXFLAGS) $(LIBCFLAGS) $(libm2pim_la_CFLAGS) $< -o $@
install-data-local: force
mkdir -p $(DESTDIR)$(inst_libdir)/$(M2LIBDIR)
for i in $(M2DEFS) $(M2MODS) ; do \
if [ -f $$i ] ; then \
$(INSTALL_DATA) $$i '$(DESTDIR)$(inst_libdir)/$(M2LIBDIR)'; \
elif [ -f @srcdir@/../../gcc/m2/gm2-libs/$$i ] ; then \
$(INSTALL_DATA) @srcdir@/../../gcc/m2/gm2-libs/$$i '$(DESTDIR)$(inst_libdir)/$(M2LIBDIR)'; \
else \
echo "cannot find $$i" ; exit 1 ; \
fi ; \
chmod 644 $(DESTDIR)$(inst_libdir)/$(M2LIBDIR)$$i ; \
done
force:
endif