nim-lang / Nim

Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).
https://nim-lang.org
Other
16.43k stars 1.47k forks source link

[nimsuggest] Move files under the lib/ dir to make it usable as a library #14040

Open rakoo opened 4 years ago

rakoo commented 4 years ago

Disclaimer: I just discovered nim, and it's a lovely language! I might not know enough about the philosophy of the community to understand what is and isn't possible.

I'm using from a packaged distribution (Archlinux) where the nim files are scattered following the FHS:

Currently the nimsuggest files are discarded from the package, because they are at the root and are specific to nim. Because of this nimlsp makes a little dance to get to the nimsuggest.nim file, see here.

If a packager were to follow this to the letter, for nimlsp to build the source file would be at /usr/nimsuggest/nimsuggest.nim, which is not acceptable in the FHS.

Possible Solution

Put all the nimsuggest source files under lib/nimsuggest/, and the binary is built with a minimalist wrapper that merely imports the source file but does nothing of extraordinary value. This way it is packaged correctly under /usr/lib/nim, nimlsp can import nimsuggest as a traditional module and life is good

Additional Information

Task in the Archlinux bug tracker

alaviss commented 4 years ago

Because of this nimlsp makes a little dance to get to the nimsuggest.nim file, see here.

The little dance is due to the lack of standardization for how Nim should be installed, so devs just assume that everyone runs Nim straight out of the source tree (which is how it's packaged for official binary releases and how choosenim installs Nim).

While not the conventional way, I package Nim like this (see ebuild for details):

``` /usr/lib/nim/bin/nim-gdb /usr/lib/nim/bin/nim-gdb.bash /usr/lib/nim/bin/nimgrep /usr/lib/nim/bin/nimpretty /usr/lib/nim/bin/testament /usr/lib/nim/bin/nimfind /usr/lib/nim/bin/nimsuggest /usr/lib/nim/bin/nim /usr/lib/nim/lib/arch/x86/amd64.S /usr/lib/nim/lib/arch/x86/i386.S /usr/lib/nim/lib/core/hotcodereloading.nim /usr/lib/nim/lib/core/locks.nim /usr/lib/nim/lib/core/macrocache.nim /usr/lib/nim/lib/core/macros.nim /usr/lib/nim/lib/core/rlocks.nim /usr/lib/nim/lib/core/typeinfo.nim /usr/lib/nim/lib/deprecated/pure/LockFreeHash.nim /usr/lib/nim/lib/deprecated/pure/events.nim /usr/lib/nim/lib/deprecated/pure/ospaths.nim /usr/lib/nim/lib/deprecated/pure/parseopt2.nim /usr/lib/nim/lib/deprecated/pure/securehash.nim /usr/lib/nim/lib/deprecated/pure/sharedstrings.nim /usr/lib/nim/lib/experimental/diff.nim /usr/lib/nim/lib/genode/alloc.nim /usr/lib/nim/lib/genode/env.nim /usr/lib/nim/lib/genode_cpp/syslocks.h /usr/lib/nim/lib/genode_cpp/threads.h /usr/lib/nim/lib/impure/nre/private/util.nim /usr/lib/nim/lib/impure/db_mysql.nim /usr/lib/nim/lib/impure/db_odbc.nim /usr/lib/nim/lib/impure/db_postgres.nim /usr/lib/nim/lib/impure/db_sqlite.nim /usr/lib/nim/lib/impure/nre.nim /usr/lib/nim/lib/impure/rdstdin.nim /usr/lib/nim/lib/impure/re.nim /usr/lib/nim/lib/js/asyncjs.nim /usr/lib/nim/lib/js/dom.nim /usr/lib/nim/lib/js/jsconsole.nim /usr/lib/nim/lib/js/jscore.nim /usr/lib/nim/lib/js/jsffi.nim /usr/lib/nim/lib/nintendoswitch/switch_memory.nim /usr/lib/nim/lib/packages/docutils/docutils.nimble /usr/lib/nim/lib/packages/docutils/highlite.nim /usr/lib/nim/lib/packages/docutils/rst.nim /usr/lib/nim/lib/packages/docutils/rstast.nim /usr/lib/nim/lib/packages/docutils/rstgen.nim /usr/lib/nim/lib/posix/epoll.nim /usr/lib/nim/lib/posix/inotify.nim /usr/lib/nim/lib/posix/kqueue.nim /usr/lib/nim/lib/posix/linux.nim /usr/lib/nim/lib/posix/posix.nim /usr/lib/nim/lib/posix/posix_haiku.nim /usr/lib/nim/lib/posix/posix_linux_amd64.nim /usr/lib/nim/lib/posix/posix_linux_amd64_consts.nim /usr/lib/nim/lib/posix/posix_macos_amd64.nim /usr/lib/nim/lib/posix/posix_nintendoswitch.nim /usr/lib/nim/lib/posix/posix_nintendoswitch_consts.nim /usr/lib/nim/lib/posix/posix_openbsd_amd64.nim /usr/lib/nim/lib/posix/posix_other.nim /usr/lib/nim/lib/posix/posix_other_consts.nim /usr/lib/nim/lib/posix/posix_utils.nim /usr/lib/nim/lib/posix/termios.nim /usr/lib/nim/lib/pure/collections/chains.nim /usr/lib/nim/lib/pure/collections/critbits.nim /usr/lib/nim/lib/pure/collections/deques.nim /usr/lib/nim/lib/pure/collections/hashcommon.nim /usr/lib/nim/lib/pure/collections/heapqueue.nim /usr/lib/nim/lib/pure/collections/intsets.nim /usr/lib/nim/lib/pure/collections/lists.nim /usr/lib/nim/lib/pure/collections/rtarrays.nim /usr/lib/nim/lib/pure/collections/sequtils.nim /usr/lib/nim/lib/pure/collections/setimpl.nim /usr/lib/nim/lib/pure/collections/sets.nim /usr/lib/nim/lib/pure/collections/sharedlist.nim /usr/lib/nim/lib/pure/collections/sharedtables.nim /usr/lib/nim/lib/pure/collections/tableimpl.nim /usr/lib/nim/lib/pure/collections/tables.nim /usr/lib/nim/lib/pure/concurrency/atomics.nim /usr/lib/nim/lib/pure/concurrency/cpuinfo.nim /usr/lib/nim/lib/pure/concurrency/cpuload.nim /usr/lib/nim/lib/pure/concurrency/threadpool.nim /usr/lib/nim/lib/pure/concurrency/threadpool.nim.cfg /usr/lib/nim/lib/pure/includes/osenv.nim /usr/lib/nim/lib/pure/includes/oserr.nim /usr/lib/nim/lib/pure/includes/osseps.nim /usr/lib/nim/lib/pure/includes/unicode_ranges.nim /usr/lib/nim/lib/pure/ioselects/ioselectors_epoll.nim /usr/lib/nim/lib/pure/ioselects/ioselectors_kqueue.nim /usr/lib/nim/lib/pure/ioselects/ioselectors_poll.nim /usr/lib/nim/lib/pure/ioselects/ioselectors_select.nim /usr/lib/nim/lib/pure/unidecode/gen.py /usr/lib/nim/lib/pure/unidecode/unidecode.dat /usr/lib/nim/lib/pure/unidecode/unidecode.nim /usr/lib/nim/lib/pure/algorithm.nim /usr/lib/nim/lib/pure/async.nim /usr/lib/nim/lib/pure/asyncdispatch.nim /usr/lib/nim/lib/pure/asyncdispatch.nim.cfg /usr/lib/nim/lib/pure/asyncfile.nim /usr/lib/nim/lib/pure/asyncftpclient.nim /usr/lib/nim/lib/pure/asyncfutures.nim /usr/lib/nim/lib/pure/asynchttpserver.nim /usr/lib/nim/lib/pure/asyncmacro.nim /usr/lib/nim/lib/pure/asyncnet.nim /usr/lib/nim/lib/pure/asyncstreams.nim /usr/lib/nim/lib/pure/base64.nim /usr/lib/nim/lib/pure/bitops.nim /usr/lib/nim/lib/pure/browsers.nim /usr/lib/nim/lib/pure/cgi.nim /usr/lib/nim/lib/pure/colors.nim /usr/lib/nim/lib/pure/complex.nim /usr/lib/nim/lib/pure/cookies.nim /usr/lib/nim/lib/pure/coro.nim /usr/lib/nim/lib/pure/coro.nimcfg /usr/lib/nim/lib/pure/cstrutils.nim /usr/lib/nim/lib/pure/db_common.nim /usr/lib/nim/lib/pure/distros.nim /usr/lib/nim/lib/pure/dynlib.nim /usr/lib/nim/lib/pure/encodings.nim /usr/lib/nim/lib/pure/endians.nim /usr/lib/nim/lib/pure/fenv.nim /usr/lib/nim/lib/pure/future.nim /usr/lib/nim/lib/pure/hashes.nim /usr/lib/nim/lib/pure/htmlgen.nim /usr/lib/nim/lib/pure/htmlparser.nim /usr/lib/nim/lib/pure/httpclient.nim /usr/lib/nim/lib/pure/httpcore.nim /usr/lib/nim/lib/pure/json.nim /usr/lib/nim/lib/pure/lenientops.nim /usr/lib/nim/lib/pure/lexbase.nim /usr/lib/nim/lib/pure/logging.nim /usr/lib/nim/lib/pure/marshal.nim /usr/lib/nim/lib/pure/math.nim /usr/lib/nim/lib/pure/md5.nim /usr/lib/nim/lib/pure/memfiles.nim /usr/lib/nim/lib/pure/mersenne.nim /usr/lib/nim/lib/pure/mimetypes.nim /usr/lib/nim/lib/pure/nativesockets.nim /usr/lib/nim/lib/pure/net.nim /usr/lib/nim/lib/pure/nimprof.nim /usr/lib/nim/lib/pure/nimprof.nim.cfg /usr/lib/nim/lib/pure/nimtracker.nim /usr/lib/nim/lib/pure/oids.nim /usr/lib/nim/lib/pure/options.nim /usr/lib/nim/lib/pure/os.nim /usr/lib/nim/lib/pure/osproc.nim /usr/lib/nim/lib/pure/oswalkdir.nim /usr/lib/nim/lib/pure/parsecfg.nim /usr/lib/nim/lib/pure/parsecsv.nim /usr/lib/nim/lib/pure/parsejson.nim /usr/lib/nim/lib/pure/parseopt.nim /usr/lib/nim/lib/pure/parsesql.nim /usr/lib/nim/lib/pure/parseutils.nim /usr/lib/nim/lib/pure/parsexml.nim /usr/lib/nim/lib/pure/pathnorm.nim /usr/lib/nim/lib/pure/pegs.nim /usr/lib/nim/lib/pure/punycode.nim /usr/lib/nim/lib/pure/random.nim /usr/lib/nim/lib/pure/rationals.nim /usr/lib/nim/lib/pure/reservedmem.nim /usr/lib/nim/lib/pure/ropes.nim /usr/lib/nim/lib/pure/segfaults.nim /usr/lib/nim/lib/pure/selectors.nim /usr/lib/nim/lib/pure/smtp.nim /usr/lib/nim/lib/pure/smtp.nim.cfg /usr/lib/nim/lib/pure/ssl_certs.nim /usr/lib/nim/lib/pure/stats.nim /usr/lib/nim/lib/pure/streams.nim /usr/lib/nim/lib/pure/strformat.nim /usr/lib/nim/lib/pure/strmisc.nim /usr/lib/nim/lib/pure/strscans.nim /usr/lib/nim/lib/pure/strtabs.nim /usr/lib/nim/lib/pure/strutils.nim /usr/lib/nim/lib/pure/sugar.nim /usr/lib/nim/lib/pure/terminal.nim /usr/lib/nim/lib/pure/times.nim /usr/lib/nim/lib/pure/typetraits.nim /usr/lib/nim/lib/pure/unicode.nim /usr/lib/nim/lib/pure/unittest.nim /usr/lib/nim/lib/pure/uri.nim /usr/lib/nim/lib/pure/volatile.nim /usr/lib/nim/lib/pure/xmlparser.nim /usr/lib/nim/lib/pure/xmltree.nim /usr/lib/nim/lib/std/private/underscored_calls.nim /usr/lib/nim/lib/std/compilesettings.nim /usr/lib/nim/lib/std/decls.nim /usr/lib/nim/lib/std/editdistance.nim /usr/lib/nim/lib/std/logic.nim /usr/lib/nim/lib/std/monotimes.nim /usr/lib/nim/lib/std/sha1.nim /usr/lib/nim/lib/std/stackframes.nim /usr/lib/nim/lib/std/sums.nim /usr/lib/nim/lib/std/time_t.nim /usr/lib/nim/lib/std/varints.nim /usr/lib/nim/lib/std/with.nim /usr/lib/nim/lib/std/wordwrap.nim /usr/lib/nim/lib/std/wrapnils.nim /usr/lib/nim/lib/system/mm/boehm.nim /usr/lib/nim/lib/system/mm/go.nim /usr/lib/nim/lib/system/mm/malloc.nim /usr/lib/nim/lib/system/mm/none.nim /usr/lib/nim/lib/system/alloc.nim /usr/lib/nim/lib/system/ansi_c.nim /usr/lib/nim/lib/system/arithm.nim /usr/lib/nim/lib/system/arithmetics.nim /usr/lib/nim/lib/system/assertions.nim /usr/lib/nim/lib/system/assign.nim /usr/lib/nim/lib/system/atomics.nim /usr/lib/nim/lib/system/avltree.nim /usr/lib/nim/lib/system/basic_types.nim /usr/lib/nim/lib/system/cellsets.nim /usr/lib/nim/lib/system/cgprocs.nim /usr/lib/nim/lib/system/channels.nim /usr/lib/nim/lib/system/chcks.nim /usr/lib/nim/lib/system/comparisons.nim /usr/lib/nim/lib/system/cyclebreaker.nim /usr/lib/nim/lib/system/cyclicrefs_v2.nim /usr/lib/nim/lib/system/deepcopy.nim /usr/lib/nim/lib/system/dollars.nim /usr/lib/nim/lib/system/dyncalls.nim /usr/lib/nim/lib/system/embedded.nim /usr/lib/nim/lib/system/exceptions.nim /usr/lib/nim/lib/system/excpt.nim /usr/lib/nim/lib/system/fatal.nim /usr/lib/nim/lib/system/formatfloat.nim /usr/lib/nim/lib/system/gc.nim /usr/lib/nim/lib/system/gc2.nim /usr/lib/nim/lib/system/gc_common.nim /usr/lib/nim/lib/system/gc_hooks.nim /usr/lib/nim/lib/system/gc_interface.nim /usr/lib/nim/lib/system/gc_ms.nim /usr/lib/nim/lib/system/gc_regions.nim /usr/lib/nim/lib/system/hti.nim /usr/lib/nim/lib/system/inclrtl.nim /usr/lib/nim/lib/system/indexerrors.nim /usr/lib/nim/lib/system/integerops.nim /usr/lib/nim/lib/system/io.nim /usr/lib/nim/lib/system/iterators.nim /usr/lib/nim/lib/system/iterators_1.nim /usr/lib/nim/lib/system/jssys.nim /usr/lib/nim/lib/system/memalloc.nim /usr/lib/nim/lib/system/memory.nim /usr/lib/nim/lib/system/memtracker.nim /usr/lib/nim/lib/system/mmdisp.nim /usr/lib/nim/lib/system/nimscript.nim /usr/lib/nim/lib/system/osalloc.nim /usr/lib/nim/lib/system/platforms.nim /usr/lib/nim/lib/system/profiler.nim /usr/lib/nim/lib/system/refs_v2.nim /usr/lib/nim/lib/system/repr.nim /usr/lib/nim/lib/system/repr_v2.nim /usr/lib/nim/lib/system/reprjs.nim /usr/lib/nim/lib/system/seqs_v2.nim /usr/lib/nim/lib/system/setops.nim /usr/lib/nim/lib/system/sets.nim /usr/lib/nim/lib/system/strmantle.nim /usr/lib/nim/lib/system/strs_v2.nim /usr/lib/nim/lib/system/syslocks.nim /usr/lib/nim/lib/system/sysspawn.nim /usr/lib/nim/lib/system/sysstr.nim /usr/lib/nim/lib/system/threadlocalstorage.nim /usr/lib/nim/lib/system/threads.nim /usr/lib/nim/lib/system/timers.nim /usr/lib/nim/lib/system/widestrs.nim /usr/lib/nim/lib/windows/registry.nim /usr/lib/nim/lib/windows/winlean.nim /usr/lib/nim/lib/wrappers/linenoise/LICENSE.txt /usr/lib/nim/lib/wrappers/linenoise/README.markdown /usr/lib/nim/lib/wrappers/linenoise/linenoise.c /usr/lib/nim/lib/wrappers/linenoise/linenoise.h /usr/lib/nim/lib/wrappers/linenoise/linenoise.nim /usr/lib/nim/lib/wrappers/iup.nim /usr/lib/nim/lib/wrappers/mysql.nim /usr/lib/nim/lib/wrappers/odbcsql.nim /usr/lib/nim/lib/wrappers/openssl.nim /usr/lib/nim/lib/wrappers/pcre.nim /usr/lib/nim/lib/wrappers/postgres.nim /usr/lib/nim/lib/wrappers/sqlite3.nim /usr/lib/nim/lib/wrappers/tinyc.nim /usr/lib/nim/lib/cycle.h /usr/lib/nim/lib/nimbase.h /usr/lib/nim/lib/nimhcr.nim /usr/lib/nim/lib/nimhcr.nim.cfg /usr/lib/nim/lib/nimrtl.nim /usr/lib/nim/lib/nimrtl.nim.cfg /usr/lib/nim/lib/prelude.nim /usr/lib/nim/lib/stdlib.nimble /usr/lib/nim/lib/system.nim /usr/lib/nim/lib/system_overview.rst /usr/lib/nim/doc/nimdoc.css /usr/lib/nim/doc/advopt.txt /usr/lib/nim/doc/basicopt.txt /usr/lib/nim/tools/nim-gdb.py /usr/lib/nim/tools/dochack/fuzzysearch.nim /usr/lib/nim/tools/dochack/dochack.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/plugins/active.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/plugins/itersgen.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/plugins/locals.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/nimfix/nimfix.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/nimfix/nimfix.nim.cfg /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/nimfix/prettybase.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/writetracking.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/wordrecg.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/vmops.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/vmmarshal.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/vmhooks.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/vmgen.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/vmdeps.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/vmdef.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/vmconv.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/vm.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/unittest_light.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/typesrenderer.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/types.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/treetab.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/trees.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/transf.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/tccgen.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/syntaxes.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/suggest.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/spawn.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/sourcemap.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/sizealignoffsetimpl.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/sinkparameter_inference.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/sigmatch.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/sighashes.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semtypinst.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semtypes.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semtempl.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semstmts.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/sempass2.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semparallel.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semobjconstr.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semmagic.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semmacrosanity.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/seminst.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semgnrc.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semfold.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semfields.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semexprs.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semdata.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/semcall.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/sem.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/scriptconfig.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/saturate.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/ropes.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/rodutils.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/rodimpl.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/rod.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/reorder.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/renderer.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/readme.txt /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/procfind.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/prefixmatches.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/pragmas.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/pluginsupport.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/platform.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/patterns.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/pathutils.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/passes.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/passaux.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/parser.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/parampatterns.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/packagehandling.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/options.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/nversion.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/nodejs.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/nimsets.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/nimlexbase.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/nimeval.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/nimconf.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/nimblecmd.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/nim.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/nim.cfg /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/ndi.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/msgs.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/modules.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/modulepaths.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/modulegraphs.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/main.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/magicsys.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/macrocacheimpl.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/lowerings.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/lookups.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/llstream.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/linter.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/lineinfos.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/liftlocals.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/liftdestructors.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/lexer.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/layouter.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/lambdalifting.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/jstypes.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/jsgen.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/int128.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/installer.ini /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/injectdestructors.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/incremental.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/importer.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/idgen.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/idents.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/hlo.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/guards.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/gorgeimpl.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/forloops.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/filters.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/filter_tmpl.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/extccomp.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/evaltempl.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/evalffi.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/enumtostr.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/docgen2.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/docgen.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/dfa.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/depends.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/debuginfo.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/condsyms.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/commands.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/cmdlinehelper.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/closureiters.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/cgmeth.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/cgendata.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/cgen.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/ccgutils.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/ccgtypes.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/ccgtrav.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/ccgthreadvars.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/ccgstmts.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/ccgmerge.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/ccgliterals.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/ccgexprs.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/ccgcalls.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/canonicalizer.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/btrees.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/bitsets.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/astalgo.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/ast.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/asciitables.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler/aliases.nim /usr/share/nimble/pkgs/compiler-#1bdc30bdb/compiler.nimble /usr/share/nimble/pkgs/compiler-#1bdc30bdb/doc /etc/nim/nim.cfg /etc/nim/nimdoc.cfg /etc/nim/nimdoc.tex.cfg /etc/env.d/10nim /usr/lib/nim/compiler ```

Some features of this style:

I think this should be the preferred way to package Nim.

/cc @FedericoCeratto, as he is the maintainer of the Debian package.

Araq commented 4 years ago

Because like it or not, FHS support in Nim is a hack bolted into the compiler (directories hard coded in certain places), and not all of the compiler supports this.

It's not a hack bolted into the compiler, it does it the best way I could in order to support FHS, but FHS itself is such a terrible idea that I don't find words for it.

IMO we should make the compiler work better with FHS and nimsuggest should be under /usr/bin, every Nim related binary should be under /usr/bin because that's how it's done.

I don't package nimsuggest because I don't have an use for the source

Er, please package nimsuggest.

alaviss commented 4 years ago

Er, please package nimsuggest.

koch install gotta do it for me. Currently it's my job to handpick what should be in the package. It appears that at least on *nix, only the compiler source and binaries are installed, I have to install all the other utilities by hand.

alaviss commented 4 years ago

IMO we should make the compiler work better with FHS and nimsuggest should be under /usr/bin, every Nim related binary should be under /usr/bin because that's how it's done.

Everything in Nim revolves around the prefix directory. I think instead of injecting paths like /usr/lib/nim into the search path, we can instead turn that into our prefix directory (and allow users to define their own prefix dir on bootstrap. The correct way of obtaining the prefix for tooling should then be via the nim binary itself). AFAICT, the scheme is pretty popular among compilers, including gcc and rust (everything is in /usr/lib/rustlib sans the binaries).

FedericoCeratto commented 4 years ago

Please be aware of https://nim-lang.org/docs/packaging.html - it's an attempt at standardizing how Nim is installed and prevent further confusion. Please help keeping the document relevant.

Araq commented 4 years ago

The correct way of obtaining the prefix for tooling should then be via the nim binary itself). AFAICT, the scheme is pretty popular among compilers, including gcc and rust (everything is in /usr/lib/rustlib sans the binaries).

I don't understand what it means.

bung87 commented 3 years ago

same problem with nimpretty, I can't find a solution use nimpretty as lib, it can't use same way importing as nimlsp importing nimsuggest.

jafd commented 2 years ago

The correct way of obtaining the prefix for tooling should then be via the nim binary itself). AFAICT, the scheme is pretty popular among compilers, including gcc and rust (everything is in /usr/lib/rustlib sans the binaries).

I don't understand what it means.

I think it means that in gcc, when I want to find out the full path to a tool, I do:

~ $ gcc --print-prog-name=cc1
/usr/libexec/gcc/x86_64-redhat-linux/12/cc1

or for a library:

~ $ gcc --print-file-name=libc.so
/usr/lib/gcc/x86_64-redhat-linux/12/../../../../lib64/libc.so

Means that the main entry point to the compiler can tell you where its components are, or at least where it thinks its components are.

Araq commented 2 years ago

Thanks for the clarification.

FedericoCeratto commented 1 year ago

At this time many distributions are placing the libraries under /usr/lib/nim/lib rather than just /usr/lib/nim to be able to ship other components without causing conflicts. For example /usr/lib/nim/doc for HTML documentation and /usr/lib/nim/tools hosts dochack