1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
|
## What's new in LuaRocks 3.11.1
* Fixes:
* normalize namespace names to lowercase when performing
dependency resolution, to match CLI behavior
* `luarocks build`: ensure `--force` works
* `luarocks init`: check if we can create .gitignore
* Unix: honor umask correctly
* Fix error when failing to open cached files
* Fix behavior of luarocks.lock file when dealing
with dependencies
## What's new in LuaRocks 3.11.0
* Features:
* `luarocks build` and `luarocks install` no longer rebuild
or reinstall if the version is already installed
(`--force` overrides).
* More aggressive caching of the manifest file (does not
hit `luarocks.org` again if the cached manifest is younger
than 10 seconds).
* Drops stale lock files (older than 1 hour).
* More informative error reports on bad configurations of
Lua paths (`LUA_INCDIR`, `LUA_LIBDIR`).
* Better error messages when lacking permissions.
* Bumps vendored dkjson dependency to 2.7.
* `--verbose` output now prints the LuaRocks configuration,
for more informative bug reports.
* Fixes:
* Passing `--global` always LuaRocks target the system tree.
* Does not crash if `root_dir` is a table.
* Does not try to lock rocks trees when using `--pack-binary-rock`
or `--no-install`.
* Checks permissions ahead of trying to lock trees,
to provide better error messages.
* Avoids LuaSec version mismatch by refusing to use LuaSec
versions below 1.1.
* Does not set up a "project environment" when running
`make` on the LuaRocks sources.
* Windows:
* Avoid excessive calls to `icacls`, resulting in
performance improvements.
* Parses slashes correctly when reading a rock's `rock_manifest`.
* Fix setting of environment variables.
* install.bat sets LUALIB.
* Improved help for `luarocks path`.
## What's new in LuaRocks 3.10.0
* Features:
* Introduce file-based locking for concurrent access
control. Previously, LuaRocks would produce undefined behavior
when running two instances at the same time.
* Rockspec quality-of-life improvements:
* Using an unknown `build.type` now automatically
implies a build dependency for `luarocks-build-<build.type>`.
* Improve `rockspec.source.dir` autodetection.
* `builtin` build mode now automatically inherits include
and libdirs from `external_dependencies` if not set
explicitly.
* improved and simplified Lua interpreter search.
* `lua_interpreter` config value is deprecated in favor
of `variables.LUA` which contains the full interpreter path.
* `luarocks-admin remove` now supports the `file://`
protocol for managing local rocks servers.
* Bundled dkjson library, so that `luarocks upload` does not
require an external JSON library.
* New flags for `luarocks init`: `--no-gitignore`,
`--no-wrapper-scripts`, `--wrapper-dir`.
* `luarocks config` now attempts updating the system config
by default when `local_by_default` is `false`.
* New flag for `luarocks path`: `--full`, for use with
`--lr-path` and `--lr-cpath`.
* Fixes:
* various Windows-specific fixes:
* `build.install_command` now works correctly on Windows.
* do not attempt to set "executable" permissions for folders
on Windows.
* better handling of Windows backslash paths.
* fix program search when using absolute paths and `.exe` files.
* improved lookup order for library dependencies.
* `LUALIB` filename detection is now done dynamically at
runtime and not hardcoded by the Windows installer.
* prevent LuaRocks from blocking `luafilesystem` from being
removed on Windows.
* `luarocks build` no longer looks for Lua headers when installing
pure-Lua rocks.
* `luarocks build` table in rockspecs now gets some additional validation
to prevent crashes on malformed rockspecs.
* `build.builtin` now compiles C modules in a temporary directory,
avoiding name clashes
* `build_dependencies` now correctly installs dependencies
for the Lua version that LuaRocks is running on, and not
the one it is building for with `--lua-version`.
* `build_dependencies` can now use a dependency available
in any rocks tree (system, user, project).
* `luarocks config` now prints boolean values correctly on Lua 5.1.
* `luarocks config` now ensures the target directory exists when saving
a configuration.
* `luarocks init` now injects the project's `package.(c)path` in the
Lua wrapper.
* `luarocks lint` no longer crashes if a rockspec misses a `description` field.
* `luarocks test` now handles malformed `command` entries gracefully.
* if `--lua-*` flags are given in the CLI, the hardcoded values
are never used.
* the "no downloader" error is now shown only once, and not
once per failed mirror.
* project dir is always presented normalized
* catch the failure to setup `LUA_BINDIR` early.
* when using `--pack-binary-rock` and a `zip` program is
unavailable, report that instead of failing cryptically.
* More graceful handling when failing to create a local cache.
* Avoid confusion with macOS multiarch binaries on system detection.
* Add `--tree` to the rocks trees list.
* Better support for LuaJIT versions with extra
suffixes in their version numbers.
* Don't use floats to parse Lua version number.
* Various fixes related to path normalization.
## What's new in LuaRocks 3.9.2
* Configuration now honors typical compiler environment variables
for all build backends:
* `MAKE`, `CC`, `AR`, `RANLIB` on Unix
* `MAKE`, `CC`, `AR`, `WINDRES`, `LINK`, `MT` on Windows
* `builtin` build mode now supports Clang on Windows
* `luarocks test` now checks/installs all dependency kinds
(build, runtime, test), so you don't need to run
`luarocks make --only-deps` in CI environments to get all
dependencies needed to run a test
* MinGW: default to x86_64 compiler on 64-bit platforms
* Fixed crash if `variables.LUA*` are unset in configuration
* Fix `luarocks test --prepare` behavior for non-Busted tests
* Internal API fixes
* `path.path_to_module`: accept custom file extensions in
package path variables
* `persist.save_from_table`: ensure directory exists when
saving a file
## What's new in LuaRocks 3.9.1
* Fixed error message when Lua library is not found
* Fixed build of Windows binary
* A couple of minor feature additions:
* API: `loader.which` has a new mode for searching `package.path/cpath`
* Adds a new second argument, `where`, a string which indicates places
to search for the module. If `where` contains `"l"`, it will search
using the LuaRocks loader; if it contains `"p"`, it will look in the
filesystem using `package.path` and `package.cpath`. You can use both
at the same time.
* `--no-project` flag can be used to override `.luarocks` project directory
detection
## What's new in LuaRocks 3.9.0
* `builtin` build mode now always respects CC, CFLAGS and LDFLAGS
* Check that lua.h version matches the desired Lua version
* Check that the version of the Lua C library matches the desired Lua version
* Fixed deployment of non-wrapped binaries
* Fixed crash when `--lua-version` option is malformed
* Fixed help message for `--pin` option
* Unix: use native methods and don't always rely on $USER to determine user
* Windows: use native CLI tooling more
* macOS: support .tbd extension when checking for libraries
* macOS: add XCode SDK path to search paths
* macOS: add best-effort heuristic for library search using Homebrew paths
* macOS: avoid quoting issues with LIBFLAG
* macOS: deployment target is now 11.0 on macOS 11+
* added DragonFly BSD support
* LuaRocks test suite now runs on Lua 5.4 and LuaJIT
* Internal dependencies of standalone LuaRocks executable were bumped
## What's new in LuaRocks 3.8.0
* Support GitHub's protocol security changes transparently.
* The raw git:// protocol will stop working on GitHub. LuaRocks already
supports git+https:// as an alternative, but to avoid having to update
every rockspec in the repository that uses git://github.com, which would
require a large coordinated effort, LuaRocks now auto-converts github.com
and www.github.com URLs that use git:// to git+https://
* `luarocks test` has a new flag `--prepare` that checks, downloads and
installs the tool requirements and rockspec dependencies but does not
run the test suite for the rockspec being tested.
* Code tweaks so that LuaRocks can run on a Lua interpreter built without
the `debug` library.
* `luarocks upload` supports uploading pre-packaged `.src.rock` files.
* Configuration fixes for OpenBSD.
* Respect the existing value for the `variables.LUALIB` configuration
variable if given explicitly by the user in the config file, rather
than trying to override it with auto-detection.
* Windows fixes for setting file permissions:
* Revert the use of `Everyone` back to `*S-1-1-0`
* Quote the use of the `%USERNAME%` variable to support names with spaces
## What's new in LuaRocks 3.7.0
* Improved connectivity resiliency
* LuaRocks can now use mirrors for downloading rocks even if downloading
the manifest from the main server succeeds.
In previous versions, LuaRocks would check whether to use a mirror in the first
download operation, when it fetches the manifest. Once the server
(luarocks.org or one of its default mirrors) was chosen, it would stick with
it for the rest of the command.
The resulting behavior was that if the manifest fails to load, it switches to
a mirror and continues from there. But if the manifest fetches ok and the then
actual rock download fails, it would give up, instead of trying that in a
mirror as well.
Now, it retries every download on a mirror whenever the base URL matches one
configured in cfg.rocks_servers. The original behavior was satisfactory if
there was complete downtime in the main server, but this new behavior should
make the CLI much more resilient with regard to any intermittent failures
happening on the main server.
* On Unix, it now respects environment variables $XDG_CACHE_HOME and $XDG_CONFIG_HOME
* This means the user's configuration typically resides in ~/.config/luarocks/
as per the XDG standard
* The legacy path ~/.luarocks/ continues to be tested first, for backwards
compatibility
* Fixes check for the default Lua version set in the user's home configuration
* Fixes an issue on Windows where it would incorrectly revoke permissions
from the current user when installing
## What's new in LuaRocks 3.6.0
* Adds a double-check step to verify that all files from a rock are installed
* Improve resilience of the manifest reader to deal with manifests
written with older versions of LuaRocks lower than 3.0
* `luarocks pack` now checks that the directory inside the archive being packed
as a `.src.rock` actually exists, refusing to pack an invalid rock from
a badly configured rockspec.
* Fixes behavior of `luarocks pack` when the `url` entry of a rockspec
points to a bare file.
* Remove an entry from the manifest if the rock itself is already missing
* The `configure` script now checks that the version of `lua.h`
found matches that of the Lua interpreter detected or configured
* Fixes the renaming of scripts when multiple versions are installed
* Fixes availability check for `svn` for rockspecs using Subversion
* Fixes for running with an empty PATH environment variable
* Portability improvements:
* Windows: vcvarsall.bat output is now properly redirected to NUL
meaning that the output of `luarocks path` can be used in scripts
* Fixes autodetection for Cygwin
* Handles macOS versions greater than 10.10
* Adds platform specific configurations for NetBSD
* Respects CC/CFLAGS/LDFLAGS on FreeBSD
* Luacheck now runs on the LuaRocks CI
* Distributed binaries are built using Lua 5.3
## What's new in LuaRocks 3.5.0
This is a small release:
* Added support for MSYS2 and Mingw-w64
* Reverted the change in MSVC environment variable set up script
* Fixes a bug where `--verbose` raised an exception with a nil argument
* Added proper error messages when lua.h is invalid
## What's new in LuaRocks 3.4.0
### Features
* `luarocks make` now supports `--only-deps`
* `luarocks make` new flag: `--no-install`, which only performs
the compilation step
* `--deps-only` is now an alias for `--only-deps` (useful in case
you always kept getting it wrong, like me!)
* `luarocks build` and `luarocks make` now support using
`--pin` and `--only-deps` at the same time, to produce a lock
file of dependencies in use without installing the main package.
* `luarocks show` can now accept a substring of the rock's name,
like `list`.
* `luarocks config`: when running without system-wide permissions,
try storing the config locally by default.
Also, if setting both lua_dir and --lua-version explicitly,
auto-switch the default Lua version.
* `luarocks` with no arguments now prints more info about the
location of the Lua interpreter which is being used
* `luarocks new_version` now keeps the old URL if the MD5 doesn't
change.
* `DEPS_DIR` is now accepted as a generic variable for dependency
directories (e.g. `luarocks install foo DEPS_DIR=/usr/local`)
* Handle quoting of arguments at the application level, for
improved Windows support
* All-in-one binary bundles `dkjson`, so it runs `luarocks upload`
without requiring any additional dependencies.
* Tweaks for Terra compatibility
### Fixes
* win32: generate proper temp filename
* No longer assume that Lua 5.3 is built with compat libraries and
bundles `bit32`
* `luarocks show`: do not crash when rockspec description is empty
* When detecting the location of `lua.h`, check that its version
matches the version of Lua being used
* Fail gracefully when a third-party tool (wget, etc.) is missing
* Fix logic for disabling mirrors that return network errors
* Fix detection of Lua path based on arg variable
* Fix regression on dependency matching of luarocks.loader
## What's new in LuaRocks 3.3.1
This is a bugfix release:
* Fix downgrades of rocks containing directories: stop it
from creating spurious 0-byte files where directories have been
* Fix error message when attempting to copy a file that is missing
* Detect OpenBSD-specific dependency paths
## What's new in LuaRocks 3.3.0
### Features
* **Dependency pinning**
* Adds a new flag called `--pin` which creates a `luarocks.lock`
when building a rock with `luarocks build` or `luarocks make`.
This lock file contains the exact version numbers of every
direct or indirect dependency of the rock (in other words,
it is the transitive closure of the dependencies.)
For `make`, the `luarocks.lock` file is created in the current
directory.
The lock file is also installed as part of the rock in
its metadata directory alongside its rockspec.
When using `--pin`, if a lock file already exists, it is
ignored and overwritten.
* When building a rock with `luarocks make`, if there is a
`luarocks.lock` file in the current directory, the exact
versions specified there will be used for resolving dependencies.
* When building a rock with `luarocks build`, if there is a
`luarocks.lock` file in root of its sources, the exact
versions specified there will be used for resolving dependencies.
* When installing a `.rock` file with `luarocks install`, if the
rock contains a `luarocks.lock` file (i.e., if its dependencies
were pinned with `--pin` when the rock was built), the exact
versions specified there will be used for resolving dependencies.
* Improved VM type detection to support moonjit
* git: Support for shallow recommendations
* Initial support for Windows on ARM
* Support for building 64-bit Windows all-in-one binary
* More filesystem debugging output when using `--verbose` (now it
reports operations even when using LuaFileSystem-backed implementations)
* `--no-manifest` flag for creating a package without updating the
manifest files
* `--no-doc` flag is now supported by `luarocks make`
### Performance improvements
* Speed up dependency checks
* Speed up installation and deletion when deploying files
* build: do not download sources when when building with `--only-deps`
* New flag `--check-lua-versions`: when a rock name is not found, only
checks for availability in other Lua versions if this flag is given
### Fixes
* safer rollback on installation failure
* config: fix `--unset` flag
* Fix command name invocations with dashes (e.g. `luarocks-admin make-manifest`)
* Fix fallback to PATH search when Lua interpreter is not configured
* Windows: support usernames with spaces
* Windows: fix generation of temporary filenames (#1058)
* Windows: force `.lib` over `.dll` extension when resolving `LUALIB`
## What's new in LuaRocks 3.2.1
* fix installation of LuaRocks via rockspec (`make bootstrap` and
`luarocks install`): correct a problem in the initialization of the
luarocks.fs module and its interaction with the cfg module.
* fix luarocks build --pack-binary-rock --no-doc
* fix luarocks build --branch
* luarocks init: fix Lua wrapper for interactive mode
* fix compatibility issues with command add-ons loaded via
luarocks.cmd.external modules
* correct override of config values via CLI flags
## What's new in LuaRocks 3.2.0
LuaRocks 3.2.0 now uses argument parsing based on argparse
instead of a homegrown parser. This was implemented by Paul
Ouellette as his Google Summer of Code project, mentored by
Daurnimator.
Release highlights:
* Bugfix: luarocks path does not change the order of pre-existing path
items when prepending or appending to path variables
* Bugfix: fix directory detection on the Mac
* When building with --force-config, LuaRocks now never uses the
"project" directory, but only the forced configuration
* Lua libdir is now only checked for commands/platforms that really
need to link Lua explicitly
* LuaJIT is now detected dynamically
* RaptorJIT is now detected as a LuaJIT variant
* Improvements in Lua autodetection at runtime
* luarocks new_version: new option --dir
* luarocks which: report modules found via package.path and
package.cpath as well
* install.bat: Improved detection for Visual Studio 2017 and higher
* Bundled LuaSec in all-in-one binary bumped to version 0.8.1
## What's new in LuaRocks 3.1.3
This is another bugfix release, that incldes a couple of fixes,
including better Lua detection, and fixes specific to MacOS and
FreeBSD.
## What's new in LuaRocks 3.1.2
This is again a small fix release.
## What's new in LuaRocks 3.1.1
This is a hotfix release fixing an issue that affected initialization
in some scenarios.
## What's new in LuaRocks 3.1.0
### More powerful `luarocks config`
The `luarocks config` command used to only list the current
configuration. It is now able to query and also _set_ individual
values, like `git config`. You can now do things such as:
luarocks config variables.OPENSSL_DIR /usr/local/openssl
luarocks config lua_dir /usr/local
luarocks config lua_version 5.3
and it will rewrite your luarocks configuration to store that value
for later reuse. Note that setting `lua_version` will make that Lua
version the default for `luarocks` invocations (you can always
override on a per-call basis with `--lua-version`.
You can specify the scope where you will apply the configuration
change: system-wide, to the user's home config (with --local), or
specifically to a project, if you run the command from within a
project directory initialized with `luarocks init`.
### New `--global` flag
Some users prefer that LuaRocks default to system-wide installations,
some users prefer to install everything to their home directory. The
`local_by_default` configuration file controls this preference: when
it is off, the `--local` file triggers user-specific. Before 3.1.0
there was no convenient way to trigger system-wide installations when
`local_by_default` was set to true. LuaRocks 3.1.0 adds a `--global`
flag to this purpose. To enable local-by-default, you can now do:
luarocks config local_by_default true
### `luarocks make` can deal with patches
A rockspec can include embedded patch files, which are applied when a
source rock is built. Now, when you run `luarocks make` on a source
tree unpacked with `luarocks unpack`, the patches will be applied as
well (and a hidden lockfile is created to avoid the patches to be
re-applied incorrectly).
### Smarter defaults when working with projects
When working on a project initialized with `luarocks init`, the
presence of a ./.luarocks/config-5.x.lua file will be enough to detect
the project-based workflow and have `luarocks` default to that 5.x
version. That means the `./luarocks` wrapper becomes less necessary;
the `luarocks` from your $PATH will deal with the project just fine,
git-style.
### And more!
There are also other improvements. LuaRocks uses the manifest cache a
bit more aggressively, resulting in increased performance. Also, it no
longer complains with a warning message if the home cache cannot be
created (it just uses a temporary dir instead). And of course, the
release includes multiple bugfixes.
## What's new in LuaRocks 3.0.4
* Fork-free platform detection at startup
* Improved detection of the default rockspec in commands such as `luarocks test`
* Various minor bugfixes
## What's new in LuaRocks 3.0.3
LuaRocks 3.0.3 is a minor bugfix release, fixing a regression in
luarocks.loader introduced in 3.0.2.
## What's new in LuaRocks 3.0.2
* Improvements in luarocks init, new --reset flag
* write_rockspec: --lua-version renamed to --lua-versions
* Improved behavior in module autodetection
* Bugfixes in luarocks show
* Fix upgrade/downgrade when a single rock has clashing module
filenames (should fix the issue when downgrading luasec)
* Fix for autodetected external dependencies with non-alphabetic
characters (should fix the libstdc++ issue when installing xml)
## What's new in LuaRocks 3.0.1
* Numerous bugfixes including:
* Handle missing global `arg`
* Fix umask behavior
* Do not overwrite paths in format 5.x.y when cleaning up path
variables (#868)
* Do not detect files under lua_modules as part of your sources
when running `luarocks write_rockspec`
* Windows: do not hardcode MINGW in the all-in-one binary: instead
it properly detects when running from a Visual Studio Developer
Console and uses that compiler instead
* configure: --sysconfdir was fixed to its correct meaning: it now
defaults to /etc and not /etc/luarocks (`/luarocks` is appended to the
value of sysconfdir)
* configure: fixed --force-config
* Store Lua location in config file, so that a user can run `luarocks
init --lua-dir=/my/lua/location` and have that location remain active
for that project
* Various improvements to the Unix makefile, including $(DESTDIR)
support and an uninstall rule
* Autodetect FreeBSD-style include paths (/usr/include/lua5x/)
## What's new in LuaRocks 3.0.0
- [New rockspec format](#new-rockspec-format)
- [New commands](#new-commands), including [luarocks init](https://github.com/luarocks/luarocks/wiki/Project:-LuaRocks-per-project-workflow) for per-project workflows
- [New flags](#new-flags), including `--lua-dir` and `--lua-version` for using multiple Lua installs with a single LuaRocks
- [New build system](#new-build-system)
- [General improvements](#general-improvements), including [namespaces](https://github.com/luarocks/luarocks/wiki/Namespaces)
- [User-visible changes](#user-visible-changes), including some **breaking changes**
- [Internal changes](#internal-changes)
### New rockspec format
**New rockspec format:** if you add `rockspec_format = "3.0"` to your rockspec,
you can use a number of new features. Note that these rockspecs will only work
with LuaRocks 3.0 and above, but older versions will detect that directive and
fail gracefully, giving the user a message telling them to upgrade. Rockspecs
without the `rockspec_format` directive are interpreted as having format 1.0
(the same format from LuaRocks series 1.x and 2.x) and are still supported.
The following features are only enabled if `rockspec_format = "3.0"` is set in
the rockspec:
* Build type `builtin` is the default if `build.type` is not specified.
* The `builtin` type auto-detects modules using the same heuristics as
`write_rockspec` (for example, if you have a `src` directory). With
auto-detection of the build type and modules, many rockspecs don't
even need an explicit `build` table anymore.
* New table `build_dependencies`: dependencies used only for running
`luarocks build` but not when installing binary rocks.
* New table `test_dependencies`: dependencies used only for running `luarocks test`
* New table `test`: settings for configuring the behavior of `luarocks test`.
Supports a `test.type` field so that the test backend can be specified.
Currently supported test backends are:
* `"busted"`, for running [Busted](https://olivinelabs.com/busted)
* `"command"`, for running a plain command.
* Custom backends can be loaded via `test_dependencies`
* New field `build.macosx_deployment_target = "10.9"` is supported in Mac platforms,
and adjusts `$(CC)` and `$(LD)` variables to export the corresponding
environment variable.
* LuaJIT can be detected in dependencies and uses version reported by the
running interpreter: e.g. `"luajit >= 2.1"`.
* Auto-detection of `source.dir` is improved: when the tarball contains
only one directory at the root, assume that is where the sources are.
* New `description` fields:
* `labels`, an array of strings;
* `issues_url`, URL to the project's bug tracker.
* `cmake` build type now supports `build.build_pass` and `build_install_pass`
to disable `make` passes.
* `git` fetch type fetches submodules by default.
* Patches added in `patches` can create and delete files, following standard
patch rules.
### New commands
* **New command:** `luarocks init`. This command performs the setup for using
LuaRocks in a "project directory":
* it creates a `lua_modules` directory in the current directory for
storing rocks
* it creates a `.luarocks/config-5.x.lua` local configuration file
* it creates `lua` and `luarocks` wrapper scripts in the current
directory that are configured to use `lua_modules` and
`.luarocks/config-5.x.lua`
* if there are no rockspecs in the current directory, it creates one
based on the directory name and contents.
* **New command:** `luarocks test`. It runs a rock's test suite, as specified
in the new `test` section of the rockspec file. It also does some
autodetection, so it already works with many existing rocks as well.
* **New command:** `luarocks which`. Given the name of an installed, it tells
you which rock it is a part of. For example, `luarocks which lfs`
will tell you it is a part of `luafilesystem` (and give the full
path name to the module). In this sense, `luarocks which` is the
dual command to `luarocks show`.
### New flags
* **New flags** `--lua-dir` and `--lua-version` which can be used with
all commands. This allows you to specify a Lua version and installation
prefix at runtime, so a single LuaRocks installation can be used
to manage packages for any Lua version. It is no longer necessary to
install separate copies of LuaRocks to manage packages for Lua 5.x
and 5.y.
* **New flags** added to `luarocks show`: `--porcelain`, giving a stable
script-friendly output (named after the Git `--porcelain` flag that
serves the same purpose) and `--rock-license`.
* **New flag** `--temp-key` for `luarocks upload`, allowing you to easily
upload rocks into an alternate account without disrupting the
stored configuration of your main account.
* **New flag** `--dev`, for enabling development-branch sub-repositories.
This adds support for easily requesting `dev` modules from LuaRocks.org, as in:
`luarocks install --dev luafilesystem`. The list of URLs configured
in `rocks_servers` is prepended with a list containing "/dev" in their paths.
* `luarocks config`, when called with no arguments, now displays your
entire active configuration, using the same Lua syntax as the configuration
file. It is sensitive to the flags given to it (`--tree`, `--lua-dir`, etc.)
so it presents the resulting configuration produced by loading the
currently-active configuration files and the given flags.
### New build system
**New build system**: the `configure` and `Makefile` scripts were completely
overhauled, making use of LuaRocks 3 features to greatly simplify them:
* Much of the detection and configuration work they performed were moved
to runtime, to make LuaRocks more dynamic and resilient to environment
changes
* The system-package-manager-friendly mode is still available, as the
default target (`make`, formerly `make build`).
* The LuaRocks-as-a-rock mode (`make bootstrap`) is also still available,
and was greatly simplified: it no longer uses custom Makefiles:
LuaRocks installs itself using `luarocks make`, and its own rockspec
uses the `builtin` build mode.
* A new build mode: `make binary` compiles all of LuaRocks into a single
executable, bundling various Lua modules to make it self-sufficient,
such as LuaFileSystem, LuaSocket and LuaSec.
* For version 3.0, this will remain as an option, as we evaluate
its suitability moving forward to become the default mode of
distribution.
* The goal is to eventually use this mode to produce the Windows
version of LuaRocks. We currently include an experimental
`make windows-binary` target which builds a Windows version
using the MinGW-w64 cross-compiler on Linux.
### General improvements
* **New feature:** [namespaces](https://github.com/luarocks/luarocks/wiki/Namespaces):
you can use `luarocks install user/package` to install a package from a
specific user of the repository.
* Improved defaults for finding external libraries on Linux and Windows.
* Detection of the Lua library and header directories is now done at runtime.
This uses the same machinery that LuaRocks employs for `external_dependencies`
in general (with some added logic to cope with the unfortunate
rampant inconsistency in naming of Lua libraries and header paths
due to lack of upstream standardization).
* `luarocks-admin add` now works with `file://` repositories
* some UI improvements in `luarocks list` and `luarocks search`.
* Preliminary support for the upcoming Lua 5.4: LuaRocks is written in
the common dialect supporting Lua 5.1-5.3 and LuaJIT, but since a
single installation can manage packages for any Lua version now,
it can already manage packages for Lua 5.4 even though that's not
out yet.
### User-visible changes
* **Breaking change:** The support for deprecated unversioned paths
(e.g. `/usr/local/lib/luarocks/rocks/` and `/etc/luarocks/config.lua`)
was removed, LuaRocks will now only create and use paths versioned
to the specific Lua version in use
(e.g. `/usr/local/lib/luarocks/rocks-5.3/` and `/etc/luarocks/config-5.3.lua`).
* **Breaking changes:** `luarocks path` now exports versioned variables
`LUA_PATH_5_x` and `LUA_CPATH_5_x` instead of `LUA_PATH` and `LUA_CPATH`
when those are in use in your system.
* Package paths are sanitized to only reference the current Lua version.
For example, if you have `/some/dir/lua/5.1/` in your `$LUA_PATH` and
you are running Lua 5.2, `luarocks.loader` and the `luarocks` command-line
tool will convert it to `/some/dir/lua/5.2/`.
* LuaRocks now uses `dev` instead of `scm` as the favored version identifier
to describe development versions of a rock, aligning it with the terminology
used in https://luarocks.org. It still understands `scm` as a
compatibility fallback.
* LuaRocks no longer conflates modules `foo` and `foo.init` as being the
same in its internal manifest. Instead, the `luarocks.loader` module
is adapted to handle the `.init` case.
* Wrappers installed using `--tree` now prepend the tree's prefix to their
package paths.
* `luarocks-admin` commands no longer creates an `index.html` file in the
repository by default (it does update it if it already exists)
### Internal changes
* Major improvements in the test suite done by @georgeroman as part of the ongoing
Google Summer of Code 2018 program. The coverage improvements and test suite
speed-ups have been essential in getting the sprint towards LuaRocks 3.0 more
efficient and reliable!
* Modules needed by `luarocks.loader` were moved below the `luarocks.core` namespace.
Modules in `luarocks.core` only depend on other `luarocks.core` modules.
(Notably, `luarocks.core` does not use `luarocks.fs`.)
* Modules representing `luarocks` commands were moved into the `luarocks.cmd` namespace,
and `luarocks.command_line` was renamed to `luarocks.cmd`. Eventually, all CLI-related
code will live under `luarocks.cmd`, as we move towards a clean CLI-API separation,
in preparation for a stable public API.
* Likewise, modules representing `luarocks-admin` commands were moved into the
`luarocks.admin.cmd` namespace.
* New internal objects for representing interaction with the repostories:
`luarocks.queries` and `luarocks.results`
* Type checking rules of file formats were moved into the `luarocks.type` namespace.
|